|
|
|
|
|
|
Conceptional thinking about design of AAL.
Note: These papers are only result on my brainstorming about
concepts, definitions and implementations of the AAL.
Steps
(Task - percent implemented yet)
- Compiler-Interpreter framework
- Scanner framework using regular expressions
and user defined scanner plugins (C++-commets, etc) - 70%
- Parser framework using extended BNF syntax - 70%
- SymbolTable - 50%
- OpCode Interpreter
- Standard OpCodes - 30%
- DMI Client Interface - 20%
- DMI Server Interface - 20%
- AAL language
- Standard AAL syntax definition - 40%
- Semantik parser - 60%
- OpCode generator - 50%
- Language Details
- Object related things
- allow fully qualified names (acdk.lang.System.out.println("asdf");) - 90%
- preparse all declarations of class before body - 100%
- Namespace definitions - 60%
- using declarations - 60%
- using also for classes, methods and fields - 0%
- Interfaces - 50%
- Check if all abstract interfaces are implemented in NewExpression - 0%
- Abstract Classes - 50%
- Allow member access inside class without this. prefix - 70%
- User defined operators - 40%
- static class member - 80%
- property similar to C# - 0%
- Stacked Object variables (maybe only possible for AAL objects, not for ACDK Objects) - 0%
- Redesign of Stack/Heap to allow typed values (currently only ScriptVar are allowed).
- need raw_sizeof(Class) at runtime - 0%
- DMI Constructor interface with allocator - 0%
- AalObject as DMI Server - 10%
- Allow AalObject to derive from ACDK Object - 50%.
- Overwrite (virtual) method call in AllObject derived from ACDK object
- only possible with external DMI thunked version of the classes.
- Allow call undefined DMI Server classes (weak binding) - 100%
- Declare classes as weak, dispatching/overloading on object types, not on class types.
method calls may return DoesNotUnderstand.
obj.call() static call if possible, dynamic call if necessary
obj->call() forced dynamic call
This also can be used as implementation of multimethods
- 80%
- public/private class members access, checking at run time - 40%
- public/private class members access, checking at compile time - 30%
- public/protected/private for unit access - 0%
- explicit Super invocation (class A { void foo(); } class B extends A { void foo() { A.foo(); } - 50%
- Implicit default super constructor invocation - 100%
- Class Constructor (static ClassName() {}) - 100%
- super alias for parent class - 0%
- Generate default constructor if no constructor is defined - 100%.
- Automatic constant object wrapper to allow "asdf".length(), 42.toString() - 10%
- Read only member - 0%
- Free standing functions - 30%
- Overwrite/Extend classes/objects at compile time - 0%
- Protect classes from Overwrite/Extend. All ACDK classes are sealed - 0%.
- Add fields at runtime (static fields, on all new created object of an class, to a single instance) - 0%
- Accessing global variables - 0%
- Local type (classes, functions) definitions with access attributes - 0%
- byval field members - 0%
- multiple inheritance by forwarding ('using' type) - 0%
- Call interface
- Standard parameters - 60%
- named parameters - 70%
- in, out, inout parameters - 0%
- byval parameters - 0%
- weak interfaces (like perl, tcl, etc.) - 0%
- rest parameters - 0%
- Ad hoc named and unnamed tuples (structs/arrays/hashes) for parameter and return types
using rest parameters
-
- buildin method/field invokation not using dmi - (not needed) 0%
- Types
- Buildin basic types - 30%
- constant right sizes (12 = byte, 1234 = short, etc) - 80%
- parse dec constants - 100%
- parse hex constants - 0%
- parse postfixed number constants "0L"- 100%
- Strings - 30%
- standard strings - 100%
- String concation: "a" "b" => "ab" - 100%
- Multiline strings: "
" - 0%
- String::operator+() - 100%
- StringBuffer::operator+=() - 100%
- any type - 0%
- Enumeration - 0%
- Derived enumerations - 0%
- Constants (maybe implemented with readonly variables) - 0%
- Buildin array types - 50%
- Basic type arrays - 80%
- Object type arrays - 70%
- static initialization of arrays "int[] iarr = { 1, 2, 3};" - 0%
- multi dimensional arrays - 0%
- array slicing - 0%
- Buildin hash types - 0%
- Value types - 0%
- Expressions:
- Assignment operator - 30%
- Type checking for assigment - 0%
- := operator for value assignment - 0%
- Resolve user defined class operators - 25%
- Short cicuit boolean evaluation (a.foo() == true && b.foo() == true) - 100%
- Relational Expression - 80%
- ! not operator - 100%
- Bitwise operators |, &, ^, ~ - 100%
- Assignments chain (a = b = c) - 100%
- operator=== to compare if two Objects are equals - 100%.
- operator<=> to compare if two Objects via compareTo - 0%.
- Additive operators - 20%
- Cast expression for objects - 60%
- Cast expression for basic types - 0%
- C++-like casts (int(32), String(other) - 0%
- Boxing casts ((int)integer; Object(42) - 0%
- Type conversion/coercion (short + long == long) - 0%
- Multiplicative operators - 100%
- modulo operator on floats (C++ doesn't support this, but Java) - %
- Prefix and Postfix operator - 70%
- Buildin ops - 80%
- overloaded ops - 0%
- single -/+ Prefix - 0%
- Shift operator - 100%
- >>> shift operator - 100%
- Expression if (test ? true : false) - 100%
- Comma seperated expressions (often used in for loops) - 0%
- Empty Expression (used in for loops) - 100%
- Buildin expressions
- Metainfo
- Standard Metainfo using ACDK DMI and acdk.lang.reflect
- Statements:
- If statement - 100%
- While statement - 100%
- return statement - 100%
- Scoped Blocks - 60%
- Do statement - 100%
- for statement - 100%
- foreach statement for arrays (foreach (iterator, container, condition) Statement (from kiev) - 0%
- foreach statement on maps - 0%
- switch statement - 100%
- swtich statement with expressions - 100%
- break, continue statement - 100%
- goto, check if var initialization will be crossed - 70%
- goto needs at least one statement behind. "void foo() { goto endoffoo; endoffoo: }" does not work - 100%
- empty statement - 100%
- Synchronization - 0%
- with expression (similar to VB) - 0%
- Exceptions
- throw/catch/finally statement - 100%
- Handle AAL orginator and AAL catcher - 100%
- Handle AAL orginator and ACDK catcher - 0%
- Handle ACDK orginator and AAL catcher - 100%
- Handle ACDK orginator and ACDK catcher - 0%
- [re-] throw exception - 0%
- call function in catch blocks (which allows rethrow] - 0%
- throws method declaration - 0%
- throwable class - 100%
- Backtrace - 0%.
- Closures
- standard closures - 50%
- named parameter: new (firstVar: Expression) { int expression() { return firstVar; } }; - 0%
- Free standing Functions - 80%
- Defun (higher order functions)
- static defun (defun Function static int (int i); Function f = obj.method; f(42); )- 0%
- object defun (defun Function int (int i); Function f = AClass.method; obj.f(42); ) - 0%
- way to use defun inplace without name it (see pizza) - 0%
- Templates
- Custom Attributes
- Standard ACDK Attributes - 0%
- Compiler interface - 0%
- Compiler-Interpreter
- Basic Metacompiling feature (reg-exp syntax "string =~ /bla/" as sample - 0%
- Compiler plugins for code weaving (AOP, assertions, logging, serialization, synchronization) - 0%
- Compiler plugin for Java compatibility - 0%
- Compiler plugin for ACDK compatibility - 0%
- Compiler plugin for Lisp - 0%
- Assembler
- inline assembler statments for AAL runtime (aasm push "asdf") - 0%
- inline assembler statments for Java runtime (jasm push) - 0%
- inline assembler statments for .NET runtime (nasm push) - 0%
- Praeprocessor, may implemented via compiler-interpreter
- define / defined
- if
- error
- Runtime
- ClassLoader for AAL scripts - 0%
- ClassLoader for external DMI classes (Java, Perl, CORBA, etc) - 0%
- Interpreter - Interface
- Interface to allow set/get variables from executed environment - 40%
- Debugger
- Breakpoints - 0%
- Print code line - 0%.
- Call stack trace - 0%
- local variables trace - 0%
- Code generation - 20%
- Usefull compiler error/warning messages - 20%
- DClazzInfo persistence - 0%
- AalClazzFormat - 0%
- Runtime executor - 0%
- Resolve classnames, methods and fields at load time - 0%
- Java VM code generation - 0%
- DMI stubs for foreign objects (ACDK, Perl, etc)
- Direct call interface for Java Objects.
- .NET VM code generation - 0%
- GCC frontend - 0%
|
|