I am starting to become very annoyed with #Guile Scheme because they are so far behind in providing some very important modern SRFIs.
Of course I could implement these myself and submit a patch, but in the mean time I would have to wait for my patch to be accepted and distributed in the next Guile version. And while I waited I would have to just implement these SRFIs in my own source code for myself. I don’t have time, so I always end up just implementing the APIs that I need for my own project, usually as a wrapper around some other Guile API that does provide that functionality but in a non-standard way.
For the past two years or so I have kept on running into issues caused by the fact that Guile does not provide SRFI-125 (hash tables) and SRFI-128 (comparators). Guile provides SRFI-69 (the old hash tables) but it doesn’t use comparators, and so the semantics for things like make-hash-table and alist->hash-table in Guile are not compatible with most other R7RS-compliant Scheme implementations. I keep having to go back and update various cond-expand statements to get around this. Some data structures are so fundamental to modern software that you just can’t do without them. Providing these SRFIs should really be a priority.
Also the following would be really nice to have in Guile, like really soon:
- SRFI-160: homogeneous numerical vectors, Guile only provides the older version of it, SRFI-4.
- SRFI-170: POSIX API: Guile provides all of these APIs but not always in a way that follows SRFI-170.
- SRFI-180: JSON, Guile provides all of these APIs but not fully compatible with SRFI-180.
- SRFI-181: Custom ports, Guile provides similar features built-in but not in a way that follows SRFI-181.
#tech #software #Lisp #SchemeLang #Scheme #R7RS #GuileScheme #FunctionalProgramming