Repository navigation
Releases: grepjava/vega
Releases · grepjava/vega
Release list
1.0.0
Install with .package(url: "https://github.com/grepjava/vega.git", from: "1.0.0"). These notes are also in RELEASE.md; coming from SwiftNIO, see docs/MIGRATING-FROM-NIO.md.
Vega's API is frozen: from 1.0, Vega follows semantic versioning. A minor
release adds; only a major one breaks. 1.0 is 0.5 reshaped so that it can
stay that way. Most of the work is renames, and a few behaviours change.
Conventions
- Errors are structs with a
code, not enums, so kinds can be added
without breaking anyone. Match withcatch IOError.cancelledor
error == .timedOut, or switch overerror.codewith adefault. A
payload is a property (error.ioError), not a pattern binding. Enums that
will grow are structs too (IOBackend,ContentCoding,HashAlgorithm). - Cancellation. A wait with its own error type throws that type's
.cancelled. A wait without one throwsCancellationError:Notify.notified(),
ShutdownToken.wait(),TCPServer.wait(),SignalStream.recv(),
JoinSet.next(),Runtime.sleep,Interval.tick. A sequence of values ends
with nil: iterators,QUICEndpoint.accept(),QUICConnection.acceptStream(). - Timeouts read like
Clock:for:takes aDuration,until:an instant. - Modules. A protocol's networked module has its plain name and its
sans-I/O logic is in itsCoremodule. What Garuda builds on is
@_spi(Garuda); what the modules share ispackage.
Renamed
| 0.5 | 1.0 |
|---|---|
Runtime.timeout(_:) |
Runtime.timeout(for:), timeout(until:) |
Runtime.withIODeadline |
Runtime.withIOTimeout(for:), withIOTimeout(until:) |
IODeadlineTrigger |
IOTimeoutTrigger |
withWriteStallTimeout(_:) |
withWriteStallTimeout(for:) |
Channel |
MPSCChannel |
JobStamp, Runtime.currentJobStamp |
PollStamp, Runtime.currentPollStamp (nil off a worker) |
ShutdownSignal |
ShutdownToken |
ShardOptions |
ShardConfiguration |
Runtime(workers:...) |
also Runtime(configuration:) with Runtime.Configuration |
Runtime.seeded, the paused clock |
VegaTest |
Decoder, Encoder (VegaIO) |
FrameDecoder, FrameEncoder |
IOBuffer.write |
IOBuffer.append (grows); appendWithinCapacity stops at the capacity |
halves(), SplitStream, DuplexStream.Split |
split() returning StreamHalves |
UDPSocket.connect(to:) on a socket |
setPeer(_:); UnixDatagram.connect(path:) is setPeer(path:) |
Runtime.blocking refusing when the queue is full |
Runtime.tryBlocking (nil when full); blocking always waits its turn |
H2FrameHeader, H2FrameType, H2Flags, H2Error, H2Setting |
HTTP2FrameHeader, HTTP2FrameType, HTTP2Flags, HTTP2ErrorCode, HTTP2Setting |
WS* (WSCloseCode, WSOpcode, WSFrameHeader, WSDeflate...) |
WebSocket* |
HTTP3Error (UInt64 constants) |
HTTP3ErrorCode (a struct; .rawValue) |
QUICError |
QUICErrorCode |
QUICConnectionHandle, QUICStreamHandle |
QUICConnection, QUICStream |
QUICConnection, QUICStream (state machines) |
QUICConnectionState, QUICStreamState (VegaQUICCore) |
QUICServerConfig, QUICClientConfig |
QUICServerConfiguration, QUICClientConfiguration; applicationProtocols: [String], maxIdleTimeout: Duration, certificateKey(s) |
HTTP1Connection |
HTTP1Client |
HTTP1Server.Configuration, HTTP1Limits' maxHeadSize, maxFields |
HTTP1Configuration; maxHeaderSize, maxHeaderCount |
HTTP2Configuration.maxHeaderListSize, HTTP3Configuration.maxFieldSectionSize |
maxHeaderSize |
TLSConfiguration.TrustRoots, CertificateVerifier.TrustRoots |
TrustRoots (VegaCrypto) |
TLSConfiguration.Version, NetworkTLS's tls_protocol_version_t |
TLSVersion |
TLSConfiguration.Verification.none |
.disabled |
CertificateVerifier.verify(chain:hostname:) |
verify(chain:serverName:) |
TCPStream.networkTLS() |
tlsSession() |
NetworkTLS.Trust.anyCertificate |
.insecureAnyCertificate |
VegaTLS's Digest, DigestError |
VegaCrypto's Digest, throwing CryptoError |
VegaExtras |
Quiesce in Vega, VegaProxy, VegaCompression |
Changed
IOErroraddslimitExceeded,unexpectedEndOfStream,hostNotFoundand
lookupFailed. A stream read into a full buffer throws.limitExceeded
instead of returning 0, which read as end of stream.IOBuffer.countis read-only;removeLast(_:)trims.QUICConnectionErroraddsidleTimeout,handshakeFailed(code:)and
cancelled.connectandopenStreamare cancellable. A server that never
answers now times out: the idle timeout's floor no longer grows with each
probe.HTTP3Server.servetakesshutdown:and drains with GOAWAY, as the HTTP/1
and HTTP/2 servers do. Bodies default to at most 8 MiB in all three.- VegaWire's
ByteBufferandByteSpanare public. - A TLS client that verifies needs a server name.
Decompressorneeds an
explicit limit.
Adapters and VegaNIO are packages of their own, which build against this
release.