Nirum 0.3.0
Pre-release
Pre-release
Released on February 18, 2018.
Language
- Package 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
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 thenirum
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
section andtargets.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]
- 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 tonirum.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
forService
and generated imports had been likefrom nirum.rpc import service_type
, but it's nowfrom nirum.service import Service as service_type
.
- Generated constructors of service clients became to take a
- 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 ofRectangle
). 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 ofFooService_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
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 namedmro
. [#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 inPATH
. [#155] - The Docker image became based and built on Alpine Linux so that the image is now much lighter.