Hallo liebe
DP'ler
ScriptEngineII
ist der Nachfolger meiner
letzten ScriptEngine. Da es sich um ein komplettes Remake handelt, sind die beiden jedoch nicht mehr vergleichbar.
Kurzübersicht- Die Script-Engine bnutzt Object-Pascal als Script-Sprache und unterstützt objekt-orientierte Programmierung.
- Der Quelltext wird in ByteCode übersetzt, der dann von einer optimierten RunTime ausgeführt wird
- Trotz der Möglichkeiten ist das Interface der Komponente sehr klein und übersichtlich gehalten
- Für den Einstieg habe ich eine kleine Doku in Form eines PDFs mit in den Download gepackt
Installation
In der ZIP-Datei befindet sich ein Unterordner "src". Diesen extrahiert ihr einfach in einen Ordner eurer Wahl und fügt diesen Ordner dann in den Bibliothekspfad von Delphi hinzu. Im Quelltextorder befindet sich die Datei "ScriptEngine.inc". Diese Datei kann zum konfigurieren der ScriptEngine benutzt werden. Die einzelnen Defines sind (hoffentlich) ausreichend erklärt.
Benötigte Delphi-Version
Bisher hab ich es nur mit Delphi 7 und mit Lazarus getestet. Unter FreePascal hab ich nur ein paar Tests ausgeführt und diese sind auch korrekt gelaufen. Unter Delphi 2009/2010 hab ich die ScriptEngine ebenfalls erfolgreich getestet.
Besonderheiten- wenn man innerhalb einer Klassenmethode auf andere Klassenmethoden oder -Variablen zugreifen will, muss man immer "Self" mit angeben
Update 10.10.2010
Mit der Version ist 0.5.4.1 ist das nun nicht mehr notwendig!
- Records sind Referenz-Typen
Bisherige Probleme
Im Moment sind noch folgende Probleme vorhanden:
- überladene Methoden haben bisher folgende Einschränkung:
- sie müssen alle vom selben Typ sein (statisch, nicht statisch)
- der Befehl reintroduce ist noch nicht vorhanden
Lizenz
MPL v1.1 ,
GPL v3.0 oder
LGPL v3.0
Feature-Liste- Übersicht
- Object-Pascal als Dialekt
- Ganzzahltypen: byte, shortint, word, smallint, cardinal, integer, int64
- Fließkommatypen: single, double
- Stringtypen: string, UTF8String, WideString
- Operatoren: + - * / div mod shr shl and or xor not @
- Vergleich: = < > <= >= <> is
- Schleifen: for while repeat for-in-do
- Datenvergleich: if case
- Spezielle Blocks: try-finally / try-except
- Konstanten
- verschachtelte Unit-Namen (z.B. Unit1.SubUnit.SubUnit)
- Partielle Units
- Ablaufkontrolle: continue break exit
- Exception-Handling und Exception-Throw möglich
- Multi-Threading-Scripts
- Methoden
- Methodentypen: procedure function constructor destructor
- Methodenparametertypen: const var
- Methodenoperatoren: virtual abstract override overload forward
- Import von DLL-Methoden direkt im Script (z.B.: procedure Sleep(milliSec: DWORD); external 'kernel32.dll' name 'Sleep'; stdcall;
)
- OOP-Features: inherited
- Spezielle Operatoren: external export
- Unterstützte Aufrufkonventionen: register pascal stdcall cdecl
- Methoden-Pointer
- Events
- Records
- Abschnitte: private protected public
- Record-Constanten (const-Deklaration in der record-Deklaration)
- (statische) Record-Methoden
- (statische) Record-Variablen
- (statische) Record-Properties
- Property-Typen: read+write, read-only, write-only
- Property-Zugriff: direkt, über Methoden, über Methoden mit Parametern
- Klassen
- Objekt-Orientierte Programmierung
- Klassenvererbung
- Methoden überschreiben
- Klassen-Sektionen: private protected public
- Class-Constanten (const-Deklaration in der Class-Deklaration)
- (statische) Klassenmethoden
- (statische) Klassenvariablen
- (statische) Klassenproperties
- Property-Typen: read+write, read-only, write-only
- Property-Zugriff: direkt, über Methoden, über Methoden mit Parametern
- Partielle Klassen (so ähnlich wie bei .NET)
- Class Helpers
- Es können zu jedem Datentyp beliebig viele "Helfer-Klassen" erstellt werden
- gleicher Aufbau wie bei normalen Klassen, nur die Deklaration ist etwas anders:
- TStringHelper = helper for string
- Class Helpers erweitern eine Klasse/einen Datentyp ohne die Vererbung zu nutzen
- Compiler
- schneller Compiler
- eingebauter Unit-Cache für schnelleres kompilieren (so wie Delphi-DCUs)
- partielle Units – mehrere einzelne Units mit gleichem Namen werden zu einer Unit zusammengefasst
- Linker zum zusammenstellen und zum optimieren des Byte-Codes
- IntelliSense / Code-Completion und Parameter-Hints-Unterstützung
- eingebaut als abstrakte Klasse – für SynEdit bereits vorhanden
- Speichern des kompilierten ByteCodes in einen Stream
- RunTime
- schneller ByteCode-Interpreter
- direkter Aufruf von Delphi-Funktionen
- Script-Methoden aus dem Programm heraus aufrufbar
- Script-Methoden als TMethod-Event nativ aufrufbar
- einfacher Garbage Collector für Script-Klassen (nur falls das Objekt nicht manuell zerstört wurde)
- eigener Memory-Manager mit Caching für schnelleres Ausführen und für weniger Speicherfragmentierung
- Exception-Handling
- Stack-Tracing
- Quelltext
- durchgehende Namenskonvention (Units starten mit uSE2 und Klassen mit TSE2)
- bisher keine Memory-Leaks gefunden
Noch ein paar kurze Hinweise
- Diesmal habe ich leider nicht so viele Beispiele mit in den Download hinein gepackt - es werden aber noch ein paar nachgeliefert
SVN
Ich hab für die Script-Engine ein
Source-Forge-Projekt erstellt. Dort sind alle Änderungen auch per
SVN abrufbar. Wichtige Releases werd ich natürlich weiterhin hier hochladen
Mitgelieferte IDE
Ich habe die kompilierte Version meiner aktuellen
IDE mit in das Download-Paket gepackt. Zusätzlich hab ich den Source in den Unterordner IDEsrc gepackt - zusammen mit den drei kompilierten Packages. Mit der
IDE kann man ein paar Testprojekte öffnen, die sich im Unterordner "Projects" befinden.
Ich hoffe, euch gefällt die neue Script-Engine und vielleicht kann der eine oder andere sie ja benutzen.
Download
Auf
SourceForge.net (ca. 2,6 MB)
Grüße