What? Why?
New language, capable of being used in place of assembly languages.
Why we need a new programming language?
- Programming in assembly is tough job
- No conventions, just pure control over registers and memory
- Results in unlimited variability. Takes a lot of time to get used to someone else's code
- Context translates poorly, requiring extensive commenting unless split to small pieces
What's wrong with C?
- C doesn't even cover what is possible with assembly.
- No control over registers, you need to use inline assembly and you break everything
- It has preprosessor
- Header files suck!
- Null terminated strings!
- Standard library is just so small
- Naming conventions... dup() should be duplicate_file_descriptor()
Key design goals
- Language needs to be simple
- Debugging works as well as in assembly
- Can be used in place of assembly
- Ergonomic for the programmer, a modern language
- Good dependency management
- Good standard library (like UTF strings)
Design ideology
- Static typing
- No restrictions on what you can do with the hardware due to lossy language abstractions
- Explicit over implicit. It's a balancing act.
- Language features directly maps to assembly/machine code. You know beforehand what assembly is going to look like in debug mode.
- Compiler is your friend, it should warn, but let you do things. You want to reassign a constant? Sure, be careful with the length!
- Compiler should warn about absolutely everything, unless told specifically to shut up.
- Verbose enough so you don't need comments