- Bahasa evolusioner yang mewarisi sintaks dan semantik C sambil meningkatkan keamanan dan kemudahan penggunaan, sehingga tetap mempertahankan lingkungan yang familier bagi pengembang C yang sudah ada
- Menyediakan kompatibilitas penuh dengan C ABI, sehingga bisa langsung diintegrasikan ke proyek C/C++; ada contoh sebagian kode vkQuake yang dikonversi ke C3 dan dibangun dengan kompiler c3c
- Meningkatkan struktur kode dan daya ekspresi melalui sistem modul, operator overloading, dan makro waktu kompilasi
- Mencakup fitur modern seperti pemrograman berbasis kontrak (Gradual Contracts), penanganan error zero-overhead, serta refleksi saat runtime dan waktu kompilasi
- Di mode debug, secara otomatis menyediakan pemeriksaan keamanan dan stack trace terperinci, sehingga menguntungkan untuk mendeteksi bug dan menjaga stabilitas
Ikhtisar C3
- C3 adalah bahasa pemrograman yang dikembangkan berdasarkan sintaks (syntax) dan semantik (semantics) dari bahasa C
- Tujuannya adalah mengembangkan bahasa sambil tetap mempertahankan bentuk yang familier bagi programmer C yang sudah ada
- Mendukung operator overloading yang presisi dan berorientasi tujuan
- Tanpa struktur overloading C++ yang kompleks, vektor, matriks, dan operasi fixed-point dapat diekspresikan secara alami
- Mendukung pemrograman berbasis kontrak, sehingga batasan saat runtime dan waktu kompilasi dapat dinyatakan secara eksplisit
- Memperkuat stabilitas kode dan konsistensi spesifikasi
- Menggabungkan keunggulan penanganan error berbasis Result dan exception
- Menyediakan struktur manajemen error yang terintegrasi secara alami dengan kode C
- Mendukung type introspection baik saat waktu kompilasi maupun runtime
- Inline assembly: tanpa string atau batasan kompleks, assembly dapat ditulis seperti kode biasa
- Di mode debug, secara otomatis menyisipkan bound checks dan value checks saat runtime
- Pustaka standar C3 secara bawaan menyediakan stack trace terperinci di build debug
- Memungkinkan identifikasi lokasi error yang spesifik alih-alih sekadar “segmentation fault”
Ergonomi dan Keamanan
- Melalui Optionals, memberikan keamanan dalam penanganan error dan null
- Sintaks
defer mendukung otomatisasi pembersihan resource
- Dengan slices dan foreach, iterasi yang aman dapat dilakukan
- Contracts berbasis komentar memungkinkan penyataan kondisi batasan kode
- Dalam konteks
@pool, mendukung pembebasan memori otomatis
Performance by default
- Dapat menulis vektor SIMD secara langsung untuk kontrol tingkat hardware
- Mendukung penyetelan performa secara detail lewat pemilihan berbagai allocator memori
- Mengadopsi desain tanpa overhead dalam penanganan error
- Memanfaatkan waktu kompilasi yang cepat dan optimasi backend LLVM
- Menyediakan inline assembly yang mudah digunakan
Batteries included standard library
- Menyediakan struktur data standar, termasuk kontainer dinamis dan string
- Menjamin portabilitas lintas platform melalui abstraksi cross-platform
- Mengizinkan akses native platform saat diperlukan
Leverage existing C or C++ libraries
- C3 sepenuhnya kompatibel dengan C ABI, sehingga tidak memerlukan “tipe kompatibel C” atau deklarasi fungsi terpisah
- Kode C dapat di-link dari C3, dan kode C3 juga dapat di-link dari C
Modules are simple
- Sistem modul yang sederhana dan intuitif
- Pengaturan default disusun secara masuk akal sehingga tidak mengganggu alur pengembangan
- Menyediakan manajemen namespace melalui modul
- Menyederhanakan struktur enkapsulasi dengan kontrol eksplisit
- Melalui interface, perilaku bersama dapat didefinisikan
- Menyediakan fitur generic modules untuk mengimplementasikan pembuatan generic type secara sederhana dan jelas
- Mendukung penggunaan ulang struktur melalui subtyping struct
Macros without a PhD
- Makro waktu kompilasi dapat ditulis dalam bentuk yang mirip dengan fungsi biasa
- Mendukung makro yang sadar tipe dan memahami informasi tipe dalam kode
- Mendukung pembuatan kode yang lebih jelas dan lebih kuat dibanding preprocessor C
4 komentar
Bermacam-macam bahasa terus bermunculan. LONG LIVE C-LANG !!!
Tapi kalau nanti muncul c4, apakah itu akan benar-benar meledak populer...
Karena Zig setiap tahun membawa breaking changes, meski saya suka bahasanya, sekarang jadi tidak terlalu tertarik lagi untuk memakainya.
Sebaliknya, setelah melihat perkenalan c3, secara keseluruhan rasanya seperti gabungan C + Go, jadi nyaman dibaca dan ditulis, dan sepertinya stres akibat upgrade versi juga akan jauh lebih sedikit.
Saya juga sambil sedikit memberi dukungan... belakangan ini saya memakainya dan cukup menyenangkan.
Saya suka karena rasanya hanya memperbaiki hal-hal yang tidak nyaman saat memakai C.
Dokumentasi resminya agak belum matang
(untuk mencari tahu berbagai fitur, sering kali penjelasannya tertulis di tempat yang tiba-tiba dan tidak terduga...)
Pendapat Hacker News
Bahasa ini tidak memaksakan model memori baru, juga tidak berusaha menjadi seperti C++
Terutama karena kompatibilitas ABI penuh, kita bisa langsung mencampurkan berkas C3 ke sistem build C yang sudah ada tanpa perlu menulis binding
Saya mengapresiasi visi pemeliharanya yang mengejar evolusi, bukan revolusi
Layak direkomendasikan sebagai bahasa untuk dipelajari di akhir pekan. Lebih modern dari C99, tetapi tetap terasa familier
Alasan saya belum bisa sepenuhnya meninggalkan C adalah karena cstring dan pointer yang tidak dibebaskan
Yang berbahaya bukan bahasa C itu sendiri, melainkan implementasi dan ABI-nya
Dengan fat pointer, perbaikan varargs, UBSan, MTE, dan semacamnya, hasilnya bisa cukup baik
Jika kompiler tidak wajib memeriksa kontrak, dan pelanggarannya bisa menjadi perilaku tak terdefinisi, saya tidak tahu bagaimana cara memercayai dan menggunakannya
Fitur ini keren, tetapi juga tampak agak berisiko
Ini bisa diabaikan, diperiksa saat runtime, atau diasumsikan selalu benar untuk dipakai dalam optimasi
Misalnya, validitas pointer bisa diperiksa, sementara syarat input ganjil bisa dibiarkan sebagai asumsi
Tim besar bisa mewajibkannya, dan alat seperti Visual Studio bisa hanya menampilkan peringatan sehingga orang bisa mempelajarinya secara bertahap
Jadi, saat pengembangan bisa diaktifkan, dan saat rilis bisa dimatikan agar tidak memengaruhi performa
Kondisi yang memang wajib diperiksa seharusnya ditangani langsung lewat kode di dalam fungsi
Beberapa perbedaannya dari C adalah tanpa berkas header, namespace berbasis modul, slice, operator overloading, modul generik, penanganan error berbasis Result, serta pemeriksaan runtime dalam mode aman
Secara pribadi saya merasa kurang adanya overloading fungsi, parameter default, dan pengembalian tuple
ResultatauExpectedsebagai Optional terasa membingungkanSeharusnya itu berarti “T atau E”, bukan “T atau kosong”, jadi namanya terasa kurang tepat
Tautan dokumentasi terkait
Option<T>maupunResult<T, E>Tipe error dibatasi hanya satu kode bilangan bulat, dan ini sangat sesuai dengan filosofi “evolusi, bukan revolusi”
Sintaks
type?juga intuitifIni adalah desain yang mempertahankan makna C sambil mengurangi beban out param
Resultsudah punya makna umum sebagai nilai hasil pengembalian, jadi bisa membingungkanPlaylist YouTube
Saya terkesan bahwa ketiga bahasa ini bukan sekadar bersaing, tetapi juga saling belajar sambil berbagi trade-off
Sebagai gantinya, ditambahkan fitur seperti makro dan refleksi
Ia memakan memori sebesar tipe terbesar, dan alur program berpindah ke pemeriksaan tipe saat runtime, sehingga keunggulan bahasa bertipe statis jadi hilang
Menurut saya lebih baik diimplementasikan sendiri saat memang diperlukan
Saya pernah mengimplementasikan sendiri generik, slice, dan propagasi error di C, tetapi membuat kompiler terlalu rumit
Karena itu saya memakai variasi C dan Go secara bersamaan
Hambatan masuknya cukup rendah sampai-sampai prototipe bisa dibuat hanya dalam sehari
Itu adalah satu-satunya cara untuk mewujudkan paradigma baru menjadi nyata
Bahasa itu sulit karena harus menyelaraskan sintaks, pustaka standar, tooling, sampai runtime, tetapi justru karena itu dampaknya terhadap masa depan besar
Berkat LLVM, ia bisa membuat kompiler baru sendiri
Variasi C buatan sendiri tidak masalah jika dipakai sendirian, tetapi untuk berkolaborasi atau memakai pustaka eksternal, kita butuh bahasa yang sama
Dan saya suka karena mereka menyebut exception sebagai “Excuses”, terasa lucu dan cerdas
Terutama karena ada tautan Discord di navigasinya, kesan itu jadi makin kuat