This updates the internal data structures of SignalKind signals to be backwards compatible but simpler. This results in a slight speedup in V8.
// before
export function start<T>(talkback: TalkbackFn): Start<T> {
const box: any = [talkback];
box.tag = SignalKind.Start;
return box;
}
export function push<T>(value: T): Push<T> {
const box: any = [value];
box.tag = SignalKind.Push;
return box;
}
// after
export function start<T>(talkback: TalkbackFn): Start<T> {
return {
tag: SignalKind.Start,
0: talkback,
} as Start<T>;
}
export function push<T>(value: T): Push<T> {
return {
tag: SignalKind.Push,
0: value,
} as Push<T>;
}
These are backwards-compatible because Wonka code (even before the current major, is only ever guaranteed to access [0] or .tag but never any array primitives.
Summary
This updates the internal data structures of
SignalKind
signals to be backwards compatible but simpler. This results in a slight speedup in V8.These are backwards-compatible because Wonka code (even before the current major, is only ever guaranteed to access
[0]
or.tag
but never any array primitives.Set of changes
start()
andpush()
primitives