diff --git a/CHANGES.html b/CHANGES.html new file mode 100644 index 0000000..9bf27be --- /dev/null +++ b/CHANGES.html @@ -0,0 +1,529 @@ + + + + + + + + + + +
+ + +
+

0.5.0

+
+

Breaking changes

+

As many people have been using D:YAML from git master since the 0.4 release, each change +is prefixed by the year the change was introduced.

+
    +
  • 2014 Broke compatibility with all DMD versions before 2.066

    +
  • +
  • +
    2014 Loader API depending on std.stream is now deprecated and will be
    +

    removed in the next release.

    +
    +
    +
  • +
  • +
    2014 Loader.fromString(string) is now deprecated and replaced by
    +

    Loader.fromString(char[]), which will reuse and overwrite the input during +parsing. The string overload will be removed in the next release.

    +
    +
    +
  • +
  • +
    2012 Values in D:YAML are less 'dynamic-typed'. E.g. removing "42" won't
    +

    also remove 42. Such automatic conversion still happens e.g. in a foreach +over a mapping with a string key. The Node.as() method has a template +parameter to disable automatic conversion from strings to other types.

    +
    +
    +
  • +
+
+
+

API improvements

+
    +
  • Loader is now, by default, constructed from a non-const buffer containing YAML +data instead of a std.stream.Stream. D:YAML reuses and overwrites this buffer to +minimize memory allocations during parsing. Convenience API such as the Loader +constructor from a filename is unchanged although it loads the file to a buffer +internally.
  • +
  • Node.contains() method to check if a YAML sequence/mapping contains specified +value (as opposed to a key).
  • +
  • Node.containsKey() method to check if a YAML mapping contains specified key.
  • +
  • Node.isNull() property.
  • +
  • Node operator in analogous to associative array in.
  • +
  • Loader.fromString() method as a quick wrapper to parse YAML from a string.
  • +
  • dyaml.hacks module for potentially useful things YAML specification doesn't allow.
  • +
  • Most of the API is @safe or at least @trusted. Also pure and nothrow +where possible.
  • +
  • User-defined constructors can now also construct builtin YAML types.
  • +
  • Input is now validated at Loader construction to detect invalid UTF sequences early +and to minimize internal exception handling during parsing.
  • +
+
+
+

Other improvements

+
    +
  • D:YAML now works with a UTF-8 buffer internally. This decreases memory usage for UTF-8 +input, and UTF-32 inputs can be encoded into UTF-8 in-place without allocating. +UTF-16 inputs still need an allocation. This also gets rid of all dchar[]->char[] +conversions which were a significant source of GC allocations.
  • +
  • Less GC usage during YAML node construction.
  • +
  • The Scanner subsystems is now mostly @nogc; it never allocates memory for +token values, using slices into the input buffer instead.
  • +
  • Custom, @nogc UTF decoding/encoding code based on std.utf to enable more use +of @nogc in D:YAML internals and to improve performance.
  • +
  • Replaced std.stream.EndianStream with custom endian-fixing code.
  • +
  • D:YAML is now a DUB package.
  • +
  • Removed static data structures such as default Constructor and Resolver.
  • +
  • Compile-time checks for size of data structures that should be small.
  • +
  • Better error messages.
  • +
  • Various refactoring changes, using more 'modern' D features, better tests.
  • +
  • Updated documentation, examples.
  • +
+
+
+

Bugfixes

+
    +
  • Fixed mappings longer than 65535 lines.
  • +
  • Removed a lot of in parameters that were used due to a misunderstanding of what +in is supposed to do.
  • +
  • Fixed real emitting.
  • +
  • Fixed 32bit compilation (again).
  • +
  • Various small bugfixes.
  • +
+
+
+
+

0.4.0

+
+

Features/improvements

+
    +
  • API BREAKING: All structs and classes stored directly in YAML nodes +(aka custom YAML data types) now need to define the opCmp operator. +This is used for duplicate detection instead of AAs (which are broken) +and will allow efficient access to data in unordered maps.
  • +
  • API BREAKING: Simplified the Constructor API. Constructor functions now +don't need to get Marks through parameters - any exceptions thrown by +the constructor functions are caught and wrapped along with Mark info.
  • +
  • Various small improvements in the API documentation.
  • +
  • Updated API documentation, tutorials and examples to match the changes.
  • +
  • Small CDC (build script) improvements.
  • +
+
+
+

Bugfixes

+
    +
  • Fixed compilation with DMD 2.057.
  • +
  • Fixed a bug caused by std.regex changes that broke null value parsing.
  • +
  • Fixed compilation on 32bit.
  • +
  • Various small bugfixes.
  • +
+
+
+
+

0.3.0

+
+

Features/improvements

+
    +
  • API BREAKING: Removed Node.getToVar as it turned out to be a premature +optimization.
  • +
  • API BREAKING: Constructor API for constructing custom YAML data types has +been improved to make it easier to load custom classes/structs. See the +custom types tutorial and Constructor API documentation.
  • +
  • Node.opIndex now returns a reference to a node.
  • +
  • Added a shortcut alias Node.as for Node.get . Node.as might eventually +replace Node.get (in a 1.0 release).
  • +
  • User can now access a string representation of tag of a node.
  • +
  • Nodes now remember their scalar and collection styles between loading and +dumping. These are not accessible to user. User can set output styles in +Representer.
  • +
  • Updated API documentation to reflect the new changes, added more examples +and overall made the documentation more readable.
  • +
  • Improved error messages of exceptions.
  • +
  • Drastically optimized scanning and parsing, decreasing parsing time to about +10% (no precise benchmark comparison with 0.2 at the moment).
  • +
  • Eliminated most GC usage, improving speed and memory usage.
  • +
  • Optimized Dumper for speed, especially when dumping many small files.
  • +
  • Reader has been reimplemented to improve performance.
  • +
  • Many other speed and memory optimizations.
  • +
  • Added a profiling build target and a parsing/dumping benchmark.
  • +
  • Added a random YAML file generator and a YAML file analyzer, as example +applications and for benchmarking.
  • +
  • Added a "clean" target to example Makefiles.
  • +
  • Got rid of all global state.
  • +
+
+
+

Bugfixes

+
    +
  • Fixed compatibility issues with DMD 2.056.
  • +
  • Fixed an Emitter bug which caused tags to always be emitted in full format.
  • +
  • Fixed a bug that caused errors when loading documents with YAML version +directives.
  • +
  • Fixed many const-correctness bugs.
  • +
  • Minor bugfixes all over the code.
  • +
  • Fixed many documentation bugs.
  • +
+
+
+
+

0.2.0

+
+

Features/improvements

+
    +
  • Implemented YAML emitter, and related unittests/documentation.
  • +
  • Tags are now stored in nodes, allowing D:YAML to be closer to the +specification.
  • +
  • Loader API has been broken to make it more extensible in future - +Representer and Constructor are no more specified in the constructor, +and the load() shortcut functions have been removed, as all that's needed to +load a YAML document now is Loader("file.yaml").load() .
  • +
+
+
+

Bugfixes

+
+
    +
  • Fixed many bugs in the parser, scanner, composer and constructor.
  • +
+
+
+
+
+ + diff --git a/CHANGES.rst b/CHANGES.rst new file mode 100644 index 0000000..4c3567c --- /dev/null +++ b/CHANGES.rst @@ -0,0 +1,179 @@ +----- +0.5.0 +----- + +^^^^^^^^^^^^^^^^ +Breaking changes +^^^^^^^^^^^^^^^^ + +As many people have been using D:YAML from git master since the 0.4 release, each change +is prefixed by the year the change was introduced. + +- ``2014`` Broke compatibility with all DMD versions before 2.066 +- ``2014`` ``Loader`` API depending on ``std.stream`` is now deprecated and will be + removed in the next release. +- ``2014`` ``Loader.fromString(string)`` is now deprecated and replaced by + ``Loader.fromString(char[])``, which will reuse and overwrite the input during + parsing. The string overload will be removed in the next release. +- ``2012`` Values in D:YAML are less 'dynamic-typed'. E.g. removing ``"42"`` won't + also remove ``42``. Such automatic conversion still happens e.g. in a foreach + over a mapping with a string key. The ``Node.as()`` method has a template + parameter to disable automatic conversion from strings to other types. + +^^^^^^^^^^^^^^^^ +API improvements +^^^^^^^^^^^^^^^^ + +- ``Loader`` is now, by default, constructed from a non-const buffer containing YAML + data instead of a ``std.stream.Stream``. D:YAML reuses and overwrites this buffer to + minimize memory allocations during parsing. Convenience API such as the ``Loader`` + constructor from a filename is unchanged although it loads the file to a buffer + internally. +- ``Node.contains()`` method to check if a YAML sequence/mapping contains specified + value (as opposed to a key). +- ``Node.containsKey()`` method to check if a YAML mapping contains specified key. +- ``Node.isNull()`` property. +- ``Node operator in`` analogous to associative array ``in``. +- ``Loader.fromString()`` method as a quick wrapper to parse YAML from a string. +- ``dyaml.hacks`` module for potentially useful things YAML specification doesn't allow. +- Most of the API is ``@safe`` or at least ``@trusted``. Also ``pure`` and ``nothrow`` + where possible. +- User-defined constructors can now also construct builtin YAML types. +- Input is now validated at Loader construction to detect invalid UTF sequences early + and to minimize internal exception handling during parsing. + +^^^^^^^^^^^^^^^^^^ +Other improvements +^^^^^^^^^^^^^^^^^^ + +- D:YAML now works with a UTF-8 buffer internally. This decreases memory usage for UTF-8 + input, and UTF-32 inputs can be encoded into UTF-8 in-place without allocating. + UTF-16 inputs still need an allocation. This also gets rid of all dchar[]->char[] + conversions which were a significant source of GC allocations. +- Less GC usage during YAML node construction. +- The ``Scanner`` subsystems is now mostly ``@nogc``; it never allocates memory for + token values, using slices into the input buffer instead. +- Custom, ``@nogc`` UTF decoding/encoding code based on ``std.utf`` to enable more use + of ``@nogc`` in D:YAML internals and to improve performance. +- Replaced ``std.stream.EndianStream`` with custom endian-fixing code. +- D:YAML is now a DUB package. +- Removed static data structures such as default Constructor and Resolver. +- Compile-time checks for size of data structures that should be small. +- Better error messages. +- Various refactoring changes, using more 'modern' D features, better tests. +- Updated documentation, examples. + + +^^^^^^^^ +Bugfixes +^^^^^^^^ + +- Fixed mappings longer than 65535 lines. +- Removed a lot of ``in`` parameters that were used due to a misunderstanding of what + ``in`` is supposed to do. +- Fixed ``real`` emitting. +- Fixed 32bit compilation (again). +- Various small bugfixes. + + + +----- +0.4.0 +----- + +^^^^^^^^^^^^^^^^^^^^^ +Features/improvements +^^^^^^^^^^^^^^^^^^^^^ + +- **API BREAKING**: All structs and classes stored directly in YAML nodes + (aka custom YAML data types) now need to define the opCmp operator. + This is used for duplicate detection instead of AAs (which are broken) + and will allow efficient access to data in unordered maps. +- **API BREAKING**: Simplified the Constructor API. Constructor functions now + don't need to get Marks through parameters - any exceptions thrown by + the constructor functions are caught and wrapped along with Mark info. +- Various small improvements in the API documentation. +- Updated API documentation, tutorials and examples to match the changes. +- Small CDC (build script) improvements. + +^^^^^^^^ +Bugfixes +^^^^^^^^ + +- Fixed compilation with DMD 2.057. +- Fixed a bug caused by std.regex changes that broke null value parsing. +- Fixed compilation on 32bit. +- Various small bugfixes. + + + +----- +0.3.0 +----- + +^^^^^^^^^^^^^^^^^^^^^ +Features/improvements +^^^^^^^^^^^^^^^^^^^^^ + +- **API BREAKING**: Removed Node.getToVar as it turned out to be a premature + optimization. +- **API BREAKING**: Constructor API for constructing custom YAML data types has + been improved to make it easier to load custom classes/structs. See the + custom types tutorial and Constructor API documentation. +- Node.opIndex now returns a reference to a node. +- Added a shortcut alias Node.as for Node.get . Node.as might eventually + replace Node.get (in a 1.0 release). +- User can now access a string representation of tag of a node. +- Nodes now remember their scalar and collection styles between loading and + dumping. These are not accessible to user. User can set output styles in + Representer. +- Updated API documentation to reflect the new changes, added more examples + and overall made the documentation more readable. +- Improved error messages of exceptions. +- Drastically optimized scanning and parsing, decreasing parsing time to about + 10% (no precise benchmark comparison with 0.2 at the moment). +- Eliminated most GC usage, improving speed and memory usage. +- Optimized Dumper for speed, especially when dumping many small files. +- Reader has been reimplemented to improve performance. +- Many other speed and memory optimizations. +- Added a profiling build target and a parsing/dumping benchmark. +- Added a random YAML file generator and a YAML file analyzer, as example + applications and for benchmarking. +- Added a "clean" target to example Makefiles. +- Got rid of all global state. + +^^^^^^^^ +Bugfixes +^^^^^^^^ + +- Fixed compatibility issues with DMD 2.056. +- Fixed an Emitter bug which caused tags to always be emitted in full format. +- Fixed a bug that caused errors when loading documents with YAML version + directives. +- Fixed many const-correctness bugs. +- Minor bugfixes all over the code. +- Fixed many documentation bugs. + + + +----- +0.2.0 +----- + +^^^^^^^^^^^^^^^^^^^^^ +Features/improvements +^^^^^^^^^^^^^^^^^^^^^ + +- Implemented YAML emitter, and related unittests/documentation. +- Tags are now stored in nodes, allowing D:YAML to be closer to the + specification. +- Loader API has been broken to make it more extensible in future - + Representer and Constructor are no more specified in the constructor, + and the load() shortcut functions have been removed, as all that's needed to + load a YAML document now is Loader("file.yaml").load() . + +^^^^^^^^ +Bugfixes +^^^^^^^^ + + - Fixed many bugs in the parser, scanner, composer and constructor. diff --git a/CHANGES.txt b/CHANGES.txt deleted file mode 100644 index fb271bf..0000000 --- a/CHANGES.txt +++ /dev/null @@ -1,118 +0,0 @@ -0.4.0: - - -- FEATURES/IMPROVEMENTS: - - - API BREAKING: All structs and classes stored directly in YAML nodes - (aka custom YAML data types) now need to define the opCmp operator. - This is used for duplicate detection instead of AAs (which are broken) - and will allow efficient access to data in unordered maps. - - - API BREAKING: Simplified the Constructor API. Constructor functions now - don't need to get Marks through parameters - any exceptions thrown by - the constructor functions are caught and wrapped along with Mark info. - - - Various small improvements in the API documentation. - - - Updated API documentation, tutorials and examples to match the changes. - - - Small CDC (build script) improvements. - - -- BUGFIXES: - - - Fixed compilation with DMD 2.057. - - - Fixed a bug caused by std.regex changes that broke null value parsing. - - - Fixed compilation on 32bit. - - - Various small bugfixes. - - - -0.3.0: - - -- FEATURES/IMPROVEMENTS: - - - API BREAKING: Removed Node.getToVar as it turned out to be a premature - optimization. - - - API BREAKING: Constructor API for constructing custom YAML data types has - been improved to make it easier to load custom classes/structs. See the - custom types tutorial and Constructor API documentation. - - - Node.opIndex now returns a reference to a node. - - - Added a shortcut alias Node.as for Node.get . Node.as might eventually - replace Node.get (in a 1.0 release). - - - User can now access a string representation of tag of a node. - - - Nodes now remember their scalar and collection styles between loading and - dumping. These are not accessible to user. User can set output styles in - Representer. - - - Updated API documentation to reflect the new changes, added more examples - and overall made the documentation more readable. - - - Improved error messages of exceptions. - - - Drastically optimized scanning and parsing, decreasing parsing time to about - 10% (no precise benchmark comparison with 0.2 at the moment). - - - Eliminated most GC usage, improving speed and memory usage. - - - Optimized Dumper for speed, especially when dumping many small files. - - - Reader has been reimplemented to improve performance. - - - Many other speed and memory optimizations. - - - Added a profiling build target and a parsing/dumping benchmark. - - - Added a random YAML file generator and a YAML file analyzer, as example - applications and for benchmarking. - - - Added a "clean" target to example Makefiles. - - - Got rid of all global state. - - -- BUGFIXES: - - - Fixed compatibility issues with DMD 2.056. - - - Fixed an Emitter bug which caused tags to always be emitted in full format. - - - Fixed a bug that caused errors when loading documents with YAML version - directives. - - - Fixed many const-correctness bugs. - - - Minor bugfixes all over the code. - - - Fixed many documentation bugs. - - - -0.2.0: - - -- FEATURES/IMPROVEMENTS: - - - Implemented YAML emitter, and related unittests/documentation. - - - Tags are now stored in nodes, allowing D:YAML to be closer to the - specification. - - - Loader API has been broken to make it more extensible in future - - Representer and Constructor are no more specified in the constructor, - and the load() shortcut functions have been removed, as all that's needed to - load a YAML document now is Loader("file.yaml").load() . - - -- BUGFIXES: - - - Fixed many bugs in the parser, scanner, composer and constructor.