2 पॉइंट द्वारा lifthrasiir 20 일 전 | 2 टिप्पणियां | WhatsApp पर शेयर करें

काफ़ी समय बाद मैंने फिर से एक C library बनाई है। जैसा कि नाम से स्पष्ट है, यह एक WebAssembly interpreter है जिसमें सब कुछ एक ही C header file में समाया हुआ है। बेशक, इसमें सिर्फ़ interpreter भर नहीं है, बल्कि

  • WebAssembly 3.0 spec का 100% समर्थन है। यानी GC वगैरह जैसी चीज़ें भी पूरी तरह शामिल हैं।
  • WebAssembly में deterministic profile नाम का एक विकल्प होता है, जो किसी भी environment में एक जैसा result आने देता है; यह उस विकल्प को implement करता है। इसलिए reproducible results पाने में यह उपयोगी है।
  • x86-64 और AArch64 NEON के लिए architecture-specific optimizations लागू हैं।
  • untrusted code को sandbox करने के लिए ज़रूरी फीचर्स इसमें शामिल हैं। इसमें fuel metering जैसी सुविधा है, जिसमें instructions चलने पर fuel खर्च होता है और fuel खत्म होने पर execution रुक सकती है; साथ ही execution को एक निश्चित समय बाद interrupt करना या memory usage को नियंत्रित करना भी समर्थित है।
  • execution के दौरान इस तरह रुक जाने पर भी बाद में उसे फिर से resume किया जा सके, इसके लिए API डिज़ाइन किया गया है।
  • WebAssembly modules को सिर्फ़ code के ज़रिए बनाया जा सकता है, या एक module में कई modules को link किया जा सकता है।
  • compile time पर भी फीचर्स को सीमित किया जा सकता है, जिससे compile होने वाला code कम हो जाता है, और runtime पर भी फीचर्स को सीमित किया जा सकता है।
  • इसे शुरुआत से ही ABI को स्थिर रखने के लक्ष्य के साथ डिज़ाइन किया गया है। data structures को C stack पर allocate किया जा सकता है, लेकिन layout पहले से तय है ताकि version बढ़ने पर भी ABI न टूटे।
  • इसके अलावा, इसमें ज़रूरत से ज़्यादा कहें तो भी कम लगे इतना testing है, और fuzz testing भी काफ़ी मेहनत से की गई है। (असल में fuzzer अभी भी चल रहा है...)

शुरुआत में यह किसी दूसरे project का एक हिस्सा बनने वाला था, इसलिए इसे इतनी सख्ती से बनाने का इरादा नहीं था। लेकिन WebAssembly reference implementation के tests (जिसे spectest कहा जाता है) चलाने के लिए आखिरकार सब कुछ implement करना ही पड़ा... और करते-करते 100% implementation हो गया। पता नहीं यह सब कैसे हो गया।

आजकल के रुझान के मुताबिक, शुरुआती phase में code Gemini CLI से, बीच के बाद Claude Code और कभी-कभी Codex से लिखा गया, और planning में मुख्य रूप से Codex का इस्तेमाल किया गया। व्यक्तिगत रूप से यह मेरे लिए ऐसा project भी रहा जिसने यह दिखाया कि coding agents, अगर steering ठीक से की जाए, तो hardcore systems programming भी काफ़ी अच्छी तरह कर सकते हैं। vibe coding से कुछ देखने में ठीक-ठाक चीज़ तो निकल आती है, लेकिन भीतर से बिखरी हुई होती है—इस आकलन के ख़िलाफ़ एक उदाहरण बनना भी शायद मेरे मन में था।

2 टिप्पणियां

 
ipeng 20 일 전

अगर टेस्ट करने के लिए specs स्पष्ट हों, तो coding agent के साथ workflow बनाकर उसे convergence तक ले जाने वाला approach काफ़ी अच्छा काम करता है, ऐसा लगता है। vinext और pretext जैसे examples भी याद आते हैं.

अलग बात है, लेकिन क्या आप जर्नल पर CSS serving एक बार चेक कर सकते हैं...? काफ़ी समय बीत जाने के बाद भी वहाँ कई अच्छे लेख हैं जिन्हें आसपास के लोगों से शेयर करना चाहता हूँ, लेकिन desktop से access करने पर CSS load नहीं होता, रोना आ रहा है

 
lifthrasiir 20 일 전

CSS serve करने वाला सर्वर बंद हो गया है T_T माफ़ कीजिए, लेकिन फिलहाल कृपया Wayback Machine का उपयोग करें...