Skip to main content

New Experiment Language Choices

| @renice@hachyderm.io

(edit: I'm still tinkering with the ideas and have started learning Go, but will probably end up doing this project in either python or bash)

My evolving side project is a configuration management suite that:
1.) uses as much of git as possible and sensible
2.) lightweight
3.) simple things must be very fast turnaround to/from thought<->production
4.) all configs (and binaries if you like) versioned bit-for-bit for all time


I'll write more about the overall system design later; I've written a bit of an intro and will post it when I have code to present (here's what I have in mind for fs permissions: gist) I'm implementing some tools now that I've got the branching & config strategy worked out. I could whip out a lot of it in Perl pretty handily, but I suspect it'll be a one-man show forever if I go that route. At work, almost everything is done in Ruby, which I still don't really like much. Plus two of the leading CFM tools are already in Ruby, so I feel like it's time for something different. So, here's what I'm considering and why:
1) Go
+) generates regular binaries, no VM to maintain on nodes
+) good C compatibility, already has libgit2 bindings
+) garbage collected, first-class strings
+) (yes, +) DNA from C, Erlang, Plan9, and Inferno/Limbo
e.g.) lightweight processes, channels, goroutines
-) I'd have to learn from scratch
-) AFAIK nobody on my team knows/uses it (obscure)
2) C
+) compiled, works literally everywhere, knows your mom intimately
+) good match with git, openssl/gnutls, and libgit2
+) igraph looks neat for smart path & network
-) manual memory, thread, and process management :(
-) I'm rusty as the Titanic
3) Perl >=5.8
+) installed everywhere
+) I'm good/fast at it, prototype in a couple weeks
+) many git utilities are written in perl, good match
-) declining popularity, fractured community
-) modern libs require too much baggage (e.g. Moose)
-) XS is the devil, no usable libgit2 bindings
4) Python
+) installed everywhere I care about
+) thriving community
+) I have some experience (though still much slower than perl)
+) libgit2 bindings exist
+) some of the git tools are already python
-) difficult to bundle with zero dependencies outside the git branch
-) v2.5 -> v3.x transition is in progress, which to choose? (prob 2.7)
5) Java
+) just kidding!
6) Javascript/NodeJS
-) I'm not kidding
+) garbage collected, closures, functional style available, naturally async
+) growing popularity, modules I'd need are fairly mature (relative to node.js)
-) rapidly changing ecosystem/interfaces

To be honest, I'm really leaning towards Go right now but it'd add a month or so before I have something useful.

Comments, suggestions? Don't hold back, you know I wouldn't ;)