Ich finde es ungünstig, dass es nur die zwei Gültigkeitsbereiche gibt, da man manchmal Variablen nur zeitweise braucht, z.B. nur innerhalb einer Schleife, und dass man auch innerhalb von Funktionen oder neue globale Variablen erzeugen kann.
Letzteres ist eine zusätzliche Fehlerquelle, da es sein kann, dass Variablen unter bestimmten Bedingungen nicht existieren, unter anderen aber schon.
Beispiel:
Spoiler anzeigen
If $test>=5 Then
; ...
Global $Variable = 22
; ...
Else
; ...
EndIf
MsgBox(0, "", $Variable)
[/autoit]Je nachdem, welchen Wert die Variable $test hat, reagiert das Skript anders. Die globale Variable wird aber nur bei Werten größer oder gleich 5 definiert. Andernfalls bricht das Programm mit einer Fehlermeldung ab. Es kann vorkommen, dass meistens der Wert von $test über 5 ist und nur in seltenen Situationen darunter. Dann hat man einen Fehler, der schwer reproduzierbar ist und bei Test auch kaum gefunden wird. Wäre man gezwungen, die Variablen vor der Abfrage zu deklarieren, würde dieses Problem nicht bestehen.
Es ist vernünftig und wird meistens so gemacht, denn wenn man an einen String nur ein Zeichen anhängt, müsste sonst neuer Speicher alloziiert, der alle Zeichen kopiert, das Zeichen angehängt und dann der alte Speicher freigegeben werden. So verhindert man, dass die ganze Arbeit zu oft gemacht werden muss.
Irgendwo kann man noch Ausschnitte aus dem Programmcode älterer AutoIt-Versionen herunterladen (RegEx, DllCall, GUI-Funktionen wurden herausgenommen). Das hab ich mir mal kurz angeguckt und gesehen, dass AutoIt bei Strings immer auf 8 Byte aufrundet.