Nirum changelog =============== 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 [#222]: https://github.com/spoqa/nirum/pull/222 [#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