Julia v1.11 Release Notes
New language features
- New
Memorytype that provides a lower-level container as an alternative toArray.Memoryhas less overhead and a faster constructor, making it a good choice for situations that do not need all the features ofArray(e.g. multiple dimensions). Most of theArraytype is now implemented in Julia on top ofMemory, 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)andallunique(f, itr)taking a predicate function (#47679). sizehint!(s, n)يدعم الآن وسيطًا اختياريًاshrinkلتعطيل الانكماش (#51929).- Passing an
IOBufferas a stdout argument forProcessspawn now works as expected, synchronized withwaitorsuccess, so aBase.BufferStreamis no longer required there for correctness to avoid data races (#52461). - After a process exits,
closewritewill no longer be automatically called on the stream passed to it. Callwaiton the process instead to ensure the content is fully written, then callclosewritemanually to avoid data races, or use the callback form ofopento 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). luandissuccess(::LU)now accept anallowsingularkeyword argument. When set totrue, 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متاحة على النظام. يمكن بناء جوليا بدون دمج قاعدة البيانات باستخدام خيار MakefileWITH_TERMINFO=0. (#55411)
Tooling Improvements
- تقوم CI الآن بإجراء كشف تلقائي محدود عن الأخطاء المطبعية في جميع طلبات السحب. إذا قمت بدمج طلب سحب مع فشل في فحص الأخطاء المطبعية في CI، فسيتم تجاهل الأخطاء المطبعية المبلغ عنها تلقائيًا في عمليات CI المستقبلية على طلبات السحب التي تعدل تلك الملفات نفسها (#51704).