Get this rant out of my drafts folder :)

This commit is contained in:
R Tyler Croy 2020-08-29 12:52:41 -07:00
parent abddb8b85c
commit 1f127a7f83
No known key found for this signature in database
GPG Key ID: E5C92681BEF6CEA2
1 changed files with 54 additions and 0 deletions

View File

@ -0,0 +1,54 @@
---
layout: post
title: "Comparing apples to orange rustaceans"
tags:
- rust
- opinion
---
Never trust a developer who praises the purity or elegance of the C programming
language. I find comparisons often made between Rust and C for "systems
programming" to be one of my least favorite, and most disingenuous discussion
topics among developers on the internet. It's like comparing roller skates to
an electric car. While they both can transport you from one place to another,
only one of them is likely going to bring you safely to your destination.
Tweets like [this
one](https://twitter.com/JamesWidman/status/1122921637798662144) or blog posts
like [this
one](https://thephd.github.io/your-c-compiler-and-standard-library-will-not-help-you)
really help drive the point home that C is **not** what most people think it
is. One of the common themes is "complexity." It is absurd to talk about
C's simplicity compared to Rust's complexity because C:
* Doesn't have a standard library
* Doesn't have any built in concurrency or parallelism primitives
* Doesn't have any concept of modularization.
* Doesn't offer type safety.
C isn't actually one thing to begin with either. Depending on which revision of
the specification and which compiler you use, a C program may not be
compilable. Each compiler has a slightly different perspective on what the
gaps, "undefined behavior" in what C is actually defined as, should mean in the
real world.
Most of the [worst security
bugs](https://www.bleepingcomputer.com/news/security/mitre-shares-this-years-top-25-most-dangerous-software-bugs/)
are trivial to write in C. In order to "safely" write C, a significant amount
of static analysis, developer chutzpah, and code review needs to be added into
the development process.
C was invented 48 years ago.
As an industry we have learned and evolved so much in the way we think about
safety, concurrency, and software development as a discipline in the last five
decades. To me, adopting C for a new project is throwing all that away for
misguided notions of purity and performance.
I considered offering platitudes about what C is good at, or
where C belongs. Instead I'm going to take a hardline approach:
**C is dangerous, inefficient, and has no place in modern development.**
Don't take this as "you should use Rust" (you should) but rather: you should
_not_ use C for anything new.