AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte ScriptEngine II (v. 0.6.1)
Thema durchsuchen
Ansicht
Themen-Optionen

ScriptEngine II (v. 0.6.1)

Ein Thema von littleDave · begonnen am 21. Sep 2009 · letzter Beitrag vom 4. Aug 2011
Antwort Antwort
Seite 2 von 12     12 34     Letzte »    
Benutzerbild von littleDave
littleDave
Registriert seit: 27. Apr 2006
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.dllname '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
Miniaturansicht angehängter Grafiken
screenshot1.png  
Jabber: littleDave@jabber.org
in case of 1 is 0 do external raise while in public class of object array else repeat until 1 is 0

Geändert von littleDave (10. Apr 2011 um 14:59 Uhr)
 
Vasco da Gama

 
Delphi 2009 Professional
 
#11
  Alt 22. Sep 2009, 18:30
Danke, mein Problem ist, dass ich bei solchen Projekten, gerne mal den Code kopiere, dann in mein Projekt einfüge und dort durchlese, anstatt es abzuschreiben.

Allerdings werden bei meinem Adobe Reader 8 die Leerzeilen und -zeichen beim Code-Abschnitt ignoriert

Danke nochmal
mfG
VdG
Flo
  Mit Zitat antworten Zitat
_x_
 
#12
  Alt 26. Sep 2009, 10:41
Die Script-Engine funktioniert unter Linux mit Lazarus einwandfrei.
Ich musste nur kleinere Änderungen bei den Includes machen (statt \ den hier / ).
Außerdem funktioniert der Performance-Counter nicht. Da er Windows-Api funktionen nützt.
Aber sonst läuft alles Tadellos!


mfg _X_
  Mit Zitat antworten Zitat
Florian Hämmerle
 
#13
  Alt 26. Sep 2009, 11:24
Da hast du dir ja was echt Tolles aus den Fingern (oder sollte man besser sagen Tasten) gszogen.

Noch ne Frage zur Lizenz: Bleibt das jetzt so, dass ich für ein Freeware-Projekt die Script-Engine gratis verwenden und bei Bedarf auch ändern darf?

Schöne Grüße, Florian
  Mit Zitat antworten Zitat
Benutzerbild von littleDave
littleDave

 
Delphi 7 Professional
 
#14
  Alt 26. Sep 2009, 14:43
Zitat von _x_:
Die Script-Engine funktioniert unter Linux mit Lazarus einwandfrei.
Das ist sehr gut zu hören - vielen Dank auch fürs ausprobieren

Zitat von _x_:
Ich musste nur kleinere Änderungen bei den Includes machen (statt \ den hier / ).
Außerdem funktioniert der Performance-Counter nicht. Da er Windows-Api funktionen nützt.
Aber sonst läuft alles Tadellos!
Ja, bei den Includes war ich etwas schlampig - aber das werd ich noch ändern. Zum Performance-Counter: den hatte ich nur zum Testen eingebaut und ist nicht wirklich wichtig - von daher kann man ihn eigentlich auch wieder löschen

Zitat von Florian Hämmerle:
Da hast du dir ja was echt Tolles aus den Fingern (oder sollte man besser sagen Tasten) gszogen.
Danke für das Lob Das freut mich

Zitat von Florian Hämmerle:
Noch ne Frage zur Lizenz: Bleibt das jetzt so, dass ich für ein Freeware-Projekt die Script-Engine gratis verwenden und bei Bedarf auch ändern darf?

Schöne Grüße, Florian
Also du kannst dir eine von den drei Lizenzen aussuchen. Für Freeware ist die MPL wahrscheinlich das richtige. Dort kannst du den Quelltext nach belieben ändern, musst ihn aber nicht veröffentlichen (so wie ich das bisher verstanden habe)


Ich habe in den letzten Tagen mich mal hingesetzt und ein paar Helper-Klassen für einige Datentypen geschrieben. Wer Helper-Klassen nicht kennt: damit kann ich Klassen/Typen mit Funktionen erweitern, ohne die Vererbung zu nutzen. Als Beispiel möchte ich noch schnell ein Beispiel-Script zeigen, bei dem ich die Erweiterungen für den Typ String getestet habe:
Delphi-Quellcode:
program Project1;
var s: string;
    p: string;
begin
  s := 'Hallo, wie gehts';
  if s.StartsWith('Hallo') then
    if s.EndsWith('gehts') then
      if s.Length > 10 then
      begin
        p := s.Copy(6, 5);
        s := s.Replace(p, '', [rfReplaceAll, rfIgnoreCase]);
      end;
        
  Console.WriteLine(s); // Ausgabe: "Hallo gehts"
  Console.WriteLine(p); // Ausgabe: " , wie"
  Console.ReadKey;
end.
Ich weiß noch nicht, ob ich das Update dieses Wochenende noch hin bekomme, da ich noch die Helper-Klassen und die partiellen Klassen in das PDF noch mit hineinschreiben will.
  Mit Zitat antworten Zitat
_x_
 
#15
  Alt 26. Sep 2009, 20:10
Zitat von littleDave:
Zitat von _x_:
Die Script-Engine funktioniert unter Linux mit Lazarus einwandfrei
Das ist sehr gut zu hören - vielen Dank auch fürs ausprobieren
Nichts zu Danken

Zitat von littleDave:
Zum Performance-Counter: den hatte ich nur zum Testen eingebaut und ist nicht wirklich wichtig - von daher kann man ihn eigentlich auch wieder löschen
Wäre in manchen fällen sicher trotzdem interessant

mfg _X_
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms

 
Delphi XE Professional
 
#16
  Alt 26. Sep 2009, 21:17
Unter Delphi 6 lässt es sich nicht kompilieren. Einige Funktionen sind in der SysUtils.pas noch nicht vorhanden.
Thomas
  Mit Zitat antworten Zitat
Benutzerbild von littleDave
littleDave

 
Delphi 7 Professional
 
#17
  Alt 26. Sep 2009, 21:38
Zitat von toms:
Unter Delphi 6 lässt es sich nicht kompilieren. Einige Funktionen sind in der SysUtils.pas noch nicht vorhanden.
Wenn das nicht zu viele seien sollten, wäre es super, wenn du mir eben ne Liste schreiben würdest - dann schmeiß ich diese per Compiler-Switch heraus.
  Mit Zitat antworten Zitat
_x_
 
#18
  Alt 27. Sep 2009, 20:45
In der PDF gibt es die Variable "MyScriptProject", von welchem Type ist die?

mfg _X_
  Mit Zitat antworten Zitat
Benutzerbild von littleDave
littleDave

 
Delphi 7 Professional
 
#19
  Alt 27. Sep 2009, 20:52
Zitat von _x_:
In der PDF gibt es die Variable "MyScriptProject", von welchem Type ist die?

mfg _X_
Diese Variable hat erstmal keinen Typ und ist als Pseudo-Code anzusehen. Ich glaub, ich hab das nicht rein geschrieben - sorry. Es sollte nur eine grobe Funktionalität zeigen, die mit den Methodennamen beschrieben werden sollte.
-> Man muss den Typ leider selbst erstellen.
  Mit Zitat antworten Zitat
_x_
 
#20
  Alt 27. Sep 2009, 20:55
Ach so.

Unter Linux gibt es auch ein paar Probleme mit dem Cache-Manager.
Wo genau das Problem liegt, kann ich aber noch nicht sagen.

mfg _X_
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 12     12 34     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:40 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz