Autology, sebuah bahasa Lisp fungsional yang diinterpretasi dan ditulis dalam Clojure, telah memicu diskusi yang hidup di antara para penggemar bahasa pemrograman. Fitur khas dari proyek ini adalah memberikan program akses ke interpreter mereka sendiri saat runtime, memungkinkan modifikasi dinamis pada perilaku bahasa selama eksekusi.
Modifikasi Bahasa Saat Runtime
Autology mengambil pendekatan yang tidak biasa untuk metapemrograman dengan mengikat fungsi interpreternya ke variabel bernama **
yang dapat diakses dalam program itu sendiri. Desain ini memungkinkan pengembang untuk memodifikasi bagaimana bahasa mengevaluasi ekspresi saat program sedang berjalan. Berbeda dengan makro Lisp tradisional yang beroperasi pada waktu kompilasi, Autology memungkinkan penulisan ulang sintaks dan semantik bahasa secara lengkap saat runtime.
Pencipta proyek ini, yang dikenal sebagai Kimbsy, mendeskripsikannya terutama untuk kesenangan dan untuk mengeksplorasi ide yang menarik, mengakui bahwa implementasi saat ini sangat lambat dan intensif sumber daya. Kimbsy dijadwalkan untuk mempresentasikan ceramah tentang Autology di London Clojurians pada Mei dan Lambda Days di Krakow pada Juni.
Fitur Utama Autology
- Ditulis dalam bahasa Clojure
- Fungsi interpreter tersedia sebagai struktur data untuk program
- Terikat pada variabel
**
dalam lingkungan eksekusi - Memungkinkan modifikasi perilaku bahasa saat runtime
- Dapat menambah, memodifikasi, atau menghapus fitur bahasa secara dinamis
Proyek dan Konsep Terkait
- Implementasi Common Lisp (SBCL, CCL) dengan paket akses interpreter
- Reader Macros di Common Lisp
- FEXPRs (fitur Lisp historis)
- Bahasa pemrograman Kernel oleh John Shutt
- Penelitian "Towers of interpreters" oleh Amin & Rompf
- Bahasa Shen
Perbandingan dengan Pendekatan Lisp Tradisional
Diskusi komunitas mengungkapkan perbandingan menarik antara Autology dan implementasi Lisp tradisional. Beberapa komentator mencatat bahwa implementasi Common Lisp seperti SBCL (Steel Bank Common Lisp) dan CCL (Clozure Common Lisp) sudah menyediakan paket untuk berinteraksi dengan internal interpreter, meskipun tidak dengan cara langsung seperti Autology.
Seorang komentator menjelaskan bagaimana makro pembaca Common Lisp dapat mencapai fleksibilitas serupa:
Anda sebenarnya bisa menjadi benar-benar konyol dengan ini di Common Lisp menggunakan sesuatu yang disebut Reader Macro yang memungkinkan Anda untuk sementara mengambil kendali penuh atas interpreter.
Diskusi juga menyentuh konsep Lisp historis seperti FEXPRs (Function Expressions), yang merupakan upaya awal untuk menyediakan kemampuan serupa tetapi akhirnya ditinggalkan demi makro untuk alasan kinerja. Penjelasan teknis rinci oleh pengguna kazinator menyoroti bagaimana pendekatan Autology berbeda dari FEXPRs dengan melewatkan objek interpreter yang dapat disesuaikan daripada hanya lingkungan leksikal.
Aplikasi Teoretis dan Keterbatasan
Meskipun terutama dibuat sebagai proyek eksperimental, diskusi komunitas mengeksplorasi potensi aplikasi untuk fleksibilitas runtime yang ekstrem seperti itu. Salah satu kasus penggunaan teoretis yang disebutkan adalah kemampuan untuk beralih antara sintaks bahasa yang berbeda dalam cakupan leksikal, memungkinkan pengembang untuk mengekspresikan bagian-bagian berbeda dari masalah kompleks dalam bahasa yang paling cocok untuk setiap bagian.
Proyek ini mencakup contoh kode antar-bahasa yang menunjukkan peralihan antara sintaks bahasa yang berbeda dalam program yang sama. Beberapa pengguna menyarankan ini berpotensi berfungsi sebagai mekanisme Foreign Function Interface (FFI) yang ditingkatkan, meskipun yang lain mempertanyakan apakah manfaatnya akan melebihi biaya kompleksitas.
Beberapa komentator menarik hubungan dengan karya terkait, termasuk bahasa pemrograman Kernel oleh John Shutt, penelitian Nada Amin dan Tiark Rompf tentang menara interpreter, dan bahasa Shen. Koneksi ini menyoroti tempat Autology dalam eksplorasi yang lebih luas tentang ekstensibilitas bahasa dan refleksi dalam desain bahasa pemrograman.
Terlepas dari keterbatasannya saat ini sebagai alat praktis, Autology menunjukkan kemungkinan kreatif yang muncul ketika bahasa pemrograman dirancang dengan fleksibilitas ekstrem. Seperti yang dicatat oleh seorang komentator, sungguh mengesankan berapa banyak ide yang dapat dieksplorasi dengan hanya 1.000 baris kode Clojure.
Bagi mereka yang tertarik untuk mengeksplorasi Autology lebih lanjut, proyek ini tersedia secara online, dengan contoh yang menunjukkan cara menambahkan fungsi ke bahasa, mengubah strategi evaluasi, atau bahkan mendefinisikan Lisp metasirkular di dalam program.
Referensi: Autology