There’s nothing like writing a complex application in a language for really learning it. I’ve been able to read and write small pieces of Scheme for years. And I’ve known enough of the underpinnings of the language to write a (very) small Scheme interpreter in the past. But, part of the point of writing Shrew in Scheme as opposed to, say, Ruby is to really learn the language.

I haven’t been at it for long, but here are some random thoughts and comments so far. Much of this will change as I figure out how to use Scheme properly. These comments are also mainly a comparison of the only other functional language I know well: Haskell.

  • The syntax is not very clear: everything looks the same. This prevents you from scanning the code to get a feel for what is happening. The indentation helps, but fundamentally every operation is just a parenthesized expression. I am certain that this is just cultural, with more exposure I’ll get better at reading; don’t count this as a negative.

  • I really miss pattern matching. How can you program without it? I’m going to have to look into destructuring-bind.

  • Dynamic typing is sweet. As well as all the other benefits, dynamic typing + modules = as much encapsulation as classes give you in C++.

  • The standard libraries are pretty paltry. The SRFIs add a lot, but it’s still nowhere near as rich as pretty much any other language. Maybe I’ll explore Common Lisp at some point.

  • Currying is not just an implementation technicality, it’s useful for designing data structures. I miss currying as well.