Apa hebatnya Lisp? [Tutup]

104

Saya tidak cukup tahu Lisp untuk mengatakan apakah itu baik atau buruk. Sepertinya semua orang yang telah menggunakan Lisp menyukainya, namun bahasa yang paling populer saat ini berasal dari C.

Jadi, ada apa dengan Lisp yang begitu hebat dan mengapa tidak lebih sering digunakan? Apakah ada sesuatu yang buruk tentang Lisp (selain jumlah tanda kurung yang tak henti-hentinya)?

Darrell Brogdon
sumber
5
"Bahasa paling populer saat ini diturunkan dari C" hanya secara dangkal. Jika Anda melihat fitur-fiturnya, bukan hanya penggunaan tanda kurung kurawal, Anda akan menemukan bahwa bahasa modern tidak jauh dari Lisp, dan semakin dekat setiap saat. Sebuah program dalam C # atau Python atau Ruby, katakanlah, akan lebih terlihat seperti Lisp daripada C.
Ken
11
Contoh bagus dari bahasa yang terlihat seperti C tetapi bertindak lebih seperti Lisp adalah JavaScript. Banyak dari desainnya yang mirip dengan Skema.
JAL
Poin bagus, Ken: semakin banyak fitur yang dulunya unik untuk Lisp (fungsi kelas satu, fungsi sebagai data, bahkan makro) datang dalam bahasa lain. Dan umpan baliknya tidak satu arah: Lisp mengembangkan teknik dan idiom baru dalam pengenalan bahasa lain (misalnya CLOS sebagai tanggapan atas keberhasilan paradigma berorientasi objek).
itowlson
6
Lisp telah mengambil ide-ide dari seluruh penjuru, tapi CLOS menanggapi apa? CLOS (1986-1987) sebagian besar merupakan standarisasi sistem objek sebelumnya untuk Lisp, misalnya, Lisp Mesin Lisp (1980) termasuk Flavours. Saya tidak berpikir bahwa "keberhasilan paradigma OO" belum terlihat pada tahun 1980: "C with Classes" baru berumur satu tahun (dan masih 3 tahun lagi untuk diganti namanya menjadi "C ++"), dan saya tidak tahu bahwa Simula-67 pernah sangat populer. Lisp memiliki banyak fitur lanjutan yang tidak dimiliki bahasa populer saat ini; OO kebetulan berhasil, tetapi Lisp tidak mendapatkannya karena (atau ketika) populer.
Ken
Saya tidak berpikir bahwa semua orang yang menggunakan Lisp menyukainya. Pengalaman saya berbeda. Cobalah untuk bertanya kepada siswa ilmu komputer yang memulai dengan Skema. Mungkin sekitar 10% akan menyukainya, 30% akan menghormatinya dan 60% akan membencinya. Saya juga tidak berpikir sebagian besar bahasa populer diturunkan dari C.
Rainer Joswig

Jawaban:

58

Lisp adalah Chuck Norris dari bahasa pemrograman.

Lisp adalah batasan yang digunakan untuk mengukur bahasa lain.

Knowing Lisp mendemonstrasikan pencerahan pengembang.

Saya pernah mendengar tentang 3 kelemahan (dan argumen balasannya):

  1. Pengetikan dinamis.

    Ada argumen untuk bahasa yang diketik secara statis di luar sana yang berputar di sekitar memberikan informasi yang cukup kepada kompiler untuk menangkap kelas kesalahan tertentu sehingga tidak terjadi pada waktu proses. Tapi Anda masih perlu menguji.

    Artikel ini membahas pengetikan dinamis bersama dengan lebih banyak pengujian: Pengetikan Kuat vs. Pengujian Kuat .

  2. Sulit untuk diambil.

    Sebenarnya ada dua bagian untuk ini: pembelajaran dan alat.

    Lisp membutuhkan upaya untuk benar-benar "mendapatkan", tetapi itu sepadan, karena mempelajari Lisp benar-benar akan membuat Anda menjadi programmer yang lebih baik dalam bahasa lain. Misalnya, setelah Anda benar-benar "mendapatkan" penutupan, Anda akan memahami kelas-kelas dalam Java. Dan begitu Anda "mendapatkan" fungsi kelas satu, Anda akan tertekan setiap kali Anda menggunakan bahasa tanpa fungsi tersebut.

    Saya telah membaca The Little Schemer dan sedang membaca Practical Common Lisp , yang keduanya sangat baik.

    Berikutnya adalah alatnya. Saya menggunakan Mac, jadi saya memusatkan perhatian pada Aquamacs Emacs (membuat Emacs layak huni untuk pemula) dan Steel Bank Common Lisp (SBCL).

  3. Kurangnya perpustakaan.

    Saya belum bisa memastikannya, tapi saya meragukannya. Untuk membangun situs web, sepertinya Hunchentoot dan Elephant menyediakan seperangkat alat yang bagus. Tapi sungguh saya tidak melihat Lispers mengeluh tentang kurangnya perpustakaan (mungkin karena Lisp sangat kuat sehingga mereka tidak dibutuhkan?).

rickmode
sumber
4
Ke alamat (3) - Pernahkah Anda melihat Clojure?
viksit
5
"Tapi sungguh saya tidak melihat Lispers mengeluh tentang kurangnya perpustakaan (mungkin karena Lisp begitu kuat sehingga mereka tidak dibutuhkan?)." Saya akan mengoreksi pernyataan terakhir menjadi "(mungkin karena Lisp begitu kuat sehingga mereka tidak diperlukan UNTUK MEREKA?)" Ini membuat perbedaan besar.
Agnius Vasiliauskas
50
Tidak mengatakan apa-apa mengapa cadel itu bagus, suara negatif dari saya.
Kilon
30
Tidak disukai karena "X hebat! X hebat! X seperti Y, yang juga bagus karena menurut saya hebat!" bukanlah jawaban untuk "Mengapa X dianggap hebat?". Referensi politik juga tidak tepat dan tidak membantu (kebanyakan orang bahkan tidak menganggap libertarianisme adalah ide yang baik). Tiga poin itu membantu, tapi saya berharap mereka tidak "Ini memiliki kelemahan A ... Tapi sebenarnya itu bukan kelemahan!".
Hebat
1
Lisp adalah Chuck Norris dari bahasa pemrograman. jadi itulah yang membuatnya sangat bagus. Mengerti. Suara negatif.
NiCk Newman
71

“Lisp adalah bahasa pemrograman yang dapat diprogram.”
- John Foderaro, CACM, September 1991

Inilah pandangan saya:

Di permukaan, Lisp adalah bahasa pemrograman fungsional sederhana yang bagus. Hampir tidak ada sintaks, dan semua bagian cocok secara logis.

Jika Anda menggali lebih dalam, membaca SICP , dan menulis evaluator metacircular, Anda akan menemukan dua hal: Satu, seluruh penafsir (diberikan hanya beberapa primitif) hanyalah hampir satu halaman kode, dan dua, hubungan antara kode dan data memungkinkan teknik pemrograman yang elegan.

Setelah Anda sepenuhnya menyerap ini, rasanya seperti bahasa lain ditetapkan di batu ketika mereka hanya memungkinkan Anda untuk mengatakan beberapa hal. Lisp dapat membangun abstraksi apa pun jika Anda dapat mendefinisikan sintaks dan semantik untuknya.

Josh Lee
sumber
1
Anda secara teori dapat memasukkan bahasa apa pun ke dalam Lisp seperti Rust, Ruby, C, Java, Python, Erlang. Jadi versi ekspresi s dari Python (Hy) dan dari Rust disebut (Risp) [walaupun saya tidak tahu seberapa stabil ini]. Jika Anda menulis kode dalam Hy, bukan Python, Anda memiliki kemampuan makro dan pengeditan struktural seperti parinfer / paredit ( shaunlebron.github.io/parinfer ). Makro memungkinkan Anda menyematkan DSL Anda sendiri di Lisp, dan mereka juga dapat digunakan untuk mengubah kode lambat menjadi kode cepat melalui makro kompilator. Anda juga dapat mengubah kode Python (Hy) menjadi Rust (Risp), dengan mengubah pohon sexp.
aoeu256
Saya juga mendengar pepatah ini beberapa kali. Apakah Anda akan membebaskan sedikit lagi @ aoeu256?
Pelajar
66

Lisp bagus karena memiliki sintaks yang sangat minimal, sederhana, dan teratur.

Lisp buruk karena memiliki sintaks yang sangat minim, sederhana, dan teratur.

Daniel Earwicker
sumber
4
Apa buruknya sintaks yang minimal, sederhana, dan teratur?
oskarkv
27
@oskarkv - sintaks minimal yang benar-benar teratur berarti tidak ada bias terhadap penggunaan tertentu. Kedengarannya bagus, sampai Anda menemukan prinsip Pareto: akan lebih efisien untuk berprasangka pada kasus yang paling sering terjadi, dan berhenti berpura-pura bahwa semua kasus kemungkinannya sama. Jika 20% pelanggan Anda berada di NYC dan 80% di LA, apakah masuk akal untuk duduk di pagar, di suatu tempat di perbatasan Kansas / Oklahoma, agar tetap "tidak bias" dalam istilah geografis? Atau lebih masuk akal untuk pergi ke tempat sebagian besar pelanggan berada? Kami lebih suka bahasa yang menonjolkan fitur mereka pada kemungkinan masalah.
Daniel Earwicker
4
Sintaks Lisp sangat bagus. Saya mempelajari Haskell setelah Clojure, tetapi pada saat itu bahkan sintaksis Haskell terasa seperti penghalang. Keseragaman suntax Lisp sangat bagus. Jadi, saya tidak tahu persis bias apa yang Anda bicarakan. Bias terhadap ketidakfleksibelan? Terdengar buruk.
oskarkv
3
Kedengarannya buruk jika Anda mengatakannya seperti itu. Aku tidak mengatakannya seperti itu! Bagaimana dengan bias terhadap kejadian yang paling umum, situasi yang paling mungkin terjadi? Ini adalah istilah relatif (tentu saja), jadi tergantung apa yang Anda lakukan. Jika Anda benar-benar kekurangan informasi tentang apa yang akan Anda lakukan, tidak ada gunanya mencoba bersiap. Tetapi itu mungkin tidak benar - Anda memang memiliki informasi, sehingga Anda dapat mempersiapkan ("bias") diri Anda sendiri terhadap situasi yang paling mungkin Anda perlukan.
Daniel Earwicker
22

"Program C atau Fortran yang cukup rumit berisi implementasi setengah dari Common Lisp yang bersifat ad hoc, ditentukan secara informal, penuh bug, dan lambat."

Aturan Kesepuluh Greenspun

Paolo
sumber
16

Berikut beberapa tautan bermanfaat:

Greg Hewgill
sumber
1
On Lisp sangat bagus (saya baru setengah jalan, meskipun saya akui bahwa makro menjadi agak padat); tapi Anda perlu tahu Lisp untuk membacanya. Terlepas dari masalah kecil ini, ini adalah buku yang bagus tidak hanya tentang Lisp, tetapi tentang rekayasa perangkat lunak secara umum.
JS