ایک 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 بلڈ پر تمام 816 آزمائشی سوٹ پاس ہوتے ہیں۔ 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
لوڈ نہیں ہوئیجب تک آپ لوڈ نہ دبائیں، کچھ ڈاؤن لوڈ نہیں ہوتا، اور پھر ایک ہی بار منگوایا جاتا ہے۔ ماڈیول 113 کلوبائٹ (KB) WebAssembly اور 10 KB لوڈر ہے — پوری لائبریری کا بلڈ 4.9 میگابائٹ ہے، اس لیے یہاں صرف وہی جوڑا گیا ہے جہاں تک یہ چار کالیں پہنچتی ہیں۔ پینل لائبریری کا ورژن اور وہ ویکٹر ISA دکھاتا ہے جو بلڈ بتاتا ہے۔
ms::detect_isa()، وہی کال جو یہ اصل بلڈ میں کرتی ہے۔ آپ کے ڈیسک ٹاپ پر اس کا جواب Advanced Vector Extensions (AVX2 یا AVX-512) میں سے کوئی ایک ہوتا ہے؛ یہاں ایک ہی ویکٹر ISA ہے، اور یہ وہی بتاتی ہے۔
tools/wasm/README.md.
پینتیس ساکن لائبریریاں، چھ میدان
گنجان اور کم گنجان لکیری الجبرا، خصوصی تفاعل، شماریات اور مشین لرننگ (ML)۔ عام تفرقی مساوات (ODE) اور جزوی تفرقی مساوات (PDE)، متناہی عنصری طریقہ (FEM) اور حسابی سیالی حرکیات (CFD)۔ بہتری، سگنل اور تصویر کی پروسیسنگ، نظریۂ اعداد، گراف، ہندسہ، ٹوپولوجی، کوانٹم بنیادی اجزا، کنٹرول، مالیات، کمپریشن — اور ایک علامتی CAS۔ اور LU، QR، SVD، eigensolver اور Cholesky کوڈ درخت ہی میں لکھے ہوئے۔
بنیادی نظام
گنجان اور کم گنجان لکیری الجبرا، ساتھ اپنے ہی LU، QR، SVD، eigensolver اور Cholesky۔ Result<T> سے غلطی سنبھالنا، ہر جگہ۔
ODE، PDE، FEM، CFD
وقتی تکامل، محدود عناصر اور حسابی سیال حرکیات، ساتھ خصوصی توابع اور تربیع۔
شماریات اور ML
تقسیمات، استنباط، ریگریشن اور ان کے نیچے کی بہتری کی مشینری۔
اشارہ، تصویر، کنٹرول، مالیات
ٹرانسفارم، فلٹرنگ، تصویر کی پروسیسنگ، نظریۂ کنٹرول اور مقداری مالیات کی بنیادی اکائیاں۔
کمپیوٹر الجبرا
ایک چھوٹا علامتی CAS، جو عددیات کے اوپر چپکایا ہوا نہیں بلکہ ان کے ساتھ ساتھ بیٹھا ہے۔
گراف، ہندسہ، ٹوپولوجی، کوانٹم
نظریۂ اعداد، گراف الگورتھم، حسابی ہندسہ، ٹوپولوجی اور کوانٹم بنیادی اکائیاں۔
تین قابلِ عمل فائلیں، باقی سب اختیاری
تین قابلِ عمل فائلوں کے بعد ہر چیز بلڈ کا اختیار ہے — ایک Qt GUI، CUDA، MPI، اور LLVM کی ORC تہہ پر بنا ایک JIT کمپائلر۔
816 سوٹ آپ کو کیا دیتے ہیں
نیچے کے پھاٹکوں کے پیچھے CI میٹرکس دو کمپائلر کا احاطہ کرتی ہے: Windows پر MSVC اور Linux پر GCC 13۔
| پھاٹک | ترتیب |
|---|---|
| CTest سوٹ | 816، 100% کامیاب |
| پلیٹ فارم | Windows MSVC Release |
| CI میٹرکس | MSVC + Linux GCC 13 |
| کوریج کا پھاٹک | 90% |
| سینیٹائزر | چالو |
| فزنگ | چالو |
| پیمائشی تنزلی | 28، 10% گنجائش |
پروگرامروں کے لیے ریاضی کی مکمل کٹ، ایک ہی ٹکڑے میں
سنجیدہ حساب کے کام کا مطلب عموماً یہ ہوتا ہے کہ ایک درجن الگ الگ سافٹ ویئر آپس میں جوڑ کر امید کی جائے کہ وہ ایک دوسرے سے متفق رہیں گے۔ یہ ایک ہی لائبریری ہے جو پورا میدان سنبھالتی ہے۔
وہ ٹیمیں جنہیں کچھ ڈاؤن لوڈ کرنے کی اجازت نہیں
دفاع، طب، فضائیات اور بینکاری کے بلڈ سسٹم اکثر انٹرنیٹ سے کٹے ہوتے ہیں۔ یہاں سب کچھ شامل ہے، اس لیے نہ کچھ لانا ہے اور نہ کچھ منظور کرانا ہے۔
وہ ٹیمیں جو مصنوعے پر 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.