Keakuratan artikel ini diragukan dan artikel ini perlu diperiksa ulang dengan mencantumkan referensi yang dapat dipertanggungjawabkan. Harap pastikan akurasi artikel ini dengan sumber tepercaya. Lihat diskusi mengenai artikel ini di halaman diskusinya. (October 2026) (Pelajari cara dan kapan saatnya untuk menghapus pesan templat ini) |
Artikel ini menggunakan gaya pengutipan yang tidak konsisten. Sumber referensi yang digunakan dapat diperbaiki dengan mengikuti pedoman pengutipan dan catatan kaki. (Pelajari cara dan kapan saatnya untuk menghapus pesan templat ini) |

Bahasa pemrograman adalah sebuah bahasa yang direkayasa untuk mengekspresikan program komputer,[1] yang biasanya memungkinkan perangkat lunak ditulis dalam bentuk yang dapat dibaca manusia.
Eksekusi suatu program memerlukan sebuah implementasi. Terdapat dua pendekatan utama untuk mengimplementasikan bahasa pemrograman – kompilasi, yaitu program diterjemahkan terlebih dahulu menjadi kode mesin, dan interpretasi, yaitu program dieksekusi secara langsung. Selain kedua pendekatan tersebut, beberapa implementasi menggunakan pendekatan hibrida seperti kompilasi just-in-time dan interpreter bytecode.[2]
Perancangan bahasa pemrograman sangat dipengaruhi oleh arsitektur komputer, dengan sebagian besar bahasa imperatif dirancang berdasarkan arsitektur von Neumann yang banyak digunakan.[3] Sementara bahasa pemrograman awal sangat terkait dengan perangkat keras, bahasa modern sering menyembunyikan detail perangkat keras melalui abstraksi dengan tujuan memungkinkan pembuatan perangkat lunak yang lebih baik dengan usaha yang lebih sedikit. Bahasa-bahasa tersebut dikenal sebagai bahasa tingkat tinggi.[4]
Hubungan dengan bahasa alami
Bahasa pemrograman memiliki beberapa kemiripan dengan bahasa alami, karena keduanya dapat memungkinkan komunikasi gagasan antarmanusia. Program pada umumnya dapat dibaca manusia dan dapat mengekspresikan gagasan yang kompleks, tetapi jenis gagasan yang dapat diekspresikan oleh bahasa pemrograman pada akhirnya terbatas pada ranah komputasi.[5]
Istilah bahasa komputer terkadang digunakan secara bergantian dengan bahasa pemrograman[6] tetapi beberapa pihak menganggap keduanya sebagai konsep yang berbeda. Sebagian berpendapat bahwa bahasa pemrograman merupakan bagian dari bahasa komputer.[7] Sebagian menggunakan istilah bahasa komputer untuk mengklasifikasikan bahasa yang digunakan dalam komputasi tetapi tidak dianggap sebagai bahasa pemrograman.[butuh rujukan] Sebagian lainnya menganggap bahasa pemrograman sebagai konstruksi teoretis untuk memprogram sebuah mesin abstrak, sedangkan bahasa komputer merupakan bagian dari konstruksi tersebut yang berjalan pada komputer fisik dengan sumber daya perangkat keras yang terbatas.[8]
John C. Reynolds menekankan bahwa bahasa spesifikasi formal merupakan bahasa pemrograman sebagaimana bahasa apa pun yang ditujukan untuk eksekusi. Ia berpendapat bahwa format masukan tekstual dan bahkan grafis yang memengaruhi perilaku komputer merupakan bahasa pemrograman, meskipun umumnya tidak lengkap-Turing, serta menyatakan bahwa ketidaktahuan mengenai konsep bahasa pemrograman merupakan alasan dari banyak kelemahan dalam format masukan.[9]
Sejarah
Perkembangan awal
Komputer pertama yang dapat diprogram ditemukan pada tahun 1940-an, dan bersamaan dengannya muncul bahasa pemrograman pertama.[10][11] Komputer-komputer awal diprogram menggunakan bahasa pemrograman generasi pertama (1GL), yaitu bahasa mesin (instruksi sederhana yang dapat langsung dieksekusi oleh prosesor). Kode ini sangat sulit untuk di-debug dan tidak portabel di antara sistem komputer yang berbeda.[12] Untuk meningkatkan kemudahan pemrograman, bahasa rakitan (atau bahasa pemrograman generasi kedua—2GL) diciptakan. Bahasa-bahasa tersebut berbeda dari bahasa mesin sehingga program lebih mudah dipahami manusia, meskipun tidak meningkatkan portabilitas.[13]
Pada awalnya, sumber daya perangkat keras langka dan mahal, sedangkan sumber daya manusia lebih murah. Oleh karena itu, bahasa yang rumit dan membutuhkan banyak waktu untuk digunakan, tetapi lebih dekat dengan perangkat keras demi efisiensi yang lebih tinggi, lebih disukai.[14] Pengenalan bahasa pemrograman tingkat tinggi (bahasa pemrograman generasi ketiga—3GL) merevolusi pemrograman. Bahasa-bahasa ini mengabstraksikan detail perangkat keras dan dirancang untuk mengekspresikan algoritme yang lebih mudah dipahami manusia. Misalnya, ekspresi aritmetika kini dapat ditulis dalam notasi simbolis dan kemudian diterjemahkan menjadi kode mesin yang dapat dieksekusi oleh perangkat keras.[13] Pada tahun 1957, Fortran (FORmula TRANslation) diciptakan. Sering dianggap sebagai bahasa pemrograman tingkat tinggi terkompilasi pertama,[13][15] Fortran tetap digunakan hingga abad ke-21.[16]
1960-an dan 1970-an

Sekitar tahun 1960, mainframe pertama—komputer serbaguna—dikembangkan, meskipun hanya dapat dioperasikan oleh para profesional dan biayanya sangat tinggi. Data dan instruksi dimasukkan melalui kartu berlubang, yang berarti tidak ada masukan yang dapat ditambahkan ketika program sedang berjalan. Oleh karena itu, bahasa yang dikembangkan pada masa ini dirancang dengan interaksi seminimal mungkin.[18] Setelah ditemukannya mikroprosesor, komputer pada tahun 1970-an menjadi jauh lebih murah.[19] Komputer baru juga memungkinkan interaksi pengguna yang lebih besar, yang didukung oleh bahasa pemrograman yang lebih baru.[20]
Lisp, yang diimplementasikan pada tahun 1958, merupakan bahasa pemrograman fungsional pertama.[21] Berbeda dengan Fortran, Lisp mendukung rekursi dan ekspresi kondisional,[22] serta memperkenalkan manajemen memori dinamis pada heap dan pengumpulan sampah otomatis.[23] Selama beberapa dekade berikutnya, Lisp mendominasi aplikasi kecerdasan buatan.[24] Pada tahun 1978, bahasa fungsional lainnya, ML, memperkenalkan tipe terinferensi dan parameter polimorfik.[20][25]
Setelah ALGOL (ALGOrithmic Language) dirilis pada tahun 1958 dan 1960,[26] bahasa tersebut menjadi standar dalam literatur komputasi untuk menjelaskan algoritme. Meskipun keberhasilan komersialnya terbatas, sebagian besar bahasa imperatif populer—termasuk C, Pascal, Ada, C++, Java, dan C#—secara langsung atau tidak langsung merupakan turunan dari ALGOL 60.[27][16] Inovasi yang kemudian diadopsi oleh bahasa pemrograman berikutnya mencakup portabilitas yang lebih besar dan penggunaan pertama tata bahasa bebas konteks, yaitu tata bahasa BNF.[28] Simula, bahasa pertama yang mendukung pemrograman berorientasi objek (termasuk subtipe, pengiriman dinamis, dan pewarisan), juga merupakan turunan ALGOL dan mencapai keberhasilan komersial.[29] C, turunan ALGOL lainnya, tetap populer hingga abad ke-21. C memungkinkan akses ke operasi mesin tingkat rendah dibandingkan bahasa-bahasa sezamannya. Kekuatan dan efisiensinya, yang sebagian dihasilkan oleh operasi pointer yang fleksibel, diperoleh dengan mengorbankan kemudahan penulisan kode yang benar.[20]
Prolog, yang dirancang pada tahun 1972, merupakan bahasa pemrograman logika pertama, yang berkomunikasi dengan komputer menggunakan notasi logika formal.[30][31] Dalam pemrograman logika, pemrogram menentukan hasil yang diinginkan dan membiarkan interpreter menentukan cara mencapainya.[32][31]
1980-an hingga 2000-an

Selama tahun 1980-an, penemuan komputer pribadi mengubah peran yang digunakan oleh bahasa pemrograman.[33] Bahasa-bahasa baru yang diperkenalkan pada tahun 1980-an mencakup C++, sebuah superset dari C yang dapat mengompilasi program C tetapi juga mendukung kelas dan pewarisan.[34] Ada dan bahasa-bahasa baru lainnya memperkenalkan dukungan untuk konkurensi.[35] Pemerintah Jepang berinvestasi besar-besaran dalam apa yang disebut bahasa pemrograman generasi kelima, yang menambahkan dukungan konkurensi pada konstruksi pemrograman logika, tetapi bahasa-bahasa tersebut kalah bersaing dengan bahasa lain yang mendukung konkurensi.[36][37]
Akibat pertumbuhan pesat Internet dan World Wide Web pada tahun 1990-an, bahasa pemrograman baru diperkenalkan untuk mendukung halaman web dan jaringan.[38] Java, yang didasarkan pada C++ dan dirancang untuk meningkatkan portabilitas antar sistem serta keamanan, meraih keberhasilan dalam skala besar karena fitur-fitur tersebut penting bagi banyak aplikasi Internet.[39][40] Perkembangan lainnya adalah bahasa skrip bertipe dinamis—Python, JavaScript, PHP, dan Ruby—yang dirancang untuk menghasilkan program kecil secara cepat guna mengoordinasikan aplikasi yang sudah ada. Karena integrasinya dengan HTML, bahasa-bahasa tersebut juga digunakan untuk membangun halaman web yang dihosting pada server.[41][42]
2000-an hingga sekarang
Selama tahun 2000-an, terjadi perlambatan dalam pengembangan bahasa pemrograman baru yang mencapai popularitas luas.[43] Salah satu inovasinya adalah pemrograman berorientasi layanan, yang dirancang untuk memanfaatkan sistem komputasi terdistribusi yang komponennya terhubung melalui jaringan. Layanan serupa dengan objek dalam pemrograman berorientasi objek, tetapi berjalan dalam proses yang terpisah.[44] C# dan F# saling memadukan gagasan antara pemrograman imperatif dan fungsional.[45] Setelah tahun 2010, beberapa bahasa baru—Rust, Go, Swift, Zig, dan Carbon—bersaing untuk perangkat lunak yang kritis terhadap kinerja, yaitu bidang yang secara historis menggunakan C.[46] Sebagian besar bahasa pemrograman baru menggunakan pengetikan statis, sedangkan sejumlah kecil bahasa baru menggunakan pengetikan dinamis seperti Julia.[47]
Beberapa bahasa pemrograman baru diklasifikasikan sebagai bahasa pemrograman visual seperti Scratch dan LabVIEW. Selain itu, beberapa bahasa tersebut memadukan penggunaan pemrograman tekstual dan visual seperti Ballerina.[48][49][50] Tren ini juga menyebabkan pengembangan proyek yang membantu dalam mengembangkan bahasa visual baru seperti Blockly oleh Google.[51] Banyak mesin permainan seperti Unreal dan Unity mendukung skrip visual.[52][53]
Definisi
Suatu bahasa dapat didefinisikan berdasarkan sintaks (bentuk) dan semantik (makna), dan sering kali didefinisikan melalui spesifikasi bahasa formal.
Sintaks


Bentuk permukaan suatu bahasa pemrograman dikenal sebagai sintaks-nya. Sebagian besar bahasa pemrograman sepenuhnya berbasis teks;[butuh rujukan] bahasa-bahasa tersebut menggunakan urutan teks yang mencakup kata, angka, dan tanda baca, seperti bahasa alami tertulis. Sebaliknya, beberapa bahasa pemrograman bersifat grafis, menggunakan hubungan visual antara simbol untuk menentukan sebuah program.
Sintaks suatu bahasa menjelaskan kombinasi simbol yang mungkin membentuk program yang benar secara sintaksis. Makna yang diberikan kepada suatu kombinasi simbol ditangani oleh semantik (baik formal maupun yang dikodekan secara langsung dalam sebuah implementasi referensi). Karena sebagian besar bahasa bersifat tekstual, artikel ini membahas sintaks tekstual.
Sintaks bahasa pemrograman biasanya didefinisikan menggunakan kombinasi ekspresi reguler (untuk struktur leksikal) dan Bentuk Backus–Naur (untuk struktur gramatikal). Berikut adalah tata bahasa sederhana yang didasarkan pada Lisp:
expression ::= atom | list atom ::= number | symbol number ::= [+-]?['0'-'9']+ symbol ::= ['A'-'Z''a'-'z'].* list ::= '(' expression* ')'
Tata bahasa ini menentukan hal-hal berikut:
- sebuah expression adalah atom atau list;
- sebuah atom adalah number atau symbol;
- sebuah number adalah rangkaian tidak terputus yang terdiri dari satu atau lebih digit desimal, yang secara opsional diawali tanda plus atau minus;
- sebuah symbol adalah sebuah huruf yang diikuti oleh nol atau lebih karakter alfabet apa pun (tidak termasuk spasi); dan
- sebuah list adalah pasangan tanda kurung yang cocok, dengan nol atau lebih expression di dalamnya.
Berikut adalah contoh urutan token yang terbentuk dengan baik dalam tata bahasa ini: 12345, () dan (a b c232 (1)).
Tidak semua program yang benar secara sintaksis benar secara semantik. Banyak program yang benar secara sintaksis tetap tidak terbentuk dengan benar menurut aturan bahasa tersebut dan dapat (bergantung pada spesifikasi bahasa dan kebenaran implementasinya) menghasilkan kesalahan saat penerjemahan atau eksekusi. Dalam beberapa kasus, program semacam itu dapat menunjukkan perilaku tidak terdefinisi. Bahkan ketika suatu program terdefinisi dengan baik dalam suatu bahasa, program tersebut masih dapat memiliki makna yang tidak dimaksudkan oleh orang yang menulisnya.
Dengan menggunakan bahasa alami sebagai contoh, suatu kalimat yang benar secara gramatikal mungkin tidak dapat diberi makna atau mungkin merupakan kalimat yang salah:
- "Colorless green ideas sleep furiously" benar secara gramatikal, tetapi tidak memiliki makna yang diterima secara umum.
- "John is a married bachelor" benar secara gramatikal tetapi mengungkapkan makna yang tidak mungkin benar.
Fragmen bahasa C berikut benar secara sintaksis, tetapi melakukan operasi yang tidak didefinisikan secara semantik (operasi *p >> 4 tidak memiliki makna untuk nilai yang memiliki tipe kompleks dan p->im tidak didefinisikan karena nilai p merupakan pointer null):
complex*p=NULL; complexabs_p=sqrt(*p>>4+p->im);
Jika deklarasi tipe pada baris pertama dihilangkan, program akan menghasilkan kesalahan pada variabel p yang tidak terdefinisi selama kompilasi. Namun, program tersebut tetap benar secara sintaksis karena deklarasi tipe hanya memberikan informasi semantik.
Tata bahasa yang diperlukan untuk menentukan bahasa pemrograman dapat diklasifikasikan berdasarkan posisinya dalam hierarki Chomsky. Sintaks sebagian besar bahasa pemrograman dapat ditentukan menggunakan tata bahasa Tipe-2, yaitu tata bahasa bebas konteks.[54] Beberapa bahasa, termasuk Perl dan Lisp, mengandung konstruksi yang memungkinkan eksekusi selama tahap penguraian. Bahasa yang memiliki konstruksi yang memungkinkan pemrogram mengubah perilaku pengurai membuat analisis sintaks menjadi masalah yang tidak dapat diputuskan, dan secara umum mengaburkan perbedaan antara penguraian dan eksekusi.[55] Berbeda dengan sistem makro Lisp dan blok BEGIN milik Perl, yang dapat berisi perhitungan umum, makro C hanya merupakan penggantian string dan tidak memerlukan eksekusi kode.[56]
Semantik
Templat:Logical connectives sidebar
Semantik mengacu pada makna dari konten yang sesuai dengan sintaks suatu bahasa.
Semantik statis
Semantik statis mendefinisikan batasan pada struktur teks yang valid yang sulit atau tidak mungkin diungkapkan dalam formalisme sintaksis standar.[57][Verifikasi gagal] Untuk bahasa terkompilasi, semantik statis pada dasarnya mencakup aturan semantik yang dapat diperiksa pada waktu kompilasi. Contohnya adalah memeriksa bahwa setiap pengenal dideklarasikan sebelum digunakan (dalam bahasa yang mengharuskan deklarasi tersebut) atau bahwa label pada bagian-bagian suatu pernyataan case berbeda satu sama lain.[58] Banyak batasan penting dalam jenis ini, seperti memeriksa bahwa pengenal digunakan dalam konteks yang sesuai (misalnya tidak menjumlahkan bilangan bulat dengan nama fungsi), atau bahwa pemanggilan subrutin memiliki jumlah dan tipe argumen yang sesuai, dapat diberlakukan dengan mendefinisikannya sebagai aturan dalam sebuah logika yang disebut sistem tipe. Bentuk analisis statis lainnya, seperti analisis aliran data, juga dapat menjadi bagian dari semantik statis. Bahasa pemrograman seperti Java dan C# memiliki analisis penugasan pasti, suatu bentuk analisis aliran data, sebagai bagian dari semantik statis masing-masing.[59]
Semantik dinamis
Bagian ini membutuhkan rujukan tambahan agar kualitasnya dapat dipastikan. Mohon bantu kami mengembangkan artikel ini dengan cara menambahkan rujukan ke sumber tepercaya. Pernyataan tak bersumber bisa saja dipertentangkan dan dihapus. Cari sumber: "Bahasa pemrograman" – berita · surat kabar · buku · cendekiawan · JSTOR |
Setelah data ditentukan, mesin harus diperintahkan untuk melakukan operasi pada data tersebut. Misalnya, semantik dapat menentukan strategi yang digunakan untuk mengevaluasi ekspresi menjadi nilai, atau cara struktur kontrol menjalankan pernyataan secara kondisional. Semantik dinamis (juga dikenal sebagai semantik eksekusi) suatu bahasa menentukan bagaimana dan kapan berbagai konstruksi bahasa harus menghasilkan perilaku program. Terdapat banyak cara untuk mendefinisikan semantik eksekusi. Bahasa alami sering digunakan untuk menentukan semantik eksekusi bahasa yang umum digunakan dalam praktik. Sejumlah besar penelitian akademis dilakukan mengenai semantik bahasa pemrograman formal, yang memungkinkan semantik eksekusi ditentukan secara formal.[60] Hasil penelitian dalam bidang ini memiliki penerapan yang terbatas pada perancangan dan implementasi bahasa pemrograman di luar lingkungan akademis.[61]
Fitur
Sebuah bahasa menyediakan fitur-fitur bagi seorang programmer untuk mengembangkan perangkat lunak. Beberapa fitur penting dijelaskan di bawah ini.
Sistem tipe
Tipe data adalah sekumpulan nilai yang diperbolehkan dan operasi yang dapat dilakukan terhadap nilai-nilai tersebut.[62] Sistem tipe setiap bahasa pemrograman menentukan tipe data apa saja yang tersedia, tipe suatu ekspresi, serta bagaimana kesetaraan tipe dan kompatibilitas tipe berfungsi dalam bahasa tersebut.[63]
Menurut teori tipe, suatu bahasa sepenuhnya bertipe jika spesifikasi setiap operasi menentukan tipe data yang dapat dikenai operasi tersebut.[64] Sebaliknya, bahasa tanpa tipe, seperti sebagian besar bahasa rakitan, memungkinkan operasi apa pun dilakukan pada data apa pun, umumnya berupa urutan bit dengan berbagai panjang.[64] Dalam praktiknya, meskipun hanya sedikit bahasa yang sepenuhnya bertipe, sebagian besar menawarkan tingkat pengetikan tertentu.[64]
Karena tipe yang berbeda (seperti bilangan bulat dan bilangan titik-mengambang) merepresentasikan nilai dengan cara yang berbeda, hasil yang tidak terduga dapat terjadi jika suatu tipe digunakan ketika tipe lain diharapkan. Pemeriksaan tipe akan menandai kesalahan ini, biasanya pada saat waktu kompilasi (pemeriksaan tipe pada saat runtime lebih mahal).[65] Dengan pengetikan kuat, kesalahan tipe selalu dapat dideteksi kecuali variabel secara eksplisit di-cast ke tipe yang berbeda. Pengetikan lemah terjadi ketika bahasa mengizinkan casting implisit—misalnya, untuk memungkinkan operasi antara variabel dengan tipe yang berbeda tanpa programmer melakukan konversi tipe secara eksplisit. Semakin banyak kasus ketika koersi tipe diizinkan, semakin sedikit kesalahan tipe yang dapat dideteksi.[66]
Tipe yang umum didukung
Bahasa pemrograman awal sering kali hanya mendukung tipe numerik bawaan, seperti bilangan bulat (bertanda dan tidak bertanda) dan titik-mengambang (untuk mendukung operasi pada bilangan riil yang bukan bilangan bulat). Sebagian besar bahasa pemrograman mendukung beberapa ukuran bilangan titik-mengambang (sering disebut float dan double) dan bilangan bulat, bergantung pada ukuran dan presisi yang diperlukan oleh programmer. Menyimpan bilangan bulat dalam tipe yang terlalu kecil untuk merepresentasikannya menyebabkan luapan bilangan bulat. Cara yang paling umum untuk merepresentasikan bilangan negatif dengan tipe bertanda adalah komplemen dua, meskipun komplemen satu juga digunakan.[67] Tipe umum lainnya meliputi Boolean—yang bernilai benar atau salah—dan karakter—secara tradisional berukuran satu bita, yang cukup untuk merepresentasikan semua karakter ASCII.[68]
Larik adalah tipe data yang elemen-elemennya, dalam banyak bahasa, harus terdiri atas satu tipe dengan panjang tetap. Bahasa lain mendefinisikan larik sebagai referensi ke data yang disimpan di tempat lain dan mendukung elemen dengan tipe yang berbeda-beda.[69] Bergantung pada bahasa pemrograman, urutan beberapa karakter yang disebut string dapat didukung sebagai larik karakter atau sebagai tipe primitif tersendiri.[70] String dapat memiliki panjang tetap atau variabel, yang memungkinkan fleksibilitas lebih besar dengan mengorbankan ruang penyimpanan yang lebih besar dan kompleksitas tambahan.[71] Tipe data lain yang mungkin didukung meliputi list,[72] larik asosiatif (tak berurutan) yang diakses melalui kunci,[73] record yang memetakan data ke nama-nama dalam struktur berurutan,[74] dan tuple—mirip dengan record tetapi tanpa nama untuk bidang data.[75] Pointer menyimpan alamat memori, biasanya merujuk pada lokasi di heap tempat data lain disimpan.[76]
Tipe yang ditentukan pengguna yang paling sederhana adalah tipe ordinal, yang sering disebut enumerasi, yang nilainya dapat dipetakan ke himpunan bilangan bulat positif.[77] Sejak pertengahan 1980-an, sebagian besar bahasa pemrograman juga mendukung tipe data abstrak, yang representasi data dan operasinya disembunyikan dari pengguna, yang hanya dapat mengakses suatu antarmuka.[78] Manfaat abstraksi data dapat mencakup peningkatan keandalan, pengurangan kompleksitas, berkurangnya kemungkinan tabrakan nama, serta memungkinkan struktur data yang mendasarinya diubah tanpa klien perlu mengubah kodenya.[79]
Pengetikan statis dan dinamis
Dalam pengetikan statis, semua ekspresi telah ditentukan tipenya sebelum program dijalankan, biasanya pada saat kompilasi.[64] Sebagian besar bahasa pemrograman yang banyak digunakan dan bertipe statis mengharuskan tipe variabel ditentukan secara eksplisit. Dalam beberapa bahasa, tipe bersifat implisit; salah satu bentuknya adalah ketika kompilator dapat menyimpulkan tipe berdasarkan konteks. Kelemahan pengetikan implisit adalah kemungkinan kesalahan tidak terdeteksi.[80] Inferensi tipe lengkap secara tradisional dikaitkan dengan bahasa fungsional seperti Haskell dan ML.[81]
Dengan pengetikan dinamis, tipe tidak melekat pada variabel, tetapi hanya pada nilai yang dikodekan di dalamnya. Satu variabel dapat digunakan kembali untuk nilai dengan tipe yang berbeda. Meskipun hal ini memberikan fleksibilitas yang lebih besar kepada programmer, konsekuensinya adalah keandalan yang lebih rendah dan kemampuan bahasa pemrograman yang lebih terbatas untuk memeriksa kesalahan.[82] Beberapa bahasa memungkinkan variabel bertipe tipe union, yang dapat diberi nilai dengan tipe apa pun, sebagai pengecualian terhadap aturan pengetikan statis yang biasanya berlaku.[83]
Konkurensi
Dalam komputasi, beberapa instruksi dapat dijalankan secara bersamaan. Banyak bahasa pemrograman mendukung konkurensi pada tingkat instruksi dan tingkat subprogram.[84] Pada abad ke-21, daya pemrosesan tambahan pada komputer semakin banyak diperoleh melalui penggunaan prosesor tambahan, sehingga programmer perlu merancang perangkat lunak yang menggunakan beberapa prosesor secara bersamaan untuk mencapai kinerja yang lebih baik.[85] Bahasa terinterpretasi seperti Python dan Ruby tidak mendukung penggunaan beberapa prosesor secara konkuren.[86] Bahasa pemrograman lain mendukung pengelolaan data yang digunakan bersama oleh thread yang berbeda dengan mengendalikan urutan eksekusi instruksi penting melalui penggunaan semafor, mengendalikan akses ke data bersama melalui monitor, atau memungkinkan pengiriman pesan antarthread.[87]
Penanganan pengecualian
Banyak bahasa pemrograman menyertakan penangan pengecualian, yaitu bagian kode yang dipicu oleh kesalahan runtime dan dapat menanganinya dengan dua cara utama:[88]
- Terminasi: mematikan program dan menyerahkan kendali kepada sistem operasi. Opsi ini dianggap paling sederhana.
- Pelanjutan: melanjutkan program di dekat tempat pengecualian terjadi. Hal ini dapat memicu terulangnya pengecualian, kecuali penangan pengecualian dapat mengubah nilai untuk mencegah pengecualian tersebut terjadi kembali.
Beberapa bahasa pemrograman mendukung penetapan suatu blok kode untuk dijalankan terlepas dari apakah pengecualian terjadi sebelum kode tersebut tercapai; hal ini disebut finalisasi.[89]
Terdapat pertukaran antara peningkatan kemampuan menangani pengecualian dan penurunan kinerja.[90] Misalnya, meskipun kesalahan indeks larik umum terjadi,[91] C tidak memeriksanya demi alasan kinerja.[90] Meskipun programmer dapat menulis kode untuk menangkap pengecualian yang ditentukan pengguna, hal tersebut dapat membuat program menjadi lebih rumit. Pustaka standar dalam beberapa bahasa, seperti C, menggunakan nilai kembalian untuk menunjukkan pengecualian.[92] Beberapa bahasa dan kompilenya memiliki opsi untuk mengaktifkan dan menonaktifkan kemampuan penanganan kesalahan, baik sementara maupun permanen.[93]
Perancangan dan implementasi
Salah satu pengaruh terpenting terhadap perancangan bahasa pemrograman adalah arsitektur komputer. Bahasa imperatif, yang merupakan jenis bahasa yang paling umum digunakan, dirancang agar bekerja dengan baik pada arsitektur von Neumann, yaitu arsitektur komputer digital yang paling umum.[94] Dalam arsitektur von Neumann, memori menyimpan data dan instruksi, sedangkan CPU yang menjalankan instruksi pada data terpisah, dan data harus dialirkan bolak-balik ke CPU. Elemen utama dalam bahasa-bahasa ini adalah variabel, penugasan, dan iterasi, yang lebih efisien daripada rekursi pada mesin tersebut.[95]
Banyak bahasa pemrograman dirancang dari awal, diubah untuk memenuhi kebutuhan baru, dan digabungkan dengan bahasa lain. Banyak di antaranya pada akhirnya tidak lagi digunakan.[butuh rujukan] Kelahiran bahasa pemrograman pada 1950-an didorong oleh keinginan untuk membuat bahasa pemrograman universal yang sesuai untuk semua mesin dan penggunaan, sehingga menghindari kebutuhan menulis kode untuk komputer yang berbeda.[96] Pada awal 1960-an, gagasan tentang bahasa universal ditolak karena adanya perbedaan kebutuhan dari berbagai tujuan penulisan kode.[97]
Pertukaran
Kualitas bahasa pemrograman yang diinginkan mencakup keterbacaan, kemudahan penulisan, dan keandalan.[98] Fitur-fitur ini dapat mengurangi biaya pelatihan programmer dalam suatu bahasa, jumlah waktu yang diperlukan untuk menulis dan memelihara program dalam bahasa tersebut, serta biaya kompilasi kode, dan meningkatkan kinerja saat runtime.[99]
- Meskipun bahasa pemrograman awal sering memprioritaskan efisiensi dibandingkan keterbacaan, keterbacaan menjadi semakin penting sejak 1970-an. Memiliki banyak operasi untuk mencapai hasil yang sama dapat merugikan keterbacaan, demikian pula overloading operator, sehingga operator yang sama dapat memiliki beberapa makna.[100] Fitur lain yang penting bagi keterbacaan adalah ortogonalitas, yang membatasi jumlah konstruksi yang harus dipelajari programmer.[101] Struktur sintaks yang mudah dipahami dan kata-kata khusus yang maknanya langsung terlihat juga mendukung keterbacaan.[102]
- Kemudahan penulisan adalah kemudahan menggunakan suatu bahasa untuk menulis kode yang memecahkan masalah yang diinginkan. Selain fitur-fitur yang sama yang penting bagi keterbacaan,[103] abstraksi—antarmuka yang memungkinkan penyembunyian detail dari klien—dan daya ekspresif—yang memungkinkan program lebih ringkas—juga membantu programmer menulis kode.[104] Bahasa pemrograman paling awal sangat erat kaitannya dengan perangkat keras komputer yang mendasarinya, tetapi seiring waktu dukungan terhadap abstraksi meningkat, sehingga programmer dapat mengungkapkan gagasan yang semakin jauh dari penerjemahan sederhana ke dalam instruksi perangkat keras yang mendasarinya. Karena programmer tidak terlalu terikat pada kompleksitas komputer, program mereka dapat melakukan lebih banyak komputasi dengan usaha programmer yang lebih sedikit.[105] Sebagian besar bahasa pemrograman dilengkapi pustaka standar yang berisi fungsi-fungsi yang umum digunakan.[106]
- Keandalan berarti bahwa program bekerja sesuai spesifikasi dalam berbagai keadaan.[107] Pemeriksaan tipe, penanganan pengecualian, dan pembatasan aliasing (beberapa nama variabel yang mengakses wilayah memori yang sama) semuanya dapat meningkatkan keandalan program.[108]
Perancangan bahasa pemrograman sering kali melibatkan pertukaran.[109] Misalnya, fitur untuk meningkatkan keandalan biasanya mengorbankan kinerja.[110] Peningkatan daya ekspresif akibat banyaknya operator membuat penulisan kode lebih mudah, tetapi mengorbankan keterbacaan.[110]
Pemrograman bahasa alami telah diusulkan sebagai cara untuk menghilangkan kebutuhan akan bahasa khusus untuk pemrograman. Namun, tujuan ini masih jauh dari tercapai dan manfaatnya masih diperdebatkan. Edsger W. Dijkstra berpendapat bahwa penggunaan bahasa formal sangat penting untuk mencegah masuknya konstruksi yang tidak bermakna.[111] Alan Perlis juga menolak gagasan tersebut.[112]
Spesifikasi
Spesifikasi suatu bahasa pemrograman adalah artefak yang dapat digunakan oleh pengguna dan implementator bahasa untuk menyepakati apakah suatu bagian kode sumber merupakan program yang valid dalam bahasa tersebut, dan jika demikian, bagaimana perilakunya.
Spesifikasi bahasa pemrograman dapat memiliki beberapa bentuk, termasuk berikut ini:
- Definisi eksplisit mengenai sintaks, semantik statis, dan semantik eksekusi bahasa. Meskipun sintaks biasanya ditentukan menggunakan tata bahasa formal, definisi semantik dapat ditulis dalam bahasa alami (misalnya, seperti pada bahasa C), atau dalam semantik formal (misalnya, seperti pada spesifikasi Standard ML[113] dan Scheme[114]).
- Deskripsi mengenai perilaku suatu penerjemah untuk bahasa tersebut (misalnya, spesifikasi C++ dan Fortran). Sintaks dan semantik bahasa harus disimpulkan dari deskripsi ini, yang dapat ditulis dalam bahasa alami atau bahasa formal.
- Suatu implementasi referensi atau model, yang terkadang ditulis dalam bahasa yang sedang dispesifikasikan (misalnya, Prolog atau ANSI REXX[115]). Sintaks dan semantik bahasa dinyatakan secara eksplisit dalam perilaku implementasi referensi.
Implementasi
Implementasi bahasa pemrograman adalah proses mengubah suatu program menjadi kode mesin yang dapat dijalankan oleh perangkat keras. Kode mesin kemudian dapat dijalankan dengan bantuan sistem operasi.[116] Bentuk interpretasi yang paling umum dalam kode produksi dilakukan oleh kompilator, yang menerjemahkan kode sumber melalui bahasa tingkat menengah menjadi kode mesin yang dikenal sebagai berkas yang dapat dieksekusi. Setelah program dikompilasi, program akan berjalan lebih cepat dibandingkan metode implementasi lainnya.[117] Beberapa kompilator mampu menyediakan optimisasi tambahan untuk mengurangi penggunaan memori atau komputasi ketika berkas yang dapat dieksekusi dijalankan, tetapi hal ini meningkatkan waktu kompilasi.[118]
Metode implementasi lainnya adalah menjalankan program dengan interpreter, yang menerjemahkan setiap baris perangkat lunak menjadi kode mesin tepat sebelum baris tersebut dijalankan. Meskipun metode ini dapat mempermudah debugging, kelemahan interpretasi adalah kecepatannya 10 hingga 100 kali lebih lambat daripada berkas yang dapat dieksekusi hasil kompilasi.[119] Metode interpretasi hibrida memberikan sebagian manfaat kompilasi dan sebagian manfaat interpretasi melalui kompilasi parsial. Salah satu bentuknya adalah kompilasi tepat waktu, yaitu perangkat lunak dikompilasi terlebih dahulu menjadi bahasa perantara, kemudian menjadi kode mesin tepat sebelum eksekusi.[120]
Bahasa proprietari
Meskipun sebagian besar bahasa pemrograman yang paling umum digunakan memiliki spesifikasi dan implementasi yang sepenuhnya terbuka, banyak bahasa pemrograman hanya ada sebagai bahasa pemrograman proprietari dengan implementasi yang hanya tersedia dari satu vendor, yang dapat mengklaim bahwa bahasa proprietari tersebut merupakan kekayaan intelektual mereka. Bahasa pemrograman proprietari umumnya merupakan bahasa khusus domain atau bahasa skrip internal untuk satu produk; beberapa bahasa proprietari hanya digunakan secara internal oleh vendor, sementara yang lain tersedia bagi pengguna eksternal.[butuh rujukan]
Beberapa bahasa pemrograman berada di perbatasan antara proprietari dan terbuka; misalnya, Oracle Corporation mengklaim hak proprietari atas beberapa aspek bahasa pemrograman Java (bahasa pemrograman)[121], dan bahasa pemrograman C# milik Microsoft, yang sebagian besar komponennya memiliki implementasi terbuka, juga memiliki Common Language Runtime (CLR) sebagai lingkungan tertutup.[122]
Banyak bahasa proprietari digunakan secara luas, meskipun bersifat proprietari; contohnya adalah MATLAB, VBScript, dan Wolfram Language. Beberapa bahasa dapat beralih dari tertutup menjadi terbuka; misalnya, Erlang pada awalnya merupakan bahasa pemrograman internal Ericsson.[123]
Bahasa pemrograman sumber terbuka sangat berguna untuk aplikasi sains terbuka, meningkatkan kemampuan replikasi dan berbagi kode.[124]
Penggunaan
Ribuan bahasa pemrograman yang berbeda telah dibuat, terutama dalam bidang komputasi.[125] Proyek perangkat lunak individual umumnya menggunakan lima bahasa pemrograman atau lebih.[126]
Bahasa pemrograman berbeda dari sebagian besar bentuk ekspresi manusia lainnya karena memerlukan tingkat ketepatan dan kelengkapan yang lebih tinggi. Ketika menggunakan bahasa alami untuk berkomunikasi dengan orang lain, penulis dan pembicara manusia dapat bersikap ambigu dan melakukan kesalahan kecil, tetapi tetap mengharapkan maksud mereka dipahami. Namun, secara kiasan, komputer "melakukan persis apa yang diperintahkan kepadanya" dan tidak dapat "memahami" kode apa yang sebenarnya dimaksudkan untuk ditulis oleh programmer. Kombinasi definisi bahasa, program, dan masukan program harus sepenuhnya menentukan perilaku eksternal yang terjadi ketika program dijalankan, dalam ruang lingkup kendali program tersebut. Sebaliknya, gagasan mengenai suatu algoritme dapat dikomunikasikan kepada manusia tanpa ketepatan yang diperlukan untuk eksekusi dengan menggunakan pseudocode, yang menggabungkan bahasa alami dengan kode yang ditulis dalam bahasa pemrograman.
Bahasa pemrograman menyediakan mekanisme terstruktur untuk mendefinisikan bagian-bagian data serta operasi atau transformasi yang dapat dilakukan secara otomatis terhadap data tersebut. Seorang programmer menggunakan abstraksi yang tersedia dalam bahasa untuk merepresentasikan konsep-konsep yang terlibat dalam suatu komputasi. Konsep-konsep tersebut direpresentasikan sebagai kumpulan elemen paling sederhana yang tersedia (disebut primitif bahasa).[127] Pemrograman adalah proses ketika programmer menggabungkan primitif tersebut untuk menyusun program baru, atau menyesuaikan program yang sudah ada untuk penggunaan baru atau lingkungan yang berubah.
Program untuk komputer dapat dijalankan dalam proses batch tanpa interaksi manusia, atau pengguna dapat mengetikkan perintah dalam sesi interaktif suatu interpreter. Dalam kasus ini, "perintah" tersebut sebenarnya hanyalah program yang eksekusinya dirangkaikan. Ketika suatu bahasa dapat menjalankan perintahnya melalui interpreter (seperti shell Unix atau antarmuka baris perintah lainnya), tanpa kompilasi, bahasa tersebut disebut bahasa skrip.[128]
Mengukur penggunaan bahasa
Menentukan bahasa pemrograman yang paling banyak digunakan merupakan hal yang sulit karena definisi penggunaan berbeda-beda menurut konteks. Suatu bahasa mungkin digunakan dalam jumlah jam programmer yang lebih besar, bahasa lain memiliki jumlah baris kode yang lebih banyak, sedangkan bahasa ketiga mungkin menggunakan waktu CPU paling banyak. Beberapa bahasa sangat populer untuk jenis aplikasi tertentu. Misalnya, COBOL masih banyak digunakan di pusat data perusahaan, sering kali pada mainframe besar;[129][130] Fortran digunakan dalam aplikasi ilmiah dan teknik; Ada digunakan dalam aplikasi kedirgantaraan, transportasi, militer, waktu nyata, dan tertanam; sedangkan C digunakan dalam aplikasi tertanam dan sistem operasi. Bahasa lain digunakan secara rutin untuk menulis berbagai jenis aplikasi.
Berbagai metode untuk mengukur popularitas bahasa, yang masing-masing memiliki bias berbeda terhadap hal yang diukur, telah diusulkan:
- menghitung jumlah iklan pekerjaan yang menyebutkan bahasa tersebut[131]
- jumlah buku yang terjual yang mengajarkan atau menjelaskan bahasa tersebut[132]
- perkiraan jumlah baris kode yang ada yang ditulis dalam bahasa tersebut – yang dapat meremehkan bahasa yang jarang ditemukan dalam pencarian publik[133]
- jumlah referensi bahasa (yaitu, penyebutan nama bahasa) yang ditemukan menggunakan mesin pencari web.
Dengan menggabungkan dan merata-ratakan informasi dari berbagai situs internet, stackify.com melaporkan sepuluh bahasa pemrograman paling populer (berdasarkan urutan popularitas keseluruhan, dari yang tertinggi): Java, C, C++, Python, C#, JavaScript, VB .NET, R, PHP, dan MATLAB.[134]
Per Juni 2024, lima bahasa pemrograman teratas berdasarkan pengukuran Indeks TIOBE adalah Python, C++, C, Java, dan C#. TIOBE menyediakan daftar 100 bahasa pemrograman teratas menurut indeksnya dan memperbarui daftar tersebut setiap bulan.[135]
Menurut staf IEEE Spectrum, bahasa pemrograman yang paling populer saat ini mungkin akan tetap dominan karena cara kerja AI. Akibatnya, bahasa-bahasa baru akan lebih sulit memperoleh popularitas karena programmer tidak akan menulis banyak program dalam bahasa tersebut.[136]
Dialek, varian, dan implementasi
Bab atau bagian ini tidak memiliki referensi atau sumber tepercaya sehingga isinya tidak bisa dipastikan. Tolong bantu perbaiki artikel ini dengan menambahkan referensi yang layak. Bab atau bagian ini akan dihapus bila tidak tersedia referensi ke sumber tepercaya dalam bentuk catatan kaki atau pranala luar. |
Dialek suatu bahasa pemrograman atau bahasa pertukaran data adalah variasi atau ekstensi (yang relatif kecil) dari bahasa tersebut yang tidak mengubah sifat intrinsiknya. Pada bahasa seperti Scheme dan Forth, standar dapat dianggap tidak memadai, tidak sesuai, atau tidak sah oleh implementator, sehingga mereka sering menyimpang dari standar dan menghasilkan dialek baru. Dalam kasus lain, suatu dialek dibuat untuk digunakan dalam bahasa khusus domain, sering kali sebagai subset. Dalam dunia Lisp, sebagian besar bahasa yang menggunakan sintaks dasar ekspresi-S dan semantik mirip Lisp dianggap sebagai dialek Lisp, meskipun perbedaannya dapat sangat besar, seperti antara Racket dan Clojure. Karena suatu bahasa lazimnya memiliki beberapa dialek, programmer yang belum berpengalaman dapat mengalami kesulitan menemukan dokumentasi yang tepat. Bahasa BASIC memiliki banyak dialek.
Klasifikasi
Bahasa pemrograman dapat dideskripsikan berdasarkan klasifikasi tingkat tinggi berikut, meskipun beberapa di antaranya terkadang saling tumpang tindih:[137]
- Imperatif
Bahasa pemrograman imperatif mendukung penerapan logika yang dikodekan sebagai rangkaian operasi yang berurutan. Sebagian besar bahasa yang paling banyak digunakan diklasifikasikan sebagai bahasa imperatif.[138]
- Fungsional
Bahasa pemrograman fungsional mendukung penerapan fungsi secara berturut-turut terhadap parameter yang diberikan. Meskipun banyak peneliti mengapresiasinya karena kesederhanaan dan keanggunannya, masalah efisiensi membuat bahasa-bahasa tersebut tidak diadopsi secara luas.[139]
- Logika
Bahasa pemrograman logika dirancang sedemikian rupa sehingga perangkat lunak, bukan pemrogram, menentukan urutan eksekusi instruksi.[140]
- Berorientasi objek
Pemrograman berorientasi objek (OOP) dicirikan oleh fitur-fitur seperti abstraksi data, pewarisan, dan dispath dinamis. OOP didukung oleh sebagian besar bahasa imperatif populer dan beberapa bahasa fungsional.[138]
- Markup
Meskipun bahasa markah bukan merupakan bahasa pemrograman itu sendiri, bahasa tersebut dapat mendukung integrasi dengan bahasa pemrograman.
- Khusus
Terdapat bahasa untuk tujuan khusus yang tidak mudah dibandingkan dengan bahasa pemrograman lainnya.[141]
Lihat pula
Referensi
- ↑ Information technology — Vocabulary.
- ↑ Sebesta, Robert W. (2023). Concepts of Programming Languages (dalam bahasa Inggris) (Edisi 12th global). Pearson. hlm. 46–51. ISBN 978-1-292-43682-1.
- ↑ Sebesta, Robert (2022). Concepts of Programming Languages: Global Edition (Edisi 12th global). Harlow: Pearson. hlm. 41. ISBN 978-1-292-43682-1.
- ↑ "High-level languages". ada computer science. 11 Mei 2026.
- ↑ Chauhan, Sharad (2013). "10". Programming Languages - Design and Constructs (dalam bahasa English). University Science Press. hlm. 235. ISBN 978-93-81159-41-5. Diakses tanggal 10 September 2025. Like our natural languages, programming languages facilitate the expression and communication between people. However, programming languages differ from natural languages in two ways. First, programming languages also enables communication of ideas between people and computing machines. Second, programming languages have a narrower expressive domain than our natural languages. That is, they facilitate only the communication of computational ideas.
{{cite book}}: Pemeliharaan CS1: Bahasa yang tidak diketahui (link) Pemeliharaan CS1: Tanggal diterjemahkan otomatis (link) - ↑ Robert A. Edmunds, The Prentice-Hall standard glossary of computer terminology, Prentice-Hall, 1985, p. 91
- ↑ Pascal Lando, Anne Lapujade, Gilles Kassel, and Frédéric Fürst, Towards a General Ontology of Computer Programs Diarsipkan 7 Juli 2015 di Wayback Machine, ICSOFT 2007 Diarsipkan 27 April 2010 di Wayback Machine, pp. 163–170
- ↑ R. Narasimhan, Programming Languages and Computers: A Unified Metatheory, pp. 189–247 in Franz Alt, Morris Rubinoff (eds.) Advances in computers, Volume 8, Academic Press, 1994, ISBN0-12-012108-5, p.215: "[...] the model [...] for computer languages differs from that [...] for programming languages in only two respects. In a computer language, there are only finitely many names—or registers—which can assume only finitely many values—or states—and these states are not further distinguished in terms of any other attributes. [author's footnote:] This may sound like a truism but its implications are far-reaching. For example, it would imply that any model for programming languages, by fixing certain of its parameters or features, should be reducible in a natural way to a model for computer languages."
- ↑ John C. Reynolds, "Some thoughts on teaching programming and programming languages", SIGPLAN Notices, Volume 43, Issue 11, November 2008, p.109
- ↑ Hierso, Severine (10 Juni 2022). "Coding From 1849 to 2022: a Guide to The Timeline of Programming Languages". IEEE Computer Society. Diakses tanggal 1 Maret 2026.
- ↑ Gabbrielli & Martini 2023, hlm. 519.
- ↑ Gabbrielli & Martini 2023, hlm. 520–521.
- 1 2 3 Gabbrielli & Martini 2023, hlm. 521.
- ↑ Gabbrielli & Martini 2023, hlm. 522.
- ↑ Sebesta 2012, hlm. 42.
- 1 2 3 Gabbrielli & Martini 2023, hlm. 524.
- ↑ Sebesta 2012, hlm. 42–44.
- ↑ Gabbrielli & Martini 2023, hlm. 523–524.
- ↑ Gabbrielli & Martini 2023, hlm. 527.
- 1 2 3 Gabbrielli & Martini 2023, hlm. 528.
- ↑ "How Lisp Became God's Own Programming Language". twobithistory.org. Diarsipkan dari versi aslinya tanggal 10 April 2024. Diakses tanggal 10 April 2024.
{{cite web}}: Pemeliharaan CS1: Tanggal diterjemahkan otomatis (link) - ↑ Sebesta 2012, hlm. 47–48.
- ↑ Gabbrielli & Martini 2023, hlm. 526.
- ↑ Sebesta 2012, hlm. 50.
- ↑ Sebesta 2012, hlm. 701–703.
- ↑ Gabbrielli & Martini 2023, hlm. 524–525.
- ↑ Sebesta 2012, hlm. 56–57.
- ↑ Gabbrielli & Martini 2023, hlm. 525.
- ↑ Gabbrielli & Martini 2023, hlm. 526–527.
- ↑ Gabbrielli & Martini 2023, hlm. 531.
- 1 2 Sebesta 2012, hlm. 79.
- ↑ Gabbrielli & Martini 2023, hlm. 530.
- ↑ Gabbrielli & Martini 2023, hlm. 532–533.
- ↑ Gabbrielli & Martini 2023, hlm. 534.
- ↑ Gabbrielli & Martini 2023, hlm. 534–535.
- ↑ Gabbrielli & Martini 2023, hlm. 535.
- ↑ Sebesta 2012, hlm. 736.
- ↑ Gabbrielli & Martini 2023, hlm. 536.
- ↑ Gabbrielli & Martini 2023, hlm. 536–537.
- ↑ Sebesta 2012, hlm. 91–92.
- ↑ Gabbrielli & Martini 2023, hlm. 538–539.
- ↑ Sebesta 2012, hlm. 97–99.
- ↑ Gabbrielli & Martini 2023, hlm. 542.
- ↑ Gabbrielli & Martini 2023, hlm. 474–475, 477, 542.
- ↑ Gabbrielli & Martini 2023, hlm. 542–543.
- ↑ Gabbrielli & Martini 2023, hlm. 544.
- ↑ Bezanson, Jeff; Karpinski, Stefan; Shah, Viral B.; Edelman, Alan (2012). "Julia: A Fast Dynamic Language for Technical Computing". arXiv:1209.5145 [cs.PL].
- ↑ Sáez-López, J.M., Román-González, M. and Vázquez-Cano, E., 2016. Visual programming languages integrated across the curriculum in elementary school: A two year case study using "Scratch" in five schools. Computers & Education, 97, pp.129-141.
- ↑ Kodosky, J., 2020. LabVIEW. Proceedings of the ACM on Programming Languages, 4(HOPL), pp.1-54.
- ↑ Fernando, A. and Warusawithana, L., 2020. Beginning Ballerina Programming: From Novice to Professional. Apress.
- ↑ Baluprithviraj, K.N., Bharathi, K.R., Chendhuran, S. and Lokeshwaran, P., 2021, March. Artificial intelligence based smart door with face mask detection. In 2021 International Conference on Artificial Intelligence and Smart Systems (ICAIS) (pp. 543-548). IEEE.
- ↑ Sewell, B., 2015. Blueprints visual scripting for unreal engine. Packt Publishing Ltd.
- ↑ Bertolini, L., 2018. Hands-On Game Development without Coding: Create 2D and 3D games with Visual Scripting in Unity. Packt Publishing Ltd.
- ↑ Michael Sipser (1996). Introduction to the Theory of Computation. PWS Publishing. ISBN 978-0-534-94728-6. Section 2.2: Pushdown Automata, pp.101–114.
- ↑ Jeffrey Kegler, "Perl and Undecidability Diarsipkan 17 Agustus 2009 di Wayback Machine", The Perl Review. Papers 2 and 3 prove, using respectively Rice's theorem and direct reduction to the halting problem, that the parsing of Perl programs is in general undecidable.
- ↑ Marty Hall, 1995, Lecture Notes: Macros Diarsipkan 6 Agustus 2013 di Wayback Machine, PostScript version Diarsipkan 17 Agustus 2000 di Wayback Machine
- ↑ Aaby, Anthony (2004). Introduction to Programming Languages. Diarsipkan dari asli tanggal 8 November 2012. Diakses tanggal 29 September 2012.
{{cite book}}: Pemeliharaan CS1: Tanggal diterjemahkan otomatis (link) - ↑ Michael Lee Scott, Programming language pragmatics, Edition 2, Morgan Kaufmann, 2006, ISBN0-12-633951-1, p. 18–19
- ↑ Winskel, Glynn (5 Februari 1993). The Formal Semantics of Programming Languages: An Introduction (dalam bahasa Inggris). MIT Press. ISBN 978-0-262-73103-4.[halaman dibutuhkan]
- ↑ Schreiner, Wolfgang. "Formal Semantics of Programming Languages". Johannes Kepler University Linz. Diakses tanggal 23 September 2026.
{{cite web}}: Pemeliharaan CS1: Tanggal diterjemahkan otomatis (link) - ↑
- ↑ Sebesta 2012, hlm. 244.
- ↑ Sebesta 2012, hlm. 245.
- 1 2 3 4 Andrew Cooke. "Introduction To Computer Languages". Diarsipkan dari versi aslinya tanggal 15 Agustus 2012. Diakses tanggal 13 Juli 2012.
- ↑ Sebesta 2012, hlm. 15, 408–409.
- ↑ Sebesta 2012, hlm. 303–304.
- ↑ Sebesta 2012, hlm. 246–247.
- ↑ Sebesta 2012, hlm. 249.
- ↑ Sebesta 2012, hlm. 260.
- ↑ Sebesta 2012, hlm. 250.
- ↑ Sebesta 2012, hlm. 254.
- ↑ Sebesta 2012, hlm. 281–282.
- ↑ Sebesta 2012, hlm. 272–273.
- ↑ Sebesta 2012, hlm. 276–277.
- ↑ Sebesta 2012, hlm. 280.
- ↑ Sebesta 2012, hlm. 289–290.
- ↑ Sebesta 2012, hlm. 255.
- ↑ Sebesta 2012, hlm. 244–245.
- ↑ Sebesta 2012, hlm. 477.
- ↑ Sebesta 2012, hlm. 211.
- ↑ Leivant, Daniel (1983). Polymorphic type inference. ACM SIGACT-SIGPLAN symposium on Principles of programming languages (dalam bahasa Inggris). Austin, Texas: ACM Press. hlm. 88–98. doi:10.1145/567067.567077. ISBN 978-0-89791-090-3.
- ↑ Sebesta 2012, hlm. 212–213.
- ↑ Sebesta 2012, hlm. 284–285.
- ↑ Sebesta 2012, hlm. 576.
- ↑ Sebesta 2012, hlm. 579.
- ↑ Sebesta 2012, hlm. 585.
- ↑ Sebesta 2012, hlm. 585–586.
- ↑ Sebesta 2012, hlm. 630, 634.
- ↑ Sebesta 2012, hlm. 635.
- 1 2 Sebesta 2012, hlm. 631.
- ↑ Sebesta 2012, hlm. 261.
- ↑ Sebesta 2012, hlm. 632.
- ↑ Sebesta 2012, hlm. 631, 635–636.
- ↑ Sebesta 2012, hlm. 18.
- ↑ Sebesta 2012, hlm. 19.
- ↑ Nofre, Priestley & Alberts 2014, hlm. 55.
- ↑ Nofre, Priestley & Alberts 2014, hlm. 60.
- ↑ Sebesta 2012, hlm. 8.
- ↑ Sebesta 2012, hlm. 16–17.
- ↑ Sebesta 2012, hlm. 8–9.
- ↑ Sebesta 2012, hlm. 9–10.
- ↑ Sebesta 2012, hlm. 12–13.
- ↑ Sebesta 2012, hlm. 13.
- ↑ Sebesta 2012, hlm. 14–15.
- ↑ Frederick P. Brooks, Jr.: The Mythical Man-Month, Addison-Wesley, 1982, pp. 93–94
- ↑ Busbee, Kenneth Leroy; Braunschweig, Dave (15 Desember 2018). "Standard Libraries". Programming Fundamentals – A Modular Structured Approach (dalam bahasa Inggris). Diakses tanggal 27 Januari 2024.
- ↑ Sebesta 2012, hlm. 15.
- ↑ Sebesta 2012, hlm. 8, 16.
- ↑ Sebesta 2012, hlm. 18, 23.
- 1 2 Sebesta 2012, hlm. 23.
- ↑ Dijkstra, Edsger W. On the foolishness of "natural language programming." Diarsipkan 20 Januari 2008 di Wayback Machine EWD667.
- ↑ Perlis, Alan (September 1982). "Epigrams on Programming". SIGPLAN Notices Vol. 17, No. 9. hlm. 7–13. Diarsipkan dari versi aslinya tanggal 17 Januari 1999.
{{cite web}}: Pemeliharaan CS1: Tanggal diterjemahkan otomatis (link) - ↑ Milner, R.; M. Tofte; R. Harper; D. MacQueen (1997). The Definition of Standard ML (Revised). MIT Press. ISBN 978-0-262-63181-5.
- ↑ Kelsey, Richard; William Clinger; Jonathan Rees (Februari 1998). "Section 7.2 Formal semantics". Revised5 Report on the Algorithmic Language Scheme. Diarsipkan dari versi aslinya tanggal 6 Juli 2006.
- ↑ ANSI – Programming Language Rexx, X3-274.1996
- ↑ Sebesta 2012, hlm. 23–24.
- ↑ Sebesta 2012, hlm. 25–27.
- ↑ Sebesta 2012, hlm. 27.
- ↑ Sebesta 2012, hlm. 28.
- ↑ Sebesta 2012, hlm. 29–30.
- ↑ Lihat: Oracle America, Inc. v. Google, Inc.Templat:User-generated source
- ↑ "Guide to Programming Languages | ComputerScience.org". ComputerScience.org (dalam bahasa American English). Diarsipkan dari versi aslinya tanggal 13 Mei 2018. Diakses tanggal 13 Mei 2018.
- ↑ "The basics". ibm.com (dalam bahasa Inggris). 10 Mei 2011. Diarsipkan dari versi aslinya tanggal 14 Mei 2018. Diakses tanggal 13 Mei 2018.
- ↑ Abdelaziz, Abdullah I.; Hanson, Kent A.; Gaber, Charles E.; Lee, Todd A. (2023). "Optimizing large real-world data analysis with parquet files in R: A step-by-step tutorial". Pharmacoepidemiology and Drug Safety. 33 (3) e5728. doi:10.1002/pds.5728. PMID 37984998.
- ↑ "HOPL: an interactive Roster of Programming Languages". Australia: Murdoch University. Diarsipkan dari asli tanggal 20 Februari 2011. Diakses tanggal 1 Juni 2009. This site lists 8512 languages.
- ↑ Mayer, Philip; Bauer, Alexander (2015). "An empirical analysis of the utilization of multiple programming languages in open source projects". Proceedings of the 19th International Conference on Evaluation and Assessment in Software Engineering. Proceedings of the 19th International Conference on Evaluation and Assessment in Software Engineering – EASE '15. New York, NY, US: ACM. hlm. 4:1–4:10. doi:10.1145/2745802.2745805. ISBN 978-1-4503-3350-4. Results: We found (a) a mean number of 5 languages per project with a clearly dominant main general-purpose language and 5 often-used DSL types, (b) a significant influence of the size, number of commits, and the main language on the number of languages as well as no significant influence of age and number of contributors, and (c) three language ecosystems grouped around XML, Shell/Make, and HTML/CSS. Conclusions: Multi-language programming seems to be common in open-source projects and is a factor that must be dealt with in tooling and when assessing the development and maintenance of such software systems.
- ↑ Abelson, Sussman, and Sussman. "Structure and Interpretation of Computer Programs". Diarsipkan dari asli tanggal 26 Februari 2009. Diakses tanggal 3 Maret 2009.
{{cite web}}: Pemeliharaan CS1: Banyak nama: daftar penulis (link) - ↑ Vicki, Brown; Morin, Rich (1999). "Scripting Languages". MacTech. Diarsipkan dari versi aslinya tanggal 2 Desember 2017.
- ↑ Georgina Swan (21 September 2009). "COBOL turns 50". Computerworld. Diarsipkan dari asli tanggal 19 Oktober 2013. Diakses tanggal 19 Oktober 2013.
{{cite web}}: Pemeliharaan CS1: Tanggal diterjemahkan otomatis (link) - ↑ Ed Airey (3 Mei 2012). "7 Myths of COBOL Debunked". developer.com. Diarsipkan dari versi aslinya tanggal 19 Oktober 2013. Diakses tanggal 19 Oktober 2013.
- ↑ Nicholas Enticknap. "SSL/Computer Weekly IT salary survey: finance boom drives IT job growth". Computer Weekly. Diarsipkan dari versi aslinya tanggal 26 Oktober 2011. Diakses tanggal 14 Juni 2013.
- ↑ "Counting programming languages by book sales". Radar.oreilly.com. 2 Agustus 2006. Diarsipkan dari asli tanggal 17 Mei 2008.
- ↑ Bieman, J.M.; Murdock, V., Finding code on the World Wide Web: a preliminary investigation, Proceedings First IEEE International Workshop on Source Code Analysis and Manipulation, 2001
- ↑ "Most Popular and Influential Programming Languages of 2018". stackify.com. 18 Desember 2017. Diarsipkan dari versi aslinya tanggal 30 Agustus 2018. Diakses tanggal 29 Agustus 2018.
- ↑ "TIOBE Index". Diakses tanggal 24 Juni 2024.
- ↑ "IEEE Spectrum". Diakses tanggal 25 September 2025.
{{cite web}}: Pemeliharaan CS1: Tanggal diterjemahkan otomatis (link) - ↑ Sebesta 2012, hlm. 21.
- 1 2 Sebesta 2012, hlm. 21–22.
- ↑ Sebesta 2012, hlm. 12.
- ↑ Sebesta 2012, hlm. 22.
- ↑ Sebesta 2012, hlm. 22–23.
Bacaan lebih lanjut
- Abelson, Harold; Sussman, Gerald Jay (1996). Structure and Interpretation of Computer Programs (Edisi ke-2). MIT Press. Diarsipkan dari asli tanggal 9 Maret 2018.
- Raphael Finkel: Advanced Programming Language Design, Addison Wesley 1995.
- Daniel P. Friedman, Mitchell Wand, Christopher T. Haynes: Essentials of Programming Languages, The MIT Press 2001.
- David Gelernter, Suresh Jagannathan: Programming Linguistics, The MIT Press 1990.
- Ellis Horowitz (ed.): Programming Languages, a Grand Tour (edisi ke-3), 1987.
- Ellis Horowitz: Fundamentals of Programming Languages, 1989.
- Shriram Krishnamurthi: Programming Languages: Application and Interpretation, publikasi daring Diarsipkan 30 April 2021 di Wayback Machine.
- Gabbrielli, Maurizio; Martini, Simone (2023). Programming Languages: Principles and Paradigms (dalam bahasa Inggris) (Edisi edisi ke-2). Springer. ISBN 978-3-031-34144-1.
- Bruce J. MacLennan: Principles of Programming Languages: Design, Evaluation, and Implementation, Oxford University Press 1999.
- John C. Mitchell: Concepts in Programming Languages, Cambridge University Press 2002.
- Nofre, David; Priestley, Mark; Alberts, Gerard (2014). "When Technology Became Language: The Origins of the Linguistic Conception of Computer Programming, 1950–1960". Technology and Culture. 55 (1): 40–75. doi:10.1353/tech.2014.0031. ISSN 0040-165X. JSTOR 24468397. PMID 24988794.
- Benjamin C. Pierce: Types and Programming Languages, The MIT Press 2002.
- Terrence W. Pratt dan Marvin Victor Zelkowitz: Programming Languages: Design and Implementation (edisi ke-4), Prentice Hall 2000.
- Peter H. Salus. Handbook of Programming Languages (4 jilid). Macmillan 1998.
- Ravi Sethi: Programming Languages: Concepts and Constructs, edisi ke-2, Addison-Wesley 1996.
- Michael L. Scott dan Jonathan Aldrich: Programming Language Pragmatics, edisi ke-5, Morgan Kaufmann Publishers 2025.
- Sebesta, Robert W. (2012). Concepts of Programming Languages (dalam bahasa Inggris) (Edisi 10). Addison-Wesley. ISBN 978-0-13-139531-2.
- Franklyn Turbak dan David Gifford dengan Mark Sheldon: Design Concepts in Programming Languages, The MIT Press 2009.
- Peter Van Roy dan Seif Haridi. Concepts, Techniques, and Models of Computer Programming, The MIT Press 2004.
- David A. Watt. Programming Language Concepts and Paradigms. Prentice Hall 1990.
- David A. Watt dan Muffy Thomas. Programming Language Syntax and Semantics. Prentice Hall 1991.
- David A. Watt. Programming Language Processors. Prentice Hall 1993.
- David A. Watt. Programming Language Design Concepts. John Wiley & Sons 2004.
- Wilson, Leslie B. (2001). Comparative Programming Languages, Third Edition. Addison-Wesley. ISBN 0-201-71012-9.
Templat:Types of programming languages
Templat:Computer language Templat:Computer science
| Internasional | |
|---|---|
| Nasional | |
| Lain-lain | |