C99 için Algebraic Data Types desteği
(github.com/Hirrolot)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.hbaşlık dosyası ve bir bağımlılık olan Metalang99'dan oluşur. - CMake kullanıyorsanız,
FetchContentile 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
datatypemakrosunu ç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
otherwisekullanılır - Binding'i yok saymak için
_kullanılır of,ifLetiçinde en üst düzeybreak/continuekullanılamaz.gotoetiketi kullanın.
- Varsayılan durum eşleştirmesi için
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
UnitT99veunit_v99ile 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.