LEVEL 5
প্রোগ্রামিং ল্যাঙ্গুয়েজ
Programming Languages
এই মডিউল যে প্রশ্নের উত্তর দেয়Python আর Rust — দুটোই "programming language", কিন্তু নিচে পার্থক্যটা ঠিক কোথায়?
ভাষা শেখা আর ভাষা বোঝা এক জিনিস না। এই module শেখায় type system কী গ্যারান্টি দেয়, memory কে manage করে, garbage collector কীভাবে কাজ করে, আর একটা runtime আসলে কী।
লেসন
- 01Syntax বনাম Semantics — লেখা, অর্থ, আর ভুল হওয়ার তিনটা সময়Syntax হলো অক্ষর-আর-টোকেনের গঠন, semantics হলো সেই গঠনের অর্থ — আর প্রোগ্রাম ভুল হতে পারে তিনটা আলাদা মুহূর্তে, তিন রকমভাবে, আর প্রতিটা মুহূর্ত ধরার দায়িত্ব ভাষার ভিন্ন ভিন্ন যন্ত্রাংশের।
- 02Formal Semantics — ভাষার অর্থ গণিতে লেখাভাষার অর্থ prose-এ না লিখে গণিতে লেখার তিনটা ঐতিহ্য — operational (চলার ধাপগুলো), denotational (গাণিতিক function), axiomatic (assertion-এর চুক্তি) — আর language specification-গুলো বাস্তবে কোথায় কতটা এদের কাছে যায়।
- 03Type System — static, dynamic, strong, weak আসলে কী গ্যারান্টি দেয়টাইপ মানে values-এর set আর legal operations; static/dynamic ঠিক করে কখন check হয়, strong/weak ঠিক করে ভাঙলে কী হয় — আর dynamic typing আসলে প্রতিটা value-তে গায়ে-লাগানো tag-এর physical implementation।
- 04Hindley-Milner Type Inference — annotation ছাড়াই টাইপ বের করাUnification আর Algorithm W — কীভাবে ML-family ভাষাগুলো annotation ছাড়াই সম্পূর্ণ টাইপ বের করে, let-polymorphism কী দেয় যা lambda-parameter দেয় না, আর কেন Java/C# একই জায়গায় দশক-জুড়ে আটকে ছিল।
- 05Polymorphism — একটা interface, কয়টা implementation, আর খরচ কতএকই নামের অপারেশন অনেক টাইপে চলার তিনটা আলাদা প্রকৌশল — compile-time-এ কোড কপি করা, compile-time-এ বাছাই করা, runtime-এ table ঘেঁটে কল করা — আর প্রতিটার performance-বিলের হিসাব।
- 06Memory Model — manual, RAII, ownership, GC: কে manage করে আর দাম কতMemory ফেরত দেওয়ার সিদ্ধান্তটা চার জায়গায় হতে পারে — programmer-এর হাতে, destructor-এর সময়ে, compiler-এর proof-এ, বা collector-এর অপেক্ষায়; এই লেসনে চারটা model-এর guarantee আর দাম মেপে দেখি।
- 07Tracing Garbage Collection — mark-sweep থেকে generational পর্যন্তCollector dead object খোঁজে না — reachable object-দের জরিপ করে বাকি সবকে মুছে দেয়; এই লেসনে mark-sweep, copying, generational তিন generation-এর evolution আর প্রতিটার দাম দেখি।
- 08Reference Counting — গোনা রাখা, cycle-এর ফাঁদ, আর weak referenceপ্রতিটা assignment-এ গুনে রাখা — deterministic আর simple, কিন্তু cycle তাকে চিরতরে ফাঁসে ফেলে; এই লেসনে RC-র গণিত, ফাঁদ, আর weak reference-এর মুক্তিপথ।
- 09Runtime System — main() এর আগে আর পরে কী চলেmain() লেখেন আপনি, কিন্তু main-এর আগে execve থেকে _start হয়ে __libc_start_main পর্যন্ত একটা পুরো runtime দৌড়ে মঞ্চ সাজায় — সেই অদৃশ্য স্তরটাই আজকের বিষয়।
- 10Closure — ফাংশন যখন environment সাথে নিয়ে হাঁটেফাংশন + তার জন্ম-environment-এর আঠালো জোড়াই closure — substitution model-এর ফাঁক গজানো জায়গাটাই এই concept-এর জন্মস্থান, আর loop-bug থেকে React hooks পর্যন্ত হাজার production story-র মূল।
- 11Evaluation Strategy — strict না lazy: expression কখন মূল্যায়িত হয়f(x, expensive())-এর দ্বিতীয় argument কখন গণনা হয় — ভাষা ভেদে উত্তর তিন রকম; strict/lazy-র এই চুক্তিটাই infinite data structure, space leak আর Python-এর mutable-default bug-এর মূল উৎস।
- 12Exception Internals — throw থেকে catch পর্যন্ত সিলিকনের রাস্তাtry/catch দেখতে if-এর মতো, কিন্তু throw চলে metadata-driven stack-walk-এ — happy path শূন্য instruction, throw-এ মাইক্রোসেকেন্ড; এই অসম খরচের রূপরেখাই C++/Rust/Go-র error strategy-র ভিত্তি।
- 13Concurrency Model — threads, async/await, actors, CSP: একই সমস্যার চার উত্তরশত কাজ একসাথে চালানোর একটাই সমস্যা, ভাষাগুলোর চারটা ভিন্ন উত্তর — প্রতিটা উত্তর আসলে 'কোথায় block করা যাবে, কে state দেখবে, ভুল হলে কে মরবে' প্রশ্নের একটা ভিন্ন সিদ্ধান্ত-সেট।
- 14FFI ও ABI — ভিন্ন ভাষারা একে অপরকে ডাকে যেভাবেদুই ভাষার function যেন একে অপরকে ডাকতে পারে — এই চুক্তির নাম ABI; চুক্তির একটা ধারাও ভাঙলে compiler চিৎকার করে না, ডেটা নীরবে নষ্ট হয়।
- 15Paradigm — imperative, functional, logic, OO: চিন্তার চার ফ্রেমParadigm মানে style না — কোন জিনিস ভাষায় বলা যায়, কী নিষিদ্ধ, আর সেই নিষেধের বিনিময়ে কোন প্রমাণ ফ্রি; একই সমস্যা চার ফ্রেমে সমাধান করলে পার্থক্যটা হাতেই টের পাওয়া যায়।
যা যা থাকছে
- Syntax vs semantics
- Operational, denotational, axiomatic semantics
- Type systems — static, dynamic, strong, weak
- Type inference (Hindley-Milner)
- Polymorphism — parametric, ad-hoc, subtype
- Memory models — manual, RAII, ownership, GC
- Garbage collection — mark-sweep, copying, generational, tri-color
- Reference counting ও cycles
- Runtime systems
- Closures ও environments
- Evaluation strategies — strict, lazy
- Exception handling internals
- Concurrency models — threads, async/await, actors, CSP
- FFI ও ABI
- Paradigms — imperative, functional, logic, OO
প্রজেক্ট
Tiny Lisp Interpreter
●●●○○Reader → eval → environment → closures।
Mark-Sweep GC
●●●●○নিজের heap ও collector, allocation pressure মাপা।
Type Checker
●●●●○Simply-typed lambda calculus-এর inference।