3 ms·
Amongst all the technical differences, following are some of the factors from a team-lead/architect p.o.v: 1) What is the ecosystem now? If it is not good, doe
by sudeepj 11y ago
Amongst all the technical differences, following are some of the factors from a team-lead/architect p.o.v:
1) What is the ecosystem now? If it is not good, does it look like it will improve in next X time or so?
1.1) What are the production ready libraries right now?
1.2) Who are the maintainers? Who is backing them?
1.3) How approachable is the community?
1.4) Are the current pain points are being worked at and at appropriate speed?
1.5) How is the tooling scene?
2) What is the overhead for large codebases? e.g factors = [simplicity, deployability, testability, code-review, refactorability, learnability]
3) How hard/easy it is to wrap C/C++ code/libs if we ever need? Will there be any performance impact?
4) Does it look like more CPU bound code will be added looking at the product roadmap?
We are a python shop. As long as it was network IO centric we were ok. However due addition of features, the CPU bound code has increased and we clearly see the limitations of Python. This has led to find the replacement language. Since we are reviewing now the 'X time' in #1 is '1 year'. For others the tolerance may vary.
As for #2: Code review has an additional overhead due to Python's dynamic nature. Also we need to write additional unit testcases. A language which "prevents" basic issues (not going into 'how') has less overhead on the team.
#3: From what I know, go does not do well here in terms of performance. We deal with lot of 3rd party APIs e.g using VMware APIs which are in C and are called in the main loop. Also evaluation of this point helps us to see if any shortcoming in the current libraries can be augmented by wrapping existing C/C++ libs. Rust & D are better I suppose.
refactorability: GC'ed languages inherently has an advantage (for large codebases). Counter examples welcome.
learnability: Rust suffers here most. This is a point which makes it hard for Rust to get introduced and even though I may have patience to stick with it others may not and drives down the adoption. On most occasions, other teams also need to be convinced for any meaningful transition.
Testability (i.e. unit tests): Python is really good at this. This is not a point for the testing tools but more for language features. I find dependency injection in Rust really hardest right now (or may be I might have missed something)
#4 is true in our case.
#1 (libraries/tools): Go is ahead I think in terms of production ready libs.
#1 (community aspect): Go & Rust are better here than D (right now) even though the founder of D is prolific. Note that when championing a language inside a company is concerned perceptions matter a lot. Here I think D suffers a bit in my case.
Right now I am in wait-and-watch mode but leaning towards Rust.
(edited: formatting issues)
- qznc 11y agoOne advantage of D compared to the others is C++ integration. It can actually do it partially, whereas other languages just fall back to a C-ABI layer in between.