- Derleme zamanında satır içi Rust mantığını değerlendirip yeni kod üretip ekleyen bir makro
- Procedural makrolardan daha fazla esneklik ve performans sunarken,
macro_rules'a göre okuyup yazması daha kolay ve daha doğal - Girdi/çıktı olarak Token Stream/Macro Fragments/Rust kodunun tamamını destekler
- IDE desteği, kod biçimlendirme, satır içi tanımlama imkanı sunar ve okunabilirliği yüksektir
- Tek seferlik eval: karmaşık derleme zamanı hesaplamalarını basitçe ele alabilir
const MY_NUM: usize = crabtime::eval! { (std::f32::consts::PI.sqrt() * 10.0).round() as usize }; - Fonksiyon benzeri makrolar (Function-like Macros)
#[crabtime::function]ile fonksiyon benzeri makrolar tanımlanabilir- Tanımlanan fonksiyonlar makroya dönüştürülür ve build aşamasında çalıştırılır
- Standart
#[macro_export]niteliği kullanılarak makrolar dışa aktarılabilir
- Makro olarak tanımlanan fonksiyonlar, geçici bir Rust projesinin
mainfonksiyonuna eklenir - Derleme sonrası üretilen kod
stdoutüzerinden döndürülür
1 yorum
Hacker News yorumları**
proc_macroiçin ayrı bir crate gerekmesi rahatsız ediciydi; Crabtime bunu çözüyor gibi görünüyorcomptimedan farklı olarak, yalnızca derleme zamanı değerlendirme özelliğinin genişletilmiş bir sürümü gibi görünüyorRustDocayrıştırma gibi dolaylı yöntemler kullanılıyorcomptimeuygulaması demek zorcomptimeı sözdizimsel bir makro olmadığı için anlaması ve hata ayıklaması daha kolaycomptimeözelliği bile birçok başka dil özelliğinin yerini alabiliyor, bu da dilin kendisini daha sade kılıyorcomptimeeklemek, Zig'deki sadelik avantajlarını elde etmeyi zorlaştırıyorsyngibi harici crate'lere bağımlı olunuyor; bu da öğrenilmesi gereken şeyleri artırıyorpaste!{}ilecrabtime::output!{}kullanımını karşılaştırdığında ikincisini çok daha sezgisel buluyorforsözdizimi kullanılabiliyormacro_rulesile sınıra takıldığını ve bu yüzden tüm kodu doğrudan kendisinin yazdığını belirtiyorproc_macrokullanmaktan kaçınmak istiyor, ancak geneldesyn,quote,proc_macro2gibi bağımlılıkları eklemek gerektiği için bundan memnun değil