nirum v0.3.0 Release Notes

  • ๐Ÿš€ 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 officially 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.

    ๐Ÿ‘ป [python-exception]: https://docs.python.org/3/library/exceptions.html#Exception

    ๐Ÿ“„ [python-name-error]: https://docs.python.org/3/library/exceptions.html#NameError

    ๐Ÿง [Alpine Linux]: https://alpinelinux.org/