195 lines
11 KiB
Markdown
195 lines
11 KiB
Markdown
|
# Go Cap'n Proto Release Notes
|
||
|
|
||
|
## 2.17.0
|
||
|
|
||
|
- Add `capnp.Canonicalize` function that implements the
|
||
|
[canonicalization](https://capnproto.org/encoding.html#canonicalization)
|
||
|
algorithm. ([#92](https://github.com/capnproto/go-capnproto2/issues/92))
|
||
|
- Zero-sized struct pointers are now written with an offset of
|
||
|
-1 to distinguish them from a null pointer.
|
||
|
([#92](https://github.com/capnproto/go-capnproto2/issues/92))
|
||
|
- Better support for alternate `Arena` implementations
|
||
|
- [Document `Arena` contract](https://godoc.org/zombiezen.com/go/capnproto2#Arena)
|
||
|
in more detail
|
||
|
- Permit an `Arena` to have a single empty segment in `NewMessage`
|
||
|
- `Arena` allocation optimizations: both `SingleSegment` and
|
||
|
`MultiSegment` now gradually ramp up the amount of space allocated in
|
||
|
a single allocation as the message grows. This is similar to how
|
||
|
built-in Go `append` function works. Workloads with medium to large
|
||
|
messages should expect a decrease in number of allocations, while
|
||
|
small message workloads should remain about the same. Please file an
|
||
|
issue if you encounter any performance regressions.
|
||
|
([#96](https://github.com/capnproto/go-capnproto2/issues/96))
|
||
|
- Fix double-far pointer logic. ([#97](https://github.com/capnproto/go-capnproto2/issues/97))
|
||
|
This is a long-standing bug with reading and writing multi-segment
|
||
|
messages. I've added broader test coverage for multi-segment messages
|
||
|
and far pointers, so it's unlikely that such a failure will persist in
|
||
|
the future.
|
||
|
- Accessing a field in a union when that field is not the one set now
|
||
|
results in a panic. ([#56](https://github.com/capnproto/go-capnproto2/issues/56))
|
||
|
This is intended to help uncover programming mistakes where a union
|
||
|
field is accessed without checking `Which()`. Prior to this change,
|
||
|
unset union field accessors would silently return garbage.
|
||
|
- `Struct.Address()` and `List.Address()` are now deprecated.
|
||
|
Especially for `List`, where the address is at the beginning of the
|
||
|
data, not the composite literal, the return value is not well-defined
|
||
|
and its not clear how to use it. Use `capnp.SamePtr` if you need to
|
||
|
check for pointer reference equality. File an issue if you're using
|
||
|
`Address()` for something else.
|
||
|
|
||
|
## 2.16.0
|
||
|
|
||
|
- Add BUILD.bazel files ([#88](https://github.com/capnproto/go-capnproto2/issues/88))
|
||
|
|
||
|
## 2.15.0
|
||
|
|
||
|
- capnpc-go now fails when a file does not include an import annotation.
|
||
|
([#41](https://github.com/capnproto/go-capnproto2/issues/41))
|
||
|
- Remove rbtree dependency ([#80](https://github.com/capnproto/go-capnproto2/issues/80))
|
||
|
- Add option to reduce allocations in `capnp.Decoder`
|
||
|
([#79](https://github.com/capnproto/go-capnproto2/issues/79))
|
||
|
- Add `String()` methods for lists
|
||
|
([#85](https://github.com/capnproto/go-capnproto2/issues/85))
|
||
|
- Add `String()` methods to schema.capnp.go
|
||
|
([#83](https://github.com/capnproto/go-capnproto2/issues/83))
|
||
|
|
||
|
## 2.14.1
|
||
|
|
||
|
- Use [new Go generated code convention](https://golang.org/s/generatedcode) in
|
||
|
capnpc-go output ([#78](https://github.com/capnproto/go-capnproto2/issues/78))
|
||
|
|
||
|
## Retroactive Releases
|
||
|
|
||
|
go-capnproto2 was originally a "build from HEAD" sort of library, as was
|
||
|
convention for most Go libraries at the time. Before 2.14.1, Semantic
|
||
|
Versioning tags were retroactively added so that it would be clear what the
|
||
|
differences were since original release, since marking it as "2.0.0" would seem
|
||
|
awkward.
|
||
|
|
||
|
The general process was: any significant new feature was given a minor release,
|
||
|
and then any bugfixes before the next minor release were given a "2.X.1"
|
||
|
release.
|
||
|
|
||
|
<table>
|
||
|
<thead>
|
||
|
<tr>
|
||
|
<th scope="col">Version</th>
|
||
|
<th scope="col">Description</th>
|
||
|
</tr>
|
||
|
</thead>
|
||
|
<tbody>
|
||
|
<tr>
|
||
|
<th scope="row"><a href="https://github.com/capnproto/go-capnproto2/releases/tag/v2.14.0">2.14.0</a></th>
|
||
|
<td>Add support to <code>pogs</code> for interface types (<a href="https://github.com/capnproto/go-capnproto2/issues/66">#66</a> and <a href="https://github.com/capnproto/go-capnproto2/issues/74">#74</a>)</td>
|
||
|
</tr>
|
||
|
<tr>
|
||
|
<th scope="row"><a href="https://github.com/capnproto/go-capnproto2/releases/tag/v2.13.1">2.13.1</a></th>
|
||
|
<td>Fix bug with far far pointers (<a href="https://github.com/capnproto/go-capnproto2/issues/71">#71</a>), use <code>writev</code> system call to encode multi-segment messages efficiently in Go 1.8+ (<a href="https://github.com/capnproto/go-capnproto2/issues/70">#70</a>), and add GitHub-Linguist-compatible code generation comment</td>
|
||
|
</tr>
|
||
|
<tr>
|
||
|
<th scope="row"><a href="https://github.com/capnproto/go-capnproto2/releases/tag/v2.13.0">2.13.0</a></th>
|
||
|
<td>Add <code>Conn.Done</code> and <code>Conn.Err</code> methods</td>
|
||
|
</tr>
|
||
|
<tr>
|
||
|
<th scope="row"><a href="https://github.com/capnproto/go-capnproto2/releases/tag/v2.12.4">2.12.4</a></th>
|
||
|
<td>Fix size of created <code>List(Float32)</code></td>
|
||
|
</tr>
|
||
|
<tr>
|
||
|
<th scope="row"><a href="https://github.com/capnproto/go-capnproto2/releases/tag/v2.12.3">2.12.3</a></th>
|
||
|
<td>Fix bugs from fuzz tests: mismatched element size on list access causing crashes (<a href="https://github.com/capnproto/go-capnproto2/issues/59">#59</a>) and miscellaneous packed reader issues</td>
|
||
|
</tr>
|
||
|
<tr>
|
||
|
<th scope="row"><a href="https://github.com/capnproto/go-capnproto2/releases/tag/v2.12.2">2.12.2</a></th>
|
||
|
<td>Fix another shutdown race condition (<a href="https://github.com/capnproto/go-capnproto2/issues/54">#54</a>)</td>
|
||
|
</tr>
|
||
|
<tr>
|
||
|
<th scope="row"><a href="https://github.com/capnproto/go-capnproto2/releases/tag/v2.12.1">2.12.1</a></th>
|
||
|
<td>Fix ownership bug with receiver-hosted capabilities, add discriminant check to <code>HasField</code> (<a href="https://github.com/capnproto/go-capnproto2/issues/55">#55</a>), fix multi-segment bug for data/text lists, and use nulls for setting empty data/text</td>
|
||
|
</tr>
|
||
|
<tr>
|
||
|
<th scope="row"><a href="https://github.com/capnproto/go-capnproto2/releases/tag/v2.12.0">2.12.0</a></th>
|
||
|
<td>Add <code>rpc.ConnLog</code> option and fix race conditions and edge cases in RPC implementation</td>
|
||
|
</tr>
|
||
|
<tr>
|
||
|
<th scope="row"><a href="https://github.com/capnproto/go-capnproto2/releases/tag/v2.11.1">2.11.1</a></th>
|
||
|
<td>Fix packed reader behavior on certain readers (<a href="https://github.com/capnproto/go-capnproto2/issues/49">#49</a>), add <code>capnp.UnmarshalPacked</code> function that performs faster, and reduce locking overhead of segment maps</td>
|
||
|
</tr>
|
||
|
<tr>
|
||
|
<th scope="row"><a href="https://github.com/capnproto/go-capnproto2/releases/tag/v2.11.0">2.11.0</a></th>
|
||
|
<td>Fix shutdown deadlock in RPC shutdown (<a href="https://github.com/capnproto/go-capnproto2/issues/45">#45</a>)</td>
|
||
|
</tr>
|
||
|
<tr>
|
||
|
<th scope="row"><a href="https://github.com/capnproto/go-capnproto2/releases/tag/v2.10.1">2.10.1</a></th>
|
||
|
<td>Work around lack of support for RPC-level promise capabilities (<a href="https://github.com/capnproto/go-capnproto2/issues/2">#2</a>)</td>
|
||
|
</tr>
|
||
|
<tr>
|
||
|
<th scope="row"><a href="https://github.com/capnproto/go-capnproto2/releases/tag/v2.10.0">2.10.0</a></th>
|
||
|
<td>Add <code>pogs</code> package (<a href="https://github.com/capnproto/go-capnproto2/issues/33">#33</a>)</td>
|
||
|
</tr>
|
||
|
<tr>
|
||
|
<th scope="row"><a href="https://github.com/capnproto/go-capnproto2/releases/tag/v2.9.1">2.9.1</a></th>
|
||
|
<td>Fix not-found behavior in schemas and add missing group IDs in generated embedded schemas</td>
|
||
|
</tr>
|
||
|
<tr>
|
||
|
<th scope="row"><a href="https://github.com/capnproto/go-capnproto2/releases/tag/v2.9.0">2.9.0</a></th>
|
||
|
<td>Add <code>encoding/text</code> package (<a href="https://github.com/capnproto/go-capnproto2/issues/20">#20</a>)</td>
|
||
|
</tr>
|
||
|
<tr>
|
||
|
<th scope="row"><a href="https://github.com/capnproto/go-capnproto2/releases/tag/v2.8.0">2.8.0</a></th>
|
||
|
<td>Reduce generated code size for text fields and correct NUL check</td>
|
||
|
</tr>
|
||
|
<tr>
|
||
|
<th scope="row"><a href="https://github.com/capnproto/go-capnproto2/releases/tag/v2.7.0">2.7.0</a></th>
|
||
|
<td>Insert compressed schema data into generated code</td>
|
||
|
</tr>
|
||
|
<tr>
|
||
|
<th scope="row"><a href="https://github.com/capnproto/go-capnproto2/releases/tag/v2.6.1">2.6.1</a></th>
|
||
|
<td>Strip NUL byte from <code>TextList.BytesAt</code> and fix capnpc-go output for struct groups</td>
|
||
|
</tr>
|
||
|
<tr>
|
||
|
<th scope="row"><a href="https://github.com/capnproto/go-capnproto2/releases/tag/v2.6.0">2.6.0</a></th>
|
||
|
<td>Add packages for predefined Cap'n Proto schemas</td>
|
||
|
</tr>
|
||
|
<tr>
|
||
|
<th scope="row"><a href="https://github.com/capnproto/go-capnproto2/releases/tag/v2.5.1">2.5.1</a></th>
|
||
|
<td>Fix capnpc-go regression (<a href="https://github.com/capnproto/go-capnproto2/issues/29">#29</a>) and strip trailing NUL byte in TextBytes accessor</td>
|
||
|
</tr>
|
||
|
<tr>
|
||
|
<th scope="row"><a href="https://github.com/capnproto/go-capnproto2/releases/tag/v2.5.0">2.5.0</a></th>
|
||
|
<td>Add <code>NewFoo</code> method for list fields in generated structs (<a href="https://github.com/capnproto/go-capnproto2/issues/7">#7</a>)</td>
|
||
|
</tr>
|
||
|
<tr>
|
||
|
<th scope="row"><a href="https://github.com/capnproto/go-capnproto2/releases/tag/v2.4.0">2.4.0</a></th>
|
||
|
<td>Add maximum segment limit (<a href="https://github.com/capnproto/go-capnproto2/issues/25">#25</a>)</td>
|
||
|
</tr>
|
||
|
<tr>
|
||
|
<th scope="row"><a href="https://github.com/capnproto/go-capnproto2/releases/tag/v2.3.0">2.3.0</a></th>
|
||
|
<td>Add depth and traversal limit security checks</td>
|
||
|
</tr>
|
||
|
<tr>
|
||
|
<th scope="row"><a href="https://github.com/capnproto/go-capnproto2/releases/tag/v2.2.1">2.2.1</a></th>
|
||
|
<td>Fix data race in reading <code>Message</code> from multiple goroutines</td>
|
||
|
</tr>
|
||
|
<tr>
|
||
|
<th scope="row"><a href="https://github.com/capnproto/go-capnproto2/releases/tag/v2.2.0">2.2.0</a></th>
|
||
|
<td>Add <code>HasFoo</code> pointer field methods to generated code (<a href="https://github.com/capnproto/go-capnproto2/issues/24">#24</a>)</td>
|
||
|
</tr>
|
||
|
<tr>
|
||
|
<th scope="row"><a href="https://github.com/capnproto/go-capnproto2/releases/tag/v2.1.0">2.1.0</a></th>
|
||
|
<td><a href="https://github.com/capnproto/go-capnproto2/wiki/New-Ptr-Type">Introduce <code>Ptr</code> type</a> and reduce allocations in single-segment cases</td>
|
||
|
</tr>
|
||
|
<tr>
|
||
|
<th scope="row"><a href="https://github.com/capnproto/go-capnproto2/releases/tag/v2.0.2">2.0.2</a></th>
|
||
|
<td>Allow allocation-less string field access via <code>TextList.BytesAt()</code> and <code>StringBytes()</code> (<a href="https://github.com/capnproto/go-capnproto2/issues/17">#17</a>)</td>
|
||
|
</tr>
|
||
|
<tr>
|
||
|
<th scope="row"><a href="https://github.com/capnproto/go-capnproto2/releases/tag/v2.0.1">2.0.1</a></th>
|
||
|
<td>Allow nil params in client wrappers (<a href="https://github.com/capnproto/go-capnproto2/issues/9">#9</a>) and fix integer underflow on compare function (<a href="https://github.com/capnproto/go-capnproto2/issues/12">#12</a>)</td>
|
||
|
</tr>
|
||
|
<tr>
|
||
|
<th scope="row"><a href="https://github.com/capnproto/go-capnproto2/releases/tag/v2.0.0">2.0.0</a></th>
|
||
|
<td>First release under <code>zombiezen.com/go/capnproto2</code></td>
|
||
|
</tr>
|
||
|
</tbody>
|
||
|
</table>
|