notes-computer-programming-programmingLanguageDesign-prosAndCons-scheme

" The problem is that Scheme provides perhaps too little. The C++ standard library provides you with standard containers, such as hash maps and binary trees, as well as algorithms operating over those containers, such as sorting algorithms. It also provides basic support for multithreading and string tokenization. The latest Scheme standard (R6RS) doesn’t specify any of this, even though these are very basic features that many if not most programmers will need at some point. "

" Batteries Not Included

One of the biggest frustrations I’ve had when trying to write Scheme code is the poor documentation. It’s not that easy to learn what you need to know about the language. Google searches will often yield irrelevant results, or results that are specific to one Scheme implementation. The official language specification document is probably the best source of documentation, which is rather sad. What if you need to use implementation-specific features? Well, the Gambit Scheme page has a long list of undocumented extensions.

Perhaps the Scheme community suffers from a lack of desire to document. From what I’ve seen, it’s fairly typical for Scheme code to have very few comments (if any) and be full of one-letter variable names. There seems to be a prevalent assumption that the code is self-evident and doesn’t need any explaining. This assumption is rather strange, because Scheme is probably the language that most needs documentation out there. In a language where you can use macros to (re)define language constructs, you should never assume that anything is self-evident. "

" For Scheme, nothing's ever really gotten off the ground. Little more needs to be said on the subject than "R6RS module system debacle." There are meta-module systems for Scheme. I'm waiting for the meta meta-module system.

Clojure, however, has http://clojars.org/ and lein (and cake). I've found that Clojure programmers are way more prone to look for something that exists and (perhaps mostly) fits the bill before rolling their own. I attribute this not to Clojure programmers being smarter or better human beings but to the relative ease of creating, searching, and resolving package dependencies. "

" Here’s the defining characterists of Scheme, the stuff whose gestalt makes Scheme special:

    Minimalism.
    Lexical block scope.
    Tail call elimination.
    Continuations.
    Dynamic typing.
    S-expression syntax, and homoiconicity.
    First-class functions and closures.
    Macros.
    Distaste for mutation.

"

--

-- "

It would be dishonest not to point out that despite it's utility to hackers, Scheme shares Haskell's unsuitability for production code. The difference is that Scheme is limited by its minimalistic standard library, not by a flaw in the language, and you can "upgrade" to a syntactically similar, but heavyweight, cousin such as Common Lisp, or Clojure, to get work done."

---

under-specification

    As for Scheme, I don't understand how it is underspecified.

I suspect Brendan was referring to argument evaluation order. By Dave Herman at Wed, 2010-03-10 16:29

Scheme
login or register to post comments
    As for Scheme, I don't understand how it is underspecified 

http://www.r6rs.org/final/html/r6rs/r6rs-Z-H-8.html

    5.9 Unspecified behavior
    If an expression is said to “return unspecified values”, then the expression must evaluate without raising an exception, but the values returned depend on the implementation; this report explicitly does not say how many or what values should be returned. Programmers should not rely on a specific number of return values or the specific values themselves. 

http://www.r6rs.org/final/html/r6rs/r6rs-Z-H-10.html

    The effect of returning twice to the continuation of the last body expression is unspecified. 

http://www.r6rs.org/final/html/r6rs/r6rs-Z-H-12.html

    When a procedure call is evaluated, the operator and operand expressions are evaluated (in an unspecified order) and the resulting procedure is passed the resulting arguments. 

http://www.r6rs.org/final/html/r6rs/r6rs-Z-H-14.html

    If test yields #f and no alternate is specified, then the result of the expression is unspecified. 
    The result of the set! expression is unspecified. 

etc...

The goal was, like C, to allow implementers to do whatever was most efficient given their target platform and over-all approach. Just as with C a great deal of the art of writing portable Scheme is to avoid unspecified behavior. By James Iry at Wed, 2010-03-10 16:51

login or register to post comments

---

jshap70 36 minutes ago

I love scheme, though at first I definitely thought I would hate it. The big issue that I have with it is the difference between interpreters and how things that work in Petite won't always work in Gambit.

reply