AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte RUTIS Engine (Scripting) [WinCE spinnt]
Thema durchsuchen
Ansicht
Themen-Optionen

RUTIS Engine (Scripting) [WinCE spinnt]

Ein Thema von olee · begonnen am 14. Jun 2009 · letzter Beitrag vom 20. Aug 2010
Antwort Antwort
Seite 5 von 11   « Erste     345 67     Letzte »    
Benutzerbild von olee
olee
Registriert seit: 16. Feb 2008
DIES IST DIE ALTE VERSION VON RUTIS
Die neue Version gibts hier: RUTIS v2
----------------------------------------------

Hi,
Hier möchte ich euch eines meiner größten Projekte vorstellen.

RUTIS

Die "RunTime Script Engine" (RUTIS Engine) dient dazu, Scripte zur Laufzeit zu compilieren und auszuführen, um z.B. Die Funktionen von Programmen zu verändern, ohne diese neu zu compilieren.
Durch eine sehr hohe Geschwindigkeit lassen sich sogar ganze Programme allein mit einem solchen Script erstellen.
Die RUTIS Engine kann mehrere Compiler unterstützen wobei der Standardcompiler mit einem Delphi/Pascal Syntax arbeitet.

- - - HINWEIS: INFOS ETWAS VERALTET - WERDEN BEI GELEGENHEIT KORRIGIERT - - -
RUTIS bietet eine große Funktionsvielfalt:
  • Globale sowie lokale Variablen
  • Verschachtelbare Funktionen und Methoden, die auch rekursive Algorithmen lösen können.
  • Beliebige Deklaration von Records
  • Unterstützung von Pointern und Arrays
  • Einfache Verknüpfung von Hostprogramm und Script mittels speziellen, beliebig erstellbaren Verbindungsfunktionen.
  • NEU: Methode-Variablen (bisher jedoch nur parameterlose Prozeduren)
  • NEU: Formular Interface, wodurch sich ganze Anwendungen mit GUI erstellen lassen!
  • NEU: Aufruf von DLL-Funktionen über die deklaration im Script als 'external' ! (Hier ein DANKE an 'Astat')
  • uvm.
Das sollte vorerst an Informationen reichen.

RUTIS PROJEKTSEITE (Downloads, Infos usw.)
SVN-Portal: http://www.xp-dev.com/sc/77518


INFO : RUTIS unterliegt einer Creative Commons BY-NC-SA (DE) Lizenz
INFO 2: Die nachfolgenden Links könnten des öfteren nicht funktionieren, da sie nach jedem neuen Upload ungültig werden. Auf der Projektseite dagegen sollten
die Downloadlinks immer funktionieren. Ich entschuldige mich hier auch für eine solche Faulheit, die Links nur selten zu aktualisieren ^^
RUTIS Setup 1,04 MB RUTIS (zip) 1,28 MB RUTIS (Source) 2,08 MB


MFG
Codename: Performancepumpe

Geändert von olee (20. Mai 2011 um 04:50 Uhr)
 
Benutzerbild von olee
olee

 
Turbo Delphi für Win32
 
#41
  Alt 29. Dez 2009, 15:11
Also ein XML Parser läss sich natürlich problemlos als externe Funktion in RUTIS integrieren.

Bei der Gelegenhet fällt mir ein, ich habe mal eine Streams-Unit geschrieben, damit man in RUTIS Streams nutzen kann.

Jedoch hatte ich die nur in nem alten RUTIS für PocketPC verwendet... die muss ich mal ausgraben und wieder einbauen ^^

MFG
Björn Zeutzheim
  Mit Zitat antworten Zitat
Benutzerbild von olee
olee

 
Turbo Delphi für Win32
 
#42
  Alt 29. Dez 2009, 15:27
So es hat ein Upload gegeben
(deswegen auch der Doppelpost)

Es gab ein paar Bugfixes und ein paar neue Scripte:
-"Gravity Simulation.rutis" ==> Nettes Formular + klasse OpenGl Animation
-"GL_Farbspiel.rutis" ==> momentan mein bestes OpenGL-RUTIS Script - eine genialer openGl Effekt wird dargestellt

Diese beiden Scripte und ein paar weitere gibt es nun auch schon fertig als RUTIS EXE kompilliert im ersten Post als
Sammlung zu finden, für diejenigen, die RUTIS nur ansehen möchten und nicht erst Scripte im EDITOR öffnen und kompillieren möchten.

Dabei muss ich dringend eine Besondere Anmerkung zur RUTIS EXE machen:

Die RUTIS EXE ist eine selbstreproduzierende standalone Anwendung!

Soll heißen: Selbst wenn in die RUTIS EXE schon ein Script reinkompilliert ist, kann man, in dem man ein anderes Script mit der RUTIS EXE öffnet (draufzieht), dieses ausführen lassen und übergeht so das intern vorhandene Script der RUTIS EXE.
Das war der Punkt "standalone".

Zum selbstreproduzierend:
Wenn die RUTIS EXE kein Script enthält (wie z.B. die RUTIS-EXE, die auch in den Downloads dabei ist) und man mit dieser ein Script öffnet,
sowie wenn man eine RUTIS-EXE mit schon enthaltenem Script mit dem Startparameter "-install" + den Dateinamen eines Scriptes dahnter aufruft, so nimmt die RUTIS EXE dieses Script und "verleibt es sich ein", also es erstellt eine neue RUTIS EXE aus diesem Script *Jam-Jam-lecker-Scriptfraß*


EDIT: Hat eigentlich bisher jemand mal die DLL Funktionen bemerkt?
Men kann ja nun Funktionen in RUTIS als external deklarieren und auch aufrufen (ihr solltet aber noch keine DLL Funktionen testen, die mit Strings arbeiten, das habe ich selbst nochnicht getestet)

MFG
Björn Zeutzheim
  Mit Zitat antworten Zitat
Benutzerbild von olee
olee

 
Turbo Delphi für Win32
 
#43
  Alt 30. Dez 2009, 15:03
So ich habe wieder ein kleines UPDATe, da mir ein schlimmer Bug in den Vorangegangenen Versionen aufgefallen ist.

Natürlich gab es auch noch andere Anpassungen.

So funktioniert nun endlich die Verwendung von Srings und vor allem der Vergleich von Strings ('Hallo' = 'Hallo') und
der Typ Char wird nun auch richtig verwendet, sodass bei "write 'A';" auch wirklich ein "A" ausgegeben wir und nicht dessen ANSI-Code

Ich habe das Update wie gewohnt im ersten Post hochgeladen.

Bei der Gelegenheit habe ich hier auch mal ein paar Bilder angehänt.
Eines davon, sowie wie die angehängte RUTIS-EXE sind von meinem bisher "coolsten" Script (GL_Farbspiel.rutis).
Die Source dieses Script befindet sich im RUTIS-Download im Post#1.

Aber testet es selbst.
Ich freue mich auch eure Meinung.

MFG
Miniaturansicht angehängter Grafiken
gl_farbspiel.rutis_660.jpg   formular_test_242.jpg  
Angehängte Dateien
Dateityp: zip gl_farbspiel_144.zip (493,1 KB, 9x aufgerufen)
Björn Zeutzheim
  Mit Zitat antworten Zitat
hoika

 
Delphi 10.4 Sydney
 
#44
  Alt 30. Dez 2009, 15:22
Hallo,

melde dich mal wieder, wenn OOP klappt

Noch ein kleiner Tip.
Beim Webseiten-Bauen mal die Rechtschreibprüfung benutzen ... *fg*

Und selbsvertständlich auch die aktuellsten Downloads unserer

Das brennt direkt ins Auge.


selbstverständlich


Heiko
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von olee
olee

 
Turbo Delphi für Win32
 
#45
  Alt 30. Dez 2009, 15:42
[OT]
@hoika: Ich musste jetzt erstmal rausfinden, was du damit meintest ...
Ich habs mal schnell behoben
Aber die Website ist auch ne weile nicht gewartet worden...
Das kommt später wieder
[/OT]

@hoika: Wie fandest du denn das Programm an sich und speziell das angehängte Script
Björn Zeutzheim
  Mit Zitat antworten Zitat
hoika

 
Delphi 10.4 Sydney
 
#46
  Alt 30. Dez 2009, 19:14
Hallo,#

wir haben hier ne App mit ~ 1 Mio. Zeilen Code,
manchmal überlege ich, ob ich eine Scripting-Engine einbaue.
Bisher war Pascal-Script der Favourite.

Irgendwelcher "Schnick-Schnack" wie OpenGL spielt bei uns keine Rolle,
das Teil muss laufen und fertsch


Was mich bei dir beunruhigt, sind solche Sätze wie

neue (Beta)-Version
"Funktion XY funktioniert wieder"

Das kann man keinem Kunden anbieten
"Ich habe gerade eine neue Version für Sie,
Funktion A ist jetzt 30% schneller, dafür klappt leider Funktion B nicht mehr"

Wie hat mal jemand schön gesagt:
Eine langsame Funktion Y ist besser als eine
Funktion X, die zwar schneller ist, aber ab und zu falsche Ergebnisse liefert.


Dazu muss ich nat. sagen
1. Nichts gegen deine Arbeit, Hochachtung !!! (Ich habe Compilerbau gehasst )
2. Keine Zeit, mich um solche Sache zu kümmern


Was hälst du davon, DUnit zu benutzen,
um bei Code-Änderungen keine "Fehler" einzubauen

*Tutorial raussuchÜ aber erst im nächsten Jahr



He4iko
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von olee
olee

 
Turbo Delphi für Win32
 
#47
  Alt 2. Jan 2010, 14:46
So,

Es sieh sehr gut aus mit RUTIS.

Nachdem es jetzt in einem vorerst abgeschlossenem Zustand ist, habe ich vor, das ganze in ein Projekt zu integrieren.

Es soll sich dabei um eine 3D-Game-Engine handeln, die der Nachfolger meiner schon nicht schlechten LOZ-Engine werden soll.

Dabei wird eben RUTIS ein wichtiger Bestandteil dieser Engine sein, und man soll fast vollständigen Zuriff auf die Objekte
der Engine (Player usw.) aus den Scripten heraus haben.

Des Weiteren arbeite ich noch daran, Records auszubauen und die Mehode zur Analyse von Ausdrücken ("a := 1+2; <- Der Teil hinter ":=") zu verbessern.

Vr allem durch das neue Projekt haben sich ein paar tolle Änderungen in RUTIS eingeschlichen.

Zunächst einmal werden nun Record-Felder genau so ausgerichtet, wie es in Delphi geschieht.
D.h. ein Record aus Delphi und RUTIS sind 100% zuweisungskompatibel. Über eien Trick lassen sich sogar Klassen mit Records gleichsetzen
Außerdem kann schon von Records einen Nachfahren erstellen.

Bsp:

Delphi-Quellcode:
type
  _TEntity = record
    // VMT ist der erste eintrag in einer Delphi-Klasse. Dort werden die virtuellen methoden und klassentyp usw. abgespeichert
    VMT : Pointer;
    Location : TVector3f;
    Rotation : TVector3f;
    Velocity : TVector3f;
  end;
  TEntity = ^_TEntity;

  _TCamera = record (_TEntity)
    FieldOfView : Single;
  end;
  TCamera = ^_TCamera;
Wenn man nun in Delphi die entsprechenden Klassendeklarationen zu TEntity und TCamera hat (ohne den VMT.Eintrag natürlich ),
so kann man, wenn man sich den Pointer der Klasse aus Delphi in RUTIS reinholt, die Einträge der Klasse direkt Verwenden.
Da das alles schon so ut funktioniert, werde ich wohl bald damit anfangen OOP (zumindest in einfachster Form) zu implementieren.

Einziges Manko ist noch, das Strings aus RUTIS und Delphi nicht direkt kompatibel sind, da Strings in RUTIS als
PAnsiString und nicht als AnsiString gespeichert werden (aus Gründen der Speicherverwaltung).
Ich werde wohl noch einen Typ DAnsiString / STrng (Delphi-String) einführen, damit ich einen kompatiblen Typ für Delphi besitze.

PS: Die genannten Änderungen an Records befinden sich noch nicht im Download, da ich damit noch nicht fertig bin.
Wenn jmd jedoch Interesse hat, das zu testen, kann ich es jetzt schon hochladen.


MFG
Björn Zeutzheim
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

 
Delphi 12 Athens
 
#48
  Alt 2. Jan 2010, 14:59
Ich würde dieses eventuell nur für Publisched-Properties implementieren, also über die RTTI gehn und die Möglichkeiten der Unit TypInfo verwenden,
anstatt es so Hartzukoden ( ) und darauf zu hoffen, daß keiner Vergißt, daß seine Klasse eine abgeleitete Klasse ist oder daß dieses in Delphi sich nicht mal ändert.

Also bei der Variante Records auf Objekte zu mappen.
  Mit Zitat antworten Zitat
Benutzerbild von olee
olee

 
Turbo Delphi für Win32
 
#49
  Alt 2. Jan 2010, 15:09
1)
Ich habe Property-Funktionen schon drin
Man kann über eine Funktion (der name fällt mir grad nicht ein aber die kann jeder ja in der Funktionsliste im Editor nachkucken ) Properties von Klassen ändern.

So hat das ganze auch in meinem alten LOZ funktioniert. Nur ist das zu langsam für ein Spiel.

2)
Wie ich galub ich gesagt habe, ist dieser Trick momentan nur eine Notlösung und soll auch nur zeigen, was mit RUTIS möglich ist.

Ich habe ja schon darauf hingewiesen, das ich vermutlich Klassen einbauen werde, die zumindest in ihren Eigenschaften
Delphi-Kompatibel sind (also keine Aufrufe von Delphi-Internen Klassenfunktionen aus RUTIS heraus).

MFG
Björn Zeutzheim
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

 
Delphi 12 Athens
 
#50
  Alt 2. Jan 2010, 15:34
Wenn es nur um die Geschindigkeit geht ... dann könnte man es nur einmal beim Aufruf/Start des Scriptes so umwandeln, daß dann beim Ausführen des Scriptes direkt auf die das Feld zugegriffen wird?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 5 von 11   « Erste     345 67     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 19:42 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