I happened across a few notes I made back in October 2011 regarding my experience of using Common Lisp for the first time.
2011-10-14 14:23:55 tonyg
Yesterday I hacked on ~/src/cmsg/lisp.
Network programming wasn’t so hard to get a basic socket listener up and running.
Streams are horribly broken though. No clean separation of encoding from binary I/O. Swank vs raw Slime streams differ, which led to some interesting issues when experimenting with my I/O code interactively. flexi-streams help take away some of the pain, but it’s still pretty awful.
The loop macro is neat. Feels like comprehensions. Comprehensions are pleasant in Erlang and Haskell, and I remember enjoying SRFI-42, but Racket misses them1.
The lack of proper tail recursion is HORRIBLE. Forces some very nasty code. E.g. the tagbody thing.
That everything-is-an-object is GREAT. I wish Racket had this.
Racket’s match is awesome. Totally awesome. Common-lisp pattern matching is in PARLOUS state. There’s nothing remotely close to as nice as Racket’s match. There is no common standard.
Exceptions on end-of-stream simplify the programming of network layers.
2011-10-19 08:06:10 tonyg
The multiple-values implementation is kind of nice, especially in those places where it enables subtle design touches like using
floorto get both quotient and remainder at once. That particular example appeals to me also for its mnemonicity: using
floorgives you the other variant2.