Skip to content


Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

303 lines (219 sloc) 11.5 kb
Piqi 0.5.6 (August 7, 2011)
- Support for Protocol Buffer's "packed" encoding for primitive numeric fields
- Windows support using MinGW
Specific to OCaml:
- Multi-format Protobuf/JSON/XML/Piq serialization
- Serialization of custom types, e.g chars, bigints
- Option for representing repeated fields and lists as OCaml arrays
Specific to Erlang:
- Rebar packages for Piqi and Piqi-RPC
- Multi-core scalability and improved performance for JSON and XML
- 30% faster Erlang binary de-serialization and other optimizations of
piqirun.erl (thanks to Hunter Morris)
- Serialization of custom types, e.g. bigints, arbitrary Erlang terms
- Multi-format Protobuf/JSON/XML/Piq serialization
- Serialization of custom OCaml types
- Support for Protocol Buffer's "packed" encoding for primitive numeric fields
- Support for empty records
- Option for representing repeated fields and lists as OCaml arrays
- Automatic topological sorting of sub-variant definitions
- Fix: reading uint32-fixed values > 0x7fffffff from Protobuf encoding
- Rebar package
- Multi-core scalability and improved performance for JSON and XML
- Optimizations of serialization runtime library (thanks to Hunter Morris)
- Support for protocol Buffer's "packed" encoding for primitive numeric fields
- Serialization of custom Erlang types
- New top-level ".erlang-string-type" option for decoding strings as lists (by
default strings are decoded as binaries)
- The ability to turn off pretty-printing for JSON and XML output
- Clear erlc & dialyzer warnings on R14B02
- Rebar package
- Make HTTP request data accessible to the application callbacks
- Report internal errors using standard Erlang Error Logger interface
- Limit the size and depth of error messages
- Less strict validation of HTTP request for easier request construction by
Piqi language:
- Allow to nest any type definition as a function parameter
- New ".proto-custom" property for better Protocol Buffers interoperation;
example usage:
.proto-custom # option java_package = "";
Piqi tools:
- Fix: add missing exception handling when parsing XML
- Fix: handle malformed UTF-8 exception
- Fix: incorrect Protobuf to X conversion in case of imported definitions
- Fix: parsing empty strings represented in XML
- Fix #7: (piqi to-proto) invalid .proto generated in case of imported aliases
- Better warnings on unknown fields when parsing .piqi/.piq
Piqi 0.5.5 (April 12, 2011)
- Multi-format data serialization for Erlang (JSON, XML, Protocol Buffers)
- Piqi-RPC -- an RPC-over-HTTP system for Erlang
- Support for XML encoding
- Function definitions in the Piqi language
- Piqi getopt -- type-based command-line arguments parsing
Backward-incompatible changes:
- "piqirun" Erlang application is renamed to "piqi" (contains the old
"piqirun.erl" and some new functionality). The new application runs a
supervisor and some servers which are used by Piqi-RPC and multi-format data
serialization (see below).
- (piqic ocaml, piqic erlang) Both Piqi compilers now generate
"<Mod>|.erl|.hrl" instead of "<Mod>.ml|.erl|.hrl". For OCaml it is
still possible to specify the name of the output file explicitly using "-o"
parameter. OCaml and Erlang module names can be also set using
"ocaml-module" and "erlang-module" directly in the .piqi file.
- (ocaml) Generated OCaml serialization functions (i.e. gen_<typename>) now
accept 1 arguments instead of 2. Old functions accepting 2 arguments are
renamed to gen__<typename>. The removed argument is an integer tag for a
Protobuf field -- there's rarely a need to specify it explicitly.
Important changes in Erlang serialization:
- Generated Erlang serialization functions (i.e. gen_<type>/2) can also accept
only 1 argument. It is now possible to use gen_<type>(X) instead of
gen_<type>('undefined', X).
- Calling piqirun:init_from_binary/1 is no longer necessary as all
parse_<typename>/1 functions will accept Erlang binaries.
Other changes:
- (piqirun-erlang) Improved error reporting when deserializing incomplete
data: a special 'not_enough_data' exception will be thrown in such case.
- (json) Wrapping top-level primitive values into {"_": <value>} object to
conform with JSON RFC4627 specification.
- Piqi-light syntax improvements for better readability.
- Don't generate {<field>: null} for optional fields missing in JSON records.
- Tests will now work even if Protocol Buffers is not installed.
- (piqirun-ocaml) Remove "Stream" layer and use channels directly in the input
Bug fixes:
- (erlang) Fixed incorrect Erlang mapping for some built-in types (problem was
introduced in 0.5.4 release).
- (erlang) A proper support for records with no fields.
- (piqic ocaml) crash on imports of built-in aliases (Issue #2).
- (make ocaml-install) Fixed installation of OCaml libraries which conflicted
with installation of OCaml dependencies (Issue #1).
New functionality (XML support):
- "piqi convert" can now convert data between Protobuf, XML, JSON and Piq
formats. Other Piqi commands that rely on conversion functionality, such as
"piqi getopt", can work with XML as well.
New functionality (XML, JSON and Piq serialization for Erlang):
- "piqic-erlang-ext" -- a command-line Piqi compiler (an extended version of
"piqic erlang" command). It generates Erlang code for
serializing/deserializing data XML, JSON, Piq, Protobuf formats.
- piqi_tools.erl -- Erlang bindings for Piqi tools implemented as Erlang
port running "piqi server".
New functionality (miscellaneous):
- Support for serializing top-level values of primitive types (ocaml, erlang,
piqi tools, all formats).
- (piqirun-erlang, piqirun-ocaml) New functions for encoding/decoding
length-delimited blocks (gen_block/parse_block). Compatible with similar
functionality in Protocol Buffers.
- (piqic-ocaml, piqic-erlang) Support for generating default values for types:
'piqic ocaml|erlang --gen-defaults ...'.
- A new "piqi getopt" command interprets idiomatic command-line arguments as
Piq data object (according to a Piqi type spec) and converts it to JSON,
XML, Piq and Protobuf formats.
- Piqi-RPC -- an PRC-over-HTTP system for Erlang (see below).
- Performance tests for Erlang serialization to/from Protobuf, JSON, XML, Piq.
New functionality (Piqi-RPC):
- Support for function definitions in the Piqi language, all the Piqi tools,
compilers, OCaml, Erlang and Protocol Buffer mappings.
- A new "piqi server" command that talks Piqi-RPC over Unix pipe and exposes
data conversion functionality.
- A new "piqi call" -- Piqi-RPC command-line client that interprets
command-line arguments as input parameters for remote functions and
communicates with Piqi-RPC servers via HTTP or Unix pipe.
- piqi-rpc -- an Erlang application containing runtime support libraries and
HTTP interface for Piqi-RPC.
- "piqic-erlang-rpc" -- a command-line Piqi compiler and server stubs
generator for Piqi-RPC/Erlang.
- A new "piqic expand" command. It is similar to "piqi expand" but also sets
piqic-specific fields, such as OCaml and Erlang names.
Piqi 0.5.4 (December 19, 2010)
Now it is possible to embed Piqi type definitions into Piq streams to produce
self-describing data bundles. Piq streams with embedded type definitions can be
represented in Piq, Piq-JSON and Wire formats.
Piqi tools:
- New "piqi convert --embed-piqi" flag for embedding type information into
serialized Piq streams.
- Use hash-based wire codes for Piqi self-specification instead of
automatically-assigned ordinals to ensure forward and backward compatibility
of serialized .piqi specs with regard to future Piqi language extensions.
- Many internal improvements in Piqi compiler compiler, Piqi library
initialization and serialization of .piqi specs.
- (ocaml, erlang) Generating more optimal code for variant parsing.
Bug fixes:
- Fixed an integer overflow bug in piqirun-ocaml library on 32-bit platform.
- Fixed missing location information in errors or warnings while converting
from JSON.
- Fixed incorrect field ordering during Piq input/output when Piqi
specification explicitly defines non-ordinal wire codes.
Piqi 0.5.3 (October 19, 2010)
Added initial support for Piqi-light -- lightweight EBNF-like syntax for Piqi
data definition language.
Piqi tools:
- New "piqi light" command for printing .piqi in Piqi-light syntax.
- Improved pretty-printing of .piqi by transforming output Piq AST. Mainly
affects "piqi expand".
- Added support for "-o" option to "piqi to-proto", "piqi of-proto" commands.
- Improved floats reversibility in Piq (unified this part with JSON
generator). Affects "proto convert -t piq".
- (ocaml) Simplified generated OCaml type definitions.
Bug fixes:
- Timely reset location DB to allow garbage collection of objects. Affects
"piqi convert" and "piqi pp".
- Fixed several problems with "piqi expand".
- Fixed printing order for "unknown field" warnings.
Piqi 0.5.2 (September 13, 2010)
Added Erlang support:
- "piqic erlang" -- a new piqic backend for for generating Erlang type
specifications and encoding/decoding functions.
- "piqirun-erlang" -- runtime support library.
- (ocaml, erlang) Normalize Piqi identifiers by default, i.e. convert
"CamlCase" identifiers to "caml-case".
- (ocaml, erlang) Don't generate codecs and types for unused defintions from
the boot module.
Backward incompatible changes:
- Combined piqirun-ocaml library into one "piqirun" OCaml module (previously
there were two: "piqirun_gen" and "piqirun_parse").
- Improved piqirun-ocaml buffer initialization interface (unified it with
Other changes:
- Ignore duplicate fields instead of producing an error.
Piqi tools:
- Generate warnings instead of errors on duplicate fields when reading from
Piq format.
- Ignore duplicate fields when reading from wire format.
Platform support:
- Now builds and runs on Mac OS X (fixed some build portability problems).
Piqi 0.5.1 (August 17, 2010)
Major changes include support for JSON encoding and providing compatibility
with OCaml 3.12.0.
Piqi tools:
- "piqi convert" command now supports two new encodings: "json" (plain JSON)
and "piq-json" (JSON with Piq type annotation for top-level objects).
- A new command: "piqi json-pp" for pretty-printing JSON files.
Piqi language:
- Added support for "json-name" property for type definitions, fields and
options. When specified, it will be used as a name for correspondent JSON
field names instead of "name".
- Renamed "ignore-field" top-level directive to "custom-field".
Other changes:
- Provided compatibility with the latest OCaml release (3.12.0). Improved
support for older OCaml versions >= 3.10.
Piqi 0.5.0 (July 9, 2010)
First public release.
Jump to Line
Something went wrong with that request. Please try again.