• Ich habe ja schon einmal erzählt, dass ich an einem AutoIt-Compiler arbeite, der AutoIt-scripte nach C++ übersetzt. Das Projekt habe ich deswegen AutoItC genannt.
    Es besteht aus zwei Teilen, einem Converter und einer runtime library. In der runtime library sind alle Funktionen enthalten und diese werden dann mit dem compilierten Skript verknüpft.

    Alte Version

    Vor ca. zwei Wochen habe ich mit Arrays das letzte große Sprachelement geschafft und kann nun bereits einfache Skripte übersetzen.

    Die Grundelemente von AutoIt sind soweit alle fertig, nur noch Kleinigkeiten fehlen, z.B. fehlt der Operator ==.
    Es gibt aber noch schwer lösbare Probleme, zum Beispiel stimmt die Reihenfolge, in der Operatoren ausgewertet werden, noch nicht. Solange man aber wie ich auch schon aus Lesbarkeitsgründen oft Klammern setzt, macht das nicht so enorm viel aus.

    Von den Funktionen fehlen auch noch viele, genaugenommen sind bisher nur die wichtigsten und einfachsten implementiert. Hauptsächlich sind das: Mathematische Funktionen. String... außer RegEx, Typumwandlungen von Variablen, MsgBox, ConsoleWrite und die Ini-Funktionen.

    Aus diesen Gründen ist AutoItC zur Zeit noch für die Entwicklung unbrauchbar, aber wer will kann gerne weitere Funktionen und Bugfixes beisteuern oder den Code anderweitig nutzen.

    DOWNLOAD

    Es gibt eine neue Version von AutoItC. Im Gegensatz zur alten wird nicht nur einfach eins zu eins umgewandelt, sondern ein abstrakter Syntaxbaum aufgebaut. Das erlaubt neben dem Beheben einiger Probleme der alten Version auch eine Reihe an Optimierungen.
    Außerdem funktioniert das Variablensystem jetzt vernünftig, auch wenn ich dafür auf Geschwindigkeit verzichten musste.

    Der Converter funktioniert mit Ausnahme von Kleinigkeiten schon, aber von den ganzen Funktionen sind noch kaum welche implementiert. AutoItC ist noch nicht für den Einsatz vorgesehen, denn neben fehlenden Features ist das ganze System auf Tests und nicht auf angenehme Benutzung ausgelegt.

    Es gibt dazu auch ein Sourceforge Projekt und ich freue mich, wenn mir jemand dabei hilft.

  • Hallo Marthog,
    Ich finde diese Idee richtig Gut , :thumbup: werden GDIPlus etc. auch enthalten sein ?
    Wenn ja wäre das eine richtig feine Sache da Autoit nicht sehr Systhem nah ist und damit wäre das Problem mit der Leistung ja gelöst ?

    Leider kenne ich mich nicht mit C++ aus, weswegen ich keine Hilfe im Projekt leisten kann. sry :)

    Mfg F4R

    Ein Spoiler im Spoiler im Spoiler...

    Spoiler anzeigen
    Spoiler anzeigen
    Spoiler anzeigen
    Spoiler anzeigen
    Spoiler anzeigen
    Spoiler anzeigen
    Spoiler anzeigen
    Spoiler anzeigen
    Spoiler anzeigen
    Spoiler anzeigen
    Spoiler anzeigen
    Spoiler anzeigen
    Spoiler anzeigen
    Spoiler anzeigen
    Spoiler anzeigen
    Spoiler anzeigen
    Spoiler anzeigen
    Spoiler anzeigen
    Spoiler anzeigen
    Spoiler anzeigen
    Spoiler anzeigen
    Spoiler anzeigen
    Spoiler anzeigen
    Spoiler anzeigen
    Spoiler anzeigen
    Spoiler anzeigen
    Spoiler anzeigen
    Spoiler anzeigen
    Spoiler anzeigen
    Spoiler anzeigen

    Die geheime Nachricht ist "Baum" !

  • Super Projekt, für ein "besseren" Autoit Compiler würd ich wenn das Projekt vorran kommt und Zukuft hat, sogar Spenden.

    Leider sind meine C++ kenntnisse noch zu klein, um zu Helfen, ich würde eher das Projekt behindern.

    Aber gib das Projekt nicht auf. :thumbup:

    Sind TV-Quizfragen zu einfach? A) Ja B) Harry Potter

    Spoiler anzeigen

    Ich gebe zu dieser Post hat wahrscheinlich nicht viel geholfen,
    aber ich versuche wenigstens zu helfen :rolleyes:

  • Ich hätte Interesse, mitzumachen.
    Hab ich ja auch noch eine Version von AutoItC rumliegen. :D

    Beschäftige mich derzeit sowieso nur mit OpenGL fast, da wäre das doch mal eine schöne Abwechslung.
    Schreib mir halt mal eine PN, da können wir ja genaueres besprechen.

    There's a joke that C has the speed and efficieny of assembly language combined with readability of....assembly language. In other words, it's just a glorified assembly language. - Teh Interwebz

    C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do, you blow off your whole leg. - Bjarne Stroustrup
    Genie zu sein, bedeutet für mich, alles zu tun, was ich will. - Klaus Kinski


  • Ich finde diese Idee richtig Gut , :thumbup: werden GDIPlus etc. auch enthalten sein ?
    Wenn ja wäre das eine richtig feine Sache da Autoit nicht sehr Systhem nah ist und damit wäre das Problem mit der Leistung ja gelöst?

    Ich plane, alle Grundfunktionalitäten (außer Execute und ExitLoop mit variablem scope) auch zu unterstützen, sodass man GDIPlus ebenfalls einsetzen kann. Allerdings glaube ich kaum, dass der Geschwindigkeitsgewinn wirklich so enorm wird, denn während C++ ein statisches Typsystem hat, kennt AutoIt nur den Typ Variant, dessen wirkliche Typen zur Laufzeit bestimmt werden. Dadurch muss andauernd der Typ bestimmt und ggf. umgewandelt werden. Außerdem ist DllCall als Funktion speziell implementiert und bei jedem Aufruf muss erstmal die Funktion in der Dll gesucht, die Datentypen ausgewertet werden etc.
    Ich plane für später neben etlichen anderen Features und Optimierungen auch noch ein Plugin-System, sodass man für UDFs einfach noch eine spezialisierte Version schreiben kann, die direkt auf C++-Ebene arbeitet, aber für den Nutzer keinen unterschied macht.
    Erstmal gilt aber, dass die Sprache verwendbar sein muss, also die Grundfunktionalität genauso wie in AutoIt sein soll, vorher lohnen sich solche Spielereien noch gar nicht.

  • Ich würde es doch ein bisschen anders machen, so ähnlich wie in C++ mit der STL. Die library ist nach außen hin immer gleich und in völlig standardkonformen C++, aber intern wird mit Spezialisierungen, Tricks, inline-Assembler, Magie und compilerspezifischen Built-in-Functions die größtmögliche Geschwindigkeit herausgeholt.
    Für den Anwender macht es dann keinen Unterschied, denn er hat genau das gleiche Interface, aber wesentlich mehr Geschwindigkeit. Eine Dll braucht man auch nicht, denn alles wird direkt in den Code eingebunden oder statisch gelinkt.

  • Das ist ein hochinteressantes Projekt. Meine Kenntnisse in C++ sind leider sehr rudimentär. Daher weiß ich (noch) nicht, wie ich zu dem Projekt beitragen könnte.

    Erste Hürde: Ich habe die AutoItC-Converter.exe aus dem alten Projekt hergenommen und da die vom Programm verlangten DLLs libgcc_s_dw2-1.dll und libstdc++-6.dll nicht dabei waren, die aus "C:\texlive\tlpkg\tlperl\bin" (aktuelle Version) verwendet. Nun gibts von AutoItC-Converter.exe eine Fehlermeldung:
    Der Prozedureinsprungpunkt "_ZNSs8pop_backEv" wurde in der DLL "libstdc++-6.dll" nicht gefunden.

    Wo bekomme ich die passenden DLLS her? g++ ist installiert und die Pfade in der Compiler.ini sind korrekt gesetzt. C:\cygwin\bin ist im Path gesetzt.

    UPDATE: im Avidemux-Installer habe ich scheinbar passende DLLs gefunden. Der Nullsoft-Installer lässt sich mit 7zip entpacken. Allerdings kommen nun (abgesehen von der POSIX-Path-Warnung) folgende Fehler:

    Quelltext des Versuchs:

    [autoit]

    MsgBox(64, "Funzt :)", "Hello AutoItC !")
    Exit

    [/autoit]
  • So richtig verwenden kann man die noch nicht. Am Programm wird bisher nur entwickelt und getestet.

    Du musst schon einen C++11-fähigen Compiler (gcc oder clang aber nicht Visual Studio) verwenden. Erst compilest du AutoItParser (sollte nichts weiter benötigen), damit kann man die Skripte übersetzen. Aus Testgründen habe ich die Commandlineparameter deaktiviert bzw. nichtmal vollständig implementiert, standardmäßig wird von der Datei in.au3 ausgelesen und in out.cpp geschrieben.
    Der zweite Teil ist die runtime-library. Dazu musst du AutoItC compilen und zwar mit den benötigten libraries (das CodeBlock-Projekt sollte alle enthalten). Auch hier wird aus Testgründen erstmal alles in ein funktionsfähiges Programm compiled, dazu muss man von AutoItParser/out.cpp nach AutoItC/AutoIt.cpp kopieren und im debug-mode compilen. Das ist zwar umständlich, aber bisher habe ich an Parser und Programm einzeln gearbeitet und sie einzeln getestet.

  • > Du musst schon einen C++11-fähigen Compiler (gcc oder clang aber nicht Visual Studio) verwenden.
    Installiert ist Cygwin gcc-Version 4.8.2

    Spoiler anzeigen

    Passt der?