Julia v1.11 Release Notes
New language features
- Yeni
Memory
tü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ıkArray
tü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). public
yeni bir anahtar kelimedir.public
ile işaretlenmiş semboller kamu API'si olarak kabul edilir.export
ile işaretlenmiş semboller de artık kamu API'si olarak muamele görmektedir.public
veexport
arasındaki fark,public
isimlerinin bir paket/modül (#50105) kullanıldığında mevcut olmamasıdır.ScopedValue
, dinamik kapsamı görevler arasında miras alarak uygular (#50958).Manifest.toml
dosyaları artık belirli bir julia sürümü tarafından tercih edilmek üzereManifest-v{major}.{minor}.toml
formatında yeniden adlandırılabilir. Yani, aynı klasörde,Manifest-v1.11.toml
v1.11 tarafından kullanılacak veManifest.toml
diğ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,
atexit
kancaları 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-runtest
iç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_extension
kullanmaları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@main
macro (see the docstring for further details). When opted-in, andjulia
is invoked to run a script or expression (i.e. usingjulia script.jl
orjulia -e expr
),julia
will subsequently run theMain.main
function automatically. This is intended to unify script and compilation workflows, where code loading may happen in the compiler and execution ofMain.main
may happen in the resulting executable. For interactive use, there is no semantic difference between defining amain
function and executing the code directly at the end of the script (#50974). --compiled-modules
ve--pkgimages
bayrakları artıkexisting
olarak ayarlanabilir, bu da Julia'nın mevcut önbellek dosyalarını yüklemeyi düşünmesine neden olur, ancak yeni dosyalar oluşturmaz (#50586, #52573).--project
argü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.foo
alt 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.@threads
now supports the:greedy
scheduler, 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
Makefile
var, 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 => :magenta
gibi) 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 birAbstractString
tü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 yeniStyledStrings
standart kütüphanesinde yaygın olarak kullanılmaktadır.AnnotatedChar
, yeni birAbstractChar
türüdür. Başka bir karakteri sarar ve ona uygulanan bir dizi notu tutar.AnnotatedIOBuffer
, yeni birIO
türüdür ve birIOBuffer
'ı taklit eder, ancak anotasyonlu içerik için özelread
/write
yö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.mkfifo
fonksiyonu, Unix platformlarındakimkfifo
C 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::IO
akışı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_logging
aracılığıyla etkinleştirilip etkinleştirilmediğini test etmek için kullanılabilir (#51647).IdSet
artı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_conflicts
vardır (#52883).Yeni makro
Base.Cartesian.@ncallkw
,Base.Cartesian.@ncall
ile 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)
buradaT
yerel 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ı birIO
argü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ı birshrink
argümanını destekliyor (#51929).Process
spawn için bir stdout argümanı olarak birIOBuffer
geçmek artık beklenildiği gibi çalışıyor,wait
veyasuccess
ile senkronize, bu nedenle veri yarışlarını önlemek için orada birBase.BufferStream
gerekli değildir (#52461).- Bir işlem çıkış yaptıktan sonra,
closewrite
ona 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). @timed
artık ek olarak geçen derleme ve yeniden derleme süresini döndürmektedir (#52889).filter
artık birNamedTuple
üzerinde işlem yapabilir (#50795).Iterators.cycle(iter, n)
runs overiter
a 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ınmtime
kullanı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,Array
tarafından kullanılan formatla uyumludur ve verileri geri almak içinread!
kullanılmasını mümkün kılar (#42593). length
için durumlu iteratörlerin genel olarak tutarlı bir şekilde tanımlanması mümkün değildir.Stateful
iteratö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.toml
iç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> add
vePkg.add
artık aktif ortam bir paket (birname
veuuid
giriş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 Foo
veyaPkg.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
Faces
yapı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.toml
ile kullanıcı veloadfaces!
) bir yaklaşım sunar. (#49586) - Yeni
@styled_str
dize makrosu, çeşitli yüzler veya diğer nitelikler uygulayarak birAnnotatedString
oluşturmanın pratik bir yolunu sağlar (#49586).
Libdl
- Yeni bir
LazyLibrary
tü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ıkA
veB
'nin genel özdeğerlerini (eigen
: ve özvektörlerini) verimli bir şekilde hesaplamaktadır. Not: İkinci argümanbunchkaufman
veyalu
'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) bunchkaufman
vebunchkaufman!
artık herhangi birAbstractFloat
,Rational
ve bunların karmaşık varyantları için çalışıyor.bunchkaufman
artıkInteger
türlerini destekliyor, bu daRational{BigInt}
'e içsel bir dönüşüm yaparak mümkün oluyor. Gerçek simetrik veya Hermit matrisininBunchKaufman
faktörizasyon nesnesi tarafından verilen diyagonal faktörün inersiyasını hesaplayan yeniinertia
fonksiyonu 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 aMyMatrix
with 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). lu
veissuccess(::LU)
artıkallowsingular
anahtar argümanını kabul ediyor.true
olarak 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
rand
artıkTuple
türleri üzerinde örnekleme yapmayı destekliyor (#35856, #50251).rand
artıkPair
türleri üzerinde örnekleme yapmayı destekliyor (#28705).- Negatif tam sayı tohumları artık
Random
tarafından sağlanan RNG'leri tohumlamak için kullanılabilir (#51416). Random
iç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 = false
komutunu 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
pmap
artık varsayılan olarak birCachingPool
kullanıyor (#33892).
Deprecated or removed
Base.map
,Iterators.map
veforeach
tek 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).
tput
artı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, sistemdeterminfo
mevcut olmadığında daha iyi bir REPL kullanıcı deneyimi sunmaktadır. Julia, veritabanını satmadanMakefile
seçeneğiWITH_TERMINFO=0
kullanı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).