Build a simple microservice in three languages to have a solid baseline to compare implementation time.
GitHub is where people build software. More than 28 million people use GitHub to discover, fork, and contribute to over…github.com
1. Download json data from reddit
2. Transform it to a different structure
3. Return transformed data
This is a very common pattern for microservices. Slightly bigger than a hello world and forces you to bump into some platform warts.
Golang is in a sweet spot of simple syntax, fast compiled language, rich standard library and age of platform. I would recommend it to any team looking to build on a solid platform.
Crystal is a beautiful language. The standard library is rich and well thought out. Type inference mostly just works. The size of the community, age of the language and issues teams have hit trying scale up to larger systems will keep me away from recommending it for anything other than side projects.
I want to like Rust. This is my second time implementing something in rust. They have done a great job writing documentation around the language. Rust book is massive. My main issue with rust comes when you start to wade outside the standard library.
You have to chose your own destiny on concurrency primitives, http clients, servers, routers even byte buffers come from external crates. Hopefully you pick libraries that work together. Good luck if your team goes through an open source audit.
Detailed thoughts on implementations
Rust is intended to be a language for highly concurrent and highly safe systems, and " programming in the large", that…en.wikipedia.org
Rust requires a larger investment in time to get moving. Larger being defined as a hour or two of reading about memory management for a senior engineer will get you started. Errors are normally helpful at suggesting next steps.
Batteries were not included. Have to go out and decide which async library / http server is right for your project. To do this basic workflow brought in 150+ transitive dependencies.
Many of the code examples out there are using use xxx::*; which makes it hard to understand where things are coming from. Avoid use* while you are learning.
Go (often referred to as Golang) is a programming language created by Google in 2009 by Robert Griesemer, Rob Pike, and…en.wikipedia.org
Implementation-wise was pretty straight forward. Deep generic JSON access was really ugly and involved a lot of type casting. Went with a defined JSON type to clean up the code.
Go has a standard http server but routing is third party. Went with echo because the documentation and error handling was helpful. Used std JSON support but its known to be slow. Consider picking a third party library if your payloads are large.
Implementation brought in 11 transitive dependencies.
Note: Reddit seems to be blacklisting go’s http agent. Consistent 429s until I changed it.
Crystal is a general-purpose, object-oriented programming language, designed and developed by Ary Borenszweig, Juan…en.wikipedia.org
Youngest language. Smallest implementation. Code is very ruby like. I appreciate the JSON builder concept the standard library provides. Release build can spike in time to 5 seconds. Build time horror stories on reddit make me nervous about using it for anything serious.
Standard library wise similar situation to golang in that http server built in router is third party. Implementation brought in 4 transitive dependencies.