Changelog for capnp-0.8.0.0
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
Cerialize
andMarshal
type classes now take the state tokens
as 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 construction
a
ConstMsg
from 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.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
Server
class, 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
newPromiseClient
for creating a promise-based client that can be fulfilled later. -
Make
Client
an instance ofIsClient
. -
Previously, there were a number of functions that had two variants:
foo
, which ran inIO
fooSTM
, which ran inSTM
.
Now there is just one variant,
foo
, which is polymorphic overMonadSTM
, defined by themonad-stm
package. There are instances of this class forIO
,STM
, and any monad transformer applied to an instance.Note that previously some of the
foo
variants 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 . liftSTM
Or, you can add
liftIO
/liftSTM
to 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
Data
prefix has been removed from theData.Capnp
hierarchy.
- 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:
createPure
can now be used with any instance ofMonadThrow
, not justEither SomeException
.LimitT m
is now an instance ofMonadIO
, provided thatm
is an instance.- More type class instances from elsewhere in the library are
re-exported via the
Capnp
module. - The
IsPtr
type class has been split intoFromPtr
andToPtr
. 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'
. newMessage
now accepts an optional size hint.- Instances of
Cerialize
now 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). MutMsg
is now an instance ofEq
.- The
HasMessage
class fromData.Capnp.Untyped
is now a type family, rather than a multi-parameter type class. This improves inference and removes some superfluous generalization. - The module
Data.Capnp.Pure
has been folded intoData.Capnp
. If you were previously using theText
andData
type aliases it exported, you should instead useText
fromData.Text
andByteString
fromData.ByteString
; theText
andData
exported byData.Capnp
are 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.