fennel

Created: Aug 03, 2022Published: Nov 01, 2022Last modified: Apr 05, 2023
No tags
Word count: 22Backlinks: 3

A clojure-like lisp that compiles to lua.

Useful for writing an AwesomeWM config, Love2d games, and other places lua is relevant.


Backlinks

Everyone's journey through programming languages is different - we all choose different times to start and stop.

One thing I know for sure - the more languages you use in-anger, the easier learning the next one is. I really didn't know anything about my first language or two until I learned the third or fourth.

More details to leave here, but for now, here's a rough outline of my path:

  • Primitive Java in college courses
  • Objective-C and a basic iOS app
  • JavaScript via Codecademy
  • Full stack JavaScript
  • BackboneJS
  • AngularJS
  • NodeJS
  • MongoDB
  • Golang for some microservices
  • Brief Ruby + Rails + ReactJS frontend
  • Full Stack JS with Angular, Koa, RethinkDB
  • Plus a swift iOS consumer
  • Angular2 with TypeScript, Node + GraphQL backend with Typescipt
  • Go microservice framework, data pipeline, GraphQL service
  • Elixir rewrite with same features
  • Elm frontend
  • Switch from Neovim to Emacs (first lisp exposure)
  • Full Haskell rewrite
  • Forced switch to Python backend, opt-in to ClojureScript frontend (Reframe)
  • Bash tooling refactored into Clojure
  • Fennel (Lisp for Lua) in Love2d and AwesomeWM
  • Python (Django) and Python (FastApi, Strawberry)
  • 'modern' React with Typescript (yuck!)
  • GDScript ( Godot )

At the time of writing, my opinions are quite strongly in favor of Clojure for just about everything practical. It does so much in so little code, is extremely flexible and malleable, and is excellent for interactive debugging. Especially with the recent expansion of targets (e.g. Babashka), Clojure can reach everywhere.

I do think my path had something to do with my stability at the end. If folks come into clojure without trying to destructure json in Go, without dealing with python in anger, or without typing yourself into a category theory corner in Haskell, you might need to go chase that first.

I loved Elixir for it's simple and effective standard library and interactivity as well - Clojure just feels like an even better execution of those things.

More to share here! Feel free to ping me if you want to hash any of this out,

I'm game :D

Ralphie is a library for useful clojure / babashka apis.

It provides namespaces and functions for integrating with whatever tools I use.

The gist: bash-like scripting and automation libraries via babashka and repl -driven development.

Originally targetted linux cli helpers, but expanded to some osx use-cases as well.

Example namespaces: emacs, tmux, browser, git, spotify, rofi.