News for hackers. Stuff that matters.
Re:Rust is the future, C is the new Assembly: Josh Triplett ... by wbl on Wednesday August 28, 2019 @01:34PM (#20822025)
You don't think the type system is part of language semantics?
Re:Rust is the future, C is the new Assembly: Josh Triplett ... by Tuna-Fish on Wednesday August 28, 2019 @02:15PM (#20822445)
The borrow/lifetime system never changes the behavior of any program, the only thing it can do is to disallow some programs from compiling. This is not how the rest of the type system works.

This means that it's possible to write a compiler that correctly compiles all correct rust programs without having a lifetime system at all. It also means that having the lifetime system in makes writing programs more complicated, but it makes reading them, and understanding what a program does, easier.

Re:Rust is the future, C is the new Assembly: Josh Triplett ... by wbl on Wednesday August 28, 2019 @05:20PM (#20824086)
Ownership is linear types. It's part of the type system.
Re:Rust is the future, C is the new Assembly: Josh Triplett ... by Tuna-Fish on Wednesday August 28, 2019 @06:06PM (#20824519)
Yes, but borrowing isn't, and ownership is by itself no more complicated than RAII.
Re:Rust is the future, C is the new Assembly: Josh Triplett ... by Diggsey on Wednesday August 28, 2019 @02:32PM (#20822607)
The type system is yes, just not the borrow checker or the type checker.

The type system is still relatively simple compared the type systems in Java/C#/C++/etc. Let's take Java's as an example because I think people regard it as being simple:

Building blocks of the type system: Rust: Types, Traits Java: Primitive types, classes, interfaces, (value types yet?)

Relationships between those building blocks: Rust: Implements (Type <=> Trait) Java: Extends (Class => Class | Interface => Interface), Implements (Class => Interface), Auto-boxes (Primitive/value type => Class)

Generics: Works mostly the same in both languages. In Java you have to deal with the side-effects of type-erasure from time to time, and there's also the `? extends Y` syntax, for which Rust has no counterpart. In Rust you can have a generic parameter which is a lifetime, for which Java has no counterpart. Again though, these lifetimes are only used by the borrow checker, unlike normal type parameters, they do not affect the generated code.

Java appears simple because it is built on OOP concepts that are very familiar to most people. However, those OOP concepts contain a huge amount of complexity (inheritance trees, constructors, abstract classes, virtual/final methods, monitors, etc) and Rust simply gets rid of all of those concepts entirely. That's why I think it's simple.