Julia v1.11 Release Notes
New language features
- New
Memory
type that provides a lower-level container as an alternative toArray
.Memory
has 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 theArray
type 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
قبل حفظ ملف الإخراج. وهذا يسمح للمستخدمين بتفكيك الحالة الخلفية بأمان (مثل إغلاقTimer
s وإرسال إشعارات قطع الاتصال إلى مهام نبض القلب) وتنظيف الموارد الأخرى عندما يرغب البرنامج في البدء في الخروج. - لم يعد يتم توليد تغطية الشيفرة وتتبع 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
IOBuffer
as a stdout argument forProcess
spawn now works as expected, synchronized withwait
orsuccess
, so aBase.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. Callwait
on the process instead to ensure the content is fully written, then callclosewrite
manually to avoid data races, or use the callback form ofopen
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
andissuccess(::LU)
now accept anallowsingular
keyword 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).