After a couple of iterations we settled for the go language as the primary language for rewrite of happy pancake from C#. Ideally we'll converge on Haskell later (that's something I would really like, due to the powerful type system and high suitability for capturing domain models). However, for the time being the primary language will be go. Reasons for that being:
- Simplicity of the language and similarity to C#
- Excellent ecosystem for the development of backend servers
- Availability of go drivers for FoundationDB
- Linux development stack (Ubuntu + Sublime/Vim) without large license fees
- Language is expressive enough for our needs
- Excellent resources and help tools
Why FoundationDB is so important to us
- would be another blog post later (long-story short: it is like fast Redis with proper clustering support and only one data structure
- sorted key-value ranges).
There are a few downsides of golang that we are going to live with:
- Concept of workspaces is somewhat messed up (imagine, that you have to work with two versions of a library). However, this is not nearly as bad as dll and nuget hell in .NET world
- Absence of generics or type inference that would work as such
Getting started with golang was rather simple. We went with Tomas through:
All of these resources are an easy read (mostly attributed to the simplicity of the language itself). While doing that I setup an Ubuntu (LTS) with Sublime Text 2 and GoSublime package. Given all that, it was relatively easy to start porting layer code for FoundationDB from python to golang.
While working on layer code, I had also to encounter Python along with its REPL. Syntax was a bit odd in the beginning, but quite simple in the long run. No tutorials even needed.
For the next week I plan to finish porting queue and pub/sub layers for FoundationDB from python to golang. We'll see how it goes from there.