MathScript · v1.0.0 پیش ریلیز

ایک C++23 لائبریری، LU سے CFD تک

انجینئرنگ کا سافٹ ویئر بھاری ریاضی پر چلتا ہے، اور تقریباً کوئی اپنی ریاضی خود نہیں لکھتا۔ وہ دوسروں کی لائبریریوں اور قیمتی پلیٹ فارموں سے جوڑ کر بنائی جاتی ہے — جس کا آڈٹ مشکل، جسے بدلنا مشکل، اور جسے وہاں نصب کرنا مشکل جہاں بلڈ مشین انٹرنیٹ سے نہیں جڑی۔ MathScript ریاضی خود کرتا ہے، میٹرکس کے حساب سے لے کر سیالی حرکیات تک، ایک ہی C++ لائبریری میں، جہاں کچھ منگوانا نہیں پڑتا۔

زبانC++23
ٹیسٹ سوٹ816 CTest
کوریج کا پھاٹک90%
ساکن لائبریریاں35
آخری پُشحال ہی میں
دو فیصلے جو سب کچھ طے کرتے ہیں
  • میٹرکس کرنل کوڈ درخت ہی میں۔ بنیادی لکیری الجبرا ذیلی پروگرام (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

f(x) =
f(x) f′(x)، علامتی f کی جڑیں

علامتی تفرق


          
دائرے پر ∫
—
ملی ہوئی جڑیں
—
AST نوڈ
—
تجزیہ
—

Result<T>

ٹھیک
بغیر غلطی کے تجزیہ اور تفرق ہو گیا۔

معاونت: + - * / ^, sin cos tan exp log sqrt abs sinh cosh tanh asin acos atan، مستقل قدریں pi اور e۔ اصل CAS کہیں بڑا ہے؛ یہ وہی خیال ہے، پڑھنے کے پیمانے پر۔

ایک ٹوکنائزر، بازگشتی نزول والا پارسر، علامتی تفرق کار اور سادہ کار، جو اسی صفحے کے لیے لکھے گئے۔ C++ نفاذ symbolic لائبریری میں ہے۔
دوبارہ لکھا ہوا نہیں

اصل C++ لائبریری، WebAssembly میں کمپائل کی ہوئی

اوپر کی ہر چیز اسی صفحے کے لیے لکھا ہوا JavaScript ہے — ایمان دار، مگر اصل چیز کا ایک نمونہ۔ نیچے اصل چیز ہے: libms_symbolic بذاتِ خود، اسی سورس سے کمپائل کیا ہوا جس سے اصل لائبریری بنتی ہے، آپ کے براؤزر میں چلتا ہوا۔

ms::sym_diff — WebAssembly

لوڈ نہیں ہوئی

جب تک آپ لوڈ نہ دبائیں، کچھ ڈاؤن لوڈ نہیں ہوتا، اور پھر ایک ہی بار منگوایا جاتا ہے۔ ماڈیول 113 کلوبائٹ (KB) WebAssembly اور 10 KB لوڈر ہے — پوری لائبریری کا بلڈ 4.9 میگابائٹ ہے، اس لیے یہاں صرف وہی جوڑا گیا ہے جہاں تک یہ چار کالیں پہنچتی ہیں۔ پینل لائبریری کا ورژن اور وہ ویکٹر ISA دکھاتا ہے جو بلڈ بتاتا ہے۔

سادہ کیا ہوا
—
تفرق
—
تکامل
—
لائبریری
—
ویکٹر ISA
—
ISA کی سطر وہ جگہ ہے جہاں لائبریری اپنے بارے میں سچ بول رہی ہے۔ یہ پوچھتی ہے ms::detect_isa()، وہی کال جو یہ اصل بلڈ میں کرتی ہے۔ آپ کے ڈیسک ٹاپ پر اس کا جواب Advanced Vector Extensions (AVX2 یا AVX-512) میں سے کوئی ایک ہوتا ہے؛ یہاں ایک ہی ویکٹر ISA ہے، اور یہ وہی بتاتی ہے۔
MathScript کے کوڈ درخت سے Emscripten کے ساتھ بنایا گیا۔ یہاں تک پہنچنے کے لیے تین قابلِ منتقلی نقص درست کرنے پڑے، اور تینوں Apple clang اور ARM پر اصل بلڈ کو بھی متاثر کرتے ہیں — دیکھیں tools/wasm/README.md.
دائرہ کار

پینتیس ساکن لائبریریاں، چھ میدان

گنجان اور کم گنجان لکیری الجبرا، خصوصی تفاعل، شماریات اور مشین لرننگ (ML)۔ عام تفرقی مساوات (ODE) اور جزوی تفرقی مساوات (PDE)، متناہی عنصری طریقہ (FEM) اور حسابی سیالی حرکیات (CFD)۔ بہتری، سگنل اور تصویر کی پروسیسنگ، نظریۂ اعداد، گراف، ہندسہ، ٹوپولوجی، کوانٹم بنیادی اجزا، کنٹرول، مالیات، کمپریشن — اور ایک علامتی CAS۔ اور LU، QR، SVD، eigensolver اور Cholesky کوڈ درخت ہی میں لکھے ہوئے۔

لائبریری کے چھ میدان — بنیادی نظام، عددی، شماریات اور مشین لرننگ، اطلاقی، علامتی اور خصوصی — سب ایک Result<T> کی بنیادی پٹڑی پر، بغیر کسی استثنا یا خام پوائنٹر کے
پورا خاکہ دیکھنے کے لیے اسکرول کریں →
پینتیس لائبریریاں، غلطی کا ایک ہی طریقہ۔ نیچے کی پٹڑی ہی اصل نکتہ ہے: ناکامی واپسی کی قسم میں ہوتی ہے، کسی ایسے استثنا میں نہیں جو آپ کو اسٹیک کے سرے پر ملے۔
بنیاد

بنیادی نظام

گنجان اور کم گنجان لکیری الجبرا، ساتھ اپنے ہی LU، QR، SVD، eigensolver اور Cholesky۔ Result<T> سے غلطی سنبھالنا، ہر جگہ۔

عددی

ODE، PDE، FEM، CFD

وقتی تکامل، محدود عناصر اور حسابی سیال حرکیات، ساتھ خصوصی توابع اور تربیع۔

شماریات

شماریات اور ML

تقسیمات، استنباط، ریگریشن اور ان کے نیچے کی بہتری کی مشینری۔

اطلاقی

اشارہ، تصویر، کنٹرول، مالیات

ٹرانسفارم، فلٹرنگ، تصویر کی پروسیسنگ، نظریۂ کنٹرول اور مقداری مالیات کی بنیادی اکائیاں۔

علامتی

کمپیوٹر الجبرا

ایک چھوٹا علامتی CAS، جو عددیات کے اوپر چپکایا ہوا نہیں بلکہ ان کے ساتھ ساتھ بیٹھا ہے۔

خصوصی

گراف، ہندسہ، ٹوپولوجی، کوانٹم

نظریۂ اعداد، گراف الگورتھم، حسابی ہندسہ، ٹوپولوجی اور کوانٹم بنیادی اکائیاں۔

بھیجنے کی سطح

تین قابلِ عمل فائلیں، باقی سب اختیاری

تین قابلِ عمل فائلوں کے بعد ہر چیز بلڈ کا اختیار ہے — ایک Qt GUI، CUDA، MPI، اور LLVM کی ORC تہہ پر بنا ایک JIT کمپائلر۔

mathscriptcکمپائلر / بیچ ڈرائیور
mathscript-replتعامل پذیر نشست
mathscript-serverسروس طرز
اختیاری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% گنجائش
پیش ریلیز کا مطلب پیش ریلیز ہی ہے۔ v1.0.0 ابھی بھیجی نہیں گئی۔ 816 سوٹ کا عدد Windows MSVC Release سے ہے؛ Linux GCC 13 والی ٹانگ CI میں چلتی ہے، مگر سرخی کا عدد وہی ہے جو Windows پر ناپا گیا۔
یہ کس کے لیے ہے

پروگرامروں کے لیے ریاضی کی مکمل کٹ، ایک ہی ٹکڑے میں

سنجیدہ حساب کے کام کا مطلب عموماً یہ ہوتا ہے کہ ایک درجن الگ الگ سافٹ ویئر آپس میں جوڑ کر امید کی جائے کہ وہ ایک دوسرے سے متفق رہیں گے۔ یہ ایک ہی لائبریری ہے جو پورا میدان سنبھالتی ہے۔

01

وہ ٹیمیں جنہیں کچھ ڈاؤن لوڈ کرنے کی اجازت نہیں

دفاع، طب، فضائیات اور بینکاری کے بلڈ سسٹم اکثر انٹرنیٹ سے کٹے ہوتے ہیں۔ یہاں سب کچھ شامل ہے، اس لیے نہ کچھ لانا ہے اور نہ کچھ منظور کرانا ہے۔

02

وہ ٹیمیں جو مصنوعے پر Python چپکاتے تنگ آ چکی ہیں

بہت سا سافٹ ویئر اپنا اصل کام ایک زبان میں کرتا ہے اور اپنی ریاضی دوسری میں، یعنی مسئلوں کے دو مجموعے۔ یہ ریاضی کو مصنوعے ہی کی زبان میں رکھتا ہے۔

03

پڑھانا اور سیکھنا

طریقے پورے کے پورے لکھے ہوئے ہیں اور پڑھے جا سکتے ہیں، کسی فراہم کنندہ کے بند پرزے میں چھپے ہوئے نہیں۔ طلبہ دیکھ سکتے ہیں کہ اصل میں ہو کیا رہا ہے۔

کیا آپ کو یہاں اپنی صورتِ حال نظر آتی ہے؟ یہ ابھی بیٹا ٹیسٹنگ کے لیے کھلا ہے، اور جن لوگوں کے لیے یہ بنا ہے، انہی کی رائے اسے واقعی بدلتی ہے۔ بیٹا ٹیسٹر بنیں →
استثنا کیوں نہیں

ایک عددی لائبریری جو آپ پر کچھ پھینک نہیں سکتی

عددی کوڈ عام طریقوں سے ناکام ہوتا ہے: ایک مفرد میٹرکس، ایک ایسا اعادہ جو تقارب نہ کرے، کسی خصوصی تابع میں دائرے کی غلطی۔ اسے استثنا سے بتانے کا مطلب ہے کہ ہر بلانے والا یا تو سب کچھ لپیٹ دے 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.