1 puan yazan GN⁺ 2024-05-10 | Henüz yorum yok. | WhatsApp'ta paylaş

Datatype99

Güvenli ve sezgisel algebraic data type'lar sunan bir kütüphane; exhaustive pattern matching ve derleme zamanında dayanıklılık özellikleri sağlar. Tamamen saf C99 ile uygulanmıştır, bu yüzden harici araç gerekmez.

Başlıca özellikler

  • Tip güvenliği: Uygun olmayan tip varyantları, eksik pattern matching ve geçersiz alan erişimleri gibi durumlar derleme zamanında tespit edilir.
  • Taşınabilirlik: Yalnızca standarda uygun bir C99 derleyicisi yeterlidir. Standart kütüphane, derleyici/platforma özgü özellikler veya VLA gerekmez.
  • Öngörülebilirlik: Resmî kod üretim anlambilimi tanımlandığı için, üretilen veri yerleşiminin her zaman aynı olduğu garanti edilir.
  • Anlaşılması kolay hatalar: Hatalı koda karşı dayanıklıdır.
  • Gerçek kullanımda doğrulanmış: OpenIPC'de IP kameralar için gerçek zamanlı yayın yazılımı geliştirmede kullanılıyor. Buna bir RTSP 1.0 uygulaması ve yaklaşık 50 bin satırlık kapalı kaynak kod da dahil.

Kurulum

  • Datatype99, tek bir datatype99.h başlık dosyası ve bir bağımlılık olan Metalang99'dan oluşur.
  • CMake kullanıyorsanız, FetchContent ile getirmeniz önerilir.
  • Gerekirse precompiled header kullanılabilir. Bu, derleme süresini kısaltabilir.

Kullanım

  • Datatype99, tagged union için basit bir syntax sugar katmanıdır. Daha güvenli ve daha kısadır.
  • İkili ağaç örneği:
    • Bunu doğrudan C ile uygulamak için struct, union, enum vb. kullanmanız gerekir
    • Datatype99 ile yalnızca datatype makrosunu çağırarak tanımlayabilirsiniz
    • Pattern matching kullanarak ağacın toplamını hesaplamak da kolaydır
      • Derleme zamanı güvenliği: Yanlış varyantın binding'ine erişmeye çalışırsanız derleme hatası oluşur
      • Esneklik: Binding'ler pointer tipindedir, bu yüzden değiştirilebilir ve dereference edilerek değer alınabilir
    • Varyant constructor fonksiyonları otomatik olarak üretilir
  • Pattern matching hakkında kısa notlar:
    • Varsayılan durum eşleştirmesi için otherwise kullanılır
    • Binding'i yok saymak için _ kullanılır
    • of, ifLet içinde en üst düzey break/continue kullanılamaz. goto etiketi kullanın.

Sözdizimi ve anlambilim

  • EBNF sözdizimi tanımı ve anlambilim açıklaması sağlanır.
  • Kütüphane başlık dosyasında makroların postfix sürümünün kullanılması önerilir.

Unit tipi

  • UnitT99 ve unit_v99 ile sağlanır.

GN⁺ görüşü

  • Datatype99, C içinde de algebraic data type'ları güvenli ve pratik biçimde kullanmayı mümkün kıldığı için büyük bir avantaj sunuyor gibi görünüyor. Mevcut C kod tabanlarına entegre etmesi de kolay olabilir.
  • Ancak C++ içinde kullanılacaksa, template veya constexpr gibi dilin kendi özellikleriyle örtüşen kısımlar olabilir. C'ye kıyasla avantajı azalabilir.
  • Güvenliği derleme zamanında garanti etmesi önemli bir artı, ancak veri tipinin dinamik olarak değiştiği durumlarda kullanımı zor olabilir. Bu da statik tiplemenin sınırlarından biri.
  • Küçük ölçekli projelerde doğrudan elde yazılabilir, ancak kod tabanı büyüdükçe Datatype99 gibi bir kütüphaneden yararlanmak üretkenlik ve güvenilirlik açısından faydalı olabilir.
  • Benzer işlevler sunan kütüphaneler arasında LibADT, Kitsune ve P99 bulunuyor.

Henüz yorum yok.

Henüz yorum yok.