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 مكتوبة هنا بدلًا من ذلك. وتنجح جميع مجموعات الاختبار الـ816 على بناء Windows. ولم يصدر الإصدار v1.0.0 بعد.

لمن هو

الفرق التي لا تصل آلات بنائها إلى الإنترنت — الدفاع، والطب، والطيران والفضاء، والمصارف — حيث كل اعتمادية مجلوبة موافقةٌ إضافية. والمنتجات التي تؤدّي عملها الحقيقي بلغة C++ ورياضياتها بلغة Python، فتحمل مجموعتَي مشكلات بسبب ذلك. والمعلّمون والطلاب الذين يريدون الطريقة مكتوبة حيث يمكن قراءتها.

الرياضيات في الشجرة، لا في قائمة اعتماديات. تلك هي الحجّة، وبقية هذه الصفحة هي الدليل: ما تحويه المكتبات الخمس والثلاثون، ولماذا يعود الإخفاق في نوع الإرجاع لا بوصفه استثناءً، وما الذي تغطّيه أرقام الاختبار بالضبط.
تفاعلي

نظام جبر حاسوبي رمزي (CAS) يعمل في متصفحك

اكتب تعبيرًا. يُقسَّم إلى رموز، ويُحلَّل إلى شجرة التركيب المجرّدة، ويُشتَقّ رمزيًّا، ويُبسَّط، ثم يُقيَّم عدديًّا للرسم — إلى جانب تكامل بقاعدة سمبسون وإيجاد جذور بالتنصيف على المجال المرئي.

mathscript-repl

f(x) =
f(x) f′(x)، رمزيًّا جذور f

المشتقّة الرمزية


          
∫ على المجال
—
الجذور الموجودة
—
عقد شجرة التركيب
—
التحليل
—

Result<T>

Ok
حُلِّلت واشتُقّت بلا خطأ.

المدعوم: + - * / ^, sin cos tan exp log sqrt abs sinh cosh tanh asin acos atan، والثوابت pi و e. ونظام الجبر الرمزي الحقيقي أكبر بكثير؛ وهذه هي الفكرة نفسها بحجم قابل للقراءة.

مُقسِّم رموز، ومُحلِّل نزول تعاودي، ومُفاضِل رمزي، ومُبسِّط، كُتبت لهذه الصفحة. أما تنفيذ C++ فيقع في مكتبة symbolic .
ليست إعادة تنفيذ

مكتبة C++ الحقيقية، مُترجَمة إلى WebAssembly

كل ما فوق هذا JavaScript كُتب لهذه الصفحة — صادق، لكنه نموذج للشيء الحقيقي. وأدناه الشيء الحقيقي: libms_symbolic نفسه، مُترجَمًا من المصدر نفسه الذي يبني المكتبة الأصلية، يعمل في متصفحك.

ms::sym_diff — WebAssembly

غير محمَّلة

لا يُنزَّل شيء حتى تضغط على التحميل، ثم يُجلب مرّة واحدة. الوحدة 113 كيلوبايت (KB) من WebAssembly و10 KB من المُحمِّل — وبناء المكتبة الكامل 4.9 ميغابايت (MB)، فهذا يربط ما تصل إليه هذه النداءات الأربعة فقط. وتُظهر اللوحة إصدار المكتبة ومعمارية مجموعة التعليمات (ISA) المتجهية التي يبلّغ عنها البناء.

المبسَّطة
—
المشتقّة
—
التكامل
—
المكتبة
—
مجموعة التعليمات المتجهية
—
سطر ISA هو المكتبة تقول الحقيقة عن نفسها. فهي تستدعي ms::detect_isa()، وهو النداء نفسه الذي يجريه أصليًّا. على حاسوبك المكتبي يجيب بأحد امتدادات المتجهات المتقدّمة (AVX2 أو AVX-512)؛ وهنا توجد معمارية متجهات واحدة، وهو يقول ذلك.
مبنية بـEmscripten من شجرة MathScript. وقد لزم إصلاح ثلاثة عيوب في قابلية النقل للوصول إلى ذلك، وكلها تؤثّر أيضًا على البناء الأصلي مع Apple clang وعلى ARM — انظر tools/wasm/README.md.
النطاق

خمس وثلاثون مكتبة ساكنة، وستة مجالات

جبر خطي كثيف ومتناثر، ودوال خاصة، وإحصاء، وتعلّم الآلة. ومعادلات تفاضلية عادية (ODE) وجزئية (PDE)، وطريقة العناصر المنتهية (FEM)، وديناميكا الموائع الحسابية (CFD). وتحسين، ومعالجة إشارات وصور، ونظرية أعداد، ورسوم، وهندسة، وطوبولوجيا، وأوليّات كمّية، وتحكّم، وتمويل، وضغط — ونظام جبر رمزي. مع LU وQR وSVD وحلّالات القيم الذاتية وCholesky مكتوبة داخل الشجرة.

ستة مجالات للمكتبة — الأنظمة الأساسية، والعدديات، والإحصاء وتعلّم الآلة، والتطبيقي، والرمزي، والمتخصّص — فوق مسار أساسي من Result<T> بلا استثناءات ولا مؤشّرات خام
مرّر لرؤية المخطّط كاملًا →
خمس وثلاثون مكتبة، وعُرف خطأ واحد. المسار الذي تحتها هو المقصود: الفشل في نوع الإرجاع، لا في استثناء تجده في أعلى المكدس.
أساسي

الأنظمة الأساسية

جبر خطي كثيف ومتناثر مع LU وQR وSVD وحلّالات القيم الذاتية وCholesky داخل الشجرة. Result<T> لمعالجة الأخطاء في كل مكان.

عددي

ODE, PDE, FEM, CFD

تكامل زمني، وعناصر منتهية، وديناميكا موائع حاسوبية، إضافة إلى الدوال الخاصة والتربيع العددي.

الإحصاء

الإحصاء & تعلّم الآلة

التوزيعات، والاستدلال، والانحدار، وآلية التحسين التي تحتها.

تطبيقي

الإشارات، والصور، والتحكّم، والتمويل

تحويلات، وترشيح، ومعالجة صور، ونظرية تحكّم، وأوليّات التمويل الكمّي.

رمزي

الجبر الحاسوبي

نظام جبر رمزي صغير يجلس بجوار العدديات لا مركَّبًا فوقها.

متخصّص

الرسوم البيانية، والهندسة، والطوبولوجيا، والكمّ

نظرية الأعداد، وخوارزميات الرسوم البيانية، والهندسة الحاسوبية، والطوبولوجيا، والأوليّات الكمّية.

ما يُشحَن

ثلاثة تنفيذيات، وكل ما عداها اختياري

كل ما بعد الملفات التنفيذية الثلاثة خيار بناء — واجهة Qt الرسومية، وCUDA، وواجهة تمرير الرسائل (MPI)، ومصرّف آنيّ (JIT) مبنيّ على طبقة التصريف عند الطلب (ORC) في LLVM.

mathscriptcمترجم / محرّك دفعات
mathscript-replجلسة تفاعلية
mathscript-serverوضع الخدمة
اختياريواجهة Qt الرسومية، وCUDA، وMPI، وLLVM ORC JIT
التحقّق

ما الذي تشتريه 816 مجموعة اختبار

مصفوفة التكامل المستمر خلف البوابات أدناه تغطّي مصرّفَين: Microsoft Visual C++ (MSVC) على Windows، ومجموعة مصرّفات جنو (GCC) 13 على Linux.

البوابةالإعداد
مجموعات CTest816، اجتازت 100%
المنصّةWindows MSVC Release
مصفوفة التكامل المستمرMSVC + Linux GCC 13
بوابة التغطية90%
المنقّحاتمفعّلة
الاختبار العشوائيمفعّلة
انحدارات القياس28، بسماحية 10%
إصدار تمهيدي يعني إصدارًا تمهيديًّا. v1.0.0 لم يُشحَن. ورقم الـ816 مجموعة مأخوذ من Windows MSVC Release؛ وساق Linux GCC 13 تعمل في التكامل المستمر لكن الرقم المعلَن هو المقيس على 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.