Julia v1.11 Release Notes
New language features
- Neuer
Memory-Typ, der einen niedrigeren Container als Alternative zuArraybereitstellt.Memoryhat weniger Overhead und einen schnelleren Konstruktor, was es zu einer guten Wahl für Situationen macht, die nicht alle Funktionen vonArraybenötigen (z. B. mehrere Dimensionen). Der Großteil desArray-Typs ist jetzt in Julia aufMemoryimplementiert, was zu erheblichen Geschwindigkeitssteigerungen für mehrere Funktionen (z. B.push!) sowie zu wartbarerem Code führt (#51319). publicis a new keyword. Symbols marked withpublicare considered public API. Symbols marked withexportare now also treated as public API. The difference betweenpublicandexportis thatpublicnames do not become available whenusinga package/module (#50105).ScopedValueimplementiert dynamischen Scope mit Vererbung über Aufgaben hinweg (#50958).Manifest.toml-Dateien können jetzt im FormatManifest-v{major}.{minor}.tomlumbenannt werden, um von der angegebenen Julia-Version bevorzugt ausgewählt zu werden. Das heißt, im selben Ordner würde eineManifest-v1.11.tomlvon v1.11 verwendet werden undManifest.tomlvon 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 vonTimers 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_PATHfü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
mtimeverifiziert (#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_extensionwä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_effectson 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 undjuliaaufgerufen wird, um ein Skript oder einen Ausdruck auszuführen (d.h. mitjulia script.jloderjulia -e expr), wirdjuliaanschließend automatisch die FunktionMain.mainausführen. Dies soll die Arbeitsabläufe von Skripten und Kompilierungen vereinheitlichen, bei denen das Laden von Code im Compiler und die Ausführung vonMain.mainim 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-modulesund--pkgimagesFlags können jetzt aufexistinggesetzt werden, was dazu führt, dass Julia vorhandene Cache-Dateien in Betracht zieht, jedoch keine neuen erstellt (#50586, #52573). - Das
--projectArgument akzeptiert jetzt@script, um einen Pfad zu einem Verzeichnis mit einer Project.toml relativ zur übergebenen Skriptdatei anzugeben.--project=@script/foofü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.@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
- 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.AnnotatedStringist 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.AnnotatedCharist ein neuerAbstractChar-Typ. Er umschließt ein anderes Zeichen und hält eine Liste von Annotationen, die darauf zutreffen.AnnotatedIOBufferist ein neuerIO-Typ, der einIOBuffernachahmt, 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, obxinsist, und fügtxinsein, 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_loggingaktiviert wurde (#51647).IdSetwird jetzt von Base exportiert und als öffentlich betrachtet (#53262).@timeberichtet jetzt über die Anzahl von Sperrkonflikten, bei denen einReentrantLockwarten musste, sowie ein neues Makro@lock_conflicts, das diese Anzahl zurückgibt (#52883).- Das neue Makro
Base.Cartesian.@ncallkwist 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)wobeiTein nativer Ganzzahltyp ist, berechnet jetzt die modulare Inverse vonnim modularen Ganzzahlring, denTdefiniert (#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
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). - Nachdem ein Prozess beendet ist, wird
closewritenicht mehr automatisch auf dem übergebenen Stream aufgerufen. Rufen Sie stattdessenwaitauf dem Prozess auf, um sicherzustellen, dass der Inhalt vollständig geschrieben ist, und rufen Sie dannclosewritemanuell auf, um Datenrennen zu vermeiden, oder verwenden Sie die Callback-Form vonopen, um all dies automatisch zu handhaben (#52461). @timedgibt jetzt zusätzlich die vergangene Kompilierungs- und Rekompilierungszeit zurück (#52889).filterkann jetzt auf einNamedTuplewirken (#50795).Iterators.cycle(iter, n)durchläuftitereine 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 vonmtimezu Hashing der Prekompilierungsabhängigkeit, um die Relokalisierbarkeit von Prekompilierungs-Caches wiederherzustellen (#51798).
Standard library changes
- Die Fallback-Methode
write(::IO, ::AbstractArray)rief zuvor rekursivwritefü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 vonArrayverwendeten kompatibel, was es ermöglicht,read!zu verwenden, um die Daten zurückzubekommen (#42593). - Es ist nicht möglich,
lengthfü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 vonStatefulist 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ürjuliaund 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> addundPkg.addfügen jetzt Kompatibilitätseinträge für neue direkte Abhängigkeiten hinzu, wenn die aktive Umgebung ein Paket ist (einenameunduuid-Eintragung hat).- Abhängigkeiten können jetzt direkt als schwache Abhängigkeiten oder Extras über die
pkg> add --weak/extra FoooderPkg.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.tomldes Benutzers undloadfaces!) Ansatz für gestaltete Inhalte bietet (#49586). - Das neue
@styled_strString-Makro bietet eine bequeme Möglichkeit, einAnnotatedStringmit verschiedenen Schriftarten oder anderen Attributen zu erstellen (#49586).
Libdl
- Ein neuer
LazyLibrary-Typ wird ausLibdlexportiert, 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 vonBnutzen, berechnen jetzt effizient die verallgemeinerten Eigenwerte (eigen: und Eigenvektoren) vonAundB. Hinweis: Das zweite Argument ist die Ausgabe vonbunchkaufmanoderlu(#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). bunchkaufmanundbunchkaufman!funktionieren jetzt für jedenAbstractFloat,Rationalund deren komplexe Varianten.bunchkaufmanunterstützt jetztInteger-Typen, indem eine interne Umwandlung inRational{BigInt}vorgenommen wird. Eine neue Funktioninertiawurde 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 berechnetinertianur 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 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). 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
randunterstützt jetzt das Sampling überTuple-Typen (#35856, #50251).randunterstützt jetzt das Sampling überPair-Typen (#28705).- Beim Seed von RNGs, die von
Randombereitgestellt werden, können jetzt negative Ganzzahl-Seed verwendet werden (#51416). - Seedbare Zufallszahlengeneratoren aus
Randomkö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 = falseinteraktiv 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
pmapverwendet jetzt standardmäßig einenCachingPool(#33892).
Deprecated or removed
Base.map,Iterators.mapundforeachhaben 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).
tputwird 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, wennterminfonicht auf dem System verfügbar ist. Julia kann ohne das Mitliefern der Datenbank gebaut werden, indem die Makefile-OptionWITH_TERMINFO=0verwendet 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).