لغة البرمجة Julia 1.9 متوفرة

تم نشر إصدار لغة البرمجة Julia 1.9 ، التي تجمع بين صفات مثل الأداء العالي ودعم الكتابة الديناميكية والأدوات المدمجة للبرمجة المتوازية. صيغة جوليا قريبة من MATLAB ، مع بعض العناصر المستعارة من Ruby و Lisp. طريقة التلاعب بالسلسلة تذكرنا بلغة بيرل. يتم توزيع كود المشروع بموجب ترخيص معهد ماساتشوستس للتكنولوجيا.

السمات الرئيسية للغة:

  • الأداء العالي: أحد الأهداف الرئيسية للمشروع هو تحقيق أداء قريب من برامج سي. يعتمد برنامج التحويل البرمجي Julia على مشروع LLVM ويقوم بإنشاء رمز آلة أصلية فعال للعديد من الأنظمة الأساسية المستهدفة ؛
  • دعم نماذج البرمجة المختلفة ، بما في ذلك عناصر البرمجة الشيئية والوظيفية. توفر المكتبة القياسية وظائف للإدخال / الإخراج غير المتزامن ، وإدارة العمليات ، والتسجيل ، والتنميط ، وإدارة الحزم ، من بين أشياء أخرى ؛
  • الكتابة الديناميكية: لا تتطلب اللغة تعريفًا واضحًا لأنواع المتغيرات بالقياس مع لغات البرمجة النصية. يدعم الوضع التفاعلي ؛
  • القدرة الاختيارية على تحديد الأنواع صراحة ؛
  • بناء جملة ممتاز للحسابات العددية والحسابات العلمية وأنظمة التعلم الآلي وتصور البيانات. دعم العديد من أنواع البيانات الرقمية والأدوات الخاصة بالتوازي مع العمليات الحسابية.
  • القدرة على استدعاء الوظائف مباشرة من مكتبات C بدون طبقات إضافية.

التغييرات الرئيسية في Julia 1.9:

  • ميزات اللغة الجديدة
    • اسمح بإجراء التخصيصات في وحدة نمطية أخرى باستخدام "setproperty! (:: Module، :: Symbol، x)".
    • يُسمح بمهمة متعددة ليست في الموضع النهائي. على سبيل المثال ، ستتم معالجة السلسلة "أ ، ب ... ، ج = 1 ، 2 ، 3 ، 4" على أنها "أ = 1 ؛ ب ... ، = 2 ، 3 ؛ ج = 4 ". يتم التعامل مع هذا عبر Base.split_rest.
    • تدعم القيم الحرفية للحرف الفردي الآن نفس بناء الجملة مثل السلاسل الحرفية ؛ أولئك. يمكن أن يمثل بناء الجملة تسلسلات UTF-8 غير صالحة ، كما يسمح به نوع Char.
    • دعم إضافي لمواصفات Unicode 15.
    • يمكن الآن استخدام مجموعات متداخلة من المجموعات والمجموعة المسماة من الأحرف كمعلمات كتابة.
    • وظائف مدمجة جديدة "getglobal (:: Module، :: Symbol [، order])" و "setglobal! (:: Module، :: Symbol، x [، order])" للقراءة والكتابة حصريًا للمتغيرات العامة. يجب الآن تفضيل طريقة getglobal على طريقة getfield للوصول إلى المتغيرات العامة.
  • تغيرات اللغة
    • يتم الآن تصدير الماكرو "invoke" المقدم في الإصدار 1.7 ومتاح للاستخدام. أيضًا ، يستخدم الآن طريقة "Core.Typeof (x)" بدلاً من "Any" عندما يتم حذف التعليق التوضيحي للنوع للوسيطة "x". يعد هذا ضروريًا حتى تتم معالجة الأنواع التي تم تمريرها كوسيطات بشكل صحيح.
    • تم تمكين تصدير وظيفة "invokelatest" و "invokelatest" في الإصدار 1.7.
  • المترجم / تحسينات وقت التشغيل
    • تقليل وقت التنفيذ الأول بشكل كبير (TTFX - الوقت حتى أول تنفيذ). يحفظ التجميع المسبق للحزمة الآن الكود الأصلي في "pkgimage" ، مما يعني أن الشفرة التي تم إنشاؤها أثناء التجميع المسبق لن تحتاج إلى إعادة تجميعها بعد تحميل الحزمة. يمكن تعطيل استخدام وضع pkgimages باستخدام الخيار "--pkgimages = no".
    • تم إصلاح المشكلة المعروفة للتعقيد التربيعي لاستدلال النوع ، وبشكل عام يستخدم الاستدلال ذاكرة أقل. يتم تجميع بعض حالات الحافة ذات الوظائف الطويلة التي يتم إنشاؤها تلقائيًا (مثل ModelingToolkit.jl مع المعادلات التفاضلية الجزئية والنماذج السببية الكبيرة) بشكل أسرع.
    • يمكن الآن أن تكون المكالمات التي تحتوي على وسيطات غير خاصة بالنوع مُحسّنة لتقسيم الاتحاد للحقن أو الدقة الثابتة ، حتى إذا كانت هناك عدة أنواع مختلفة من مرشحي الإرسال. يمكن أن يؤدي ذلك إلى تحسين الأداء في مواقف معينة حيث لا يتم حل أنواع الكائنات بشكل ثابت بشكل كامل ، عن طريق الحل الثابت لمواقع الاتصال "@ nospecialize-d" وتجنب إعادة الترجمة.
    • تم استبدال كافة استخدامات الماكرو @pure في الوحدة النمطية Base بـ Base.@assume_effets.
    • لم تعد الاستدعاءات لاستدعاء (f ، invokesig ، args ...) بأنواع أقل تحديدًا من تلك المستخدمة عادةً لـ f (args ...) تتسبب في إعادة تجميع الحزمة.
  • تغيير معلمة سطر الأوامر
    • في نظامي Linux و Windows ، يحاول الخيار "--threads = auto" الآن تحديد العدد المتاح من المعالجات بناءً على تقارب وحدة المعالجة المركزية ، وهو قناع يتم تعيينه عادةً في HPC والبيئات السحابية.
    • تم تعطيل الخيار "--math-mode = fast" ، وبدلاً من ذلك يوصى باستخدام الماكرو "fastmath" ، الذي يحتوي على دلالات محددة جيدًا.
    • المعلمة "--threads" لها الآن التنسيق "auto | N [، auto | M] "، حيث يحدد M عدد سلاسل الرسائل التفاعلية التي سيتم إنشاؤها (الوسائل التلقائية حاليًا 1).
    • خيار مضاف "- heap-size-hint = "، والذي يحدد الحد الذي يبدأ بعده جمع البيانات المهملة النشط. يمكن تحديد الحجم بالبايت أو الكيلو بايت (1000 كيلوبايت) أو الميجابايت (300 ميجابايت) أو الجيجابايت (1,5 جيجابايت).
  • تعدد التغييرات
    • يحتوي "Threads.@spawn" الآن على وسيطة أولى اختيارية بالقيمة ":default" أو ":interactive". تتطلب المهمة التفاعلية زمن استجابة منخفضًا وهي مصممة لتكون قصيرة أو يتم تنفيذها بشكل متكرر. سيتم تشغيل المهام التفاعلية على سلاسل الرسائل التفاعلية إذا تم تحديدها عند بدء تشغيل Julia.
    • الخيوط التي تم إطلاقها خارج وقت تشغيل Julia (على سبيل المثال ، من C أو Java) يمكنها الآن استدعاء رمز Julia باستخدام "jl_adopt_thread". يحدث هذا تلقائيًا عند إدخال رمز Julia من خلال "cfunction" أو نقطة الدخول "ccallable". نتيجة لذلك ، يمكن الآن تغيير عدد سلاسل الرسائل في وقت التشغيل.
  • وظائف المكتبة الجديدة
    • وظيفة "Iterators.flatmap" الجديدة.
    • وظيفة "pkgversion (m :: Module)" الجديدة للحصول على نسخة الحزمة التي حملت وحدة معينة ، على غرار "pkgdir (m :: Module)".
    • وظيفة "المكدس (x)" الجديدة التي تعمم "تقليل (hcat، x :: Vector {<: Vector})" إلى أي بُعد وتسمح بأي مكرر للمكررات. طريقة "المكدس (f ، x)" تعمم "mapreduce (f ، hcat ، x)" وهي أكثر كفاءة.
    • ماكرو جديد لتحليل الذاكرة المخصصة "allocations" ، على غرار "allocated" ، باستثناء أنه يُرجع عدد عمليات تخصيص الذاكرة ، وليس الحجم الإجمالي للذاكرة المخصصة.
  • الميزات الجديدة للمكتبة
    • يعمل "RoundFromZero" الآن مع أنواع أخرى غير "BigFloat".
    • يمكن الآن تصغير "Dict" يدويًا باستخدام "sizehint!".
    • يشير الآن "time" بشكل منفصل إلى النسبة المئوية للوقت المنقضي في إعادة تجميع الطرق غير الصالحة.
  • التغييرات في المكتبة القياسية
    • تم إصلاح مشكلة التزامن في طرق التكرار لـ Dict والكائنات المشتقة الأخرى مثل المفاتيح (:: Dict) والقيم (:: Dict) والمجموعة. يمكن الآن استدعاء طرق التكرار هذه على Dict أو Set بالتوازي على عدد غير محدود من سلاسل الرسائل ، طالما لا توجد إجراءات لتعديل القاموس أو المجموعة.
    • يؤدي نفي الدالة الأصلية "! f" الآن إلى إرجاع دالة مركبة "(!) ∘ f" بدلاً من دالة مجهولة.
    • تعمل وظائف شريحة البعد الآن عبر أبعاد متعددة: "كل شريحة" ، و "كل شريحة" ، و "كل مجموعة" ترجع كائن "شرائح" الذي يسمح بالإرسال لتوفير أساليب أكثر كفاءة.
    • تمت إضافة ماكرو "kwdef" إلى واجهة برمجة التطبيقات العامة.
    • تم إصلاح مشكلة ترتيب العمليات في "fld1".
    • أصبح الفرز الآن دائمًا مستقرًا للوقت (تم إعادة تصميم QuickSort).
    • يتم الآن تصدير "Base.splat". قيمة الإرجاع من النوع "Base.Splat" بدلاً من دالة مجهولة ، مما يسمح بالاستدلال عليها بشكل جيد.
  • مدير مجموعة
    • "ملحقات الحزمة": دعم لتحميل مقتطف رمز من حزم أخرى تم تحميلها في جلسة Julia. التطبيق مشابه لحزمة "يتطلب.jl" ، لكن الترجمة المسبقة وتوافق التكوين مدعومان.
  • مكتبة الجبر الخطي
    • نظرًا لخطر الالتباس مع القسمة الأولية ، تمت إزالة الطرق "a / b" و "b \ a" ذات العددية "a" والمتجه "b" ، والتي كانت تعادل "a * pinv (b)".
    • تستخدم مكالمات BLAS و LAPACK الآن "libblastrampoline (LBT)". يتم توفير OpenBLAS افتراضيًا ، ولكن إنشاء صورة نظام باستخدام مكتبات BLAS / LAPACK أخرى غير مدعوم. بدلاً من ذلك ، يوصى باستخدام آلية LBT لاستبدال BLAS / LAPACK بمجموعة أخرى متاحة من المكتبات.
    • تدعم "lu" إستراتيجية دوران المصفوفة الجديدة "RowNonZero ()" ، والتي تحدد أول عنصر دوران غير صفري للاستخدام مع الأنواع الحسابية الجديدة وللأغراض التعليمية.
    • تدعم "normalize (x، p = 2)" الآن أي مسافة متجهية "x" ، بما في ذلك الحجميات.
    • العدد الافتراضي لسلاسل BLAS يساوي الآن عدد خيوط وحدة المعالجة المركزية في بنية ARM ونصف عدد سلاسل عمليات وحدة المعالجة المركزية في البنى الأخرى.
  • Printf: تمت إعادة صياغة رسائل الخطأ للسلاسل المشوهة لتحسين إمكانية القراءة.
  • الملف الشخصي: وظيفة جديدة "Profile.take_heap_snapshot (ملف)" تلتقط ملفًا بتنسيق ".heapsnapshot" المستند إلى JSON والمدعوم من Chrome.
  • Random: يعمل randn و randexp الآن مع أي نوع AbstractFloat يحدد rand.
  • ردل
    • يؤدي الضغط على مجموعة المفاتيح "Alt-e" إلى فتح الإدخال الحالي في المحرر. سيتم تنفيذ المحتوى (إذا تم تغييره) عند خروج المحرر.
    • يمكن تغيير سياق الوحدة النمطية الحالي النشط في REPL (افتراضيًا يكون رئيسيًا) باستخدام وظيفة "REPL.activate (:: Module)" أو عن طريق إدخال الوحدة النمطية في REPL والضغط على مفتاح "Alt-m" مزيج.
    • يمكن تنشيط وضع "الموجه المرقّم" ، الذي يطبع الأرقام لكل إدخال ومخرج ويخزن النتائج المقيمة في Out ، باستخدام "REPL.numbered_prompt! ()".
    • يعرض إكمال علامة التبويب وسيطات الكلمات الأساسية المتاحة.
  • SuiteSparse: تم نقل رمز حلال "SuiteSparse" إلى "SparseArrays.jl". يتم الآن إعادة تصدير الحلول بواسطة "SuiteSparse.jl".
  • المصفوفات المتفرقة
    • تتوفر الآن أدوات حل SuiteSparse كوحدات فرعية من SparseArrays.
    • تم تحسين أوضاع حماية تدفق UMFPACK و CHOLMOD من خلال التخلص من المتغيرات العالمية واستخدام الأقفال. متعدد مؤشرات الترابط "ldiv!" يمكن الآن تنفيذ كائنات UMFPACK بأمان.
    • تسمح لك الوظيفة التجريبية "SparseArrays.allowscalar (:: Bool)" بتعطيل أو تمكين الفهرسة العددية للمصفوفات المتفرقة. تم تصميم هذه الوظيفة لاكتشاف الفهرسة العددية العشوائية لكائنات "SparseMatrixCSC" ، والتي تعد مصدرًا شائعًا لمشاكل الأداء.
  • وضع تجاوز الفشل الجديد لمجموعات الاختبار الذي ينهي التشغيل التجريبي مبكرًا في حالة حدوث فشل أو خطأ. قم بتعيين إما عبر "testset kwarg failfast = true" أو "تصدير JULIA_TEST_FAILFAST = true". قد يكون هذا ضروريًا في عمليات إطلاق CI لتلقي رسائل خطأ مبكرة.
  • التواريخ: لم تعد السلاسل الفارغة يتم تحليلها بشكل غير صحيح على أنها قيم صالحة "DateTime" أو "Dates" أو "Times" وبدلاً من ذلك تلقي خطأ "ArgumentError" في المنشئات والتحليل ، بينما لا تُرجع "tryparse" شيئًا.
  • الحزمة الموزعة
    • يتم الآن نشر تكوين الحزمة (مشروع نشط ، "LOAD_PATH" ، "DEPOT_PATH") عند إضافة عمليات عاملة محلية (على سبيل المثال مع "addprocs (N :: Int)" أو مع علامة سطر الأوامر "-procs = N").
    • تأخذ "addprocs" لعمليات العمال المحليين الآن وسيطة تسمى "env" لتمرير متغيرات البيئة إلى العمليات العاملة.
  • Unicode: "graphemes (s، m: n)" ترجع السلسلة الفرعية من mth إلى nth graphemes في "s".
  • تمت إزالة حزمة DelimitedFiles من مكتبات النظام ويتم توزيعها الآن كحزمة منفصلة يجب تثبيتها بشكل صريح لاستخدامها.
  • التبعيات الخارجية
    • يكتشف Linux تلقائيًا إصدار مكتبة النظام libstdc ++ ويقوم بتحميله إذا كان أحدث. يمكن استعادة السلوك القديم لتحميل libstdc ++ المدمج بغض النظر عن إصدار النظام عن طريق تعيين متغير البيئة "JULIA_PROBE_LIBSTDCXX = 0".
    • تمت إزالة "RPATH" من ملف julia الثنائي ، والذي يمكن أن يكسر المكتبات على Linux التي تفشل في تحديد متغير "RUNPATH".
    • تحسينات الأداة: ناتج "MethodError" وطرق (على سبيل المثال ، من "methods (my_func)") يتم تنسيقه وتلوينه وفقًا لكيفية إخراج الأساليب في تتبعات المكدس.

    المصدر: opennet.ru

إضافة تعليق