हाई-लेवल सिस्टम प्रोग्रामिंग भाषा Hylo(Val)
(val-lang.dev)- Hylo value semantics पर आधारित सुरक्षित systems और generic programming को लक्ष्य बनाता है; compiler और standard library अभी शुरुआती चरण में हैं, लेकिन Compiler Explorer पर उदाहरण चलाकर देखे जा सकते हैं
- भाषा पर शोध Swift subscript के inout projection विस्तार, method bundles, structured concurrency, और value semantics आधारित doubly linked list जैसे विषयों पर केंद्रित है
- compiler LLVM का उपयोग करता है और coherence के साथ generic compilation, program state की caching/serialization, और C interoperability पर शोध भी शामिल करता है
- development environment VSCode extension, documentation compiler और Language Server prototype प्रदान करता है, साथ ही SPM/CMake, Ninja/Xcode, Windows/Linux/macOS और Docker development toolchain images को support करता है
- उदाहरण safe projection और sink method के जरिए ownership और deinitialization rules को code level पर स्पष्ट करते हैं, और दिखाते हैं कि system language safety को कैसे enforce कर सकती है
Hylo का दायरा और वर्तमान स्थिति
- Hylo का compiler और standard library अभी शुरुआती चरण में हैं
- advanced Hylo code examples Compiler Explorer पर चलाकर देखे जा सकते हैं
- पहले पेज पर भी Hylo को Compiler Explorer पर try करने का link दिया गया है
Value semantics और भाषा शोध
- MVS & Theory value semantics, safe projection, concurrency और data structure representation के इर्द-गिर्द विकसित होता है
- Swift के subscript को inout projection के रूप में expand करना
- Method bundles
- Structured concurrency made easy: thread hopping और function coloring के बिना structured concurrency
- value semantics से doubly linked list को represent करने का तरीका reference semantics implementation की तुलना में ज्यादा सुरक्षित और तेज है
Compiler और standard library
- compiler का काम LLVM-based compilation, generics, state storage और C interoperability तक फैला है
- LLVM का उपयोग करके compilation
- coherence के साथ generic compilation के लिए नई तकनीक
- compiler की program state caching और serialization
- C interop research
- standard library की तरफ मौजूदा implementation docs और collection algorithms से जुड़ा काम public किया गया है
- मौजूदा implementation docs में basic traits और data structures शामिल हैं
- Positionless Collection Algorithms
- rs-stl: generic programming सुधारने के लिए C++ STL algorithms का Rust port
Developer experience और build environment
- editor, documentation और language server के लिए tools साथ में उपलब्ध कराए गए हैं
- VSCode extension: syntax highlighting और code execution support
- Documentation compiler
- Language Server prototype
- build और development environment कई operating systems और container-based flow को support करता है
- Development Containers support से शुरुआत की प्रक्रिया कम होती है
- SPM/CMake, Ninja/Xcode, Windows/Linux/macOS support
- test generation compiler plugin
- pre-built Hylo development toolchain Docker image
- compiler Swift 6.2 में लिखा गया है
Hylo से जुड़े शोध और presentation materials
- Hylo के आसपास की सामग्री papers, presentations और podcasts के रूप में व्यवस्थित है
- हालिया papers और documents में ये items शामिल हैं
- 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
- presentation materials structured concurrency, safe systems/generic language, HyloDoc, borrow checking, C++ interoperability और value semantics को cover करते हैं
- 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
Code examples: safe projection और explicit deinitialization
- Subscripts - A Safe Projection Mechanism example दिखाता है कि
Angletyperadiansvalue store करता है औरdegreesproperty कोletऔरinoutblocks के रूप में provide करता हैdegreesकाletradians को degree में convert करके return करता हैinouttemporary degree valuedकोyield &dसे expose करता है, फिर बदली हुई value को वापस radians में convert करकेself.radiansमें reflect करता हैmaininout d = &a.degreesसे projection लेता है,dको0.0में बदलता है, और फिर check करता है किa.radians == 0.0
- Sink Methods - Capability for Deinitializing example में
Computertypeshutdown()को sink method के रूप में provide करता हैshutdown()memory contents print करने के बादself.ramको sink process करता हैtest1Computerबनाता है और shutdown नहीं करता, जिससेCannot deinit computerहोता हैtest2केवलif random_bool()के अंदर shutdown करता है, इसलिए जिस path मेंifमें enter नहीं होता, वहांCannot deinit computerहोता हैtest3मेंwhileके अंदर shutdown call करने पर पहली iteration के बाद consumed object use की समस्या आती है, और जिस path मेंwhileमें enter नहीं होता, वहां deinit न कर पाने की स्थिति बनी रहती है
- अतिरिक्त examples compiler test suite में देखे जा सकते हैं
1 टिप्पणियां
Hacker News की राय
C++ के उत्तराधिकारी के तौर पर शायद Herb Sutter के बेहतरीन CppFront से ज़्यादा Val को लेकर उम्मीद हो सकती है। अभी तक नीचे की सिर्फ़ दो presentations देखी हैं, लेकिन static compilation, static types, C++ interoperability, memory safety, type safety, और data races न होना इसके core लगते हैं
मैं समझाते समय कहता हूं, “मान लें आप नया C++ project शुरू कर रहे हैं और performance की चिंता नहीं कर रहे; अगर pointers या references के बिना सब कुछ value के रूप में pass और return करें, तो side effects या data races की चिंता न होने से अच्छा नहीं होगा?” Val में दिलचस्प बात यह है कि भाषा से pointers और references हटाने पर भी compiler internally const reference passing और return value optimization लागू करके इच्छित semantics और performance दोनों को बचाए रखता है
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 interpreter असल में copy-on-write इस्तेमाल करने जितना smart है, लेकिन मैंने खुद profiling नहीं की है। फिर भी काफी complex data processing, DSL की character-by-character parsing, dynamic SQL generation, और results को arbitrary structures में massage करने जैसे काम हर page load पर करने के बावजूद महसूस होने वाली performance problem नहीं थी
PHP 4 के समय objects भी variables में stored values की तरह behave करते थे, लेकिन बाद में object variables को reference semantics में बदलते वक्त “value, variable reference, value का pointer” को storage type से orthogonal variable attributes न बनाना मुझे एक छूटा हुआ मौका लगता है
$a = $b; // $b की value को $a में copy करें$a = &$b; // $a और $b अब वही variable हैं$a = *$b; // $a, $b वाले ही object की ओर point करता है, लेकिन $a = &$b के विपरीत variable खुद linked नहीं हैएक तरफ़ यह अच्छा है कि zero-cost abstraction वाली इतनी भाषाएं आ रही हैं, लेकिन मन यह भी चाहता है कि systems programmers अब कोई एक winner चुन लें। उम्मीद है कि पहले से ही छोटा systems programmers community Rust, Zig, Val आदि में और छोटे हिस्सों में न बंटे, और systems language war जल्दी खत्म हो
आज पहली बार Val के बारे में जानने पर मेरी भावना कुछ ऐसी रही: “ओह, नई systems language है। शायद कुछ खास न हो, लेकिन देख लेते हैं। Docs ठीक हैं। ownership से जुड़े ideas काफ़ी सोच-समझकर बने हैं और syntax भी reasonable है। लेकिन क्या यह अपने स्वतंत्र अस्तित्व की वजह रखने जितनी अलग है? इसे बना कौन रहा है?”
फिर देखा कि Dave Abrahams इस पर काम कर रहे हैं, तो रुचि बढ़ गई। Apple में उनसे सामना हुआ था और Swift पर Crusty presentation[1] भी याद है। उनके मजबूत viewpoints पसंद आए थे, लेकिन Apple ने बाद में पुराने advice होने की वजह से वह video हटा दिया। अब वे Adobe में हैं, तो लगा क्या यह Adobe language है
निष्कर्ष यह है कि इसे watch करना worth है, और linked presentation देखने के बाद इंतज़ार करना चाहिए
[1] Crusty presentation मिल गई: "I don't do Object Oriented!" https://www.youtube.com/watch?v=p3zo4ptMBiQ
एक compiler developer के तौर पर नीचे दिए गए issues देखकर मैं चौंक गया
https://github.com/val-lang/val/issues/758
https://github.com/val-lang/val/issues/711
implementation की हालत अच्छी नहीं लगती। जितनी जल्दी हो सके self-hosting करना चाहिए, और तब ऐसे basic bugs और ज़्यादा मिलेंगे। फिर भी इसके 500 से ज़्यादा stars हैं
self-hosting भी सब कुछ नहीं है। सबसे बढ़कर यह एक symbolic milestone जैसा है, और हासिल हो तो celebrate करने लायक है, लेकिन development cycle में काफ़ी बाद तक इसे उस भाषा की कमजोरी मानने की बात नहीं लगती
काफ़ी समय से “Val से खेलकर देखना” टाल रहा था, आज आखिर कोशिश की, लेकिन 4,000 से ज़्यादा commits होने के बावजूद यह अभी usable state से काफ़ी दूर है। language tour के ज़्यादातर examples compile नहीं होते, और ऊपर से simple दिखने वाले examples भी fail होते हैं
Carbon ने अभी तक सच में कुछ ठोस release नहीं किया है, और Sean Baxter Circle compiler में बहुत progress कर रहे हैं, साथ ही Carbon के कई अच्छे हिस्से भी implement कर रहे हैं। अगर इसे अभी भाषा कहना ही मुश्किल है, तो successor बनना भी मुश्किल है
अब V, Val, Vala, Vale हैं। क्या कोई और भाषा है जिसे मैं भूल रहा हूं?
हर बार यही बात आती है, लेकिन Val में मुझे सिर्फ़ यही बात पसंद नहीं कि Vale और V भी नई systems languages हैं। नामों की वजह से तीनों में बहुत आसानी से confusion हो जाता है
इससे जुड़ा एक लेख है। और भी हैं क्या?
Val, a new programing language inspired by Swift and Rust - https://news.ycombinator.com/item?id=31788527 - जून 2022, 19 comments
“mutable value semantics” paper को सरसरी तौर पर देखा, और मैं जानना चाहता हूं कि क्या मेरा समझना सही है कि authors references और pointers को a) nested structs और
Anyके ज़रिए कुछ indirection और runtime checks, b) array indices से replace करने का सुझाव दे रहे हैंयह वाक्य ध्यान खींचता है: “यह पूछना उचित है कि mutable value types से doubly linked list या directed graph जैसे self-referential data structures को कैसे represent किया जा सकता है। दरअसल arbitrary graph को adjacency list से represent किया जा सकता है…”। implementation के अंदर memory heap और एक तरह का garbage collection फिर से बनाए बिना doubly linked list को reasonable तरीके से implement करने का रास्ता मुझे साफ़ नहीं दिखता
इसके अलावा https://github.com/orgs/val-lang/discussions/736 पर discussion मिली, और लगता है Rust के
unsafeजैसी escape hatch आ जाएगी। तब सारी समस्याएं हल हो जाएंगी, लेकिन “क्या Val का safe subset ही practical applications बनाने के लिए पर्याप्त है” यह सवाल आगे लंबे समय तक बहस का विषय बना रहेगायह तरीका जितना सुनने में मूर्खतापूर्ण लगता है, उससे कम है, क्योंकि ये indices किसी specific data structure, जैसे doubly linked list या graph, से बंधे होते हैं, इसलिए इन्हें program के किसी और हिस्से तक पहुंचने के लिए manipulate करना आसान नहीं होता। यह बात compiler द्वारा इसे check करने की स्थिति में भी लागू होती है, और program को तोड़ने की कोशिशों पर भी
homepage के उदाहरण की व्याख्या को कैसे पढ़ना चाहिए, समझ नहीं आ रहा। लिखा है: “अनावश्यक allocation नहीं होता।
longer_ofका result लंबे argument का projection है, इसलिए अगरemphasizez को बदलता है तो y की value में सीधे बदलाव होता है। value न तो copy होती है, न move होती है, लेकिन उसेemphasizeमें reference के तौर पर pass भी नहीं किया जाता”स्थिति यह है कि string argument function में pass हो रहा है और उसमें character जोड़ा जा रहा है; मौजूदा string की शुरुआती length और stack पर कोई खास location/size रही होगी, तो y की नई copy के बिना यह कैसे संभव है, समझ नहीं आ रहा। क्या शायद कोई append करेगा, इस संभावना के लिए string के अंत में extra padding रखी जाती है? अगर ऐसा है, तो padding कितनी रखी जाती है, और कुल मिलाकर यह ज्यादा inefficient क्यों नहीं है?
>convention इस्तेमाल होता है, और parser के special treatment के बिना भी ठीक चलता हैहालांकि मिलता-जुलता सवाल मेरा भी है। अगर 1GB string को modify करें तो क्या होता है? copy-on-write?
99% cases में optimization से यह हट सकता है, लेकिन बचे हुए 1% में ऐसी performance गिरावट हो सकती है जिसे ढूंढना बहुत मुश्किल होगा, ऐसा लगता है
longer_offunction नहीं बल्कि subscript है, और कहा गया है कि subscript value return नहीं करता, बल्कि value को project करके caller को temporary read/write access देता हैयह move के बराबर कैसे नहीं है, यह मुझे ठीक से समझ नहीं आता। string के case में, Rust की तरह variable size allow करने के लिए इसे heap पर रखा जा सकता है