uint >= 2.0.1. Otherwise, the build may fail because of a missing dependency on stdint.base >= 0.11 for Base.Queue (@talex5, #61).This release is mostly about reducing the number of dependencies. The only API change is that write_message_to_file_robust has gone.
extunix dependency (#57). write_message_to_file_robust was its only user, and wasn't used by anything. Using fsync to ensure a file is written to disk is a general function that should be handled by the user of capnp where needed. Removing extunix also removes the indirect dependency on camlp4, which in turn allows capnp to build with OCaml 4.08 (and to build faster on all versions).Pervasives qualifier (#57). This is needed to support OCaml 4.08 without warnings.Core from benchmarks (#55). This was the only remaining use of the library.Core_kernel with plain Base and Stdio in the compiler (#56) and tests (#59). This greatly reduces the number of libraries you need to install to install capnp.With these changes, the following 49 libraries that were needed to install capnp-ocaml 3.2.1 are no longer required: base_bigstring, base_quickcheck, bin_prot, camlp4, core_kernel, extunix, fieldslib, jane-street-headers, jst-config, num, ocaml-compiler-libs, ocaml-migrate-parsetree, octavius, parsexp, ppx_assert, ppx_base, ppx_bench, ppx_bin_prot, ppx_compare, ppx_custom_printf, ppx_derivers, ppx_enumerate, ppx_expect, ppx_fail, ppx_fields_conv, ppx_hash, ppx_here, ppx_inline_test, ppx_jane, ppx_js_style, ppx_let, ppxlib, ppx_module_timer, ppx_optcomp, ppx_optional, ppx_pipebang, ppx_sexp_conv, ppx_sexp_message, ppx_sexp_value, ppx_stable, ppx_typerep_conv, ppx_variants_conv, re, seq, sexplib, splittable_random, time_now, typerep and variantslib.
capnp opam package no longer depends on the C++ compiler (#47). If your project compiles schema files, you should add "conf-capnproto" {build} to your opam dependencies.IO module has been moved from Capnp.IO to Capnp_unix.IO, and is now part of the new capnp.unix ocamlfind library. Both capnp and capnp.unix ocamlfind libraries are provided by the capnp opam package.capnp library no longer depends on Core_kernel or Unix. This makes binaries using the library several MB smaller and allows capnp to be used in Mirage unikernels.Builder.X.reader_t and Reader.X.builder_t types have gone (to avoid confusion with the generic reader_t and builder_t types). Use X.struct_t reader_t and X.struct_t builder_t instead. Builder.X.t is still defined (as an alias for t builder_t), and similarly for Reader.X.t.StructStorage.t now takes an extra type parameter. This is a phantom type, used to indicate what kind of struct it represents. This extra parameter has also been added to Object.t.reader_t_Foo_14133145859926553711) have gone. If you need to refer to these directly for some reason, use the replacement polymorphic type instead (e.g. Foo_c42305476bb4746f reader_t).MakeRPC functor in the generated files that takes an extended version of MessageSig. The original Make is still provided - it is now a convenience wrapper around MakeRPC that passes some dummy functions. An RPC provider is available at https://github.com/mirage/capnp-rpc.Uint32.t indexes can now take capabilities, as defined by an RPC provider library. The default RPC.None provider exposes the raw descriptor index, as before.of_pointer and init_pointer functions can be used to read and add structs of any type to AnyPointer fields. The new pointer_set_reader can be used to set a pointer by copying from a reader.-inc.ml files that were previously copied into each generated file are now regular modules in the library, making them available to other code too. This makes the generated files much smaller. There is no performance penalty (when using flambda).reader_t and builder_t types (#32 and #33). Instead of providing Reader.Foo.t and Builder.Foo.t as abstract types, provide a single Foo.struct_t and use struct_t reader_t and struct_t builder_t for its reader and builder. This makes it possible to define generic functions that work on all readers or builders, without having to generate a separate function for each one. The types are shared between files, so you can write generic code to work with schema files you haven't seen (needed for the RPC system).reader_of_builder and message_of_builder functions in StructStorage.Obj.magic have been removed from the generated code.Not_found exception when a capnp import is not referenced within the schema file."/capnp/c++.capnp" no longer generates a reference to an OCaml module with the confusing name of C2b2b, and there should no longer be a need to separately compile that imported schema file.-I $OCAML_TOPLEVEL_PATH, to avoid missing topfind.Codecs: change API to accept the more natural BytesMessage.Message.t instead of Bytes.t list.Codecs: change API to accept a compression specifier, instead of using separate functions and separate types for compressed and uncompressed streams.Message: to_storage now returns a list of (storage, length) pairs.Codecs: fix incorrect encoding of framing headers (for example, as generated by serialize).Codecs: fix infinite loop in PackedStream decoding.Codecs: reduce serialized message sizes, by omitting unused allocation regions from the serialized messages.BytesMessage = Message.Make(BytesStorage), so the user doesn't always need to. (Implementation is furthermore defunctorized for improved performance.)IO: functions for moving message data through various types of I/O channels.-safe-string.install features in omake install. This corrects installation problems on OS X and (most likely) other BSDs.