Cyclone Scheme
SRFI needs to die a painful death.<p><pre><code>    SRFI 1 -- enough functions to make lists useable
    SRFI 25 -- multidimensional arrays
    SRFI 28 -- format strings
    SRFI 30 -- nested multiline comments
    SRFI 34 -- exception handling
    SRFI 41 -- streams
    SRFI 43 -- make vectors usable
    SRFI 47 -- add arrays
    SRFI 50 -- C FFI
    SRFI 57 -- records
    SRFI 69 -- hash tables
    SRFI 79 -- primitive (low-level) IO calls
    SRFI 89 -- optional args and named params
    SRFI 111 -- Boxes
    SRFI 121 -- Generators
    SRFI 169 -- underscores in numbers
    SRFI 180 -- JSON (not approved as final version until 2020....)
</code></pre>
The convention of using SRFI numbers is very anti-user. Those names are much easier to read and understand. It&#x27;s <i>very</i> hard to discover stuff.<p>Let&#x27;s say I&#x27;m not new to programming, but I&#x27;m new to scheme and choose the very popular chicken and find myself wanting hash tables. Are they built-in or an egg? Well, searching around the manual gives the following:<p><a href="http:&#x2F;&#x2F;wiki.call-cc.org&#x2F;man&#x2F;5&#x2F;The User's Manual" rel="nofollow">http:&#x2F;&#x2F;wiki.call-cc.org&#x2F;man&#x2F;5&#x2F;The User's Manual</a><p>The manual has a clear &quot;extensions to the standard&quot; page, but that has a hard assumption that you know what the standard says (you probably don&#x27;t). If you assume hash tables are in the r5rs spec, you are about to waste a ton of time finding out that they aren&#x27;t there.<p><a href="http:&#x2F;&#x2F;wiki.call-cc.org&#x2F;man&#x2F;5&#x2F;Extensions to the standard" rel="nofollow">http:&#x2F;&#x2F;wiki.call-cc.org&#x2F;man&#x2F;5&#x2F;Extensions to the standa...</a><p>When you finally come back to the &quot;Extensions to the Standard&quot; page, you get this:<p><pre><code>    compile
    chicken, compiling, library, eval, extras, regex, srfi-0, srfi-2, srfi-4, srfi-6, srfi-8, srfi-9, srfi-10, srfi-11, srfi-12, srfi-15, srfi-16, srfi-17, srfi-23, srfi-26, srfi-28, srfi-30, srfi-31, srfi-39, srfi-55, srfi-61, srfi-62
    load
    chicken, extras, srfi-0, srfi-2, srfi-6, srfi-8, srfi-9, srfi-10, srfi-12, srfi-17, srfi-23, srfi-28, srfi-30, srfi-39, srfi-55, srfi-61, srfi-62. library is implicit.
    eval
    csi, chicken, extras, srfi-0, srfi-2, srfi-6, srfi-8, srfi-9, srfi-10, srfi-11, srfi-12, srfi-15, srfi-16, srfi-17, srfi-23, srfi-26, srfi-28, srfi-30, srfi-31, srfi-39, srfi-55, srfi-61, srfi-62. library is implicit.
</code></pre>
Well great. After that standard dead-end, I&#x27;ve probably run into SRFI somewhere down the line (if not, I&#x27;m probably about to google one of these things). Either way, I wind up on the SRFI page.<p><a href="https:&#x2F;&#x2F;srfi.schemers.org&#x2F;" rel="nofollow">https:&#x2F;&#x2F;srfi.schemers.org&#x2F;</a><p>OK, there are FOUR hash table SRFIs. I&#x27;ll go with SRFI-69 Basic Hash Tables. Looking back at those lists, srfi-69 is nowhere to be seen. More searching will sooner or later take me to the official Chicken Scheme SRFI-69 egg which thankfully is documented.<p>Quite an ordeal. Now, if I want records, I&#x27;ll know to compare that list of SRFI numbers from the extension page with the SRFI list in the SRFI website. That&#x27;ll show me that I want SRFI-9. One of two things is going to happen at this point. I <i>might</i> find out that the Chicken wiki has an entry for records. If I miss that somehow (why isn&#x27;t it in the manual?), then I&#x27;ll have no choice but to <i>read the entire specification document</i> and be either thankful that it&#x27;s short, and&#x2F;or upset that I&#x27;m stuck with zero examples (unless I find the wiki along the way).<p><a href="http:&#x2F;&#x2F;wiki.call-cc.org&#x2F;man&#x2F;5&#x2F;Module (chicken base)#record-structures" rel="nofollow">http:&#x2F;&#x2F;wiki.call-cc.org&#x2F;man&#x2F;5&#x2F;Module (chicken base)#...</a><p><a href="https:&#x2F;&#x2F;srfi.schemers.org&#x2F;srfi-9&#x2F;srfi-9.html" rel="nofollow">https:&#x2F;&#x2F;srfi.schemers.org&#x2F;srfi-9&#x2F;srfi-9.html</a><p>As you can see, that&#x27;s not a good dev experience.<p>Moving away from that, what about compatibility? It&#x27;s basically not possible to polyfill C FFI, underscores in numbers, primitive IO, exception handling, optional args, and similar. I don&#x27;t want to play the &quot;does X library work&quot; game (sometimes switching implementations is unavoidable). These things either need to be required or need to be removed from the SRFI list.<p>Along those same lines, things like records or arrays also need to be required. Sure, they can technically be polyfilled using lists, but the performance of that will make them basically useless.<p>I understand the &quot;teaching language&quot; bit, but r7rs is already too complicated for an average student to implement. Likewise, &quot;embedded must be small&quot; doesn&#x27;t hold weight either. Embedded devs expect to have features stripped out. Saying &quot;generators aren&#x27;t available on tiny platform X&quot; is much easier than saying that &quot;some desktop variants include generator support; good luck&quot;.<p>This is the primary reason why Common Lisp is seen as &quot;business ready&quot; while Scheme is not. Feature Stability, predictability, and documentation matter.