2 poin oleh GN⁺ 2025-01-13 | 1 komentar | Bagikan ke WhatsApp
  • Peningkatan yang Jelas untuk C

    • Standar C23: Bahasa C terus ditingkatkan secara berkala dan kini telah mencapai C23. Namun, masih ada masalah-masalah yang belum terselesaikan.
    • Upaya komunitas Dlang: Dengan menanamkan kompiler C (ImportC) ke dalam kompiler bahasa pemrograman D, terbuka peluang untuk menyelesaikan masalah-masalah tersebut.
  • Evaluasi ekspresi konstan

    • Masalahnya: C dapat menghitung ekspresi sederhana pada waktu kompilasi, tetapi tidak dapat menjalankan fungsi.
    • Solusi ImportC: ImportC memungkinkan eksekusi fungsi pada waktu kompilasi sehingga dapat mengatasi keterbatasan ini.
  • Unit test pada waktu kompilasi

    • Masalah di C: Unit test dalam kode C memerlukan target build terpisah sehingga merepotkan.
    • Kelebihan ImportC: ImportC memudahkan pelaksanaan unit test melalui evaluasi fungsi pada waktu kompilasi.
  • Referensi maju deklarasi

    • Keterbatasan C: C peka terhadap urutan deklarasi dan tidak mengizinkan referensi maju.
    • Kelebihan ImportC: ImportC tidak terikat pada urutan deklarasi dan mengizinkan deklarasi global dalam urutan apa pun.
  • Mengimpor deklarasi

    • Masalah pendekatan lama: Ada kerepotan karena harus menulis file .h untuk setiap modul eksternal.
    • Solusi ImportC: ImportC dapat mengimpor deklarasi tanpa file .h, sehingga lebih efisien.
  • Referensi

    • Dokumentasi ImportC: Menyediakan informasi lebih rinci tentang ImportC.
    • Dokumentasi bahasa D: Menyediakan informasi tambahan tentang bahasa D.

1 komentar

 
GN⁺ 2025-01-13
Opini Hacker News
  • File header dalam bahasa C bagus karena dapat membedakan dengan jelas antara yang publik dan nonpublik, antarmuka dan implementasi. Melalui file .h, cara penggunaan library bisa dipahami dengan mudah

    • Dokumentasi terpusat di file .h, sehingga tampil berbeda dari file .c
    • Dokumentasi juga bisa ditaruh di file .c, tetapi itu membuat antarmuka jadi tidak nyaman dibaca
  • Ada pendapat bahwa bahasa C seharusnya bisa menjalankan fungsi saat waktu kompilasi, tetapi fungsi dengan waktu eksekusi panjang bisa menjadi masalah

    • Contohnya adalah fungsi busybeaver
  • Ada rasa ingin tahu tentang solusi untuk masalah seperti evaluasi ekspresi konstan, unit test saat waktu kompilasi, referensi maju deklarasi, dan impor deklarasi

    • Evaluasi ekspresi konstan: jika dikerjakan dalam translation unit, itu sederhana tetapi membutuhkan pengulangan kode
    • Unit test saat waktu kompilasi: bisa diekspresikan dengan makro, tetapi akan lebih mudah jika poin pertama ditambahkan
    • Referensi maju deklarasi: compiler mungkin perlu dua pass, yang bisa memengaruhi performa
    • Impor deklarasi: cara mengimplementasikan template di C bisa rusak
  • Menulis unit test untuk kode C dapat dilakukan dengan build system yang baik dan sedikit boilerplate

    • Sebagai contoh, ada kode pengujian untuk library npy
  • Jika evaluasi ekspresi konstan menjadi rumit, kecepatan compiler bisa menurun dan mungkin memerlukan VM

    • Ada pendapat bahwa dibanding definisi C++20, akan lebih baik jika modul diimpor sebagai simbol
  • Unit test saat waktu kompilasi mengambil alih kendali dari pengembang dan menuntut prosedur yang tidak perlu untuk menyelesaikan pekerjaan

    • Pengujian kegagalan build bagus untuk build akhir, tetapi tidak cocok untuk build perantara
  • Ada diskusi tentang apakah lebih baik membuat definisi fungsi secara "top-down"

    • Bahkan dalam bahasa seperti Python, definisi top-down juga umum
    • Muncul pertanyaan apakah definisi top-down lebih cocok untuk jenis kode tertentu
  • Fitur-fitur yang diharapkan ditambahkan ke bahasa C

    • Dukungan tipe slice yang mengenkode pointer dan panjang
    • API yang reentrant dan thread-safe
    • Standardisasi fitur seperti defer di Go dan Zig
    • Dukungan portabel untuk Unicode dan UTF-8
  • Implementasi C yang sederhana adalah kelebihannya, dan memperluas cakupannya secara besar-besaran bukan ide yang baik

    • Seperti Scheme, spesifikasinya bisa memiliki versi "kecil" dan versi "besar"
  • Alasan mengapa definisi fungsi dari atas ke bawah lebih baik

    • Mirip dengan cara menulis kode di dalam fungsi
    • Posisi fungsi di dalam modul menjadi jelas
    • Dependensi siklik bisa diidentifikasi dengan jelas
    • Dependensi siklik membuat codebase lebih rumit dan modul lebih sulit dipahami
    • OCaml tidak mengizinkan dependensi siklik antarfungsi