Ich eine Scriptsprache entwickelt, die eine Teilmenge vom ObjectPascal implementiert. Das besondere ist die nahtlose Integration in Delphi Programme, denn die Units werden beim Laden zu Maschinencode compiliert und es wird daher keine virtuelle Maschine benötigt. Die Sicherheit ist auch gewährleistet, denn der Programmcode wird nur temporär erzeugt und niemals abgespeichert oder geladen. Das heißt, daß Units immer im Quelltext weitergegeben werden müssen, aber für Mods ist das durchaus förderlich. Da ganz normaler Code erzeugt wird, sind die Klassen faktisch austauschbar.
Die erzeugten Klassen sind kompatibel mit Delphi 5-7 und daher kann von Delphi Klassen geerbt werden.
Es werden folgende Typen unterstützt: boolean, integer, shortstring, single, records,arrays, Aufzählungstypen, Klassen und Klassenreferenzen (class of...).
Es gibt normale Funktionen, Methoden, Klassenmethoden, (virtuelle) Konstruktoren, Destruktoren, virtuelle und message Methoden. Der Type string entspricht dem Delphi Type shortstring. Die (momentan) einzige Aufrufskonvention ist register. Der Basistype für alle Objekte ist nicht TObject sondern TPersistent. Alle generierten Klassen werden automatisch beim Streaming System registriert. Variablen, die im published Bereich deklariert wurden, werden als Properties veröffentlicht.
In Unitnamen werden "." akzeptiert. Getestet ist das ganze bislang nur mit Delphi 6 PE.
Hier ist mal ein Beispiel:
Code:
unit Test;
interface
type
TTestObject=class
public
function Test(num:Integer):Integer;virtual;
end;
implementation
function TTestObject.Test(num:Integer):Integer;
var
i:integer;
begin
result:=0;
for i:=1to num do
result:=result+i;
end;
end.
Im Delphi Program wird die Klasse folgendermaßen angesprochen:
Code:
TTestObject=class(TPersistent)
public
function Test(num:Integer):Integer;virtual;abstract;
Da das Ergebnis(500000500000) den Integer Bereich überschreitet kommt natürlich Integer(500000500000)=1784293664 raus. Die Schleife soll nur zeigen, daß die Ausführungsgeschwindigkeit durchaus schnell ist.
FindClass ist die Standard Funktion von Delphi um Klassen anhand ihres Names zu suchen.
Es gibt jetzt zusätzlich noch resource Abschnitt, in denen Verweise auf externe Objekte definiert werden können, ohne das detaillierte Informationen über diese Klassen bekannt sein müßten. Im Script sind das nur Konstanten des primitiven Types "Resource", die an andere Funktionen weitergegeben werden können. Die interne Klasse muß über FindClass auffindbar sein. Das sieht dann z.B. so aus:
Der Vorteil ist, daß diese die zugehörigen Daten automatisch geladen und freigegeben werden, wenn die unit geladen bzw. entladen wird.
Die generierten Klassen haben alle eine erweiterte VMT mit einem zusätzlichen Zeiger auf die Unit damit die Anzahl der Instanzen die einer Klasse dieser Unit jederzeit bekannt ist.
Von Zeit zur Zeit kann man alle Units die nicht von anderen Units benötigt werden und keine Instanzen mehr haben, automatisch suchen und zusammen mit den verwendeten Resourcen freigeben lassen.
Ich würde von einer Benutzung abraten, da der Quelltext aus heutiger Sicht ziemlich schlecht strukturiert ist. Eine Skriptsprache sollte meiner Meinung nach zudem nicht unbedingt versuchen die normalen Programmiersprache nachzubilden, sondern die eigenen Vorteile ausnutzen. Geschwindigkeit ist beim Skripten eher von untergeordneter Bedeutung. Dafür sind eher dynamische Typisierung, die Möglichkeit Skriptfunktionen anzuhalten und ähnliches wichtiger. Es ist daher nicht nötig und auch nicht immer sinnvoll auf Maschinencode zu kompilieren. Auch wenn es interessant ist, binärkompatibele Klassen zur Laufzeit zu erzeugen, würde ich es heute als Versuch in die falsche Richtung ansehen. Man möchte unter Umständen gar keine so starke Bindung zwischen Skript und Hauptprogramm haben.
Registriert: So Mai 11, 2003 10:36 Beiträge: 285 Wohnort: Oldenburg
Programmiersprache: Object Pascal
Im Moment kann ich mir es gar nicht vorstellen die das ablaufen könnte:
Ich habe ein Spiel das Levels laden kann soweit so gut, aber jetzt müsste das Spiel die Scripte ausführen..
naja es war auch nur eine Idee, ob ich es genutzt hätte oder nicht... mal dahingestellt....
_________________ MFG<br> Michael Springwald, <br>
Bitte nur Links in Deutsch, nutze überwiegend Lazarus
hört sich für mich auch sehr interessant an, da ich gerade an einer starken Kopplung zwischen script und code interessiert bin (u.a. wegen hoher Performance beim zugriff auf Eigenschaften von Objekten, wo lua gerade recht lahm ist).
Ist nicht FPC kompatibel da es an das exakte format des Delphi VMTs und einiger lowlevelroutinen im bereich RTTI gebunden ist, die es so unter FPC nicht gibt.
Registriert: So Mai 11, 2003 10:36 Beiträge: 285 Wohnort: Oldenburg
Programmiersprache: Object Pascal
schade, eine Scrip Sprache währe gerade jetzt Praktisch, das Tutorial was es hier dazu gibt, kann ich nicht so nachvollziehen.
Gerade bei meinem Label währe eine Scrip Sprache vom Vorteil. Naja, mal sehen, evlt. finde ich da noch was passendes, es eilt im Moment auch noch nicht. Ich habe mich mal selbst versuch an einer eigenen Scrip Sprache, aber dort gab es einige Probleme. Darum habe ich das Projekt Abgebrochen.
_________________ MFG<br> Michael Springwald, <br>
Bitte nur Links in Deutsch, nutze überwiegend Lazarus
Am meisten wird lua verwendet, was durch den fehlenden direkten support für objekte etwas aufwändiger einzubinden ist(Es gibt afaik keine Delphilib die das erledigt). Lua ist allerdings eine sehr elegante Sprache die man auf jeden Fall einmal ausprobiert haben sollte.
Registriert: So Mai 11, 2003 10:36 Beiträge: 285 Wohnort: Oldenburg
Programmiersprache: Object Pascal
zu lua habe ich hier was gefunden:
viewtopic.php?p=57244 leider geht der erste Link nicht mehr, weil die seite geschlossen wurde.
aber der zweite geht *G*
_________________ MFG<br> Michael Springwald, <br>
Bitte nur Links in Deutsch, nutze überwiegend Lazarus
Registriert: So Mai 11, 2003 10:36 Beiträge: 285 Wohnort: Oldenburg
Programmiersprache: Object Pascal
hier habe ich glaube ich was gefunden:
http://www.pascalgamedevelopment.com/vi ... hlight=lua muss ich mir noch anschauen. könntest ja trozdem mal deine Poste.
Ein Blick auf lua kann ja nicht schaden, oder ? evlt. ist es ja was
_________________ MFG<br> Michael Springwald, <br>
Bitte nur Links in Deutsch, nutze überwiegend Lazarus
Registriert: So Mai 11, 2003 10:36 Beiträge: 285 Wohnort: Oldenburg
Programmiersprache: Object Pascal
Die Beispiele sind von Lua gar nicht mal so schlecht und sie sind gleich für Lazarus *Freu* das ist leider selten. Selbst hier im Forum wird es zu selten genutzt anscheind...
_________________ MFG<br> Michael Springwald, <br>
Bitte nur Links in Deutsch, nutze überwiegend Lazarus
Mitglieder in diesem Forum: 0 Mitglieder und 5 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.