4 ms·
Interesting work. It has some pretty basic flaws that are pervasive that the reader should be aware of. First off is the "productivity" measure: the last time
by pnathan 12y ago
Interesting work.
It has some pretty basic flaws that are pervasive that the reader
should be aware of. First off is the "productivity" measure: the last
time I looked around, this was nearly impossible to quantify for
software development. The author chose SLOC and development time as
stand-ins for productivity. SLOC has a connection with code quality
and time of development, but development time is well known to vary[1].
In particular, development time in this thesis is linked to results in
a pretty classic "Psychologist's fallacy"[2]; the author generalizes
their experiences as conclusive. This implies in particular that
"development time" in this thesis should be thrown out for meaningful
conclusions, as the sample size is 1. It is, however, an interesting
experience report.
Another basic flaw is the connecting of 'modern' with 'good'. The
author remarks the main disadvantage of C and Fortran are their age;
this crops up here and there. Workflow tooling in Go and Rust are
major focuses by the developers: C workflow tooling is usually locally
brewed. This does not make C-the-language worse.
More on a meta level, my advisor in my Master's work drummed into me
that I should NOT insert my opinion into the thesis until the
conclusion. So I found the editorializing along the way very annoying.
And finally, and very unfortunately, the experience level of the
author appears to be low in all three languages; this is significant
when it comes to implementing high performance code.
---
Now, for the interesting / good parts of this experience report.
Standout interesting for me was the Rust speedup on the 48-core
machine. I did not expect that, nor did I expect Go to make such a
good showing here as well.
In general Go performance/memory made a surprisingly good showing
(to me) for this work. I shall have to revise my opinion of it upward
in the performance axis.
I am both surprised and vaguely annoyed by the Rust runtime eating so
much memory (Would love to hear from a Rust contributor why that is
and what's being scheduled to be done about it).
Of course the stronger type system of Rust catching an error that C
and Go didn't pick up is both (a) humorous and (b) justifies the type
community's work in these areas. I look forward to Rust 1.0!
One note by the author that is worth calling out stronger is the
deployment story: Go has a great one with static linking, whereas C
gets sketchy and Rust is... ??. I believe Rust has a static linker
option, but I havn't perused the manual in that area for some
time. For serious cloud-level deployments over time, static linking is
very nice, and I'm not surprised Google went that route. It's
something that would be very nice to put as a Rust emission option
"--crate-type staticbin".
Anyway. I look forward to larger sample sizes and, one day, a better productiv
[1] http://www.amazon.com/Making-Software-Really-Works-Believe/dp/0596808321 http://www.amazon.com/Making-Software-Really-Works-Believe/d...
The situation is actually far worse than just varying developer time.
[2] https://en.wikipedia.org/wiki/Psychologist%27s_fallacy https://en.wikipedia.org/wiki/Psychologist%27s_fallacy
- steveklabnik 12y ago> Would love to hear from a Rust contributor why that is and what's being scheduled to be done about it. I haven't spent time with the code yet, so I can't comment. It shouldn't be the runtime, though, as our runtime is about as big as C or C++'s. My first thought would be that Vec's growth factor may be poor in this instance, but without reading the code, who knows. > Rust is... ?? Rust statically links everything but glibc by default. Experimental support for musl was added last week.
- pnathan 12y agoOh, cool! Thanks for the information!
- steveklabnik 12y agoNo problem. Doing a valgrind run on the sample, let's see how it goes.
- pnathan 12y agoWhat did you find out? When I scanned through the code, I didn't see anything jump out at me as being Wrong.
- madez 12y agoI read more than once that rust has no runtime. Could you please clarify whether it has a runime, and if it does, what it consists of?
- steveklabnik 12y agoSo, basically _every_ non-assembly programming language has a runtime. Even C and C++. But not all runtimes are created equal. Languages like C, C++, and Rust have a very minimal, no setup required runtime. Other, higher level languages often have something significantly more heavy. People will sometimes say "no runtime" to mean the class of languages which have very small runtimes. Rust's runtime is here: https://github.com/rust-lang/rust/tree/master/src/rt https://github.com/rust-lang/rust/tree/master/src/rt and https://github.com/rust-lang/rust/tree/master/src/libstd/rt https://github.com/rust-lang/rust/tree/master/src/libstd/rt As you can see, it's very, very small. It mostly handles things like unwinding, at_exit handlers, and the like.