প্রকল্প সম্পর্কে

PB-Compiler (`pbc`) হলো PowerBASIC-পরিবারের কম্পাইলারগুলোর একটি clean-room পুনর্বাস্তবায়ন, যা আধুনিক C#-এ লেখা। এর মূল লক্ষ্য হলো DOS যুগের পুরনো BASIC সোর্স কোড আধুনিক 64-bit হার্ডওয়্যারে প্রকৃত, চালনাযোগ্য 16-bit MS-DOS `.EXE` বাইনারিতে কম্পাইল করা। প্রকল্পটি ঐতিহাসিক ডায়ালেক্টের প্রতি কঠোর বিশ্বস্ততার উপর জোর দেয়, যাতে প্রোগ্রামগুলো মূল মালিকানাধীন কম্পাইলারগুলোর উৎপাদিত প্রোগ্রামের মতোই আচরণ করে, এমনকি নথিভুক্ত বাগসহ। মূল সক্ষমতাগুলোর মধ্যে রয়েছে: **ডায়ালেক্ট সমর্থন**: কম্পাইলারটি `--dialect` ফ্ল্যাগের মাধ্যমে বিস্তৃত ডায়ালেক্ট সমর্থন করে, যার মধ্যে Borland ধারা (Turbo Basic, PowerBASIC 2.0-3.5) এবং Microsoft ধারা (BASICA, GW-BASIC, QuickBASIC 1.0-4.5, QBasic, BASIC PDS) অন্তর্ভুক্ত। প্রতিটি ডায়ালেক্ট নতুন বৈশিষ্ট্য নিয়ন্ত্রণ করে এবং সংস্করণ-নির্দিষ্ট আচরণ সক্রিয় করে। **Fidelity Contract**: ঐতিহাসিক ডায়ালেক্টের জন্য, oracle-চালিত differential harness ব্যবহার করে মূল বাইনারিগুলোর বিপরীতে আউটপুট যাচাই করা হয়। এটি নিশ্চিত করে যে উৎপন্ন কোড byte-identical প্রোগ্রাম আউটপুট দেয়, ফলে পুরনো সফটওয়্যার ইকোসিস্টেমের সাথে সামঞ্জস্য বজায় থাকে। **Optimization Pipeline**: `--optimize` ফ্ল্যাগের মাধ্যমে সব ডায়ালেক্টে একটি উন্নত SSA-ভিত্তিক optimization backend উপলব্ধ। এই pipeline-এ constant folding, dead-code elimination, common-subexpression elimination, strength reduction ইত্যাদি রয়েছে। এটি পর্যবেক্ষণযোগ্য আচরণ পরিবর্তন না করেই বাইনারি আকার উল্লেখযোগ্যভাবে কমাতে পারে (যেমন, একটি Hello World প্রোগ্রাম 25 বাইটে সংকুচিত করা)। **PowerBASIC 3.6 Superset**: একটি ভবিষ্যৎমুখী ডায়ালেক্ট (`pb36`) আধুনিক ভাষা বৈশিষ্ট্য যোগ করে, যেমন expression-bodied functions, tuples, overloading, default parameters, lambdas/closures, generics, coroutines (`YIELD`), এবং structured exception handling (`TRY/CATCH`)। এগুলো opt-in এবং বিদ্যমান PB 3.5 কোডকে প্রভাবিত করে না। **Output Formats**: স্ট্যান্ডার্ড DOS MZ `.EXE` ফাইল, compiled units (`.PBU`), এবং unit libraries (`.PBL`) তৈরি করে। এটি আরও প্রক্রিয়াকরণের জন্য portable C99 বা LLVM IR emit করাও সমর্থন করে। **Installation & Usage**: .NET ব্যবহার করে নির্মিত, এটি .NET 6+ সমর্থনকারী যেকোনো OS-এ চলে। ব্যবহারকারীরা repository clone করেন, `dotnet` দিয়ে build করেন, এবং `pbc` CLI টুল ব্যবহার করে BASIC সোর্স কম্পাইল করেন। ফলাফল DOSBox-এ বা প্রকৃত DOS হার্ডওয়্যারে পরীক্ষা করা যায়।