Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Do Mär 28, 2024 12:25

Foren-Übersicht » Sonstiges » Projekte
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 15 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Dynamic Pascal
BeitragVerfasst: Sa Mai 01, 2004 15:50 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
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:
  1. unit Test;
  2.  
  3. interface
  4.  
  5. type
  6.  
  7. TTestObject=class
  8. public
  9.  function Test(num:Integer):Integer;virtual;
  10. end;
  11.  
  12. implementation
  13.  
  14. function TTestObject.Test(num:Integer):Integer;
  15. var
  16.  i:integer;
  17. begin
  18. result:=0;
  19. for i:=1 to num do
  20.  result:=result+i;
  21. end;
  22.  
  23. end.


Im Delphi Program wird die Klasse folgendermaßen angesprochen:

Code:
  1. TTestObject=class(TPersistent)
  2. public
  3.   function Test(num:Integer):Integer;virtual;abstract;
  4. end;


Code:
  1. var
  2.  obj:TTestObject;
  3. begin
  4. CompileUnit(memo1.Text);
  5. obj:=TTestObject(FindClass('Test.TTestObject').Create);
  6. ShowMessage(inttostr(obj.Test(1000000)));
  7. obj.Free;
  8. end;


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.


Dateianhänge:
DynPascal.zip [31.88 KiB]
582-mal heruntergeladen
Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jun 04, 2004 13:03 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
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:

Code:
  1. resource
  2.  lensflare:TTexture2D='textures\flares\flare1.jpg';


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.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Dez 02, 2007 16:16 
Offline
DGL Member
Benutzeravatar

Registriert: So Mai 11, 2003 10:36
Beiträge: 285
Wohnort: Oldenburg
Programmiersprache: Object Pascal
sag mal würde deine Klasse auch unter Lazarus unter Linux laufen ?

sowas hatte ich auch schon mal vor... bin aber nicht weit gekommen... das Tutorial(die zwei) kenne ich schon....

Deine Klasse klinkt recht Intressant evlt. könnte ich die in 2D spielen einsetzten oder so..

_________________
MFG<br> Michael Springwald, <br>
Bitte nur Links in Deutsch, nutze überwiegend Lazarus


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Dez 02, 2007 22:25 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
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.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Dez 02, 2007 22:27 
Offline
DGL Member
Benutzeravatar

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Dez 02, 2007 22:53 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7804
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
@Lars: Soll die Diskussion in einen passenden Meinungsthread verlegt werden, oder ist für dich "Dynamic Pascal" abgehakt?

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Dez 03, 2007 21:30 
Offline
DGL Member

Registriert: Di Jun 06, 2006 09:59
Beiträge: 474
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).

_________________
Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jan 20, 2008 14:49 
Offline
DGL Member
Benutzeravatar

Registriert: So Mai 11, 2003 10:36
Beiträge: 285
Wohnort: Oldenburg
Programmiersprache: Object Pascal
Schade das dieses Projekt nicht weiter Entwickelt wird, ich hätte es gerne für meine GUI verwendet unter Lazarus so fern das möglich ist....

_________________
MFG<br> Michael Springwald, <br>
Bitte nur Links in Deutsch, nutze überwiegend Lazarus


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jan 21, 2008 23:27 
Offline
DGL Member

Registriert: Di Jun 06, 2006 09:59
Beiträge: 474
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.

_________________
Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jan 22, 2008 14:28 
Offline
DGL Member
Benutzeravatar

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jan 22, 2008 19:41 
Offline
DGL Member

Registriert: Di Jun 06, 2006 09:59
Beiträge: 474
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.

_________________
Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jan 22, 2008 19:53 
Offline
DGL Member
Benutzeravatar

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jan 22, 2008 19:54 
Offline
DGL Member

Registriert: Di Jun 06, 2006 09:59
Beiträge: 474
Es gibt header für Delphi (zumindest für Lua 5.0), falls du keine Seite findest kann ich sie hier posten

_________________
Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jan 22, 2008 19:59 
Offline
DGL Member
Benutzeravatar

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jan 22, 2008 20:10 
Offline
DGL Member
Benutzeravatar

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


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 15 Beiträge ] 
Foren-Übersicht » Sonstiges » Projekte


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 26 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.

Suche nach:
Gehe zu:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.089s | 18 Queries | GZIP : On ]