Why are systems languages always overly complex?
There&#x27;s different things people mean by &quot;systems language&quot;, but a common theme is extremely precise control over the machine code emitted by the compiler.<p>If you take TypeScript and add pointers, you&#x27;d end up with something like Java, or maybe Go. This is not necessarily a bad outcome (Java and Go are both very popular), but those languages don&#x27;t provide the sort of control you need when writing a kernel, video codec, embedded device firmware, or the runtime for a higher-level language. Some folks might disagree, but I wouldn&#x27;t personally consider Go a &quot;systems language&quot; in the same way that C or Rust are.<p>The complexity you see in languages like Rust reflects the programmer&#x27;s desire&#x2F;need for controlled compiler output, plus a healthy dose of innate complexity of the problem domain. TypeScript has one type of string, Rust has dozens, because String and OsString and CString each have different semantics that will cause bugs if they get mixed up. We know this because older systems languages <i>did</i> mix them up (C++&#x27;s std::string, C *char vs *void vs *uint_8), and there were bugs, and late nights crying into a GDB prompt looking for a missing NUL terminator.<p>Also, I suspect from your focus on syntax that you&#x27;re new to the field of programming. Once you&#x27;ve been writing non-web code professionally for 10 years or so, you&#x27;ll pay a lot less attention to the notation. The most popular languages (C&#x2F;C++&#x2F;C#&#x2F;Java&#x2F;JavaScript&#x2F;Rust&#x2F;Swift&#x2F;Go) all seem very similar syntactically compared to Haskell, Erlang, Lisp, or Forth.