On Fri, Mar 13, 2020 at 7:39 AM John Cowan <xxxxxx@ccil.org> wrote:
 
The advantage of having a dictionary is expansibility: an implementation can accept or ignore additional information without polluting the namespace with additional accessors.  The advantage of putting *everything* in a dictionary is uniformity for the user: less API surface.  You don't need a special constructor and accessors.  

A dictionary isn't a more uniform API.  It just moves the naming problem from the record's slots to the dictionary's keys.
 
In addition, since users will normally construct request objects but not access their fields, a dictionary is easier to construct.  If it's just an alist, quasiquote; if it's a hash table, the hash-table procedure (which accepts alternating keys and values), etc.  Record constructors in Scheme are by order of arguments (aka "boa constructors"), which is hard to handle with more than a few components.  So then we get to pointlessly mutable objects, and people reusing them badly, and general messiness.

I don't understand the "pointlessly mutable" comment.  Records can have immutable slots, but dictionaries typically can't.

Absent keywords, I do agree that alists do a better job with naming during construction.