Dalam A Critique of Common Lisp yang ditulis oleh Rodney A. Brooks dan Richard P. Gabriel dari Stanford pada tahun 1984, beberapa keputusan desain dipertahankan oleh komite normalisasi Common Lisp dibahas. Sementara sebagian besar diskusi tetap valid, ada dua pernyataan yang merujuk pada teknologi yang tersedia pada saat itu dan mungkin salah hari ini.
Dua pernyataan ini adalah:
Terlalu banyak biaya bahasa dihilangkan dengan peringatan bahwa 'kompiler yang baik' dapat mengurusnya. Belum ada yang menulis — tidak mungkin tanpa usaha yang luar biasa — sebuah kompiler yang melakukan sebagian kecil dari trik yang diharapkan darinya.
Karena saya seorang pemula Common Lisp, atau bahkan seorang magang, saya tidak dapat lebih spesifik daripada penulis. Mereka tampaknya menyatakan bahwa generalisasi dan fleksibilitas yang besar telah dibangun ke dalam beberapa aspek bahasa, yang membuat menulis kompiler yang baik cukup sulit.
Dalam LISP UMUM, sedikit terlalu banyak kontrol ditempatkan pada aritmatika floating-point. Dan tentu saja, meskipun perilaku yang benar dari program intensif titik-mengambang dapat dicapai, kinerja dapat sangat bervariasi.
Sejauh yang saya mengerti, tampaknya menulis kode numerik yang efisien dalam Common Lisp adalah mungkin tetapi lebih menantang daripada yang seharusnya.
Ini tiga puluh tahun yang lalu. Bagaimana saya harus menganggap pernyataan ini hari ini jika saya bersedia untuk menulis program Common Lisp untuk salah satu implementasi perangkat lunak bebas umum (CLISP, SBCL et al.)?
sumber
Jawaban:
Makalah ini menarik dalam banyak hal.
Bagian yang paling menarik adalah ini: penulis memalsukan kertas dari tahun 1984 hanya dua tahun kemudian pada tahun 1986 sendiri. Brooks dan Gabriel mengembangkan kompilator Lisp yang sangat mengoptimalkan dan menjualnya secara komersial sangat sukses selama beberapa tahun: Lucid Common Lisp (PDF).
Pemeliharaan untuk kompiler Lisp ini masih tersedia dari LispWorks : sekarang disebut Liquid Common Lisp .
Optimalisasi kompiler Liquid CL didokumentasikan dalam Bab 3 dari Panduan Pengguna Lanjutan : Mengoptimalkan Program Lisp .
Beberapa aplikasi komersial telah ditulis dan digunakan dalam Lucid CL. Sebagai contoh di kota asal saya, sistem informasi transportasi umum pertama untuk HVV (Hamburger Verkehrsverbund) dikerahkan menggunakan Lucid CL pada SUN SPARCstation. Itu tersedia untuk umum di stasiun kereta menggunakan layar sentuh besar dan di pusat panggilan.
Lucid CL berhasil karena kompiler mode produksinya menciptakan aplikasi Common Lisp yang cepat, terutama untuk platform Unix / RISC.
Brooks dan Gabriel menulis tentang Lucid Common Lisp pada tahun 1986:
Jadi mereka baru saja mengimplementasikan apa yang menurut Critique of Common Lisp sulit atau tidak mungkin.
Saat ini implementasi yang lebih maju sedang melakukan banyak optimasi, tetapi perangkat kerasnya juga 1000+ kali lebih cepat dari yang kami miliki pada tahun 1984. VAX 11/780 kemudian memiliki satu MIPS (juta instruksi per detik) dan Mesin Lisp juga dalam kisaran itu. Motorola 68000 memiliki clock rate 8 MHz.
Kritik tentang kinerja floating point dan umumnya beragam kinerja masih valid, tetapi ini mencerminkan pilihan implementor. Beberapa implementasi tidak dikembangkan sebagai kompiler berkinerja tinggi. Fokus utama mereka bisa portabilitas, kekompakan atau sesuatu yang lain dan karenanya mereka memiliki tujuan implementasi yang berbeda.
Sebagai pengguna / pengembang, seseorang tidak dipaksa untuk menulis kode portabel dan menggunakan semua + sepuluh sistem Common Lisp yang saat ini didukung. Gunakan implementasi yang paling cocok untuk masalah aplikasi.
sumber
Ketika makalah ini ditulis pada tahun 1984, komputer yang memiliki 1 megabyte RAM dan hard drive 20 megabyte, yang mampu duduk di meja Anda, adalah masalah besar. Tentu saja, perselisihan akan timbul karena kepraktisan bahasa setinggi tingkat Lisp pada perangkat keras yang sederhana. Kemajuan teknologi perangkat keras dan kompiler yang telah terjadi sejak saat itu telah membuat program Lisp lebih mudah untuk ditulis dan dieksekusi, terlepas dari segala inefisiensi numerik yang mungkin ada dalam bahasa tersebut.
Pemrogram sering berdagang efisiensi komputasi untuk efisiensi pemrograman. Lisp dapat menjadi bahasa yang lambat (dalam beberapa implementasi, tetapi demikian juga bahasa lainnya), tetapi juga memiliki reputasi yang baik untuk pengembangan cepat, dan banyak program tidak memerlukan infrastruktur yang sangat optimal untuk menunjukkan kinerja yang memadai.
Pilihan implementasi Lisp dapat sangat memengaruhi profil kinerja program Anda. Misalnya, CLISP dengan mudah mengakui bahwa "Jika kode Anda sangat numerik, Anda mungkin lebih suka CMUCL." Beberapa implementasi Lisp (dan Skema) modern memungkinkan Anda menentukan petunjuk tipe numerik, yang akan meningkatkan kinerja numerik.
Singkatnya, situasinya jauh lebih baik hari ini daripada sebelumnya.
sumber