Commit 9fcedc7
perf(vm): pass callback args by slice to skip per-call Vec allocs 🩻
In `dispatch_vec_call` and `dispatch_vec_call_dynamic`, every broadcast
element used `std::mem::replace(&mut elem_args, Vec::with_capacity(args))`
to hand a fresh `Vec<Value>` to `call_callback` — N allocations per outer
call. Likewise every stdlib HOF callsite did `comp.call(vec![…])`, one
heap allocation per element of `map`/`filter`/`sort_by`/`reduce`/etc.
`call_callback` and `VmCallable::call` now take `&[Value]`. The native
path was already passing `&args`; the closure path becomes
`extend(args.iter().cloned())`. The vec dispatch loops reuse a single
`elem_args` buffer via `clear()`. Stdlib HOFs build stack arrays. Three
`vec![x.clone()]` sites that clippy flagged switch to
`std::slice::from_ref(&x)`, eliminating a real Rc bump+drop per element
on object-heavy iterables.
`vec_hot_loop` and `hof_pipeline` benches show no meaningful movement
(the allocator caches these small Vecs well), but the dispatch loops and
HOF callsites read cleaner and the slice-from-ref change has measurable
upside for non-trivial element types.
Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>1 parent 87e2e1b commit 9fcedc7
3 files changed
Lines changed: 27 additions & 27 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
294 | 294 | | |
295 | 295 | | |
296 | 296 | | |
297 | | - | |
| 297 | + | |
298 | 298 | | |
299 | 299 | | |
300 | 300 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
238 | 238 | | |
239 | 239 | | |
240 | 240 | | |
241 | | - | |
| 241 | + | |
242 | 242 | | |
243 | 243 | | |
244 | 244 | | |
| |||
288 | 288 | | |
289 | 289 | | |
290 | 290 | | |
291 | | - | |
| 291 | + | |
292 | 292 | | |
293 | 293 | | |
294 | 294 | | |
| |||
376 | 376 | | |
377 | 377 | | |
378 | 378 | | |
379 | | - | |
| 379 | + | |
380 | 380 | | |
381 | 381 | | |
382 | 382 | | |
| |||
394 | 394 | | |
395 | 395 | | |
396 | 396 | | |
397 | | - | |
| 397 | + | |
398 | 398 | | |
399 | 399 | | |
400 | 400 | | |
| |||
410 | 410 | | |
411 | 411 | | |
412 | 412 | | |
413 | | - | |
| 413 | + | |
414 | 414 | | |
415 | 415 | | |
416 | 416 | | |
| |||
428 | 428 | | |
429 | 429 | | |
430 | 430 | | |
431 | | - | |
| 431 | + | |
432 | 432 | | |
433 | 433 | | |
434 | 434 | | |
| |||
458 | 458 | | |
459 | 459 | | |
460 | 460 | | |
461 | | - | |
| 461 | + | |
462 | 462 | | |
463 | 463 | | |
464 | 464 | | |
| |||
479 | 479 | | |
480 | 480 | | |
481 | 481 | | |
482 | | - | |
| 482 | + | |
483 | 483 | | |
484 | 484 | | |
485 | 485 | | |
| |||
499 | 499 | | |
500 | 500 | | |
501 | 501 | | |
502 | | - | |
| 502 | + | |
503 | 503 | | |
504 | 504 | | |
505 | 505 | | |
| |||
521 | 521 | | |
522 | 522 | | |
523 | 523 | | |
524 | | - | |
| 524 | + | |
525 | 525 | | |
526 | 526 | | |
527 | 527 | | |
| |||
534 | 534 | | |
535 | 535 | | |
536 | 536 | | |
537 | | - | |
| 537 | + | |
538 | 538 | | |
539 | 539 | | |
540 | 540 | | |
| |||
555 | 555 | | |
556 | 556 | | |
557 | 557 | | |
558 | | - | |
| 558 | + | |
559 | 559 | | |
560 | 560 | | |
561 | 561 | | |
| |||
700 | 700 | | |
701 | 701 | | |
702 | 702 | | |
703 | | - | |
| 703 | + | |
704 | 704 | | |
705 | 705 | | |
706 | 706 | | |
| |||
837 | 837 | | |
838 | 838 | | |
839 | 839 | | |
840 | | - | |
| 840 | + | |
| 841 | + | |
| 842 | + | |
841 | 843 | | |
842 | 844 | | |
843 | 845 | | |
| |||
865 | 867 | | |
866 | 868 | | |
867 | 869 | | |
868 | | - | |
| 870 | + | |
869 | 871 | | |
870 | 872 | | |
871 | 873 | | |
| |||
884 | 886 | | |
885 | 887 | | |
886 | 888 | | |
887 | | - | |
| 889 | + | |
888 | 890 | | |
889 | 891 | | |
890 | 892 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
693 | 693 | | |
694 | 694 | | |
695 | 695 | | |
696 | | - | |
| 696 | + | |
697 | 697 | | |
698 | 698 | | |
699 | 699 | | |
| |||
713 | 713 | | |
714 | 714 | | |
715 | 715 | | |
716 | | - | |
| 716 | + | |
717 | 717 | | |
718 | 718 | | |
719 | | - | |
720 | | - | |
| 719 | + | |
| 720 | + | |
721 | 721 | | |
722 | 722 | | |
723 | 723 | | |
724 | 724 | | |
725 | 725 | | |
726 | | - | |
| 726 | + | |
727 | 727 | | |
728 | 728 | | |
729 | 729 | | |
| |||
945 | 945 | | |
946 | 946 | | |
947 | 947 | | |
948 | | - | |
949 | | - | |
| 948 | + | |
950 | 949 | | |
951 | 950 | | |
952 | 951 | | |
| |||
1028 | 1027 | | |
1029 | 1028 | | |
1030 | 1029 | | |
1031 | | - | |
1032 | | - | |
| 1030 | + | |
1033 | 1031 | | |
1034 | 1032 | | |
1035 | 1033 | | |
| |||
1202 | 1200 | | |
1203 | 1201 | | |
1204 | 1202 | | |
1205 | | - | |
| 1203 | + | |
1206 | 1204 | | |
1207 | 1205 | | |
1208 | 1206 | | |
0 commit comments