I think I love Common Lisp. I'm a developer who works professionally with statically typed languages (C++), but in my free time, I've started writing small programs in Common Lisp. It began with Advent of Code one Christmas, which I didn't finish at all, and I've really enjoyed working with it ever since. Hence this blog will be about programming in this delightful language. ^.^

My interest in Lisp started when I heard great things about its macro system. People were like "you can do stuff called domain-specific languages" and "the possibilities are limitless". Back then I was working with C++, and the little useful quirk I appreciated most was its template system. That stuff gave me the ability to create control flow constructs borrowed from other languages - things like defer, running a function only once, lazy evaluation, and more (like a butchered Haskell type system). But the results weren't pretty: the syntax was cumbersome, and when errors occurred, they were oof to debug.

But the macros could solve everything! I could create a programming language Frankenstein's monster and it would look like a totally natural part of the language. Isn't that a dream for a dreamer? All this beautiful talk on Hacker News gave me a push to go and look around the wonderful garden of Lisp.

I guess you know stuff like The Little Schemer (which I've read :P) or the SICP (which I didn't >.<), the talk was everywhere and I was curious. I knew about Racket, Chicken Scheme, or Clojure but since I was really big on OOP and I was lucky to stumble onto information about the nature of objects in Common Lisp, it was a done deal.

But ladies and gentlemen, that was not all that got my heart. I also realized that debugging works slightly differently than in other languages (and the experience can go from "Lord save me!" to "oh wrong value here"). Since the program lives in an image, you can change the state of the program, so you can rewrite the function and try it again from some point. I don't know, it just helps.

My setup: Doom Emacs and Sly. There! I said it. I tried to learn the default Emacs with its somewhat odd keybindings and I quickly learned why people want to use it with foot pedals. So I need Vim bindings, and with Emacs you don't even need to learn :q because you never have to quit - if you're hardcore like that.

I was also considering SLIME but you know what? My family has three young cats and one older cat lady, so of course I chose the program that starts with a greeting like this:

; 
;     |\__/,|
;     |o o  |
;     ( T   )
;    .^`^--'^.   Are we consing yet?
;    `.  ;  .'
;    | | | | |
;   ((_((|))_))
;             hjw
; 
; Dedicated output stream setup (port 34699)
; Redirecting all output to this MREPL
; SLY 1.0.43 (#<MREPL mrepl-1-1>)

And let me tell you, when Sylvester asks whether we are consing yet, I always answer the same: "Let's cons then!"