From c04cad3ba921deb086d19e2de2526af4854add75 Mon Sep 17 00:00:00 2001 From: Erlang/OTP Date: Thu, 2 Jun 2016 11:39:07 +0200 Subject: Revert "Prepare release" This reverts commit e020f75c10410a6943cd055bfa072a2641eab7da. --- lib/stdlib/doc/src/notes.xml | 293 ------------------------------------------- 1 file changed, 293 deletions(-) (limited to 'lib/stdlib') diff --git a/lib/stdlib/doc/src/notes.xml b/lib/stdlib/doc/src/notes.xml index 8e989042db..87f5335723 100644 --- a/lib/stdlib/doc/src/notes.xml +++ b/lib/stdlib/doc/src/notes.xml @@ -31,299 +31,6 @@

This document describes the changes made to the STDLIB application.

-
STDLIB 3.0 - -
Fixed Bugs and Malfunctions - - -

Fix a race bug affecting dets:open_file/2. -

-

- Own Id: OTP-13260 Aux Id: seq13002

-
- -

Don't search for non-existing Map keys twice

-

For maps:get/2,3 and maps:find/2, - searching for an immediate key, e.g. an atom, in a small - map, the search was performed twice if the key did not - exist.

-

- Own Id: OTP-13459

-
- -

- Avoid stray corner-case math errors on Solaris, e.g. an - error is thrown on undeflows in exp() and pow() when it - shouldn't be.

-

- Own Id: OTP-13531

-
- -

Fix linting of map key variables

-

Map keys cannot be unbound and then used in parallel - matching.

-

Example: #{ K := V } = #{ k := K } = M. This - is illegal if 'K' is not bound.

-

- Own Id: OTP-13534 Aux Id: ERL-135

-
- -

- Fixed a bug in re on openbsd where sometimes re:run would - return an incorrect result.

-

- Own Id: OTP-13602

-
- -

- To avoid potential timer bottleneck on supervisor - restart, timer server is no longer used when the - supervisor is unable to restart a child.

-

- Own Id: OTP-13618 Aux Id: PR-1001

-
-
-
- - -
Improvements and New Features - - -

The types of The Abstract Format in the - erl_parse module have been refined.

-

- Own Id: OTP-10292

-
- -

Undocumented syntax for function specifications, - -spec F/A :: Domain -> Range, has been removed - (without deprecation).

Using the - is_subtype(V, T) syntax for constraints (in - function specifications) is no longer documented, and the - newer syntax V :: T should be used instead. The - Erlang Parser still recognizes the is_subtype - syntax, and will continue to do so for some time.

-

- *** POTENTIAL INCOMPATIBILITY ***

-

- Own Id: OTP-11879

-
- -

The 'random' module has been deprecated. Use - the 'rand' module instead.

-

- Own Id: OTP-12502 Aux Id: OTP-12501

-
- -

Background: In record fields with a type declaration - but without an initializer, the Erlang parser inserted - automatically the singleton type 'undefined' to - the list of declared types, if that value was not present - there. That is, the record declaration:

-

- -record(rec, {f1 :: float(), f2 = 42 :: integer(), f3 :: - some_mod:some_typ()}).

-

was translated by the parser to:

-

- -record(rec, {f1 :: float() | 'undefined', f2 = 42 :: - integer(), f3 :: some_mod:some_typ() | 'undefined'}).

-

The rationale for this was that creation of a "dummy" - #rec{} record should not result in a warning from - dialyzer that, for example, the implicit initialization - of the #rec.f1 field violates its type - declaration.

-

Problems: This seemingly innocent action has some - unforeseen consequences.

-

For starters, there is no way for programmers to - declare that e.g. only floats make sense for the - f1 field of #rec{} records when there is no - "obvious" default initializer for this field. (This also - affects tools like PropEr that use these declarations - produced by the Erlang parser to generate random - instances of records for testing purposes.)

-

It also means that dialyzer does not warn if e.g. an - is_atom/1 test or something more exotic like an - atom_to_list/1 call is performed on the value of - the f1 field.

-

Similarly, there is no way to extend dialyzer to warn - if it finds record constructions where f1 is not - initialized to some float.

-

Last but not least, it is semantically problematic - when the type of the field is an opaque type: creating a - union of an opaque and a structured type is very - problematic for analysis because it fundamentally breaks - the opacity of the term at that point.

-

Change: To solve these problems the parser will not - automatically insert the 'undefined' value - anymore; instead the user has the option to choose the - places where this value makes sense (for the field) and - where it does not and insert the | 'undefined' - there manually.

-

Consequences of this change: This change means that - dialyzer will issue a warning for all places where - records with uninitialized fields are created and those - fields have a declared type that is incompatible with - 'undefined' (e.g. float()). This warning - can be suppressed easily by adding | 'undefined' - to the type of this field. This also adds documentation - that the user really intends to create records where this - field is uninitialized.

-

- *** POTENTIAL INCOMPATIBILITY ***

-

- Own Id: OTP-12719

-
- -

Remove deprecated functions in the modules - erl_scan and erl_parse.

-

- Own Id: OTP-12861

-
- -

The pre-processor can now expand the ?FUNCTION_NAME - and ?FUNCTION_ARITY macros.

-

- Own Id: OTP-13059

-
- -

A new behaviour gen_statem has been - implemented. It has been thoroughly reviewed, is stable - enough to be used by at least two heavy OTP applications, - and is here to stay. But depending on user feedback, we - do not expect but might find it necessary to make minor - not backwards compatible changes into OTP-20.0, so its - state can be designated as "not quite experimental"... -

The gen_statem behaviour is intended to - replace gen_fsm for new code. It has the same - features and add some really useful:

State code is gathered - The state can be any term Events can - be postponed Events can be self - generated A reply can be sent from a later - state There can be multiple sys traceable - replies

The callback model(s) for - gen_statem differs from the one for - gen_fsm, but it is still fairly easy to rewrite - from gen_fsm to gen_statem.

-

- Own Id: OTP-13065 Aux Id: PR-960

-
- -

- Optimize binary:split/2 and binary:split/3 with native - BIF implementation.

-

- Own Id: OTP-13082

-
- -

Background: The types of record fields have since R12B - been put in a separate form by epp:parse_file(), - leaving the record declaration form untyped. The separate - form, however, does not follow the syntax of type - declarations, and parse transforms inspecting - -type() attributes need to know about the special - syntax. Since the compiler stores the return value of - epp:parse_file() as debug information in the - abstract code chunk ("Abst" or - abstract_code), tools too need to know about the - special syntax, if they inspect -type() attributes - in abstract code.

-

Change: No separate type form is created by - epp:parse_file(), but the type information is kept - in the record fields. This means that all parse - transforms and all tools inspecting -record() - declarations need to recognize {typed_record_field, - Field, Type}.

-

- *** POTENTIAL INCOMPATIBILITY ***

-

- Own Id: OTP-13148

-
- -

- Unsized fields of the type bytes in binary - generators are now forbidden. (The other ways of writing - unsized fields, such as binary, are already - forbidden.)

-

- Own Id: OTP-13152

-
- -

The type map() is built-in, and cannot be - redefined.

-

- Own Id: OTP-13153

-
- -

Let dets:open_file() exit with a badarg - message if given a raw file name (a binary).

-

- Own Id: OTP-13229 Aux Id: ERL-55

-
- -

Add filename:basedir/2,3

basedir - returns suitable path(s) for 'user_cache', 'user_config', - 'user_data', 'user_log', 'site_config' and 'site_data'. - On linux and linux like systems the paths will respect - the XDG environment variables.

-

- Own Id: OTP-13392

-
- -

There are new preprocessor directives - -error(Term) and -warning(Term) to cause a - compilation error or a compilation warning, - respectively.

-

- Own Id: OTP-13476

-
- -

- Optimize '++' operator and lists:append/2 - by using a single pass to build a new list while checking - for properness.

-

- Own Id: OTP-13487

-
- -

- Add maps:update_with/3,4 and maps:take/2

-

- Own Id: OTP-13522 Aux Id: PR-1025

-
- -

lists:join/2 has been added. Similar to - string:join/2 but works with arbitrary lists.

-

- Own Id: OTP-13523

-
- -

Obfuscate asserts to make Dialyzer shut up.

-

- Own Id: OTP-13524 Aux Id: PR-1002

-
- -

- Relax translation of initial calls in proc_lib, - i.e. remove the restriction to only do the translation - for gen_server and gen_fsm. This enables - user defined gen based generic callback modules to - be displayed nicely in c:i() and observer.

-

- Own Id: OTP-13623

-
- -

- Lower ETS hash load factor to improve lookup performance - at the cost of less than one word per object.

-

- Own Id: OTP-13642

-
-
-
- -
-
STDLIB 2.8
Fixed Bugs and Malfunctions -- cgit v1.2.3