Bnlang ভেতরে কিভাবে কাজ করে
Bnlang একটি নেটিভ প্রোগ্রামিং ভাষা। পুরো রানটাইম আধুনিক C++ — লেক্সার, পার্সার, ট্রি-ওয়াকিং ইন্টারপ্রেটার, ভ্যালু মডেল ও প্রতিটি বিল্ট-ইন মডিউল।
কোনো ভার্চুয়াল মেশিন নেই, কোনো ট্রান্সপাইলেশন স্টেপ নেই, কোনো জাভাস্ক্রিপ্ট ইঞ্জিনের উপর নির্ভরতাও নেই।
এই পেজে দেখানো হলো bnl your_script.bnl চালালে ভেতরে কী ঘটে।
Execution Pipeline
১. লেক্সার — সোর্সের বাইট পড়ে টোকেন স্ট্রিম বানায়। বাংলা ও ইংরেজি কীওয়ার্ড (যেমন if / যদি, function / ফাংশন) একই TokenType-এ ম্যাপ হয়, ফলে পার্সার একটি একক ভাষা দেখে।
২. পার্সার — টোকেন থেকে AST (Abstract Syntax Tree) বানায়। পিউর রিকার্সিভ-ডিসেন্ট; কোনো পার্সার-জেনারেটর নেই।
৩. ইন্টারপ্রেটার — AST সরাসরি ওয়াক করে ভ্যালু তৈরি করে। কোনো বাইটকোড এমিশন বা JIT নেই।
৪. ইভেন্ট লুপ — libuv অ্যাসিঙ্ক I/O (ফাইল অপ, সকেট, টাইমার, চাইল্ড প্রসেস) চালায়, মূল থ্রেড ব্লক না করে।
৫. স্ট্যান্ডার্ড লাইব্রেরি — বিল্ট-ইন মডিউল (io, web, request, template, sqlite, pg, mongo, crypto, ...) C++ এ লেখা, এবং স্টার্টআপে ইন্টারপ্রেটারের সাথে নিজেদের ফাংশন রেজিস্টার করে।
Example: One Program, Two Languages
নিচের দু'টি স্নিপেট একই AST-এ পার্স হয় এবং একই ভাবে চলে। শুধুমাত্র লেক্সারের কীওয়ার্ড টেবিল পার্থক্যটা জানে।
var x = 10;
if (x > 5) {
print("Large");
} else {
print("Small");
}
Runtime Stack
ভেতরে Bnlang কিছু পরিচিত C/C++ লাইব্রেরির উপর দাঁড়ানো:
- C++20 — ইন্টারপ্রেটার, ভ্যালু মডেল ও বিল্ট-ইন মডিউল।
- libuv — ক্রস-প্ল্যাটফর্ম ইভেন্ট লুপ ও অ্যাসিঙ্ক I/O প্রিমিটিভ।
- OpenSSL — HTTPS / WebSocket-over-TLS এর জন্য TLS, এবং হ্যাশিং, HMAC, base64/hex কোডেক।
- llhttp — দ্রুত HTTP/1.1 পার্সার, বিল্ট-ইন ওয়েব সার্ভার ও ক্লায়েন্ট ব্যবহার করে।
- SQLite / libpq / mongo-c-driver — এমবেডেড SQLite এবং PostgreSQL, MongoDB এর জন্য প্রথম-শ্রেণির ক্লায়েন্ট।
- zlib — HTTP কম্প্রেশন ও সাধারণ ডেটা প্রসেসিং এর জন্য gzip/deflate।