6 poin oleh xguru 2025-03-26 | 1 komentar | Bagikan ke WhatsApp
  • Makro yang mengevaluasi logika Rust inline pada waktu kompilasi untuk menghasilkan dan menambahkan kode baru
  • Menawarkan fleksibilitas dan performa yang lebih tinggi daripada makro procedural, sekaligus lebih mudah dibaca dan ditulis serta terasa lebih alami dibanding macro_rules
  • Mendukung Input/Output dalam bentuk Token Stream/Macro Fragments/kode Rust
  • Dukungan IDE, pemformatan kode, dapat didefinisikan inline, dan sangat mudah dibaca
  • One-shot eval: memungkinkan penanganan operasi waktu kompilasi yang kompleks secara sederhana
    const MY_NUM: usize = crabtime::eval! {  
        (std::f32::consts::PI.sqrt() * 10.0).round() as usize  
    };  
    
  • Makro fungsional (Function-like Macros)
    • Dapat mendefinisikan makro fungsional dengan #[crabtime::function]
    • Fungsi yang didefinisikan akan diubah menjadi makro dan dijalankan pada saat build
    • Dapat mengekspor makro dengan atribut standar #[macro_export]
  • Fungsi yang didefinisikan sebagai makro disisipkan ke fungsi main dari proyek Rust sementara
  • Setelah kompilasi, kode yang dihasilkan dikembalikan melalui stdout

1 komentar

 
GN⁺ 2025-03-26

Komentar Hacker News**

  • weinzierl
    • Memuji logo Crabtime, serta upayanya untuk mempermudah pembuatan macro Rust
    • proc_macro terasa merepotkan karena membutuhkan crate terpisah, dan Crabtime tampaknya menyelesaikan hal itu
    • Namun, berbeda dari comptime milik Zig, Crabtime tampak lebih seperti versi perluasan dari evaluasi saat waktu kompilasi yang sederhana
    • Perbedaan besar antara Zig dan Rust adalah apakah informasi tipe bisa diakses, Zig bisa melakukannya tetapi Rust tidak
    • Di Rust, orang memakai cara memutar seperti parsing RustDoc untuk mendapatkan informasi tipe
    • Crabtime tampaknya tidak menyediakan fitur refleksi tipe, dan tanpa fitur ini sulit menganggapnya sebagai implementasi comptime yang sesungguhnya
    • pron
      • comptime milik Zig bukan macro sintaks, sehingga lebih mudah dipahami dan di-debug
      • Ia bekerja seperti fungsi yang dijalankan saat runtime, dan bersama refleksi yang kuat berperilaku seperti bahasa yang sebagian bertipe
      • Hanya dengan fitur comptime, banyak fitur bahasa lain bisa digantikan, sehingga bahasanya sendiri menjadi lebih sederhana
      • Zig mempertahankan kesederhanaan setingkat C sambil tetap menawarkan daya ekspresif setingkat C++
      • Menambahkan comptime ke bahasa yang kompleks membuat sulit memperoleh keuntungan kesederhanaan seperti pada Zig
  • pjmlp
    • Menilai perkembangan metaprogramming C++ secara positif
    • Dimulai dari hack template di C++98, lalu berkembang hingga mencapai tingkat yang praktis di C++23
    • Ke depannya, jika refleksi saat waktu kompilasi diperkenalkan, prospeknya akan menjadi lebih baik
    • Di Rust, setiap macro punya sintaks yang berbeda, atau harus bergantung pada crate eksternal seperti syn, sehingga ada banyak hal yang harus dipelajari
  • nindalf
    • Puas setelah menulis ulang kode generator benchmark yang sebelumnya dibuat dengan macro deklaratif menggunakan Crabtime
    • Saat memakai Crabtime, sebagian besar kode bisa ditulis seperti Rust biasa sehingga keterbacaan dan kustomisasi meningkat
    • Dulu nama modul harus diberikan setiap kali, tetapi sekarang file bisa dibaca langsung dari disk untuk diproses
    • Dalam perbandingan penggunaan paste!{} dan crabtime::output!{}, yang terakhir dinilai jauh lebih intuitif
    • Sintaks perulangan juga bisa langsung memakai sintaks for milik Rust alih-alih pola macro yang rumit
    • Berkat Crabtime, ia menjadi lebih percaya diri terhadap metaprogramming Rust
    • Versi sebelumnya diumumkan beberapa minggu lalu, dan versi baru diumumkan dua hari lalu, jadi penggunanya belum banyak
    • Dulu ia sendiri tidak terlalu memahami macro yang pernah ditulisnya, tetapi dengan Crabtime ia bisa menulis dan merawatnya dengan jelas
  • orman784
    • Menyebut bahwa saat perlu menulis macro yang kompleks, ia merasa macro_rules saja punya batasan sehingga akhirnya menulis seluruh kodenya secara langsung
    • Ingin menghindari penggunaan proc_macro, tetapi biasanya harus menambahkan dependensi seperti syn, quote, dan proc_macro2, yang terasa kurang memuaskan
    • Ia ingin mengujinya untuk melihat apakah Crabtime bisa menyelesaikan hal itu
    • Ia belum memeriksa seberapa banyak dependensi tambahan yang dibutuhkan, tetapi kalau bisa ingin menguranginya