Design principles of languages

Expressiveness: matches human ideas of grammar / syntax / meaning

Redundant: more information than needed (why?)

  • Types can be thrown away during runtime

Abstract: Exact computation on CPU not fully determined by code.

  • e.g. memory management
  • concurrency management
  • allocating multiple threads, do not specify when they go out of scope.
  • virtual threads
  • sharing processors