Alasan Saya Memilih Common Lisp
(blog.djhaskin.com)Selamat tinggal, Clojure
- Selama sekitar 7 tahun saya telah menggunakan Clojure, tetapi saya tidak lagi puas karena masalah "waktu startup yang lambat" pada aplikasi CLI
- Ada proyek seperti babashka, tetapi sulit menyelesaikan masalah startup lambat bahkan dengan
native-imagedari GraalVM - "Waktu startup yang cepat untuk executable mandiri" menjadi persyaratan yang wajib, dan saya menilai Clojure tidak dapat memenuhinya
Mencari Lisp baru
- Untuk mencari bahasa Lisp baru, saya meneliti berbagai bahasa. Saya mencari bahasa yang bisa menyelesaikan masalah yang saya alami di proyek sebelumnya
- Tidak ada "persyaratan yang eksplisit", tetapi pada akhirnya saya merangkum kriteria berikut
- Harus bisa menghasilkan "executable yang dapat berjalan mandiri dan startup-nya cepat" dengan toolchain yang masuk akal (menyelesaikan keluhan utama di Clojure)
- Karena saya tidak bisa menggunakan Emacs, bahasa itu harus bisa dipakai di Vim
- Dukungan Windows dan Mac wajib, dan tidak boleh hanya mendukung sistem operasi Linux/POSIX
- Akan lebih baik jika ada kemungkinan integrasi seperti plugin dengan bahasa lain yang memiliki komunitas besar, seperti Clojure dan Java
- Kecepatan runtime harus cukup cepat (lebih disukai setidaknya setara Clojure)
- Dukungan multithreading harus kuat, dan kalau bisa tidak memiliki sesuatu seperti GIL (Global Interpreter Lock)
- Komunitas yang kuat adalah keharusan
- Harus memiliki ekosistem yang kaya, dan setidaknya library berikut harus tersedia:
- Parsing dan serialisasi JSON
- Dukungan Sqlite3
- Library HTTP request
- Dukungan struktur data fungsional seperti Clojure (meskipun bagian ini kurang penting)
- Bahasa-bahasa yang saya teliti
- Scheme : komunitasnya terpecah karena masalah standardisasi antara r6rs dan r7rs, jadi kurang menarik, dan ekosistemnya kecil sehingga tidak memenuhi kebutuhan
- Racket : pernah saya gunakan saat sekolah, tetapi saya tidak menyukainya karena runtime terasa lambat dan berat
- Common Lisp : ditemukan di lisp-lang.org. Komunitas dan materinya sangat mengesankan, jadi saya memutuskan untuk mencobanya
Magic Happens Here
- Saya melewati kisah lengkap perjalanan belajar Common Lisp, tetapi proses belajarnya memang berat
- Awalnya salah langkah. Saat Natal saya menerima buku CLtLv2, lalu mulai dengan membacanya
- Setelah itu saya menemukan HyperSpec dan mulai membacanya, sehingga pembelajaran berjalan ke arah yang lebih baik
- Ada beberapa ciri khas unik dari Common Lisp
- Bahasa yang terstandardisasi, lebih mirip C daripada Java
- Ada banyak compiler, interpreter, dan runtime yang mengimplementasikan standar tersebut
- Ada alat seperti Roswell yang bisa dipakai untuk memasang dan mengelola berbagai implementasi
- Implementasi yang paling populer di komunitas dinilai adalah SBCL
- Bagaimana jika saat mulai mengeksplorasi saya sudah mengenal Janet?
- Janet memiliki karakteristik berikut, sehingga mungkin saya sudah akan puas sebelum mempelajari Common Lisp
- Sintaks yang ringkas, executable yang cepat dan kecil, serta dukungan C FFI
- Tersedia panduan pengantar yang menarik
- Memenuhi semua persyaratan yang secara pribadi saya anggap penting
- Namun alasan saya memilih Common Lisp
- Saya akan melewatkan fitur-fitur lanjutan seperti CLOS dan Condition System yang baru saya ketahui kemudian
- Common Lisp adalah bahasa yang lebih kuat
Requirements Met
Setelah memastikan bahwa Common Lisp adalah bahasa yang memenuhi persyaratan, saya memilihnya sebagai bahasa Lisp berikutnya dan masih menggunakannya hingga sekarang. Temuan utamanya sebagai berikut:
- Executable mandiri:
- Ada berbagai cara untuk membuat executable mandiri di Common Lisp
- Bergantung pada apakah executable dikompresi atau tidak, waktu startup bisa berkisar dari sepersekian detik hingga nyaris instan
- Fitur ini bukan opsi tambahan, melainkan dirancang sebagai cara utama untuk mendistribusikan program Lisp
- Workflow Vim:
- Ada beberapa opsi yang sangat bagus, tetapi secara pribadi saya menyusun sendiri workflow Vim saya dan memakainya
- Saya juga memastikan bahwa VS Code cukup layak digunakan sebagai IDE Common Lisp
- Dukungan Windows/Mac/Linux:
- SBCL mendukung sistem operasi utama dengan baik
- Integrasi dengan ekosistem imperatif berskala besar:
- Sebagian besar implementasi mendukung integrasi dengan bahasa C dengan baik dan dapat memanfaatkannya melalui CFFI
- Kecepatan runtime:
- SBCL memiliki kecepatan runtime yang sangat cepat
- Multithreading:
- Standar Common Lisp tidak mencakup dukungan eksplisit untuk multithreading, tetapi implementasi utama mendukungnya
- Library bernama Bordeaux-Threads membantu mengurangi perbedaan antarimplementasi
- Library seperti lparallel, cl-async, dan blackbird memungkinkan multithreading serta pemrograman asinkron
- Komunitas yang kuat:
- Saya menemukan aktivitas komunitas dan ikut berpartisipasi
- Hasil survei komunitas tahun 2024 dan European Lisp Symposium menunjukkan aktivitas komunitas Common Lisp yang hidup
- Dukungan komunitas juga kuat di jaringan blog dan subreddit
- Ekosistem:
- Kebanyakan orang menggunakan Quicklisp, tetapi secara pribadi saya mengelola paket dengan OCICL
- Library dan informasi teknis dapat ditelusuri melalui Common Lisp Cookbook, CLiki, Awesome CL, dan lain-lain
- Dukungan library tertentu:
- JSON: jzon
- Sqlite3: cl-sqlite
- HTTP request: dexador
- Struktur data fungsional: FSet, cl-hamt
Catatan untuk para pendatang baru
- Seiring semakin banyak pemula yang bergabung ke Discord Common Lisp, tulisan ini dibuat untuk berbagi proses bagaimana saya memilih dan beradaptasi dengan Common Lisp
- Saya berharap tulisan ini membantu orang-orang yang tertarik pada Common Lisp
2 komentar
Komentar Hacker News
Pengalaman menyelesaikan masalah dengan menggunakan SBCL tanpa source code sangat mengesankan. Dengan stack teknologi lain, kemungkinan besar tidak akan bisa diperbaiki secepat itu saat source code tidak tersedia
Membagikan pengalaman berpindah dari Common Lisp ke Clojure, dan fitur konkurensi Clojure terasa menarik
babashkaberguna saat menulis skrip cepatMenggunakan
vim-slimesangat meningkatkan produktivitas dan kepuasan developerdoom-emacsjuga mirip dengan vim sehingga bisa meningkatkan produktivitasTidak memahami nilai Lisp, tetapi mengingat lagu yang terkait dengannya
Mengklaim bahwa Emacs/slime adalah IDE Lisp yang lebih baik daripada
vim-slimeMenggunakan Common Lisp sebagai hobi, dan ingin menjalankan kode C# di REPL SBCL
Membagikan pengalaman mengembangkan aplikasi CLI dengan Clojure dan
babashkamethodicalMengalami masalah saat memakai
native-image, tetapi menganggap Clojure sebagai bahasa yang hampir sempurnaMenyatakan ketertarikan pada bahasa Janet, serta menyebut README dan FAQ GitHub proyek tersebut berguna
Membagikan pengalaman yang membuatnya ingin belajar Lisp, terutama karena penulisnya penggemar vim yang terasa menarik
Saya tidak memahami nilai Lisp, tetapi saya ingat lagu yang terkait... Ada banyak lagu tentang Lisp, dan di YouTube ada lagu berjudul Land of Lisp ;-)