Perbandingan Desain Bahasa dalam Lingkungan Pembangkitan Kode LLM: Biaya Abstraksi dan Eksplisitas Go

Bahasa Modern
Bahasa modern merujuk pada bahasa yang menawarkan produktivitas, stabilitas, keamanan, dan kemudahan pemeliharaan yang lebih tinggi dibandingkan bahasa-bahasa generasi sebelumnya. Bahasa-bahasa ini secara aktif mengadopsi teknik dan konsep mutakhir, serta menyediakan alat pengembangan yang lebih efisien dan aman bagi pengembang. Contoh bahasa modern yang representatif meliputi Java, Rust, Python, TypeScript, dan lainnya, yang memiliki karakteristik sebagai berikut.
1. Desain Berorientasi Objek ( OOP )
Bahasa modern sebagian besar dirancang berdasarkan konsep berorientasi objek. Pemrograman berorientasi objek mendukung prinsip-prinsip seperti enkapsulasi, pewarisan, dan polimorfisme, dan dengan membagi sistem yang kompleks ke dalam objek-objek berukuran kecil untuk dikelola, struktur program menjadi lebih jelas dan fleksibel. Hal ini khususnya efektif dalam pengembangan perangkat lunak berskala besar untuk mengendalikan biaya dan upaya pengembangan, serta mengurangi permasalahan yang dapat muncul selama pemeliharaan.
2. Gula Sintaksis dan Ekspresi
Bahasa modern menyediakan berbagai gula sintaksis dan tata bahasa berbasis ekspresi untuk meningkatkan keterbacaan kode dan produktivitas pengembangan. Fitur seperti operator ternary, ekspresi lambda, dan pencocokan pola (pattern matching) mengurangi kode boilerplate, membuat kode lebih mudah diprediksi, dan meningkatkan produktivitas pengembang.
3. Sistem Modul
Bahasa modern memungkinkan program dipisahkan ke dalam beberapa unit melalui sistem modul sehingga dapat dikelola dengan baik. Hal ini mempermudah penggunaan ulang kode dan manajemen dependensi, serta membuat pemeliharaan tetap mudah meskipun skala proyek bertambah besar. Contoh representatifnya adalah Maven/Gradle untuk Java, Cargo untuk Rust, dan npm/yarn untuk TypeScript.
4. Bahasa Antara dan Mesin Virtual
Bahasa-bahasa modern mengadopsi bahasa antara (intermediate language) dan mesin virtual untuk mencapai independensi platform, optimasi kinerja, dan keamanan. Contoh representatifnya meliputi JVM, LLVM, WASM, dan GraalVM.
Pengembangan di Era AI dan Keterbatasan Bahasa Modern
Bahasa modern lahir dengan asumsi bahwa manusia menulis sebagian besar kode. Secara alami, tujuan bahasa modern adalah mengurangi pekerjaan berulang, meningkatkan produktivitas, serta mengimplementasikan perangkat lunak berskala besar secara efektif melalui struktur yang memungkinkan kolaborasi antar pengembang. Namun, di era AI, asumsi tersebut secara bertahap mulai runtuh. Alat berbasis AI seperti Copilot dan Cody mengotomatiskan sebagian besar penulisan kode, dan jumlah kode yang dapat dihasilkan oleh satu pengembang meningkat secara pesat. Akibatnya, karakteristik bahasa modern yang dahulu dianggap sebagai keunggulan perlahan berubah menjadi kelemahan yang ketinggalan zaman.
Desain Berorientasi Objek
AI dapat menganalisis dengan cepat dan akurat suatu struktur di mana seluruh informasi tercantum dalam satu fungsi atau modul. Sebaliknya, semakin besar konteksnya, semakin banyak rentang yang harus disimpulkan, sehingga produktivitas dan akurasi AI menurun. Kode yang ditulis dengan OOP cenderung menyebarkan logika ke berbagai objek alih-alih mengelolanya di satu tempat, dan hal ini pada akhirnya membuat AI membutuhkan lebih banyak konteks. Perhatikan kode berikut.
1public class AnimalHandler {
2 public void handle(Animal animal) {
3 animal.speak();
4 }
5}
6
7public class Main {
8 public static void main(String[] args) {
9 AnimalHandler handler = new AnimalHandler();
10
11 Animal a1 = new Dog();
12 Animal a2 = new Cat();
13 Animal a3 = new Horse();
14
15 handler.handle(a1);
16 handler.handle(a2);
17 handler.handle(a3);
18 }
19}
Dalam kode di atas, agar AI mengetahui perilaku sebenarnya dari metode speak(), AI harus mengulangi penalaran berikut
- Animal adalah instans dari kelas konkret yang mana?
- Di mana metode speak() yang di-override pada kelas tersebut didefinisikan?
- Di mana definisi kelas Dog dan Cat berada, dan apa perilaku di dalamnya?
- Apakah ada kemungkinan kelas Dog dan Cat di-override di kelas lain?
Informasi semacam ini tidak terkumpul dalam satu file atau satu fungsi, melainkan hanya dapat dipahami dengan menelusuri hubungan antarfile kelas dan struktur pewarisan. Selain itu, elemen-elemen yang ditentukan saat runtime, seperti refleksi atau pemuatan dinamis, bagi AI bagaikan kotak hitam sehingga pada dasarnya tidak dapat dianalisis.
Gula Sintaksis dan Ekspresi
AI lebih menyukai perilaku yang eksplisit daripada yang implisit, dan lebih memilih menyusun satu jawaban yang benar dari kombinasi struktur sederhana daripada memanfaatkan struktur yang kompleks. Sebaliknya, gula sintaksis memperbolehkan berbagai bentuk ekspresi, tetapi perilaku internalnya sering kali sama atau serupa. AI harus mempelajari makna setiap bentuk ekspresi tersebut satu per satu, dan dapat menjadi sulit untuk menentukan prioritas tata bahasa mana yang harus direkomendasikan dalam situasi tertentu.
Bahasa Antara dan Mesin Virtual
AI sebagian besar belajar dari kode sumber. Sebaliknya, bahasa antara (bytecode) kehilangan makna seperti nama variabel selama proses kompilasi, dan harus diinterpretasikan ulang oleh mesin virtual saat runtime. Ini merupakan pekerjaan yang sangat sulit bagi AI untuk dipahami atau dikonversi. Sebagai contoh, konversi dari TypeScript ke Go dimungkinkan bagi AI, tetapi mengonversi bytecode V8 engine ke bytecode JVM atau machine code hampir mustahil dilakukan.
Bahasa Modern Sejati di Era AI
Dari uraian di atas, kita dapat memahami bahwa karakteristik bahasa modern pada kenyataannya merupakan elemen yang ketinggalan zaman dan tidak sesuai dengan era AI. Lalu, bahasa manakah yang dapat menjadi bahasa modern yang paling sesuai untuk era AI? Petunjuknya dapat diperoleh dari elemen-elemen yang justru ditolak oleh bahasa modern terdahulu. Bahasa modern di era AI seharusnya:
- Memiliki sintaksis yang eksplisit dan alur yang alami.
- Melampaui struktur OOP yang berlebihan dan memiliki struktur yang datar serta sederhana.
- Tidak bergantung pada gula sintaksis yang tidak perlu atau pola implisit, melainkan membangun berbagai fungsi hanya dengan kata kunci dasar yang terbatas.
- Memiliki sistem build yang sederhana dan dapat diprediksi, bukan sistem build yang rumit.
Bahasa yang paling memenuhi kriteria tersebut adalah Golang. Bahasa Go dirancang sedemikian rupa sehingga hanya dengan kata kunci inti yang minimal dan kombinasi tata bahasa yang sederhana, sebagian besar fungsi praktis dapat diimplementasikan, serta secara ketat menghindari abstraksi yang tidak perlu dan perilaku implisit. Hal ini menguntungkan tidak hanya bagi pengembang, tetapi juga bagi AI dalam menginterpretasikan dan menghasilkan kode.
Dengan karakteristik Go yang mengutamakan struktur yang dapat diprediksi dan datar, alur yang eksplisit, serta tata bahasa yang konsisten, Go lebih cocok untuk lingkungan pengembangan yang melibatkan AI secara aktif, berbeda dengan bahasa modern lainnya yang dirancang berdasarkan pengembang manusia. Filosofi desain Go yang konservatif, yang pernah dianggap ketinggalan zaman, justru menjadi pilihan yang paling maju di era AI.