Age | Commit message (Collapse) | Author |
|
This reverts commit df130102cdeca8d35fec95a0c926fd1cfec54eab.
|
|
|
|
OTP-15633
* siri/rsh-ssh/PR-1787:
Fix some missed comments about rsh
Document the restrictions on the -rsh command
Use ssh as the default remote shell
|
|
* solvip/stdlib/gen_statem/export-start-types:
Fix links within gen_statem doc
|
|
|
|
* solvip/stdlib/gen_statem/export-start-types:
Create a gen_statem type for enter_loop options
gen_statem exports types related to starting & naming
|
|
|
|
|
|
|
|
* maint:
Clarify the atomic guarantees for ets:update_counter()
|
|
The phrasing "no process can access the ETS table in the middle of the
operation" implies that the entire table is looked during
the operation, which is not true if `write_concurrency`
is enabled.
|
|
|
|
* maint:
stdlib: Fix a bug in the Erlang Pretty Printer
|
|
Long atom names in combination with <c><<>></c> could cause a crash.
|
|
* maint:
Updated OTP version
Prepare release
|
|
* maint-21:
Updated OTP version
Prepare release
|
|
* maint:
Update primary bootstrap
stdlib: Optimize formatted printing of terms
Conflicts:
bootstrap/lib/stdlib/ebin/io_lib.beam
bootstrap/lib/stdlib/ebin/io_lib_format.beam
bootstrap/lib/stdlib/ebin/io_lib_pretty.beam
|
|
maint
* hasse/stdlib/optimize_pretty_print/ERIERL-306/OTP-15573:
Update primary bootstrap
stdlib: Optimize formatted printing of terms
|
|
|
|
Add ETS docs about partially bound key traversal
|
|
|
|
|
|
Fix bug in binary:encode_unsigned causing a read of uninitialized memory
|
|
Try calling iolist_size() before calling string:length().
The reason is that calls to string:length/1 are slow when the argument
is not a list of integers (or contains UNICODE).
|
|
* maint:
Optimize calendar:gregorian_days_to_date/1
|
|
* FNickRU/stdlib/optimize_calendar/PR-2121/OTP-15572:
Optimize calendar:gregorian_days_to_date/1
|
|
Consider this pseudo code:
f(...) ->
Val = case Expr of
... ->
... ;
... ->
... ;
... ->
my_abort(something_went_wrong)
end,
%% Here follows code that uses Val.
.
.
.
my_abort(Reason) ->
throw({error,Reason}).
The first two clauses in the case will probably provide some
information about the type of the variable `Var`, information
that would be useful for optimizing the code that follows the
case.
However, the third clause would ruin everything. The call
to `my_abort/1` could return anything, and thus `Val` could
also have any type.
294d66a295f6 introduced module-level type analysis, which will in
general keep track of the return type of a local function
call. However, it does not improve the optimization for this specific
function. When a function never returns, that is, when its type is
`none`, it does not propagate the `none` type, but instead pretends
that the return type is `any`.
This commit extends the handling of functions that don't return to
properly handle the `none` type. Any instructions that directly
follows the function that does not return will be discarded, and the
call will be rewritten to a tail-recursive call.
For this specific example, it means that the type for `Val` deduced
from the first two clauses will be retained and can be used for
optimizing the code after the case.
|
|
|
|
Conflicts:
lib/ssl/doc/src/ssl.xml
lib/ssl/src/ssl.erl
lib/ssl/src/ssl_cipher_format.erl
lib/ssl/src/tls_handshake.erl
|
|
|
|
bmk/20190204/socket_as_nif/OTP-14831
|
|
This patch improves the performance of calendar:gregorian_days_to_date/1
by changing the algorithm for finding the year to log-logarithmic.
The old implementation has linear complexity, which makes function
too slow for large values.
For example:
There is an API that allows you to create events for future dates.
There are users of this API who, for some reasons, choose dates
very far in the future. In such conditions, function works very slow.
New implementation based on interpolation search, takes 1 or 2
iterations at most cases and free from such a flaw.
A unit test was also developed to illustrate the speed of a function
at large values.
|
|
The bug could be seen by running the test that is added by this commit
in a valgrind enabled emulator.
Co-authored-by: John Högberg <[email protected]>
|
|
as it has been made more relevant with the introduction of
write_concurrency for ordered_set.
|
|
|
|
Clarify ETS docs about table iterations
|
|
|
|
|
|
* sverker/fix-since-clauses/OTP-15460:
Fix "since" for all multi clause functions
|
|
* raimo/stdlib/gen_statem-optimization/OTP-15452:
correct: Work around a compiler mis-optimization
|
|
This was not a compiler optimization that misfired, rather that
the code neede separate case clauses for when the timer was
running and not, so to not call erlang:cancel_timer/1 nor
maps:remove/2 in the case clause where only
a map update was needed before recursion.
See the comment in loop_timouts_cancel/13
|
|
* raimo/stdlib/gen_statem-optimization/OTP-15452:
Write some more comments in the engine loop
Work around a compiler mis-optimization
Move out helper functions to engine loop
Handle #trans_opts{} fields in parse_actions() arguments
Optimize gen_statem engine loop
Modify generic_statem_transit benchmark
|
|
|
|
The common subexpression optimization accidentally caused
unnecessary spilling of live registers. A rather ugly
workaround can be found in loop_timeouts_cancel.
|
|
This strategy improves speed benchmarks and reduces the
amount of garbage that is produced.
More:
* Handle transition options as loop function arguments instead
of in a record.
* Shorten the state_enter loop and make it more efficient
by making it more part of the loop and less a loop restart.
* Simplify the internal timeout action handling somewhat.
|
|
* maint:
Fix erl_parse:af_constraint()
Fix erl_parse:af_fun_type()
Add literal character to erl_parse:abstract_type/0 type
|
|
Fixes in erl_parse:abstract_type/0 type
|
|
* maint:
Fix sorting in lists.xml
|
|
This is the result of going through all .xml files
with "clause_i" attributes and make sure
their "since" versions are correct.
|
|
Correction of type abstract_expr -> abstract_expr() in erl_parse
|