Age | Commit message (Collapse) | Author |
|
* maint:
Documentation: use behaviour(ssh_daemon_channel)
Fix minor typo in compile:forms/1 doc
|
|
Binary construction that mixes long literal strings with variables
will make Dialyzer slow. Example:
<<"long string (thousand of characters)",T/binary>>
The string literals in binary construction is translated to one binary
segment per character; all those segments will slow down Dialyzer.
We can speed up Dialyzer if we combine several characters (up to 256)
to a signle segment in the binary. It will also slightly speed up the
compiler.
This optimization will make core listings file with binary strings
harder to read, but they were not that easy to read before this
change.
ERL-308
|
|
|
|
This allow languages such as Elixir and LFE to attach
extra chunks to the .beam file without having to parse
the beam file after compilation.
This commit also cleans up the interface to beam_asm,
allowing chunks to be passed from the compiler without
a need to change beam_asm API on every new chunk.
|
|
* josevalim/atu8-chunk/PR-1078/OTP-14178:
Add new AtU8 beam chunk
|
|
The new chunk stores atoms encoded in UTF-8.
beam_lib has also been modified to handle the new
'utf8_atoms' attribute while the 'atoms' attribute
may be a missing chunk from now on.
The binary_to_atom/2 BIF can now encode any utf8
binary with up to 255 characters.
The list_to_atom/1 BIF can now accept codepoints
higher than 255 with up to 255 characters (thanks
to Björn Gustavsson).
|
|
|
|
|
|
* egil/cuddle-tests:
stdlib: Increase timetrap for rand_SUITE
common_test: Increase timetrap for cth_hooks_SUITE
compiler: Increase timetrap timeouts for lc_SUITE
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Also slightly refactor the code to simplify the types.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
The compiler passes always Options as list to parse_transform/2.
There is no need accept a non-list.
There is also no need to handle an improper Options list. The compiler
itself will crash if the Options list is improper.
|
|
Since Index =:= OldIndex and OldUniq =:= 0, there is no need to
store OldIndex and OldUniq in the internal data structure for the
lambda table.
|
|
* maint:
dialyzer: Compact 'file' annotations in Core code
dialyzer: Try to reduce memory usage
dialyzer: Use less memory when translating contracts
dialyzer: Use maps instaed of dict
dialyzer: Use maps instead of dict for module contracts map
dialyzer: Compress a few more ETS tables
dialyzer: Optimize memory consumption
dialyzer: Reduce memory consumption during 'remote' phase
dialyzer: Update code for finding parallelism
compiler: Do not spawn process when dialyzing
dialyzer: Reduce ETS usage during the typesig phase
dialyzer: Optimize graph condensation
dialyzer: Do not send full PLTs as messages
|
|
Memory consumption is reduced during the compilation phase by keeping
the Core parse tree shared. In particular the file annotation takes a
lot of memory when not shared.
|
|
Code with huge literal case expressions such as the following would
compile very slowly:
case "Very long literal string (thousands of characters)..." of
.
.
.
end.
The reason is that in the case optimization each character in the
string would be handled individually. Fix this bug by handling
literals all at once.
|
|
The compiler would keep the data structures for two compiler
passes in memory. That could increase the maximum amount of
memory that the compiler uses, and could also have a negative
impact on performance (terms that would not be used again would be
copied by a garbage collection).
Here is an example that shows how the previous version of the code
could get captured:
a_compiler_pass(Mod, St) ->
case Mod:module(St#compile.code, St#compile.options) of
{ok,Code} ->
{ok,St#compile{code=Code}};
...
The reference to the code from the previous pass will only be released
when St is updated. We can avoid the problem by passing the
current version of the code as a function argument:
a_compiler_pass(Mod, Code0, St) ->
case Mod:module(Code0, St#compile.options) of
{ok,Code} ->
{ok,Code,St};
...
In practice, this change does not seem to significantly speed up
the compiler, but it does not do any harm either. It should help
dialyzer in situations when dialyzer compiles several large modules
at the same time.
|
|
=== OTP-19.2 ===
Changed Applications:
- common_test-1.13
- compiler-7.0.3
- crypto-3.7.2
- dialyzer-3.0.3
- edoc-0.8.1
- erl_docgen-0.6.1
- erl_interface-3.9.2
- erts-8.2
- eunit-2.3.2
- hipe-3.15.3
- inets-6.3.4
- kernel-5.1.1
- mnesia-4.14.2
- observer-2.3
- odbc-2.12
- parsetools-2.1.4
- public_key-1.3
- runtime_tools-1.11
- sasl-3.0.2
- ssh-4.4
- ssl-8.1
- stdlib-3.2
- syntax_tools-2.1.1
- tools-2.9
- wx-1.8
Unchanged Applications:
- asn1-4.0.4
- cosEvent-2.2.1
- cosEventDomain-1.2.1
- cosFileTransfer-1.2.1
- cosNotification-1.2.2
- cosProperty-1.2.1
- cosTime-1.2.2
- cosTransactions-1.3.2
- debugger-4.2.1
- diameter-1.12.1
- eldap-1.2.2
- et-1.6
- gs-1.6.2
- ic-4.4.2
- jinterface-1.7.1
- megaco-3.18.1
- orber-3.8.2
- os_mon-2.4.1
- otp_mibs-1.1.1
- percept-0.9
- reltool-0.7.2
- snmp-5.2.4
- typer-0.9.11
- xmerl-1.3.12
* tag 'OTP-19.2':
Updated OTP version
Prepare release
Conflicts:
OTP_VERSION
|
|
The beam_type may pass move and recalculates test_heap instructions.
The number of live registers are not always the lowest. Minimize the
number of registers by running beam_utils:live_opt/1 one more time.
|
|
|
|
Add the option 'deterministic' to make it easier to
achieve reproducible builds.
This option omits the {options,...} and {source,...} tuples in
M:module_info(compile), because those options may contain absolute
paths.
The author of ERL-310 suggested that only compiler options that
may contain absolute paths (such as {i,...}) should be excluded. But I
find it confusing to keep only some options.
Alternatives considered: Always omitting this information. Since this
information has been available for a long time, that would probably
break some workflows. As an example that some people care about
{source,...}, 2d785c07fbf9 made it possible to give a compiler option
to set {source,...}.
ERL-310
|
|
* maint:
Update copyright-year
Conflicts:
lib/dialyzer/src/dialyzer.hrl
lib/dialyzer/src/dialyzer_options.erl
lib/dialyzer/test/opaque_SUITE_data/src/recrec/dialyzer.hrl
lib/dialyzer/test/opaque_SUITE_data/src/recrec/dialyzer_races.erl
lib/hipe/icode/hipe_icode.erl
lib/hipe/main/hipe.erl
lib/hipe/main/hipe.hrl.src
lib/hipe/main/hipe_main.erl
|
|
|
|
* egil/compiler/opt-maps-pattern-matching/OTP-14072:
compiler: Add regression tests
compiler: Optimize maps pattern matching
compiler: Allow for unaligned match argument in value groups
|
|
|
|
|
|
|
|
Update compiler documentation and remove superfluous erlc flags.
|
|
* egil/compiler/maps-warn-repeated-keys/OTP-14058:
compiler: Test repeated map key warnings
compiler: Warn for repeated identical map keys
|
|
|
|
|
|
|
|
|