Yüksek seviyeli sistem programlama dili Hylo (Val)
(val-lang.dev)- Hylo, değer semantiği temelinde güvenli sistem ve jenerik programlamayı hedefliyor; derleyici ve standart kütüphane henüz erken aşamada olsa da örnekler Compiler Explorer üzerinde çalıştırılabiliyor
- Dil araştırmaları, Swift subscript’inin inout projection ile genişletilmesi, method bundles, yapısal eşzamanlılık ve değer semantiği tabanlı çift bağlı liste gibi konulara odaklanıyor
- Derleyici LLVM kullanıyor ve buna ek olarak coherence sağlayan jenerik derleme, program durumunun önbelleklenmesi ve serileştirilmesi ile C birlikte çalışabilirliği araştırmalarını ele alıyor
- Geliştirme ortamı, VSCode eklentisi, dokümantasyon derleyicisi ve Language Server prototipi sunuyor; SPM/CMake, Ninja/Xcode, Windows/Linux/macOS ve Docker geliştirme araç zinciri imajlarını destekliyor
- Örnekler, güvenli projection ve sink method aracılığıyla sahiplik ve serbest bırakma kurallarını kod düzeyinde görünür kılıyor ve bir sistem dilinin güvenliği nasıl zorunlu kılabildiğini gösteriyor
Hylo’nun kapsamı ve mevcut durumu
- Hylo’nun derleyicisi ve standart kütüphanesi hâlâ erken aşamada
- Gelişmiş Hylo kod örnekleri Compiler Explorer üzerinde çalıştırılabiliyor
- Açılış ekranında da Hylo’yu Compiler Explorer üzerinde deneyebileceğiniz bir bağlantı sunuluyor
Değer semantiği ve dil araştırmaları
- MVS & Theory, değer semantiği, güvenli projection, eşzamanlılık ve veri yapısı gösterimi etrafında şekilleniyor
- Swift’in subscript yapısını inout projection ile genişletme
- Method bundles
- Structured concurrency made easy: thread hopping ve function coloring olmadan yapısal eşzamanlılık
- Değer semantiğiyle çift bağlı liste ifade etme yaklaşımı, reference semantics tabanlı uygulamadan daha güvenli ve daha hızlı
Derleyici ve standart kütüphane
- Derleyici çalışmaları, LLVM tabanlı derleme, jenerikler, durum saklama ve C birlikte çalışabilirliği alanlarına yayılıyor
- LLVM kullanılarak derleme
- coherence sağlayan jenerik derleme için yeni teknik
- Derleyicinin program durumunu önbelleklemesi ve serileştirmesi
- C interop araştırması
- Standart kütüphane tarafında ise şu anda uygulama dokümantasyonu ve koleksiyon algoritmalarıyla ilgili çalışmalar yayımlanıyor
- Mevcut uygulama dokümantasyonu temel trait’leri ve veri yapılarını içeriyor
- Positionless Collection Algorithms
- rs-stl: jenerik programlamayı iyileştirmek için C++ STL algoritmalarının Rust’a taşınmış sürümü
Geliştirici deneyimi ve derleme ortamı
- Düzenleyici, dokümantasyon ve dil sunucusu için araçlar birlikte sunuluyor
- VSCode extension: sözdizimi vurgulama ve kod çalıştırma desteği
- Documentation compiler
- Language Server prototipi
- Derleme ve geliştirme ortamı, birden fazla işletim sistemi ile konteyner tabanlı akışları destekliyor
- Development Containers desteği başlangıç adımlarını azaltıyor
- SPM/CMake, Ninja/Xcode, Windows/Linux/macOS desteği
- Test üreten derleyici eklentisi
- Önceden derlenmiş Hylo development toolchain Docker imajı
- Derleyici Swift 6.2 ile yazılıyor
Hylo ile ilgili araştırmalar ve sunum materyalleri
- Hylo etrafındaki materyaller makaleler, sunumlar ve podcast’ler hâlinde derlenmiş durumda
- Son makale ve belgelerde şu başlıklar yer alıyor
- Who Owns the Contents of a Doubly-Linked List?, 2025-09
- High-Fidelity C Interoperability in Hylo, 2025-06
- Debugging Hylo, 2025-06
- On the State of Coherence in the Land of Type Classes, 2025-02
- Method Bundles, 2024-10
- Type Checking with Rewriting Rules, 2024-10
- Use Site Checking Considered Harmful, 2024-10
- Borrow checking Hylo, 2023-10
- The Val Object Model, 2022-10
- Implementation Strategies for Mutable Value Semantics, 2022
- Sunum materyalleri; yapısal eşzamanlılık, güvenli sistem ve jenerik dil tasarımı, HyloDoc, borrow checking, C++ birlikte çalışabilirliği ve değer semantiğini ele alıyor
- Hylo: The Safe Systems and Generic-programming Language Built on Value Semantics, C++ on Sea 2024-07
- HyloDoc: A Documentation Compiler for Hylo, C++ on Sea 2024-06
- Val: A Safe Language to Interoperate with C++, CppCon 2022-09
- Value Semantics: Safety, Independence, Projection, & Future of Programming, CppCon 2022-09
Kod örnekleri: güvenli projection ve açık serbest bırakma
- Subscripts - A Safe Projection Mechanism örneği,
Angletürününradiansdeğerini sakladığını vedegreesözelliğiniletileinoutblokları üzerinden sunduğunu gösteriyordegreesiçindekilet, radians değerini dereceye çevirip döndürüyorinout, geçici derece değerid’yiyield &dile açığa çıkarıyor; ardından değiştirilmiş değeri tekrar radians’a çeviripself.radiansiçine yansıtıyormain,inout d = &a.degreesile projection elde ediyor,d’yi0.0yapıyor ve ardındana.radians == 0.0olduğunu doğruluyor
- Sink Methods - Capability for Deinitializing örneği,
Computertürününshutdown()işlevini sink method olarak sunduğu bir yapıyı gösteriyorshutdown(), bellek içeriğini yazdırdıktan sonraself.ramüzerinde sink işlemi uyguluyortest1, birComputeroluşturupshutdownçağırmadığı içinCannot deinit computerhatası veriyortest2,shutdownçağrısını yalnızcaif random_bool()içinde yaptığı için,ifbloğuna girilmeyen yoldaCannot deinit computerhatası oluşuyortest3,whileiçindeshutdownçağırdığında ilk yinelemeden sonra tüketilmiş nesnenin kullanımı sorunu ortaya çıkıyor; ayrıcawhilebloğuna girilmeyen yolda deinit yapılamama durumu sürüyor
- Ek örnekler compiler test suite içinde görülebilir
1 yorum
Hacker News yorumları
C++ halefi olarak, Herb Sutter’ın harika CppFront’undan bile Val daha umut verici olabilir diye düşünüyorum. Şimdilik sadece aşağıdaki iki sunumu izledim ama öne çıkan noktalar statik derleme, statik tipler, C++ ile birlikte çalışabilirlik, bellek güvenliği, tür güvenliği ve veri yarışı olmaması gibi görünüyor
Bunu anlatırken genelde şöyle diyorum: “Yeni bir C++ projesine başlıyorsun ve performansı dert etmediğini varsayalım; pointer ya da referans kullanmadan her şeyi değer olarak geçirip değer olarak döndürsen, yan etkiler ve veri yarışı konusunda endişe etmemen güzel olmaz mıydı?” Val’ın ilginç yanı, dilde pointer ve referansları kaldırsa bile derleyicinin kendi içinde
constreferansla geçirme ve dönüş değeri optimizasyonu uygulayarak istenen semantiği ve performansı aynı anda korumasını sağlamasıVal: A Safe Language to Interoperate with C++ - Dimitri Racordon - CppCon 2022 https://www.youtube.com/watch?v=ws-Z8xKbP4w
https://cppcast.com/val-and-mutable-value-semantics/
https://adspthepodcast.com/
PHP yorumlayıcısının aslında copy-on-write kullanacak kadar akıllı olduğunu düşünüyorum ama bunu hiç kendim profillemedim. Yine de sayfa yükleme başına epey karmaşık veri işleme, DSL’leri karakter karakter parse etme, dinamik SQL üretme ve sonuçları keyfi yapılara dönüştürme gibi işler yapmama rağmen hissedilir bir performans sorunu yaşamadım
PHP 4 döneminde nesneler de değişkenlerde saklanan değerler gibi davranıyordu; sonradan nesne değişkenlerini referans semantiğine çevirirken “değer, değişken referansı, değere pointer” kavramlarını saklama türünden bağımsız değişken özellikleri olarak tasarlamamış olmalarını kaçırılmış bir fırsat olarak görüyorum
$a = $b; // $bdeğerini$aiçine kopyala$a = &$b; // $ave$bartık aynı değişken$a = *$b; // $a,$bile aynı nesneyi gösterir ama$a = &$bunlike değişkenin kendisi bağlanmaz`Bu kadar çok sıfır maliyetli soyutlama dili çıkması bir yandan güzel ama sistem programcılarının artık bir kazanan seçmesini de istiyorum. Zaten küçük olan sistem programcısı topluluğunun Rust, Zig, Val gibi seçeneklerle daha da bölünmemesini ve sistem dili savaşlarının yakında bitmesini umuyorum
Val’ı bugün ilk kez öğrenince hissettiklerim şöyle ilerledi: “Aa, yeni bir sistem dili. Belki çok da önemli değildir ama bir bakayım. Dokümantasyon fena değil. Sahiplik konusundaki fikirler oldukça düşünülmüş ve sözdizimi de mantıklı. Peki ama bağımsız varlık sebebi olacak kadar farklı mı? Bunu kim yapıyor?”
Sonra bunun üzerinde Dave Abrahams’ın çalıştığını görünce ilgim arttı. Apple’da karşılaşmıştım ve Swift hakkında yaptığı Crusty sunumunu da hatırlıyorum[1]. Güçlü görüşlerini sevmiştim ama Apple daha sonra o videoyu, artık eski tavsiyeler içerdiği gerekçesiyle kaldırdı. Şimdi Adobe’de olduğuna göre, bu bir Adobe dili mi acaba diye düşündüm
Sonuç olarak takip etmeye değer görünüyor; bağlantısı verilen sunumları izledikten sonra bekleyip görmek gerekir
[1] Crusty sunumunu buldum: "I don't do Object Oriented!" https://www.youtube.com/watch?v=p3zo4ptMBiQ
Bir derleyici geliştiricisi olarak aşağıdaki issue’ları görünce sarsıldım
https://github.com/val-lang/val/issues/758
https://github.com/val-lang/val/issues/711
Uygulamanın durumu pek iyi görünmüyor. Mümkün olduğunca çabuk self-hosting yapmaları gerekiyor; böylece bu tür temel hataları daha çok bulurlar. Buna rağmen 500’den fazla yıldızı var
Self-hosting de her şey değil. Her şeyden önce daha çok sembolik bir kilometre taşı; başarıldığında kutlanacak bir şey ama geliştirme döngüsünün oldukça ilerisine kadar dilin bir zayıflığı sayılmamalı diye düşünüyorum
Uzun zamandır “Val ile oynamayı” erteliyordum, bugün sonunda denedim ama 4.000’den fazla commit olmasına rağmen hâlâ kullanılabilir olmaktan uzak. Dil turundaki örneklerin çoğu derlenmiyor, dışarıdan basit görünen örnekler bile başarısız oluyor
Carbon ise henüz doğru düzgün bir şey ortaya koymuş değil; Sean Baxter, Circle derleyicisinde ciddi ilerleme kaydediyor ve Carbon’un iyi yanlarının birçoğunu da hayata geçiriyor. Hâlâ dil denemeyecek durumdaysa halef olması da zor
Artık V, Val, Vala ve Vale var. Unuttuğum başka diller de var mı?
Her seferinde söylenen şey ama Val’de tek hoşuma gitmeyen nokta, Vale ve V’nin de yeni sistem dilleri olması. İsimler yüzünden üçünü karıştırmak çok kolay
İlgili bir yazı var. Başka var mı?
Val, a new programing language inspired by Swift and Rust - https://news.ycombinator.com/item?id=31788527 - Haziran 2022, 19 yorum
“mutable value semantics” makalesine göz gezdirdim; yazarların referanslar ve pointer’lar yerine a) iç içe struct’lar ile
Anyüzerinden kısmi dolaylı erişim ve çalışma zamanı kontrolleri, b) dizi indeksleri önerdiğini anladıysam doğru mu diye merak ediyorum“Çift bağlı liste veya yönlü grafik gibi kendine referans veren veri yapılarını değiştirilebilir değer tipleriyle nasıl ifade edebilirsiniz diye sormak yerindedir. Aslında rastgele bir grafik komşuluk listesi olarak ifade edilebilir…” ifadesi dikkatimi çekti. Uygulamanın içinde bellek yığınını ve bir tür çöp toplayıcıyı yeniden kurmadan çift bağlı listeyi makul biçimde nasıl uygulayabileceklerini pek göremiyorum
Ek olarak https://github.com/orgs/val-lang/discussions/736 içindeki tartışmayı buldum; Rust’taki
unsafebenzeri bir kaçış kapısı gelecek gibi görünüyor. O zaman bütün sorunlar çözülür ama “Val’in güvenli alt kümesi tek başına pratik uygulamalar yazmak için yeterli mi” sorusu daha uzun süre tartışma konusu olacak gibi duruyorBunun düşünüldüğünden daha az saçma olmasının nedeni, bu indekslerin belirli bir veri yapısına, örneğin çift bağlı listeye ya da grafa, bağlı olması; dolayısıyla programın başka yerlerine erişecek şekilde manipüle edilmelerinin kolay olmaması. Derleyici bunu denetlediğinde de, programı bozma girişimlerinde de bu geçerli
Ana sayfadaki örneğin açıklamasını nasıl okumam gerektiğini bilmiyorum. “Gereksiz tahsisler oluşmaz.
longer_ofsonucunun daha uzun argümanın projection’ı olması nedeniyle,emphasizez’yi değiştirirse y değeri doğrudan değişir. Değer ne kopyalanır ne de taşınır, amaemphasizee referans olarak da geçirilmez” deniyor.Bir string argümanının fonksiyona geçirildiği ve sonuna karakter eklendiği bir durumda, mevcut stringin başlangıçtaki bir uzunluğu ve stack üzerinde belirli bir konumu ile boyutu olurdu; o halde y’nin yeni bir kopyası olmadan bunun nasıl mümkün olduğunu anlamıyorum. Biri ekleme yaparsa diye stringin sonuna fazladan padding mi bırakılıyor? Öyleyse ne kadar padding bırakılıyor ve neden bu genel olarak daha verimsiz olmuyor?
>geleneği kullanılır; parser özel işlem yapmasa da iyi çalışırYine de benzer bir sorum var. 1GB’lık bir string değiştirilirse ne olur? Yazma anında kopyalama mı yapılır?
Vakaların %99’unda optimizasyonla ortadan kalkabilir ama kalan %1’de bulunması çok zor performans düşüşleri yaratacakmış gibi geliyor
longer_ofbir fonksiyon değil, bir subscript ve subscript değer döndürmek yerine değeri projection ederek çağırana geçici okuma/yazma erişim hakkı veriyormuşBunun nasıl taşımaya girmediğini pek anlamıyorum. Stringler söz konusuysa, Rust’taki gibi değişken boyuta izin vermek için heap üzerinde de tutulabilir