Pembangun Cipta Projek "Based C++" Yang Menjadikan C++ Kelihatan Seperti Bahasa Interpreted

Pasukan Komuniti BigGo
Pembangun Cipta Projek "Based C++" Yang Menjadikan C++ Kelihatan Seperti Bahasa Interpreted

Seorang pembangun kreatif telah mengeluarkan Based C++, sebuah projek luar biasa yang mengubah bahasa C++ yang secara tradisinya dikompil menjadi sesuatu yang kelihatan seperti bahasa interpreted. Projek ini telah mencetuskan perbincangan menarik dalam komuniti pengaturcaraan mengenai sempadan antara bahasa compiled dan interpreted.

Bagaimana Keajaiban Ini Berfungsi

Projek ini menggunakan helah bijak yang melibatkan ciri-ciri compile-time C++. Daripada menjalankan kod pada runtime, keseluruhan program dilaksanakan semasa kompilasi menggunakan penilaian constexpr dan template metaprogramming. Pembangun membina alat wrapper khas yang menggantikan komponen dalaman GCC (cc1plus dan ld) dengan skrip Python yang mengekstrak dan menjalankan output program terus dari proses kompilasi.

Sintaks kelihatan agak berbeza daripada C++ standard, menggunakan expression templates dan konstruk khas seperti main<{ ... }> untuk menentukan program yang berjalan sepenuhnya pada compile time. Ahli komuniti menyatakan bahawa pendekatan ini mendorong keupayaan compile-time C++ ke had maksimum.

Template metaprogramming: Teknik yang menggunakan template C++ untuk melakukan pengiraan semasa kompilasi dan bukannya pada runtime

Expression templates: Teknik pengaturcaraan yang membina ungkapan kompleks sebagai struktur template yang boleh dinilai dengan cekap

Contoh Program "Based C++" Hello World:

include "gil/std.hpp"
using namespace gil::std;

volatile auto run = main&lt;{
    str::puts(str::literal("Hello, world!\n"))
}&gt;;

Arahan Kompilasi:

g++ -std=c++23 -Based hello_world.cpp -o -

Respons Komuniti dan Wawasan Teknikal

Komuniti pengaturcaraan telah menunjukkan reaksi bercampur-campur terhadap projek ini. Sesetengah pembangun menghargai kreativiti teknikal yang terlibat, manakala yang lain menganggapnya lebih kepada eksperimen lucu daripada alat praktikal. Beberapa ahli komuniti menyatakan bahawa interpreter C++ tradisional dan alat REPL (Read-Eval-Print Loop) seperti Clang-REPL dan Cling sudah wujud untuk mereka yang mahukan pembangunan C++ interaktif.

Keseluruhan perkara ini adalah jenaka tetapi dipersembahkan dengan cara yang serius. Ideanya ialah jika anda mengetahui input program anda pada compile time, anda boleh mengubah segala-galanya menjadi constexpr yang dinilai pada compile time supaya program anda dijalankan oleh compiler dan bukannya pada run time.

Perbincangan teknikal mendedahkan bahawa projek ini melaksanakan domain-specific language (DSL) lengkap yang berjalan semasa kompilasi. Pendekatan ini menunjukkan sejauh mana ciri-ciri compile-time C++ telah berkembang, walaupun ia juga menyerlahkan kerumitan yang datang dengan penggunaan template lanjutan sedemikian.

Alat Penterjemahan C++ Alternatif:

  • Clang-REPL: REPL C++ rasmi berasaskan LLVM menggunakan kompilasi JIT
  • Cling: Penterjemah C++ interaktif daripada projek ROOT CERN
  • Xeus Cling: Antara muka buku nota Jupyter untuk C++ interaktif
  • AngelScript: Bahasa skrip praktikal dengan sintaks seperti C++
  • Squirrel: Bahasa skrip ringan yang serupa dengan C++/Lua

Implikasi Lebih Luas untuk Pembangunan C++

Projek ini menimbulkan persoalan menarik mengenai sempadan tradisional antara bahasa compiled dan interpreted. Walaupun C++ sentiasa dianggap sebagai bahasa compiled, projek seperti Based C++ menunjukkan bahawa perbezaan itu tidak selalunya jelas. Perbincangan juga menyentuh alat sedia ada untuk hot-reloading kod C++ dalam enjin permainan dan persekitaran pembangunan.

Sesetengah pembangun mencadangkan bahawa untuk keperluan C++ interpreted yang praktikal, penyelesaian yang sudah mantap seperti AngelScript atau Squirrel mungkin lebih sesuai. Alat-alat ini menawarkan interoperabiliti yang lebih baik dan direka khusus untuk membenamkan kod seperti C++ yang berskrip dalam aplikasi.

Projek Based C++ akhirnya berfungsi sebagai demonstrasi teknikal dan juga penerokaan main-main tentang apa yang mungkin dengan ciri-ciri C++ moden. Walaupun ia mungkin tidak menggantikan alur kerja pembangunan tradisional, ia pastinya mempamerkan potensi kreatif dalam sistem template lanjutan bahasa tersebut.

Rujukan: based-cpp