Opened 4 months ago

Last modified 8 weeks ago

#1623 new enhancement

Avoid consing for optional procedure arguments

Reported by: sjamaan Owned by: sjamaan
Priority: minor Milestone: 5.3
Component: compiler Version: 5.0.0
Keywords: Cc:
Estimated difficulty: medium


Currently, anything that accepts optional, rest or keyword arguments has to build a list and then pick that list apart. This is wasteful because it should not be necessary at all.

We could start with the low-hanging fruit like case-lambda and #!optional, where the binding of arguments and argument count checking is relatively simple. Handling #!key and #!rest or dotted tail rest argument notation is something that seems to me either too difficult and possibly not even worth it: you usually want to treat those as a list (but patterns like optional could still be handled specially, if nothing else refers to the identifier).

Attachments (1)

rest-args.patch (15.7 KB) - added by sjamaan 3 days ago.
Patch against 4b184cd

Download all attachments as: .zip

Change History (5)

comment:1 Changed 4 months ago by sjamaan

Summary: Implement faster vararg proceduresAvoid consing for optional procedure arguments

comment:2 Changed 3 months ago by evhan

Version: 5.0.0rc15.0.0

Moving to 5.0.0 just to keep the listings tidy.

comment:3 Changed 3 months ago by sjamaan

Milestone: someday5.2

comment:4 Changed 8 weeks ago by felix winkelmann

Milestone: 5.25.3

Changed 3 days ago by sjamaan

Attachment: rest-args.patch added

Patch against 4b184cd

Note: See TracTickets for help on using tickets.