I've written 3 generations of memcached-to-DynamoDb server now. That is, a server that speaks the memcached text protocol to its clients, but stores data in Amazon DynamoDb instead of memory. (Why?) Perl is dying, so generation 2 was written in Python, using the system version that was already in our base images. But cultural issues plagued it, so I began thinking about generation 3. What language to write in?
Perl is still dying. PHP doesn't have a great async story; I could use stream_select, but I was hoping not to build even more of the server infrastructure myself. Outside of that, we don't have any other interpreters or runtime environments pre-installed in our image, and I didn't want to bloat it more.
Of the compiled languages, then:
- Rust was known to be incomprehensible.
- C and C++ are not safe, and don't have package managers.
- Go... doesn't have generics?
- Nothing else in the category seems to have critical mass (e.g. an AWS SDK ready.)
We have another project in Go that I wrote circa Go 1.4; since then, it required a tiny bit of understandable work for the massive benefit of migrating to modules (and that became devproxy2. I value stability.) If you don't want to write a generic library, then Go is fine enough.
Go is still burdened by a self-isolating inner circle, making it faux-open-source at best. But on the other hand, they have built a safe, concurrent, stable, popular, compiled language, with a standard package manager. It even has an official AWS SDK.