Julia v1.11 Release Notes
New language features
- Yeni
Memorytürü,Array'e alternatif olarak daha düşük seviyeli bir konteyner sağlar.Memory, daha az yük ve daha hızlı bir yapıcıya sahiptir, bu da onuArray'in tüm özelliklerine ihtiyaç duymayan durumlar için iyi bir seçim haline getirir (örneğin, çok boyutlu). ArtıkArraytürünün çoğu, Julia'daMemoryüzerine uygulanmıştır ve bu da birkaç işlev (örneğin,push!) için önemli hız artışları ve daha sürdürülebilir kodlar sağlamaktadır (#51319). publicyeni bir anahtar kelimedir.publicile işaretlenmiş semboller kamu API'si olarak kabul edilir.exportile işaretlenmiş semboller de artık kamu API'si olarak muamele görmektedir.publicveexportarasındaki fark,publicisimlerinin bir paket/modül (#50105) kullanıldığında mevcut olmamasıdır.ScopedValue, dinamik kapsamı görevler arasında miras alarak uygular (#50958).Manifest.tomldosyaları artık belirli bir julia sürümü tarafından tercih edilmek üzereManifest-v{major}.{minor}.tomlformatında yeniden adlandırılabilir. Yani, aynı klasörde,Manifest-v1.11.tomlv1.11 tarafından kullanılacak veManifest.tomldiğer tüm julia sürümleri tarafından kullanılacaktır. Bu, aynı anda birden fazla julia sürümü için ortamları yönetmeyi kolaylaştırır (#43845).- Unicode 15.1 desteği (#51799).
Language changes
- Ön derleme sırasında,
atexitkancaları artık çıktı dosyasını kaydetmeden önce çalıştırılıyor. Bu, kullanıcıların arka plan durumunu güvenli bir şekilde sona erdirmesine (örneğin,Timer'ları kapatmak ve kalp atışı görevlerine bağlantı kesme bildirimleri göndermek) ve program çıkış yapmaya başlamak istediğinde diğer kaynakları temizlemesine olanak tanır. - Kod kapsamı ve malloc takibi artık paket ön derleme aşamasında üretilmiyor. Ayrıca, bu modlar sırasında izlenmeyen paketler için artık pkgimage önbellekleri kullanılmaktadır. Bu, kapsama testinin (
julia-actions/julia-runtestiçin varsayılan) varsayılan olarak test edilen paket dışındaki tüm diğer paketler için pkgimage önbelleklerini kullanacağı anlamına geliyor, bu da muhtemelen daha hızlı test yürütme süresi anlamına geliyor (#52123). JULIA_DEPOT_PATH'te bir yol belirtmek artık boş dizelerin genişletilmesiyle varsayılan kullanıcı deposunun (#51448) hariç tutulmasına neden olmaktadır.- Ön derleme önbellek dosyaları artık taşınabilir ve geçerlilikleri artık kaynak dosyalarının
mtime'ı yerine içerik hash'i ile doğrulanıyor (#49866). - Uzantılar artık, bağımlı oldukları diğer uzantıların tüm tetikleyicilerini içeren tetikleyicilere sahip oldukları takdirde diğer uzantılara bağımlı olabilirler (+ en az bir başka tetikleyici). Bu gereksinimi karşılamayan uzantıdan uzantıya bağımlılıklar, uzantı döngülerini önlemek için ön derleme sırasında
Base.get_extensionkullanmalarına engel olunmuştur #55557.
Compiler/Runtime improvements
- Güncellenmiş GC heuristikleri, bireysel nesneler yerine tahsis edilen sayfaları saymak için güncellendi (#50144).
Base.@assume_effectsüzerinde kod bloklarına not ekleme desteği eklendi (#52400).
Command-line option changes
- The entry point for Julia has been standardized to
Main.main(args). This must be explicitly opted into using the@mainmacro (see the docstring for further details). When opted-in, andjuliais invoked to run a script or expression (i.e. usingjulia script.jlorjulia -e expr),juliawill subsequently run theMain.mainfunction automatically. This is intended to unify script and compilation workflows, where code loading may happen in the compiler and execution ofMain.mainmay happen in the resulting executable. For interactive use, there is no semantic difference between defining amainfunction and executing the code directly at the end of the script (#50974). --compiled-modulesve--pkgimagesbayrakları artıkexistingolarak ayarlanabilir, bu da Julia'nın mevcut önbellek dosyalarını yüklemeyi düşünmesine neden olur, ancak yeni dosyalar oluşturmaz (#50586, #52573).--projectargümanı artık, geçilen betik dosyasına göre bir Project.toml dosyasının bulunduğu bir dizin yolu vermek için@script'i kabul ediyor.fooalt dizini için--project=@script/foo. Eğer (yani--project=@script) sonrasında bir yol verilmezse, (tıpkı--project=@.gibi) dizin ve üst dizinleri bir Project.toml aramak için taranır (#50864 ve #53352)
Multi-threading changes
Threads.@threadsnow supports the:greedyscheduler, intended for non-uniform workloads (#52096).- A new public (but unexported) struct
Base.Lockable{T, L<:AbstractLock}makes it easy to bundle a resource and its lock together (#52898).
Build system changes
- Yeni bir
Makefilevar, Julia ve LLVM'yi profil rehberli ve bağlantı zamanı optimizasyonları (PGO ve LTO) stratejilerini kullanarak derlemek için,contrib/pgo-lto/Makefile'a bakın (#45641).
New library functions
Üç yeni tür, "notlar" (
Pair{Symbol, Any}girişleri, örneğin:lang => "en"veya:face => :magentagibi) fikri etrafında oluşturulmuştur. Bu notlar, mümkün olduğunda işlemler (örneğin*ile string birleştirme) boyunca korunur.AnnotatedString, yeni birAbstractStringtürüdür. Temel bir dizeyi sarar ve dize bölgelerine ek açıklamalar eklenmesine olanak tanır. Bu tür, stil bilgilerini tutmak için yeniStyledStringsstandart kütüphanesinde yaygın olarak kullanılmaktadır.AnnotatedChar, yeni birAbstractChartürüdür. Başka bir karakteri sarar ve ona uygulanan bir dizi notu tutar.AnnotatedIOBuffer, yeni birIOtürüdür ve birIOBuffer'ı taklit eder, ancak anotasyonlu içerik için özelread/writeyöntemlerine sahiptir. Bu, hem bir tür "string builder" olarak hem de anotasyonlu ve anotasyonsuz içerik arasında bir yapıştırıcı olarak düşünülebilir.
Yeni
Libc.mkfifofonksiyonu, Unix platformlarındakimkfifoC fonksiyonunu sarmalar. (#34587)logrange(start, stop; length)sabit oranlı bir aralık oluşturur, sabit adım yerine. (#39071)copyuntil(out, io, delim)vecopyline(out, io)verileri birout::IOakışına kopyalar (#48273).eachrsplit(string, pattern)sağdan sola doğru alt dizeleri ayırır (#51646).Sys.username()şu anki kullanıcının kullanıcı adını döndürmek için kullanılabilir (#51897).Sys.isreadable(), Sys.iswritable()mevcut kullanıcının okuma ve yazma izinlerine sahip olup olmadığını kontrol etmek için kullanılabilir. (#53320).GC.logging_enabled()GC günlüğü kaydınınGC.enable_loggingaracılığıyla etkinleştirilip etkinleştirilmediğini test etmek için kullanılabilir (#51647).IdSetartık Base'den dışa aktarılıyor ve kamuya açık olarak kabul ediliyor (#53262).@timeşimdi, birReentrantLock'un beklemek zorunda kaldığı herhangi bir kilit çatışmasının sayısını rapor eder, ayrıca bu sayıyı döndüren yeni bir makro@lock_conflictsvardır (#52883).Yeni makro
Base.Cartesian.@ncallkw,Base.Cartesian.@ncallile benzerlik gösterir, ancak fonksiyon çağrısına anahtar kelime argümanları eklemeye olanak tanır (#51501).Yeni fonksiyon
Docs.hasdoc(module, symbol)bir ismin dokümantasyon dizesine sahip olup olmadığını belirtir (#52139).Yeni fonksiyon
Docs.undocumented_names(module)bir modülün belgelenmemiş kamu adlarını döndürür (#52413).
New library features
invmod(n, T)buradaTyerel bir tam sayı türüdür ven'ninT'nin tanımladığı modüler tam sayı halkasında modüler tersini hesaplar (#52180).invmod(n)is an abbreviation forinvmod(n, typeof(n))for native integer types (#52180).replace(string, pattern...)artık bir akışa çıktı yazmak için isteğe bağlı birIOargümanını destekliyor, bu da bir dize döndürmek yerine (#48625).- Yeni yöntemler
allequal(f, itr)veallunique(f, itr)bir predikat fonksiyonu alır (#47679). sizehint!(s, n)artık küçültmeyi devre dışı bırakmak için isteğe bağlı birshrinkargümanını destekliyor (#51929).Processspawn için bir stdout argümanı olarak birIOBuffergeçmek artık beklenildiği gibi çalışıyor,waitveyasuccessile senkronize, bu nedenle veri yarışlarını önlemek için orada birBase.BufferStreamgerekli değildir (#52461).- Bir işlem çıkış yaptıktan sonra,
closewriteona geçirilen akışta otomatik olarak çağrılmayacaktır. İçeriğin tamamen yazıldığından emin olmak için bunun yerine işlem üzerindewaitçağrısı yapın, ardından veri yarışlarını önlemek içinclosewrite'ı manuel olarak çağırın veya tüm bunların otomatik olarak halledilmesi içinopen'ın geri çağırma biçimini kullanın (#52461). @timedartık ek olarak geçen derleme ve yeniden derleme süresini döndürmektedir (#52889).filterartık birNamedTupleüzerinde işlem yapabilir (#50795).Iterators.cycle(iter, n)runs overitera fixed number of times, instead of forever (#47354).zero(::AbstractArray)now applies recursively, sozero([[1,2],[3,4,5]])now produces the additive identity[[0,0],[0,0,0]]rather than erroring (#38064).include_dependency(path; track_content=true)önceden derleme bağımlılığınınmtimekullanımından, önceden derleme önbelleklerinin taşınabilirliğini geri kazanmak için hashing'e geçiş yapmayı sağlar (#51798).
Standard library changes
- Geri dönüş yöntemi
write(::IO, ::AbstractArray)artık her bir öğe üzerindewriteçağrısı yapmak yerine, her değerin bellek içindeki temsilini yazar. Örneğin,write(io, 'a':'b')artık her karakter için 4 bayt yazar, her karakterin UTF-8 temsilini yazmak yerine. Yeni format,Arraytarafından kullanılan formatla uyumludur ve verileri geri almak içinread!kullanılmasını mümkün kılar (#42593). lengthiçin durumlu iteratörlerin genel olarak tutarlı bir şekilde tanımlanması mümkün değildir.Statefuliteratörler için sessizce yanlış sonuçlar alma potansiyeli,length(::Stateful)yönteminin silinmesiyle ele alınmıştır.Stateful'ın son tür parametresi de kaldırılmıştır. Sorun: (#47790), PR: (#51747).
Package Manager
- Artık Project.toml dosyasındaki
[sources]bölümünde paketler için "kaynaklar" belirtmek mümkündür. Bu, kaydedilmemiş normal veya test bağımlılıkları eklemek için kullanılabilir. - Pkg artık
[compat]sınırlarına uymaktadır veProject.tomliçindeki sınırlarla uyumsuz olan bir Julia ikili sürümü çalıştırıldığında bir hata verir. Pkg, Registry paketleri ile çalışırken her zaman bu uyumu sağlamıştır. Bu değişiklik, çoğunlukla yerel paketleri etkilemektedir. pkg> addvePkg.addartık aktif ortam bir paket (birnameveuuidgirişi varsa) olduğunda yeni doğrudan bağımlılıklar için uyumluluk girişleri ekleyecektir.- Bağımlılıklar artık doğrudan
pkg> add --weak/extra FooveyaPkg.add("Foo", target=:weakdeps/:extras)biçimleriyle zayıf bağımlılıklar veya ekler olarak eklenebilir.
StyledStrings
- Yeni bir stil yönetimi için daha kapsamlı ve yapılandırılmış bir şekilde kullanılacak standart bir kütüphane (#49586).
- Yeni
Facesyapısı, metin stil bilgileri için bir konteyner görevi görür (yazı tipi, renk ve süsleme gibi düşünün) ve stilize edilmiş içerik için kullanışlı, genişletilebilir (addface!aracılığıyla) ve özelleştirilebilir (Faces.tomlile kullanıcı veloadfaces!) bir yaklaşım sunar. (#49586) - Yeni
@styled_strdize makrosu, çeşitli yüzler veya diğer nitelikler uygulayarak birAnnotatedStringoluşturmanın pratik bir yolunu sağlar (#49586).
Libdl
- Yeni bir
LazyLibrarytürü, zincirleme tembel kütüphane yüklemeleri oluşturmak içinLibdl'den dışa aktarılmıştır; bu, esasen JLL'ler içinde kullanılmak üzere tasarlanmıştır (#50074).
LinearAlgebra
cbrt(::AbstractMatrix{<:Real})artık tanımlandı ve gerçek değerli matrislerin küp köklerini döndürür (#50661).eigvals/eigen(A, bunchkaufman(B))veeigvals/eigen(A, lu(B)), sırasıylaB'nin Bunchkaufman (LDL) ve LU ayrıştırmasını kullanarak, artıkAveB'nin genel özdeğerlerini (eigen: ve özvektörlerini) verimli bir şekilde hesaplamaktadır. Not: İkinci argümanbunchkaufmanveyalu'nun çıktısıdır (#50471).- Artık
eigvals/eigen(::Hermitian{<:Tridiagonal})için özel bir dağıtım mevcut olup, bu bir benzerlik dönüşümü gerçekleştirerek gerçek simetrik bir tridiagonal matris oluşturur ve bunu LAPACK rutinlerini kullanarak çözer (#49546). - Yapılandırılmış matrisler artık ya ebeveynin eksenlerini (
Simetrik/Hermitik/SoyutÜçgen/ÜstHessenberg) ya da bantlı matrislerin ana diyagonalinin eksenlerini korur. (#52480) bunchkaufmanvebunchkaufman!artık herhangi birAbstractFloat,Rationalve bunların karmaşık varyantları için çalışıyor.bunchkaufmanartıkIntegertürlerini destekliyor, bu daRational{BigInt}'e içsel bir dönüşüm yaparak mümkün oluyor. Gerçek simetrik veya Hermit matrisininBunchKaufmanfaktörizasyon nesnesi tarafından verilen diyagonal faktörün inersiyasını hesaplayan yeniinertiafonksiyonu eklendi. Karmaşık simetrik matrisler içininertia, yalnızca diyagonal faktörün sıfır özdeğerlerinin sayısını hesaplar (#51487).- Packages that specialize matrix-matrix
mul!with a method signature of the formmul!(::AbstractMatrix, ::MyMatrix, ::AbstractMatrix, ::Number, ::Number)no longer encounter method ambiguities when interacting withLinearAlgebra. Previously, ambiguities used to arise when multiplying aMyMatrixwith a structured matrix type provided by LinearAlgebra, such asAbstractTriangular, which used to necessitate additional methods to resolve such ambiguities. Similar sources of ambiguities have also been removed for matrix-vectormul!operations (#52837). luveissuccess(::LU)artıkallowsingularanahtar argümanını kabul ediyor.trueolarak ayarlandığında, sıralı eksik U faktörü ile geçerli bir faktorizasyon başarı olarak kabul edilecek ve bir hata fırlatılmayacaktır. Bu tür faktorizasyonlar artık faktörlerin "sıralı eksik" notu ile birlikte yazdırılmasıyla gösterilmektedir; "Başarısız Faktorizasyon" mesajı yazdırılmak yerine (#52957).
Random
randartıkTupletürleri üzerinde örnekleme yapmayı destekliyor (#35856, #50251).randartıkPairtürleri üzerinde örnekleme yapmayı destekliyor (#28705).- Negatif tam sayı tohumları artık
Randomtarafından sağlanan RNG'leri tohumlamak için kullanılabilir (#51416). Randomiçindeki tohumlanabilir rastgele sayı üreteçleri artık bir dize ile tohumlanabilir, örneğinseed!(rng, "rastgele bir tohum")(#51527).
REPL
Tab tamamlama ipuçları artık repl'de yazarken daha açık bir metinle gösteriliyor. Devre dışı bırakmak için
Base.active_repl.options.hint_tab_completes = falsekomutunu etkileşimli olarak veya startup.jl dosyasında ayarlayın:if VERSION >= v"1.11.0-0" atreplinit() do repl repl.options.hint_tab_completes = false end end(#51229).
Meta-M, boş bir istemle, önceki non-Main bağlamsal modül ile Main arasında bağlamsal modülü geçiştirir, böylece ileri geri geçiş yapmak basit hale gelir (#51616, #52670).
Dates
Belgelendirilmemiş adjust fonksiyonu artık dışa aktarılmıyor ancak şimdi belgelenmiş durumda (#53092).
Statistics
- İstatistik artık yükseltilebilir bir standart kütüphanedir (#46501).
Distributed
pmapartık varsayılan olarak birCachingPoolkullanıyor (#33892).
Deprecated or removed
Base.map,Iterators.mapveforeachtek argümanlı yöntemlerini kaybetti (#52631).
External dependencies
- libuv kütüphanesi v1.44.2 sürümünden v1.48.0 sürümüne güncellenmiştir (#49937).
tputartık terminal yeteneklerini kontrol etmek için çağrılmıyor; bunun yerine saf-Julia terminfo ayrıştırıcısı ile değiştirilmiştir (#50797).- Terminal bilgi veritabanı,
terminfo, artık varsayılan olarak satılmakta olup, sistemdeterminfomevcut olmadığında daha iyi bir REPL kullanıcı deneyimi sunmaktadır. Julia, veritabanını satmadanMakefileseçeneğiWITH_TERMINFO=0kullanılarak derlenebilir. (#55411)
Tooling Improvements
- CI artık tüm PR'lerde sınırlı otomatik yazım hatası tespiti yapmaktadır. Eğer bir PR'yi başarısız bir yazım hatası CI kontrolü ile birleştirirseniz, o dosyaları düzenleyen gelecekteki PR'lerde bildirilen yazım hataları otomatik olarak göz ardı edilecektir (#51704).