ZFX
ZFX Neu
Home
Community
Neueste Posts
Chat
FAQ
IOTW
Tutorials
Bücher
zfxCON
ZFXCE
Mathlib
ASSIMP
NES
Wir über uns
Impressum
Regeln
Suchen
Mitgliederliste
Membername:
Passwort:
Besucher:
4434824
Jetzt (Chat):
6 (0)
Mitglieder:
5239
Themen:
24223
Nachrichten:
234554
Neuestes Mitglied:
-insane-

ZFX
Coding-Foren
Algorithmen und Datenstrukturen
Skriptsprache - wie?
Normal
AutorThema
PuMi Online ist nicht jeder!
ZFX'ler


Registriert seit:
02.04.2006

Berlin
266670062
Skriptsprache - wie?Nach oben.
Hallo Leute,

ich hatte jetzt wirklich letztens die fatale Idee eine eigene Skriptsprache nach Stilrichtung von C++ und C# zu entwickeln. Natürlich will ich mir erst einmal Sonderausstattungen ersparen.

Wie ich die Sprache designen will und was ich für relativ wichtig halte - das ist alles schon fertig. Jetzt frage ich mich jedoch, wie ich das Geschwindigkeitstechnik in ein akzeptables Maß bringe.

Die erste absolute lahmgsame Variante ist das Interprätieren. Als Beispiel:

int Variable = 5;

1. Integer-Variable im Stack erstellen
2. Wert 5 der Variable zuweisen
3. Anweisungsblock fertig

Das würde jetzt hier 4x bedeuten einen String aus einer Datei zu lesen, zu interprätieren und dann zu handeln. Das das langsam ist, weiß bestimmt auch jeder.

Dann kam mir die Idee den Code vorher in eine Byte-Sprache umzuwanden. Sprich, die obigen Anweisungen werden Straps vom Compiler in Binärcode umgewandelt und dann ggf. vom Benutzer ausgeführt. Für das obige Beispiel zum Beispiel folgender Bytecode in Zahlen:

18Variable34(int-Binärcode5

Funktion 1 = Variable erzeugen. Es liest nun folgend die Anzahl der Zeichen des Variablennamens aus und liest dann entsprechende Anzahl ein. Fragt dann automatisch nach dem Typ (3) und erkennt, dass das ein Integer ist. Dann wird Funktion 4 aifgerufen (Wertzuweisung) und hier steht dann binär die Zahl 5 eines Integers. Also die Zahlen rufen jeweils die Funktion n eines Funktionsarrays auf.

Ich hoffe das verstehen alle wie das gemeint ist.

Meine Frage ist jetzt nun, liege ich auf dem Richtigen weg, liege ich auf dem Falschen oder ist er im Ansatz korrekt? Wie sieht es dann mit Funktionen aus, die der Benutzer selbst schreibt - einen eigenen Anweisungsstack für jede Funktion erstellen?

Bitte dringend um Rat und Tipp und bin für Erfahrungen sehr dankbar!
19.12.2008, 21:49:39 Uhr
Art Train Developer
klickverbot Offline
ZFX'ler


Registriert seit:
24.08.2008

Österreich
Re: Skriptsprache - wie?Nach oben.
Effizienz sollte zu Beginn wirklich nicht dein Problem sein, die größte Herausforderung dürfte eher das Parsen der Quellen sein.

Ich würde dir empfehlen, dich erst einmal in die Materie einzulesen und dich mit Konzepten wie Abstract Syntax Tree usw. vertraut zu machen. Das sollte einige deiner Fragen beantworten.

Edith sagt, dass viele Interpreter zur Laufzeit (linearen) Bytecode erzeugen, den sie in einer VM ausführen.

Nach Lektüre der nachfolgenden Posts will Edith noch loswerden, dass sie dir nicht generell von dem Vorhaben abraten würde. Auf jeden Fall solltest du dir aber zuerst Informationen zu dem Thema beschaffen, sonst ist das Projekt wirklich zum Scheitern verurteilt...

4 Mal gendert, zuletzt am 20.12.2008, 20:02:39 Uhr von klickverbot.
19.12.2008, 22:25:48 Uhr
Aramis Offline
ZFX'ler


Registriert seit:
14.03.2007

Baden-Württemberg
406712329
Re: Skriptsprache - wie?Nach oben.
Ich traue mich kaum es (schon wieder) zu sagen, aber was spricht gegen Lua oder Angelscript? Mit letzterem hab ich keine Erfahrungen, aber Schrompf bricht bei Erwähnung des Namens stets reproduzierbar in Lobeshymnen aus. Lua, als Platzhirsch unter den Skriptsprachen, bietet alles was man braucht, ist wirklich flott und eigentlich auch nicht schwer zum Laufen zu bringen.

Auch die CryEngine nutzt Lua. Dabei hätte CryTek sicherlich die Manpower eine eigene Skriptsprache (wie in der UnrealEngine) aufzubauen. Die Frage ist, wieso haben sie es wohl nicht getan?

Gruß,
Alex
19.12.2008, 23:06:51 Uhr
Lord Delvin Offline
ZFX'ler


Registriert seit:
05.07.2003

Baden-Württemberg
166781460
Re: Skriptsprache - wie?Nach oben.
Ich muss hier auch mal Werbung machen, aber auch aus nem andern Grund:

Wenn du wirklich immernoch deine eigene Sprache schreiben willst, dann nimm dir mal ne Woche zeit und lies dir den kompletten lua source code durch. Dann hast du vermutlich ne idee, was du alles machen musst, wie mans vielleicht gut macht und wie mans schnell macht.

Letzlich glaub ich aber, dass du dir das zu einfach vorstellst, deswegen schau mal über Artikel zu Maschinenmodellen, Stackmaschinen, Registermaschinen, Compilerbau im allgemeinen.(Is nich bös gemeint, aber dein Problem ist mir eher unklar, weil man letztlich eigneltich nichts anderes machen würde, als entweder den variablen namen und die konstante aus dem bytecode auf den stack zu legen oder halt einfach die konstante aus dem bytecode in ein freies register zu kopieren)

Und schau mal in die Geschichte von C/C++.
Das ist höllisch alt und schau dir an, wie wenig features sich über die Zeit entwickelt haben im Gegensatz zu einfachen Sprachen wie Java oder Python(auch wenn ich beide nicht empfehlen kann)

Lua ist vermutlich für genau das gebaut worden, was du mit deiner Skriptsprache machen willst und du hast es in drei Tagen gelernt und in zwei Wochen in deine Engine integriert

Mehr Zeit willst du vermutlich auch nicht investieren, weil du sonst dein eigentliches Ziel total aus den Augen verlierst...zumindest gings mir damals so, als ich mit geetik angefangen hab und jetzt is mein Projekt halt tot...hab einfach keine Lust mehr

Gruß
LordD
19.12.2008, 23:57:07 Uhr
unique75 Offline
ZFX'ler


Registriert seit:
24.07.2004

Baden-Württemberg
Re: Skriptsprache - wie?Nach oben.
Also ich traue es mich auch nicht (schon wieder) zu sagen, aber Aramis hat Recht

Das was du vor hast deckt ein ganzes Studium der Informatik ab, nämlich Compilerbau. Da gehts um Grammatiken, Chomsky-Typen und jede Menge Beweise und Theoreme, die nur eins zum Ziel haben. Es wird genau definiert, wie eine Sprache aufgebaut sein muss, damit sie überhaupt per Algorithmus "parsbar" ist. Übrigens wird man sowas auch in jedem guten Interpreter finden. Codegenerierung und semantische Probleme hast du damit aber noch längst nicht erschlagen

Und wieder einmal verweise ich auf Sprachen wie C#, Java, Smalltalk. Diese können schon aufgrund ihres Sprachdesigns dynamisch Quelltext evaluieren und man nutzt dann die Vorteile der virtuellen Maschine. JIT-Compiling inclusive

Aber ok, wenn das Basisprogramm in C/C++ ist, sollte man wohl auch was passendes wie LUA verwenden. Ich selbst hab damit aber noch nie was gemacht, Asche auf mein Haupt.
20.12.2008, 00:00:36 Uhr
unique75 Offline
ZFX'ler


Registriert seit:
24.07.2004

Baden-Württemberg
Re: Skriptsprache - wie?Nach oben.
Ist Lua eigentlich ein Interpreter? Das würde mich glatt mal interessieren.

Weil ich es immer wieder amüsant finde, dass sich viele mit C/C++ einen abdängeln nur weil es so schnellen Code erzeugt. Andererseits wird die Performance dann zum Fenster hinausgepustet, weil man ne Interpreter-Script-Sprache nimmt und auch noch das umständliche Parameter-Marshaling irgendwo hat bzw. den Abgleich zur Hostsprache.

Meist sind dann diese Scriptsprachen sowieso wieder an irgendeinem Punkt nicht so wie man es braucht oder unvollständig

Bitte haut mich nicht, aber ich kann jedem nur einem Blick auf Smalltalk wärmstens empfehlen. Dort gibt es CompiledMethods in jeder Klasse, man kann sogar deren Bytecode anschauen, verändern usw. D.h. wenn man so wahnsinnig ist ne eigene Sprache zu baun, kann man sogar eigene Methoden mit dem Basis-Bytecode erzeugen und hat wieder alle Vorteile der virtuellen Maschine. Nur machen tut es in Smalltalk keiner, da die Sprache selbst schon absolut minimal und simpel ist und man diese direkt nehmen kann mit allen erdenklichen Vorteilen
Hauptargument bei Scriptsprachen ist ja oft, dass die Hostsprache selbst zu kompliziert ist
20.12.2008, 00:19:22 Uhr
Lord Delvin Offline
ZFX'ler


Registriert seit:
05.07.2003

Baden-Württemberg
166781460
Re: Skriptsprache - wie?Nach oben.
Zitat von unique75:
Ist Lua eigentlich ein Interpreter? Das würde mich glatt mal interessieren.

Weil ich es immer wieder amüsant finde, dass sich viele mit C/C++ einen abdängeln nur weil es so schnellen Code erzeugt. Andererseits wird die Performance dann zum Fenster hinausgepustet, weil man ne Interpreter-Script-Sprache nimmt und auch noch das umständliche Parameter-Marshaling irgendwo hat bzw. den Abgleich zur Hostsprache.


Ja Lua ist eine interpretierte Sprache, allerdings eine der schnellsten->Benchmarks. Ist aber auch egal, weil du dir mal anschaun musst, wie viel Zeit bei den meisten Lua/C++ ansätzen im Lua Teil verwendet wird. Das ist fast 0, weil quasi nur kurze Fragmente ausgeführt werden, die in O(1) liegen und alles was komplizierter ist machst du dann in C++ oder asm.
Es lässt dir halt die Freie wahl zwischen allen gängigen Programmiermodellen, du kannst so ziemlich effektiv arbeiten und der Overhead ist ertragbar...wenn dus geschickt machst, dann ist er sogar fast 0(also Programmierzeit; Ausführungszeit ist schwierig zu messen, aber besonders groß ist das imho nicht)

Btw. glaub ich, dass nur eine Sprache in frage kommt, bei der du gegen die VM von C++ aus linken kannst, wenn dein Restcode schon in C++ geschrieben ist, weil du sonst viel Zeit in ein Spachkonformes binding investieren musst...also zumindest, wenn du irgendwo templates hast oder sowas, dann ist mir unklar, was du da machen willst um das sinnvoll umzusetzen(abgesehen von variable einführen und den ganzen code dann auf ein nicht-template umbiegen)
Gruß
LordD
20.12.2008, 10:43:11 Uhr
unique75 Offline
ZFX'ler


Registriert seit:
24.07.2004

Baden-Württemberg
Re: Skriptsprache - wie?Nach oben.
ahhh... ok danke für die Infos Lord Delphin. Die werden ja hoffentlich den Lua-Quelltext vorab parsen und syntaktisch prüfen und dann nur den Zwischenbytecode interpretieren. So hat es damals vor Jahren AMOS Basic auf dem Amiga getan. Dann entfällt zumindest das aufwendige Quelltextparsen zur Ausführungszeit.

Mich würde mal interessieren wie hoch der Anteil an Ausführungszeit ist für das Scripten in einem Game wie Crysis oder auch Tombraider. Letzteres hat ja eher simpler agierende Charaktere. Aber das ist eben wie überall. Ohne sinnvolle Zahlen und Daten kann man auch nix sagen
20.12.2008, 11:07:20 Uhr
Lord Delvin Offline
ZFX'ler


Registriert seit:
05.07.2003

Baden-Württemberg
166781460
Re: Skriptsprache - wie?Nach oben.
Zitat von unique75:
ahhh... ok danke für die Infos Lord Delphin.

V Veflucht!!!(und gesprochen w, is aber egal)

Das mit der Ausführungszeit ist so ne Sache...also bei Black&White hat er dir ne Statistik dazu gezeigt, dass sah nach ziemlcih wenig aus, wenn ichs noch richtig im Kopf hab.
Aus meiner eigenen Erfahrung ist es so, dass ich i Lua Teil allen Gamecode hab und es macht garnichts aus. Ich hab sogar ziemlich viele VMs gleichzeitig laufen gehabt und zwischen denen synchronisiert, wenns sein musste und es ist trotzdem noch egal.

Wie das bei großen Titeln ist kann ich dir nicht sagen, aber ich denke nicht, dass es viel ausmacht, weil du ja die Performancefresser immernoch bei Grafik oder Netzwerk(MMOs, die sehr mies geschrieben sind) hast.

Der Script code ist halt wie gesagt normalereise O(1) in der Ausführungszeit und das c dazu ist typischer weise zwisch 10 und 100 gegen normalen C++ code.

Bei AI ist es denk ich auch so, dass halt die Zustandsautomaten in Lua/* geschrieben sind und sowas wie Pathfinding oder andere Suchen, die man eventuell durchführen muss halt von der Engine gemact werden und die sind dann bis zum Tod aufgebohrt.
20.12.2008, 12:30:43 Uhr
atr_23 Offline
Artwork-Berater


Registriert seit:
16.10.2002

Niedersachsen
107316684
Re: Skriptsprache - wie?Nach oben.
Also ich hab mir vor Ewigkeiten für diesen Zweck mal das Buch "Game Scripting Mastery" geholt. Da wird sowohl das erstellen einer eigenen Scriptsprache geprobt, sowie die Implementierung eigener Funktionen für LUA, Tcl oder Python.

ist sehr praktisch orientiert und echt gut zu lesendes english... hat aber batürlich schon einige jahre auf dem buckel.... Da wird noch mit directx 8.1 gearbeitet ^^.

im buch wird eine eigene mini befehlssparache implementiert, dann eine art eigener assembler und zu guter letzt eie c ähnliche sprache die dann in die assemblersprache übersetzt wird, die dann wiederum in bytecode für eine VM... Letztendlich ein typisches Verfahren...

EDIT:
Ich würde an deiner Stelle so vorgehen-> orientier dich an einer Assemblersprache und implementier funktionen wie push pop mov usw.. Dann baust du damit erste mini anwendungen, die dann einfach in bytecode für eine vm umgewandelt werden können. Wenns gut klappt, baust du dann eine Highlevelsprache. Da musst du dann alle funktionen wie while, if, usw. in deine assembler sprache übersetzen (also einen compiler bauen der das kann).
Dann hast du eine recht performante eigene scriptsprache. für das parsing und so gibt es übrigens gute code generatoren...


4 Mal gendert, zuletzt am 20.12.2008, 14:52:47 Uhr von atr_23.
20.12.2008, 14:35:06 Uhr
Vault 23
unique75 Offline
ZFX'ler


Registriert seit:
24.07.2004

Baden-Württemberg
Re: Skriptsprache - wie?Nach oben.
Also ich würde dir eher davon abraten und hier muss ich eher Lord Delvin beipflichten. Wenn man zuviel drumherum macht, verliert man schnell das eigentliche Ziel aus den Augen. Das Implementieren einer eigenen Scriptsprache halte ich für extrem weit über das Ziel hinaus geschossen. Alles was man da versucht wird nur ein billiger stinkelahmer Interpreter, der eigentlich nix kann außer + und -, um es mal so übertrieben zu sagen

Die Leute die sowas wie LUA oder eben virtuelle Maschine bauen sind ja nicht bescheuert, die machen das seit Jahrzehnten und da steckt soviel Knowhow drin, was man sich selbst erstmal erarbeiten müsste, nur um auch nur annähernd so gut zu werden. Von daher würde ich unter C/C++ eher den Einsatz von etwas Vorhandenem wie Lua den Vorrang geben.

Oder man wagt sich mal wirklich aus seiner Ecke heraus und schaut über den Tellerrand. Es gibt viel bessere Sprachkonzepte, die sowas frei Haus erlauben.
20.12.2008, 16:56:09 Uhr
atr_23 Offline
Artwork-Berater


Registriert seit:
16.10.2002

Niedersachsen
107316684
Re: Skriptsprache - wie?Nach oben.
Naja immerhin sind wir ja in erster Linie eine Hobbyspieleentwicklergemeinde und da sollte man alles das tun was einem Spaß macht... Ob es je fertig wird interessiert ja erst mal nicht. Hauptsache es macht Spaß.
Wenns um schnelles fertig werden geht, sollte man natürlich i.d.R. auf fertige Middleware usw. setzen, aber wenn's um Spaß geht hat jedes auch noch so aberwitzige Projekt eine Daseinsberechtigung.
Nur mal so nebenbei gesagt: Viele Entwickler gerade im asiatischen Raum, setzen eher wenig auf Middleware und bauen für jedes Spiel eine eigene Engine... Von daher kann man schon sagen, dass der Nutzen von Middleware wirklich auch eine Geschmackssache ist. Ein Entwickler meinte in einem Interview mal bei Gamasutra: "If we don't make it in-house, you're making it in the outhouse."

Naja ich bin selbst pro-middleware aber ich kann alle gut verstehen (gerade die hobbyentwickler), die lieber alles einmal selbst bauen wollen...

Gruß
atr_23
20.12.2008, 18:51:43 Uhr
Vault 23
NeuroCoder Offline
ZFX'ler


Registriert seit:
24.05.2003

Nordrhein-Westfalen
264858511 neurocoder@darkvb.de
Re: Skriptsprache - wie?Nach oben.
Hi!

Das Buch "Game Scripting Mastery" kann ich ebenso empfehlen, da es die Grundlagen vermittelt und sehr praktisch angelegt ist.

Erstmal kann ich meinen Vorrednern beipflichten: Willst du etwas stabiles und performantes, dann nimm etablierte Scripting-Engines wie z.B. Lua, AngelScript (definitive Empfehlung hier!), C# (gibts auch Threads hier im Forum zu), Python, etc.
Die Erfahrung der Entwickler dahinter kann man nicht ersetzen.

Falls du aber doch aus reinem Interesse (oder wider allen Empfehlungen, wie das manchmal eben so ist ^^) selbst eine eigene Engine entwickeln möchtest, besorge dir Fachliteratur / das oben genannte Buch. An dieser Stelle sei auf das sog. Drachenbuch verwiesen (quasi DAS Standardwerk).
Nach der Lektüre des Masterys habe ich auch mal eine praktische Umsetzung angefangen. Dazu habe ich mir C mit C++ Elementen als Vorbild für die Sprache genommen und dazu einen ByteCode definiert. Dann wie im Buch eine VM dafür gebaut und einen Assembler, um die VM zu testen.
Das Herzstück war dann der Compiler. Die Sprache unterstützt einige integrale Datentypen (float, int, bool und string) und hat statische Typprüfung. Verzweigungen (if) und Schleifen sind auch drin, structs, arrays, sowie ein allgemeiner cast (angelehnt an die C++ Casts).
Der Code wird direkt in einem Pass in einen Abstract Syntax Tree geparst. Dann werden ein paar einfache Optimierungen durchgeführt (Expressions werden weitesgehend evaluiert, if(false) {} wird entfernt, if(true){} ohne Bedingung ausgeführt, etc.). Dann wird der ByteCode geschrieben und in eine Datei serialisiert.
Die VM kann eine Datei laden und mehrere Skripte in (emulierten) Threads ausführen. Dabei können Variablen von außen beobachtet und gesetzt werden und statische Funktionen in der VM registriert werden, die von Skripten aufgerufen werden können (das habe ich mir von AngelScript abgeschaut).

Der ganze Spaß hat mich mehrere Monate neben der Schule gekostet (ohne vorheriges Know-How und ohne Planung) und ist ca. 10.000 Zeilen groß.
Bei Bedarf schicke ich dir gern den Code (Warnung: Schlechtes Design).

Vorteil der ganzen Geschichte: Viel tiefere Einblicke in die Arbeitsweise von Compilern. (Und man kann stolz behaupten, man habe so ein Ding in einfacher Form schonmal geschrieben :-D)

Mfg NeuroCoder
20.12.2008, 19:10:08 Uhr
KiteStorm.de
PuMi Online ist nicht jeder!
ZFX'ler


Registriert seit:
02.04.2006

Berlin
266670062
Re: Skriptsprache - wie?Nach oben.
@atr_23:
Supi. Diesen Tipps werde ich mal gleich folgen. Am Anfang wird es ganz einfach, dann steige ich immer mehr weiter ein. Das bringt mich weiter . Den Buchtipp werde ich mir reinziehen. Ob jetzt nun ein altes DirectX verwendet wird oder nicht, ist mir egal. Verstehe ich den Sinn, kann ich ihn auch auf aktuelle Themen übertragen.

@NeuroCoder:
Dann ist es am Anfang nicht performant. Aber mir ist wichtig jetzt erst einmal zu wissen, wie so etwas funktioniert. Aramis wusste am Anfang bestimmt auch nicht, was er sich mit Assimp antun würde (oder?). Für mich zählt Praxis und Erfahrung.

Den Code von dir lese ich mir gerne durch. Ob schlechtes Design oder nicht ist mir egal. Was ich lesen will lese ich auch.

@unique75:
Ich will dir jetzt nicht nahe treten, aber wenn ich wohl fragen würde wie ein Fahrplan für eine Stadtbahn erstellt wird, würdest du wohl erst einmal die Sinnfälligkeit in Frage stellen. Zu wissen wie so ein "Ding" funktioniert bringt mich im späterem Studium deutlich weiter als zu Diskutieren ob das nun absolut perfekt wird.
21.12.2008, 00:21:04 Uhr
Art Train Developer
unique75 Offline
ZFX'ler


Registriert seit:
24.07.2004

Baden-Württemberg
Re: Skriptsprache - wie?Nach oben.
Pumi

ich bin einfach davon ausgegangen, dass du eigentlich irgendwas wie ein Game programmieren willst und das mit dem Scripting eher nur Nebensache ist. Von dieser Sicht aus wäre es einfach über das Ziel hinausgeschossen, weil du dann dein eigentliches Projekt Game völlig aus den Augen verloren hättest.

Wenn du dir das Wissen einfach nur aneignen willst, nur zu... man lernt nie aus

Auf meine Frage an einen Profi-Game-Programmierer bezüglich gewisser Dinge, wieso das denn nicht auf die und die Art besser gemacht wird, kam mal die Antwort: "Das entscheidet über Fertigwerden oder nicht Fertigwerden"
Und das ist genau der springende Punkt, wieso oftmals Hobbyprojekte niemals fertig werden. Man verliert sich viel zu sehr in Details und Kleinigkeiten. Ich hab das selbst schon durchgemacht
21.12.2008, 13:01:38 Uhr
PuMi Online ist nicht jeder!
ZFX'ler


Registriert seit:
02.04.2006

Berlin
266670062
Re: Skriptsprache - wie?Nach oben.
Du, bei mir in der Engine wird nicht umsonst eine Lua-Klasse angeboten...

Das mit der eigenen Skriptsprache hat schon bestimmte Gründe und habe ich als externes Projekt schon längst anerkannt.

Um dir klar zu machen, was ich mit der Skriptsprache vorhabe:

1. Man gibt (beispielsweise für eine Konfigurationsdatei) ein Konzept vor, was wie belegt sein soll, was für Werte default sind und was dringend benötigt wird oder zusätzlich sein kann:

Code:
ConceptScript CS;
/* Das Konzept:
require concept Device
{
    int Width = 1024,
    Height = 768,
    Format = 32,
    Multisampling = 1;
    expect float FarView, MinView, ViewAngle;
    defined SystemMode = Debug or Runtime default Runtime;
    expect defined Detail or
    {
        SuperHigh,
        High,
        Middle,
        Low,
        Dirty
    }
} */
    
CS.AddConcept(...);


Der Benutzer definiert dann in einer Datei das Konzept:

Code:
Device::FarView = 2000.0;
Device::MinView = 1.0;
Device::ViewAngle = 45.0f;
Device::Detail = SuperHigh;

C++:
if(!CS.RunScript(\"Config.csc\")) return BSLogger.Fail(\"File doesn't exist or scripting error.\");


3. Man kann eine Struktur gleich in einem Rutsch mit Daten füllen:

Code:
struct DeviceData
{
    int Width, Height, Format, Sampling;
    float ViewFar, ViewNear, ViewAngle;
    unsigned int Mode, Quality;
} DevData;

if(!CS.GetConceptData(\"Device\", (void**)&DevData)) return BSLogger.Fail(\"Konzept Device existiert nicht oder entspricht nicht den Anforderungen.\");


Und schon kann man ohne Pi Pa Po mit der Struktur in Programm arbeiten.

Was meinst unser Herr Professor zu dieser Idee ?
21.12.2008, 13:34:00 Uhr
Art Train Developer
Aramis Offline
ZFX'ler


Registriert seit:
14.03.2007

Baden-Württemberg
406712329
Re: Skriptsprache - wie?Nach oben.
Das könnte man viel einfacher in XML serialisieren. Turing-Vollständigkeit ist in Konfigurationsdateien ja nicht unbedingt erforderlich ...
21.12.2008, 13:43:49 Uhr
unique75 Offline
ZFX'ler


Registriert seit:
24.07.2004

Baden-Württemberg
Re: Skriptsprache - wie?Nach oben.
Mhh also Dr. wär lieber Nee aber ich bin beides nicht, nur ein blöder lumpiger Informatiker *g

Also ich kann natürlich nich auf Anhieb dein komplettes Modell verstehen anhand der Beispiele. Möglicherweise hast du ja noch viel mehr im Hinterkopf als die Beispiele sagen.

Im Grunde würde ich aber Aramis zustimmen. Diese Variablenwert-Angaben kann man auch in ein XML schreiben. Eine echte Scriptsprache ist doch viel mehr als das, da gehts dann um ausführbaren Programmcode.

Ich mag im Allgemeinen nicht diesen fragwürdigen OOP-Ansatz, den viele in C/C++ wählen. Anstatt ein Object für einen Zweck zu bauen, wird oftmals immer etwas gebaut, was alles kann. Folglich ist das Framework oftmals viel zu unflexibel.

Ich würd eine XMLReader-Klasse bauen, die eben nix anderes tut als XML-Streams parsen zu können. Heraus kommt dann ein XML-Tree. Jetzt baue ich eine Klasse Concept, die mit einem solchen XML-Tree instanziiert wird. Und der Concept-Instanz schicke ich dann per Instanzmethode die Struktur zum intialisieren.
Will ich mehrere Concept-Instanzen global registrieren für späteren Zugriff, dann tue ich das auf Klassenseite von Concept mittels einem Dictionary mit Namen/Instanzen. Anschliessend könnte man die Klasse Concept fragen... gib mir Concept X und ich hab wieder die Instanz.

Dein Beispiel "scheint" mir so, als ob du Instanzdinge wie "runScript" mit Registrierung wie "Add/GetConcept" in einem Objekt vermischst.
Kann mich aber auch täuschen
21.12.2008, 15:17:36 Uhr
dv Offline
ZFX'ler


Registriert seit:
15.09.2002

Österreich
89159988
Re: Skriptsprache - wie?Nach oben.
Zitat von unique75:
Ich mag im Allgemeinen nicht diesen fragwürdigen OOP-Ansatz, den viele in C/C++ wählen. Anstatt ein Object für einen Zweck zu bauen, wird oftmals immer etwas gebaut, was alles kann. Folglich ist das Framework oftmals viel zu unflexibel.


Das ist in der Tat ein grober Designfehler, und bekannt als das Kitchen-Sink-Syndrom, oder auch als das "God Object". Es torpediert jegliche Modularität und ist nur ganz selten eine gute Idee (bei manchen "System"-Modulen ist es manschmal notwendig z.B.)
24.12.2008, 10:12:16 Uhr
0xdeadbeef
PuMi Online ist nicht jeder!
ZFX'ler


Registriert seit:
02.04.2006

Berlin
266670062
Re: Skriptsprache - wie?Nach oben.
So... ich hab mich nun mal mit Leuten zusammengesetzt die keinen Plan von Computersprachen haben und mal mit ihnen ein Design entwickelt. Und das sieht so aus:
Code:
include \"otherconfig.txt\", \"mymusic.txt\";
require \"description.txt\";

require Application; /* Das Konzept Application wird benötigt */
require Application.FullScreen; /* Im Konzept Application wird das Member FullScreen benötigt. */
comment( Die obrige Bedingung require Application hätten wir vernachlässigen können,
         da alleine schon eine Member von Application verlangt wird. );

Application.WindowTitle = \"My basic ConceptScript application\";
Device.Width = 1024.0f;
World.Position[0] = 16.0, 0.0, 12.0;
World.Position[1] = 26.0, 1.0, 22.0;
World.Position[3] = 4.0, 0.0, -5.334;
Device.DebugMode;
Device.FullScreenHz = default;
Device.SoundVolume = World.Position[1][1];
Device.WorldPositions = World.Position;
Device.World = World;
Application.math_formula = lua_\"function f(x) math.pow(x, 3)*2.2+6.6 end\";

Das betrifft jetzt das Design für die "Untersprache" ConceptConfig. Also für Konfigurationsdateien. Ich denke, dass man erkennen kann, wie etwas zusammengehört (Wenn nicht: Zu Bedeutungen Fragen!). Arrays von Konzepten werde ich in der ersten Version aus Einfachheit mal erstmal nicht einbinden (also z.B. Device[0].Width = 1024.

Nach den jetzigen Infos werde ich die Sache mal in eine Bibliothek integrieren. Ich habe auch schon eine wage Vorstellung wie und was ich dafür erstmal in eine Klasse packe. Habt ihr einen Vorschlag für einen Namespace?

Mir wäre da eingefallen:
Code:
namespace ConceptLanguage
{
    class ConceptConfig {};
}

Um die eigentliche ConceptScript-Sprache möchte ich mich kümmern, wenn ConceptConfig funktioniert. Um Performance möchte ich mich in ConceptScript erstmal später kümmern. Erst das Grundetui und dann die Performance .

1 Mal gendert, zuletzt am 26.12.2008, 18:58:36 Uhr von PuMi.
26.12.2008, 18:58:10 Uhr
Art Train Developer
Aramis Offline
ZFX'ler


Registriert seit:
14.03.2007

Baden-Württemberg
406712329
Re: Skriptsprache - wie?Nach oben.
Zitat:

Habt ihr einen Vorschlag für einen Namespace


Code:
namespace MyAttemptToAvoidXMLBecauseWritingMyOwnParserIsSexier {}


26.12.2008, 20:54:06 Uhr
unique75 Offline
ZFX'ler


Registriert seit:
24.07.2004

Baden-Württemberg
Re: Skriptsprache - wie?Nach oben.
Haha... der war gut
Naja wenn Pumi sich mal mit Compilertechnologie befassen will, ist das ja nie verkehrt. Aber man sollte es auch nicht auf die leichte Schulter nehmen. Das Thema ist sehr komplex.

Ich weiss nur noch nicht, ob ich Pumi das abkaufe mit dem "die Leute hatten keinen Plan von Computersprachen"
Dafür sieht die Sprache viel zu typisch aus
26.12.2008, 21:03:18 Uhr
Normal


ZFX Community Software, Version 0.9.1
Copyright 2002-2003 by Steffen Engel