इस प्रोजेक्ट के बारे में
Block एक स्थानीय-प्रथम पॉलीग्लॉट प्रोग्रामिंग भाषा और निष्पादन इंजन है जो डेवलपर्स को एक ही पठनीय दस्तावेज़ के भीतर कई होस्ट रनटाइम में वर्कफ़्लो बनाने की अनुमति देता है। Python, JavaScript, Lua, PHP, SQL, Ruby, PowerShell और अन्य भाषाओं को शेल स्क्रिप्ट या अस्थायी फ़ाइलों के साथ जोड़ने के बजाय, Block एक टैग-आधारित सिंटैक्स (`<py>`, `<js>`, `<sql>`, आदि) का उपयोग करता है जहाँ प्रत्येक भाषा ब्लॉक अपना मूल सिंटैक्स बनाए रखता है जबकि Block अनुक्रमिक निष्पादन, सीरियलाइजेशन और प्रोसेस सीमाओं के पार स्टेट ट्रांसफर का प्रबंधन करता है।
### यह कैसे काम करता है
एक Block दस्तावेज़ को पार्स और वैलिडेट किया जाता है, और फिर प्रत्येक भाषा चरण को एक अलग होस्ट प्रोसेस के रूप में लॉन्च किया जाता है। Block एक चरण से दूसरे चरण तक साझा सीरियलाइज़ेबल स्टेट का एक तैयार प्रतिनिधित्व पास करता है। इसका मतलब है कि खुले फ़ाइल हैंडल, सॉकेट, लाइव डेटाबेस कनेक्शन और सर्कुलर रेफरेंस ब्लॉकों के बीच पास नहीं किए जा सकते हैं—केवल पूर्णांक (integers), फ्लोट्स, स्ट्रिंग्स, बूलियन, एरे और डिक्शनरी जैसे सादे डेटा प्रकार ही पास किए जा सकते हैं। प्रोसेस-बाउंड्री मॉडल वर्कफ़्लो को निरीक्षण योग्य और पोर्टेबल बनाता है लेकिन इसके लिए विचारशील स्टेट डिज़ाइन की आवश्यकता होती है।
### संस्करण और फ़ाइल प्रारूप
तीन संस्करण उपलब्ध हैं:
- **Lite** (`.blkl`): बुनियादी भाषा ब्लॉकों के साथ हल्के स्थानीय पॉलीग्लॉट स्क्रिप्ट।
- **Standard** (`.blk`): सामान्य विकास उपयोग के लिए, जिसमें इम्पोर्ट, प्रोजेक्ट डिस्कवरी, नेटिव कंट्रोल फ्लो और स्थानीय सर्वर सपोर्ट जोड़ा गया है।
- **Plus** (`.blkp`): कस्टम रनटाइम परिभाषाओं, फॉर्मेटिंग, लिंटिंग, दस्तावेज़ निर्माण और विस्तारित एकीकरण सहित पूर्ण सुविधा सतह।
एक्जीक्यूटेबल कमांड संस्करणों से मैप होते हैं: `block-lite`, `block`, और `block-plus`।
### समर्थित भाषाएँ
Block PATH पर पाए जाने वाले होस्ट रनटाइम को सौंपता है। सामान्य टैग में Python के लिए `<py>`, JavaScript/Node.js के लिए `<js>`, `<php>`, `<lua>`, `<ruby>`, PowerShell के लिए `<ps>`, SQLite के लिए `<sql>`, टेम्पलेटेड आउटपुट के लिए `<html>` और `<json>`, साथ ही `<go>`, `<rust>`, `<zig>`, `<ts>`, `<cs>`, `<kotlin>`, `<dart>`, `<perl>`, `<r>`, `<c>`, और `<cpp>` शामिल हैं जहाँ कंपाइलर उपलब्ध हैं। सभी टैग हर संस्करण में सक्षम नहीं हैं।
### साझा स्टेट पाइपलाइन
केंद्रीय विशेषता ब्लॉकों के बीच पास की जाने वाली सीरियलाइज़ेबल स्टेट है:
```block
<py>
total = 40 + 2
</py>
<js>
console.log(total);
</js>
<html>
<p>Total: {{total}}</p>
</html>
```
एक ब्लॉक में उत्पादित मान अगले में उपलब्ध हो जाते हैं। सर्वोत्तम अभ्यास यह है कि प्रत्येक स्थानीय चर को निर्यात करने पर भरोसा करने के बजाय एक छोटा स्पष्ट परिणाम ऑब्जेक्ट बनाया जाए।
### नेटिव Block कंट्रोल फ्लो
सभी संस्करणों में एक नियतात्मक, सैंडबॉक्स्ड नेटिव भाषा कोर शामिल है जो असाइनमेंट, `if`/`elif`/`else`, `while` और `for` लूप, `range()`, फ़ंक्शन, लिस्ट और डिक्शनरी लिटरल, इंडेक्सिंग, और `len`, `str`, `int`, `sum`, और `keys` जैसे बिल्ट-इन फ़ंक्शन का समर्थन करता है। इस कोर में जानबूझकर फ़ाइल, नेटवर्क, प्रोसेस या पैकेज API की कमी है—जब उनकी आवश्यकता हो तो होस्ट रनटाइम ब्लॉक का उपयोग करें।
### स्थानीय HTTP सर्वर
Standard और Plus संस्करण रूट और स्टैटिक फ़ाइल सर्विंग घोषित कर सकते हैं:
```block
<server port="8080">
<route path="/hello">
<py>
message = "hello from Block"
</py>
<json>
{"message": "{{message}}"}
</json>
</route>
</server>
```
रूट्स के लिए डिफ़ॉल्ट रूप से `X-Api-Token` हेडर की आवश्यकता होती है। यह सर्वर केवल स्थानीय विकास के लिए डिज़ाइन किया गया है।
### प्रोजेक्ट प्रबंधन
प्रोजेक्ट्स को `block project init` के साथ शुरू किया जाता है और `block.project.json` के माध्यम से प्रबंधित किया जाता है। मल्टी-प्रोजेक्ट सेटअप के लिए एक वर्कस्पेस रूट को एक बार कॉन्फ़िगर किया जा सकता है। इम्पोर्ट्स सैंडबॉक्स्ड डायरेक्टरी सीमाओं, रिकर्सन डेप्थ कैप्स और सर्कुलर-इम्पोर्ट डिटेक्शन के साथ रिलेटिव पाथ का उपयोग करते हैं।
### CLI कमांड
मुख्य कमांड में निष्पादित करने के लिए `block <file>`, बिना चलाए पार्स करने के लिए `block check <file>`, केवल-पठनीय निष्पादन पूर्वावलोकन के लिए `block plan --json`, डायग्नोस्टिक कोड के लिए `block errors`, स्ट्रक्चर्ड सिंटैक्स ट्री के लिए `block ast`, इंस्टॉल किए गए होस्ट का पता लगाने के लिए `block runtimes`, पर्यावरण डायग्नोस्टिक्स के लिए `block doctor`, और Plus में फॉर्मेटिंग और दस्तावेज़ीकरण के लिए `block-plus fmt/doc` शामिल हैं।
### सुरक्षा और सैंडबॉक्सिंग
इम्पोर्ट्स फ़ाइल काउंट और आकार सीमाओं के साथ सैंडबॉक्स्ड डायरेक्टरी तक सीमित हैं। प्रोजेक्ट रूट के बाहर `../` के माध्यम से डायरेक्टरी ट्रैवर्सल को ब्लॉक किया गया है। नई कॉन्फ़िगरेशन में PowerShell निष्पादन डिफ़ॉल्ट रूप से अक्षम है। नेटिव कंट्रोल फ्लो कोर फ़ाइल या नेटवर्क एक्सेस के बिना रीड-ओनली है। सुरक्षित इंस्टॉलर SHA-256 चेकसम को मान्य करता है और कभी भी Winget, Chocolatey, या डाउनलोड किए गए स्क्रिप्ट को कॉल नहीं करता है।
### एडिटर सपोर्ट
VS Code एक्सटेंशन और Acode प्लगइन उपलब्ध हैं। एडिटर एक्सटेंशन प्राथमिक एक्सटेंशन के अलावा `.block`, `.blocklite`, और `.blockplus` उपनामों को पहचानते हैं।
### रिलीज़ और बिल्ड
वर्तमान रिलीज़ 2.7.5 है। Windows बिल्ड `build.ps1` के माध्यम से .NET Framework कंपाइलर का उपयोग करके C# सोर्स से कंपाइल होता है, जो `block.exe`, `block-lite.exe`, और `block-plus.exe` उत्पन्न करता है। फ्री कोड साइनिंग SignPath.io द्वारा प्रदान की जाती है; वर्तमान Windows रिलीज़ समीक्षा के अधीन और बिना हस्ताक्षरित हैं।
### Block क्या नहीं है
Block Python, JavaScript, Rust, या किसी भी परिपक्व भाषा का विकल्प नहीं है। यह उनके सिंटैक्स का अनुकरण नहीं करता है या होस्ट रनटाइम को बंडल नहीं करता है। यह स्थानीय रनटाइम को समन्वित करता है और चरणों के बीच डेटा सीमा को दृश्यमान बनाता है। पार्सर त्रुटियां Block की हैं; गायब रनटाइम, पैकेज त्रुटियां, और भाषा-विशिष्ट समस्याएं होस्ट वातावरण की हैं।
### लाइसेंस
MIT लाइसेंस। रिपॉजिटरी सोर्स, दस्तावेज़ीकरण और उदाहरण सभी ओपन हैं।
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.