Einzelnen Beitrag anzeigen

Benutzerbild von littleDave
littleDave

Registriert seit: 27. Apr 2006
Ort: München
556 Beiträge
 
Delphi 7 Professional
 
#58

Re: Sysygy Script Engine - Version 0.99h

  Alt 3. Mär 2009, 19:56
Hallo an alle,

sorry das ich so lange nicht mehr online war - ich habe im Moment sehr viel zu tun und hatte mein Delphi in den letzten 3 Monaten ca. 1 Woche mal gestartet . Aber ich will mir wieder etwas Zeit für meine Lieblingsprache nehmen.

Bevor ich auf eure Beiträge eingehe, habe eine gute und eine schlechte Nachricht für euch:
Die Schlechte: Die Sysygy Script Engine werde ich nicht mehr weiterentwickeln . Das Ding ist vom Quelltext her zu unübersichtlich und die Einbindung zu umständlich.

Die Gute Nachricht: Ich arbeite gerade an einer neuen Script Engine

Die neue Script-Engine wird einiges Anders und Besser machen, da ich viel aus dieser Script-Engine gelernt habe: Ich hab mal schnell eine Liste von Sachen zusammengeschrieben, die ich einbauen WILL:
  • Schnellerer und besserer Compiler (bereits 70% der Features des alten Compilers fertig eingebaut)
  • Caching von bereits kompilierten Units (so wie in Delphi die .DCU - Dateien)
  • Einen Linker, der einen Optimizer behinhaltet (zu 70-80% fertig)
  • Eine kleinerer Byte-Code-Aufbau
  • Eine schnellere RunTime-Engine (ist schon zu ca. 40% fertig)
  • Richtiger Unit-Aufbau (unit ... interface ... implementation ... initialization ... finalization ... end.)
  • Object-Pascal!!! (eigene Klassen im Script erstellen) (noch nicht angefangen)
  • Records und Arrays (noch nicht angefangen)
  • Methoden überlaben (funktioniert schon)
  • Methoden forwarden (funktioniert schon)
  • Ein etwas anderer Unit-Aufbau (nicht vom Quelltext her, sondern von der Benutzung von Units):
    Ich arbeite zur Zeit sehr viel in C# und ich finde das generelle Design von .NET und den Klassen nicht schlecht. Ich hab mir gedacht, dass Units (wie die Namespaces in .NET) über mehrere Dateien gehen können
  • Statische Methoden (class procedure und class function) (funktioniert schon)
  • und noch so einiges mehr ...

Das ist schon eine sehr lange List und sehr komplexe Liste die ich nicht so schnell abarbeiten kann. Jedoch bin ich noch sehr optimistisch, dass ich das hinbekomme.


Zitat von EugenB:
irgendwie bin ich grade im Script-Wahn , zuerst hab ich Pascal Script probiert aber irgendwie sind da noch soviele Fehler, dann hab ich schon fast vergessen das es diese Script Engine noch gibt
Danke für die Blumen

Zitat von EugenB:
Da ich FPC nutze, musste ich in dieser Datei: uSygConstants

diesen Teil:
...
auch unter das {$IFNDEF FPC} packen
dann konnte ich es schon mal Compilieren
Ja, den FPC-Support hab ich leider etwas schleifen lassen

Zitat von EugenB:
Was meinste wann diese Sachen funktionieren werden?
Arrays
Class Properties
Gleichnamige Funktionen ( welcher aber verschiedene Parameter haben zB. x(a: Integer); x(a: Float); x(a,b : Integer); etc
Arrays: wird es in der neuen Engine geben
Class properties: wird es in der neuen Engine geben
Overloading methods: wird es in der neuen Engine geben (funktioniert bereits)

Zitat von EugenB:
Wie füge ich Funktionen hinzu, auch wenn ich den UnitName nicht weiß?
Delphi-Quellcode:
procedure TForm1.ParserOnAddCustomFunctions(Sender: TObject; UnitName: string);
begin
   if(UnitName='myprogram')then
   begin
      TSygScript_Parser(Sender).AddFunction(@MyWriteLn, 'procedure WriteLn(s: string); register;');
   end;
end;
Wenn ich das ohne UnitName='my...' mache bekomme ich nen Fehler das WriteLn schon existiert, gibt es vllt ne Funktion zum zu gucken ob diese Funktion schon existiert? oder wie löst man es am besten.
Die "AddFuntion" - Method ist noch von ganz früher, daher wollte diese nicht mehr verwendet werden. Am besten, du erstellst eine eigene Unit, die dann per Uses eingebunden wird.

Zitat von EugenB:
Ich würde vorschlagen das du die Scipt Engine auf einen SVN Server packst, dann könnte man immer nen aktuellen Code bekommen und man könnte leichter Patches erstellen
Die neue Version werd ich wahrscheinlich in ein SVN Packen, das ist jedoch jetzt noch zu früh

Zitat von mschnell:
Hast Du Deinen Bytecode komplett neu erfunden, oder hast Du eine Vorlage benutzt ?

Gibt es eine Beschreibung für den Bytecode ?
Der ByteCode ist von mir frei erfunden und hat auch leider keine Beschreibung. Jedoch hab ich das für die neue Version besser geplant und umgesetzt - der ByteCode wird dann besser zu verstehen sein.

Zitat von mschnell:
(Ich möchte u.U,. den Bytecode-Interpreter in C implementieren, um auf einem Prozessor, für den es keinen Object-Pascal-Compiler gibt, Delphi-Code laufen zu lassen. )
Auch wenn ich das sehr interessant finde würd ich im Moment sagen: bitte warte, bis ich die neue Version veröffentlicht habe, da hat sich alles geändert und den Aufwand wäre umsonst, wenn du umsteigen wollen würdest (was ich dir bereits jetzt für später empfehlen würde)

@Geri:
Wenn das Problem noch aktuell ist, will ich dir noch schnell mal ne grobe Anleitung schreiben:
  • Nimm die Deklaration deiner Klassen (der Teil, der in Delphi im Interface-Teil steht) und kopier ihn in die Zwischenablage
  • Im Download-Paket gibt es im Ordner "main program\bin" eine vorkompilierte Exe, die einen Exporter zur Verfügung stellt. Einfach öffnen
  • Dort erstellst du einen neue Unit und setzt den Unit-Namen auf irgendwas (also "unit [der Name]; begin; end;")
  • Dann fügst du Zwischenablage ein und löscht alles, was im Private oder im Protected-Teil steht - darauf hast du von der Script-Engine sowieso keinen Zugriff
  • Ersetze jeden Constructor durch eine Funktion, die als Return-Wert die entsprechende Klasse hat ("function Create: TKlasse")
  • Lösche den destructor aus dem Script-Quelltext
  • Passe gegebenfalls den Quelltext an, so dass er sich kompilieren lässt
  • Gehe auf "File" - "Open" und öffne die Datei "FormatDelphiExportFunction.scs"
  • Wechle wieder zurück auf deine gerade bearbeitet Unit und wähle unter "Project" - "Export to Delphi Unit"
  • Beantworte die Frage mit ja
  • Kopiere den kompletten Quelltext, der in dem neuem Tab erstellt wurde und kopiere ihn in die Zwischenablage
  • Erstelle in deinem Delphi-Projekt eine neue Unit füge den Quelltext aus der Zwischenablage ein
  • Passe die Unit an, bis sie sich kompilieren lässt - FERTIG

Nun solltest du die Klassen in deinem Script verwenden können (uses-Einbindung nicht vergessen)

Am besten schaust du dir nochmal die Beispiele an, die mit beim Download dabei sind

Viele Grüße
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
  Mit Zitat antworten Zitat