T: Mengapa elisp tidak memiliki ruang nama, dan bagaimana kami bisa mendapatkannya?
Elisp tidak memiliki ruang nama selain yang global, yang telah menyebabkan konvensi pengkodean prefixing semua fungsi global, variabel, dan konstanta dengan awalan yang unik.
Selain dari faktor gangguan, ia juga menganggap saya sebagai masalah mendidih yang diberikan 1) jumlah perpustakaan dan paket besar yang terus bertambah, dan 2) keberadaan fungsi dan variabel lama yang tidak menghargai konvensi awalan, atau cukup istimewa bahwa sebenarnya tidak ada opsi awalan yang baik yang bisa mereka gunakan. Ini juga berarti bahwa upaya berkala untuk merasionalisasi kode lama (seperti transisi dari cl
ke cl-lib
) adalah jumlah pekerjaan yang tidak sepele. (Meskipun saya senang untuk pembersihan, saya masih meneteskan air mata setiap kali saya mengetik sesuatu seperti cl-find
).
Saya mencari-cari untuk mencari tahu mengapa elisp masih tidak memiliki ruang nama setelah beberapa dekade digunakan, tetapi sedikit terkejut dengan panen yang sederhana. The halaman wiki di ruang nama yang cukup singkat. Nic Ferrier memiliki perawatan yang sedikit lebih lama dari masalah ini, dan ada utas yang cukup baru tentang emacs-devel juga. Ada thread Stack Overflow lama dari 2010 yang membahas kemungkinan menggunakan makro untuk mengimplementasikan ruang nama; contoh lain dari pendekatan makro dapat ditemukan di sini . Setidaknya ada beberapa implementasi (di sini dan di sini , dengan deskripsi yang terakhir di sini) di luar sana, tetapi mereka belum melihat banyak kegiatan selama beberapa tahun, dan saya belum menemukan perpustakaan yang menggunakannya.
Saya berasumsi bahwa, jika menambahkan ruang nama itu mudah, itu sudah akan dilakukan. Begitu:
- Apa kendala teknis untuk menambahkan ruang nama ke elisp?
- Apakah menambahkan ruang nama akan merusak banyak kode yang ada?
- Apakah fungsi ini sesuatu yang harus organik ke elisp (perubahan pada juru bahasa itu sendiri), atau bisakah itu benar-benar dibangun di atas melalui makro?