Teori bahasa pemrograman

**Teori bahasa pemrograman** (**PLT**) adalah cabang ilmu komputer yang membahas desain, implementasi, analisis, karakterisasi, dan klasifikasi bahasa formal yang dikenal sebagai bahasa pemrograman. Teori bahasa pemrograman terkait erat dengan bidang lain termasuk linguistik, matematika, dan rekayasa perangkat lunak.

## Sejarah
Dalam beberapa hal, sejarah teori bahasa pemrograman mendahului bahkan pengembangan bahasa pemrograman. Kalkulus lambda, yang dikembangkan oleh Alonzo Church dan Stephen Cole Kleene pada tahun 1930-an, dianggap oleh beberapa orang sebagai bahasa pemrograman pertama di dunia, meskipun dimaksudkan untuk *[[Model of computation|memodelkan]]* komputasi daripada menjadi sarana bagi pemrogram untuk *[[Computer programming|mendeskripsikan]]* algoritma ke sistem komputer. Banyak bahasa pemrograman fungsional modern telah dideskripsikan sebagai menyediakan "lapisan tipis" di atas kalkulus lambda, dan banyak yang dideskripsikan dengan mudah dalam kaitannya dengannya.

Bahasa pemrograman pertama yang ditemukan adalah Plankalkül, yang dirancang oleh Konrad Zuse pada tahun 1940-an, tetapi tidak diketahui publik hingga tahun 1972, dan tidak diimplementasikan hingga tahun 1998. Bahasa pemrograman tingkat tinggi pertama yang dikenal luas dan berhasil adalah FORTRAN (untuk Formula Translation), yang dikembangkan dari tahun 1954 hingga 1957 oleh tim peneliti IBM yang dipimpin oleh John Backus. Keberhasilan FORTRAN menyebabkan pembentukan komite ilmuwan untuk mengembangkan bahasa komputer "universal"; hasil dari upaya mereka adalah ALGOL 58. Secara terpisah, John McCarthy dari Massachusetts Institute of Technology (MIT) mengembangkan Lisp, bahasa pertama dengan asal-usul di akademisi yang berhasil. Dengan keberhasilan upaya awal ini, bahasa pemrograman menjadi topik penelitian yang aktif pada tahun 1960-an dan seterusnya.

### Garis Waktu
Beberapa peristiwa kunci lain dalam sejarah teori bahasa pemrograman sejak saat itu:

; 1950-an
* Noam Chomsky mengembangkan hierarki Chomsky di bidang linguistik, sebuah penemuan yang secara langsung berdampak pada teori bahasa pemrograman dan cabang ilmu komputer lainnya.

; 1960-an
* Pada tahun 1962, bahasa Simula dikembangkan oleh Ole-Johan Dahl dan Kristen Nygaard; itu secara luas dianggap sebagai contoh pertama dari bahasa pemrograman berorientasi objek; Simula juga memperkenalkan konsep coroutine.
* Pada tahun 1964, Peter Landin adalah orang pertama yang menyadari kalkulus lambda Church dapat digunakan untuk memodelkan bahasa pemrograman. Dia memperkenalkan SECD machine yang "menginterpretasikan" ekspresi lambda.
* Pada tahun 1965, Landin memperkenalkan J operator, pada dasarnya bentuk continuation.
* Pada tahun 1966, Landin memperkenalkan ISWIM, sebuah bahasa pemrograman komputer abstrak dalam artikelnya *The Next 700 Programming Languages*. Ini berpengaruh dalam desain bahasa yang mengarah ke bahasa Haskell.
* Pada tahun 1966, Corrado Böhm memperkenalkan bahasa CUCH (Curry-Church).
* Pada tahun 1967, Christopher Strachey menerbitkan serangkaian catatan kuliahnya yang berpengaruh *[[Fundamental Concepts in Programming Languages]]*, memperkenalkan terminologi *[[Value (computer science)|nilai-R, nilai-L]]*, *[[parametric polymorphism|polimorfisme parametrik]]*, dan *[[ad hoc polymorphism|polimorfisme ad hoc]]*.
* Pada tahun 1969, J. Roger Hindley menerbitkan *The Principal Type-Scheme of an Object in Combinatory Logic*, yang kemudian digeneralisasi menjadi Hindley–Milner algoritma inferensi tipe.
* Pada tahun 1969, Tony Hoare memperkenalkan logika Hoare, bentuk semantik aksiomatik.
* Pada tahun 1969, William Alvin Howard mengamati bahwa sistem bukti "tingkat tinggi", yang disebut deduksi natural, dapat langsung diinterpretasikan dalam varian intuisifnya sebagai varian model komputasi bertipe yang dikenal sebagai kalkulus lambda. Ini dikenal sebagai korespondensi Curry–Howard.

; 1970-an
* Pada tahun 1970, Dana Scott pertama kali menerbitkan karyanya tentang semantik denotasional.
* Pada tahun 1972, pemrograman logika dan Prolog dikembangkan sehingga memungkinkan program komputer untuk diekspresikan sebagai logika matematika.
* Sebuah tim ilmuwan di Xerox PARC yang dipimpin oleh Alan Kay mengembangkan Smalltalk, bahasa berorientasi objek yang dikenal luas karena lingkungan pengembangannya yang inovatif.
* Pada tahun 1974, John C. Reynolds menemukan System F. Itu sudah ditemukan pada tahun 1971 oleh ahli logika matematika Jean-Yves Girard.
* Dari tahun 1975, Gerald Jay Sussman dan Guy Steele mengembangkan bahasa Scheme, dialek Lisp yang menggabungkan ruang lingkup leksikal, namespace terpadu, dan elemen dari actor model termasuk kontinuasi kelas-pertama.
* Backus, pada kuliah Turing Award tahun 1977, menyerang keadaan bahasa industri saat ini dan mengusulkan kelas baru bahasa pemrograman yang sekarang dikenal sebagai bahasa pemrograman tingkat fungsi.
* Pada tahun 1977, Gordon Plotkin memperkenalkan Programming Computable Functions, bahasa fungsional bertipe abstrak.
* Pada tahun 1978, Robin Milner memperkenalkan algoritma inferensi sistem tipe Hindley–Milner untuk bahasa ML. Teori tipe mulai diterapkan sebagai disiplin pada bahasa pemrograman, aplikasi ini telah menghasilkan kemajuan besar dalam teori tipe selama bertahun-tahun.

; 1980-an
* Pada tahun 1981, Gordon Plotkin menerbitkan makalahnya tentang semantik operasional terstruktur.
* Pada tahun 1988, Gilles Kahn menerbitkan makalahnya tentang semantik natural.
* Muncul kalkulus proses, seperti Calculus of Communicating Systems dari Robin Milner, dan model Communicating sequential processes dari C. A. R. Hoare, serta model konkurensi serupa seperti actor model dari Carl Hewitt.
* Pada tahun 1985, perilisan Miranda memicu minat akademis pada bahasa pemrograman fungsional murni yang dievaluasi secara malas (*lazy-evaluated*). Sebuah komite dibentuk untuk menentukan standar terbuka yang menghasilkan perilisan standar Haskell 1.0 pada tahun 1990.
* Bertrand Meyer menciptakan metodologi *[[design by contract]]* dan menggabungkannya ke dalam bahasa Eiffel.

; 1990-an
* Gregor Kiczales, Jim Des Rivieres, dan Daniel G. Bobrow menerbitkan buku *[[The Art of the Metaobject Protocol]]*.
* Eugenio Moggi dan Philip Wadler memperkenalkan penggunaan monad untuk menyusun program yang ditulis dalam bahasa pemrograman fungsional.

## Sub-disiplin dan bidang terkait
Ada beberapa bidang studi yang berada di dalam teori bahasa pemrograman, atau yang memiliki pengaruh mendalam padanya; banyak di antaranya memiliki tumpang tindih yang cukup besar. Selain itu, PLT memanfaatkan banyak cabang matematika lainnya, termasuk teori komputabilitas, teori kategori, dan teori himpunan.

### Semantik formal
Semantik formal adalah spesifikasi formal dari perilaku program komputer dan bahasa pemrograman. Tiga pendekatan umum untuk mendeskripsikan semantik atau "makna" dari program komputer adalah semantik denotasional, semantik operasional, dan semantik aksiomatik.

### Teori tipe
Teori tipe adalah studi tentang sistem tipe; yang merupakan "metode sintaksis yang dapat diatasi untuk membuktikan tidak adanya perilaku program tertentu dengan mengklasifikasikan frasa sesuai dengan jenis nilai yang dihitungnya". Banyak bahasa pemrograman dibedakan oleh karakteristik sistem tipe mereka.

### Analisis dan transformasi program
Analisis program adalah masalah umum untuk memeriksa program dan menentukan karakteristik kunci (seperti tidak adanya kelas kesalahan program). Transformasi program adalah proses mengubah program dalam satu bentuk (bahasa) ke bentuk lain.

### Analisis bahasa pemrograman komparatif
Analisis bahasa pemrograman komparatif berusaha mengklasifikasikan bahasa ke dalam berbagai jenis berdasarkan karakteristiknya; kategori luas bahasa sering dikenal sebagai paradigma pemrograman.

### Generik dan metaprogramming
Metaprogramming adalah pembuatan program tingkat yang lebih tinggi yang, ketika dieksekusi, menghasilkan program (mungkin dalam bahasa yang berbeda, atau dalam subset dari bahasa asli) sebagai hasilnya.

### Bahasa khusus domain
Bahasa khusus domain adalah bahasa yang dibangun untuk secara efisien memecahkan masalah dalam domain tertentu, atau bagian darinya.

### Konstruksi kompiler
Teori kompiler adalah teori penulisan *kompiler* (atau lebih umum, *penerjemah*); program yang menerjemahkan program yang ditulis dalam satu bahasa ke bentuk lain. Tindakan kompiler secara tradisional dipecah menjadi *analisis sintaks* (memindai dan mengurai), *analisis semantik* (menentukan apa yang harus dilakukan program), *[[Compiler optimization|optimasi]]* (meningkatkan kinerja program seperti yang ditunjukkan oleh beberapa metrik; biasanya kecepatan eksekusi) dan *[[Code generation (compiler)|pembuatan kode]]* (pembuatan dan keluaran program yang setara dalam beberapa bahasa target; seringkali arsitektur set instruksi dari central processing unit (CPU)).

### Sistem waktu-proses
Sistem waktu-proses mengacu pada pengembangan lingkungan waktu proses bahasa pemrograman dan komponennya, termasuk mesin virtual, pengumpulan sampah, dan antarmuka fungsi asing.

## Jurnal, publikasi, dan konferensi
Konferensi adalah tempat utama untuk menyajikan penelitian dalam bahasa pemrograman. Konferensi yang paling terkenal meliputi *[[Symposium on Principles of Programming Languages]]* (POPL), *[[Programming Language Design and Implementation (conference)|Programming Language Design and Implementation]]* (PLDI), *[[International Conference on Functional Programming]]* (ICFP), konferensi internasional tentang *Object-Oriented Programming, Systems, Languages & Applications* (OOPSLA) dan *[[International Conference on Architectural Support for Programming Languages and Operating Systems]]* (ASPLOS).

Jurnal-jurnal terkemuka yang menerbitkan penelitian PLT meliputi *[[ACM Transactions on Programming Languages and Systems]]* (TOPLAS), *[[Journal of Functional Programming]]* (JFP), *[[Journal of Functional Programming|Journal of Functional and Logic Programming]]*, dan *[[Higher-Order and Symbolic Computation]]*.

## Lihat juga
* SIGPLAN
* Bahasa pemrograman tingkat sangat tinggi

## Referensi

## Bacaan lebih lanjut
* Abadi, Martín dan Cardelli, Luca. *A Theory of Objects*. Springer-Verlag.
* Michael J. C. Gordon. *Programming Language Theory and Its Implementation*. Prentice Hall.
* Gunter, Carl dan Mitchell, John C. (eds.). *Theoretical Aspects of Object Oriented Programming Languages: Types, Semantics, and Language Design*. MIT Press.
* Harper, Robert. *[https://web.archive.org/web/20070627041059/https://www.cs.cmu.edu/~rwh/plbook/book.pdf Practical Foundations for Programming Languages]*. Versi Draf.
* Knuth, Donald E. (2003). *[https://www-cs-faculty.stanford.edu/~knuth/cl.html Selected Papers on Computer Languages]*. Stanford, California: Center for the Study of Language and Information.
* Mitchell, John C. *Foundations for Programming Languages*.
* Mitchell, John C. *Introduction to Programming Language Theory*.
* O'Hearn, Peter. W. dan Tennent, Robert. D. (1997). *[https://web.archive.org/web/20110719175135/http://www.eecs.qmul.ac.uk/~ohearn/Algol/algol.html ALGOL-like Languages]*. Progress in Theoretical Computer Science. Birkhauser, Boston.
* Pierce, Benjamin C. (2002). *[http://www.cis.upenn.edu/~bcpierce/tapl/main.html Types and Programming Languages]*. MIT Press.
* Pierce, Benjamin C. *Advanced Topics in Types and Programming Languages*.
* Pierce, Benjamin C. *et al.* (2010). *[http://www.cis.upenn.edu/~bcpierce/sf/ Software Foundations]*.

## Pranala luar

*Lambda the Ultimate, sebuah weblog komunitas untuk diskusi profesional dan repositori dokumen tentang teori bahasa pemrograman.
*Karya Besar dalam Bahasa Pemrograman. Dikumpulkan oleh Benjamin C. Pierce (University of Pennsylvania).
*Makalah Klasik dalam Bahasa Pemrograman dan Logika. Dikumpulkan oleh Karl Crary (Carnegie Mellon University).
*Penelitian Bahasa Pemrograman. Direktori oleh Mark Leone.
*λ-Calculus: Dulu & Sekarang oleh Dana S. Scott untuk Perayaan Seratus Tahun Turing ACM
*Grand Challenges in Programming Languages. Sesi panel di POPL 2009.