প্রকল্প সম্পর্কে
Block একটি লোকাল-ফার্স্ট পলিগ্লট প্রোগ্রামিং ভাষা ও এক্সিকিউশন ইঞ্জিন, যা ডেভেলপারদের একাধিক হোস্ট রানটাইম জুড়ে ওয়ার্কফ্লো একটি একক পাঠযোগ্য ডকুমেন্টে কম্পোজ করতে দেয়। Python, JavaScript, Lua, PHP, SQL, Ruby, PowerShell এবং অন্যান্য ভাষাকে শেল স্ক্রিপ্ট বা অস্থায়ী ফাইলের মাধ্যমে জোড়ার পরিবর্তে, Block একটি ট্যাগ-ভিত্তিক সিনট্যাক্স ব্যবহার করে (`<py>`, `<js>`, `<sql>` ইত্যাদি), যেখানে প্রতিটি ভাষা ব্লক তার নিজস্ব সিনট্যাক্স ধরে রাখে, আর Block প্রক্রিয়া সীমানা জুড়ে সিকোয়েন্সিয়াল এক্সিকিউশন, সিরিয়ালাইজেশন এবং স্টেট ট্রান্সফার পরিচালনা করে।
### এটি কীভাবে কাজ করে
একটি Block ডকুমেন্ট পার্স ও ভ্যালিডেট করা হয়, তারপর প্রতিটি ভাষা পর্যায় একটি আলাদা হোস্ট প্রসেস হিসেবে চালু হয়। Block এক পর্যায় থেকে পরের পর্যায়ে শেয়ার্ড সিরিয়ালাইজেবল স্টেটের একটি প্রস্তুত উপস্থাপনা পাস করে। এর অর্থ হল খোলা ফাইল হ্যান্ডেল, সকেট, লাইভ ডেটাবেস সংযোগ এবং সার্কুলার রেফারেন্স ব্লকের মধ্যে পাস করা যায় না—শুধুমাত্র সাধারণ ডেটা টাইপ যেমন ইন্টিজার, ফ্লোট, স্ট্রিং, বুলিয়ান, অ্যারে এবং ডিকশনারি পাস হয়। প্রক্রিয়া-সীমানা মডেল ওয়ার্কফ্লোকে পরিদর্শনযোগ্য এবং পোর্টেবল করে, তবে সচেতন স্টেট ডিজাইন প্রয়োজন।
### সংস্করণ এবং ফাইল ফরম্যাট
তিনটি সংস্করণ উপলব্ধ:
- **Lite** (`.blkl`): হালকা লোকাল পলিগ্লট স্ক্রিপ্ট, মৌলিক ভাষা ব্লকসহ।
- **Standard** (`.blk`): সাধারণ ডেভেলপমেন্ট ব্যবহার; ইমপোর্ট, প্রজেক্ট ডিসকভারি, নেটিভ কন্ট্রোল ফ্লো এবং লোকাল সার্ভার সাপোর্ট যোগ করে।
- **Plus** (`.blkp`): সম্পূর্ণ ফিচার সারফেস—কাস্টম রানটাইম ডেফিনিশন, ফরম্যাটিং, লিন্টিং, ডকুমেন্টেশন জেনারেশন এবং বর্ধিত ইন্টিগ্রেশন।
এক্সিকিউটেবল কমান্ড সংস্করণগুলির সাথে ম্যাপ করে: `block-lite`, `block` এবং `block-plus`।
### সমর্থিত ভাষা
Block PATH-এ পাওয়া হোস্ট রানটাইমগুলিতে ডেলিগেট করে। সাধারণ ট্যাগের মধ্যে আছে `<py>` Python-এর জন্য, `<js>` JavaScript/Node.js-এর জন্য, `<php>`, `<lua>`, `<ruby>`, `<ps>` PowerShell-এর জন্য, `<sql>` SQLite-এর জন্য, `<html>` এবং `<json>` টেমপ্লেটেড আউটপুটের জন্য, plus `<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`-এর মতো বিল্ট-ইন ফাংশন সমর্থন করে। এই কোরে ইচ্ছাকৃতভাবে ফাইল, নেটওয়ার্ক, প্রসেস বা প্যাকেজ 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` দিয়ে প্রজেক্ট initialized হয় এবং `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` alias চিনতে পারে।
### রিলিজ এবং বিল্ড
বর্তমান রিলিজ 2.7.5। Windows বিল্ড C# সোর্স থেকে .NET Framework কম্পাইলার ব্যবহার করে `build.ps1`-এর মাধ্যমে কম্পাইল হয়, যা `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.