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।