Mengapa Lisp bermanfaat? [Tutup]

64

Lisp jelas merupakan keuntungan untuk hal-hal AI , tetapi tidak tampak bagi saya bahwa Lisp lebih cepat daripada Java, C #, atau bahkan C. Saya bukan penguasa Lisp, tetapi saya merasa sangat sulit untuk memahami keuntungannya orang akan menulis perangkat lunak bisnis di Lisp.

Namun itu dianggap sebagai bahasa peretas.

Mengapa Paul Graham menganjurkan Lisp? Mengapa Perangkat Lunak ITA memilih Lisp daripada bahasa tingkat tinggi lainnya? Nilai apa yang dimilikinya atas bahasa-bahasa ini?

Peter Mortensen
sumber
20
Baris "Saya tidak berpikir Lisp lebih cepat dari Java, C # atau bahkan lebih cepat dari C" agak membingungkan. C biasanya dianggap sebagai standar untuk "kode cepat karena Anda memprogram dekat dengan logam" - itu adalah tolok ukur untuk mengalahkan hampir semua hal. Sekarang, Java dan bahasa GC'd lainnya dapat mengalahkannya dalam beberapa konteks, misalnya kecepatan alokasi / pembersihan memori. Tapi, kalimat ini sepertinya agak mundur.
Michael H.
2
Gangguan adalah bahasa tingkat yang lebih tinggi dari yang Anda sebutkan, sehingga umumnya lebih lambat.
Segfault
5
@Bo Tian: "bahasa tingkat tinggi" membutuhkan definisi yang jelas. Bahkan jika ada, ini terdengar seperti non-sequitur. (terima kasih @ Mark)
Mike Dunlavey
5
@BoTian "level lebih tinggi" tidak sama dengan "lebih lambat" secara default.
24
Lisp ada untuk menunjukkan betapa salahnya setiap perancang bahasa lainnya.

Jawaban:

78

Ada beberapa alasan mengapa saya berupaya untuk menjadi kompeten dengan Common Lisp.

  1. Kode homoikonik. Ini memungkinkan kode modifikasi diri terstruktur.
  2. Makro sintaksis sadar. Mereka memungkinkan penulisan ulang kode boilerplate.
  3. Pragmatisme. Common Lisp dirancang untuk menyelesaikan pekerjaan para profesional yang bekerja. Kebanyakan bahasa fungsional tidak, sebagai suatu peraturan.
  4. Fleksibilitas. Ia dapat melakukan banyak hal berbeda, semuanya dengan kecepatan yang wajar.
  5. Ketangkasan. Dunia nyata itu berantakan . Pengkodean pragmatis akhirnya harus menggunakan atau menciptakan konstruksi yang berantakan. Common Lisp memiliki tingkat kelemahan yang cukup untuk menyelesaikan sesuatu.

Arguably satu-satunya alasan nyata untuk memilih terhadap Common Lisp adalah bahwa perpustakaan standar diberi tanggal.

Saya akan mengambil risiko dan mengatakan bahwa dalam kasus umum, sintaksis seharusnya tidak menjadi masalah bagi pekerja perangkat lunak profesional.

Paul Nathan
sumber
8
Sintaks bisa menjadi masalah jika secara signifikan mempengaruhi keterbacaan atau kemampuan menulis. Saya tidak berpikir itu masalahnya untuk Lisp. Editor atau IDE yang baik dapat melakukan highlight sintaksis dan pencocokan paren yang cukup baik agar tidak menjadi masalah besar.
Matt Olenik
4
Juga, saya hanya menggunakan sedikit Lisp (Common Lisp), dan perasaan umum yang saya dapatkan adalah bahwa # 2 adalah manfaat terbesar bagi Lisp. Mungkin saya berpikir dalam paradigma yang salah, tetapi saya tidak berpikir saya pernah mengalami situasi di mana kode modifikasi diri diperlukan. Jika Anda memiliki alasan khusus untuk menggunakannya, maka ya, tetapi sebaliknya makro tampak seperti fitur pembunuh nyata. Sunting: Baru menyadari ini, pada kenyataannya, fitur yang sama.
Matt Olenik
3
@ Mat: Ya. FWIW, saya baru-baru ini bertemu dengan Nemerle, bahasa eksperimental C # -ish CLR dengan makro. nemerle.org . Saya kira layak untuk mencari pada titik tertentu, hanya untuk pengalaman.
Paul Nathan
2
"Pragmatisme. CL dirancang untuk menyelesaikan pekerjaan para profesional yang bekerja. Sebagian besar bahasa fungsional tidak sesuai aturan.": Saya tidak setuju dengan pernyataan ini. Saya sangat tertarik pada Lisp dan mencoba mendedikasikan waktu untuk mempelajarinya. Tapi saya menemukan bahasa FP lain juga sangat efektif untuk "menyelesaikan sesuatu", setidaknya ini adalah pengalaman saya dengan Scala dan Haskell hingga sekarang.
Giorgio
1
"CL dirancang untuk menyelesaikan pekerjaan para profesional yang bekerja. Kebanyakan bahasa fungsional tidak, sebagai suatu peraturan.": Bisakah Anda menguraikan ini? Terutama pada bagian kedua kalimat. Bisakah Anda menyebutkan beberapa contoh?
Giorgio
23

Saya suka Lisp untuk itu

  • cara bersatu, sederhana dan elegan untuk merepresentasikan kode dan data.
  • sudut pandang yang unik, yang memberi saya 80 poin IQ bonus penting untuk menyelesaikan masalah-masalah sulit (dengan tip hat ke Alan Kay)
  • lingkungan pengembangan yang sangat gesit, interaktif dan percakapan
  • kekuatan yang belum pernah terjadi sebelumnya untuk membuat dan memanipulasi abstraksi

Pemrograman adalah memerangi kompleksitas. Abstraksi adalah satu-satunya alat yang efektif untuk memerangi kompleksitas yang semakin meningkat (dengan ukuran tengkorak kami yang sangat terbatas dan konstan). Mengelola abstraksi dengan Lisp seperti memiliki jin dengan keinginan n +1.

Maglob
sumber
5
+1 untuk "Pemrograman adalah mengatasi kompleksitas. Abstraksi adalah satu-satunya alat yang efektif untuk memerangi kompleksitas yang semakin meningkat (dengan ukuran tengkorak kami yang sangat terbatas dan konstan)." (Kuharap aku bisa memberi +10.)
Giorgio
Apa itu "lingkungan pengembangan yang sangat gesit, interaktif dan percakapan"?
qed
6
Bukankah itu (+ 1 n)keinginan, atau lebih praktis lebih bijaksana (incf n)?
Reb.Cabin
21

Saya percaya jawaban Lisp yang benar lebih gnomic. Sesuatu seperti: "Jika Anda harus bertanya, Anda belum siap."

Lalu jika ada yang bertanya lebih lanjut, jawaban yang benar adalah "ya" jika itu adalah pertanyaan "baik" atau "Anda belum siap."

glenatron
sumber
5
Paul Graham mengutip Louis Armstrong: "Jika Anda harus bertanya apa itu jazz, Anda tidak akan pernah tahu."
Jason Baker
25
+1. Meskipun kadang-kadang frasa seperti "Jika Anda harus bertanya, Anda belum siap" membuat saya berpikir bahwa orang yang mengatakannya tidak dapat menjelaskan
superM
5
@superM Lisp dan bahasa fungsional mirip Lisp memiliki properti yang sekali orang mempelajarinya, orang tidak dapat lagi menjelaskannya!
esoterik
18

Saya pikir bahwa keuntungan Lisp dalam bidang kecerdasan buatan (AI) yang semua orang sebutkan adalah kecelakaan historis ... Lisp dimulai untuk / dalam AI, tetapi ini adalah bahasa tujuan umum.

Saya percaya kecepatan eksekusi bukan satu-satunya aspek penting dari sebuah bahasa (saya pernah melakukannya sekali). Namun, salah satu aspek yang saya sukai tentang Lisp adalah bagi saya, itu menggabungkan Python dan C dalam satu. Saya dapat mulai kode tanpa deklarasi dan prototipe segera dan sangat cepat (runtime dan REPL sangat penting untuk ini). Setelah saya menjalankan sesuatu, saya menambahkan deklarasi tipe dan "mengoptimalkan" kode saya, sedikit demi sedikit. Mengagumkan untuk menekan tombol SLIME dan menonton bahasa mesin yang dihasilkan untuk fungsi yang saya minati. Dengan Python, tidak ada deklarasi tipe, jadi saya tidak bisa mendapatkan lebih banyak kecepatan, tetapi dalam C, menyelesaikan apa pun dengan cepat adalah jauh lebih menyakitkan. Lisp sangat berguna dalam hal ini.

Karena itu, saya suka Lisp terutama karena makro . Ketika Anda akhirnya mengerti apa yang bisa dicapai makro, saya pikir Anda dengan mudah memasang tanda kurung. Juga, editor seperti Emacs mengelola tanda kurung sendiri sehingga Anda tidak perlu melakukannya. Saya akui, bagaimanapun, bahwa saya tidak menemukan tanda kurung seburuk itu pada awalnya, dan saya tahu beberapa orang tidak tahan. Tetapi karena seluruh tujuan makro adalah untuk menghasilkan kode pada waktu kompilasi, kode dalam Lisp menggunakan struktur data standar, dan tanda kurung hanyalah representasi kode sebagai daftar, yang diperlukan untuk membuat makro mudah ditulis.

Saya tidak tahu bahasa lain di mana Anda bisa menulis sedikit bahasa kecil untuk menggambarkan masalah Anda lebih baik dengan kemudahan Lisp. Itulah keuntungan yang dibicarakan oleh Paul Graham dalam Beating the Averages . Ini adalah modularitas ekstrim dan keringkasan. Di Jawa saya harus menulis banyak teks mentah untuk mengekspresikan satu ide. Di Lisp saya bisa menulis beberapa makro yang menghasilkan kode itu secara otomatis, dan setelah itu gunakan saja. Bagaimanapun, Anda harus memahami beberapa contoh dari ini dan kemudian menilai sendiri. Ketika saya "melihatnya", saya terpesona, dan saya masih berpikir Lisp adalah bahasa terbesar untuk alasan ini saja. Saya selalu mencari makro dalam bahasa umum untuk melihat apakah mereka cocok dengan kekuatan Lisp macro, tetapi sampai saat ini saya tidak menemukannya. Keempat dekat kedua.

Saya akan menyelesaikan dengan beberapa kritik, terkait dengan perangkat lunak bisnis:

  1. Perangkat lunak bisnis membutuhkan perpustakaan, dan yang bagus, dan Lisp tidak pandai dalam hal ini. Saya biasanya tidak membutuhkannya, tetapi ketika saya melakukannya, saya harus memilih dari beberapa pilihan perangkat lunak tidak lengkap yang digunakan beberapa orang. Saya harus berkontribusi untuk memperbaiki ini, saya kira ...

  2. Perangkat lunak bisnis biasanya dibangun oleh kelompok besar orang, dan saya pikir komunikasi dapat terhambat dengan makro, karena mereka pada dasarnya mengubah bahasa. Banyak pemrogram lebih nyaman mendeteksi pola-pola tertentu dalam kode, bahkan jika teks program lebih panjang dan lebih berulang. Saya kira di ITA mereka memiliki beberapa aturan tentang makro atau mereka memiliki perpustakaan makro besar yang membuat kolaborasi mudah (atau, lebih sederhana, semua programmer adalah pakar Lisp).

Pau Fernández
sumber
7
Coba clojure, itu adalah cacat pada JVM. Jadi dengan menggunakan JVM Anda dapat menggunakan semua hal java.
Zachary K
@zachary: Setidaknya ada 2 implementasi Common Lisp pada JVM. ABCL relatif matang.
Larry Coleman
Clojure 100% kompatibel dengan Java (setidaknya saya belum pernah menemukan apa pun di Jawa yang tidak dapat diperbaiki Clojure, dan sedemikian rupa sehingga orang Jawa tidak dapat mengeluh). Clojure sangat dipengaruhi oleh yang terbaik dari Common Lisp dan yang terbaik dari FP. Dengan itu dan SBCL dan CLisp dan Emacs, Lisper mana pun harus merasa seperti raja saat ini.
Reb.Cabin
13

Saya tidak suka Lisp.

(Saya suka banyak konsep yang digunakannya, bagaimana itu membuat teknik yang kuat tersedia secara asli, dan sebagainya.

Tetapi saya tidak pernah yakin untuk benar-benar menggunakannya, ((walaupun beberapa orang telah mencoba ) karena manfaat dari bahasa tersebut dapat dicapai dengan bahasa pemrograman lain (beberapa secara langsung, beberapa secara tidak langsung), jadi tidak ada cukup manfaat untuk membuat saya menghabiskan waktu mempelajarinya dan bertahan dengan sintaks yang mengerikan.)))

Tapi ya, untuk alasan beberapa orang menyukainya, lihat pertanyaan Stack Overflow ini:

Mungkin ada beberapa lagi dalam pertanyaan terkait untuk itu juga.

Peter Boughton
sumber
26
"Memasang sintaks yang mengerikan". Mungkin itu terlalu lama sejak saya adalah seorang pemula Lisp, tetapi kesederhanaan dan keteraturan sintaks Lisp adalah fitur yang sangat besar, karena itulah yang memungkinkan bagi saya untuk memperluas Lisp dengan sendirinya. Saya dapat menambahkan iterator khusus, saya dapat menambahkan konstruksi lingkup "with-xxx" baru yang secara otomatis membersihkan sendiri sehingga pengembang tidak perlu, dll. Sintaksnya adalah fitur, bukan bug.
Michael H.
5
Kemampuan untuk memperluas bahasa dengan dirinya sendiri tidak memerlukan sintaks terbatas hingga setengah lusin karakter. Juga: "Sintaksnya adalah fitur, bukan bug" ? - Aku tahu. Saya tidak menyebutnya bug.
Peter Boughton
8
Oke, bagaimana Anda mendapatkan manfaat dari sistem makro? Berapa banyak bahasa yang memungkinkan Anda untuk membangun ekstensi berorientasi objek kepada mereka dalam satu bab yang cukup pendek (Paul Graham, "On Lisp").
David Thornley
6
Sintaksnya tidak lebih mengerikan daripada bahasa lain. Saya telah menemukan bahwa tanda kurung secara visual "menghilang" setelah beberapa saat. Dengan lekukan yang baik, kode mudah dibaca.
Barry Brown
8
Tetapi memiliki kemampuan untuk dengan mudah berpindah antar S-exps tampak besar ... Kemudian pada subjek tanda kurung, saya suka kutipan berikut: Parentheses? Kurung apa? Saya belum melihat tanda kurung sejak bulan pertama pemrograman Lisp saya. Saya ingin bertanya kepada orang-orang yang mengeluh tentang tanda kurung di Lisp jika mereka terganggu oleh semua jarak di antara kata-kata di surat kabar "- Ken Tilton
Cedric Martin
9

Saya akan menafsirkan "Lisp" sebagai " Common Lisp "; Saya tidak ragu jawaban lain akan mengatakan " Skema ". (Petunjuk: Lisp adalah keluarga bahasa.)

Apa artinya "lebih cepat"? Dalam hal waktu yang dibutuhkan untuk menjalankan patokan, tidak, ini tidak lebih cepat dari C ( tapi bisa jadi ).

"Cepat" dalam jangka waktu berapa lama Joe Random Hacker menulis program kerja, atau memperbaiki bug di sistem perangkat lunak besar? Hampir pasti.

Adapun peretas ini , saya menggunakannya karena saya ingin menulis kode, bukan boilerplate. Saya ingin menulis sesuatu sekali , dan tidak mengulangi diri saya sendiri. Dan saya ingin berinteraksi dengan program sementara saya menulisnya.

Frank Shearar
sumber
Bukankah itu luar biasa jika Anda bisa menulis sedikit fungsi di dalam editor Anda yang akan segera melakukan sesuatu ke seluruh kode Anda? Atau bisakah Anda melakukannya?
Markus
4
@ Mark: Saya pikir Anda sedang menggambarkan Emacs.
Ferruccio
@Ferruccio Saya pikir Anda harus menjalankan kode Anda dulu.
Mark C
2
@ Mark C: Ya, Anda harus menyorot wilayah itu dan kemudian M-x eval-region(atau eval-buffer), tapi hanya itu.
Frank Shearar
1
@MarkC: Juga, jika Anda berada di buffer awal , Anda bisa menulis fungsi Anda dan tekan C-j(yang secara moral setara untuk masuk) dan itu akan segera berlaku.
Tikhon Jelvis
7

Saya suka Lisp karena ini adalah media yang sangat baik untuk mengekspresikan pikiran saya. Predikat untuk bahasa favorit saya adalah "Jika saya dapat memilih sesuatu untuk mengekspresikan ide, apakah itu?". Saat ini Lisp * ( Skema lebih spesifik), sampai-sampai saya menemukan diri saya menulis catatan pemrograman di dalamnya. Seperti IRL , kertas dan pulpen. Bahkan ketika saya sedang berpikir tentang program saya perlu menerapkan dalam PHP atau Ruby atau Python.

Ini bukan trik yang saya pelajari sendiri, atau sesuatu yang saya lakukan untuk kredibilitas culun (tidak ada yang bisa melihat bagian dalam buku catatan saya); hanya saja Lisp jauh lebih alami bagi saya untuk berpikir daripada salah satu alternatif, dan bahasa apa pun yang beresonansi dengan Anda yang mendalam adalah yang Anda hargai.

* Sama seperti catatan kaki, Haskell menutup celah dengan cepat ketika saya belajar lebih banyak tentang itu.

Inaimathi
sumber
6

Masalahnya adalah kekuatan. Daya = Bekerja (fungsionalitas program) / Waktu

"Kami tidak keluar untuk memenangkan programmer Lisp; kami mengejar programmer C ++. Kami berhasil menyeret banyak dari mereka sekitar setengah jalan ke Lisp."

- Guy Steele, rekan penulis spec Java

Plot semacam kurva antara C ++ dan Java. Terus berjalan, dan pada titik tertentu Anda akan menemukan Lisp.

compman
sumber
2
Masalahnya di sini adalah bahwa Anda kehilangan banyak fungsi C ++ pergi ke Jawa, tetapi mengambilnya lagi (sering dalam bentuk yang ditingkatkan) ketika pergi ke Lisp.
David Thornley
@ David T Pertanyaan SO pada kutipan yang tepat memiliki tautan ke sumber (mencari "mengutip"). Kutipan tidak boleh dianggap serius.
Mark C
@ David: Suka makro. Bukan hanya karena mereka meninggalkan mereka untuk pergi ke Jawa (dan karenanya C #) tetapi mereka membuat kekurangan mereka sebagai "kebajikan". Makro sangat berguna jika saya membuat DSL di atas bahasa dasar.
Mike Dunlavey
@ Mike Dunlavey: Saya benar-benar tidak suka macro di C ++ (heck, saya tidak suka mereka di C, tapi saya tidak punya banyak pilihan di sana). Saya sangat suka macro di Common Lisp. Anda tahu, saya pikir masalah saya dengan komentar itu adalah bahwa saya suka C ++ dan Common Lisp jauh lebih banyak daripada saya suka Java.
David Thornley
@ David: Aku bersamamu 100% di makro di Lisp. Dalam C / C ++ mereka jelek dan rentan terhadap penyalahgunaan, tetapi untuk jenis ( diakui pinggiran ) hal yang saya lakukan, mereka begitu jauh lebih baik daripada tidak sama sekali. Tentu saja, ketika saya melakukannya di C ++ itu bisa dianggap sebagai penyalahgunaan, tetapi dalam Lisp itu dianggap hangat sebagai pintar. Sosok pergi.
Mike Dunlavey
6

Paul Graham semacam menjawab sendiri pertanyaan ini dalam What Made Lisp Different .

Perlu diingat dia menggunakannya untuk startupnya selama pertengahan 1990-an, jadi Python dan Ruby tidak benar-benar matang pada saat itu (atau mungkin bahkan tidak dilahirkan).

Lisp pada dasarnya memiliki semua keunggulan bahasa dinamis, dan saya pikir untuk sebagian besar aplikasi web saat ini, Python dan Ruby cukup mengagumkan, dan mereka memiliki keunggulan kerangka kerja dan dokumentasi serta komunitas yang dinamis.

Fitur pembunuh mungkin seluruh program dibuat dari ekspresi. Ini berarti Anda dapat menyortir blok kode ke fungsi (atau makro ...), karena satu blok kode tidak lebih dari ekspresi.

Python sebenarnya tidak memiliki fitur ini; Anda harus mendefinisikan fungsi dan menyebarkannya. Ruby tampaknya memiliki blok, mungkin agak terbatas dibandingkan dengan apa yang dapat dilakukan Lisp (saya tidak yakin).

hasen
sumber
Artikel oleh Paul Graham menarik karena, kecuali untuk beberapa item, sebagian besar bahasa hari ini tampaknya memiliki fitur yang ia daftarkan. Jadi mungkin Lisp lebih menarik pada masa itu; sekarang ini lebih berharga sebagai bahasa yang memperkenalkan fitur-fitur itu?
Andres F.
AST sebagai sintaks bahasa masih menjadi domain Lisp. Saya tidak mengetahui bahasa non-pelat di mana makro memiliki seluruh bahasa tersedia, selama waktu kompilasi (Ya kompiler pada dasarnya menyerahkan panggilan makro ke definisi makro yang merupakan program Lisp sendiri. Anda ingin melakukan http dan db di makro pada waktu kompilasi ?)
przemo_li
6

Saya telah memiliki reaksi spontan terhadap Skema di masa lalu, tetapi sekarang saya siap untuk memberikan Lisp ( Clojure , sebenarnya) tembakan.

Anda tahu, selama bertahun-tahun saya mengambil sedikit bahasa seperti Java, C #, C ++, Python, dan banyak hal tidak lagi menantang.

Clojure memiliki banyak janji, tampaknya sangat bersih, dan dapat menyelesaikan banyak masalah di dunia nyata. Kasus kuat untuk bahasa yang bersih seperti Clojure adalah munculnya komputer multi-core.

Yay LISP!

EDIT: Perangkat Lunak ITA didirikan oleh lulusan MIT, dan Skema / Lisp adalah satu-satunya bahasa yang dipelajari banyak lulusan MIT. Agar adil, orang dapat hot-swap algoritma Lisp pada sistem produksi yang berjalan, yang merupakan nilai tambah besar.

Pekerjaan
sumber
8
Re: Hal-hal tidak lagi menantang --- cobalah Haskell dan beri tahu kami apa yang Anda pikirkan. Selain itu, Anda selalu dapat mencoba mempelajari beberapa INTERCAL untuk perubahan!
Mark C
3
@ Mark C, maaf tapi saya tidak menyentuh INTERCAL. Tantangan bukan satu-satunya kriteria; itu harus mampu menyelesaikan masalah nyata dengan cepat juga. Setidaknya Haskell digunakan dan dicintai oleh banyak orang.
Ayub
Itu bercanda, tentu saja.
Mark C
1
Memperbarui kode yang sedang berjalan (dengan hati-hati!) Di server produksi adalah salah satu kesenangan Lisp, ya. Python, setidaknya ketika saya bermain dengannya, tidak melakukan ini dengan baik; Anda harus mengkompilasi ulang secara manual semua fungsi / metode yang merujuk pada perubahan Anda, sementara semua implementasi Common Lisp menanganinya untuk Anda. Saya menggunakan kekuatan yang sama untuk pengembangan: menulis, menguji sesuatu, mengedit, menguji - tanpa kompilasi loop, dan Anda dapat mengambil tes interaktif Anda & mengubahnya menjadi unit test jika Anda mau.
Michael H.
@ Saya lupa ... PLEASE?
Mark C
6

Hal yang saya sukai tentang Lisp adalah bahwa ia melampaui paradigma. Beberapa orang akan mengatakan bahwa Lisp fungsional, yang lain akan mengatakan itu deklaratif, dan yang lain akan mengatakan itu multi-paradigma. Saya pikir semua ini melewatkan intinya. Saat Anda menggunakan Lisp, paradigma tidak lagi menjadi kendala.

Ingin benda? Kamu bisa memilikinya. Ingin pemrograman fungsional? Kau bisa memilikinya. Ingin pemrograman logika gaya- Prolog ? Tulis beberapa makro. Ingin pemrograman deklaratif gaya-SQL? Lakukan untuk itu. Ingin menggunakan beberapa paradigma yang belum ditemukan? Saya yakin itu bisa dilakukan di Lisp.

Selain bahasa-bahasa yang mirip- Keempat , saya belum melihat bahasa lain menawarkan tingkat fleksibilitas ini.

Jason Baker
sumber
+1 Pemrograman multi-paradigma, puluhan tahun sebelum F #, poin yang sangat bagus.
Orbling
Saya berharap saya dapat memperbaiki ini sepuluh kali. Tidak ada sendok ... tidak ada paradigma ... Ini menggambarkan perasaan saya tentang Common Lisp dengan sangat akurat :)
MadPhysicist
5

"Lebih cepat" bukan hal yang mudah untuk diukur - itu benar-benar tergantung pada aspek mana yang Anda tolak. Bergantung pada tugas dan implementasi Lisp, kecepatan dapat mendekati C. Lihat Great Benchmarking Shoot-Out untuk melihat detailnya. Implementasi SBCL dari Lisp setara dengan Java 6 Server dan secara signifikan lebih cepat daripada Ruby atau Python.

Tapi, kecepatan murni bukan alasan utama untuk memilih bahasa pemrograman - jika ya, kita semua masih akan pemrograman dalam bahasa assembly , kan? Bagi saya, kegembiraan sehari-hari Lisp adalah bahwa kode tersebut dikompilasi, tetapi saya tidak harus menghapus aplikasi, mengkompilasi ulang semuanya, dan kemudian mulai berlari dari awal. Sebagai gantinya, saya dapat mengubah satu fungsi dan perubahan itu akan berpengaruh di mana-mana, dan saya dapat segera melihat efeknya di aplikasi saya. Selain itu, pendekatan "tulis, tes, tulis lebih banyak, tes lebih" yang sangat cepat membuatnya lebih mudah untuk menguji segera di depan saat menulis kode (dan kemudian Anda dapat mengubah probe interaktif menjadi unit test nanti).

Bayangkan menulis email di mana setelah setiap baris, Anda harus menekan tombol untuk mengkompilasi output email Anda ke layar sebelum melanjutkan pemikiran Anda. Itulah yang menulis di Jawa atau bahasa lain seperti itu bagi saya. Terkadang ada alasan untuk melakukan itu, dan saya suka Java baik-baik saja, tetapi Lisp lebih responsif, dan lebih mudah menyelesaikan pekerjaan.

khedron
sumber
Jika saya baru memulai hari ini, saya mungkin akan memilih Ruby - ini mewarisi banyak sifat Lisp, tetapi ia memiliki lebih banyak perpustakaan modern dan satu diktator yang baik hati yang mendorongnya maju. Tapi, itu bukan pertanyaan yang ditanyakan OP.
Michael H.
Saya benar-benar memilih ruby ​​untuk memulai, dan sekarang saya mencoba untuk belajar newisp.
philosodad
5

Saya belajar Lisp ( newLisp ) karena beberapa alasan.

Alasan nomor satu: Lisp membuat saya berpikir secara berbeda, yang membuat saya menjadi pembuat kode Ruby yang lebih baik.

Tampaknya sangat canggung untuk melakukan hal-hal dengan cara tertentu di Lisp, misalnya iterasi bersarang untuk melewati beberapa daftar. Jadi itu memaksa saya untuk menggunakan hal-hal lain, seperti map. Bahasa favorit saya, Ruby, memiliki metode peta yang sama, tetapi saya tidak selalu menggunakannya, karena itu tidak dikenal: Saya belajar melakukan hal-hal menggunakan teknik yang buruk, dan ketika bahasa mendukung teknik itu, saya terus menggunakannya.

Alasan kedua: Lisp praktis dan memiliki perpustakaan modern yang bagus.

Ada kerangka kerja web yang sangat bagus dan ringan untuk newLisp yang disebut capung . Ini memungkinkan saya untuk menggunakan kode newLisp alih-alih PHP untuk beberapa tugas. Saya tidak terlalu suka PHP, dan newLisp sepertinya lebih menyenangkan untuk tugas khusus ini daripada Ruby.

Alasan nomor tiga: Lisp secara sintaksis dan konseptual konsisten.

Bagi saya, ini adalah perbedaan besar antara Ruby dan Python, konsistensi.

philosodad
sumber
+1: "Lisp secara sintaksis dan konseptual konsisten." Ini adalah fitur bahasa yang sangat penting. Beberapa bahasa yang didesain dengan buruk tidak memiliki konsistensi, mereka seperti kumpulan besar idiom yang disatukan dalam beberapa urutan (Saya memiliki satu bahasa dalam pikiran, tetapi saya tidak akan menyebutkannya :-)). Lisp dalam hal ini sangat konsisten. Segera setelah saya punya waktu, saya pasti akan mencoba mempelajarinya.
Giorgio
4

Bisakah Anda mengatakan "Loyalitas Merek"?

Saya mulai di Fortran. Saya menyukainya.

Saya beralih ke Lisp. Awalnya saya membencinya. Kemudian saya belajar untuk menyukainya, dan membenci Fortran.

Kemudian Pascal, C, C ++, berbagai assembler, C #. (Sebenarnya saya tidak suka C #.)

Saya kira saya berubah-ubah?

Mike Dunlavey
sumber
4

Ketika Lisp dibuat mereka mulai dari matematika, bukan ilmu komputer (yang belum benar-benar ada). Dan tim Lisp melakukan beberapa hal yang BENAR-BENAR benar. Lisp memiliki pengumpulan sampah pada tahun 1960 atau lebih! Mereka benar-benar melakukan pekerjaan dengan baik.

Saya pikir lagu The Eternal Flame menutupinya.

Zachary K
sumber
Ya rupanya Lisp adalah bahasa GCed pertama.
Mark C
2

Yang menarik adalah komunitas. Lisp memiliki hasil imbang untuk pengembang yang paling ambisius dan cerdas sejak bahasa diciptakan. Di mana pun periset berusaha memecahkan masalah yang belum pernah dipecahkan, Anda mungkin akan menemukan Lisp, seperti dalam penelitian kecerdasan buatan (AI), visi komputer, perencanaan, representasi pengetahuan, dan optimalisasi heuristik yang kompleks. Bahasa ini cocok untuk memecahkan masalah baik dari bawah ke atas dan dari atas ke bawah pada saat yang sama, yang tampaknya membantu dalam menghadapi tantangan paling hairiest.

Sintaks yang layak melalui makro berarti bahwa jarang ada kebutuhan untuk memperluas definisi bahasa. Sebagian besar dari apa yang membutuhkan ekstensi bahasa dalam bahasa yang lebih terbatas hanyalah makro dari Lisp. Jadi programmer Lisp bebas untuk menggunakan konsep bahasa yang baru ditemukan tanpa standar bahasa baru dan tanpa harus penalti kecepatan nyata. Pada tingkat dasar, rim kode boilerplate dibuat tidak perlu oleh ekstensi kecil. Seluruh ide baru dalam aliran kontrol, seperti penyatuan gaya Prolog, diimplementasikan secara efisien dan kompak sebagai ekstensi.

Sistem OOP, CLOS , berada dalam kelas tersendiri dalam hal fleksibilitas. Sangat sulit untuk kembali ke dasar C ++ / Java / C # OOP setelah merasakan.  Pola desain GoF 5 menjadi tidak perlu karena dapat diekspresikan secara sederhana dan langsung.

Bahasa tidak memiliki pemilik perusahaan tunggal dan tidak ada implementasi definitif tunggal, meskipun bahasa tersebut memiliki standar ANSI dengan banyak implementasi yang sesuai. Implementasi besar baru datang setiap dekade dan yang lama masih cukup aktif. Para ahli dapat merencanakan untuk menggunakan pengetahuan khusus mereka untuk waktu yang lama. Ini memang menyebabkan beberapa gesekan anarkistik dan fragmentasi komunitas, tetapi itu juga berarti karpet tidak dapat ditarik keluar dan bahasa tidak dapat menjadi hampir mati karena alasan politik perusahaan atau proyek. Selalu ada beberapa implementasi komersial dan open source yang sedang dikerjakan. Semakin fokus pada kinerja, secara teratur patokan dalam faktor 2x dari implementasi bahasa imperatif yang paling cepat didanai.

Tumit Achilles dari komersialisasi Lisp awal adalah jejak memori untuk mengakomodasi fitur keamanan jenis bahasa dan lingkungan pengembangan perangkat lunak canggih yang mereka sertakan, dengan fitur luar biasa seperti dokumentasi online lengkap termasuk gambar. Mesin Lisp Symbolics 64 MB tidak layak secara biaya terhadap workstation Sun 8 MB. Saat ini, harga RAM telah runtuh dan ada minat yang luar biasa pada bahasa Lisp terutama mengingat bahwa bahasa utama Java, C #, PHP saat ini hanya maju sedikit dibandingkan dengan 30 tahun yang lalu.

Ada bahasa modern sekarang dalam persaingan dengan Lisp untuk berbagi pikiran dengan pengembang cerdas: Python, Lua , Erlang , Haskell , dan OCaml . Tetapi tidak ada yang menawarkan campuran kematangan, adaptabilitas, implementasi dan kecepatan yang memenuhi standar yang sama.

bcaulf
sumber
1

Saya sebenarnya tidak melakukan Lisp. Tapi tempat saya bekerja membuat elemen hingga dengan jutaan garis terutama Fortran. Orang di sini yang paling saya hormati tentang hal-hal komputasi (kode mekanika fluida komputasi ) menganggap kombinasi ideal adalah Lisp di luar (terutama karena Anda menghindari masalah berantakan dengan manajemen memori), dan Fortran untuk algoritme tingkat rendah (Fortran yang terbaik untuk mengeksploitasi kemampuan vektor SSE / AVX , dan kami pikir petunjuk ini tidak mungkin ditutup).

Peter Mortensen
sumber