Saya mencari dua hal - kecepatan, dan integrasi. Biasanya keduanya berjalan bersama, dan dengan keakraban. Sayangnya, untuk C ++, hampir tidak ada bahasa yang menawarkan kecepatan dan integrasi. Saya telah menggunakan Lua dan itu mengisap, mengerikan. Saya menghabiskan seluruh waktu untuk menulis binding dan tidak cukup dekat untuk menulis kode.
Fitur bahasa? Inti dari menanamkan bahasa skrip bukanlah agar ia dapat memiliki fitur-fitur bahasa dinamis whizzy yang tidak dimiliki oleh bahasa asli saya, itu agar dapat diinterpretasikan pada saat run-time . Saya benar-benar tidak peduli lebih dari itu, selama itu pada dasarnya fungsional, maka itu baik-baik saja dan cocok dengan bahasa host saya (dalam hal ini C ++). Namun, luar biasa, bahasa yang dirancang untuk diintegrasikan ke dalam aplikasi host sama sekali gagal bagian tentang integrasi .
Apakah saya perlu rutinitas bersama? Tidak, saya tidak perlu rutinitas bersama. Apakah saya perlu mengetik dinamis? Tidak, saya perlu tahu jenis apa yang kembali kepada saya dari bahasa skrip saya, dan karena semua kode saya yang ada dibangun dengan mengetik sangat kuat, saya sangat ingin kode skrip saya dapat menghormatinya juga. Apakah saya perlu pengumpulan sampah? Tidak, tipe saya sudah mengelola sumber daya mereka sendiri, dan saya pasti ingin kehancuran deterministik. Apakah saya mau goto? Tidak- Saya ingin melempar pengecualian.
Masalah yang saya temukan adalah bahwa pada dasarnya semua bahasa scripting yang ada dirancang untuk memperluas C, bukan C ++, dan tidak mendukung model C ++ dengan banyak cara, dan selain itu, mereka memiliki semantik yang sama sekali berbeda. Bagaimana saya bisa menerjemahkan shared_ptr
, yang merupakan penghancuran deterministik otomatis, ke lingkungan yang dikumpulkan sampah? Anda dapat menulis pustaka pembungkus apa pun yang Anda inginkan, Anda tidak akan mengubah semantik bahasa yang mendasarinya menjadi tidak kompatibel dengan bahasa yang ingin Anda panjangkan dengannya. Bagaimana saya bisa memastikan bahwa ini void*
adalah tipe yang tepat? Bagaimana saya bisa berurusan dengan warisan? Bagaimana cara saya melempar dan menangkap pengecualian? Itu tidak bekerja.
Bahasa scripting yang baik untuk C ++ akan diketik secara statis, nilai semantik, secara deterministik hancur, lempar dan tangkap pengecualian dan hormati destruktor / konstruktor / salin konstruktor saya, karena dengan demikian semua tipe saya hanya akan berfungsi, bagus dan mudah, dan bahasa yang dihasilkan akan menjadi cepat dan mendukung semua semantik asli saya, mudah diikat.