Julia v1.11 Release Notes

New language features

  • New Memory type that provides a lower-level container as an alternative to Array. Memory has less overhead and a faster constructor, making it a good choice for situations that do not need all the features of Array (e.g. multiple dimensions). Most of the Array type is now implemented in Julia on top of Memory, leading to significant speedups for several functions (e.g. push!) as well as more maintainable code (#51319).
  • public هو كلمة مفتاحية جديدة. الرموز المميزة بـ public تعتبر واجهة برمجة تطبيقات عامة. الرموز المميزة بـ export تُعتبر الآن أيضًا واجهة برمجة تطبيقات عامة. الفرق بين public و export هو أن الأسماء المميزة بـ public لا تصبح متاحة عند using حزمة/وحدة (#50105).
  • ScopedValue ينفذ النطاق الديناميكي مع الوراثة عبر المهام (#50958).
  • Manifest.toml يمكن الآن إعادة تسميته بالتنسيق Manifest-v{major}.{minor}.toml ليتم اختياره بشكل تفضيلي بواسطة إصدار جوليا المعطى. أي في نفس المجلد، سيتم استخدام Manifest-v1.11.toml بواسطة v1.11 و Manifest.toml بواسطة كل إصدار جوليا آخر. هذا يجعل إدارة البيئات لعدة إصدارات جوليا في نفس الوقت أسهل (#43845).
  • دعم لـ Unicode 15.1 (#51799).

Language changes

  • خلال مرحلة ما قبل التجميع، يتم الآن تشغيل روابط atexit قبل حفظ ملف الإخراج. وهذا يسمح للمستخدمين بتفكيك الحالة الخلفية بأمان (مثل إغلاق Timers وإرسال إشعارات قطع الاتصال إلى مهام نبض القلب) وتنظيف الموارد الأخرى عندما يرغب البرنامج في البدء في الخروج.
  • لم يعد يتم توليد تغطية الشيفرة وتتبع malloc خلال مرحلة ما قبل تجميع الحزمة. علاوة على ذلك، خلال هذه الأوضاع، يتم الآن استخدام ذاكرات pkgimage للحزم التي لا يتم تتبعها. وهذا يعني أن اختبار التغطية (وهو الافتراضي لـ julia-actions/julia-runtest) سيستخدم افتراضيًا ذاكرات pkgimage لجميع الحزم الأخرى غير الحزمة التي يتم اختبارها، مما يعني على الأرجح تنفيذ اختبارات أسرع (#52123).
  • تحديد مسار في JULIA_DEPOT_PATH يؤدي الآن إلى توسيع السلاسل الفارغة لاستبعاد مستودع المستخدم الافتراضي (#51448).
  • ملفات ذاكرة التخزين المؤقت المسبقة التجميع أصبحت الآن قابلة للنقل وصلاحيتها يتم التحقق منها الآن من خلال تجزئة المحتوى لملفات المصدر بدلاً من mtime (#49866).
  • يمكن الآن أن تعتمد الإضافات على إضافات أخرى، إذا كانت مشغلاتها تشمل جميع مشغلات أي إضافة ترغب في الاعتماد عليها (+ على الأقل مشغل آخر واحد). تم حظر الاعتماد على إضافات أخرى التي لا تلبي هذا الشرط من استخدام Base.get_extension خلال مرحلة ما قبل التجميع، لمنع دورات الإضافات #55557.

Compiler/Runtime improvements

  • تم تحديث خوارزميات جمع القمامة لحساب الصفحات المخصصة بدلاً من الكائنات الفردية (#50144).
  • تمت إضافة دعم لتوضيح Base.@assume_effects على كتل الشيفرة (#52400).

Command-line option changes

  • تم توحيد نقطة الدخول لجوليا إلى Main.main(args). يجب أن يتم اختيار ذلك صراحة باستخدام ماكرو @main (انظر وصف الدالة لمزيد من التفاصيل). عند اختيار ذلك، وعند استدعاء جوليا لتشغيل نص أو تعبير (أي باستخدام جوليا script.jl أو جوليا -e expr)، ستقوم جوليا بعد ذلك بتشغيل دالة Main.main تلقائيًا. يهدف هذا إلى توحيد سير العمل بين النصوص والترجمة، حيث قد يحدث تحميل الكود في المترجم وقد تحدث تنفيذ دالة Main.main في البرنامج التنفيذي الناتج. للاستخدام التفاعلي، لا يوجد فرق دلالي بين تعريف دالة main وتنفيذ الكود مباشرة في نهاية النص (#50974).
  • يمكن الآن تعيين العلامات --compiled-modules و --pkgimages إلى existing، مما سيجعل جوليا تفكر في تحميل ملفات التخزين المؤقت الموجودة، ولكن دون إنشاء ملفات جديدة (#50586، #52573).
  • الوسيط --project يقبل الآن @script لتحديد مسار إلى دليل يحتوي على Project.toml بالنسبة لملف السكربت الممرر. --project=@script/foo للدليل الفرعي foo. إذا لم يتم إعطاء مسار بعد (أي --project=@script) فإن (مثل --project=@.) يتم البحث في الدليل وآبائه عن Project.toml (#50864 و #53352)

Multi-threading changes

  • Threads.@threads الآن يدعم جدولة :greedy، المخصصة للأحمال غير المتجانسة (#52096).
  • هيكل جديد عام (ولكن غير مُصدّر) Base.Lockable{T, L<:AbstractLock} يجعل من السهل تجميع مورد وقفله معًا (#52898).

Build system changes

  • هناك Makefile جديد لبناء جوليا و LLVM باستخدام استراتيجيات تحسينات موجهة بالملف الشخصي وتحسينات وقت الربط (PGO و LTO)، انظر contrib/pgo-lto/Makefile (#45641).

New library functions

  • ثلاثة أنواع جديدة حول فكرة النص مع "التعليقات التوضيحية" (Pair{Symbol, Any} إدخالات، مثل :lang => "en" أو :face => :magenta). يتم الحفاظ على هذه التعليقات التوضيحية عبر العمليات (مثل ربط السلاسل باستخدام *) عند الإمكان.

    • AnnotatedString هو نوع جديد من AbstractString. يقوم بلف سلسلة أساسية ويسمح بإرفاق تعليقات على مناطق من السلسلة. يتم استخدام هذا النوع على نطاق واسع في مكتبة StyledStrings القياسية الجديدة للاحتفاظ بمعلومات التنسيق.
    • AnnotatedChar هو نوع جديد من AbstractChar. يقوم بلف حرف آخر ويحتفظ بقائمة من التعليقات التوضيحية التي تنطبق عليه.
    • AnnotatedIOBuffer هو نوع جديد من IO الذي يحاكي IOBuffer، ولكنه يحتوي على طرق read/write متخصصة للمحتوى المعلق. يمكن اعتبار ذلك كنوع من "باني السلاسل" وأيضًا كغراء بين المحتوى المعلق وغير المعلق.
  • in!(x, s::AbstractSet) ستعيد ما إذا كان x في s، وتدرج x في s إذا لم يكن موجودًا (#45156، #51636).

  • تقوم الدالة الجديدة Libc.mkfifo بلف دالة mkfifo بلغة C على منصات Unix (#34587).

  • logrange(start, stop; length) يجعل نطاقًا بنسبة ثابتة، بدلاً من خطوة ثابتة (#39071)

  • copyuntil(out, io, delim) و copyline(out, io) تنسخ البيانات إلى دفق out::IO (#48273).

  • eachrsplit(string, pattern) يقوم بتكرار تقسيم السلاسل الفرعية من اليمين إلى اليسار (#51646).

  • Sys.username() يمكن استخدامه لإرجاع اسم المستخدم الحالي (#51897).

  • Sys.isreadable(), Sys.iswritable() يمكن استخدامها للتحقق مما إذا كان لدى المستخدم الحالي أذونات الوصول التي تسمح بالقراءة والكتابة، على التوالي. (#53320).

  • GC.logging_enabled() يمكن استخدامه لاختبار ما إذا كان تسجيل GC قد تم تمكينه عبر GC.enable_logging (#51647).

  • IdSet يتم الآن تصديره من Base ويعتبر عامًا (#53262).

  • @time الآن يُبلغ عن عدد أي تعارضات في القفل حيث كان على ReentrantLock الانتظار، بالإضافة إلى ماكرو جديد @lock_conflicts الذي يُرجع هذا العدد (#52883).

  • الماكرو الجديد Base.Cartesian.@ncallkw مشابه لـ Base.Cartesian.@ncall، ولكنه يسمح بإضافة معلمات الكلمات الرئيسية إلى استدعاء الدالة (#51501).

  • دالة جديدة Docs.hasdoc(module, symbol) تخبر ما إذا كان للاسم سلسلة توثيق (#52139).

  • تُعيد الدالة الجديدة Docs.undocumented_names(module) الأسماء العامة غير الموثقة لوحدة (#52413).

New library features

  • invmod(n, T) حيث T هو نوع عدد صحيح أصلي الآن يحسب المعكوس المودولي لـ n في حلقة الأعداد المودولية التي يعرفها T (#52180).
  • invmod(n) هو اختصار لـ invmod(n, typeof(n)) لأنواع الأعداد الصحيحة الأصلية (#52180).
  • replace(string, pattern...) يدعم الآن وسيط IO اختياري لكتابة المخرجات إلى دفق بدلاً من إرجاع سلسلة (#48625).
  • New methods allequal(f, itr) and allunique(f, itr) taking a predicate function (#47679).
  • sizehint!(s, n) يدعم الآن وسيطًا اختياريًا shrink لتعطيل الانكماش (#51929).
  • Passing an IOBuffer as a stdout argument for Process spawn now works as expected, synchronized with wait or success, so a Base.BufferStream is no longer required there for correctness to avoid data races (#52461).
  • After a process exits, closewrite will no longer be automatically called on the stream passed to it. Call wait on the process instead to ensure the content is fully written, then call closewrite manually to avoid data races, or use the callback form of open to have all that handled automatically (#52461).
  • @timed الآن يعيد أيضًا وقت التجميع وإعادة التجميع المنقضي (#52889).
  • filter يمكنه الآن العمل على NamedTuple (#50795).
  • Iterators.cycle(iter, n) يعمل على iter عدد ثابت من المرات، بدلاً من الاستمرار إلى الأبد (#47354).
  • zero(::AbstractArray) الآن يطبق بشكل متكرر، لذا فإن zero([[1,2],[3,4,5]]) ينتج الآن الهوية الجمعيّة [[0,0],[0,0,0]] بدلاً من حدوث خطأ (#38064).
  • include_dependency(path; track_content=true) يسمح بالتبديل من استخدام mtime إلى تجزئة الاعتماد المسبق للتجميع من أجل استعادة قابلية النقل لذواكر التخزين المسبق (#51798).

Standard library changes

  • تستخدم طريقة التراجع write(::IO, ::AbstractArray) لاستدعاء write بشكل متكرر على كل عنصر، ولكنها الآن تكتب التمثيل في الذاكرة لكل قيمة. على سبيل المثال، write(io, 'a':'b') تكتب الآن 4 بايت لكل حرف، بدلاً من كتابة تمثيل UTF-8 لكل حرف. التنسيق الجديد متوافق مع ذلك المستخدم بواسطة Array، مما يجعل من الممكن استخدام read! لاستعادة البيانات (#42593).
  • لا يمكن تعريف length للمكررات ذات الحالة بطريقة متسقة بشكل عام. يتم معالجة إمكانية الحصول على نتائج غير صحيحة بصمت للمكررات ذات الحالة عن طريق حذف طريقة length(::Stateful). النوع الأخير من معلمات Stateful قد اختفى أيضًا. القضية: (#47790)، PR: (#51747).

Package Manager

  • يمكن الآن تحديد "المصادر" للحزم في قسم [sources] في Project.toml. يمكن استخدام ذلك لإضافة تبعيات عادية أو اختبارية غير مسجلة.
  • Pkg الآن يلتزم بحدود [compat] لـ julia ويثير خطأ إذا كانت نسخة ثنائي Julia الجاري غير متوافقة مع الحدود في Project.toml. لقد التزم Pkg دائمًا بهذا التوافق عند العمل مع حزم Registry. يؤثر هذا التغيير بشكل أساسي على الحزم المحلية.
  • pkg> add و Pkg.add ستضيف الآن إدخالات التوافق للاعتماديات المباشرة الجديدة إذا كانت البيئة النشطة حزمة (لديها إدخال name و uuid).
  • يمكن الآن إضافة التبعيات مباشرة كاعتماديات ضعيفة أو إضافات عبر الأشكال pkg> add --weak/extra Foo أو Pkg.add("Foo", target=:weakdeps/:extras).

StyledStrings

  • مكتبة قياسية جديدة للتعامل مع التنسيق بطريقة أكثر شمولاً وهيكلية (#49586).
  • الهيكل الجديد Faces يعمل كحاوية لمعلومات تنسيق النص (فكر في نوع الخط، بالإضافة إلى اللون والزخرفة)، ويأتي مع إطار عمل لتوفير نهج مريح وقابل للتوسيع (عبر addface!) وقابل للتخصيص (مع ملف Faces.toml الخاص بالمستخدم و loadfaces!) للمحتوى المنسق (#49586).
  • تقدم ماكرو السلسلة @styled_str الجديد وسيلة مريحة لإنشاء AnnotatedString مع تطبيق وجوه أو سمات أخرى متنوعة (#49586).

Libdl

  • تم تصدير نوع LazyLibrary جديد من Libdl لاستخدامه في بناء تحميلات المكتبات الكسولة المتسلسلة، ويستخدم بشكل أساسي داخل JLLs (#50074).

LinearAlgebra

  • cbrt(::AbstractMatrix{<:Real}) تم تعريفه الآن ويعيد جذور مكعبة لمصفوفات ذات قيم حقيقية لمصفوفات ذات قيم حقيقية (#50661).
  • eigvals/eigen(A, bunchkaufman(B)) و eigvals/eigen(A, lu(B))، التي تستخدم تحليل Bunchkaufman (LDL) و LU لـ B، على التوالي، الآن تحسب بكفاءة القيم الذاتية العامة (eigen: و eigenvectors) لـ A و B. ملاحظة: الحجة الثانية هي ناتج bunchkaufman أو lu (#50471).
  • يوجد الآن إرسال متخصص لـ eigvals/eigen(::Hermitian{<:Tridiagonal}) الذي يقوم بإجراء تحويل تشابه لإنشاء مصفوفة ثلاثية الأبعاد حقيقية متناظرة، وحل ذلك باستخدام روتينات LAPACK (#49546).
  • تحتفظ المصفوفات الهيكلية الآن إما بمحاور الأصل (لـ Symmetric/Hermitian/AbstractTriangular/UpperHessenberg)، أو تلك الخاصة بالقطر الرئيسي (للمصفوفات المصفوفة) (#52480).
  • bunchkaufman و bunchkaufman! الآن يعملان مع أي AbstractFloat، Rational ومتغيراتهما المعقدة. bunchkaufman يدعم الآن أنواع Integer، من خلال إجراء تحويل داخلي إلى Rational{BigInt}. تمت إضافة دالة جديدة inertia التي تحسب العطالة للعامل القطري الذي يتم الحصول عليه من كائن تحليل BunchKaufman لمصفوفة حقيقية متناظرة أو هيرميتية. بالنسبة للمصفوفات المعقدة المتناظرة، تقوم inertia فقط بحساب عدد القيم الذاتية الصفرية للعامل القطري (#51487).
  • الحزم التي تتخصص في mul! لمصفوفات المصفوفات مع توقيع طريقة بالشكل mul!(::AbstractMatrix, ::MyMatrix, ::AbstractMatrix, ::Number, ::Number) لم تعد تواجه غموضًا في الطرق عند التفاعل مع LinearAlgebra. سابقًا، كانت الغموض تظهر عند ضرب MyMatrix مع نوع مصفوفة منظم مقدم من LinearAlgebra، مثل AbstractTriangular، مما كان يتطلب طرقًا إضافية لحل مثل هذه الغموض. كما تمت إزالة مصادر الغموض المماثلة لعمليات mul! لمصفوفات المتجهات (#52837).
  • lu and issuccess(::LU) now accept an allowsingular keyword argument. When set to true, a valid factorization with rank-deficient U factor will be treated as success instead of throwing an error. Such factorizations are now shown by printing the factors together with a "rank-deficient" note rather than printing a "Failed Factorization" message (#52957).

Random

  • rand الآن يدعم أخذ عينات من أنواع Tuple (#35856, #50251).
  • rand الآن يدعم أخذ عينات من أنواع Pair (#28705).
  • عند تهيئة مولدات الأرقام العشوائية المقدمة بواسطة Random، يمكن الآن استخدام بذور سالبة (#51416).
  • يمكن الآن تهيئة مولدات الأرقام العشوائية القابلة للبذر من Random بواسطة سلسلة، على سبيل المثال seed!(rng, "a random seed") (#51527).

REPL

  • تظهر تلميحات إكمال التبويب الآن بنص أفتح أثناء الكتابة في REPL. لتعطيل ذلك، قم بتعيين Base.active_repl.options.hint_tab_completes = false تفاعليًا، أو في startup.jl:

    if VERSION >= v"1.11.0-0"
      atreplinit() do repl
          repl.options.hint_tab_completes = false
      end
    end

    (#51229).

  • تقوم Meta-M مع موجه فارغ الآن بالتبديل بين الوحدة السياقية السابقة غير الرئيسية والوحدة الرئيسية بحيث يكون التبديل ذهابًا وإيابًا بسيطًا (#51616, #52670).

Dates

الدالة غير الموثقة adjust لم تعد مُصدرة ولكنها موثقة الآن (#53092).

Statistics

  • الإحصائيات هي الآن مكتبة قياسية قابلة للتحديث (#46501).

Distributed

  • pmap الآن يستخدم بشكل افتراضي CachingPool (#33892).

Deprecated or removed

  • Base.map، Iterators.map، و foreach فقدوا طرقهم ذات الوسيط الواحد (#52631).

External dependencies

  • تم تحديث مكتبة libuv من إصدار v1.44.2 إلى v1.48.0 (#49937).
  • tput لم يعد يُستخدم للتحقق من قدرات الطرفية؛ لقد تم استبداله بمحلل terminfo مكتوب بلغة جوليا بالكامل (#50797).
  • قاعدة بيانات معلومات الطرفية، terminfo، أصبحت الآن مدمجة بشكل افتراضي، مما يوفر تجربة مستخدم أفضل في REPL عندما لا تكون terminfo متاحة على النظام. يمكن بناء جوليا بدون دمج قاعدة البيانات باستخدام خيار Makefile WITH_TERMINFO=0. (#55411)

Tooling Improvements

  • تقوم CI الآن بإجراء كشف تلقائي محدود عن الأخطاء المطبعية في جميع طلبات السحب. إذا قمت بدمج طلب سحب مع فشل في فحص الأخطاء المطبعية في CI، فسيتم تجاهل الأخطاء المطبعية المبلغ عنها تلقائيًا في عمليات CI المستقبلية على طلبات السحب التي تعدل تلك الملفات نفسها (#51704).