it-swarm-id.com

Mengapa LISP bermanfaat?

LISP jelas merupakan keuntungan bagi AI barang, tetapi tidak muncul bagi saya bahwa LISP lebih cepat daripada Java, C #, atau bahkan C. Saya bukan master LISP, tetapi saya merasa sangat sulit untuk memahami keuntungan yang didapat dari menulis perangkat lunak bisnis dalam LISP.

Namun itu dianggap sebagai bahasa peretas.

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

64
Geek

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

  1. Kode homoikonik. Ini memungkinkan kode modifikasi diri terstruktur.
  2. Makro sadar sintaksis. Mereka memungkinkan penulisan ulang kode boilerplate.
  3. Pragmatisme. LISP umum dirancang untuk menyelesaikan pekerjaan para profesional yang bekerja. Sebagian besar bahasa fungsional bukan aturan.
  4. Fleksibilitas. Ia dapat melakukan banyak hal berbeda, semuanya dengan kecepatan yang wajar.
  5. Ketangkasan. Dunia nyata adalah berantakan. Pengkodean pragmatis akhirnya harus menggunakan atau menciptakan konstruksi yang berantakan. LISP yang umum memiliki kelemahan yang cukup sehingga dapat menyelesaikan sesuatu.

Arguably satu-satunya alasan nyata untuk memilih terhadap LISP Umum adalah bahwa perpustakaan standar adalah tanggal.

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

78
Paul Nathan

Saya suka LISP untuk itu

  • cara bersatu, sederhana dan elegan untuk merepresentasikan kode dan data.
  • sudut pandang 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 pertempuran 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.

24
Maglob

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

Kemudian jika ada yang bertanya lebih lanjut, jawaban yang benar adalah "ya" jika itu adalah salah satu atau pertanyaan atau "Anda tidak siap."

21
glenatron

Saya berpikir bahwa keuntungan LISP di bidang kecerdasan buatan (AI) yang disebutkan semua orang adalah kecelakaan historis ... LISP dimulai untuk/dalam AI, tetapi ini adalah bahasa tujuan umum.

Saya percaya kecepatan eksekusi bukan satu-satunya aspek penting dari suatu bahasa (saya pernah melakukannya sekali). Namun, salah satu aspek yang saya sukai tentang LISP adalah bagi saya, ia menggabungkan Python dan C dalam satu. Saya dapat mulai kode tanpa deklarasi dan prototipe dengan 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. bertanya-tanya untuk menekan tombol SLIME dan perhatikan 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 sesuatu dengan cepat jauh lebih menyakitkan. LISP sangat berguna dalam kasus 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. Namun saya akui 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 dapat menulis sedikit bahasa kecil untuk menggambarkan masalah Anda lebih baik dengan kemudahan LISP. Itulah keuntungan yang dibicarakan oleh Paul Graham di Mengalahkan Rata-Rata. Ini adalah modularitas ekstrim dan keringkasan. Dalam Java 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. Lagi pula, Anda harus memahami beberapa contoh 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 kekuatan makro LISP, tetapi sampai saat ini saya tidak menemukan apa pun.

Saya akan selesai dengan beberapa kritik, sehubungan 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 sekelompok 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 ahli LISP).

18
Pau Fernández

Saya tidak suka LISP.

(Saya suka banyak konsep yang digunakannya, bagaimana 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 langsung, beberapa tidak langsung), jadi tidak ada manfaat yang cukup 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.

13
Peter Boughton

Saya akan menafsirkan "LISP" sebagai " LISP Umum "; 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 dalam sistem perangkat lunak besar? Hampir pasti.

Adapun ini hacker, saya menggunakannya karena saya ingin menulis kode, bukan boilerplate. Saya ingin menulis sesuatu satu kali , dan tidak terus menerus mengulangi sendiri. Dan saya ingin berinteraksi dengan program sementara saya menulisnya.

9
Frank Shearar

Saya suka LISP karena ini adalah media yang sangat baik untuk mengekspresikan pikiran saya. Predikat untuk bahasa favorit saya adalah "Jika saya dapat memilih apa saja untuk mengekspresikan ide, apakah itu?". Saat ini LISP * ( Skema untuk lebih spesifik), sampai saya menemukan diri saya menulis catatan pemrograman di dalamnya. As 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 untuk saya untuk berpikir daripada salah satu alternatif, dan bahasa apa pun yang beresonansi dengan Anda yang dalam adalah Anda harta.

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

7
Inaimathi

Paul Graham semacam menjawab sendiri pertanyaan ini dalam Apa Yang Membuat LISP Berbeda.

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 kelebihan 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 dan komunitas yang hidup.

Fitur pembunuh mungkin seluruh program terbuat dari ekspresi. Ini berarti Anda dapat mengurutkan 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).

6
hasen

Saya memiliki reaksi spontan terhadap Skema di masa lalu, tapi sekarang saya siap untuk memberikan LISP ( Clojure , sebenarnya) suntikan.

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 MIT, dan Skema/LISP adalah satu-satunya bahasa yang dipelajari oleh banyak lulusan MIT. Namun untuk menjadi adil, satu saja dapat hot-swap algoritma LISP pada sistem produksi yang berjalan, yang merupakan nilai tambah besar.

6
Job

Hal yang saya sukai dari 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. Ketika Anda menggunakan LISP, paradigma tidak lagi menjadi kendala.

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

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

6
Jason Baker

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, Java spec co-author

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

6
compman

Saya sedang belajar LISP ( newLisp ) karena beberapa alasan.

Alasan nomor satu: LISP membuat saya berpikir secara berbeda, yang membuat saya lebih baik Ruby coder.

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, ringan untuk newLisp disebut capung . Ini memungkinkan saya untuk menggunakan kode newLisp daripada PHP untuk beberapa tugas. Saya tidak terlalu suka PHP, dan newLisp tampaknya lebih menyenangkan untuk tugas khusus ini daripada Ruby.

Alasan nomor tiga: LISP konsisten secara sintaksis dan konseptual.

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

5
philosodad

"Lebih cepat" bukanlah 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 akan pemrograman bahasa Assembly tetap, kan? Bagi saya, kegembiraan sehari-hari LISP adalah bahwa kode 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, tes lebih" yang sangat cepat membuatnya jauh lebih mudah untuk segera diuji di depan saat menulis kode (dan kemudian Anda dapat mengubah probe interaktif tersebut 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 dalam Java atau bahasa lain seperti itu untuk saya. Kadang-kadang ada alasan untuk melakukan itu, dan saya suka Java baik-baik saja, tetapi LISP hanya lebih responsif, dan lebih mudah menyelesaikan pekerjaan.

5
Michael H.

Bisakah Anda mengatakan "Loyalitas Merek"?

Saya mulai di Fortran. Saya menyukainya.

Saya beralih ke LISP. Awalnya aku benci itu. 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?

4
Mike Dunlavey

Ketika LISP dibuat mereka mulai dari matematika, bukan ilmu komputer (yang belum benar-benar ada). Dan tim LISP mendapatkan 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.

4
Zachary K

Yang menarik adalah komunitas. LISP memiliki hasil imbang untuk pengembang yang paling ambisius dan cerdas sejak bahasa diciptakan. Di mana pun peneliti berusaha memecahkan masalah yang belum pernah diselesaikan, Anda cenderung menemukan LISP, seperti penelitian kecerdasan buatan (AI), visi komputer, perencanaan, representasi pengetahuan, dan optimisasi 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.

OOP sistem, CLOS , berada dalam kelasnya sendiri dalam hal fleksibilitas. Sangat sulit untuk pergi kembali ke dasar C++/Java/C # OOP setelah mendapatkan rasa. GoF 5 pola desain menjadi tidak perlu karena mereka dapat diekspresikan secara sederhana dan langsung.

Bahasa tidak memiliki pemilik perusahaan tunggal dan tidak ada implementasi definitif tunggal, meskipun bahasa itu memiliki ANSI standar 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 permadani tidak dapat ditarik keluar dan bahasanya 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. 64 MB Symbolics LISP Machine tidak layak secara biaya terhadap workstation Sun 8 MB. Hari ini, RAM harga telah runtuh dan ada minat yang luar biasa pada bahasa LISP terutama mengingat bahwa bahasa utama Java, C #, PHP bahasa saat ini telah maju hanya sedikit saja) 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, adaptasi, implementasi dan kecepatan yang memenuhi standar yang sama.

2
bcaulf

Saya sebenarnya tidak melakukan LISP. Tapi tempat saya bekerja tidak elemen hingga dengan jutaan baris 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 level rendah algoritma (Fortran yang terbaik untuk mengeksploitasi kemampuan vektor SSE / AVX , dan kami pikir petunjuk ini tidak mungkin ditutup).

1
Omega Centauri