Pengembang Mendebatkan Kumpulan Bahasa Terpadu sebagai Solusi untuk Tantangan Pengembangan Multi-Bahasa

BigGo Editorial Team
Pengembang Mendebatkan Kumpulan Bahasa Terpadu sebagai Solusi untuk Tantangan Pengembangan Multi-Bahasa

Komunitas pengembangan perangkat lunak sedang aktif mendiskusikan konsep kumpulan bahasa terpadu sebagai solusi potensial untuk tantangan bekerja dengan beberapa bahasa pemrograman dalam berbagai proyek. Diskusi ini berasal dari sebuah artikel yang mengusulkan sistem klasifikasi untuk bahasa pemrograman ke dalam empat tingkat berbeda berdasarkan model eksekusi dan sistem pengetikan mereka, dengan saran untuk kumpulan bahasa terpadu yang dibangun di sekitar Rust.

Masalah Pengembangan Multi-Bahasa

Pengembangan perangkat lunak modern sering mengharuskan tim untuk bekerja dengan beberapa bahasa pemrograman secara bersamaan, masing-masing melayani tujuan berbeda dalam ekosistem proyek. Seperti yang ditunjukkan oleh salah satu komentator, kita cenderung menggunakan bahasa dari tingkat berbeda dalam pengaturan yang berbeda (front end, back end, sistem) dan kita menghabiskan banyak waktu menulis kode penghubung agar mereka dapat berkomunikasi satu sama lain. Kenyataan ini menciptakan overhead yang signifikan dalam hal interoperabilitas, memerlukan kerja ekstensif pada antarmuka fungsi asing (FFI) dan serialisasi/deserialisasi antara batas bahasa. Pendekatan kumpulan bahasa yang diusulkan bertujuan untuk mengatasi ini dengan menciptakan keluarga bahasa yang secara sintaksis mirip yang dapat bekerja sama dengan mulus sambil menargetkan persyaratan kinerja dan kemudahan penggunaan yang berbeda.

Pendekatan dan Alternatif yang Ada

Beberapa komentator menyoroti ekosistem yang sudah ada yang mencoba menyelesaikan masalah ini. Ekosistem Clojure disebutkan memiliki dialek yang sangat berguna dengan tumpang tindih luas di berbagai lingkungan, termasuk ClojureScript untuk browser, Clojure untuk JVM, Babashka untuk skripting, dan Jank untuk interoperabilitas C/C++. Demikian pula, Dart diidentifikasi sebagai bahasa yang memiliki JIT dan dapat memulai dengan cukup cepat dan menafsirkan secara langsung sambil juga dapat mengkompilasi kode mesin yang efisien sebelum waktu eksekusi ketika Anda siap untuk meluncurkan, secara efektif menjembatani level 2 dan 3 yang diusulkan.

Argumen Menentang Penyatuan yang Dipaksakan

Tidak semua anggota komunitas antusias tentang pendekatan bahasa terpadu. Beberapa berpendapat bahwa bahasa khusus domain memberikan manfaat penting yang tidak boleh dikorbankan untuk keseragaman sintaksis:

Terutama dengan LLM untuk membantu, kita tidak mendapatkan banyak lagi dari membuat semuanya satu sintaks, satu bahasa, dll. Proyek seperti Dotnet Blazor/ASP.NET atau Python Streamlit/Dash menurut pendapat saya dipaksakan dan lebih merepotkan daripada manfaatnya. Saran OP, di mana semuanya adalah Rust, memiliki masalah yang sama; terlalu dipaksakan.

Perspektif ini menunjukkan bahwa merangkul bahasa khusus mungkin lebih produktif daripada mencoba menciptakan solusi satu-ukuran-untuk-semua, terutama karena alat seperti model bahasa besar semakin membantu pengembang bekerja dengan sintaks yang berbeda.

Tingkat Klasifikasi Bahasa Pemrograman

  • Level 4: Diinterpretasi, tipe dinamis ( JavaScript , Python , PHP )
  • Level 3: Diinterpretasi, tipe statis ( Hack , Flow , TypeScript , mypy )
  • Level 2: Dikompilasi dengan manajemen memori otomatis ( Go , Java , C , Haskell , Objective-C , Swift )
  • Level 1: Dikompilasi dengan manajemen memori manual ( Rust , C , C++ )

Set Bahasa yang Diusulkan

  • Rust: Level 1 - Performa maksimum dengan manajemen memori manual
  • RustGC: Hibrida Level 2/3 - Pengumpulan sampah (garbage collection) dengan kompilasi untuk deployment
  • RustScript: Level 4 - Tipe dinamis untuk prototipe cepat

Kelayakan Teknis dan Arah

Wawasan teknis yang menarik dari diskusi ini melibatkan arah kompatibilitas bahasa. Seorang komentator mencatat bahwa lebih mudah untuk menafsirkan bahasa yang dibatasi daripada mengkompilasi bahasa dinamis yang dirancang dengan interpreter. Ini menunjukkan bahwa memulai dengan bahasa tingkat rendah seperti Rust dan membangun varian tingkat yang lebih tinggi (seperti yang diusulkan dengan RustGC dan RustScript) mungkin lebih layak daripada mencoba membuat bahasa seperti JavaScript atau Python lebih dapat dikompilasi.

Komunitas juga mendiskusikan potensi penambahan pengumpulan sampah otomatis ke Rust, dengan satu komentator menyatakan dukungan kuat sambil mengakui bahwa kode RustGC tidak akan mudah untuk dikonversi ke Rust tradisional. Tetapi bergerak ke arah sebaliknya seharusnya mudah.

Diskusi seputar kumpulan bahasa mencerminkan ketegangan yang lebih luas dalam pengembangan perangkat lunak antara standardisasi dan spesialisasi. Sementara pendekatan terpadu dapat mengurangi beban kognitif dan tantangan integrasi pengembangan multi-bahasa, ini juga dapat mengorbankan keuntungan khusus domain yang disediakan oleh bahasa khusus. Seiring dengan evolusi alat pengembangan, terutama dengan bantuan AI, keseimbangan antara pendekatan ini dapat bergeser, berpotensi membuat pengembangan lintas bahasa kurang membebani tanpa memerlukan keseragaman sintaksis.

Referensi: From Languages to Language Sets