I might not be getting a reference here, but FWIW, I had a recent experience with Scheme that was interesting.<p>I did SICP nearly 19 years ago as a freshman, in 1997.  And then a few months ago, I ported the metacircular-evaluator -- the &quot;crown&quot; of the course -- to femtolisp (the Lisp implementation underlying Julia).<p>My thoughts were:<p>1) It sure is awkward to represent struct fields 1 2 3 as (cdr struct), (cadr struct), (caddr), ... Yes this is nice to show that car and cdr are all you need as axiomatic primitives, but for practical purposes it&#x27;s annoying.  You end up with lots of little functions with long names.<p>2) Scheme code is very imperative!  Even the metacircular evaluator uses set-cdr! and so forth.  I don&#x27;t like imperative code with the Lisp syntax.<p>3) It is awkward to represent environments with assoc lists.  I feel that having a language which is really bootstrapped requires some kind of hash table&#x2F;dictionary.  Because you need that to implement scopes with O(1) access rather than O(n).  I believe there are experimental lisps that try to fix this.<p>4) Macros also seem to have a needlessly different syntax than regular functions.  There are Lisps with f-exprs rather than s-exprs that try to fix this: <a href="https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Fexpr" rel="nofollow">https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Fexpr</a><p>I was surprised by #3 and #4 -- it some sense Scheme is less &quot;meta&quot; and foundational than it could be.  #2 is also a fundamental issue... at least if you want to call it the &quot;foundation&quot; of computing and build Lisp machines; I think this is evidence that this idea is a fundamentally flawed.  #1 just makes it pale into languages like Python or even JavaScript.