একটিই C++23 লাইব্রেরি, LU থেকে CFD
প্রকৌশল সফটওয়্যার চলে ভারী গণিতের উপর, আর নিজেরটা প্রায় কেউই লেখে না। সেটা জোড়া হয় অন্যের লাইব্রেরি আর টাকা দিয়ে কেনা প্ল্যাটফর্ম থেকে — নিরীক্ষা করা কঠিন, বদলানো কঠিন, আর যেখানে বিল্ড মেশিনে ইন্টারনেট নেই সেখানে বসানোও কঠিন। MathScript গণিতটা নিজেই করে, ম্যাট্রিক্সের হিসাব থেকে তরল গতিবিদ্যা পর্যন্ত, একটিমাত্র C++ লাইব্রেরিতে, বাইরে থেকে আনার কিছু নেই।
- ম্যাট্রিক্স কার্নেল নিজের কোডেই। মৌলিক রৈখিক বীজগণিত সাবপ্রোগ্রাম (BLAS) আর রৈখিক বীজগণিত প্যাকেজ (LAPACK) বাইরে থেকে আনা নয়, এখানেই লেখা: কোনো Eigen নেই, OpenBLAS নেই।
linalgনিজেই ধরে রাখে LU, QR, সিঙ্গুলার ভ্যালু ডিকম্পোজিশন (SVD), eig, Cholesky আর LAPACK-ধাঁচের কার্নেল, তাই স্থাপনা মানে নির্ভরতার পিছনে দৌড়ঝাঁপ নয়, স্রেফ একটা কম্পাইল। - C++-এর একটি সীমিত উপসেট। কোনো কাঁচা পয়েন্টার নয়, কোনো এক্সেপশন নয়, কোনো অনিরাপদ কাস্ট নয় — কম্পাইলের সময়েই তা বাধ্যতামূলক। উৎপাদন কোড ফেরত দেয়
Result<T>, তাই ত্রুটি সামলানো নির্ধারণবাদী আর টাইপেই দৃশ্যমান।
এটি কী, এক মিনিটে
পীড়ন, প্রবাহ, সংকেত, ঝুঁকি — প্রকৌশল সফটওয়্যারের নিচের হিসাবগুলি যে দল সেটি পাঠায় তারা খুব কমই লেখে। সেগুলি আসে বাইরের ডজনখানেক লাইব্রেরি আর টাকার প্ল্যাটফর্ম থেকে, যা আনতে হয়, লাইসেন্স করতে হয়, বিশ্বাস করতে হয়। উত্তর ভুল ঠেকলে হিসাবের কাজটা পড়ে থাকে অন্য কারও কোডে; আর সিল করা বিল্ড মেশিনে হয়তো সেগুলি আনাই যাবে না।
MathScript একটিমাত্র C++ লাইব্রেরি, যা গণিতটা নিজেই করে: রৈখিক বীজগণিত, পরিসংখ্যান, অন্তরকলনীয় সমীকরণ, সসীম উপাদান, তরল প্রবাহ, অপ্টিমাইজেশন আর একটি প্রতীকী বীজগণিত ব্যবস্থা — পঁয়ত্রিশটি স্ট্যাটিক লাইব্রেরি জুড়ে। বেশিরভাগ প্রকল্প যে ম্যাট্রিক্স রুটিনগুলি BLAS আর LAPACK থেকে আনে, সেগুলি এখানে নিজেই লেখা। Windows বিল্ডে ৮১৬টি পরীক্ষার স্যুটই উত্তীর্ণ। v1.0.0 এখনও বেরোয়নি।
যেসব দলের বিল্ড মেশিন ইন্টারনেটে পৌঁছাতে পারে না — প্রতিরক্ষা, চিকিৎসা, মহাকাশ, ব্যাংকিং — যেখানে বাইরে থেকে আনা প্রতিটি নির্ভরতা মানে আরও একটি অনুমোদন। যেসব পণ্য আসল কাজটা করে C++-এ আর গণিতটা Python-এ, আর তার জন্য দুই রকম সমস্যা বয়ে বেড়ায়। শিক্ষক ও শিক্ষার্থী, যাঁরা পদ্ধতিটা এমন জায়গায় লেখা দেখতে চান যেখানে তা পড়া যায়।
একটি প্রতীকী কম্পিউটার বীজগণিত ব্যবস্থা (CAS), চলছে আপনার ব্রাউজারেই
একটি রাশি লিখুন। সেটিকে টোকেনে ভাঙা হয়, একটি অ্যাবস্ট্রাক্ট সিনট্যাক্স ট্রি-তে (AST) পার্স করা হয়, প্রতীকীভাবে অন্তরকলন করা হয়, সরল করা হয়, তারপর লেখচিত্রের জন্য সাংখ্যিকভাবে মান বসানো হয় — সঙ্গে দৃশ্যমান পরিসরে একটি Simpson-নিয়মের সমাকল আর দ্বিভাজন পদ্ধতিতে মূল খোঁজা।
mathscript-repl
প্রতীকী অন্তরজ
Result<T>
সমর্থিত: + - * / ^, sin cos tan exp log sqrt abs sinh cosh tanh
asin acos atan, ধ্রুবক pi ও e। আসল CAS অনেক বড়; এটি সেই একই ভাবনা, পড়ার মতো মাপে।
symbolic লাইব্রেরিতে।
আসল C++ লাইব্রেরিটাই, WebAssembly-তে কম্পাইল করা
উপরের সবটাই এই পাতার জন্য লেখা JavaScript — সৎ, কিন্তু আসল জিনিসের একটা মডেল। নিচে আসল জিনিসটাই: libms_symbolic নিজেই, নেটিভ লাইব্রেরি যে সোর্স থেকে বিল্ড হয় সেই একই সোর্স থেকে কম্পাইল করা, চলছে আপনার ব্রাউজারে।
ms::sym_diff — WebAssembly
লোড হয়নিলোড চাপার আগে কিছুই ডাউনলোড হয় না, আর তারপর একবারই আনা হয়। মডিউলটি ১১৩ কিলোবাইট (KB) WebAssembly আর ১০ KB লোডার — পুরো লাইব্রেরি বিল্ড ৪.৯ মেগাবাইট (MB), তাই এখানে কেবল এই চারটি কলের নাগালের অংশটুকুই লিংক করা হয়েছে। প্যানেলে দেখা যায় লাইব্রেরির সংস্করণ আর বিল্ড যে ভেক্টর ইনস্ট্রাকশন সেট আর্কিটেকচারের (ISA) কথা জানায় তা।
ms::detect_isa(), নেটিভভাবেও সে এই একই কল করে। আপনার ডেস্কটপে তার উত্তরে আসে অ্যাডভান্সড ভেক্টর এক্সটেনশনের (AVX2 বা AVX-512) কোনো একটি; এখানে একটিমাত্র ভেক্টর ISA আছে, আর সে সেটাই বলে।
tools/wasm/README.md.
পঁয়ত্রিশটি স্ট্যাটিক লাইব্রেরি, ছয়টি ক্ষেত্র
ঘন ও বিরল রৈখিক বীজগণিত, বিশেষ ফাংশন, পরিসংখ্যান আর মেশিন লার্নিং (ML)। সাধারণ অন্তরকলনীয় সমীকরণ (ODE) ও আংশিক অন্তরকলনীয় সমীকরণ (PDE), সসীম উপাদান পদ্ধতি (FEM) আর গণনামূলক তরল গতিবিদ্যা (CFD)। অপ্টিমাইজেশন, সংকেত ও ছবি প্রক্রিয়াকরণ, সংখ্যাতত্ত্ব, গ্রাফ, জ্যামিতি, টপোলজি, কোয়ান্টাম আদি-উপাদান, নিয়ন্ত্রণ, অর্থব্যবস্থা, সংকোচন — আর একটি প্রতীকী CAS। সঙ্গে নিজস্ব কোডে লেখা LU, QR, SVD, আইগেন-সমাধায়ক ও Cholesky।
কোর সিস্টেম
ঘন ও বিরল রৈখিক বীজগণিত, সঙ্গে নিজস্ব LU, QR, SVD, আইগেন-সমাধায়ক ও Cholesky। Result<T> দিয়ে সর্বত্র ত্রুটি সামলানো।
ODE, PDE, FEM, CFD
সময়-সমাকলন, সসীম উপাদান ও গণনামূলক তরল গতিবিদ্যা, সঙ্গে বিশেষ ফাংশন ও কোয়াড্রেচার।
পরিসংখ্যান ও ML
বণ্টন, অনুমান, রিগ্রেশন আর তাদের নিচের অপ্টিমাইজেশনের যন্ত্রপাতি।
সংকেত, চিত্র, নিয়ন্ত্রণ, অর্থব্যবস্থা
রূপান্তর, ফিল্টারিং, চিত্র প্রক্রিয়াকরণ, নিয়ন্ত্রণ তত্ত্ব আর পরিমাণগত অর্থব্যবস্থার প্রিমিটিভ।
কম্পিউটার বীজগণিত
সংখ্যার কাজের পাশে বসা একটি ছোট প্রতীকী CAS, তার উপরে জুড়ে দেওয়া নয়।
গ্রাফ, জ্যামিতি, টপোলজি, কোয়ান্টাম
সংখ্যাতত্ত্ব, গ্রাফ অ্যালগরিদম, গণনামূলক জ্যামিতি, টপোলজি ও কোয়ান্টাম প্রিমিটিভ।
তিনটি এক্সিকিউটেবল, বাকি সব ঐচ্ছিক
তিনটি এক্সিকিউটেবলের পরে সবকিছুই বিল্ডের একটি বিকল্প — একটি Qt গ্রাফিকাল ইউজার ইন্টারফেস (GUI), CUDA, মেসেজ পাসিং ইন্টারফেস (MPI), আর LLVM-এর অন-রিকোয়েস্ট কম্পাইলেশন (ORC) স্তরের উপরে গড়া একটি জাস্ট-ইন-টাইম (JIT) কম্পাইলার।
৮১৬টি স্যুটে আপনি কী পান
নিচের গেটগুলির পিছনের কন্টিনিউয়াস ইন্টিগ্রেশন (CI) ম্যাট্রিক্স দুটি কম্পাইলার ঢাকে: Windows-এ Microsoft Visual C++ (MSVC) আর Linux-এ GNU কম্পাইলার কালেকশন (GCC) 13।
| গেট | সেটিং |
|---|---|
| CTest স্যুট | ৮১৬, ১০০% উত্তীর্ণ |
| প্ল্যাটফর্ম | Windows MSVC Release |
| CI ম্যাট্রিক্স | MSVC + Linux GCC 13 |
| কভারেজ গেট | 90% |
| স্যানিটাইজার | চালু |
| ফাজিং | চালু |
| বেঞ্চমার্ক রিগ্রেশন | ২৮, ১০% সহনসীমা |
প্রোগ্রামারদের জন্য একটাই টুকরোয় সম্পূর্ণ গণিতের সরঞ্জাম
গুরুতর হিসাবের কাজ মানে সাধারণত এক ডজন আলাদা সফটওয়্যার জুড়ে দেওয়া আর আশা করা যে তারা একমত হবে। এটি একটাই লাইব্রেরি, যা পুরোটাই ঢাকে।
যে দলগুলির কিছু ডাউনলোড করার অনুমতি নেই
প্রতিরক্ষা, চিকিৎসা, মহাকাশ আর ব্যাংকিংয়ের বিল্ড সিস্টেম প্রায়ই ইন্টারনেট থেকে আলাদা করা থাকে। এখানে সবই ভিতরে দেওয়া, তাই আনার কিছু নেই আর অনুমোদন করানোরও কিছু নেই।
পণ্যের গায়ে Python জুড়তে জুড়তে ক্লান্ত দল
অনেক সফটওয়্যার তার আসল কাজটা করে এক ভাষায় আর গণিতটা আরেক ভাষায়, যার মানে দুই রকম সমস্যা। এটি গণিতকে পণ্যের সঙ্গে একই ভাষায় রাখে।
পড়ানো ও শেখা
পদ্ধতিগুলি পুরোপুরি লিখে রাখা আছে এবং পড়া যায়, কোনো সরবরাহকারীর সিল করা উপাদানের ভিতরে লুকোনো নেই। ছাত্ররা সত্যিই কী ঘটছে তা অনুসরণ করতে পারে।
এমন একটি সাংখ্যিক লাইব্রেরি, যা আপনার দিকে থ্রো করতে পারে না
সাংখ্যিক কোড সাধারণ কারণেই ব্যর্থ হয়: একটি সিঙ্গুলার ম্যাট্রিক্স, অভিসারী না হওয়া একটি পুনরাবৃত্তি, একটি বিশেষ ফাংশনে ডোমেনের ভুল। এক্সেপশন দিয়ে সেটা জানানোর মানে, প্রতিটি কলকারীকে হয় সবকিছু মুড়ে রাখতে হবে try ব্লকে, নয়তো কোনো প্রেক্ষাপট ছাড়াই স্ট্যাকের মাথায় গিয়ে ব্যর্থতাটা আবিষ্কার করতে হবে। MathScript ব্যর্থতাটাকে রিটার্ন টাইপেরই অংশ করে দেয়।
// Every production entry point returns Result<T>. auto lu = linalg::lu_factor(A); if (!lu) return lu.error(); // singular — handled, not thrown auto x = lu->solve(b); if (!x) return x.error(); // No raw pointers, no unsafe casts, no exceptions: // the restricted subset is enforced at compile time.