6 puan yazan xguru 2025-03-26 | 1 yorum | WhatsApp'ta paylaş
  • 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 main fonksiyonuna eklenir
  • Derleme sonrası üretilen kod stdout üzerinden döndürülür

1 yorum

 
GN⁺ 2025-03-26

Hacker News yorumları**

  • weinzierl
    • Crabtime'ın logosunu beğeniyor; Rust makrolarını daha kolay yazma girişimi olarak görüyor
    • proc_macro için ayrı bir crate gerekmesi rahatsız ediciydi; Crabtime bunu çözüyor gibi görünüyor
    • Ancak Crabtime, Zig'deki comptimedan farklı olarak, yalnızca derleme zamanı değerlendirme özelliğinin genişletilmiş bir sürümü gibi görünüyor
    • Zig ile Rust arasındaki büyük fark tür bilgisine erişim mümkün olup olmaması; Zig'de mümkünken Rust'ta değil
    • Rust'ta tür bilgisi elde etmek için RustDoc ayrıştırma gibi dolaylı yöntemler kullanılıyor
    • Crabtime'ın tür yansıtma özelliği sunmadığı anlaşılıyor; bu özellik olmadan buna gerçek bir comptime uygulaması demek zor
    • pron
      • Zig'in comptimeı sözdizimsel bir makro olmadığı için anlaması ve hata ayıklaması daha kolay
      • Çalışma zamanında çalışan bir fonksiyon gibi davranıyor ve güçlü yansıtma ile birlikte kısmen türlendirilmiş bir dil gibi işliyor
      • Tek başına comptime özelliği bile birçok başka dil özelliğinin yerini alabiliyor, bu da dilin kendisini daha sade kılıyor
      • Zig, C düzeyinde sadeliği korurken C++ düzeyinde ifade gücü sunuyor
      • Karmaşık bir dile comptime eklemek, Zig'deki sadelik avantajlarını elde etmeyi zorlaştırıyor
  • pjmlp
    • C++'taki metaprogramlamanın gelişimini olumlu değerlendiriyor
    • C++98'deki template hack'lerinden başlayıp C++23'te pratik düzeye ulaştığını söylüyor
    • İleride derleme zamanı yansıtma gelirse daha da iyi olacağını düşünüyor
    • Rust'ta her makronun sözdizimi farklı olabiliyor ya da syn gibi harici crate'lere bağımlı olunuyor; bu da öğrenilmesi gereken şeyleri artırıyor
  • nindalf
    • Daha önce bildirime dayalı makrolarla yazdığı benchmark üretim kodunu Crabtime ile yeniden yazmış ve deneyimden memnun kalmış
    • Crabtime kullanırken kodun büyük kısmını normal Rust gibi yazabildiği için okunabilirlik ve özelleştirilebilirlik artmış
    • Eskiden modül adını her seferinde geçirmek gerekiyordu, şimdi ise dosyaları diskten okuyup işleyebiliyor
    • paste!{} ile crabtime::output!{} kullanımını karşılaştırdığında ikincisini çok daha sezgisel buluyor
    • Döngü sözdiziminde de karmaşık makro kalıpları yerine doğrudan Rust for sözdizimi kullanılabiliyor
    • Crabtime sayesinde Rust metaprogramlama konusunda daha fazla özgüven kazandığını söylüyor
    • Önceki sürüm birkaç hafta önce, yeni sürüm ise iki gün önce duyurulduğu için kullanıcı sayısı henüz fazla değil
    • Daha önce yazdığı makroları kendisi de iyi anlayamıyordu; Crabtime ile ise bunları açık ve bakımı kolay şekilde yazabildiğini söylüyor
  • orman784
    • Karmaşık makrolar yazmak gereken durumlarda macro_rules ile sınıra takıldığını ve bu yüzden tüm kodu doğrudan kendisinin yazdığını belirtiyor
    • proc_macro kullanmaktan kaçınmak istiyor, ancak genelde syn, quote, proc_macro2 gibi bağımlılıkları eklemek gerektiği için bundan memnun değil
    • Crabtime'ın bunu çözüp çözemeyeceğini test etmek istiyor
    • Ne kadar ek bağımlılık getireceğine henüz bakmamış, ama mümkünse bunu azaltmak istiyor