- Offizieller Beitrag
Hallo!
An alle, die gerne kleine Skripte und vor allem kleine Exe-Dateien haben, an die 56k-Modem-Nutzer und 20-GB-Festplatten-Besitzer (Ich liebe euch alle :D)
Zusammen mit Markus habe ich ein Programm in C++ geschrieben, das AutoIt-Skript vor dem Kompilieren selbst parst.
Dabei werden zunächst die Includes eingebaut. Dann werden je nach Einstellung in der zugehörigen AutoIt-GUI (GUIS in C++ sind einfach nur pain) Kommentare und/oder ungenutzte Funktionen entfernt. Das Entfernen von Kommentaren beherrscht auch Tidy.exe aus dem SciTE-Lieferumfang. Leider wird das aber in AutoIt gemacht, sodass die Performance bescheiden ist. "CleanScript" erledigt die Kommentarentfernung bei Galenda in weniger als einer halben Sekunde, wobei die meiste Zeit durch Ausgaben auf der Konsole verloren geht. Tidy braucht (zugegeben inklusive Einrücken) 45 Sekunden.
Das Highlight in unserem Programm ist aber zweifellos die Möglichkeit, ungenutzte Funktionen entfernen zu können. Dazu wird der gesamte Quelltext inklusive Include-Dateien auf Funktionen und deren Aufrufe hin untersucht. Funktionen, die definiert, aber nie aufgerufen werden (i.d.R. die große Mehrheit derer, die aus den Includes kommen), werden entfernt.
Zu guter Letzt werden auch die leeren Zeilen noch entfernt.
Mal ein Beispiel anhand der aktuellen Galenda-Version:
Ursprungsgröße Skript (mit Includes): 575 KB
Nach Behandlung mit CleanScript: 217 KB - bei gleicher Funktionalität...
Ursprungsgröße kompiliertes Skript: 310 KB
Nach Behandlung mit CleanScript: 235 KB (knapp 25% Einsparung)
Das kann sich schon sehen lassen, denke ich.
Was man beachten muss:
- Bei #includes, darf nur ein Leerzeichen in der Zeile stehen und zwar zwischen "#include" und < oder ".
- Bei Strichpunkten, die keine Kommentare anzeigen (z.B. in MsgBoxen oder Strings) kann es zu unerwünschten Resultaten führen, wenn man die Kommentare entfernen lässt. Dazu müsste man den Dev-C++ 4.9.9.2-Quelltext leicht anpassen.
- Call und Execute können bei der Funktionsenternung Probleme machen, da Aufrufe der Funktionen dann nicht erkannt werden. Abhilfe kann ein Aufruf an beliebiger anderer Stelle schaffen.
Bitte ausführlich testen und vielleicht auch die ein oder andere Einsparungszahl posten...
peethebee & Markus