Bahasa pemrograman: Perbedaan antara revisi
Impor teks terkontrol dari Wikipedia bahasa Indonesia; revisi 29343577; atribusi sumber disertakan. |
Presentation V4: sitasi, referensi, Math, Wikimedia Commons, dan atribusi |
||
| Baris 1: | Baris 1: | ||
[[File:C_Hello_World_Program.png|thumb|right|280px|C Hello World Program]] | |||
'''Bahasa pemrograman''' atau '''bahasa penataolahan''' () adalah sistem notasi untuk menulis program komputer. Sebagian besar bahasa pemrograman adalah [[bahasa formal]] berdasarkan teks, tetapi juga dapat berupa grafis.<ref>Janner Simarmata. [https://books.google.co.id/books?id=QP1BjG_VIsoC&pg=PA403&dq=Program+komputer&hl=id&newbks=1&newbks_redir=0&source=gb_mobile_search&sa=X&ved=2ahUKEwiFwZDxtfX-AhUC-jgGHVqkAhQQ6AF6BAgNEAM Rekayasa Perangkat Lunak]. Penerbit Andi. ISBN 978-979-29-1347-7.</ref> | |||
Deskripsi bahasa pemrograman dibagi menjadi dua komponen; yaitu [[sintaksis]] (bentuk) dan [[semantik]] (makna), yang biasanya didefinisikan oleh bahasa formal. Beberapa bahasa ditentukan oleh dokumen spesifikasi (misalnya, bahasa pemrograman C ditentukan oleh Standar [[ISO]]) sementara bahasa lain (seperti [[Perl]]) memiliki implementasi dominan yang diperlakukan sebagai rujukan. Beberapa bahasa memiliki keduanya, dengan bahasa dasar yang ditentukan oleh standar dan ekstensi diambil dari implementasi dominan yang umum. | Deskripsi bahasa pemrograman dibagi menjadi dua komponen; yaitu [[sintaksis]] (bentuk) dan [[semantik]] (makna), yang biasanya didefinisikan oleh bahasa formal. Beberapa bahasa ditentukan oleh dokumen spesifikasi (misalnya, bahasa pemrograman C ditentukan oleh Standar [[ISO]]) sementara bahasa lain (seperti [[Perl]]) memiliki implementasi dominan yang diperlakukan sebagai rujukan. Beberapa bahasa memiliki keduanya, dengan bahasa dasar yang ditentukan oleh standar dan ekstensi diambil dari implementasi dominan yang umum. | ||
| Baris 8: | Baris 9: | ||
=== Hubungan dengan bahasa alami === | === Hubungan dengan bahasa alami === | ||
Bahasa pemrograman memiliki beberapa kesamaan dengan bahasa alami dalam hal memungkinkan komunikasi ide antarmanusia; program umumnya dapat dibaca oleh manusia dan dapat mengekspresikan ide-ide yang kompleks. Namun, jenis ide yang dapat diekspresikan oleh bahasa pemrograman pada akhirnya terbatas pada domain komputasi. | Bahasa pemrograman memiliki beberapa kesamaan dengan bahasa alami dalam hal memungkinkan komunikasi ide antarmanusia; program umumnya dapat dibaca oleh manusia dan dapat mengekspresikan ide-ide yang kompleks. Namun, jenis ide yang dapat diekspresikan oleh bahasa pemrograman pada akhirnya terbatas pada domain komputasi.<ref>Sharad Chauhan. [https://books.google.com/books?id=qKRnohkDbb0C Programming Languages - Design and Constructs]. University Science Press. 2013. hlm. 235. ISBN 978-93-81159-41-5.</ref> | ||
Istilah ''computer language'' (bahasa komputer) terkadang digunakan secara bergantian dengan bahasa pemrograman, tetapi beberapa pihak berpendapat bahwa keduanya adalah konsep yang berbeda. Ada yang menilai bahwa bahasa pemrograman adalah subset dari bahasa komputer. Beberapa menggunakan istilah bahasa komputer untuk mengklasifikasikan bahasa yang digunakan dalam komputasi tetapi tidak dianggap sebagai bahasa pemrograman. Sebagian lainnya menganggap bahasa pemrograman sebagai konstruk teoritis untuk memprogram [[mesin abstrak]], dan bahasa komputer sebagai subset darinya yang berjalan pada komputer fisik yang memiliki sumber daya perangkat keras terbatas. | Istilah ''computer language'' (bahasa komputer) terkadang digunakan secara bergantian dengan bahasa pemrograman,<ref>Robert A. Edmunds, The Prentice-Hall standard glossary of computer terminology, Prentice-Hall, 1985, p. 91</ref> tetapi beberapa pihak berpendapat bahwa keduanya adalah konsep yang berbeda. Ada yang menilai bahwa bahasa pemrograman adalah subset dari bahasa komputer.<ref>Pascal Lando, Anne Lapujade, Gilles Kassel, and Frédéric Fürst, ''[http://home.mis.u-picardie.fr/~site-ic/site/IMG/pdf/ICSOFT2007_final.pdf Towards a General Ontology of Computer Programs]'' , [http://dblp.uni-trier.de/db/conf/icsoft/icsoft2007-1.html ICSOFT 2007] , pp. 163–170</ref> Beberapa menggunakan istilah bahasa komputer untuk mengklasifikasikan bahasa yang digunakan dalam komputasi tetapi tidak dianggap sebagai bahasa pemrograman. Sebagian lainnya menganggap bahasa pemrograman sebagai konstruk teoritis untuk memprogram [[mesin abstrak]], dan bahasa komputer sebagai subset darinya yang berjalan pada komputer fisik yang memiliki sumber daya perangkat keras terbatas.<ref>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, , 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."</ref> | ||
[[John C. Reynolds]] menekankan bahwa bahasa spesifikasi formal merupakan bahasa pemrograman, sama halnya dengan bahasa apa pun yang dimaksudkan untuk eksekusi. Ia berargumen bahwa format masukan tekstual dan bahkan grafis yang memengaruhi perilaku komputer adalah bahasa pemrograman, meskipun mereka umumnya tidak bersifat Turing-complete, dan menyatakan bahwa ketidaktahuan tentang konsep bahasa pemrograman adalah alasan di balik banyak cacat pada format masukan. | [[John C. Reynolds]] menekankan bahwa bahasa spesifikasi formal merupakan bahasa pemrograman, sama halnya dengan bahasa apa pun yang dimaksudkan untuk eksekusi. Ia berargumen bahwa format masukan tekstual dan bahkan grafis yang memengaruhi perilaku komputer adalah bahasa pemrograman, meskipun mereka umumnya tidak bersifat Turing-complete, dan menyatakan bahwa ketidaktahuan tentang konsep bahasa pemrograman adalah alasan di balik banyak cacat pada format masukan.<ref>John C. Reynolds, "Some thoughts on teaching programming and programming languages", ''SIGPLAN Notices'', Volume 43, Issue 11, November 2008, p.109</ref> | ||
== Fungsi == | == Fungsi == | ||
| Baris 20: | Baris 21: | ||
== Sejarah == | == Sejarah == | ||
=== Perkembangan awal === | === Perkembangan awal === | ||
Komputer pertama yang dapat diprogram ditemukan pada tahun 1940-an, dan bersamanya, bahasa pemrograman pertama juga lahir. Pada awalnya, sumber daya perangkat keras sangat langka dan mahal, sehingga bahasa yang rumit dan memakan waktu tetapi dekat dengan perangkat keras demi efisiensi yang tinggi lebih disukai. | Komputer pertama yang dapat diprogram ditemukan pada tahun 1940-an, dan bersamanya, bahasa pemrograman pertama juga lahir.<ref>Severine Hierso. [https://www.computer.org/publications/tech-news/insider-membership-news/timeline-of-programming-languages Coding From 1849 to 2022: a Guide to The Timeline of Programming Languages]. ''IEEE Computer Society''. June 10, 2022.</ref> Pada awalnya, sumber daya perangkat keras sangat langka dan mahal, sehingga bahasa yang rumit dan memakan waktu tetapi dekat dengan perangkat keras demi efisiensi yang tinggi lebih disukai. | ||
Pengenalan bahasa pemrograman tingkat tinggi merevolusi pemrograman dengan mengabstraksikan detail perangkat keras untuk mengekspresikan [[algoritme]] agar lebih mudah dipahami oleh manusia. Pada tahun 1957, [[Fortran]] (FORmula TRANslation) diciptakan sebagai bahasa tingkat tinggi terkompilasi pertama, yang tetap bertahan hingga abad ke-21. | Pengenalan bahasa pemrograman tingkat tinggi merevolusi pemrograman dengan mengabstraksikan detail perangkat keras untuk mengekspresikan [[algoritme]] agar lebih mudah dipahami oleh manusia. Pada tahun 1957, [[Fortran]] (FORmula TRANslation) diciptakan sebagai bahasa tingkat tinggi terkompilasi pertama, yang tetap bertahan hingga abad ke-21. | ||
=== Abad 1960-an dan 1970s === | === Abad 1960-an dan 1970s === | ||
Sekitar tahun 1960, komputer mainframe tujuan umum mulai dikembangkan. Karena input menggunakan [[kartu berlubang]], bahasa masa ini dirancang untuk interaksi minimal. Setelah penemuan mikroprosesor pada tahun 1970-an, komputer menjadi jauh lebih murah dan memungkinkan interaksi pengguna yang lebih intensif. | Sekitar tahun 1960, komputer mainframe tujuan umum mulai dikembangkan. Karena input menggunakan [[kartu berlubang]], bahasa masa ini dirancang untuk interaksi minimal. Setelah penemuan mikroprosesor pada tahun 1970-an, komputer menjadi jauh lebih murah dan memungkinkan interaksi pengguna yang lebih intensif. | ||
[[Lisp (bahasa pemrograman)|Lisp]], diimplementasikan pada tahun 1958, adalah bahasa [[pemrograman fungsional]] pertama, yang mendukung [[rekursi]], ekspresi kondisional, manajemen memori dinamis, dan [[Pengumpulan sampah (ilmu komputer)|pengumpulan sampah otomatis]]. Pada tahun 1978, bahasa fungsional lainnya, [[ML (bahasa pemrograman)|ML]], memperkenalkan [[inferensi tipe]] dan parameter polimorfik. | [[Lisp (bahasa pemrograman)|Lisp]], diimplementasikan pada tahun 1958, adalah bahasa [[pemrograman fungsional]] pertama,<ref>[https://twobithistory.org/2018/10/14/lisp.html How Lisp Became God's Own Programming Language]. ''twobithistory.org''.</ref> yang mendukung [[rekursi]], ekspresi kondisional, manajemen memori dinamis, dan [[Pengumpulan sampah (ilmu komputer)|pengumpulan sampah otomatis]]. Pada tahun 1978, bahasa fungsional lainnya, [[ML (bahasa pemrograman)|ML]], memperkenalkan [[inferensi tipe]] dan parameter polimorfik. | ||
Setelah [[ALGOL]] dirilis, bahasa ini 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#—diturunkan secara langsung atau tidak langsung dari ALGOL 60. [[Simula]], bahasa pertama yang mendukung [[pemrograman berorientasi objek]] (termasuk subtipe, dynamic dispatch, dan pewarisan), juga merupakan keturunan ALGOL. [[Prolog]], yang dirancang pada tahun 1972, menjadi bahasa [[pemrograman logika]] pertama yang berkomunikasi menggunakan notasi logika formal. | Setelah [[ALGOL]] dirilis, bahasa ini 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#—diturunkan secara langsung atau tidak langsung dari ALGOL 60. [[Simula]], bahasa pertama yang mendukung [[pemrograman berorientasi objek]] (termasuk subtipe, dynamic dispatch, dan pewarisan), juga merupakan keturunan ALGOL. [[Prolog]], yang dirancang pada tahun 1972, menjadi bahasa [[pemrograman logika]] pertama yang berkomunikasi menggunakan notasi logika formal. | ||
=== Abad 1980-an hingga 2000-an === | === Abad 1980-an hingga 2000-an === | ||
Penemuan komputer pribadi (PC) pada tahun 1980-an mengubah lanskap penggunaan bahasa pemrograman. Bahasa baru seperti C++ memperkenalkan dukungan kelas dan pewarisan ke dalam basis kode C. Ada dan bahasa baru lainnya memperkenalkan dukungan untuk [[Konkurensi (ilmu komputer)|konkurensi]]. | Penemuan komputer pribadi (PC) pada tahun 1980-an mengubah lanskap penggunaan bahasa pemrograman. Bahasa baru seperti C++ memperkenalkan dukungan kelas dan pewarisan ke dalam basis kode C. Ada dan bahasa baru lainnya memperkenalkan dukungan untuk [[Konkurensi (ilmu komputer)|konkurensi]]. | ||
| Baris 42: | Baris 39: | ||
=== Abad 2000-an hingga sekarang === | === Abad 2000-an hingga sekarang === | ||
Terjadi perlambatan pengembangan bahasa baru yang mencapai popularitas luas pada era 2000-an. Inovasi yang menonjol adalah pemrograman berbasis layanan (''service-oriented programming'') untuk komputasi terdistribusi. C# dan F# melakukan silang ide antara paradigma imperatif dan fungsional. Setelah tahun 2010, bahasa seperti Rust, Go, Swift, Zig, dan Carbon bersaing dalam ranah perangkat lunak kritis-performa yang sebelumnya didominasi oleh C. Mayoritas menggunakan pengetikan statis, sementara beberapa seperti [[Julia (bahasa pemrograman)|Julia]] mengadopsi pengetikan dinamis. | Terjadi perlambatan pengembangan bahasa baru yang mencapai popularitas luas pada era 2000-an. Inovasi yang menonjol adalah pemrograman berbasis layanan (''service-oriented programming'') untuk komputasi terdistribusi. C# dan F# melakukan silang ide antara paradigma imperatif dan fungsional. Setelah tahun 2010, bahasa seperti Rust, Go, Swift, Zig, dan Carbon bersaing dalam ranah perangkat lunak kritis-performa yang sebelumnya didominasi oleh C. Mayoritas menggunakan pengetikan statis, sementara beberapa seperti [[Julia (bahasa pemrograman)|Julia]] mengadopsi pengetikan dinamis.<ref>Jeff Bezanson. ''Julia: A Fast Dynamic Language for Technical Computing''. 2012.</ref> | ||
Bahasa pemrograman visual seperti Scratch dan LabVIEW juga berkembang pesat, termasuk hibrida teks-visual seperti Ballerina. Google ikut mengembangkan proyek bahasa visual lewat [[Blockly]]. Banyak mesin permainan (game engines) seperti Unreal dan Unity yang kini mendukung visual scripting secara bawaan. | Bahasa pemrograman visual seperti Scratch dan LabVIEW juga berkembang pesat,<ref>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.</ref><ref>Kodosky, J., 2020. LabVIEW. Proceedings of the ACM on Programming Languages, 4(HOPL), pp.1-54.</ref> termasuk hibrida teks-visual seperti Ballerina.<ref>Fernando, A. and Warusawithana, L., 2020. Beginning Ballerina Programming: From Novice to Professional. Apress.</ref> Google ikut mengembangkan proyek bahasa visual lewat [[Blockly]].<ref>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.</ref> Banyak mesin permainan (game engines) seperti Unreal dan Unity yang kini mendukung visual scripting secara bawaan.<ref>Sewell, B., 2015. Blueprints visual scripting for unreal engine. Packt Publishing Ltd.</ref><ref>Bertolini, L., 2018. Hands-On Game Development without Coding: Create 2D and 3D games with Visual Scripting in Unity. Packt Publishing Ltd.</ref> | ||
== Tingkatan == | == Tingkatan == | ||
=== Bahasa tingkat tinggi (''high-level programming language'') === | === Bahasa tingkat tinggi (''high-level programming language'') === | ||
Bahasa pemrograman tingkat tinggi adalah bahasa pemrograman yang menjauh dari instruksi perangkat keras dan lebih mendekati bahasa manusia, sehingga meningkatkan keterbacaan dan kemudahan penulisan kode. | Bahasa pemrograman tingkat tinggi adalah bahasa pemrograman yang menjauh dari instruksi perangkat keras dan lebih mendekati bahasa manusia, sehingga meningkatkan keterbacaan dan kemudahan penulisan kode.<ref>Muhammad Sobri. ''Pengantar Teknologi Informasi - Konsep dan Teori''. ISBN 9789792963120.</ref> | ||
Daftar bahasa pemrograman tingkat tinggi: | Daftar bahasa pemrograman tingkat tinggi: | ||
| Baris 66: | Baris 62: | ||
Bahasa pemrograman tingkat menengah adalah bahasa pemrograman yang menyediakan tingkat abstraksi tingkat tinggi namun tetap mempertahankan kemampuan manipulasi tingkat rendah (seperti manajemen memori manual dan operasi pointer). | Bahasa pemrograman tingkat menengah adalah bahasa pemrograman yang menyediakan tingkat abstraksi tingkat tinggi namun tetap mempertahankan kemampuan manipulasi tingkat rendah (seperti manajemen memori manual dan operasi pointer). | ||
Contoh bahasa pemrograman tingkat menengah: | Contoh bahasa pemrograman tingkat menengah: | ||
* [[Rust]] | * [[Rust]] | ||
* [[Golang|Go]] | * [[Golang|Go]] | ||
| Baris 75: | Baris 71: | ||
Bahasa pemrograman tingkat rendah adalah bahasa pemrograman yang sepenuhnya berorientasi pada arsitektur perangkat keras dan bahasa mesin sehingga sangat sulit untuk dipelajari manusia, tetapi memiliki efisiensi eksekusi yang sangat tinggi. | Bahasa pemrograman tingkat rendah adalah bahasa pemrograman yang sepenuhnya berorientasi pada arsitektur perangkat keras dan bahasa mesin sehingga sangat sulit untuk dipelajari manusia, tetapi memiliki efisiensi eksekusi yang sangat tinggi. | ||
Contoh bahasa pemrograman tingkat rendah: | Contoh bahasa pemrograman tingkat rendah: | ||
* [[Assembly]] | * [[Assembly]] | ||
| Baris 87: | Baris 83: | ||
== Komponen Utama: Sintaksis dan Semantik == | == Komponen Utama: Sintaksis dan Semantik == | ||
=== Sintaksis === | === Sintaksis === | ||
Sintaksis mengacu pada bentuk permukaan dan kombinasi simbol yang membentuk program yang benar secara struktural. Aturan sintaksis biasanya didefinisikan menggunakan ekspresi reguler (untuk analisis leksikal) dan [[Bentuk Backus–Naur]] (BNF) untuk tata bahasa bebas konteks.<ref>Michael Sipser. ''Introduction to the Theory of Computation''. PWS Publishing. 1996. ISBN 978-0-534-94728-6.</ref> | |||
Sintaksis mengacu pada bentuk permukaan dan kombinasi simbol yang membentuk program yang benar secara struktural. Aturan sintaksis biasanya didefinisikan menggunakan ekspresi reguler (untuk analisis leksikal) dan [[Bentuk Backus–Naur]] (BNF) untuk tata bahasa bebas konteks. | |||
Sebagai contoh, tata bahasa sederhana berbasis Lisp dapat dituliskan sebagai berikut: | Sebagai contoh, tata bahasa sederhana berbasis Lisp dapat dituliskan sebagai berikut: | ||
<syntaxhighlight lang="bnf"> | |||
expression ::= atom | list | |||
atom ::= number | symbol | |||
number ::= [+-]?['0'-'9']+ | |||
symbol ::= ['A'-'Z''a'-'z'].* | |||
list ::= '(' expression* ')' | |||
</syntaxhighlight> | |||
Program yang benar secara sintaksis belum tentu benar secara semantik. Banyak program lolos tahap analisis struktural tetapi memicu kesalahan fatal saat dieksekusi atau menunjukkan [[perilaku tak terdefinisi]] (undefined behavior). Tata bahasa sebagian besar bahasa pemrograman masuk dalam Tata Bahasa Tipe-2 (bebas konteks) dalam [[Hierarki Chomsky]]. Beberapa bahasa seperti Perl dan Lisp mengaburkan batasan parsing dan eksekusi karena memungkinkan modifikasi parser di tengah proses pembacaan kode.<ref>Jeffrey Kegler, "[http://www.jeffreykegler.com/Home/perl-and-undecidability Perl and Undecidability] ", ''The Perl Review''.</ref> Sebaliknya, makro pada bahasa C hanyalah berupa penggantian string teks dan tidak memerlukan kompilasi kode dinamis selama parsing.<ref>Marty Hall, 1995, [http://www.apl.jhu.edu/~hall/Lisp-Notes/Macros.html Lecture Notes: Macros]</ref> | |||
Program yang benar secara sintaksis belum tentu benar secara semantik. Banyak program lolos tahap analisis struktural tetapi memicu kesalahan fatal saat dieksekusi atau menunjukkan [[perilaku tak terdefinisi]] (undefined behavior). Tata bahasa sebagian besar bahasa pemrograman masuk dalam Tata Bahasa Tipe-2 (bebas konteks) dalam [[Hierarki Chomsky]]. Beberapa bahasa seperti Perl dan Lisp mengaburkan batasan parsing dan eksekusi karena memungkinkan modifikasi parser di tengah proses pembacaan kode. Sebaliknya, makro pada bahasa C hanyalah berupa penggantian string teks dan tidak memerlukan kompilasi kode dinamis selama parsing. | |||
=== Semantik === | === Semantik === | ||
Semantik mengacu pada arti atau interpretasi dari kode sumber yang valid. Semantik dibagi menjadi dua ragam: | Semantik mengacu pada arti atau interpretasi dari kode sumber yang valid. Semantik dibagi menjadi dua ragam: | ||
==== Semantik statis ==== | ==== Semantik statis ==== | ||
Mendefinisikan pembatasan tekstual yang sulit diekspresikan oleh sintaksis formal formal biasa, tetapi dapat diperiksa pada saat kompilasi (compile-time). Contohnya termasuk aturan bahwa setiap variabel harus dideklarasikan sebelum digunakan, pemastian label pernyataan `case` bersifat unik, serta penegakan sistem tipe (type system) pada parameter fungsi. Analisis aliran data seperti analisis penugasan pasti (definite assignment analysis) di Java dan C# juga merupakan bagian dari semantik statis. | Mendefinisikan pembatasan tekstual yang sulit diekspresikan oleh sintaksis formal formal biasa, tetapi dapat diperiksa pada saat kompilasi (compile-time).<ref>Anthony Aaby. [http://www.emu.edu.tr/aelci/Courses/D-318/D-318-Files/plbook/intro.htm Introduction to Programming Languages]. 2004.</ref> Contohnya termasuk aturan bahwa setiap variabel harus dideklarasikan sebelum digunakan, pemastian label pernyataan `case` bersifat unik,<ref>Michael Lee Scott, ''Programming language pragmatics'', Edition 2, Morgan Kaufmann, 2006, , p. 18–19</ref> serta penegakan sistem tipe (type system) pada parameter fungsi. Analisis aliran data seperti analisis penugasan pasti (definite assignment analysis) di Java dan C# juga merupakan bagian dari semantik statis.<ref>Glynn Winskel. [https://books.google.com/books?id=JzUNn6uUxm0C The Formal Semantics of Programming Languages: An Introduction]. MIT Press. 5 February 1993. ISBN 978-0-262-73103-4.</ref> | ||
==== Semantik dinamis ==== | ==== Semantik dinamis ==== | ||
Mendefinisikan bagaimana perilaku program berjalan saat runtime (semantik eksekusi), seperti strategi evaluasi ekspresi aritmatika atau bagaimana struktur kontrol mengeksekusi pernyataan kondisional. Spesifikasi praktis umumnya menggunakan deskripsi bahasa alami, sementara penelitian akademik sering menggunakan metode formal untuk memetakan perilaku eksekusi ini secara matematis. | Mendefinisikan bagaimana perilaku program berjalan saat runtime (semantik eksekusi), seperti strategi evaluasi ekspresi aritmatika atau bagaimana struktur kontrol mengeksekusi pernyataan kondisional. Spesifikasi praktis umumnya menggunakan deskripsi bahasa alami, sementara penelitian akademik sering menggunakan metode formal untuk memetakan perilaku eksekusi ini secara matematis.<ref>Glynn Winskel. [https://books.google.com/books?id=JzUNn6uUxm0C The Formal Semantics of Programming Languages: An Introduction]. MIT Press. 5 February 1993. ISBN 978-0-262-73103-4.</ref> | ||
== Karakteristik dan Fitur Pendukung == | == Karakteristik dan Fitur Pendukung == | ||
=== Sistem tipe (''Type system'') === | === Sistem tipe (''Type system'') === | ||
Sistem tipe mendefinisikan bagaimana bahasa mengelompokkan nilai ke dalam tipe data, bagaimana ekspresi dievaluasi, dan bagaimana ekivalensi tipe ditegakkan. Sebuah bahasa dikatakan *fully typed* jika setiap operasi mendefinisikan tipe data yang berlaku secara ketat. Sebaliknya, bahasa *untyped* (seperti bahasa assembly) membolehkan operasi apa pun dilakukan pada bit memori apa pun. | Sistem tipe mendefinisikan bagaimana bahasa mengelompokkan nilai ke dalam tipe data, bagaimana ekspresi dievaluasi, dan bagaimana ekivalensi tipe ditegakkan. Sebuah bahasa dikatakan *fully typed* jika setiap operasi mendefinisikan tipe data yang berlaku secara ketat.<ref>[https://id.wikipedia.org/w/index.php?title=Bahasa+pemrograman&oldid=29343577 sumber pada Wikipedia bahasa Indonesia]</ref> Sebaliknya, bahasa *untyped* (seperti bahasa assembly) membolehkan operasi apa pun dilakukan pada bit memori apa pun.<ref>[https://id.wikipedia.org/w/index.php?title=Bahasa+pemrograman&oldid=29343577 sumber pada Wikipedia bahasa Indonesia]</ref> | ||
* **Pengetikan Kuat (Strong Typing) vs Lemah (Weak Typing)**: Pengetikan kuat mendeteksi kesalahan tipe secara ketat kecuali dikonversi secara eksplisit (*casting*). Pengetikan lemah membolehkan konversi implisit (*type coercion*), yang mempermudah penulisan tetapi rawan menyembunyikan kesalahan logika. | * **Pengetikan Kuat (Strong Typing) vs Lemah (Weak Typing)**: Pengetikan kuat mendeteksi kesalahan tipe secara ketat kecuali dikonversi secara eksplisit (*casting*). Pengetikan lemah membolehkan konversi implisit (*type coercion*), yang mempermudah penulisan tetapi rawan menyembunyikan kesalahan logika. | ||
* **Pengetikan Statis vs Dinamis**: Pada pengetikan statis, tipe ditentukan sebelum program berjalan (saat kompilasi), baik secara eksplisit maupun melalui inferensi tipe otomatis (seperti pada Haskell dan ML). Pada pengetikan dinamis, tipe melekat pada nilai di dalam objek, bukan pada variabelnya, sehingga variabel dapat menampung tipe apa pun secara bergantian. | * **Pengetikan Statis vs Dinamis**: Pada pengetikan statis, tipe ditentukan sebelum program berjalan (saat kompilasi), baik secara eksplisit maupun melalui inferensi tipe otomatis (seperti pada Haskell dan ML).<ref>Daniel Leivant. ''Polymorphic type inference''. ACM Press. 1983. hlm. 88–98. doi:10.1145/567067.567077.</ref> Pada pengetikan dinamis, tipe melekat pada nilai di dalam objek, bukan pada variabelnya, sehingga variabel dapat menampung tipe apa pun secara bergantian. | ||
==== Tipe data yang umum didukung ==== | ==== Tipe data yang umum didukung ==== | ||
| Baris 141: | Baris 138: | ||
Meskipun sebagian besar bahasa populer memiliki spesifikasi terbuka, banyak bahasa berstatus proprietary (hak milik vendor tunggal), umumnya berupa bahasa khusus domain (DSL) atau bahasa skrip internal produk komersial. | Meskipun sebagian besar bahasa populer memiliki spesifikasi terbuka, banyak bahasa berstatus proprietary (hak milik vendor tunggal), umumnya berupa bahasa khusus domain (DSL) atau bahasa skrip internal produk komersial. | ||
Beberapa bahasa berada di batas antara keduanya; contohnya Oracle Corporation yang memegang hak paten atas beberapa aspek komersial Java, serta Microsoft C# yang memiliki implementasi compiler terbuka namun berjalan di atas spesifikasi lingkungan tertutup [[Common Language Runtime]] (CLR). Bahasa komersial populer yang berstatus proprietary meliputi [[MATLAB]], VBScript, dan Wolfram Language. Sebaliknya, bahasa pemrograman sumber terbuka (*open source*) sangat krusial bagi ekosistem [[Sains terbuka|sains terbuka (open science)]] demi mendukung replikasi penelitian dan pembagian basis kode ilmiah secara bebas. | Beberapa bahasa berada di batas antara keduanya; contohnya Oracle Corporation yang memegang hak paten atas beberapa aspek komersial Java,<ref>Lihat kasus hukum: Oracle America, Inc. v. Google, Inc.</ref> serta Microsoft C# yang memiliki implementasi compiler terbuka namun berjalan di atas spesifikasi lingkungan tertutup [[Common Language Runtime]] (CLR).<ref>[https://www.computerscience.org/resources/computer-programming-languages/ Guide to Programming Languages ComputerScience.org]. ''ComputerScience.org''.</ref> Bahasa komersial populer yang berstatus proprietary meliputi [[MATLAB]], VBScript, dan Wolfram Language. Sebaliknya, bahasa pemrograman sumber terbuka (*open source*) sangat krusial bagi ekosistem [[Sains terbuka|sains terbuka (open science)]] demi mendukung replikasi penelitian dan pembagian basis kode ilmiah secara bebas.<ref>Abdullah I. Abdelaziz. ''Optimizing large real-world data analysis with parquet files in R: A step-by-step tutorial''. ''Pharmacoepidemiology and Drug Safety''. 2023. Vol. 33 (3). doi:10.1002/pds.5728.</ref> | ||
== Bahasa Pemrograman yang Umum Digunakan == | == Bahasa Pemrograman yang Umum Digunakan == | ||
;[[JavaScript]] | ;[[JavaScript]] | ||
Bahasa yang sangat populer untuk menambahkan fitur interaktif pada halaman web dan aplikasi, memvalidasi data formulir, memanggil API (''Application Programming Interface''), pengembangan game web, dan lain-lain. Ini adalah salah satu bahasa yang paling mudah untuk dipelajari bagi pemula. | Bahasa yang sangat populer untuk menambahkan fitur interaktif pada halaman web dan aplikasi, memvalidasi data formulir, memanggil API (''Application Programming Interface''), pengembangan game web, dan lain-lain. Ini adalah salah satu bahasa yang paling mudah untuk dipelajari bagi pemula. | ||
| Baris 159: | Baris 154: | ||
;[[Bahasa pemrograman C|C]] | ;[[Bahasa pemrograman C|C]] | ||
Bahasa pemrograman sistem legendaris yang dikembangkan oleh Dennis Ritchie pada tahun 1970-an di Bell Laboratories untuk sistem operasi UNIX. Bahasa C memberikan efisiensi tinggi, kontrol perangkat keras yang intim via pointer, dan menjadi fondasi bagi banyak bahasa modern (C++, C#, Java, PHP). | Bahasa pemrograman sistem legendaris yang dikembangkan oleh Dennis Ritchie pada tahun 1970-an di Bell Laboratories untuk sistem operasi UNIX.<ref>Jogiyanto Hartono. ''Konsep Dasar Pemrograman Bahasa C''. Penerbit Andi Yogyakarta. 2000. hlm. 1. ISBN 99795333429.</ref> Bahasa C memberikan efisiensi tinggi, kontrol perangkat keras yang intim via pointer, dan menjadi fondasi bagi banyak bahasa modern (C++, C#, Java, PHP). | ||
;[[Python (bahasa pemrograman)|Python]] | ;[[Python (bahasa pemrograman)|Python]] | ||
| Baris 174: | Baris 169: | ||
=== Pengukuran penggunaan bahasa === | === Pengukuran penggunaan bahasa === | ||
Menentukan bahasa apa yang paling populer sangat bergantung pada bias indikator pengukuran yang digunakan (apakah dihitung dari baris kode di web, jam kerja programmer, jumlah iklan lowongan, atau volume pencarian). | Menentukan bahasa apa yang paling populer sangat bergantung pada bias indikator pengukuran yang digunakan (apakah dihitung dari baris kode di web, jam kerja programmer, jumlah iklan lowongan, atau volume pencarian). | ||
* **Metode Stackify**: Menggabungkan berbagai aktivitas internet dan menempatkan Java, C, C++, Python, dan C# di jajaran teratas. | * **Metode Stackify**: Menggabungkan berbagai aktivitas internet dan menempatkan Java, C, C++, Python, dan C# di jajaran teratas.<ref>[https://stackify.com/popular-programming-languages-2018/ Most Popular and Influential Programming Languages of 2018]. stackify.com. 2017-12-18.</ref> | ||
* **Indeks TIOBE**: Secara berkala menempatkan Python, C++, C, Java, dan C# sebagai lima besar bahasa dengan ekosistem paling aktif di dunia. | * **Indeks TIOBE**: Secara berkala menempatkan Python, C++, C, Java, dan C# sebagai lima besar bahasa dengan ekosistem paling aktif di dunia.<ref>[https://www.tiobe.com/tiobe-index/ TIOBE Index].</ref> | ||
* **Pengaruh AI**: Berdasarkan analisis staf IEEE Spectrum, tren pengembangan asisten pengkodean berbasis kecerdasan buatan berpotensi mengunci dominasi bahasa-bahasa populer yang sudah mapan saat ini, karena model AI dilatih menggunakan volume kode historis dari bahasa-bahasa besar tersebut, sehingga mempersulit bahasa baru untuk mendapatkan traksi. | * **Pengaruh AI**: Berdasarkan analisis staf IEEE Spectrum, tren pengembangan asisten pengkodean berbasis kecerdasan buatan berpotensi mengunci dominasi bahasa-bahasa populer yang sudah mapan saat ini, karena model AI dilatih menggunakan volume kode historis dari bahasa-bahasa besar tersebut, sehingga mempersulit bahasa baru untuk mendapatkan traksi.<ref>[https://spectrum.ieee.org/top-programming-languages-2025 IEEE Spectrum].</ref> | ||
== Klasifikasi Paradigma == | == Klasifikasi Paradigma == | ||
Secara umum, paradigma bahasa pemrograman dapat dikelompokkan ke dalam kategori berikut: | Secara umum, paradigma bahasa pemrograman dapat dikelompokkan ke dalam kategori berikut: | ||
| Baris 198: | Baris 192: | ||
* [[Bahasa pemrograman tujuan umum|Bahasa pemrograman tujuan umum (GPL)]] | * [[Bahasa pemrograman tujuan umum|Bahasa pemrograman tujuan umum (GPL)]] | ||
* [[Bahasa pemrograman tujuan khusus|Bahasa pemrograman tujuan khusus (DSL)]] | * [[Bahasa pemrograman tujuan khusus|Bahasa pemrograman tujuan khusus (DSL)]] | ||
== Bacaan lanjutan == | == Bacaan lanjutan == | ||
* | |||
* | |||
* | |||
* | |||
== Pranala luar == | |||
* | |||
* | |||
* | * | ||
== Referensi == | |||
<references /> | |||
== | == Sumber dan atribusi == | ||
== | Konten artikel ini diadaptasi dari [https://id.wikipedia.org/w/index.php?title=Bahasa+pemrograman&oldid=29343577 Wikipedia bahasa Indonesia], revisi 29343577 (2026-06-14T02:52:56Z), yang tersedia berdasarkan lisensi Creative Commons Atribusi-BerbagiSerupa (CC BY-SA). Gambar pada artikel ini bersumber dari Wikimedia Commons dan mengikuti ketentuan lisensi masing-masing berkas. Mohon gunakan konten dan media secara bijak serta sesuai dengan ketentuan lisensi yang berlaku. | ||
<!-- WIKI_UNISSULA_PRESENTATION_V4 --> | |||
Revisi terkini sejak 23 Agustus 2026 03.14

Bahasa pemrograman atau bahasa penataolahan () adalah sistem notasi untuk menulis program komputer. Sebagian besar bahasa pemrograman adalah bahasa formal berdasarkan teks, tetapi juga dapat berupa grafis.[1]
Deskripsi bahasa pemrograman dibagi menjadi dua komponen; yaitu sintaksis (bentuk) dan semantik (makna), yang biasanya didefinisikan oleh bahasa formal. Beberapa bahasa ditentukan oleh dokumen spesifikasi (misalnya, bahasa pemrograman C ditentukan oleh Standar ISO) sementara bahasa lain (seperti Perl) memiliki implementasi dominan yang diperlakukan sebagai rujukan. Beberapa bahasa memiliki keduanya, dengan bahasa dasar yang ditentukan oleh standar dan ekstensi diambil dari implementasi dominan yang umum.
Pengertian
Bahasa pemrograman adalah sebuah instruksi standar untuk memerintah komputer agar menjalankan fungsi tertentu. Bahasa pemrograman ini merupakan suatu himpunan dari aturan sintaksis dan semantik yang dipakai untuk mendefinisikan tata olah (program). Bahasa ini memungkinkan seorang penata olah (programmer) dapat menentukan secara persis data mana yang akan diolah oleh komputer, bagaimana data ini akan disimpan/diteruskan, dan jenis langkah apa yang secara persis akan diambil dalam berbagai situasi.
Hubungan dengan bahasa alami
Bahasa pemrograman memiliki beberapa kesamaan dengan bahasa alami dalam hal memungkinkan komunikasi ide antarmanusia; program umumnya dapat dibaca oleh manusia dan dapat mengekspresikan ide-ide yang kompleks. Namun, jenis ide yang dapat diekspresikan oleh bahasa pemrograman pada akhirnya terbatas pada domain komputasi.[2]
Istilah computer language (bahasa komputer) terkadang digunakan secara bergantian dengan bahasa pemrograman,[3] tetapi beberapa pihak berpendapat bahwa keduanya adalah konsep yang berbeda. Ada yang menilai bahwa bahasa pemrograman adalah subset dari bahasa komputer.[4] Beberapa menggunakan istilah bahasa komputer untuk mengklasifikasikan bahasa yang digunakan dalam komputasi tetapi tidak dianggap sebagai bahasa pemrograman. Sebagian lainnya menganggap bahasa pemrograman sebagai konstruk teoritis untuk memprogram mesin abstrak, dan bahasa komputer sebagai subset darinya yang berjalan pada komputer fisik yang memiliki sumber daya perangkat keras terbatas.[5]
John C. Reynolds menekankan bahwa bahasa spesifikasi formal merupakan bahasa pemrograman, sama halnya dengan bahasa apa pun yang dimaksudkan untuk eksekusi. Ia berargumen bahwa format masukan tekstual dan bahkan grafis yang memengaruhi perilaku komputer adalah bahasa pemrograman, meskipun mereka umumnya tidak bersifat Turing-complete, dan menyatakan bahwa ketidaktahuan tentang konsep bahasa pemrograman adalah alasan di balik banyak cacat pada format masukan.[6]
Fungsi
Fungsi bahasa pemrograman itu sendiri yaitu memerintah komputer untuk mengolah data sesuai dengan alur berpikir yang programmer inginkan. Keluaran (output) dari bahasa pemrograman tersebut dapat berupa tata olah, konsol atau aplikasi. Contohnya adalah tata olah yang digunakan oleh kasir di mal-mal atau pasar raya, penggunaan lampu lalu lintas di jalan raya, dan lain-lain.
Perkembangannya mengikuti tingginya inovasi yang dilakukan dalam dunia teknologi. Contoh aplikasi yang dapat ditulis dengan bahasa pemrograman antara lain aplikasi permainan, antivirus, web, penyunting, dan teknologi lainnya. Kebutuhan bahasa ini harus disesuaikan dengan fungsi dan perangkat yang menggunakannya. Bahasa pemrograman berbeda dari kebanyakan bentuk ekspresi manusia lainnya karena memerlukan tingkat presisi dan kelengkapan yang lebih tinggi. Komputer "melakukan persis apa yang diperintahkan", dan tidak dapat "mengerti" apa kode yang dimaksudkan untuk ditulis oleh programmer jika terjadi kesalahan.
Sejarah
Perkembangan awal
Komputer pertama yang dapat diprogram ditemukan pada tahun 1940-an, dan bersamanya, bahasa pemrograman pertama juga lahir.[7] Pada awalnya, sumber daya perangkat keras sangat langka dan mahal, sehingga bahasa yang rumit dan memakan waktu tetapi dekat dengan perangkat keras demi efisiensi yang tinggi lebih disukai.
Pengenalan bahasa pemrograman tingkat tinggi merevolusi pemrograman dengan mengabstraksikan detail perangkat keras untuk mengekspresikan algoritme agar lebih mudah dipahami oleh manusia. Pada tahun 1957, Fortran (FORmula TRANslation) diciptakan sebagai bahasa tingkat tinggi terkompilasi pertama, yang tetap bertahan hingga abad ke-21.
Abad 1960-an dan 1970s
Sekitar tahun 1960, komputer mainframe tujuan umum mulai dikembangkan. Karena input menggunakan kartu berlubang, bahasa masa ini dirancang untuk interaksi minimal. Setelah penemuan mikroprosesor pada tahun 1970-an, komputer menjadi jauh lebih murah dan memungkinkan interaksi pengguna yang lebih intensif.
Lisp, diimplementasikan pada tahun 1958, adalah bahasa pemrograman fungsional pertama,[8] yang mendukung rekursi, ekspresi kondisional, manajemen memori dinamis, dan pengumpulan sampah otomatis. Pada tahun 1978, bahasa fungsional lainnya, ML, memperkenalkan inferensi tipe dan parameter polimorfik.
Setelah ALGOL dirilis, bahasa ini 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#—diturunkan secara langsung atau tidak langsung dari ALGOL 60. Simula, bahasa pertama yang mendukung pemrograman berorientasi objek (termasuk subtipe, dynamic dispatch, dan pewarisan), juga merupakan keturunan ALGOL. Prolog, yang dirancang pada tahun 1972, menjadi bahasa pemrograman logika pertama yang berkomunikasi menggunakan notasi logika formal.
Abad 1980-an hingga 2000-an
Penemuan komputer pribadi (PC) pada tahun 1980-an mengubah lanskap penggunaan bahasa pemrograman. Bahasa baru seperti C++ memperkenalkan dukungan kelas dan pewarisan ke dalam basis kode C. Ada dan bahasa baru lainnya memperkenalkan dukungan untuk konkurensi.
Pertumbuhan pesat Internet pada tahun 1990-an mendorong lahirnya Java demi peningkatan portabilitas lintas sistem dan keamanan. Era ini juga mempopulerkan bahasa skrip diketik dinamis—Python, JavaScript, PHP, dan Ruby—yang dirancang untuk mengembangkan program kecil dengan cepat dan berintegrasi dengan HTML di sisi server.
Abad 2000-an hingga sekarang
Terjadi perlambatan pengembangan bahasa baru yang mencapai popularitas luas pada era 2000-an. Inovasi yang menonjol adalah pemrograman berbasis layanan (service-oriented programming) untuk komputasi terdistribusi. C# dan F# melakukan silang ide antara paradigma imperatif dan fungsional. Setelah tahun 2010, bahasa seperti Rust, Go, Swift, Zig, dan Carbon bersaing dalam ranah perangkat lunak kritis-performa yang sebelumnya didominasi oleh C. Mayoritas menggunakan pengetikan statis, sementara beberapa seperti Julia mengadopsi pengetikan dinamis.[9]
Bahasa pemrograman visual seperti Scratch dan LabVIEW juga berkembang pesat,[10][11] termasuk hibrida teks-visual seperti Ballerina.[12] Google ikut mengembangkan proyek bahasa visual lewat Blockly.[13] Banyak mesin permainan (game engines) seperti Unreal dan Unity yang kini mendukung visual scripting secara bawaan.[14][15]
Tingkatan
Bahasa tingkat tinggi (high-level programming language)
Bahasa pemrograman tingkat tinggi adalah bahasa pemrograman yang menjauh dari instruksi perangkat keras dan lebih mendekati bahasa manusia, sehingga meningkatkan keterbacaan dan kemudahan penulisan kode.[16]
Daftar bahasa pemrograman tingkat tinggi:
Bahasa tingkat menengah (intermediate-level programming language)
Bahasa pemrograman tingkat menengah adalah bahasa pemrograman yang menyediakan tingkat abstraksi tingkat tinggi namun tetap mempertahankan kemampuan manipulasi tingkat rendah (seperti manajemen memori manual dan operasi pointer).
Contoh bahasa pemrograman tingkat menengah:
Bahasa tingkat rendah (low-level programming language)
Bahasa pemrograman tingkat rendah adalah bahasa pemrograman yang sepenuhnya berorientasi pada arsitektur perangkat keras dan bahasa mesin sehingga sangat sulit untuk dipelajari manusia, tetapi memiliki efisiensi eksekusi yang sangat tinggi.
Contoh bahasa pemrograman tingkat rendah:
Generasi
Berdasarkan perkembangannya, bahasa pemrograman digolongkan menjadi 5 generasi:
- **Generasi ke-1**: Machine language (kode biner yang dieksekusi langsung oleh prosesor).
- **Generasi ke-2**: Assembly language (penggunaan mnemonik/kode singkat sebagai pengganti biner melalui Assembler).
- **Generasi ke-3**: High-level programming language (bahasa prosedural dan terstruktur seperti C, Fortran, dan Pascal).
- **Generasi ke-4**: 4 GL (fourth-generation language yang bersifat non-prosedural untuk pengelolaan basis data, contoh: SQL).
- **Generasi ke-5**: Programming Language Based Object Oriented & Web Development, serta bahasa yang berfokus pada kecerdasan buatan dan pemecahan masalah berbasis kendala.
Komponen Utama: Sintaksis dan Semantik
Sintaksis
Sintaksis mengacu pada bentuk permukaan dan kombinasi simbol yang membentuk program yang benar secara struktural. Aturan sintaksis biasanya didefinisikan menggunakan ekspresi reguler (untuk analisis leksikal) dan Bentuk Backus–Naur (BNF) untuk tata bahasa bebas konteks.[17]
Sebagai contoh, tata bahasa sederhana berbasis Lisp dapat dituliskan sebagai berikut: <syntaxhighlight lang="bnf"> expression ::= atom | list atom ::= number | symbol number ::= [+-]?['0'-'9']+ symbol ::= ['A'-'Za'-'z'].* list ::= '(' expression* ')' </syntaxhighlight>
Program yang benar secara sintaksis belum tentu benar secara semantik. Banyak program lolos tahap analisis struktural tetapi memicu kesalahan fatal saat dieksekusi atau menunjukkan perilaku tak terdefinisi (undefined behavior). Tata bahasa sebagian besar bahasa pemrograman masuk dalam Tata Bahasa Tipe-2 (bebas konteks) dalam Hierarki Chomsky. Beberapa bahasa seperti Perl dan Lisp mengaburkan batasan parsing dan eksekusi karena memungkinkan modifikasi parser di tengah proses pembacaan kode.[18] Sebaliknya, makro pada bahasa C hanyalah berupa penggantian string teks dan tidak memerlukan kompilasi kode dinamis selama parsing.[19]
Semantik
Semantik mengacu pada arti atau interpretasi dari kode sumber yang valid. Semantik dibagi menjadi dua ragam:
Semantik statis
Mendefinisikan pembatasan tekstual yang sulit diekspresikan oleh sintaksis formal formal biasa, tetapi dapat diperiksa pada saat kompilasi (compile-time).[20] Contohnya termasuk aturan bahwa setiap variabel harus dideklarasikan sebelum digunakan, pemastian label pernyataan `case` bersifat unik,[21] serta penegakan sistem tipe (type system) pada parameter fungsi. Analisis aliran data seperti analisis penugasan pasti (definite assignment analysis) di Java dan C# juga merupakan bagian dari semantik statis.[22]
Semantik dinamis
Mendefinisikan bagaimana perilaku program berjalan saat runtime (semantik eksekusi), seperti strategi evaluasi ekspresi aritmatika atau bagaimana struktur kontrol mengeksekusi pernyataan kondisional. Spesifikasi praktis umumnya menggunakan deskripsi bahasa alami, sementara penelitian akademik sering menggunakan metode formal untuk memetakan perilaku eksekusi ini secara matematis.[23]
Karakteristik dan Fitur Pendukung
Sistem tipe (Type system)
Sistem tipe mendefinisikan bagaimana bahasa mengelompokkan nilai ke dalam tipe data, bagaimana ekspresi dievaluasi, dan bagaimana ekivalensi tipe ditegakkan. Sebuah bahasa dikatakan *fully typed* jika setiap operasi mendefinisikan tipe data yang berlaku secara ketat.[24] Sebaliknya, bahasa *untyped* (seperti bahasa assembly) membolehkan operasi apa pun dilakukan pada bit memori apa pun.[25]
- **Pengetikan Kuat (Strong Typing) vs Lemah (Weak Typing)**: Pengetikan kuat mendeteksi kesalahan tipe secara ketat kecuali dikonversi secara eksplisit (*casting*). Pengetikan lemah membolehkan konversi implisit (*type coercion*), yang mempermudah penulisan tetapi rawan menyembunyikan kesalahan logika.
- **Pengetikan Statis vs Dinamis**: Pada pengetikan statis, tipe ditentukan sebelum program berjalan (saat kompilasi), baik secara eksplisit maupun melalui inferensi tipe otomatis (seperti pada Haskell dan ML).[26] Pada pengetikan dinamis, tipe melekat pada nilai di dalam objek, bukan pada variabelnya, sehingga variabel dapat menampung tipe apa pun secara bergantian.
Tipe data yang umum didukung
Tipe primitif bawaan meliputi numerik seperti bilangan bulat (integer), bilangan pecahan (floating point), Boolean (true/false), dan karakter (ASCII/Unicode). Bahasa modern juga mendukung tipe data terstruktur seperti array, string, list, array asosiatif (map/dictionary), record/struct, tuple, serta pointer yang menyimpan alamat memori fisik. Sejak era 1980-an, dukungan terhadap tipe data abstrak (ADT) semakin meluas untuk mengimplementasikan penyembunyian informasi (information hiding).
Penanganan pengecualian (Exception handling)
Mekanisme ini menangani kesalahan runtime melalui dua pendekatan utama:
- **Terminasi**: Menghentikan program seketika dan menyerahkan kendali kembali ke sistem operasi.
- **Resumsi**: Memperbaiki keadaan galat di dalam blok penanganan kesalahan (*exception handler*) dan melanjutkan eksekusi program di dekat lokasi kegagalan.
Beberapa bahasa mendukung blok finalisasi (`finally`) yang menjamin kode pembersihan sumber daya tetap berjalan baik saat galat terjadi maupun tidak. Ada timbal balik antara penegakan reliabilitas penanganan galat dan performa kecepatan eksekusi kode.
Proses Pembuatan dan Implementasi Program
Proses pengubahan kode sumber (source code) menjadi bahasa mesin (machine language) terdiri dari beberapa pendekatan utama:
Kompilasi
Dalam proses kompilasi semua kode sumber dibaca terlebih dahulu oleh perangkat lunak bernama compiler. Jika tidak ada kesalahan penulisan, compiler menghasilkan berkas biner mandiri berformat executable yang bisa dieksekusi langsung oleh CPU dibantu sistem operasi. Metode ini memberikan kecepatan eksekusi maksimal karena kode dioptimalkan sebelum disebarkan, namun membutuhkan waktu kompilasi yang lebih lama.
Interpretasi
Bahasa yang menggunakan teknik interpretasi membaca kode sumber per baris dan langsung mengeksekusinya menggunakan perangkat lunak bernama interpreter. Jika ditemukan kesalahan, eksekusi program dihentikan saat itu juga. Pendekatan ini mempermudah proses debugging, tetapi memiliki kelemahan performa eksekusi yang 10 hingga 100 kali lebih lambat dibandingkan hasil kompilasi asli.
Kompilasi hibrida (Just-In-Time)
Pendekatan hibrida menggabungkan efisiensi kompilasi dan fleksibilitas interpretasi. Kode sumber dikompilasi terlebih dahulu ke dalam bahasa antara (seperti *bytecode* pada Java atau CLI pada .NET). Saat program dijalankan, lingkungan runtime (seperti Java Runtime Environment) bertindak sebagai interpreter sekaligus melakukan kompilasi *Just-In-Time* (JIT) ke dalam kode mesin fisik tepat sebelum instruksi tersebut dieksekusi oleh komputer.
Bahasa Pemrograman Hak Milik (Proprietary) vs Terbuka (Open Source)
Meskipun sebagian besar bahasa populer memiliki spesifikasi terbuka, banyak bahasa berstatus proprietary (hak milik vendor tunggal), umumnya berupa bahasa khusus domain (DSL) atau bahasa skrip internal produk komersial.
Beberapa bahasa berada di batas antara keduanya; contohnya Oracle Corporation yang memegang hak paten atas beberapa aspek komersial Java,[27] serta Microsoft C# yang memiliki implementasi compiler terbuka namun berjalan di atas spesifikasi lingkungan tertutup Common Language Runtime (CLR).[28] Bahasa komersial populer yang berstatus proprietary meliputi MATLAB, VBScript, dan Wolfram Language. Sebaliknya, bahasa pemrograman sumber terbuka (*open source*) sangat krusial bagi ekosistem sains terbuka (open science) demi mendukung replikasi penelitian dan pembagian basis kode ilmiah secara bebas.[29]
Bahasa Pemrograman yang Umum Digunakan
Bahasa yang sangat populer untuk menambahkan fitur interaktif pada halaman web dan aplikasi, memvalidasi data formulir, memanggil API (Application Programming Interface), pengembangan game web, dan lain-lain. Ini adalah salah satu bahasa yang paling mudah untuk dipelajari bagi pemula.
Bahasa pemrograman sisi server yang digunakan terutama untuk mengembangkan halaman web dinamis dengan kemampuan mengakses dan menampilkan informasi dari basis data secara dinamis tanpa perlu membuat file HTML terpisah untuk setiap halaman situs.
Bahasa berorientasi objek turunan dari bahasa C, dengan penambahan fitur kelas, *templates*, dan penanganan memori tingkat rendah. C++ sering digunakan untuk sistem dengan kebutuhan performa tinggi, pengembangan mesin permainan, kecerdasan buatan, dan aplikasi sistem besar.
Diciptakan oleh Microsoft dalam kerangka kerja .NET. C# banyak digunakan untuk menulis aplikasi desktop Windows (WinForms, WPF, WinUI), pengembangan backend web, pengembangan game lintas platform (menggunakan Unity), dan kecerdasan buatan.
Bahasa pemrograman sistem legendaris yang dikembangkan oleh Dennis Ritchie pada tahun 1970-an di Bell Laboratories untuk sistem operasi UNIX.[30] Bahasa C memberikan efisiensi tinggi, kontrol perangkat keras yang intim via pointer, dan menjadi fondasi bagi banyak bahasa modern (C++, C#, Java, PHP).
Python sangat populer dalam komunitas ilmiah, akademik, analisis data, komputasi awan, dan kecerdasan buatan (Machine Learning). Python terkenal memiliki sintaksis yang sangat bersih, minimalis, dan mudah dipelajari dibandingkan keluarga bahasa C.
Mengusung pendekatan "tulis sekali, jalankan di mana saja" (WORA atau Write Once, Run Anywhere) melalui arsitektur mesin virtual Java (JVM). Java digunakan secara masif di infrastruktur enterprise backend, aplikasi Android, dan sistem transaksional perbankan.
Bahasa pemrograman berorientasi objek murni dari Jepang. Ruby berfokus pada produktivitas penulisan kode dengan sintaksis yang elegan, natural, serta mudah dibaca.
Berasal dari bahasa pemrograman 'BASIC' yang populer pada masa awal komputasi pribadi. Di bawah ekosistem Microsoft, bahasa ini memungkinkan pembuatan prototipe aplikasi Windows berbasis grafis (GUI) secara cepat dan mudah.
Pengukuran penggunaan bahasa
Menentukan bahasa apa yang paling populer sangat bergantung pada bias indikator pengukuran yang digunakan (apakah dihitung dari baris kode di web, jam kerja programmer, jumlah iklan lowongan, atau volume pencarian).
- **Metode Stackify**: Menggabungkan berbagai aktivitas internet dan menempatkan Java, C, C++, Python, dan C# di jajaran teratas.[31]
- **Indeks TIOBE**: Secara berkala menempatkan Python, C++, C, Java, dan C# sebagai lima besar bahasa dengan ekosistem paling aktif di dunia.[32]
- **Pengaruh AI**: Berdasarkan analisis staf IEEE Spectrum, tren pengembangan asisten pengkodean berbasis kecerdasan buatan berpotensi mengunci dominasi bahasa-bahasa populer yang sudah mapan saat ini, karena model AI dilatih menggunakan volume kode historis dari bahasa-bahasa besar tersebut, sehingga mempersulit bahasa baru untuk mendapatkan traksi.[33]
Klasifikasi Paradigma
Secara umum, paradigma bahasa pemrograman dapat dikelompokkan ke dalam kategori berikut:
- Imperatif
Mengeksekusi logika program sebagai rangkaian urutan instruksi perintah yang mengubah status data secara berurutan. Mayoritas bahasa populer masuk ke dalam rumpun ini.
- Fungsional
Menyusun komputasi sebagai evaluasi fungsi matematika murni dan menghindari perubahan status data atau mutasi objek (*side effects*).
- Logika
Pemrograman deklaratif di mana penata olah menetapkan sekumpulan fakta dan aturan logika, lalu mesin inferensi yang akan menentukan metode eksekusi untuk menjawab kueri (contoh: Prolog).
- Berorientasi objek
Mengemas data dan fungsi ke dalam unit kesatuan yang disebut objek. Paradigma ini mendukung pewarisan (*inheritance*), enkapsulasi, pembentukan kelas, dan fungsi dinamis (*dynamic dispatch*).
Lihat pula
- Daftar bahasa pemrograman
- Bahasa pemrograman pendidikan
- Bahasa pemrograman tujuan umum (GPL)
- Bahasa pemrograman tujuan khusus (DSL)
Bacaan lanjutan
Pranala luar
Referensi
- ↑ Janner Simarmata. Rekayasa Perangkat Lunak. Penerbit Andi. ISBN 978-979-29-1347-7.
- ↑ Sharad Chauhan. Programming Languages - Design and Constructs. University Science Press. 2013. hlm. 235. ISBN 978-93-81159-41-5.
- ↑ 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 , ICSOFT 2007 , 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, , 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
- ↑ Severine Hierso. Coding From 1849 to 2022: a Guide to The Timeline of Programming Languages. IEEE Computer Society. June 10, 2022.
- ↑ How Lisp Became God's Own Programming Language. twobithistory.org.
- ↑ Jeff Bezanson. Julia: A Fast Dynamic Language for Technical Computing. 2012.
- ↑ 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.
- ↑ Muhammad Sobri. Pengantar Teknologi Informasi - Konsep dan Teori. ISBN 9789792963120.
- ↑ Michael Sipser. Introduction to the Theory of Computation. PWS Publishing. 1996. ISBN 978-0-534-94728-6.
- ↑ Jeffrey Kegler, "Perl and Undecidability ", The Perl Review.
- ↑ Marty Hall, 1995, Lecture Notes: Macros
- ↑ Anthony Aaby. Introduction to Programming Languages. 2004.
- ↑ Michael Lee Scott, Programming language pragmatics, Edition 2, Morgan Kaufmann, 2006, , p. 18–19
- ↑ Glynn Winskel. The Formal Semantics of Programming Languages: An Introduction. MIT Press. 5 February 1993. ISBN 978-0-262-73103-4.
- ↑ Glynn Winskel. The Formal Semantics of Programming Languages: An Introduction. MIT Press. 5 February 1993. ISBN 978-0-262-73103-4.
- ↑ sumber pada Wikipedia bahasa Indonesia
- ↑ sumber pada Wikipedia bahasa Indonesia
- ↑ Daniel Leivant. Polymorphic type inference. ACM Press. 1983. hlm. 88–98. doi:10.1145/567067.567077.
- ↑ Lihat kasus hukum: Oracle America, Inc. v. Google, Inc.
- ↑ Guide to Programming Languages ComputerScience.org. ComputerScience.org.
- ↑ Abdullah I. Abdelaziz. Optimizing large real-world data analysis with parquet files in R: A step-by-step tutorial. Pharmacoepidemiology and Drug Safety. 2023. Vol. 33 (3). doi:10.1002/pds.5728.
- ↑ Jogiyanto Hartono. Konsep Dasar Pemrograman Bahasa C. Penerbit Andi Yogyakarta. 2000. hlm. 1. ISBN 99795333429.
- ↑ Most Popular and Influential Programming Languages of 2018. stackify.com. 2017-12-18.
- ↑ TIOBE Index.
- ↑ IEEE Spectrum.
Sumber dan atribusi
Konten artikel ini diadaptasi dari Wikipedia bahasa Indonesia, revisi 29343577 (2026-06-14T02:52:56Z), yang tersedia berdasarkan lisensi Creative Commons Atribusi-BerbagiSerupa (CC BY-SA). Gambar pada artikel ini bersumber dari Wikimedia Commons dan mengikuti ketentuan lisensi masing-masing berkas. Mohon gunakan konten dan media secara bijak serta sesuai dengan ketentuan lisensi yang berlaku.