Seorang developer kreatif telah merilis Based C++, sebuah proyek unik yang mengubah bahasa C++ yang secara tradisional dikompilasi menjadi tampak seperti bahasa interpreted. Proyek ini telah memicu diskusi menarik di komunitas programming tentang batasan antara bahasa compiled dan interpreted.
Cara Kerja Keajaibannya
Proyek ini menggunakan trik cerdas yang melibatkan fitur compile-time C++. Alih-alih menjalankan kode saat runtime, seluruh program dieksekusi selama kompilasi menggunakan evaluasi constexpr dan template metaprogramming. Developer tersebut membangun tool wrapper khusus yang menggantikan komponen internal GCC (cc1plus dan ld) dengan script Python yang mengekstrak dan menjalankan output program langsung dari proses kompilasi.
Sintaksnya terlihat cukup berbeda dari C++ standar, menggunakan expression templates dan konstruksi khusus seperti main<{ ... }>
untuk mendefinisikan program yang berjalan sepenuhnya pada compile time. Anggota komunitas mencatat bahwa pendekatan ini mendorong kemampuan compile-time C++ hingga batasnya.
Template metaprogramming: Sebuah teknik yang menggunakan template C++ untuk melakukan komputasi selama kompilasi daripada saat runtime
Expression templates: Sebuah teknik programming yang membangun ekspresi kompleks sebagai struktur template yang dapat dievaluasi secara efisien
Contoh Program "Hello World" Based C++:
include "gil/std.hpp"
using namespace gil::std;
volatile auto run = main<{
str::puts(str::literal("Hello, world!\n"))
}>;
Perintah Kompilasi:
g++ -std=c++23 -Based hello_world.cpp -o -
Respons Komunitas dan Wawasan Teknis
Komunitas programming menunjukkan reaksi beragam terhadap proyek ini. Beberapa developer menghargai kreativitas teknis yang terlibat, sementara yang lain menganggapnya lebih sebagai eksperimen yang menghibur daripada tool praktis. Beberapa anggota komunitas menunjukkan bahwa interpreter C++ tradisional dan tool REPL (Read-Eval-Print Loop) seperti Clang-REPL dan Cling sudah ada untuk mereka yang menginginkan pengembangan C++ interaktif.
Keseluruhan ini adalah lelucon tetapi dipresentasikan dengan cara yang serius. Idenya adalah jika Anda mengetahui input program Anda pada compile time, Anda dapat mengubah semuanya menjadi constexpr yang dievaluasi pada compile time sehingga program Anda dijalankan oleh compiler alih-alih pada run time.
Diskusi teknis mengungkapkan bahwa proyek ini mengimplementasikan domain-specific language (DSL) lengkap yang berjalan selama kompilasi. Pendekatan ini mendemonstrasikan seberapa jauh fitur compile-time C++ telah berkembang, meskipun juga menyoroti kompleksitas yang datang dengan penggunaan template canggih semacam itu.
Alat Interpretasi C++ Alternatif:
- Clang-REPL: REPL C++ resmi berbasis LLVM menggunakan kompilasi JIT
- Cling: Interpreter C++ interaktif dari proyek ROOT CERN
- Xeus Cling: Antarmuka notebook Jupyter untuk C++ interaktif
- AngelScript: Bahasa skrip praktis dengan sintaks mirip C++
- Squirrel: Bahasa skrip ringan yang mirip dengan C++/Lua
Implikasi yang Lebih Luas untuk Pengembangan C++
Proyek ini menimbulkan pertanyaan menarik tentang batasan tradisional antara bahasa compiled dan interpreted. Meskipun C++ selalu dianggap sebagai bahasa compiled, proyek seperti Based C++ menunjukkan bahwa perbedaannya tidak selalu jelas. Diskusi juga menyentuh tool yang ada untuk hot-reloading kode C++ dalam game engine dan lingkungan pengembangan.
Beberapa developer menyarankan bahwa untuk kebutuhan C++ interpreted yang praktis, solusi yang sudah mapan seperti AngelScript atau Squirrel mungkin lebih cocok. Tool-tool ini menawarkan interoperabilitas yang lebih baik dan dirancang khusus untuk menyematkan kode scripted mirip C++ dalam aplikasi.
Proyek Based C++ pada akhirnya berfungsi sebagai demonstrasi teknis sekaligus eksplorasi yang menyenangkan tentang apa yang mungkin dilakukan dengan fitur C++ modern. Meskipun mungkin tidak menggantikan workflow pengembangan tradisional, proyek ini tentu menunjukkan potensi kreatif dalam sistem template canggih bahasa tersebut.
Referensi: based-cpp