Apa yang membuat Lisp istimewa

«Bahasa pemrograman terhebat yang pernah dibuat«
— Alan Kay, "di Cadel"

Apa yang membuat Lisp istimewa

Ketika McCarthy mengembangkan Lisp pada akhir tahun 1950-an, bahasa ini sangat berbeda dari bahasa-bahasa yang sudah ada, yang paling penting adalah Fortran.

Lisp memperkenalkan sembilan ide baru:

1. Persyaratan. Pernyataan kondisional merupakan konstruksi if-then-else. Sekarang kita menganggapnya remeh. Mereka ditemukan McCarthy selama pengembangan Lisp. (Fortran pada saat itu hanya memiliki pernyataan goto, yang terkait erat dengan instruksi cabang pada perangkat keras yang mendasarinya.) McCarthy, ketika berada di komite Algol, menyumbangkan persyaratan ke Algol, yang kemudian persyaratan tersebut menyebar ke bahasa lain.

2. Tipe fungsi. Di Lisp, fungsi adalah objek kelas satu - mereka adalah tipe data, seperti angka, string, dll., dan memiliki representasi literal, dapat disimpan dalam variabel, dapat diteruskan sebagai argumen, dll.

3. Pengulangan. Rekursi, tentu saja, sudah ada sebagai konsep matematika sebelum Lisp, tetapi Lisp adalah bahasa pemrograman pertama yang mendukungnya. (Ini mungkin tersirat dalam pembuatan fungsi sebagai objek kelas satu.)

4. Konsep baru tentang variabel. Di Lisp, semua variabel adalah penunjuk yang efektif. Nilai adalah apa yang dimiliki tipe, bukan variabel, dan menetapkan atau mengikat variabel berarti menyalin petunjuk, bukan apa yang ditunjuknya.

5. Pengumpulan sampah.

6. Program terdiri dari ekspresi. Program Lisp adalah pohon ekspresi, yang masing-masing mengembalikan nilai. (Beberapa ekspresi Lisp dapat mengembalikan banyak nilai.) Hal ini kontras dengan Fortran dan banyak bahasa sukses lainnya yang membedakan antara “ekspresi” dan “pernyataan.”

Perbedaan ini wajar terjadi di Fortran karena bahasanya berorientasi pada garis (tidak mengejutkan untuk bahasa yang format masukannya adalah kartu berlubang). Anda tidak dapat membuat pernyataan bertingkat. Dan selama Anda memerlukan ekspresi matematika agar berfungsi, tidak ada gunanya meminta hal lain mengembalikan nilai karena mungkin tidak ada apa pun yang menunggu untuk dikembalikan.

Pembatasan tersebut dicabut dengan munculnya bahasa terstruktur blok, namun pada saat itu sudah terlambat. Perbedaan antara ekspresi dan pernyataan telah ditetapkan. Itu diturunkan dari Fortran ke Algol dan selanjutnya ke keturunan mereka.

Ketika suatu bahasa seluruhnya terdiri dari ekspresi, Anda dapat menyusun ekspresi sesuka Anda. Anda dapat menulis salah satunya (menggunakan sintaks Busur)

(if foo (= x 1) (= x 2))

atau

(= x (if foo 1 2))

7. Tipe simbol. Karakter berbeda dari string, dalam hal ini Anda dapat memeriksa kesetaraan dengan membandingkan pointer.

8. Notasi untuk kode menggunakan pohon simbol.

9. Seluruh bahasa selalu tersedia. Tidak ada perbedaan yang jelas antara waktu baca, waktu kompilasi, dan waktu proses. Anda dapat mengkompilasi atau menjalankan kode saat Anda membaca, atau membaca atau menjalankan kode saat Anda mengkompilasi, atau membaca atau mengkompilasi kode saat kode tersebut dijalankan.

Menjalankan kode sambil membaca memungkinkan pengguna memprogram ulang sintaksis Lisp; menjalankan kode pada waktu kompilasi adalah dasar dari makro; kompilasi runtime adalah dasar untuk menggunakan Lisp sebagai bahasa ekstensi dalam program seperti Emacs; dan terakhir, pembacaan runtime memungkinkan program berkomunikasi menggunakan ekspresi-s, sebuah ide yang baru-baru ini diciptakan kembali dalam XML.

Kesimpulan

Ketika Lisp pertama kali ditemukan, ide-ide ini jauh dari praktik pemrograman konvensional yang ditentukan oleh perangkat keras yang tersedia pada akhir tahun 1950an.

Seiring waktu, bahasa default, yang diwujudkan oleh keberhasilan bahasa populer, secara bertahap berevolusi menuju Lisp. Poin 1-5 sekarang diterima secara luas. Poin 6 mulai muncul di arus utama. Di Python, ada klausa 7 dalam beberapa bentuk, meskipun tidak ada sintaksis yang sesuai. Item 8, yang (dengan item 9) memungkinkan makro di Lisp, masih hanya ada di Lisp, mungkin karena (a) memerlukan tanda kurung tersebut atau sesuatu yang sama buruknya, dan (b) jika Anda menambahkan peningkatan kekuatan terbaru ini, Anda bisa tidak lagi mengklaim telah menemukan bahasa baru, tetapi hanya telah mengembangkan dialek baru Lisp; -)

Meskipun ini berguna bagi pemrogram modern, aneh untuk mendeskripsikan Lisp dalam hal perbedaannya dari teknik acak yang diadopsi dalam bahasa lain. Ini mungkin bukan apa yang dipikirkan McCarthy. Lisp tidak dirancang untuk memperbaiki kesalahan Fortran; itu tampak lebih sebagai produk sampingan dari percobaan melakukan aksioma perhitungan.

Sumber: www.habr.com

Tambah komentar