nirum-0.3.2: CHANGES.md
Nirum changelog
===============
Version 0.3.2
-------------
Released on March 15, 2018.
### Et cetera
- Fixed a broken build of the official Docker images.
Version 0.3.1
-------------
Released on March 1, 2018.
### Python target
- Fixed record/union deserializers to ignore unknown fields in data payload.
Deserializers had raised `KeyError` before. [#232]
[#232]: https://github.com/spoqa/nirum/issues/232
Version 0.3.0
-------------
Released on February 18, 2018.
### Language
- [Package](./docs/package.md) is now a new compilation unit of Nirum.
Every Nirum package needs *package.toml* manifest file.
[[#83], [#99]]
- Since a Nirum package can be compiled to more than one target languages,
the `nirum` command became to have `-t`/`--target` required parameter.
[[#106], [#111], [#114]]
- Added `-w`/`--watch` mode. [[#91], [#104], [#218]]
- Annotations became able to have multiple arguments and every parameter
became necessary to having its name (keyword). [[#178], [#190], [#197]]
- Service methods became able to omit their return types.
[[#179], [#199] by Yang Chun Ung]
- Added `@error` annotation to make a type to subclass an exception base
class (e.g., [`Exception`][python-exception] in Python) when it's compiled
to OO languages. [[#38], [#127]]
- Union tag docstrings in parentheses became allowed. [[#153], [#154]]
- Fixed a parser bug that a bare identifier (i.e., unquoted identifier) cannot
start with a reserved keyword, e.g., `types` (`type` is reserved),
`enumeration` (`enum` is reserved). [[#184], [#189]]
- Fixed a parser bug that `import` names had been disallowing to have
a trailing comma or newlines. [[#202]]
- Fixed the `nirum` command bug that it had always terminated with exit code
0 even when it errored. [[#97], [#108]]
### Docs target
- A new target, `docs` is now available. To generate docs for a Nirum
package, specify `--target docs` option to the `nirum` command.
[[#10], [#113], [#116], [#125], [#131], [#152], [#170], [#223]]
### Python target
- Now supports Python 2.7 besides Python 3.4 or later.
[[#50], [#85], [#93], [#117], [nirum-python #22]]
- Now requires *nirum-python* 0.6.0 or later. [[#119], [#141], [#146]]
- From now on, in order to compile a Nirum package to Python,
*package.toml* manifest need [`targets.python`][targets.python] section
and `targets.python.name` field. [[#99]]
- Added `targets.python.minimum_runtime` option to specify the minimum
version of *nirum-python* runtime library. [[#118], [#119]]
- Added `targets.python.renames` option to rename module names when they
are compiled to a Python module. [[#121]]
- More package metadata became configurable. [[#100]]
- `targets.python.description` [[#174] by Seunghun Lee]
- `targets.python.license` [[#180] by Seunghun Lee]
- `targets.python.keywords` [[#183] by Seunghun Lee]
- Added new transport layer. [[#149], [nirum-python #79], [nirum-python #92]]
- Generated constructors of service clients became to take a
`nirum.transport.Transport` instance.
- Followed renamed/moved import paths of the runtime classes
(e.g., `nirum.rpc.Service` became to `nirum.service.Service`).
- The way to avoid name collision between generated types and runtime
classes is changed. The runtime library had provided alternative names
like `service_type` for `Service` and generated imports had been like
`from nirum.rpc import service_type`, but it's now
`from nirum.service import Service as service_type`.
- Record/union tag fields of an optional type can be omitted when
the constructor is called.
[[#70], [#165] by Seunghun Lee]
- Generated tag classes became qualified under its union class
(e.g., `Shape.Rectangle` instead of `Rectangle`).
Deprecated the old style and it is going to be obsolete in the near future.
[[#68], [#193]]
- Generated service clients became qualified under its service class
(e.g., `FooService.Client` instead of `FooService_Client`).
Deprecated the old style and it is going to be obsolete in the near future.
[[#167], [#222]].
- Generated serializers became independent from *nirum-python* runtime
library. [[#160], [#201], [#203], [#204]]
- Deserializers became to show multiple error messages at a time.
[[#168], [#224]]
- Generated Python classes became having `__nirum_type__` metadata for RTTI.
[[nirum-python #34], [#192]]
- Generated service classes became having `__nirum_method_annotations__`
metadata for processing annotations. [[#194]]
- Docstrings in a Nirum schema became to generate corresponding Python
docstrings. [[#102], [#128]]
- Sets, lists, and maps became compiled to immutable data structures
so that thay are easily hashable. [[nirum-python #49], [#123]]
- Fixed a bug that implicit ancestor packages hadn't been generated even
if they have submodules. [[#92], [#105]]
- Fixed a bug that a generated Python code had raised
[`NameError`][python-name-error] when a referring type is above than
a referred type. [[#138], [nirum-python #88], [#146]]
- Fixed a bug that a generated Python `enum` code had became broken
when an enum type has a member named `mro`. [[#185], [#188]]
### Et cetera
- The officialy distributed executable binaries for Linux became
independent from [glibc]; instead statically linked to [musl]. [#216]
- The Docker image now has `nirum` command in `PATH`. [[#155]]
- The Docker image became based and built on [Alpine Linux][] so that
the image is now much lighter.
[#10]: https://github.com/spoqa/nirum/issues/10
[#38]: https://github.com/spoqa/nirum/issues/38
[#50]: https://github.com/spoqa/nirum/issues/50
[#68]: https://github.com/spoqa/nirum/issues/68
[#70]: https://github.com/spoqa/nirum/issues/70
[#83]: https://github.com/spoqa/nirum/pull/83
[#85]: https://github.com/spoqa/nirum/pull/85
[#91]: https://github.com/spoqa/nirum/issues/91
[#92]: https://github.com/spoqa/nirum/issues/92
[#93]: https://github.com/spoqa/nirum/issues/93
[#99]: https://github.com/spoqa/nirum/pull/99
[#97]: https://github.com/spoqa/nirum/issues/97
[#100]: https://github.com/spoqa/nirum/issues/100
[#102]: https://github.com/spoqa/nirum/issues/102
[#104]: https://github.com/spoqa/nirum/pull/104
[#105]: https://github.com/spoqa/nirum/pull/105
[#106]: https://github.com/spoqa/nirum/pull/106
[#108]: https://github.com/spoqa/nirum/pull/108
[#111]: https://github.com/spoqa/nirum/pull/111
[#113]: https://github.com/spoqa/nirum/pull/113
[#114]: https://github.com/spoqa/nirum/pull/114
[#116]: https://github.com/spoqa/nirum/pull/116
[#117]: https://github.com/spoqa/nirum/pull/117
[#118]: https://github.com/spoqa/nirum/issues/118
[#119]: https://github.com/spoqa/nirum/pull/119
[#121]: https://github.com/spoqa/nirum/pull/121
[#123]: https://github.com/spoqa/nirum/pull/123
[#128]: https://github.com/spoqa/nirum/pull/128
[#125]: https://github.com/spoqa/nirum/issues/125
[#127]: https://github.com/spoqa/nirum/pull/127
[#131]: https://github.com/spoqa/nirum/pull/131
[#138]: https://github.com/spoqa/nirum/issues/138
[#141]: https://github.com/spoqa/nirum/pull/141
[#146]: https://github.com/spoqa/nirum/pull/146
[#149]: https://github.com/spoqa/nirum/pull/149
[#152]: https://github.com/spoqa/nirum/pull/152
[#153]: https://github.com/spoqa/nirum/issues/153
[#154]: https://github.com/spoqa/nirum/pull/154
[#155]: https://github.com/spoqa/nirum/pull/155
[#160]: https://github.com/spoqa/nirum/issues/160
[#165]: https://github.com/spoqa/nirum/pull/165
[#167]: https://github.com/spoqa/nirum/pull/167
[#168]: https://github.com/spoqa/nirum/issues/168
[#170]: https://github.com/spoqa/nirum/pull/170
[#174]: https://github.com/spoqa/nirum/pull/174
[#178]: https://github.com/spoqa/nirum/issues/178
[#179]: https://github.com/spoqa/nirum/issues/179
[#180]: https://github.com/spoqa/nirum/pull/180
[#183]: https://github.com/spoqa/nirum/pull/183
[#184]: https://github.com/spoqa/nirum/issues/184
[#185]: https://github.com/spoqa/nirum/issues/185
[#188]: https://github.com/spoqa/nirum/pull/188
[#189]: https://github.com/spoqa/nirum/pull/189
[#190]: https://github.com/spoqa/nirum/pull/190
[#192]: https://github.com/spoqa/nirum/pull/192
[#193]: https://github.com/spoqa/nirum/pull/193
[#194]: https://github.com/spoqa/nirum/pull/194
[#197]: https://github.com/spoqa/nirum/pull/197
[#199]: https://github.com/spoqa/nirum/pull/199
[#201]: https://github.com/spoqa/nirum/pull/201
[#202]: https://github.com/spoqa/nirum/pull/202
[#203]: https://github.com/spoqa/nirum/pull/203
[#204]: https://github.com/spoqa/nirum/pull/204
[#216]: https://github.com/spoqa/nirum/issues/216
[#218]: https://github.com/spoqa/nirum/issues/218
[#222]: https://github.com/spoqa/nirum/pull/222
[#223]: https://github.com/spoqa/nirum/pull/223
[#224]: https://github.com/spoqa/nirum/pull/224
[nirum-python #22]: https://github.com/spoqa/nirum-python/issues/22
[nirum-python #34]: https://github.com/spoqa/nirum-python/issues/34
[nirum-python #49]: https://github.com/spoqa/nirum-python/issues/49
[nirum-python #79]: https://github.com/spoqa/nirum-python/issues/79
[nirum-python #88]: https://github.com/spoqa/nirum-python/pull/88
[nirum-python #92]: https://github.com/spoqa/nirum-python/pull/92
[python-exception]: https://docs.python.org/3/library/exceptions.html#Exception
[targets.python]: ./target/python.md
[python-name-error]: https://docs.python.org/3/library/exceptions.html#NameError
[glibc]: https://www.gnu.org/software/libc/
[musl]: https://www.musl-libc.org/
[Alpine Linux]: https://alpinelinux.org/
Version 0.2.0
-------------
Still unstable release. Released on September 26, 2016.
### Language
- The `boxed` keyword was renamed to `unboxed`. [[#65], [#81]]
- [Annotations](./docs/annotation.md) became renewed and complete
so that every type and module now can be annotated.
[[#40], [#73]]
- Docstrings became merely a syntactic sugar of `@docs` annotation.
[[#53], [#57]]
- Fixed a parser bug which had failed to parse spaces right before/after tag
parentheses. [[#69], [#71]]
- Fixed a parser bug which had referred to a wrong line/column position on
syntax error message when a trailing semicolon is missing. [[#64]]
[#40]: https://github.com/spoqa/nirum/issues/40
[#53]: https://github.com/spoqa/nirum/pull/53
[#57]: https://github.com/spoqa/nirum/pull/57
[#64]: https://github.com/spoqa/nirum/pull/64
[#65]: https://github.com/spoqa/nirum/issues/65
[#69]: https://github.com/spoqa/nirum/issues/69
[#71]: https://github.com/spoqa/nirum/pull/71
[#73]: https://github.com/spoqa/nirum/pull/73
[#81]: https://github.com/spoqa/nirum/pull/81
### Python target
- Services became to have their own client implementation of a name with
`_Client` postfix when they are compiled to Python. [[#52]]
- Generated types became to have `__hash__()` method so that they are now
hashable. [[#75], [#76]]
- Fixed a bug that a Python class generated from a parameterless tag had
been broken. [[#55], [#66]]
[#52]: https://github.com/spoqa/nirum/pull/52
[#75]: https://github.com/spoqa/nirum/issues/75
[#76]: https://github.com/spoqa/nirum/pull/76
[#66]: https://github.com/spoqa/nirum/pull/66
[#55]: https://github.com/spoqa/nirum/issues/55
### Et cetera
- Introduced the official Docker image. The image repository is located to
[spoqa/nirum](https://hub.docker.com/r/spoqa/nirum/).
[[#48] by Minyoung Jeong]
[#48]: https://github.com/spoqa/nirum/pull/48
Version 0.1.0
-------------
Initial and unstable release for a
[demo session at PyCon APAC 2016][pycon-apac-2016].
Released on August 14, 2016.
[pycon-apac-2016]: https://www.pycon.kr/2016apac/program/36