in this thread I want to finally present my created programming language called AAL (=Advanced Automation Language), an Autoit-Alternative.
You also may have a look at Warfleys AAL-Editor:

GitHub-Link:

German
Was soll das sein, eine AutoIt-Alternative und warum?
An AutoIt haben mich schon sehr lange sehr viele Dinge gestört. AutoIt macht vieles richtig aber genau so viel falsch.
Mit AutoIt ist das Automatisieren von Windows sehr einfach und schnell gemacht.
Zusätzlich bietet AutoIt über die Automatisierung hinaus viele Funktionen, die es erlauben auch komplexe Programme zu schreiben.
Eine Sprache, die ähnlich einfach und dennoch derart mächtig ist, gibt es meiner Meinung nach nicht.
Dennoch fehlen AutoIt viele Sachen, um auch für komplexe Probleme benutzt werden zu können.
Manche Sachen wurden in AutoIt meiner Meinung nach auch vollkommen falsch oder sehr lasch und inkonsistent implementiert.
Mein Ziel ist es also mit AAL eine ähnlich einfache Automatisierung wie AutoIt zu bieten und trotzdem mit dem Strom der Zeit zu schwimmen und Sachen wie OOP, Multithreading u.ä. zu ermöglichen.
Punkte, die ich versuche explizit besser zu machen/konsistenter/anders zu implementieren, also Sachen, die ich an AutoIt schlecht finde:
Was steht bisher?
AAL ist was die Basis Konstrukte angeht schon weit fortgeschritten, konkret heisst das, dass folgende Funktionen ohne Einschränkungen (abgesehen von Bugs) benutzbar sind:
Ich veröffentliche die komplette AAL-Sprache inklusiver Dokumentation, als Open-Source-Projekt.
Damit will ich nicht nur erreichen, dass ihr von dem Code lernen könnt und auch einmal seht wie man prinzipiell so einen Compiler/Interpreter umsetzt, sondern ich erhoffe mir auch Hilfe in Form von Source-Code und Bugfixes.
Diese Projekt ist ein großes Projekt, zu viel für eine Person alleine. Ich bin überzeugt, wenn wir alle zusammenhelfen, dann können wir eine Sprache kreieren, die sowohl einen leichten Einstieg ermöglicht, viele Funktionen anbietet und dennoch schnell in der Ausführung ist.
Aber nicht nur Source-Code Beiträge sind wichtig, sondern auch alle anderen Arten von Hilfe.
Konkret bin ich noch auf der Suche nach folgenden Unterstützern:
Wenn du dich dadurch also angesprochen fühlst und Lust hast in einem derartigen Projekt (und wenn es nur für 1 Tag ist) mitzuwirken, dann nur zu, verfasse einen Post oder schreib mir eine Privatenachricht.
Ich bin auch per E-Mail erreichbar:
m (dot) rupprecht (at) gmx (point) net
Ohne Leerzeichen und die entsprechenden Ausdrücke in den Klammern durch die richtigen Zeichen ersetzen (wobei point dasselbe Zeichen ist wie dot).
Ich schreib das hier so komisch, um die ganzen Spambots fernzuhalten oder zumindest grob auszusortieren.
Was muss ich bei der Benutzung von AAL in der alpha-Phase beachten?
An AutoIt haben mich schon sehr lange sehr viele Dinge gestört. AutoIt macht vieles richtig aber genau so viel falsch.
Mit AutoIt ist das Automatisieren von Windows sehr einfach und schnell gemacht.
Zusätzlich bietet AutoIt über die Automatisierung hinaus viele Funktionen, die es erlauben auch komplexe Programme zu schreiben.
Eine Sprache, die ähnlich einfach und dennoch derart mächtig ist, gibt es meiner Meinung nach nicht.
Dennoch fehlen AutoIt viele Sachen, um auch für komplexe Probleme benutzt werden zu können.
Manche Sachen wurden in AutoIt meiner Meinung nach auch vollkommen falsch oder sehr lasch und inkonsistent implementiert.
Mein Ziel ist es also mit AAL eine ähnlich einfache Automatisierung wie AutoIt zu bieten und trotzdem mit dem Strom der Zeit zu schwimmen und Sachen wie OOP, Multithreading u.ä. zu ermöglichen.
Punkte, die ich versuche explizit besser zu machen/konsistenter/anders zu implementieren, also Sachen, die ich an AutoIt schlecht finde:
All diese Dinge will ich besser und anders machen bzw. allgemein überhaupt ermöglichen.Quote:
- Fehlende Klassenunterstützung (nur über Umwege möglich z.B. per UDF und selbst dann ist es nur beschränkt nützlich)
- Relativ langsame Ausführungszeit
- Sehr einfach zu decompilen und es ist fast unmöglich bestehende Decompiler aus dem Konzept zu bringen
- Keine Chance für echtes Multi-Threading
- Sehr komplizierte Hardwarenahe Programmierung (z.B. komplizierte Structs und Pointer)
- Manchmal komisches Verhalten und inkonsitente Keyword-Nutzung (z.B. "While" und "WEnd" aber "If" und "EndIf" oder "For" und "Next").
- Fehlendes Inline-ASM
- Code ist nicht als DLL-kompilierbar
Was steht bisher?
AAL ist was die Basis Konstrukte angeht schon weit fortgeschritten, konkret heisst das, dass folgende Funktionen ohne Einschränkungen (abgesehen von Bugs) benutzbar sind:
Alles schön und gut, aber was genau willst du jetzt von uns?Quote:
- If ... EndIf
- While ... EndWhile
- For ... To ... Step ... EndFor
- Do ... Until
- Func ... EndFunc
- Variablen ($var = ...)
- Arrays erstellen/benutzen (bisher nur erstellbar über Dim)
- Default Parameter bei Funktionen
- übergabe der Funktionsargumente per Referenz
- Ein paar vordefinierte Funktionen (siehe dazu auch beiliegende AAL-Dokumentation)
- OR, AND, usw.
- Klammerung/etc.
- Ein paar grundlegende Code-Optimierungen (z.B. Sachen wie 10*10 gleich ausrechnen)
Ich veröffentliche die komplette AAL-Sprache inklusiver Dokumentation, als Open-Source-Projekt.
Damit will ich nicht nur erreichen, dass ihr von dem Code lernen könnt und auch einmal seht wie man prinzipiell so einen Compiler/Interpreter umsetzt, sondern ich erhoffe mir auch Hilfe in Form von Source-Code und Bugfixes.
Diese Projekt ist ein großes Projekt, zu viel für eine Person alleine. Ich bin überzeugt, wenn wir alle zusammenhelfen, dann können wir eine Sprache kreieren, die sowohl einen leichten Einstieg ermöglicht, viele Funktionen anbietet und dennoch schnell in der Ausführung ist.
Aber nicht nur Source-Code Beiträge sind wichtig, sondern auch alle anderen Arten von Hilfe.
Konkret bin ich noch auf der Suche nach folgenden Unterstützern:
Quote:
- Ich freue mich auf jeden, der mich länger als nur kurzzeitig unterstützen möchte, wenn jemand ernsthaft Interesse an einer längeren Mitarbeit hat, könnt ihr mich gerne anschreiben, dann versuche ich euch eine Einführung in den Code zu geben und helf euch dabei mit dem Code besser klar zu kommen (Ich werde keine C/C++ Einführung geben, sondern nur die Idee hinter den Algorithmen/Design-Fragen, etc. klären)
- Wenn du nicht die Zeit oder Lust hast regelmäßig am Projekt mitzuarbeiten, kannst du auch nur kleine Funktionen oder einmalige Features beisteuern (z.B. ImageSearch, Beschleunigung von bestehenden Algorithmen, usw.). Ich werde die Funktionen dann bei Gelegenheit hinzufügen und feedback liefern
- Solltest du keine Ahnung von C/C++ haben, kannst du auch etwas Beisteuern, indem du AAL-Funktionen (in AAL) schreibst (Dies ist natürlich ein sehr riskantes Verfahren, weil man sich in der alpha-Phase nie sicher sein kann, ob der Fehler im Interpreter/Compiler liegt oder in seinem eigenen Code).
- Hilfe beim Bugs finden/suchen
- Wenn du überhaupt nich programmieren kannst, freue ich mich auch, wenn du mir hilfst falsches/schlechtes englisch/deutsch zu finden und auszubessern
- Auch einiges an Übersetzungsarbeit steht an (sowohl deutsch -> englisch als auch englisch -> deutsch)
- Auch einen Webseitendesigner (+ überhaupt einmal eine Webseite/einen Server) wäre ein weiterer wichtiger Punkt
Wenn du dich dadurch also angesprochen fühlst und Lust hast in einem derartigen Projekt (und wenn es nur für 1 Tag ist) mitzuwirken, dann nur zu, verfasse einen Post oder schreib mir eine Privatenachricht.
Ich bin auch per E-Mail erreichbar:
m (dot) rupprecht (at) gmx (point) net
Ohne Leerzeichen und die entsprechenden Ausdrücke in den Klammern durch die richtigen Zeichen ersetzen (wobei point dasselbe Zeichen ist wie dot).
Ich schreib das hier so komisch, um die ganzen Spambots fernzuhalten oder zumindest grob auszusortieren.
Was muss ich bei der Benutzung von AAL in der alpha-Phase beachten?
Was gibt es sonst zu beachten?Quote:
Sehr wichtig ist es seinen AAL-Code, den man programmiert hat auf Fehler zu prüfen.
Das Fehlerhandling im AAL-Compiler ist nur sehr rudimentär und erkennt nur rund 60% aller möglichen Fehler.
Das soll sich mit der Zeit zwar enorm bessern, aber für den Moment muss man mit dieser Einschränkung leben.
Das heißt, bevor ihr einen Bug vermutet oder ähnliches, schaut erst einmal ob euer AAL-Code vor dem Kompilieren richtig ist, weil wie erwähnt nicht alle Fehler gefunden werden.
Quote:
Es gibt zwei Versionen von AAL, die Debug-Version und die Release-Version.
Wenn man irgendwo einen Bug vermutet oder nachvollziehen möchte, was AAL der Reihe nach macht, sollte man die Debug-Version benutzen.
Die Debug-Version schreibt Informationen in die Dateien "compiler.debug.txt" und "interpreter.debug.txt", dafür läuft sie natürlich langsamer. Die Release-Version läuft dementsprechend schneller, schreibt aber keine Daten raus.
English
This is not a 1:1 translation, but a rough summary of the german version (1:1 translation is in work):
What is AAL?
AAL tries to give the possibility to do basic and also complex automation tasks based on an easy syntax and semantic.
So AAL tries not to be as similar to AutoIt as possible but tries to get the best out of AutoIt and mix it with things that are kind a missing or done worse in AutoIt, e.g.:
So you can lear from the project. That is also why I tried to document many things as good as possible.
You should not only learn from this project, but I am also happy to see people helping together to reach the goal of "being a mighty AutoIt alternative".
You do not only have to be familar with coding, I am searching for all kind of help, e.g.:
What is AAL?
AAL tries to give the possibility to do basic and also complex automation tasks based on an easy syntax and semantic.
So AAL tries not to be as similar to AutoIt as possible but tries to get the best out of AutoIt and mix it with things that are kind a missing or done worse in AutoIt, e.g.:
AAL is open-source and I will try to keep it as long open-source as possible.Quote:
- Missing class support (only possible with UDF and then still quite strange to use)
- Quite slow
- Very Easy to decompile and nearly impossible to break existing decompilers
- No possibility to use real multithreading
- Missing or very complicated hardware near programming (e.g. complicated pointer and structs)
- Sometimes strange behaviour and inconsistent keywords (e.g. "While" and "WEnd" but "If" and "EndIf" or "For" and "Next").
- Kind of missing inline ASM
- Missing possibility to compile as DLL
So you can lear from the project. That is also why I tried to document many things as good as possible.
You should not only learn from this project, but I am also happy to see people helping together to reach the goal of "being a mighty AutoIt alternative".
You do not only have to be familar with coding, I am searching for all kind of help, e.g.:
What do I have to take care of when using AAL in alpha stage?Quote:
- I am always happy to see guys helping me finding bugs/errors/strange things. So if you want to help me not just with some short texts/functions, you can write me an email and I will help you getting familiar with code. I will not explain fundamental C/C++ things (so I will not act as a kind of teacher/tutor but will help to answer all unclear codes and explain the basic ideas of the algorithms)
- If you are having not enough time to work regulary at the project but you still want to contribute, you can also send me some pieces of C/C++ code (e.g. PictureSearch-Algorithms, faster implementation of existing functions, ...) and I will add them on occasion.
- If cou can not program C/C++ at all, you can also help to write new functions by using AAL-Code (this of course is, especially in alpha stage, a risky method because if something does not work, you can not be sure if it is your code or the AAL-Interpreter/Compiler).
- You can also help by finding bugs/making suggestions.
- If you are not able to program at all (neither C/C++ nor AutoIt/AAL), you can still help by finding undocumented functions/writing mistakes/bad english.
- Another possibility to help is by translating english texts into other languages (esepcially into german).
- Last but not least, I am also looking for a website and a website layout. I would be able to do it by myself (and I guess I will do the backend by myself) but I really hate HTML/CSS/JS.
What else to know?Quote:
The compiler is not able to detect all kind of errors. It only can detect some basic errors in Code (around 60%).
So it is possible to write a code where the compiler is not complaining at all, but the Interpreter still crashes because the compiled Code is not valid. This means whenever you think there is a bug, you have to double check if really every line of your code is correct.
This will be fixed in some feature versions but for alpha stage we have to live with this.
Quote:
There are 2 versions of AAL, a Debug version and a Realease version.
The Debug-Version will write some information to the file "compiler.debug.txt" and "interpreter.debug.txt".
So whenever you think you found a bug or you want to understand what is going on, use the debug version.
The debug version is of course much slower than the release version, but helps to debug the generated code.
Documentation files (all files can be reached by using the CompileAndRun.exe file):
Getting Started:Quote:
./Getting Started/aal_functions.html - This file gives an overview of already implemented AAL standard functions and their arguments (english)
./Getting Started/aal-developer-manual.pdf - This file will help to understand what is happening inside AAL-Compiler/Interpreter (only german at the moment)
./Sourcecode-Doc/index.html - This file is the main file of doxygen documentation for C/C++ Sourcecode (english)
zLib License:Quote:
Just start "CompileAndRun.exe", then click on the button "Select file" and select the file you wrote (or navigate to Examples folder and select an example file). After that press "Run Debug" or "Run Release" (whatever you want to do). The first showing window is the compiler and the second window the interpreter. If you want to see the output of interpreter/compiler just have a look at e.g. "interpreter.release.txt"
Quote:
Copyright (c) 2015 M. Rupprecht
This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software.
Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions:
1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
3. This notice may not be removed or altered from any source distribution.
Use it for whatever you want, but do not hide the real author(s).
Changelog:
Planned Features for next Version
0.0.2alpha
0.0.3alphaQuote:
- Expand documentation (especially for compiler which is documented very weak at the moment)
- Fix bugs
- Add some more basic functions
- Optimize code for speed
- Create GitHub Entry
0.0.4alphaQuote:
- Make compiler interface easier and more flexible
- Add include-directive
- Fix errors in documentation
- Fix bugs
0.0.5alphaQuote:
- Rewrite parts of Compiler to make syntax checking easier and fix some issues/ugly things
- Fix bugs
Quote:
- Expand documentation (especially for compiler which is documented very weak at the moment)
- Fix bugs
- Optimize code for speed (mainly by optimizing generated ByteCode)
Known Bugs
I hope to find many people who are interested in this project and want to help me. Thanks in advance for all kind of help!






