Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   RUTIS Engine v2 (https://www.delphipraxis.net/160542-rutis-engine-v2.html)

olee 18. Mai 2011 16:11


RUTIS Engine v2
 
Liste der Anhänge anzeigen (Anzahl: 2)
Hi,

Ich möchte euch nun endlich mein neues-altes Projekt vorstellen.
==> RUTIS v2 (Version 2 - obwohls eigentlich Version 3 ist :shock:)

Dabei handelt es sich um eine fast komplett neu geschriebene Version meiner alten RUTIS Engine (RunTime-Script - Engine).

Weitere Informationen folgen im Laufe der Zeit.
  • Unterstützt die wichtigsten Delphi-Funktionen bis auf wenige Ausnahmen
  • Äußerst effiziente IDE mit integrierten Debugger welcher über mehrere Units hinweg debuggen kann
  • Kompilieren von Scripten zu einer ausführbaren Anwendung
  • Sehr dynamisches und einfach zu verwendendes Interface für Schnittstellenmethoden zum Hostprogramm für allerlei Features wie z.B.
    • Forms
    • OpenGl
    • Canvas
    • uvm.
  • Unterstützt das einbinden von Methoden aus Programmbibliotheken (DLLs)
  • Spezielles Konstrukt: TMyDelphiClass = external class (TParentClass)
    • Erlaubt den direkten Zugriff auf Objekte aus dem Hostprogramm
  • uvm.

Hier habt ihr erstmal was zum Testen:

rutis_setup.zip (1308 KB)

Ich empfehle den Installer zu verwenden, da dieser bei der Deinstallation auch wieder die evt. entstehenden Registry-Einträge, welche der Compiler benötigt, wieder ordnungsgemäß entfernt. Für die, die absolut dagegen sind, hier das gepackte Release: rutis_release.rar (1192 KB)

Website: AB-Soft


MFG
Björn Zeutzheim

Neutral General 18. Mai 2011 16:16

AW: RUTIS Engine v2
 
Hallo,

Es wäre ganz schön, wenn du schreiben könntest welche Features die Scriptsprache hat, oder zumindest was sich im Vergleich zu Version 1 geändert hat ;)

olee 18. Mai 2011 21:08

Features
 
Die meisten Verbesserungen fanden beim Compiler statt. Dieser läuft nun viel stabiler und kann nun auch mit komplizierteren Strukturen umgehen. Außerdem sind die generierten Fehlernachrichten viel detaillierter.
Des Weiteren wurde die intern gespeicherte Struktur des Scripts - also die Deklarationen von Variablen, Konstanten und Methoden - weitaus verbessert, was sich auch im Editor unter "Declaration Tree" nach dem Kompilieren eines Scriptes betrachten lässt.
Außerdem gibt es ein neues, sehr hilfreiches Konstrukt - genannt "external class". dies sieht z.B. wie folgt aus:
Delphi-Quellcode:
TBall = external class
private
  fOwner : TBall;
public
  x, y  : Single;
  vx, vy : Single;
end;
Der Compiler generiert daraufhin einen Datentyp TBall, welcher mit seinen Feldern exakt dem gleichen Datentyp aus dem Hostprogramm entspricht.
D.h., man kann sich über eine Schnittstelle zum Hauptprogramm einen Pointer auf ein solches Objekt beschaffen, und die darin enthalten Daten direkt manipulieren.
Dieses Feature von RUTIS findet auch umfangreiche Verwendung in der Game-Engine, welche ich zur Zeit entwickele. Dort wird RUTIS zur Steuerung der Spielmechanik verwendet, und kann durch diese external-classes direkt auf die Daten innerhalb der Engine zugreifen.

MFG

Custom 20. Mai 2011 00:19

AW: RUTIS Engine v2
 
Bitte noch Klassen, dann wird das Ding revolutionär! :shock:

olee 20. Mai 2011 13:07

AW: RUTIS Engine v2
 
So,
Ich habe mal eine Neue Version hochgeladen, die einige neue Features mit sich bringt und ein paar Bugs behebt.

Eins dieser neuen Features ist das kompilieren von Scripten in eine Exe direkt aus der IDE.
Dazu ist nun die benötigte RUTIS-RE (Runtime-Executable) als Resource an die IDE angehangen.

MFG

BUG 17. Jun 2011 22:08

AW: RUTIS Engine v2
 
Ich glaube, ich habe einen Fehler gefunden :stupid:

Delphi-Quellcode:
unit pi_crash;

interface

implementation

// siehe http://www.hjcaspar.de/hpxp/piprog.htm
function pi_newton(rounds: cardinal): double;
var
  x : double;
  cur_round: cardinal;
begin
  x := 3;

  { START VARIANTE 1 }
  for cur_round := 1 to rounds do
  begin
  // ENDE VARIANTE 1 }

  { START VARIANTE 2
  while (cur_round < rounds) do
  begin
    cur_round := cur_round + 1;
  // ENDE VARIANTE 2 }

    x:=x-sin(x)/cos(x);
  end;
  result := x;
end;

begin
    write('Pi is: '+ FloatToStr(pi_newton(5000)));
end.
In der ersten Variante gibt es das Ergebnis 32 (nicht mal annähernd Pi), Variante zwei führt zu einem netten Laufzeitfehler:
Code:
Compiling program...
Successfully compiled program
Runtime Error: (PI_CRASH:20) Address Error (Address ID = 31)

olee 18. Jun 2011 21:06

AW: RUTIS Engine v2
 
Also ich muss sagen... das war mal ein peinlicher Fehler...
Und noch viel verwunderlicher, dass der mir bisher nicht aufgefallen ist.
Das Problem lag an der Zuweisung
Delphi-Quellcode:
x := 3;
bei welcher mein Compiler einen kleinen, wenn auch entscheidenden Fehler gemacht hat.
Dies war der alte, fehlerhafte Code des Compilers:
Delphi-Quellcode:
            intDouble :
            Begin
              FactorType := Decl_Double;
              ScriptCompiler.Gen4Float(StrToInt(CpText));
            End;
Und so sollte es eigentlich aussehen:
Delphi-Quellcode:
            intDouble :
            Begin
              FactorType := Decl_Double;
              ScriptCompiler.Gen8Float(StrToInt(CpText));
            End;
Es wurde einfach statt einem Double-Wert ein Float-Wert auf den Stack gepusht, wodurch alle nachfolgenden Stackoperationen föllig ins Chaos gestürzt sind :shock:

Wie dem auch sei: Eine neue und (hoffentlich) Fehlerfreie Version wurde hochgeladen!

MFG
Björn Zeutzheim

blackfin 18. Jun 2011 21:13

AW: RUTIS Engine v2
 
Ich sehe diese Scripting-Engine heute zum ersten Mal mit Erstaunen.
Sehr geiles Teil! Leider fehlt völlig eine Doku / Wiki der Funktionen dazu. Das ist sehr schade, denn dann würde die Engine wohl von vielen Delphianern sehr geschätzt werden :-)

olee 18. Jun 2011 21:41

AW: RUTIS Engine v2
 
Nun eine Dokumentation dürfte vorerst nicht nötig sein, solange RUTIS nicht Open-Source wird.
Wenn aber jemand daran Interessiert wäre, könnte ich das auch gegebenenfalls ändern.

Für die Verwendung des Editors an sich sollte eine Hilfe eigentlich nicht notwendig sein, da die Syntax ja bekannt ist und für die externen Methoden gibts im Editor einen Browser mit Erklärungen zu den meisten Funktionen.

MFG
Björn Zeutzheim

olee 28. Dez 2011 00:22

AW: RUTIS Engine v2
 
That wouldn't be a problem (probably).

You would need to create a little interface through some external methods like RUTIS_Ext_Forms.pas is an interface to part of the Delphi VCL.
If you are interested, I could write a little demo.
But I have to admit that I'm not that good with Databases using Delphi.

I will try to think of an example.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:28 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