project
    1. solution
      1. priority
        1. queue
          1. toDo
            1. Define a minimal Java EBNF grammar via "java.code.verify" and antlr.

            2. toDo
              1. For source code translations name resolution is required in order to support some, basic Java class etc. like Stream.

              2. toDo
                1. Consider donating to JavaParser if this works in the end as intended.

            3. toDo
              1. Create Grammar.

              1. toDo
                1. Check only files, which are not part of the bootstrapping implementation.

              2. idea
                1. toDo
                  1. Remove dependency injection and only have basic configuration via static immutable variables in order to simplify code for translation.

                2. toDo
                  1. Create an project to reintroduce dependency injection after the translation project is working.

            4. toDo
              1. Create a translator that translates the program to Dlang, because Dlang is very similar to Java und allows functional side effect free programming.

            5. toDo
              1. Create a way to automatically generate the skeleton of environment integration code.

            6. toDo
              1. Translate Dem to a Lisp langauge.

            7. toDo
              1. Translate an actual project to a Lisp langauge.

            8. toDo
              1. Remove reflection code.

              2. toDo
                1. Generic configuration class can be implemented via a tree/stack of config class and thereby removing the need for type mapping.

              3. toDo
                1. Let Gel's table columns just use one common type in order to omit downcasting.

            9. toDo
              1. Split code into bootstrapping code and normal code. Bootstrapping code contains Java or external dependency specific code. Normal code has no Java or other external dependencies with exception to specific external interfaces. The amount of external dependencies should be minimized and be kept as simple as possible. Minimize boostrapping code size.

              2. toDo
                1. Replace assertj with reasoning system based on Bool.

          2. unscheduled
            1. toDo
              1. Learn OCaml.

      2. objective
        1. Ensure that a software project's dependencies like language, framework and platforms are easily replaceable. The replacement can be automatic or manual.

        2. solution
          1. Ensure that the software project is valid and only uses certain features, that makes it easy to migrate the project.

          2. toDo
            1. Standardize usage of Java feature by defining a subset of valid Java grammar and checking it.

            2. toDo
              1. Use different Grammar for Dem and subsequent projects, because Dem is the base for subsequent projects, which should have higher restriction.

              2. toDo
                1. Only some parts of Dem should use a different/unrestricted part. This part should only be the Java-specific code.

          3. toDo
            1. Ensure that the code is easily translatable to other languages with minimal effort and manual work.

            2. idea
              1. idea
                1. Support different paradigms.

                2. toDo
                  1. Object-Orientation mainly provides polymorphic tree transformations. Dlang seems to be a good choice.

                3. todo
                  1. Support a very simple and basic version of functional programming with an simple statically typed object system. The object system, which is kind of an OOP-System only provides state interfaces. The functions define the state transitions of the objects.

              2. idea
                1. Support different type of data processing (i.e. typed versus not typed, boxed versus primitive or objects versus values. See

                2. quote
                  1. net.splitcells.gel.data.database.Database

                3. for inspiration.

            3. objective
              1. Always translate code to other language automatically and test it, in order to be sure that the code is portable.

              2. toDo
                1. Create a translator which translate other projects to a different language. The translator only has to translate projects complying with this project (compatibility and portability).

              3. result
                1. This would allow to check additional properties of the program before running it.