منصوبے کے بارے میں

بلاک ایک لوکل فرسٹ پولی گلٹ پروگرامنگ لینگویج اور ایگزیکیوشن انجن ہے جو ڈویلپرز کو ایک ہی قابل مطالعہ دستاویز میں متعدد ہوسٹ رن ٹائمز میں ورک فلو مرتب کرنے کی سہولت دیتا ہے۔ شیل اسکرپٹس یا عارضی فائلوں کے ساتھ Python، JavaScript، Lua، PHP، SQL، Ruby، PowerShell، اور دیگر زبانوں کو جوڑنے کے بجائے، بلاک ٹیگ پر مبنی نحو (`<py>`, `<js>`, `<sql>`, وغیرہ) استعمال کرتا ہے جہاں ہر لینگویج بلاک اپنی مقامی نحو کو برقرار رکھتا ہے جبکہ بلاک سیریل ایگزیکیوشن، سیریلائزیشن، اور پروسیس باؤنڈریز کے درمیان اسٹیٹ کی منتقلی کا انتظام کرتا ہے۔ ### یہ کیسے کام کرتا ہے بلاک دستاویز کو پارس کیا جاتا ہے، توثیق کی جاتی ہے، اور پھر ہر لینگویج اسٹیج کو ایک الگ ہوسٹ پروسیس کے طور پر لانچ کیا جاتا ہے۔ بلاک مشترکہ قابل ترتیب اسٹیٹ کی ایک تیار شدہ نمائندگی کو ایک اسٹیج سے اگلے تک منتقل کرتا ہے۔ اس کا مطلب ہے کہ کھلی فائل ہینڈلز، ساکٹس، لائیو ڈیٹا بیس کنکشنز، اور سرکلر حوالہ جات کو بلاکس کے درمیان منتقل نہیں کیا جا سکتا—صرف سادہ ڈیٹا ٹائپس جیسے انٹیجرز، فلوٹس، سٹرنگز، بولینز، ایرے، اور ڈکشنریز۔ پروسیس-باؤنڈری ماڈل ورک فلو کو قابل معائنہ اور پورٹیبل بناتا ہے لیکن اس کے لیے بامقصد اسٹیٹ ڈیزائن کی ضرورت ہوتی ہے۔ ### ایڈیشنز اور فائل فارمیٹس تین ایڈیشن دستیاب ہیں: - **Lite** (`.blkl`): بنیادی لینگویج بلاکس کے ساتھ ہلکے پھلکے مقامی پولی گلٹ اسکرپٹس۔ - **Standard** (`.blk`): عمومی ڈویلپمنٹ استعمال، امپورٹس، پروجیکٹ ڈسکوری، مقامی کنٹرول فلو، اور مقامی سرور سپورٹ شامل کرتا ہے۔ - **Plus** (`.blkp`): مکمل فیچر سطح بشمول کسٹم رن ٹائم تعریفیں، فارمیٹنگ، لنٹنگ، دستاویزات کی تیاری، اور توسیعی انٹیگریشنز۔ ایگزیکیوٹیبل کمانڈز ایڈیشنز سے مماثل ہیں: `block-lite`، `block`، اور `block-plus`۔ ### معاون زبانیں بلاک 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> ``` ایک بلاک میں پیدا ہونے والی ویلیوز اگلے بلاک میں دستیاب ہو جاتی ہیں۔ بہترین عمل یہ ہے کہ ہر مقامی ویری ایبل کو برآمد کرنے پر انحصار کرنے کے بجائے ایک چھوٹا سا واضح نتیجہ آبجیکٹ تیار کیا جائے۔ ### مقامی بلاک کنٹرول فلو تمام ایڈیشنز میں ایک متعین، سینڈ باکسڈ مقامی لینگویج کور شامل ہے جو اسائنمنٹس، `if`/`elif`/`else`، `while` اور `for` لوپس، `range()`، فنکشنز، لسٹ اور ڈکشنری لٹرلز، انڈیکسنگ، اور بلٹ ان فنکشنز جیسے `len`، `str`، `int`، `sum`، اور `keys` کو سپورٹ کرتا ہے۔ اس کور میں جان بوجھ کر فائل، نیٹ ورک، پروسیس، یا پیکج APIs کی کمی ہے—جب ان کی ضرورت ہو تو ہوسٹ رن ٹائم بلاک استعمال کریں۔ ### مقامی 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 ہے۔ ونڈوز بلڈ .NET فریم ورک کمپائلر کا استعمال کرتے ہوئے C# سورس سے `build.ps1` کے ذریعے مرتب ہوتا ہے، جس سے `block.exe`، `block-lite.exe`، اور `block-plus.exe` تیار ہوتے ہیں۔ مفت کوڈ سائننگ SignPath.io کے ذریعے فراہم کی جاتی ہے؛ موجودہ ونڈوز ریلیزز زیر جائزہ ہیں اور غیر دستخط شدہ ہیں۔ ### بلاک کیا نہیں ہے بلاک Python، JavaScript، Rust، یا کسی بھی بالغ زبان کا متبادل نہیں ہے۔ یہ ان کی نحو کی نقل نہیں کرتا یا ہوسٹ رن ٹائمز کو بنڈل نہیں کرتا۔ یہ مقامی رن ٹائمز کو مربوط کرتا ہے اور اسٹیجز کے درمیان ڈیٹا باؤنڈری کو قابل مشاہدہ بناتا ہے۔ پارسر کی غلطیاں بلاک سے تعلق رکھتی ہیں؛ گم شدہ رن ٹائمز، پیکج کی غلطیاں، اور زبان کے مخصوص مسائل ہوسٹ انوائرنمنٹ سے تعلق رکھتے ہیں۔ ### لائسنس MIT لائسنس۔ ریپوزٹری سورس، دستاویزات، اور مثالیں سب اوپن ہیں۔