Piqi 0.5.7 Released

Piqi-0.5.7 is finally released!

Release highlights:

  - Better compatibility with Google Protocol Buffers

    The new version includes many fixes in "piqi to-proto" and also follows
    Protobuf behavior in handling more than one entriy for required and optional
    fields during binary deserialization

  - Improved upper-bound of record parsing time for Erlang, OCaml and Piqi
    tools. Essentially, it has improved from O(N^2) to O(N), where N is the
    number of fields.

  - Configurable serialization options for Erlang, OCaml, Piqi-RPC and Piqi

    - pretty-print JSON and XML output
    - omit fields with 'null' values from JSON output
    - treat unknown and duplicate fields as errors when parsing JSON or XML

  - Piqi-RPC fixes and improvements including the following:

    - Allow callbacks to modify Webmachine Request record; for example, this can
      be used for setting extra response headers, cookies, etc.
    - Optionally, do not include Erlang stracktraces in HTTP 500 responses when
      request handler crashes
    - Fix HTTP GET returning internal error when Piqi imports are used

  The next set of new features become especially useful for working with
  third-party Piqi or Protocol Buffers definitions which, for example, may not
  define necessary OCaml- or Erlang-specific properties in the first place.

  Now, it is possible to take any set of Piqi modules and write custom
  extensions for them without modifying the original files. Moreover, extensions
  can be loaded automatically for all recursively included and imported Piqi

  - Add support for universal extensions

    Previously, Piqi extensions could be applied only to type definitions:
    records, variants, enums, lists and aliases.

    Starting from this version, they can be applied to all Piqi entries: type
    definitions, fields, options, functions, function parameters and imports.

  - Automatic inclusion of Piqi extension modules

    Extension module is a Piqi module that has a second extension in its file
    name. For example, "m.ocaml.piqi" is an extension module for a regular Piqi
    module "m.piqi".

    All operations applicable to regular Piqi modules are also supported for
    extension modules. The difference is that extension modules can be included
    automatically in the modules which they extend.

    For instance, "piqic ocaml" and "piqic erlang" try to automatically include
    .ocaml.piqi and .erlang.piqi respectively for each loaded module

Backward incompatible changes:

  - Change in Piqi-JSON mapping -- applicable to OCaml, Erlang serialization and
    "piqi convert" command:

    Piqi flags, i.e. fields and options without associated values, were
    previously encoded in JSON as

            "field_name" : null

    Starting from this version, their representation changes to

            "field_name" : true

    This is consistent with how flags are represented in binary format. It is
    also more reliable this way.

Full list of changes: https://github.com/alavrik/piqi/blob/master/CHANGES

Updated roadmap: https://piqi.org/roadmap/

Downloads: https://piqi.org/downloads/

Comments are closed.