aka Dave & Pauls’s Object-Oriented Programming Language
Initial thoughts (Paul):
- Value/Entity concept
- No garbage collector — yet should have some unified/recommended/language supported ownership strategy such as reference counting (e.g. Python uses reference counting). If we adopt reference counting, also need some strategy for handling circular references. e.g. explicit delete or weak references…
- Limit ability to use implementation inheritance — e.g. abstract classes may only be extended by a final class — thus enforcing only one level of implementation inheritance
- No function overloading (operator overloading is useful though)
- co-variant return types
- can produce stand alone executables
- support for calling into and out of C code efficiently
- can run without a runtime
- full meta data (ie java reflection)
- support for automatic forwarding of methods (but do not support delegation)
- support for implementing proxies
- must be easy to create anonymous function like objects, or anonymous implementations of interfaces
- input arguments are by default “final”
Initial thoughts (Dave):
- no default internationalization/deployment decision
- string interface (optional implementations at runtime)
- no distinction between primitives and objects (ie not like java) — primitive syntax should be cheap and no zero cost to do object like things with them (eg use them in collections)
- there should be a very simple and elegant way to provide first order functions, lambda functions, and closures