AutoIt Versions-Archiv und Diskussionsthread (3.3.8.1 bis 3.3.10.2, Stand 30.12.13)

  • Gibt es zwischen den Versionen X1 und X2 im Startpost wirklich einen Unterscheid?
    Und wenn ja, woran erkennt man das, wenn beide im Archiv die gleiche Versionsnummer hatten.
    Mir ist gerade aufgefallen, dass ich noch 3.3.9.4 installiert hatte und,
    dass mein Installer anscheinend 3.3.9.5X2 ist (Changelog mit dem aus X2 im Startpost verglichen).

    Außerdem, kann es sein, dass AutoIt um einiges schneller geworden ist?
    Früher musste ich immer eine Weile warten, bis das Skript und die Hilfe gestartet ist.
    Auch die Skripte selbst scheint jetzt viel schneller zu arbeiten.

  • Kleinere Benchmarks bestätigen, dass AutoIt an sich tatsächlich etwas schneller geworden ist.

    Zwischen X1 und X2 besteht der Unterschied, dass X1 keine tenären Operationen und keinen direkten Struct-Zugriff unterstützt (Andere Sachen wie das fehlende $ sind aber schon in der X1 verarbeitet)
    Dateimäßig gibt es keinen Unterschied zwischen X1 und X2 - das ist zwar sinnlos, aber nicht zu ändern. Es sind trotzdem verschiedene Versionen.

  • AutoIt wird immer schneller.
    Das habe ich schonmal mit 3 Versionen (welche das genau waren weiß ich nicht mehr) auf mindestens 4 Rechnern überprüft.
    Jeweils kurze Benchmarks in willkürlicher Reihenfolge tausende Male ablaufen lassen.

    Dabei kam raus, dass Stable Versionen etwas langsamer sind als die Betas
    Neuere Versionen sind etwas schneller als ältere.

    Meine Vermutung ist, dass die Compiler immer besser werden. AutoIt hängt indirekt also auch mit dem Compiler der verwendet wird zusammen.

  • Ich hoffe das geht nicht zu weit offtopic, aber ich frag einfach mal:
    Hat schonmal jemand die Geschwindigkeit von AutoIt mit anderen Sprachen verglichen ?
    Ich vermute, dass AutoIt und Python so ziemlich das langsamste überhaupt sind.

    Wer andern eine Bratwurst brät
    der hat ein Bratwurstbratgerät.

  • AutoIt ist nicht langsam. Und Python soll langsam sein? Dafuq?

    AutoIt ist interprtiert, das heißt es ist logischerweise viel langsamer als assemblierte (oder compilierte) Sprachen wie C / BASIC / PASCAL.

  • So einfach ist die Sache nicht, auch java und .NET Sprachen laufen durch eine Art interpreter, sind aber trotzdem recht flott.

    Wer andern eine Bratwurst brät
    der hat ein Bratwurstbratgerät.

  • Java und NET und auch JavaScript laufen heutzutage durch JIT-(Just In Time) Compiler, will heissen, sie werden zu Laufzeit in Maschinen-(oder wie von minx beschrieben Zwischencode) compiliert.
    Daher auch die unterschiedliche Laufzeit von Scripten im Browser bzw. auf unterschiedlichen Plattformen!
    Wie so oft hängt es an der Optimierung der plattformspezifischen Bibliotheken....

  • Sowas kann AutoIt auch brauchen. Ich vermute mal, dass so ein JIT Compiler eine sehr anspruchsvolle Aufgabe ist.

    Wer andern eine Bratwurst brät
    der hat ein Bratwurstbratgerät.

  • Lieber einen Plattform-Unspezifischen Compiler. Wenn man es mal auf den Compilerthread bezieht: Es ist ja geplant, dass die Zwischensprache Perseus nicht nur LASM Code auspsucken muss. Sie lässt sich sehr leicht auch dazu bewegen zum Beispiel NASM-Code auszuspucken, der dann auf Linux kompiliert werden kann. Dann wäre AutoIt Plattformunabhängig. (In diese Richtung geht auch der AutoIt -> C Konverter).

  • Ich vermute, dass AutoIt und Python so ziemlich das langsamste überhaupt sind.

    Wenn ich einen Interpreter für C schreibe und der grottenlangsam ist - ist dann die Sprache C grottenlangsam oder der von mir verwendete Codeübersetzer?
    Sprachen hinsichtlich ihrer "Geschwindigkeit" (ziemlich unscharf diese Definition - was ist genau damit gemeint?) zu vergleichen bringt also nicht viel. Es kommt auf die verwendeten Übersetzer an. Python hat da z.B. mit CPython einen Bytecode-Interpreter, mit Cython einen Compiler und mit PyPy einen JIT-Compiler zu bieten.
    Aber selbst die CPython-Variante muss nicht "langsam" sein.
    Viele Pakete liegen bereits kompiliert vor. Wenn ich z.B. OpenCV unter Python verwende ist es kein großer Geschwindigkeitsunterschied zu C++ da der selbe Binärcode ausgeführt wird.

    Java und NET sind Bytecode-Sprachen. Aus dem Code wird Bytecode der von einer Virtuellen Maschine ausgeführt wird.

    Und gegebenenfalls per JIT kompiliert was zu hoher Performance bei großer Portabilität führt.

    Ich vermute mal, dass so ein JIT Compiler eine sehr anspruchsvolle Aufgabe ist.

    Ist es. Man braucht sich diese Arbeit aber nicht machen da sich clevere Leute sich für genau diesen Zweck schon was einfallen lassen. Wenn du es schaffst AutoItcode in die "LLVM IR"-Sprache zu übersetzen hast du einen Compiler + JIT-Compiler für so ziemlich alle relevanten Befehlssätze.

    Sie lässt sich sehr leicht auch dazu bewegen zum Beispiel NASM-Code auszuspucken, der dann auf Linux kompiliert werden kann. Dann wäre AutoIt Plattformunabhängig.

    Sicherlich kann man das auf Linux dann "kompilieren" (hier ist wohl eher "assemblieren" gemeint). Aber deswegen kommt da nicht gleich was sinnvolles funktionsfähiges heraus. Betriebssystemportabel wird es erst wenn die korrekten Schnittstellen genutzt werden. Das heißt man braucht für das jeweilige Betriebssystem noch eine angepasste Standardbibliothek welche diese Schnittstellen definiert oder man hält sich an Standardschnittstellen wie POSIX. Wozu Windows aber von Haus aus nicht kompatibel ist.
    Befehlssatzportabel wird es sowieso nicht. Ob x86 oder amd64 Code erzeugt wird sollte zwar relativ unbedeutend sein aber spätestens auf Windows 8-ARM-Plattformen ist dann Schluss.

  • Hab mal einen Geschwindigkeitsvergleich zur 8.1 gemacht:
    [Blockierte Grafik: http://i.imgur.com/YPZrb5W.png]
    Man sieht, dass man nichts sieht...
    64Bit ist im Schnitt bei der 9.6 ca. 10% schneller, bei der 8.1 ca. 15% (Vorteil der 8.1)
    die 9.6 ist auf dem Desktoprechner ne Ecke langsamer, Punkten konnte sie nur auf dem Laptop.
    Natürlich sind diese Ergebnisse nicht ganz objektiv, da ich den Test nur ein paar mal hab durchlaufen lassen, und nur 3 Computer getestet habe.

    Skript
    [autoit]

    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_UseUpx=n
    #AutoIt3Wrapper_Compile_Both=y
    #AutoIt3Wrapper_UseX64=y
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****

    [/autoit] [autoit][/autoit] [autoit]

    #include <Array.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Global Const $iAnzFuncs = 7
    Global Const $iRunden = InputBox('Wie viele Durchgänge ?', 'Eine Ganzzahl ab 5, jede Runde dauert einige Sekunden...' & @CRLF & @CRLF & 'Version: ' & '( ' & @AutoItVersion & ' - '& 32 + 32 * @AutoItX64&' Bit )', 10)
    Global $aTest[$iAnzFuncs][2] ; [x][0] = Counter, [x][1] = Gesamtzeit in ms
    Global $nErg

    [/autoit] [autoit][/autoit] [autoit]

    If Not $iRunden Then Exit

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 1 To $iRunden Step 1
    _Test(150)
    ToolTip($i)
    Sleep(800)
    ToolTip('')
    Sleep(200)
    Next

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 0 To $iAnzFuncs - 1 Step 1
    $aTest[$i][1] /= $aTest[$i][0]
    $nErg += $aTest[$i][1]
    Next
    _ArrayDisplay($aTest, @AutoItVersion & ' ' & $nErg)

    [/autoit] [autoit][/autoit] [autoit]

    Func _Test($iAnzahl)
    Local $iRandom
    For $i = 1 To $iAnzahl Step 1
    $iRandom = Random(1, $iAnzFuncs, 1)
    $aTest[$iRandom - 1][0] += 1
    $aTest[$iRandom - 1][1] += Call('_' & $iRandom)
    Next
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _1()
    Local $x = TimerInit()
    For $i = 1 To 51000 Step 1
    Next
    Return TimerDiff($x)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _2()
    Local $x = TimerInit()
    Local $a = 0, $b = 1, $c = 2, $d = 3
    For $i = 1 To 620 Step 1
    $a = (($b + $c)/$d)^0.5
    $b = (($c + $d)/$a)^0.5
    $c = (($d + $a)/$b)^0.5
    $d = (($a + $b)/$c)^0.5
    Next
    Return TimerDiff($x)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _3()
    Local $x = TimerInit()
    Local $a
    For $i = 1 To 2600 Step 1
    $a = Random() + Random() + Random() + Random() + Random()
    Next
    Return TimerDiff($x)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _4($a = 0)
    Local $x = TimerInit()
    If $a < 480 Then _4($a + 1)
    Return TimerDiff($x)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _5()
    Local $x = TimerInit()
    Local $z
    While $z < 300
    $z += 1
    WEnd
    Do
    $z -= 1
    Until $z < 1
    For $a = 1 To 6 Step 1
    For $b = 1 To 8 Step 1
    For $c = 1 To 6 Step 1
    For $d = 1 To 8 Step 1
    For $e = 1 To 7 Step 1
    Next
    Next
    Next
    Next
    Next
    Return TimerDiff($x)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _6()
    Local $x = TimerInit()
    Local $x1 = Random(), $x2 = Random(), $w1 = Random(), $w2 = Random(), $y1 = Random(), $y2 = Random(), $h1 = Random(), $h2 = Random(), $z
    For $i = 1 To 360 Step 1
    If IsInt($i/5) Then
    $x1 = Random()
    $x2 = Random()
    $w1 = Random()
    $w2 = Random()
    $y1 = Random()
    $y2 = Random()
    $h1 = Random()
    $h2 = Random()
    EndIf
    $z = $x1 > $x2 And $w1 > $w2 And $y1 > $y2 And $h1 > $h2
    $z = $x1 < $x2 And $w1 < $w2 And $y1 < $y2 And $h1 < $h2
    $z = $x1 <> $x2 Or $w1 <> $w2 Or $y1 <> $y2 Or $h1 <> $h2
    $z = $x1 = $x2 Or $w1 = $w2 Or $y1 = $y2 Or $h1 = $h2
    Next
    Return TimerDiff($x)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _7()
    Local $x = TimerInit()
    Local $a
    For $i = 1 To 420 Step 1
    $a = Round(Random() * 1000, Random(0, 1))
    If IsNumber($a) And IsInt($a) Then
    If IsNumber($a) And IsInt($a) Then
    If IsNumber($a) And IsInt($a) Then
    EndIf
    EndIf
    EndIf
    Next
    Return TimerDiff($x)
    EndFunc

    [/autoit]


    könnt ja auch mal ne Vergleichstabelle machen. Vllt auch mit anderen Betas, wenn ihr Lust und Zeit habt.
    lg
    Mars

  • Ich habe auch alle Versionen noch und behalte sie wohl auch, da frau nie weiß, wann ich sie wieder brauche.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • Dieses mal ein besserer Benchmarkvergleich der Versionen.
    Es wurden jeweils eine sehr hohe Anzahl Tests durchgeführt, und diese 3x wiederholt.
    Die Auswertung zeigt: Die neuste Version ist teilweise nur halb so schnell wie die 8.1_64 !
    Die 8.1_32 wurde als Referenzwert angenommen, höhere Prozente = schlechtere Rechenzeit.
    [Blockierte Grafik: http://i.imgur.com/bnH1cPD.png]
    Frage an die Anderen: Ist bei euch der Unterschied auch so riesig ?
    Wenn ja muss das unbedingt gefixt werden !
    Edit: Testskript liegt in Post 35
    lg
    Mars

  • Bei mir XP32 ist die 8.0 (jaja, die verwende ich..) wesentlich schneller als die 9.5!
    Dein Bench läuft mit 48 zu 36 (8.0 bei 100%) genau 1/3 langsamer....das sind 33%!!
    Wobei der Bench Nr. 3 völlig aus dem Ruder läuft....alle anderen sind ca. 20% langsamer, Nr. 3 ist ca. DOPPELT so langsam (dauert also doppelt so lange!)