mirror of
https://github.com/denoland/deno
synced 2024-10-30 01:56:42 +00:00
d461a784b2
example writeFile benchmark: ``` # before time 188 ms rate 53191 time 168 ms rate 59523 time 167 ms rate 59880 time 166 ms rate 60240 time 168 ms rate 59523 time 173 ms rate 57803 time 183 ms rate 54644 # after time 157 ms rate 63694 time 152 ms rate 65789 time 151 ms rate 66225 time 151 ms rate 66225 time 152 ms rate 65789 ``` |
||
---|---|---|
.. | ||
tests | ||
Cargo.toml | ||
lib.rs | ||
README.md |
deno_ops
proc_macro
for generating highly optimized V8 functions from Deno ops.
// Declare an op.
#[op(fast)]
pub fn op_add(_: &mut OpState, a: i32, b: i32) -> i32 {
a + b
}
// Register with an extension.
Extension::builder()
.ops(vec![op_add::decl()])
.build();
Performance
The macro can optimize away code, short circuit fast paths and generate a Fast API impl.
Cases where code is optimized away:
-> ()
skips serde_v8 andrv.set
calls.-> Result<(), E>
skips serde_v8 andrv.set
calls forOk()
branch.-> ResourceId
or-> [int]
types will use specialized method likev8::ReturnValue::set_uint32
. A fast path for SMI.-> Result<ResourceId, E>
or-> Result<[int], E>
types will be optimized like above for theOk()
branch.
Fast calls
The macro will infer and try to auto generate V8 fast API call trait impl for
sync
ops with:
- arguments: integers, bool,
&mut OpState
,&[u8]
, &mut [u8],
&[u32],
&mut [u32]` - return_type: integers, bool
The #[op(fast)]
attribute should be used to enforce fast call generation at
compile time.
Trait gen for async
ops & a ZeroCopyBuf equivalent type is planned and will be
added soon.