Implementasi Common Lisp mana yang digunakan? [Tutup]

45

Tampaknya ada masalah langsung dengan mulai berkembang di Common Lisp: memilih implementasi. Apa yang harus diperhitungkan, dan berapa berat yang harus ditanggung ketika mempertimbangkan implementasi CL?

Apakah harus sesuai dengan standar ANSI? Haruskah ini didukung oleh SLIME? Apakah implementasi tertentu kekurangan perpustakaan, dokumentasi, dll?

anonim, tanpa nama
sumber
Pertanyaan menarik: Saya membaca "Praktis Common Lisp" sekarang dan saya mencoba contoh saya di CLISP, tapi saya kira implementasi apa pun sesuai dengan standar: Common Lisp tampaknya bahasa yang sangat matang dan stabil bagi saya.
Giorgio

Jawaban:

25

Itu tergantung pada kebutuhan spesifik Anda, dan kekuatan dan kelemahan implementasi tertentu. Yang mengatakan, inilah yang pertama terlintas di pikiran saya ketika berpikir tentang implementasi yang berbeda:

SBCL cukup cepat, dan bagus dalam angka-angka. Jadi, jika Anda bergantung pada perhitungan angka yang berat, itu mungkin implementasi yang tepat untuk Anda. Juga, memiliki inferensi tipe yang layak (untuk implementasi Lisp).

CLISP adalah implementasi byte-compiling yang relatif kecil yang mungkin menarik untuk skrip.

Beberapa tahun yang lalu, saya mencoba CCL dan tetap menggunakannya, karena saya lebih suka pesan kesalahan dan tumpukan jejak untuk yang dari implementasi lain, serta waktu kompilasi yang relatif rendah. Bagi saya, kemudahan penggunaan interaktif adalah sesuatu yang sangat diprioritaskan. Jika kecepatannya diperlukan, saya mungkin masih beralih ke SBCL untuk program yang digunakan. (Namun, tidak perlu melakukannya.) Juga, ada opsi dukungan komersial.

Jika Anda ingin menggunakan JVM, ada ABCL.

Untuk penggunaan tertanam, ECL.

Allegro memiliki AllegroGraph, AllegroStore, pembangun GUI visual yang mudah digunakan, dan banyak lagi, tetapi tidak semua orang menyukai ketentuan lisensi mereka.

LispWorks, tampaknya memberikan dukungan yang cukup baik untuk pemrograman aplikasi pengguna akhir dengan toolkit GUI lintas-platform yang bagus dan persyaratan lisensi yang mungkin cocok untuk tim kecil dan pemrogram tunggal lebih baik daripada Allegro. (Setidaknya itu yang saya inginkan.)

Tentu saja, ini hanya kategori dan tayangan luas. Saya sarankan untuk melihat lebih dekat pada SBCL, CCL, dan CLISP, karena itu adalah IMHO implementasi open source yang paling banyak digunakan dan paling didukung, kemudian memilih salah satunya. Yaitu, kecuali jika kebutuhan Anda sesuai dengan apa yang ditawarkan ABCL atau ECL.

Haruskah itu sesuai dengan standar ASNI?

Ini tidak akan menjadi implementasi CL, jika tidak. (Tentu saja, mungkin ada beberapa penyimpangan dalam praktik, tetapi kesesuaian setidaknya harus menjadi tujuannya.)

Haruskah ini didukung oleh SLIME?

Tentu - jika Anda menggunakan SLIME. (Menurut saya, ini adalah lingkungan Lisp terbaik yang tersedia saat ini, tetapi untuk masing-masing lingkungannya.)

Apakah implementasi tertentu kekurangan perpustakaan, dokumentasi, dll?

Setidaknya SBCL, CCL, Allegro, dan LispWorks harus didukung dengan baik oleh sebagian besar perpustakaan yang biasa digunakan. CLISP hadir dengan koleksi perpustakaan yang cukup bagus, dan sebagian besar juga harus didukung.

danlei
sumber
22

Dan Weinreb (sayangnya dia meninggal tahun lalu) menulis tinjauan:

Survei Lisp

Ada banyak perbedaan antara implementasi CL. Tidak mungkin untuk memenuhi semua kebutuhan yang berbeda (kecepatan, ukuran, lisensi, harga, kompatibilitas, dukungan sistem operasi, ...) pengguna untuk sistem Lisp dalam satu implementasi. Kita harus menemukan optimal lokal dengan menggunakan satu atau lebih implementasi yang tersedia, yang mengikuti filosofi tertentu:

  • gratis, tanpa biaya, berbasis-C (dengan demikian banyak porting): ECL , CLISP

  • gratis, tanpa biaya, berbasis JVM: ABCL

  • implementasi asli gratis, gratis, luas: SBCL , CCL , CMUCL

  • kepemilikan, komersial, implementasi asli yang sangat luas, dukungan yang sangat baik untuk aplikasi berbasis GUI: Allegro CL , LispWorks

oleh OS / Platform:

Rainer Joswig
sumber