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 ;)
No comments:
Post a Comment