V programlama dili incelemesi
- Bu yazı, V dilinin ortaya çıkışından birkaç yıl sonra, 2022'de V dilinin tanıttığı özellikleri doğrudan test ederek inceleyen bir değerlendirmedir.
- Özellikler çalışmıyor, uyarı ve çalışıyor olarak ayrılarak değerlendirildi. Aşağıda bu değerlendirme listesinin sonuçları yer alıyor. Değerlendirme için örnek kodlar ve değerlendirme gerekçeleri metnin tamamında bulunmaktadır.
- Aşağıdaki liste İngilizce çalışırken çevrildiği için olgusal hatalar içerebilir. Lütfen yalnızca referans amaçlı kullanın.
- Bakımı kolay, basit bir dil.
Güvenlik
- Null yok.
- V dili, derleyici hatası veya uyarısı olmadan null pointer'lar (V referansları) oluşturabiliyor.
- Desteklenmiyor.
- Undefined value yok.
- Başlatılmamış bellek, derleyici hatası veya uyarısı olmadan okunabiliyor.
- Desteklenmiyor.
- Undefined behavior yok.
- V derleyicisi, üç farklı UB biçiminin yazılmasını engellemedi. UB oluşuyor.
- Desteklenmiyor.
- Değişken shadowing (farklı ad alanlarında aynı adı oluşturduğunuzda adın gizlenmesi olgusu) yok.
- Yerel değişkenler gizlenemedi.
- Desteklenmiyor.
- Bound check.
- Bazı temel kontroller var, ancak küçük yollarla atlatılabiliyor.
- Uyarı.
- Varsayılan olarak sabit değişkenler.
- Değişkenler anlamlı biçimde sabit değil.
mut olarak bildirilen bir değişkene sabit bir referans atayıp sonra değişkeni değiştirerek asıl sabit değişkenin de değişmesi kolayca sağlanabiliyor.
- Desteklenmiyor.
- Varsayılan olarak saf fonksiyonlar.
- Bu iddia, saflığı safsızlığın anlamına gelecek şekilde yeniden tanımladığı için anlamsız.
- (Yazar, I/O fonksiyon desteğinin doğası gereği saf olamayacağını belirtiyor. Belgelerde I/O fonksiyonları hariç tüm fonksiyonların saf olduğu yazsa da, I/O fonksiyonları çağrılabildiği andan itibaren bu fonksiyonların saf olmadığını söylüyor. Sanırım bu yüzden anlamın bulanıklaştığını ifade ediyor. Metnin içinde saf fonksiyonların saf olmayan değerler ürettiği gülünç bir örnek de gösteriliyor.)
- Desteklenmiyor.
- Varsayılan olarak sabit struct'lar.
- Yukarıda sabit değişkenlerin zaten aşılabildiğini kanıtladı.
- Desteklenmiyor.
- Option ve sonuç değerleri için zorunlu hata kontrolü.
- Reklam edildiği gibi çalışıyor.
- Sum types (
type MyType = string | int gibi bir sözdizimidir.)
- Sum Types genel olarak çalışıyor gibi görünse de iç uygulamada sorunlar var. (
typeı iki tane daha oluşturarak, V dilinin yasakladığı referansları Sum Types olarak kullanmak mümkün oluyor.)
- Uyarı.
- Genelleme (generics)
- Temel uygulama mevcut, ancak çok hatalı ve kendi vurguladığı güvenlik ile derleyici performansından tamamen kopuk görünüyor.
- Desteklenmiyor.
- Global değişken yok.
- V, küresel olarak paylaşılan durum oluşturmayı veya değiştirmeyi anlamlı hiçbir şekilde engellemiyor.
- Desteklenmiyor.
Performans
- C kadar hızlı (V'nin ana backend derleyicisi, insanların okuyabildiği C dili kodu üretir)
- V'nin performans iddiaları doğrulanmış görünmüyor.
- Desteklenmiyor.
- Ek maliyet olmadan C ile birlikte çalışabilirlik
- Reklam edildiği gibi çalışıyor.
- En aza indirilmiş allocation'lar
- Öznel bir iddia.
- N/A. (Yazar,
int bildiren V kodunun C diline çevrildiğinde C tarafında int'in malloc edilen bir sonuca dönüştüğünü gösterdi.)
- Runtime reflection olmadan yerleşik serialization
- Reklam edildiği gibi çalışıyor.
- Hiçbir dependency içermeyen native binary'lere derlenir.
- V bu iddiaya henüz ulaşmış görünmüyor, ancak genel fikir düzeyinde V programlarının görece kendi kendine yeten ve küçük olduğuna dair bir miktar doğruluk da var.
- Uyarı.
Hızlı derleme
- V, saniyede 1 milyon satırı ve CPU çekirdeği başına derler.
- V derleyicisi, iddia edilen performans seviyesine yaklaşamadı. (V derleyicisinin benchmark sitesinde bile yaklaşık 200 bin V satırı derleniyor.)
- Desteklenmiyor.
- V, V ile yazılmıştır ve kendisini 1 saniyenin altında derleyebilir.
- Reklam edildiği gibi çalışıyor.
- Yenilikçi bellek yönetimi
- V'nin iddiaları iyi desteklenmiyor ve şu anda var olan uygulama yenilikçi olarak tanımlanamaz.
- Desteklenmiyor
1 yorum
Aslında V'nin henüz olgunlaşmaktan uzak olduğu zaten yaygın olarak biliniyor, ancak bu yazı bunun neden öyle olduğunu kanıtlama sürecini iyi anlatıyor. Listedekiler arasından ilginizi çekenleri seçip, yalnızca bunların gerçekten öyle olup olmadığını bir gözden geçirin.