2 Fragen bezüglich Schnelligkeit und Interpreter

  • Hallo,

    Ich hätte mal 2 Fragen zu AutoIt:

    1. Warum ist es eigentlich ein solch "langsame" Sprache? (--> https://autoit.de/index.php?page=Thread&postID=266959)


    2. Wie interpretiert der AutoIt-Interpeter das Script bzw. die Befehle? (Zusammenhang mit Geschwindigkeit?)


    Wäre echt toll wenn ihr mir das erklären könntet :)

    Mfg

    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

  • Die Frage habe ich mir auch schon gestellt. Und leider weiß ich darauf auch keine Antwort.
    Der Interpreter ist ansich ja in einer "schnellen" Sprache verfasst.
    Ich kann mir nur vorstellen, dass der Interpreter unmengen unnötige Berechnungen, Überprüfungen oder Sonstiges vornimmt.

  • muss ja jede menge unnötigere berechnungen sein wenn Autoit über 550 mal langsamer ist als z.B Java,
    wurde eigentlich schon mal ein wort über Autoit v4 verloren?
    würde mich mal inertessieren, wenn nämlich die "Nachteile" von Autoit behoben währen (Geschwindigkeit,decompilierbarkeit,..) währ es find ich einfach "Super"
    auch wenn diese genannten "Probleme" nicht behoben werden bleibt Autoit Super ;D

    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:

  • Ihr müsst aber bedenken, dass bei Java die Variablen einen bestimmten Wertebereich haben (gehe ich von aus, kenne mich mit Java nicht aus). In Autoit kann jede Variable als jeder Typ (Variant halt^^) benutzt werden. Das ganze typegecaste (schreibt man das so?) verbraucht sicherlich viel Zeit.

    Lg
    Ali

  • In AutoIt wird der lesbare Code in Tokens zerlegt, das sind u.A. die einzelnen Funktionsnamen, Strings, Zahlen, Variablenname, Keywords, Operatoren (+ - , [ ...) Diese Tokenliste wird dann Stück für Stück eingelesen, dabei muss aber während der Ausführung bestimmt werden, in welcher Reihenfolge die Befehle ausgeführt werden.

    Beispiel
    [autoit]

    7*(5+3)

    [/autoit]


    wird sozusagen in die Tokens

    • Zahl: 7
    • Multiplikation
    • Klammer auf
    • Zahl: 5
    • Plus
    • Zahl: 3
    • Klammer zu


    zerlegt. Beim Ausführen muss der Interpreter daraus die richtie Reihenfolge der Berechnung bestimmen.

    Lua z.B. hat eine assemblerähnliche Sprache, in die das erstmal übersetzt und dann in bytecode weiterumgewandelt wird. Dieser Bytecode wird dann interpretiert.
    Dadurch kann Befehl für Befehl abgearbeitet werden und der Interpreter muss nicht mehr die Reihenfolge bestimmen.

    Beispiel
    [autoit]

    7*(5+3)

    [/autoit]


    wird umgewandelt zu

    • Addiere 5 und 3
    • Multipliziere Ergebnis mit 7

    Zudem verhalten sich die lokalen Variablen anders. In AutoIt gibt es eine Liste mit Variablennamen und Werten, die bei jedem Verwenden einer Variable durchsucht werden muss. In Lua werden die lokalen Variablen zu Indices auf dem Stack und können dadurch schneller wieder ausgelesen werden.
    Außerdem wird Lua ein bisschen optimiert, sodass aus den 7*(5+3) vor der Ausführung der Wert 65 berechnet werden würden.


    Java funktioniert so ähnlich, aber hat festgelegte Typen und wahrscheinlich ist der Optimierer hier ausschlaggebend, denn bei einer Programmanalyse würde er herausfinden, dass die innere Schleife absolut unnütz ist, denn da wird bis 100000000 gezählt, die Variable aber außerhalb dieser Schleife nie verwendet. Dazu habe ich auch etwas in den von dir verlinkten Thread geschrieben am Beispiel C++, das auch sagenhafte 0 Millisekunden gekommen ist.

  • Java wird halt in Bytecode übersetzt und AutoIT wirklich zu 100% interpretiert.
    Da geht natürlich schön Tempo flöten...
    Aber wenn man mal darüber nachdenkt, was AutoIT alles kann finde ich die Geschwindigkeit mehr als aktzeptabel...

    //Edit: Da war wohl jemand schneller ^^ (und ausführlicher) :D

  • Marthog: Riesen Dankeschön an dich, du hast das ja ziemlich verständlich ausgedrückt.
    Das hilft meinem AutoIt-Verständnis sehr :thumbup:

    Auch danke an die anderen :D

    Falls noch jemand was dazu zu sagen hat...
    Ich freu mich immer über noch mehr Erklärunge ;)

    Mfg

    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