[Release] AAL, an Open-Source AutoIt Alternative

12/10/2015 21:03 Shadow992#1
Heyho together,

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: [Only registered and activated users can see links. Click Here To Register...]

GitHub-Link: [Only registered and activated users can see links. Click Here To Register...]

German

English

Documentation files (all files can be reached by using the CompileAndRun.exe file):
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)
Getting Started:
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"
zLib License:
This means, to sum up:
Use it for whatever you want, but do not hide the real author(s).

Changelog:

Planned Features for next Version

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! :)
12/11/2015 06:57 Tasiro#2
Gut gemacht! Wo ist der GitHub-Link?
12/11/2015 08:14 Strew#3
Erstmal vor weg, ich bin sehr begeistert von der Projekt Idee.
Ich habe zwar noch kleine Zweifel wie das ganze weitergehen soll,
aber ich bin da relativ offen und werde dich definitiv dabei unterstützen
wenn du möchtest. Wie und in welcher Form muss ich mir allerdings noch
überlegen, da könnte man dann ja aber auch via PN drüber quatschen.

Natürlich wünsche ich dir viel Erfolg damit und drücke dir die Daumen.

Liebe Grüße, Strew
12/11/2015 11:15 Shadow992#4
Quote:
Originally Posted by Tasiro View Post
Gut gemacht! Wo ist der GitHub-Link?
Der kommt in der nächsten Version (sprich 0.0.2alpha).
Quote:
Originally Posted by Strew View Post
Erstmal vor weg, ich bin sehr begeistert von der Projekt Idee.
Ich habe zwar noch kleine Zweifel wie das ganze weitergehen soll,
aber ich bin da relativ offen und werde dich definitiv dabei unterstützen
wenn du möchtest. Wie und in welcher Form muss ich mir allerdings noch
überlegen, da könnte man dann ja aber auch via PN drüber quatschen.

Natürlich wünsche ich dir viel Erfolg damit und drücke dir die Daumen.

Liebe Grüße, Strew
Ich freue mich über jegliche Hilfe, egal in welcher Form und wenns nur psychisch ist. :D

Wer will kann mich ja unter Skype hinzufügen (wundert euch nicht über den Namen ist ein uralter Account und war ein Insider damals :D):

Stalaktiten
12/12/2015 12:54 [Beatrice]#5
Great. I guess it'd be awesome to add an editor. Also to make DllCalls. Keep it up :p
12/12/2015 16:39 Shadow992#6
Quote:
Originally Posted by [Beatrice] View Post
Great. I guess it'd be awesome to add an editor. Also to make DllCalls. Keep it up :p
Yep this will also come when the basic functions are working without any bugs. :D
But until then it is a long way.
12/12/2015 18:09 Else#7
Der Schritt zur eigenen Sprache ist getan. Hut ab! :-)
12/13/2015 22:41 alpines#8
Sehr schön, wird interessant das ganze mitzuverfolgen.
12/14/2015 01:13 Moneypulation#9
Daumen hoch. Gibts einen weg das Bild von CaptureWindowByName() zu sehen bzw. es zu speichern? Und kriegst du es hin, dass man den WindowHandle den man als Parameter braucht, in eine Variable zu speichern, da sich der Titel ja ändern könnte. Außerdem wie siehts mit einer GUI aus?
12/14/2015 16:47 Shadow992#10
Quote:
Originally Posted by Moneypulation View Post
Daumen hoch. Gibts einen weg das Bild von CaptureWindowByName() zu sehen bzw. es zu speichern? Und kriegst du es hin, dass man den WindowHandle den man als Parameter braucht, in eine Variable zu speichern, da sich der Titel ja ändern könnte. Außerdem wie siehts mit einer GUI aus?
- Bild speichern kommt in der naechsten Version (0.0.2 alpha)

- WindowHandle speichern kommt ebenfalls in der naechsten Version (nur momentan gibt es ja noch keine Moeglichkeit ueberhaupt dieses Handle zu benutzen, deswegen gibt es momentan noch keiner derartige Moeglichkeit) :D

- GUI wird noch ein gutes Stueck dauern. Vielleicht fuege ich ganz simple und billige Controls schon in der naechsten oder uebernaechsten Version hinzu (sprich Window, Button und Inputbox). Fuer GUI-Programmierung braucht es aber tatsaechlich noch viel ausenrum, wo ich noch nicht sicher bin ob es "einfach so klappt".
12/26/2015 15:34 Shadow992#11
This time I want to release the second alpha version of AAL.
I did not expect to find that few bugs, but I actually only found 2 big bugs.
So the new version focused on new features and updating/expanding documentation. However I just did little work on documentation.

Changelog:

New version was added to first post (0.0.2alpha).

For the next version I plan to focus on optimizing generated ByteCode.
This can speed up the complete execution time alot.
12/26/2015 18:18 warfley#12
Wann kommt die Möglichkeit andere Dateien zu includen? Habe grade mit einem kleinen Formeditor angefangen, und ich muss sagen es wäre deutlich schöner wenn man den Formcode einfach in eine separate Datei auslagern könnte.

PS: Habe die neuen Funktionen jetzt im Editor, aber dabei ist mir aufgefallen dass du bei vielen Funktionen im Summary immer noch die Funktion CaptureWindowByName angibst,
12/26/2015 18:27 Shadow992#13
Quote:
Originally Posted by warfley View Post
Wann kommt die Möglichkeit andere Dateien zu includen? Habe grade mit einem kleinen Formeditor angefangen, und ich muss sagen es wäre deutlich schöner wenn man den Formcode einfach in eine separate Datei auslagern könnte.

PS: Habe die neuen Funktionen jetzt im Editor, aber dabei ist mir aufgefallen dass du bei vielen Funktionen im Summary immer noch die Funktion CaptureWindowByName angibst,
Inoffiziell gibt es die Möglichkeit schon.
Also eine include-Direktive gibt es bereits und sie sollte auch einigermaßen funktionieren.
Momentan gibt es noch zwei kleine "Unschönheiten" an dem Ganzen:

- Da das Kompilieren der Dateien noch etwas "umständlich" passiert, muss man höchstwahrscheinlich die zu inkludierenden Dateien auch in das "bin" Verzeichnis verschieben.
- Die Funktion wurde bisher nur einmal ganz am Anfang getestet, ich weiß also nicht wie es momentan aussieht und ob sie überhaupt läuft.

Aber prinzipiell ist sie benutzbar, indem man folgendes schreibt:
Code:
#include("file_to_include.aal1")
Ich werde mir das morgen und übermorgen mal genauer anschauen und dabei auch die Dokumentation noch anpassen. Zusätzlich werde ich auch das Kompilieren endlich "sinnvoller" und intuitiver machen (mit Flags u.ä.).
Spätestens Montag wird also die Include-Direktive definitiv unterstützt.
12/26/2015 19:26 warfley#14
Quote:
Originally Posted by Shadow992 View Post
Inoffiziell gibt es die Möglichkeit schon.
Also eine include-Direktive gibt es bereits und sie sollte auch einigermaßen funktionieren.
Momentan gibt es noch zwei kleine "Unschönheiten" an dem Ganzen:

- Da das Kompilieren der Dateien noch etwas "umständlich" passiert, muss man höchstwahrscheinlich die zu inkludierenden Dateien auch in das "bin" Verzeichnis verschieben.
- Die Funktion wurde bisher nur einmal ganz am Anfang getestet, ich weiß also nicht wie es momentan aussieht und ob sie überhaupt läuft.

Aber prinzipiell ist sie benutzbar, indem man folgendes schreibt:
Code:
#include("file_to_include.aal1")
Ich werde mir das morgen und übermorgen mal genauer anschauen und dabei auch die Dokumentation noch anpassen. Zusätzlich werde ich auch das Kompilieren endlich "sinnvoller" und intuitiver machen (mit Flags u.ä.).
Spätestens Montag wird also die Include-Direktive definitiv unterstützt.
Nice dann werde ich das mal implementieren. Damit kann ich auch schon das Projekt System anfangen
Ich hätte dann noch eine Frage, wie funktioniert das mit cirkulären Referenzen also wenn ich die forms in einer separaten Datei A erstelle, und diese dann in B include funktioniert es dass ich sowohl über die Datei B die Variablen von a verwende aber in A die Funktionen von B als Event setze, wie muss ich die includes setzen?
12/26/2015 19:52 Shadow992#15
Quote:
Originally Posted by warfley View Post
Nice dann werde ich das mal implementieren. Damit kann ich auch schon das Projekt System anfangen
Ich hätte dann noch eine Frage, wie funktioniert das mit cirkulären Referenzen also wenn ich die forms in einer separaten Datei A erstelle, und diese dann in B include funktioniert es dass ich sowohl über die Datei B die Variablen von a verwende aber in A die Funktionen von B als Event setze, wie muss ich die includes setzen?
Alles was das Include macht ist die Anweisung durch den Inhalt der Datei zu ersetzen. Wenn man Die Includes zirkulär definiert, also in etwa so:

File1.aal1
Code:
#include("File2.aal1")
File2.aal1
Code:
#include("File1.aal1")

Wird der Compiler in eine endlos Rekursion übergehen.
Um das mehrmalige Einbinden (und damit solche Fehler zu beheben/unterdrücken) zu verhindern, gibt es die Direktive "#include-once".
Aber auch das wurde logischerweise (wie das #include) nur einmal am Anfang getestet.
Das heißt der funktionierende Code sähe so aus:

File1.aal1
Code:
#include-once
#include("File2.aal1")
File2.aal1
Code:
#include-once
#include("File1.aal1")

Ansonsten gibt es keinerlei Probleme bei bisher undefinierten Funktionen o.ä.
Dynamische Sachen (also so etwas wie onEvent, was auch zur Laufzeit zusammengebastelt werden könnte), werden erst zur Laufzeit validiert und wenn der Interpreter zur Laufzeit eine Funktion nicht auflösen kann kracht es. Wenn das jedoch zur Compile-Zeit passiert gibt es maximal eine Warnung (wobei selbst das momentan noch nicht implementiert ist, also momentan wird der Compiler überhaupt nicht meckern).
Auch die Reihenfolge der Funktionen u.ä. ist egal.

Auf gut deutsch:
Wenn es kracht, dann nur zur Laufzeit, der Compiler geht also davon aus, dass du richtigen Code (zumindest was den dynamischen Teil angeht) schreibst. Das Verhalten soll auch so bleiben (eventuell wird es an einigen Stellen Warnings geben, aber Errors werden es nie). Sind Variablen also nur in einer Include-Datei definiert und sie werden aber in beiden Dateien verwendet, meckert der Compiler kein Stück, egal ob mit oder ohne Include.

Es ist nur wichtig, dass beim Ausführen des Codes die Variablen auch zuerst zugewiesen werden und dann verwendet werden.

Edit:
Ganz konkret, wäre es also so richtig/möglich:

GUI.aal1
Code:
$win=CreateWindow(...)
$button=CreateButton($win, ...)
SetOnEvent($button, "onClick","Button1Clicked")
Main.aal1
Code:
#include("GUI.aal1")

; Do something with $win or $button

While 1
   Sleep(10)
Wend

Func Button1Clicked()
     ConsoleWrite("It worked!")
EndFunc