Skip to content

Commit b3b07d7

Browse files
authored
Merge branch 'master' into iutf
2 parents 8563409 + 929a845 commit b3b07d7

File tree

208 files changed

+4700
-2695
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

208 files changed

+4700
-2695
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
/source-dist.tmp
1313
/source-dist.tmp1
1414

15+
*.expmap
1516
*.exe
1617
*.dll
1718
*.dwo

CONTRIBUTING.md

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,14 @@ At the moment, this should always be done with the following `compat` admonition
185185
186186
*By contributing code to Julia, you are agreeing to release it under the [MIT License](https://github.com/JuliaLang/julia/tree/master/LICENSE.md).*
187187
188-
The Julia community uses [GitHub issues](https://github.com/JuliaLang/julia/issues) to track and discuss problems, feature requests, and pull requests (PR). You can make pull requests for incomplete features to get code review. The convention is to prefix the pull request title with "WIP:" for Work In Progress, or "RFC:" for Request for Comments when work is completed and ready for merging. This will prevent accidental merging of work that is in progress.
188+
The Julia community uses [GitHub issues](https://github.com/JuliaLang/julia/issues) to track and discuss problems, feature requests, and pull requests (PR).
189+
190+
Issues and pull requests should have self explanatory titles such that they can be understood from the list of PRs and Issues.
191+
i.e. `Add {feature}` and `Fix {bug}` are good, `Fix #12345. Corrects the bug.` is bad.
192+
193+
You can make pull requests for incomplete features to get code review. The convention is to open these a draft PRs and prefix
194+
the pull request title with "WIP:" for Work In Progress, or "RFC:" for Request for Comments when work is completed and ready
195+
for merging. This will prevent accidental merging of work that is in progress.
189196
190197
Note: These instructions are for adding to or improving functionality in the base library. Before getting started, it can be helpful to discuss the proposed changes or additions on the [Julia Discourse forum](https://discourse.julialang.org) or in a GitHub issue---it's possible your proposed change belongs in a package rather than the core language. Also, keep in mind that changing stuff in the base can potentially break a lot of things. Finally, because of the time required to build Julia, note that it's usually faster to develop your code in stand-alone files, get it working, and then migrate it into the base libraries.
191198

HISTORY.md

Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,118 @@
1+
Julia v1.10 Release Notes
2+
=========================
3+
New language features
4+
---------------------
5+
6+
* JuliaSyntax.jl is now used as the default parser, providing better diagnostics and faster
7+
parsing. Set environment variable `JULIA_USE_NEW_PARSER` to `0` to switch back to the old
8+
parser if necessary (and if you find this necessary, please file an issue) ([#46372]).
9+
* `` (U+297A, `\leftarrowsubset`) and `` (U+2977, `\leftarrowless`)
10+
may now be used as binary operators with arrow precedence. ([#45962])
11+
12+
Language changes
13+
----------------
14+
15+
* When a task forks a child, the parent task's task-local RNG (random number generator) is no longer affected. The seeding of child based on the parent task also takes a more disciplined approach to collision resistance, using a design based on the SplitMix and DotMix splittable RNG schemes ([#49110]).
16+
* A new more-specific rule for methods resolves ambiguities containing Union{} in favor of
17+
the method defined explicitly to handle the Union{} argument. This makes it possible to
18+
define methods to explicitly handle Union{} without the ambiguities that commonly would
19+
result previously. This also lets the runtime optimize certain method lookups in a way
20+
that significantly improves load and inference times for heavily overloaded methods that
21+
dispatch on Types (such as traits and constructors).
22+
* The "h bar" `` (`\hslash` U+210F) character is now treated as equivalent to `ħ` (`\hbar` U+0127).
23+
* The `@simd` macro now has a more limited and clearer semantics, it only enables reordering and contraction
24+
of floating-point operations, instead of turning on all "fastmath" optimizations.
25+
If you observe performance regressions due to this change, you can recover previous behavior with `@fastmath @simd`,
26+
if you are OK with all the optimizations enabled by the `@fastmath` macro. ([#49405])
27+
* When a method with keyword arguments is displayed in the stack trace view, the textual
28+
representation of the keyword arguments' types is simplified using the new
29+
`@Kwargs{key1::Type1, ...}` macro syntax ([#49959]).
30+
31+
Compiler/Runtime improvements
32+
-----------------------------
33+
34+
* The `@pure` macro is now deprecated. Use `Base.@assume_effects :foldable` instead ([#48682]).
35+
* The mark phase of the Garbage Collector is now multi-threaded ([#48600]).
36+
* [JITLink](https://llvm.org/docs/JITLink.html) is enabled by default on Linux aarch64 when Julia is linked to LLVM 15 or later versions ([#49745]).
37+
This should resolve many segmentation faults previously observed on this platform.
38+
39+
Command-line option changes
40+
---------------------------
41+
42+
* New option `--gcthreads` to set how many threads will be used by the Garbage Collector ([#48600]).
43+
The default is set to `N/2` where `N` is the amount of worker threads (`--threads`) used by Julia.
44+
45+
New library functions
46+
---------------------
47+
* `tanpi` is now defined. It computes tan(πx) more accurately than `tan(pi*x)` ([#48575]).
48+
* `fourthroot(x)` is now defined in `Base.Math` and can be used to compute the fourth root of `x`.
49+
It can also be accessed using the unicode character ``, which can be typed by `\fourthroot<tab>` ([#48899]).
50+
* `Libc.memmove`, `Libc.memset`, and `Libc.memcpy` are now defined, whose functionality matches that of their respective C calls.
51+
* `Base.isprecompiled(pkg::PkgId)` to identify whether a package has already been precompiled ([#50218]).
52+
53+
New library features
54+
--------------------
55+
* The `initialized=true` keyword assignment for `sortperm!` and `partialsortperm!`
56+
is now a no-op ([#47979]). It previously exposed unsafe behavior ([#47977]).
57+
* `binomial(x, k)` now supports non-integer `x` ([#48124]).
58+
* A `CartesianIndex` is now treated as a "scalar" for broadcasting ([#47044]).
59+
* `printstyled` now supports italic output ([#45164]).
60+
* `parent` and `parentindices` support `SubString`s
61+
62+
Standard library changes
63+
------------------------
64+
65+
* `startswith` now supports seekable `IO` streams ([#43055])
66+
* printing integral `Rational`s will skip the denominator in `Rational`-typed IO context (e.g. in `Arrays`) ([#45396])
67+
68+
#### Package Manager
69+
70+
* `Pkg.precompile` now accepts `timing` as a keyword argument which displays per package timing information for precompilation (e.g. `Pkg.precompile(timing=true)`)
71+
72+
#### LinearAlgebra
73+
74+
* `AbstractQ` no longer subtypes to `AbstractMatrix`. Moreover, `adjoint(Q::AbstractQ)`
75+
no longer wraps `Q` in an `Adjoint` type, but instead in an `AdjointQ`, that itself
76+
subtypes `AbstractQ`. This change accounts for the fact that typically `AbstractQ`
77+
instances behave like function-based, matrix-backed linear operators, and hence don't
78+
allow for efficient indexing. Also, many `AbstractQ` types can act on vectors/matrices
79+
of different size, acting like a matrix with context-dependent size. With this change,
80+
`AbstractQ` has a well-defined API that is described in detail in the
81+
[Julia documentation](https://docs.julialang.org/en/v1/stdlib/LinearAlgebra/#man-linalg-abstractq)
82+
([#46196]).
83+
* Adjoints and transposes of `Factorization` objects are no longer wrapped in `Adjoint`
84+
and `Transpose` wrappers, respectively. Instead, they are wrapped in
85+
`AdjointFactorization` and `TranposeFactorization` types, which themselves subtype
86+
`Factorization` ([#46874]).
87+
* New functions `hermitianpart` and `hermitianpart!` for extracting the Hermitian
88+
(real symmetric) part of a matrix ([#31836]).
89+
* The `norm` of the adjoint or transpose of an `AbstractMatrix` now returns the norm of the
90+
parent matrix by default, matching the current behaviour for `AbstractVector`s ([#49020]).
91+
* `eigen(A, B)` and `eigvals(A, B)`, where one of `A` or `B` is symmetric or Hermitian,
92+
are now fully supported ([#49533])
93+
* `eigvals/eigen(A, cholesky(B))` now computes the generalized eigenvalues (`eigen`: and eigenvectors)
94+
of `A` and `B` via Cholesky decomposition for positive definite `B`. Note: The second argument is
95+
the output of `cholesky`.
96+
97+
#### Printf
98+
* Format specifiers now support dynamic width and precision, e.g. `%*s` and `%*.*g` ([#40105]).
99+
100+
#### REPL
101+
102+
* When stack traces are printed, the printed depth of types in function signatures will be limited
103+
to avoid overly verbose output ([#49795]).
104+
105+
#### Test
106+
107+
* The `@test_broken` macro (or `@test` with `broken=true`) now complains if the test expression returns a
108+
non-boolean value in the same way as a non-broken test. ([#47804])
109+
* When a call to `@test` fails or errors inside a function, a larger stacktrace is now printed such that the location of the test within a `@testset` can be retrieved ([#49451])
110+
111+
#### InteractiveUtils
112+
113+
* `code_native` and `@code_native` now default to intel syntax instead of AT&T.
114+
* `@time_imports` now shows the timing of any module `__init__()`s that are run ([#49529])
115+
1116
Julia v1.9 Release Notes
2117
========================
3118

LICENSE.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
MIT License
22

3-
Copyright (c) 2009-2022: Jeff Bezanson, Stefan Karpinski, Viral B. Shah, and other contributors: https://github.com/JuliaLang/julia/contributors
3+
Copyright (c) 2009-2023: Jeff Bezanson, Stefan Karpinski, Viral B. Shah, and other contributors: https://github.com/JuliaLang/julia/contributors
44

55
Permission is hereby granted, free of charge, to any person obtaining
66
a copy of this software and associated documentation files (the

Make.inc

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -188,15 +188,17 @@ JULIA_MINOR_VERSION := $(shell echo $(JULIA_VERSION) | cut -d'-' -f 1 | cut -d'.
188188
JULIA_PATCH_VERSION := $(shell echo $(JULIA_VERSION) | cut -d'-' -f 1 | cut -d'+' -f 1 | cut -d'.' -f 3)
189189

190190
# libjulia's SONAME will follow the format libjulia.so.$(SOMAJOR). Before v1.0.0,
191-
# SOMAJOR will be a two-decimal value, e.g. libjulia.so.0.5, whereas at and beyond
192-
# v1.0.0, SOMAJOR will be simply the major version number, e.g. libjulia.so.1
191+
# somajor was a two-decimal value (e.g. libjulia.so.0.5). During v1.0.x - v1.9.x,
192+
# somajor was simply the major version number (e.g. libjulia.so.1). Starting in
193+
# v1.10.0, somajor is major.minor again (e.g. libjulia.so.1.10)
193194
# The file itself will ultimately symlink to libjulia.so.$(SOMAJOR).$(SOMINOR)
194-
ifeq ($(JULIA_MAJOR_VERSION),0)
195195
SOMAJOR := $(JULIA_MAJOR_VERSION).$(JULIA_MINOR_VERSION)
196196
SOMINOR := $(JULIA_PATCH_VERSION)
197-
else
198-
SOMAJOR := $(JULIA_MAJOR_VERSION)
199-
SOMINOR := $(JULIA_MINOR_VERSION)
197+
198+
# This suffix affects libjulia's SONAME and the symbol version associated with
199+
# all of its exported symbols.
200+
ifdef SYMBOL_VERSION_SUFFIX
201+
SOMAJOR := $(SOMAJOR)_$(SYMBOL_VERSION_SUFFIX)
200202
endif
201203

202204
ifneq ($(NO_GIT), 1)
@@ -488,7 +490,7 @@ endif
488490

489491
JCFLAGS_COMMON := -std=gnu11 -pipe $(fPIC) -fno-strict-aliasing -D_FILE_OFFSET_BITS=64
490492
JCFLAGS_CLANG := $(JCFLAGS_COMMON)
491-
JCFLAGS_GCC := $(JCFLAGS_COMMON)
493+
JCFLAGS_GCC := $(JCFLAGS_COMMON) -fno-gnu-unique
492494

493495
# AArch64 needs this flag to generate the .eh_frame used by libunwind
494496
JCPPFLAGS_COMMON := -fasynchronous-unwind-tables
@@ -497,7 +499,7 @@ JCPPFLAGS_GCC := $(JCPPFLAGS_COMMON)
497499

498500
JCXXFLAGS_COMMON := -pipe $(fPIC) -fno-rtti -std=c++14
499501
JCXXFLAGS_CLANG := $(JCXXFLAGS_COMMON) -pedantic
500-
JCXXFLAGS_GCC := $(JCXXFLAGS_COMMON)
502+
JCXXFLAGS_GCC := $(JCXXFLAGS_COMMON) -fno-gnu-unique
501503

502504
DEBUGFLAGS_COMMON := -O0 -DJL_DEBUG_BUILD -fstack-protector
503505
DEBUGFLAGS_CLANG := $(DEBUGFLAGS_COMMON) -g
@@ -723,7 +725,7 @@ endif # OS Linux or FreeBSD
723725
endif # SANITIZE_MEMORY=1
724726
ifeq ($(SANITIZE_ADDRESS),1)
725727
SANITIZE_OPTS += -fsanitize=address
726-
SANITIZE_LDFLAGS += -fsanitize=address
728+
SANITIZE_LDFLAGS += -fsanitize=address -shared-libasan
727729
endif
728730
ifeq ($(SANITIZE_THREAD),1)
729731
SANITIZE_OPTS += -fsanitize=thread
@@ -1317,7 +1319,7 @@ ifeq (supported, $(shell echo $(IFUNC_DETECT_SRC) | $(CC) -Werror -x c - -S -o /
13171319
JCPPFLAGS += -DJULIA_HAS_IFUNC_SUPPORT=1
13181320
endif
13191321
JLDFLAGS += -Wl,-Bdynamic
1320-
OSLIBS += -Wl,--version-script=$(JULIAHOME)/src/julia.expmap
1322+
OSLIBS += -Wl,--version-script=$(BUILDROOT)/src/julia.expmap
13211323
ifneq ($(SANITIZE),1)
13221324
JLDFLAGS += -Wl,-no-undefined
13231325
endif
@@ -1342,7 +1344,7 @@ OSLIBS += -lelf -lkvm -lrt -lpthread -latomic
13421344
# See #21788
13431345
OSLIBS += -lgcc_s
13441346

1345-
OSLIBS += -Wl,--export-dynamic -Wl,--version-script=$(JULIAHOME)/src/julia.expmap \
1347+
OSLIBS += -Wl,--export-dynamic -Wl,--version-script=$(BUILDROOT)/src/julia.expmap \
13461348
$(NO_WHOLE_ARCHIVE)
13471349
endif
13481350

@@ -1357,7 +1359,7 @@ endif
13571359

13581360
ifeq ($(OS), WINNT)
13591361
HAVE_SSP := 1
1360-
OSLIBS += -Wl,--export-all-symbols -Wl,--version-script=$(JULIAHOME)/src/julia.expmap \
1362+
OSLIBS += -Wl,--export-all-symbols -Wl,--version-script=$(BUILDROOT)/src/julia.expmap \
13611363
$(NO_WHOLE_ARCHIVE) -lpsapi -lkernel32 -lws2_32 -liphlpapi -lwinmm -ldbghelp -luserenv -lsecur32 -latomic
13621364
JLDFLAGS += -Wl,--stack,8388608
13631365
ifeq ($(ARCH),i686)
@@ -1500,6 +1502,12 @@ endef
15001502
# Overridable in Make.user
15011503
WINE ?= wine
15021504

1505+
ifeq ($(BINARY),32)
1506+
HEAPLIM := --heap-size-hint=500M
1507+
else
1508+
HEAPLIM :=
1509+
endif
1510+
15031511
# many of the following targets must be = not := because the expansion of the makefile functions (and $1) shouldn't happen until later
15041512
ifeq ($(BUILD_OS), WINNT) # MSYS
15051513
spawn = $(1)

Makefile

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -237,6 +237,14 @@ JL_PRIVATE_LIBS-$(USE_SYSTEM_CSL) += libwinpthread
237237
else
238238
JL_PRIVATE_LIBS-$(USE_SYSTEM_CSL) += libpthread
239239
endif
240+
ifeq ($(SANITIZE),1)
241+
ifeq ($(USECLANG),1)
242+
JL_PRIVATE_LIBS-1 += libclang_rt.asan
243+
else
244+
JL_PRIVATE_LIBS-1 += libasan
245+
endif
246+
endif
247+
240248
ifeq ($(WITH_TRACY),1)
241249
JL_PRIVATE_LIBS-0 += libTracyClient
242250
endif

0 commit comments

Comments
 (0)