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 6 von 12   « Erste     456 78     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 13:59 Uhr)
 
Benutzerbild von himitsu
himitsu

 
Delphi 12 Athens
 
#51
  Alt 3. Jan 2010, 17:49
Zitat von littleDave:
  • Alle records in der Host-Anwendung müssen als packed record deklariert sein
du könntes eventuell mein TXMLSerializeRecordInfo aus'm himXML verwenden

http://www.delphipraxis.net/internal...t.php?t=169095
meine aktuelle Version davon wird (hoffentlich) nächste Woche mit 'ner neuen himXML-Version hochgeladen

Diesem kann man den Recordaufbau übergeben und kann dann die berechneten Offsets der Elemente daraus auslesen und für eine Zuweisung verwenden. (praktisch so, wie ich's inzwischen in der Record-[De]Serialisierung auch mach)
  Mit Zitat antworten Zitat
Benutzerbild von littleDave
littleDave

 
Delphi 7 Professional
 
#52
  Alt 3. Jan 2010, 18:09
Zitat von himitsu:
Zitat von littleDave:
  • Alle records in der Host-Anwendung müssen als packed record deklariert sein
du könntes eventuell mein TXMLSerializeRecordInfo aus'm himXML verwenden

http://www.delphipraxis.net/internal...t.php?t=169095
meine aktuelle Version davon wird (hoffentlich) nächste Woche mit 'ner neuen himXML-Version hochgeladen

Diesem kann man den Recordaufbau übergeben und kann dann die berechneten Offsets der Elemente daraus auslesen und für eine Zuweisung verwenden. (praktisch so, wie ich's inzwischen in der Record-[De]Serialisierung auch mach)
An sich das wirklich eine interessante Sache, das Problem dabei ist jedoch, dass die Performance dadurch extrem sinken würde. Bei jedem Record, dass in die Script-Engine übergeben wird und zurück, müsste ich dann extrem viele einzelne Copy-Befehle ausführen - während ich jetzt für relativ simple Records nur ein Copy-Befehl brauche.

Da ist es dann doch einfacher, die Records als packed record zu verlangen als den enormen Aufwand der Konvertierung vorzunehmen.
  Mit Zitat antworten Zitat
Benutzerbild von olee
olee

 
Turbo Delphi für Win32
 
#53
  Alt 3. Jan 2010, 19:44
Unterstützt denn deine Script Engine keine Ausrichtung von Record-Feldern?

Das ist doch eigentlich keine große Sache (ich spreche aus Erfahrung denn bei mir klappts *gg*)

Und wieso sollten es mehr copy-Befehle dadurch werden?

Im Grunde wird doch nur die Gesamtgröße des records verändert

Aber allemal TOP deine Script-Engine.
Ich hoffe ich kann da noch etwas aufholen mit OOP (dafür war ich mit Events schneller )

MFG und viel Glück
Björn Zeutzheim
  Mit Zitat antworten Zitat
Benutzerbild von littleDave
littleDave

 
Delphi 7 Professional
 
#54
  Alt 16. Feb 2010, 21:55
Nach einer etwas längeren (teilweise Zwangs-) Pause gibt es wieder ein neues Update Version 0.4.5.0
  • Bug fixes
    • Kritischer Fehler beim Kopieren von Records in Record-Klassen-Felder behoben
    • Kritischer Fehler beim Kopieren von Records in Sub-Records behoben
    • Kritischer Fehler beim Linken der Record-Meta-Daten beim Kompilieren
    • Script-Interne Methoden von externen Klassen können jetzt lokale Variablen haben (der Compiler war zuuuu streng )
  • Änderungen
    • Script-Klassen und Script-Records benutzen jetzt den eingebauten Memory-Manager
    • Script-Klassen-Erzeugung in eine eigene Unit ausgelagert
  • Neuerungen
    • Der Cache des integrierten Memory-Managers kann jetzt optional per Compiler-Directive vergrößert werden
    • Neue Compiler-Directive in der "ScriptEngineII.inc": SEII_BigRunTimeCache
    • Es gibt einen neuen Spezial-OpCode, mit dem Vergleiche sehr viel schneller werden. Eine for-Schleife von 0 bis 1.000.000 dauert bei mir jetzt nicht mehr 800ms, sondern nun noch 270ms.

Der Download befindet sich wie immer im ersten Post - oder per SVN.

Grüße

PS an EugenB: sorry, hat etwas länger gedauert, da mich ein fieser Bug noch aufgehalten hat.
  Mit Zitat antworten Zitat
EugenB

 
Lazarus
 
#55
  Alt 17. Feb 2010, 05:27
Zitat von littleDave:
PS an EugenB: sorry, hat etwas länger gedauert, da mich ein fieser Bug noch aufgehalten hat.
Nicht Schlimm

Sobald ich mal etwas Zeit finde, werde ich es an testen.

Btw, ist auch das mit dem inherited gelöst worden?
  Mit Zitat antworten Zitat
Benutzerbild von littleDave
littleDave

 
Delphi 7 Professional
 
#56
  Alt 7. Mär 2010, 16:32
Zitat von EugenB:
Btw, ist auch das mit dem inherited gelöst worden?
Jetzt schon, denn ...

... es gibt wieder eine neue Version Version 0.4.6.0
  • Bug fixes
    • Bei verschachtelten Record-Funktion gab es ein kleines Problem, so dass der Stack zerissen wurde
    • Record-Funktionen löschen das Record jetzt etwas später - somit gibt es jetzt keine Access-Violation bei solchen Operationen mehr.
  • Änderungen
    • Strings im Byte-Code-Container wurden bisher in der jeweiligen String-Version von Delphi gespeichert (also < D2009: Ansi, >= D2009: Unicode). Somit war eine mit einer Ansi-Version erstellen Script-Anwendung nicht mit einer Unicode-Version ausführbar - und anders herum. Nun werden alle Strings im Byte-Code-Container per Default als Unicode-String gespeichert und sind somit Delphi-Unabhängig. Mit FreePascal habe ich das ganze leider noch nicht getestet.
    • Es sollte nun wieder ohne größere Probleme kein Problem mehr sein, die SEII mit Delphi 2009 oder neuer zu kompilieren.
  • Neuerungen
    • Records können jetzt auch als var-Parameter von Delphi an einzelne Script-Methoden übergeben werden. Das ganze geht natürlich in beide Richtungen, also Delphi->Script und Script->Delphi.
    • Der aktuelle CallStack der RunTime kann jetzt nicht nur als string zurückgegeben werden, sondern auch als Liste
    • Der inherited - Befehl ist jetzt deutlich mächtiger als zuvor. Nun kann man - wie in Delphi auch - nach dem Inherited-Befehl den Funktionsnamen angeben, der ausgeführt werden soll. Natürlich mit allen Parameter-Typen, usw.
    • Constructors können jetzt auch als virtual markiert werden.

Der Download befindet sich wie immer im ersten Post - oder per SVN.

Grüße
  Mit Zitat antworten Zitat
Benutzerbild von littleDave
littleDave

 
Delphi 7 Professional
 
#57
  Alt 7. Mär 2010, 18:02
Sorry für den Push, jedoch gab es eine kleine brain-technische Störung bei mir .

Ich hab die falsche Version hochgeladen -> daher noch dieses schnelle Update. Die wirklich aktuelle Version ist jetzt hochgeladen.
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG
 
#58
  Alt 18. Mär 2010, 14:40


Sag mal, wie sieht es mit array-Unterstützung in SEII aus, das Schlüsselwort scheint es ja zu geben, aber mehr nicht
Außerdem taucht es weder in der near feature- noch in der far feature-Liste auf.
Sind die irgendwo unter den Tisch gefallen oder einfach unerwünscht?
  Mit Zitat antworten Zitat
Benutzerbild von littleDave
littleDave

 
Delphi 7 Professional
 
#59
  Alt 18. Mär 2010, 15:27
Zitat von BUG:


Sag mal, wie sieht es mit array-Unterstützung in SEII aus, das Schlüsselwort scheint es ja zu geben, aber mehr nicht
Außerdem taucht es weder in der near feature- noch in der far feature-Liste auf.
Sind die irgendwo unter den Tisch gefallen oder einfach unerwünscht?
Ja, *hust*, arrays sind für Version 0.5 geplant . Jedoch liegt Version 0.5 genau zwischen near feature und far feature, daher steht es nicht genau in einer dieser Listen .

Nein, Spaß beiseite: arrays sind geplant und das Key-Word ist ja auch schon definiert. Jedoch plagen mich im Moment eher ein paar Kinderkrankheiten. Bei FPC 2.4 haben sie z.B. die Call-Convention von register verändert. Also muss ich das für FPC 2.4 wieder anpassen (ist bereits im SVN, jedoch ungetestet). Dazu kommen noch ein paar Compiler-Sachen, die mir erst nach und nach auffallen. Somit bin ich im Moment eher beim Bug-Fixing und komme kaum dazu, neue Sachen hinzuzufügen.

Nach dem dem baldigen Release von v0.4.7 (wahrscheinlich am Wochenende) sind dann hoffentlich nur noch "nicht auffindbare" Bugs drinnen (die Hoffung stirbt zuletzt ).

Danach werde ich wahrscheinlich erst einmal etwas an den records machen und danach werde ich mich um den is Operator kümmern. Sobald das dann alles einigermaßen läuft, muss ich mich überwinden und mal arrays einbauen (was auf Grund der Nativ-Schnittstelle nicht gerade einfach wird).
  Mit Zitat antworten Zitat
Benutzerbild von littleDave
littleDave

 
Delphi 7 Professional
 
#60
  Alt 20. Mär 2010, 20:45
Neues Update Version 0.4.7.0
  • Neue Features
    • Es gibt eine neue Klasse in der System-Unit: ScriptInfo. In diese Klasse wird beim kompilieren unter anderem die aktuelle Uhrzeit sowie die Compiler-Version hinein gespeichert. Diese Werte sind als Konstanten im compilierten ByteCode drinnen und sind somit beim Zugriff extrem schnell. Da die Werte dynamisch in den Quelltext der Unit kompiliert werden, stimmt die Uhrzeit nur dann, wenn der Unit-Cache nicht aktiviert bzw. davor geleert wird.
  • Performance
    • Geschwindigkeit beim Aufrufen von externen Methoden um ca. 30% verbessert
    • Ein paar neue OpCodes hinzugefügt, um die Anzahl der Commands für bestimmte Operationen zu minimieren
  • Bug-Fixes
    • Bug in den Script-Engine-internen Helfer-Methoden für strings behoben
    • Floating-Point-Konstanten hatten eine zu geringe Präzision
    • Kleines Problem im Unit-Cache behoben
    • Problem in statischen Methoden behoben: lokale Variablen in statischen Funktionen wurden als globale Variablen angesehen
    • Da FPC seit 2.4 die Call-Convention wieder mal geändert hat, musste ich mal wieder einiges anpassen.

Der Download befindet sich wie immer im ersten Post ( - oder im SVN)

Grüße
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 6 von 12   « Erste     456 78     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 00:31 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