2005/5/9

     
 

AAL Concept

artefaktur

Conceptional thinking about design of AAL.

Note: These papers are only result on my brainstorming about concepts, definitions and implementations of the AAL.
Sub chapter pages:

How to use AAL as Intentional Programming System.

Conceptional thinking about design of ACI.

Spec of the language.

Syntax of the ALL (snapshot).

Design of the AAL extensible Parser.

How to build AAL Objects.

Intermediate OpCode for AAL.

Links to Web ressources.

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
          • instanceof - 0%
      • 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%