Changelog for capnp-0.9.0.0
0.9.0.0
- Significant performance improvements. A few low level APIs have been changed to support this work.
0.8.0.0
Serialization
- The code generator now supports type parameters in schema; previously the code generator would treat these the same as AnyPointer, but now the generated Haskell has corresponding type parameters.
- The
CerializeandMarshaltype classes now take the state tokensas a parameter, which was necessary to support type parameters.
Misc
- Some of the multi-parameter type classes in Capnp.Classes now have functional dependencies between their parameters. This should generally improve type inference.
0.7.0.0
Serialization
- The library now supports canonicalization via Capnp.canonicalize
- There is a new function Capnp.Message.singleSegment for constructing a
ConstMsgfrom an (unframed)Segment ConstMsg.
RPC
- Some signatures in Capnp.Rpc.Untyped have changed to facilitate a future release supporting promise pipelining.
Misc
- The included schema now match those in version 0.8 of the reference implementation
0.6.0.3
- Fix a race condition [(#74)][issue74] causing remote objects to very occasionally be released too early.
0.6.0.2
- Fix a bug (#71) which sometimes caused the code generator to crash.
0.6.0.1
- Fix a bug in the code generator (#72) which sometimes resulted in build failures of the generated code.
0.6.0.0
RPC
- Fix a serious bug in
newPromiseClient, resulting in dropped calls made on the promise before it is resolved. - There is now a
Serverclass, which all RPC servers must implement. All of its methods have default implementations, so adding an instance to existing servers is straightforward. - It is now possible to "unwrap" clients that point to a local server using the new 'Capnp.Rpc.unwrapServer' function, if the server implements support for it with the new 'Server' type class.
- Servers can now specify a hook to be run when the server is shut down, using the server class's 'shutdown' method.
0.5.0.0
Serialization
In Capnp.Untyped, The dataSection and ptrSection APIs have been
removed. structDataSize has been replaced with structWordCount,
and new functions structByteCount and structPtrCount` have been added.
RPC
This release brings some improvements to the RPC API:
-
Add
newPromiseClientfor creating a promise-based client that can be fulfilled later. -
Make
Clientan instance ofIsClient. -
Previously, there were a number of functions that had two variants:
foo, which ran inIOfooSTM, which ran inSTM.
Now there is just one variant,
foo, which is polymorphic overMonadSTM, defined by themonad-stmpackage. There are instances of this class forIO,STM, and any monad transformer applied to an instance.Note that previously some of the
foovariants were polymorphic overMonadIO. Unfortunately it is not possible to define a general instanceMonadIO m => MonadSTM m, but for a particular mtl stack that has an instance ofMonadIO, you can fix the problem by defining:instance MonadSTM MyStack where liftSTM = liftIO . liftSTMOr, you can add
liftIO/liftSTMto the appropriate call sites.
0.4.0.0
- RPC support! This should be considered alpha quality for now. The API will likely change substantially.
- Many bug fixes; users are strongly encouraged to upgrade.
- Reorganization of the module hierarchy:
- Generated code is now placed under
Capnp.Gen, rather thanCapnp. - The
Dataprefix has been removed from theData.Capnphierarchy.
- Generated code is now placed under
- The included generated modules for the core schema have been updated to those shipped with version 0.7 of the reference implementation.
- Other miscellaneous API Changes:
createPurecan now be used with any instance ofMonadThrow, not justEither SomeException.LimitT mis now an instance ofMonadIO, provided thatmis an instance.- More type class instances from elsewhere in the library are
re-exported via the
Capnpmodule. - The
IsPtrtype class has been split intoFromPtrandToPtr. Most user code should not care about this. - Generated high-level types no longer have Read instances; interfaces make this problematic.
- Getters for anonymous unions are now
get_Foo'instead ofget_Foo'union'. newMessagenow accepts an optional size hint.- Instances of
Cerializenow exist/are generated for(Vector (Vector (Vector ...)))up to a reasonable depth.
- Other improvements not directly reflected in the API:
- The allocation strategy has changed to reduce unnecessary copying.
- It is now possible to create messages with a size > 2GiB. Note that individual segments are still limited.
0.3.0.0
- Instances of some type classes are no longer generated for "second class" types (i.e. types which cannot appear as stand-alone definitions in schema files -- groups and unions).
has_*functions are now only generated for pointer fields.- Various non-functional changes in the output of the code generator.
- We now generate constants for (most) pointer types; previously constants defined in a schema would not result in any generated code (#41).
- The
set_*functions now check if the arguments are in the same message, and copy if need be (#34). MutMsgis now an instance ofEq.- The
HasMessageclass fromData.Capnp.Untypedis now a type family, rather than a multi-parameter type class. This improves inference and removes some superfluous generalization. - The module
Data.Capnp.Purehas been folded intoData.Capnp. If you were previously using theTextandDatatype aliases it exported, you should instead useTextfromData.TextandByteStringfromData.ByteString; theTextandDataexported byData.Capnpare types from the low-level API.
0.2.0.0
- Redesign the 'Mutable' type class's API.
- Provide helpers for doing zero-copy message creation in pure code.
- General improvements to the documentation.
0.1.0.0
- First release; basic read & write support, serialization only.