3. March, 2007
27. June, 2007
in by Michael Neumann

If I’d design a new language including the runtime-system, that language should be/have:

  • A very small core.
  • Mixed run/compile-time typing. Many types can be infered at compile-time and fast running code can be generated. If not, fall back to runtime typing.
  • The compiler is part of the system. Why do you want to generate binary code? Just ship the source code (of course you can obfuscate it; well, Java byte code can be disassembled back to Java source code very well!) and the compiler will compile it on-the-fly to machine code.
  • Structural subtyping. No tag-types as in Java. Tag-typing (typing based on simple names like “Array” or inheritance-relationship) can be simulated by special structure values, e.g. {tag_type: ‘Array’}.
  • Compacting non-conservative GC. A GC that never leads to memory leaks!
  • Region inference. What is the life cycle of a memory object? Is it local to a method/function? Allocate memory based on this information.
  • Keyword arguments.
  • Kind of selector-namespaces
  • No global variables (can be easily simulated by a singleton class).
  • Maybe Multiple heaps (thread local heaps), so that GC can run in parallel.