Julia v1.11 Release Notes
New language features
- Neuer
Memory
-Typ, der einen niedrigeren Container als Alternative zuArray
bereitstellt.Memory
hat weniger Overhead und einen schnelleren Konstruktor, was es zu einer guten Wahl für Situationen macht, die nicht alle Funktionen vonArray
benötigen (z. B. mehrere Dimensionen). Der Großteil desArray
-Typs ist jetzt in Julia aufMemory
implementiert, was zu erheblichen Geschwindigkeitssteigerungen für mehrere Funktionen (z. B.push!
) sowie zu wartbarerem Code führt (#51319). public
is a new keyword. Symbols marked withpublic
are considered public API. Symbols marked withexport
are now also treated as public API. The difference betweenpublic
andexport
is thatpublic
names do not become available whenusing
a package/module (#50105).ScopedValue
implementiert dynamischen Scope mit Vererbung über Aufgaben hinweg (#50958).Manifest.toml
-Dateien können jetzt im FormatManifest-v{major}.{minor}.toml
umbenannt werden, um von der angegebenen Julia-Version bevorzugt ausgewählt zu werden. Das heißt, im selben Ordner würde eineManifest-v1.11.toml
von v1.11 verwendet werden undManifest.toml
von jeder anderen Julia-Version. Dies erleichtert die Verwaltung von Umgebungen für mehrere Julia-Versionen zur gleichen Zeit (#43845).- Unterstützung für Unicode 15.1 (#51799).
Language changes
- Während der Vorcompilierung werden
atexit
-Hooks jetzt vor dem Speichern der Ausgabedatei ausgeführt. Dies ermöglicht es den Benutzern, den Hintergrundstatus sicher abzubauen (wie das Schließen vonTimer
s und das Senden von Trennungsbenachrichtigungen an Herzschlagaufgaben) und andere Ressourcen zu bereinigen, wenn das Programm mit dem Beenden beginnen möchte. - Die Codeabdeckung und das Malloc-Tracking werden während der Vorabkompilierungsphase des Pakets nicht mehr generiert. Darüber hinaus werden in diesen Modi jetzt pkgimage-Caches für Pakete verwendet, die nicht verfolgt werden. Das bedeutet, dass die Abdeckungstests (der Standard für
julia-actions/julia-runtest
) standardmäßig pkgimage-Caches für alle anderen Pakete als das getestete Paket verwenden, was wahrscheinlich schnellere Testausführungen zur Folge hat (#52123). - Das Festlegen eines Pfades in
JULIA_DEPOT_PATH
führt jetzt dazu, dass leere Zeichenfolgen erweitert werden, um das Standardbenutzerdepot (#51448) zu omittieren. - Precompilation-Cache-Dateien sind jetzt umsetzbar, und ihre Gültigkeit wird jetzt durch einen Inhalts-Hash ihrer Quelldateien anstelle ihres
mtime
verifiziert (#49866). - Erweiterungen können jetzt von anderen Erweiterungen abhängen, wenn ihre Trigger alle Trigger einer Erweiterung enthalten, von der sie abhängen möchten (+ mindestens einen weiteren Trigger). Erweiterungen, die diese Anforderung nicht erfüllen, ist es jetzt untersagt,
Base.get_extension
während der Vorabkompilierung zu verwenden, um Erweiterungszyklen zu verhindern #55557.
Compiler/Runtime improvements
- Aktualisierte GC-Heuristiken zur Zählung der zugewiesenen Seiten anstelle einzelner Objekte (#50144).
- Added support for annotating
Base.@assume_effects
on code blocks (#52400).
Command-line option changes
- Der Einstiegspunkt für Julia wurde auf
Main.main(args)
standardisiert. Dies muss ausdrücklich mit dem@main
-Makro aktiviert werden (siehe die Dokumentation für weitere Details). Wenn dies aktiviert ist undjulia
aufgerufen wird, um ein Skript oder einen Ausdruck auszuführen (d.h. mitjulia script.jl
oderjulia -e expr
), wirdjulia
anschließend automatisch die FunktionMain.main
ausführen. Dies soll die Arbeitsabläufe von Skripten und Kompilierungen vereinheitlichen, bei denen das Laden von Code im Compiler und die Ausführung vonMain.main
im resultierenden ausführbaren Programm stattfinden kann. Für die interaktive Nutzung gibt es keinen semantischen Unterschied zwischen der Definition einermain
-Funktion und der direkten Ausführung des Codes am Ende des Skripts (#50974). - Die
--compiled-modules
und--pkgimages
Flags können jetzt aufexisting
gesetzt werden, was dazu führt, dass Julia vorhandene Cache-Dateien in Betracht zieht, jedoch keine neuen erstellt (#50586, #52573). - Das
--project
Argument akzeptiert jetzt@script
, um einen Pfad zu einem Verzeichnis mit einer Project.toml relativ zur übergebenen Skriptdatei anzugeben.--project=@script/foo
für das Unterverzeichnisfoo
. Wenn kein Pfad angegeben wird (d.h.--project=@script
), dann wird (wie bei--project=@.
) das Verzeichnis und seine übergeordneten Verzeichnisse nach einer Project.toml durchsucht (#50864 und #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
- Es gibt ein neues
Makefile
, um Julia und LLVM unter Verwendung der Strategien für profilgesteuerte und Linkzeitoptimierungen (PGO und LTO) zu erstellen. Siehecontrib/pgo-lto/Makefile
(#45641).
New library functions
- Drei neue Typen rund um die Idee von Text mit "Annotationen" (
Pair{Symbol, Any}
-Einträgen, z.B.:lang => "en"
oder:face => :magenta
). Diese Annotationen werden bei Operationen (z.B. String-Verkettung mit*
) erhalten, wenn möglich.AnnotatedString
ist ein neuerAbstractString
-Typ. Er umschließt einen zugrunde liegenden String und ermöglicht es, Anmerkungen an Regionen des Strings anzuhängen. Dieser Typ wird in der neuenStyledStrings
-Standardbibliothek umfassend verwendet, um Styling-Informationen zu halten.AnnotatedChar
ist ein neuerAbstractChar
-Typ. Er umschließt ein anderes Zeichen und hält eine Liste von Annotationen, die darauf zutreffen.AnnotatedIOBuffer
ist ein neuerIO
-Typ, der einIOBuffer
nachahmt, aber spezialisierteread
/write
-Methoden für annotierte Inhalte hat. Dies kann sowohl als eine Art "String-Builder" als auch als Verbindung zwischen annotierten und nicht annotierten Inhalten betrachtet werden.
in!(x, s::AbstractSet)
gibt zurück, obx
ins
ist, und fügtx
ins
ein, wenn nicht (#45156, #51636).- Die neue
Libc.mkfifo
-Funktion umschließt diemkfifo
-C-Funktion auf Unix-Plattformen (#34587). logrange(start, stop; length)
makes a range of constant ratio, instead of constant step (#39071)copyuntil(out, io, delim)
undcopyline(out, io)
kopieren Daten in einenout::IO
-Stream (#48273).eachrsplit(string, pattern)
iteriert über die aufgeteilten Teilstrings von rechts nach links (#51646).Sys.username()
kann verwendet werden, um den Benutzernamen des aktuellen Benutzers zurückzugeben (#51897).Sys.isreadable(), Sys.iswritable()
können verwendet werden, um zu überprüfen, ob der aktuelle Benutzer Zugriffsberechtigungen hat, die das Lesen und Schreiben jeweils erlauben. (#53320).GC.logging_enabled()
kann verwendet werden, um zu testen, ob das GC-Logging überGC.enable_logging
aktiviert wurde (#51647).IdSet
wird jetzt von Base exportiert und als öffentlich betrachtet (#53262).@time
berichtet jetzt über die Anzahl von Sperrkonflikten, bei denen einReentrantLock
warten musste, sowie ein neues Makro@lock_conflicts
, das diese Anzahl zurückgibt (#52883).- Das neue Makro
Base.Cartesian.@ncallkw
ist analog zuBase.Cartesian.@ncall
, ermöglicht jedoch das Hinzufügen von Schlüsselwortargumenten zum Funktionsaufruf (#51501). - Neue Funktion
Docs.hasdoc(module, symbol)
zeigt an, ob ein Name eine Docstring hat (#52139). - Neue Funktion
Docs.undocumented_names(module)
gibt die undokumentierten öffentlichen Namen eines Moduls zurück (#52413).
New library features
invmod(n, T)
wobeiT
ein nativer Ganzzahltyp ist, berechnet jetzt die modulare Inverse vonn
im modularen Ganzzahlring, denT
definiert (#52180).invmod(n)
ist eine Abkürzung fürinvmod(n, typeof(n))
für native Ganzzahltypen (#52180).replace(string, pattern...)
unterstützt jetzt ein optionalesIO
-Argument, um die Ausgabe an einen Stream zu schreiben, anstatt einen String zurückzugeben (#48625).- New methods
allequal(f, itr)
andallunique(f, itr)
taking a predicate function (#47679). sizehint!(s, n)
unterstützt jetzt ein optionalesshrink
-Argument, um das Schrumpfen zu deaktivieren (#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). - Nachdem ein Prozess beendet ist, wird
closewrite
nicht mehr automatisch auf dem übergebenen Stream aufgerufen. Rufen Sie stattdessenwait
auf dem Prozess auf, um sicherzustellen, dass der Inhalt vollständig geschrieben ist, und rufen Sie dannclosewrite
manuell auf, um Datenrennen zu vermeiden, oder verwenden Sie die Callback-Form vonopen
, um all dies automatisch zu handhaben (#52461). @timed
gibt jetzt zusätzlich die vergangene Kompilierungs- und Rekompilierungszeit zurück (#52889).filter
kann jetzt auf einNamedTuple
wirken (#50795).Iterators.cycle(iter, n)
durchläuftiter
eine feste Anzahl von Malen, anstatt für immer (#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)
ermöglicht den Wechsel von der Verwendung vonmtime
zu Hashing der Prekompilierungsabhängigkeit, um die Relokalisierbarkeit von Prekompilierungs-Caches wiederherzustellen (#51798).
Standard library changes
- Die Fallback-Methode
write(::IO, ::AbstractArray)
rief zuvor rekursivwrite
für jedes Element auf, schreibt jetzt jedoch die In-Memory-Darstellung jedes Wertes. Zum Beispiel schreibtwrite(io, 'a':'b')
jetzt 4 Bytes für jedes Zeichen, anstatt die UTF-8-Darstellung jedes Zeichens zu schreiben. Das neue Format ist mit dem vonArray
verwendeten kompatibel, was es ermöglicht,read!
zu verwenden, um die Daten zurückzubekommen (#42593). - Es ist nicht möglich,
length
für zustandsbehaftete Iteratoren auf eine allgemein konsistente Weise zu definieren. Das Potenzial für stillschweigend falsche Ergebnisse fürStateful
-Iteratoren wird durch das Löschen derlength(::Stateful)
-Methode angesprochen. Der letzte Typparameter vonStateful
ist ebenfalls verschwunden. Problem: (#47790), PR: (#51747).
Package Manager
- Es ist jetzt möglich, "Quellen" für Pakete in einem
[sources]
-Abschnitt in Project.toml anzugeben. Dies kann verwendet werden, um nicht registrierte normale oder Testabhängigkeiten hinzuzufügen. - Pkg befolgt jetzt die
[compat]
-Grenzen fürjulia
und gibt einen Fehler aus, wenn die Version der laufenden Julia-Binärdatei nicht mit den Grenzen inProject.toml
übereinstimmt. Pkg hat diese Kompatibilität immer beachtet, wenn es um Registry-Pakete ging. Diese Änderung betrifft hauptsächlich lokale Pakete. pkg> add
undPkg.add
fügen jetzt Kompatibilitätseinträge für neue direkte Abhängigkeiten hinzu, wenn die aktive Umgebung ein Paket ist (einename
unduuid
-Eintragung hat).- Abhängigkeiten können jetzt direkt als schwache Abhängigkeiten oder Extras über die
pkg> add --weak/extra Foo
oderPkg.add("Foo", target=:weakdeps/:extras)
Formen hinzugefügt werden.
StyledStrings
- Eine neue Standardbibliothek zur umfassenderen und strukturierten Handhabung von Styling (#49586).
- Die neue
Faces
-Struktur dient als Container für Informationen zur Textgestaltung (denken Sie an Schriftart sowie Farbe und Dekoration) und bietet ein Framework, das einen bequemen, erweiterbaren (überaddface!
) und anpassbaren (mit derFaces.toml
des Benutzers undloadfaces!
) Ansatz für gestaltete Inhalte bietet (#49586). - Das neue
@styled_str
String-Makro bietet eine bequeme Möglichkeit, einAnnotatedString
mit verschiedenen Schriftarten oder anderen Attributen zu erstellen (#49586).
Libdl
- Ein neuer
LazyLibrary
-Typ wird ausLibdl
exportiert, um beim Erstellen von verketteten faulen Bibliotheksladungen verwendet zu werden, hauptsächlich zur Verwendung innerhalb von JLLs (#50074).
LinearAlgebra
cbrt(::AbstractMatrix{<:Real})
ist jetzt definiert und gibt die reellwertigen Matrixwürzel von reellwertigen Matrizen zurück (#50661).eigvals/eigen(A, bunchkaufman(B))
undeigvals/eigen(A, lu(B))
, die die Bunchkaufman (LDL) und LU-Zerlegung vonB
nutzen, berechnen jetzt effizient die verallgemeinerten Eigenwerte (eigen
: und Eigenvektoren) vonA
undB
. Hinweis: Das zweite Argument ist die Ausgabe vonbunchkaufman
oderlu
(#50471).- Es gibt jetzt einen spezialisierten Dispatch für
eigvals/eigen(::Hermitian{<:Tridiagonal})
, der eine Ähnlichkeitstransformation durchführt, um eine reelle symmetrische tridiagonale Matrix zu erstellen, und diese mit den LAPACK-Routinen löst (#49546). - Strukturierte Matrizen behalten jetzt entweder die Achsen des Elternteils (für
Symmetrisch
/Hermitesch
/AbstractTriangular
/Obere Hessenberg
) oder die der Hauptdiagonale (für bandierte Matrizen) (#52480). bunchkaufman
undbunchkaufman!
funktionieren jetzt für jedenAbstractFloat
,Rational
und deren komplexe Varianten.bunchkaufman
unterstützt jetztInteger
-Typen, indem eine interne Umwandlung inRational{BigInt}
vorgenommen wird. Eine neue Funktioninertia
wurde hinzugefügt, die die Inertie des diagonalen Faktors berechnet, der durch dasBunchKaufman
-Faktorisierungsobjekt einer reellen symmetrischen oder hermiteschen Matrix gegeben ist. Für komplexe symmetrische Matrizen berechnetinertia
nur die Anzahl der Null-Eigenwerte des diagonalen Faktors (#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
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
unterstützt jetzt das Sampling überTuple
-Typen (#35856, #50251).rand
unterstützt jetzt das Sampling überPair
-Typen (#28705).- Beim Seed von RNGs, die von
Random
bereitgestellt werden, können jetzt negative Ganzzahl-Seed verwendet werden (#51416). - Seedbare Zufallszahlengeneratoren aus
Random
können jetzt mit einem String gesät werden, z.B.seed!(rng, "a random seed")
(#51527).
REPL
- Tab-Vervollständigungs-Hinweise werden jetzt in hellerer Schrift angezeigt, während Sie im REPL tippen. Um dies zu deaktivieren, setzen Sie
Base.active_repl.options.hint_tab_completes = false
interaktiv oder in startup.jl:
(#51229).if VERSION >= v"1.11.0-0" atreplinit() do repl repl.options.hint_tab_completes = false end end
- Meta-M mit einem leeren Prompt schaltet jetzt das kontextuelle Modul zwischen dem vorherigen Nicht-Haupt-Kontextmodul und dem Hauptmodul um, sodass das Hin- und Herwechseln einfach ist (#51616, #52670).
Dates
Die undocumented Funktion adjust
wird nicht mehr exportiert, ist aber jetzt dokumentiert (#53092).
Statistics
- Statistik ist jetzt eine erweiterbare Standardbibliothek (#46501).
Distributed
pmap
verwendet jetzt standardmäßig einenCachingPool
(#33892).
Deprecated or removed
Base.map
,Iterators.map
undforeach
haben ihre Methoden mit einem einzelnen Argument verloren (#52631).
External dependencies
- Die libuv-Bibliothek wurde von der Version v1.44.2 auf v1.48.0 aktualisiert (#49937).
tput
wird nicht mehr aufgerufen, um die Terminalfähigkeiten zu überprüfen; es wurde durch einen reinen Julia terminfo-Parser ersetzt (#50797).- Die Terminal-Informationsdatenbank,
terminfo
, wird jetzt standardmäßig mitgeliefert, was eine bessere REPL-Benutzererfahrung bietet, wennterminfo
nicht auf dem System verfügbar ist. Julia kann ohne das Mitliefern der Datenbank gebaut werden, indem die Makefile-OptionWITH_TERMINFO=0
verwendet wird. (#55411)
Tooling Improvements
- CI führt jetzt eine begrenzte automatische Rechtschreibfehlererkennung bei allen PRs durch. Wenn Sie einen PR mit einem fehlerhaften Rechtschreibfehler-CI-Check zusammenführen, werden die gemeldeten Rechtschreibfehler in zukünftigen CI-Durchläufen bei PRs, die dieselben Dateien bearbeiten, automatisch ignoriert (#51704).