مكتبة C++23 واحدة، من LU إلى CFD
برمجيات الهندسة تقوم على رياضيات ثقيلة، ولا يكاد أحد يكتب رياضياته بنفسه. بل تُرقَّع من مكتبات الآخرين ومنصّات مدفوعة — يصعب تدقيقها، ويصعب تغييرها، ويصعب تثبيتها حيث لا إنترنت على آلة البناء. يؤدّي MathScript الرياضيات بنفسه، من حساب المصفوفات إلى ديناميكا الموائع، في مكتبة C++ واحدة لا شيء فيها يُجلب.
- نوى مصفوفات داخل الشجرة. البرامج الفرعية للجبر الخطي الأساسي (BLAS) وحزمة الجبر الخطي (LAPACK) مُنفَّذة هنا لا مجلوبة: بلا Eigen وبلا OpenBLAS.
linalgيملك LU وQR وتحليل القيم المفردة (SVD) وeig وCholesky والنوى على طراز LAPACK، فالنشر تصريفٌ لا مطاردة اعتماديات. - مجموعة فرعية مقيَّدة من C++. لا مؤشّرات خام، ولا استثناءات، ولا تحويلات غير آمنة — مفروضة وقت الترجمة. وشيفرة الإنتاج تُرجِع
Result<T>، فتكون معالجة الأخطاء حتمية وظاهرة في النوع.
ما هذا، في دقيقة واحدة
الإجهاد، والتدفّق، والإشارات، والمخاطر — نادرًا ما يكتب الفريق الذي يشحن البرمجية الحساباتِ التي تقوم عليها. فهي تأتي من عشرات المكتبات الخارجية والمنصّات المدفوعة التي يجب جلبها وترخيصها والوثوق بها. وحين يبدو جواب خاطئًا، تكون الخطوات في شيفرة شخص آخر؛ وعلى آلة بناء مغلقة قد لا تستطيع جلبها أصلًا.
MathScript مكتبة C++ واحدة تؤدّي الرياضيات بنفسها: جبر خطي، وإحصاء، ومعادلات تفاضلية، وعناصر منتهية، وجريان موائع، وتحسين، ونظام جبر رمزي، عبر خمس وثلاثين مكتبة ساكنة. وروتينات المصفوفات التي تستوردها معظم المشاريع من BLAS وLAPACK مكتوبة هنا بدلًا من ذلك. وتنجح جميع مجموعات الاختبار الـ816 على بناء Windows. ولم يصدر الإصدار v1.0.0 بعد.
الفرق التي لا تصل آلات بنائها إلى الإنترنت — الدفاع، والطب، والطيران والفضاء، والمصارف — حيث كل اعتمادية مجلوبة موافقةٌ إضافية. والمنتجات التي تؤدّي عملها الحقيقي بلغة C++ ورياضياتها بلغة Python، فتحمل مجموعتَي مشكلات بسبب ذلك. والمعلّمون والطلاب الذين يريدون الطريقة مكتوبة حيث يمكن قراءتها.
نظام جبر حاسوبي رمزي (CAS) يعمل في متصفحك
اكتب تعبيرًا. يُقسَّم إلى رموز، ويُحلَّل إلى شجرة التركيب المجرّدة، ويُشتَقّ رمزيًّا، ويُبسَّط، ثم يُقيَّم عدديًّا للرسم — إلى جانب تكامل بقاعدة سمبسون وإيجاد جذور بالتنصيف على المجال المرئي.
mathscript-repl
المشتقّة الرمزية
Result<T>
المدعوم: + - * / ^, sin cos tan exp log sqrt abs sinh cosh tanh
asin acos atan، والثوابت pi و e. ونظام الجبر الرمزي الحقيقي أكبر بكثير؛ وهذه هي الفكرة نفسها بحجم قابل للقراءة.
symbolic .
مكتبة C++ الحقيقية، مُترجَمة إلى WebAssembly
كل ما فوق هذا JavaScript كُتب لهذه الصفحة — صادق، لكنه نموذج للشيء الحقيقي. وأدناه الشيء الحقيقي: libms_symbolic نفسه، مُترجَمًا من المصدر نفسه الذي يبني المكتبة الأصلية، يعمل في متصفحك.
ms::sym_diff — WebAssembly
غير محمَّلةلا يُنزَّل شيء حتى تضغط على التحميل، ثم يُجلب مرّة واحدة. الوحدة 113 كيلوبايت (KB) من WebAssembly و10 KB من المُحمِّل — وبناء المكتبة الكامل 4.9 ميغابايت (MB)، فهذا يربط ما تصل إليه هذه النداءات الأربعة فقط. وتُظهر اللوحة إصدار المكتبة ومعمارية مجموعة التعليمات (ISA) المتجهية التي يبلّغ عنها البناء.
ms::detect_isa()، وهو النداء نفسه الذي يجريه أصليًّا. على حاسوبك المكتبي يجيب بأحد امتدادات المتجهات المتقدّمة (AVX2 أو AVX-512)؛ وهنا توجد معمارية متجهات واحدة، وهو يقول ذلك.
tools/wasm/README.md.
خمس وثلاثون مكتبة ساكنة، وستة مجالات
جبر خطي كثيف ومتناثر، ودوال خاصة، وإحصاء، وتعلّم الآلة. ومعادلات تفاضلية عادية (ODE) وجزئية (PDE)، وطريقة العناصر المنتهية (FEM)، وديناميكا الموائع الحسابية (CFD). وتحسين، ومعالجة إشارات وصور، ونظرية أعداد، ورسوم، وهندسة، وطوبولوجيا، وأوليّات كمّية، وتحكّم، وتمويل، وضغط — ونظام جبر رمزي. مع LU وQR وSVD وحلّالات القيم الذاتية وCholesky مكتوبة داخل الشجرة.
الأنظمة الأساسية
جبر خطي كثيف ومتناثر مع LU وQR وSVD وحلّالات القيم الذاتية وCholesky داخل الشجرة. Result<T> لمعالجة الأخطاء في كل مكان.
ODE, PDE, FEM, CFD
تكامل زمني، وعناصر منتهية، وديناميكا موائع حاسوبية، إضافة إلى الدوال الخاصة والتربيع العددي.
الإحصاء & تعلّم الآلة
التوزيعات، والاستدلال، والانحدار، وآلية التحسين التي تحتها.
الإشارات، والصور، والتحكّم، والتمويل
تحويلات، وترشيح، ومعالجة صور، ونظرية تحكّم، وأوليّات التمويل الكمّي.
الجبر الحاسوبي
نظام جبر رمزي صغير يجلس بجوار العدديات لا مركَّبًا فوقها.
الرسوم البيانية، والهندسة، والطوبولوجيا، والكمّ
نظرية الأعداد، وخوارزميات الرسوم البيانية، والهندسة الحاسوبية، والطوبولوجيا، والأوليّات الكمّية.
ثلاثة تنفيذيات، وكل ما عداها اختياري
كل ما بعد الملفات التنفيذية الثلاثة خيار بناء — واجهة Qt الرسومية، وCUDA، وواجهة تمرير الرسائل (MPI)، ومصرّف آنيّ (JIT) مبنيّ على طبقة التصريف عند الطلب (ORC) في LLVM.
ما الذي تشتريه 816 مجموعة اختبار
مصفوفة التكامل المستمر خلف البوابات أدناه تغطّي مصرّفَين: Microsoft Visual C++ (MSVC) على Windows، ومجموعة مصرّفات جنو (GCC) 13 على Linux.
| البوابة | الإعداد |
|---|---|
| مجموعات CTest | 816، اجتازت 100% |
| المنصّة | Windows MSVC Release |
| مصفوفة التكامل المستمر | 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.