Aktuelle Zeit: 15.05.2024, 05:08

Alle Zeiten sind UTC + 1 Stunde




Ein neues Thema erstellen Auf das Thema antworten  [ 26 Beiträge ]  Gehe zu Seite 1, 2, 3  Nächste
Autor Nachricht
BeitragVerfasst: 29.01.2008, 17:13 
Offline
Moderator
Benutzeravatar

Registriert: 15.04.2007, 20:20
Beiträge: 505
Wohnort: Reelsen
Nach einiger Zeit poste ich auch mal was hier im Projekte-Forum :)
Und zwar programmiere ich seit etwa anderthalb Wochen an einer kleinen Skript-Engine.
Sie basiert auf einem JIT-Compiler, was ihr wohl einen deutlichen Geschwindigkeitsvorsprung gegenüber herkömmlichen Skripts geben sollte (was wohl bei Spielen durchaus praktisch sein könnte), das ganze funzt derzeit auf x86 (Linux, Windows) und amd64 (nur Linux).
Meine Ziele sind dabei eine einfache Integration und Nutzung sowie hohe Ausführungsgeschwindigkeit.

Der Compiler ist komplett in C implementiert und unterstützt kein C++, da ich mit C++ nochmal mehrere ABIs implementieren müsste (so ziemlich für jeden Compiler eine), stattdessen werden C++-Klassen über ein C-Interface exportiert.

Der Code ist atm auch noch absoluter Spaghetticode, da muss noch einiges neugeschrieben werden, Dokumentation fehlt auch noch.

So sieht die Sprache an sich aus:
Code:

// Zahl quadrieren
function square(int a): int
   return a * a;
end

/*
Diese Struktur wurde über eine C-Datei extern definiert.
Auf diese Weise kann zB eine Game-Engine exportiert werden.
*/
teststruct struct;

function main() : int
   // Ein bisschen mit der Struct rumspielen
   int a = struct.value1;
   struct2.testfunc1();
   struct2.value1 = 2;
   int b = struct2.testfunc1();
   // Eine for-Schleife
   int i;
   for i = 0 to 10 do
      int sq = square(i);
      // Gibt einfach die Zahl aus
      test(i, sq);
   end
   // Eine while-Schleife
   i = 0;
   while i < 4 do
      i = i + 1;
      test(i, i);
   end
   if i == 5 then
      print("i ist gleich 5!");
   end
end


Die Sprache ist atm sehr unvollständig, viel mehr als in dem Beispiel wird noch nicht unterstützt.

Features:
- Hohe Geschwindigkeit im Vergleich zu interpretierten Sprachen*
- Relativ schnelle Compilierung
- Einfache Syntax (Verbesserungsvorschläge posten)

* Kommt auch auf den Einsatzbereich an, allerdings sollten Funktionen ab dem 2. Aufruf grundsätzlich schneller sein

TODO-Liste (ungefähr):
- Operatoren für Strukturen
- Dokumentation
- Optimierungen
- Code aufräumen
- Interpreter für nicht unterstützte Architekturen
- Interface-Generator (parst C/C++-Header, ähnlich tolua)

Das ganze ist nicht gerade einfach, Hilfe jeder Art ist grundsätzlich erwünscht :)

Ich würde mich freuen, wenn ihr das ganze mal ausprobiert und mir Bugs meldet.

Um das ganze auf Windows zum Laufen zu bringen, muss man bei den Skriptdateien (und je nach Compiler auch den Sources) die Zeilenenden umwandeln, da ich das diese mit Linux-EOLs erstellt habe.

Version 0.0.0.20 lässt sich nicht unter Windows compilieren, einfach die Zeilen, in denen der Compiler meckert, rausnehmen, wird mit der nächsten Version behoben.

Updates:

Version 0.0.0.20:
- Fließkommazahlen
- Grundlegende umstrukturierung des Compilers
- Tonnenweise Bugfixes
- Bessere Kompatibilität zu C++
- Log-Funktionen, um Fehler in eine Datei umzuleiten
Version 0.0.0.29:
- Deutliche Verbesserung der structs
- Vereinfachter C++-Wrapper mit API-Dokumentation
- Strings
- Logische Operatoren (and, or, xor)
- Bugfixes v.a. bei Funktionsaufrufen


Dateianhänge:
Dateikommentar: PlusScript 0.0.0.29
plusscript-0.0.0.29.tar.gz [62.03 KiB]
433-mal heruntergeladen
Dateikommentar: PlusScript 0.0.0.20
libplusscript-0.0.0.20.tar.gz [20.69 KiB]
445-mal heruntergeladen
Dateikommentar: PlusScript 0.0.0.11
libplusscript-0.0.0.11.tar.gz [16.7 KiB]
440-mal heruntergeladen

_________________
Meine Gameengine :)
Bild


Zuletzt geändert von thephoenix am 03.02.2008, 22:23, insgesamt 7-mal geändert.
Nach oben
 Profil  
 
 Betreff des Beitrags: Re: PlusSkript 0.0.0.11 (pre-alpha)
BeitragVerfasst: 29.01.2008, 17:26 
Offline

Registriert: 16.03.2007, 03:26
Beiträge: 75
Wohnort: Dresden
Wenn der Quelltext, den du oben angibst funktioniert, ist das schon mal richtig gut, vor allem für 2 Wochen Arbeit!
Aber sag mal, was soll das denn werden? Baust du einen Compiler für eine selbst entwickelte Programmiersprache? wird daraus ein Binary? oder was passiert mit dem Kopellierten Quelltext?


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: PlusSkript 0.0.0.11 (pre-alpha)
BeitragVerfasst: 29.01.2008, 17:31 
Offline
Moderator
Benutzeravatar

Registriert: 15.04.2007, 20:20
Beiträge: 505
Wohnort: Reelsen
Das ganze ist als Skriptsprache gedacht, mit der sich zB Spiele skripten lassen, der Compiler erstellt also keine Binaries, sondern erstellt die Funktionen nur dann, wenn das Programm, das die Library benutzt, gestartet wird, ohne sie dauerhaft zu speichern.
Das ganze ist also im Grunde nicht wirklich ein normaler Compiler, sondern kann eher mit einem Interpreter verglichen werden.

_________________
Meine Gameengine :)
Bild


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: PlusSkript 0.0.0.11 (pre-alpha)
BeitragVerfasst: 29.01.2008, 20:31 
Offline

Registriert: 16.03.2007, 03:26
Beiträge: 75
Wohnort: Dresden
aso, naja, dann ist es also nichts anderes als ein Interpreter und da gibts auch keinen Geschwindigkeitsvorteil, da es ja bei jedem Programmstart gemacht werden muss.
Ok, da muss ich noch loswerden, das ich das zu Überdimensioniert finde. Wofür sollte ich denn Schleifen und Variablen gebrauchen, in einem Skript, mit dem ich irgendwas lade. Na gut, ich weiß nicht in wie weit sich mit solch einem ansatz Kamerapfade, oder KI-Ähnliche strukturen umsetzen lassen....


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: PlusSkript 0.0.0.11 (pre-alpha)
BeitragVerfasst: 29.01.2008, 20:39 
Offline
Moderator
Benutzeravatar

Registriert: 25.03.2007, 18:11
Beiträge: 834
Wohnort: Hagen, NRW
Sagen dir PHP, Lua, Ruby, etc was?
Das sind auch alles Scriptsprachen.

Er hat doch auch geschrieben, dass es Geschwindigkeitsvorteile gegenüber "normalen" Scriptsprachen wie eben zb Lua gibt.

Für 2 Wochen arbeit echt nice. respekt.

_________________
Phenom X4 9950 BE | 6144MB DDR2-800 | GeForce 8800GT 512MB | Asus M3A32-MVP Deluxe | 2TB HDD | 520W Seasonic NT | Soprano Tower | Samsung 22" TFT + Fujitsu-Siemens 17" TFT + Toshiba 42" FullHD LCD | Windows 7 Proessional x64
Behind the Brain


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: PlusSkript 0.0.0.11 (pre-alpha)
BeitragVerfasst: 29.01.2008, 21:32 
Offline

Registriert: 08.04.2007, 16:55
Beiträge: 115
assembelst du das echt in maschinen code, oder in Byte code??


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: PlusSkript 0.0.0.11 (pre-alpha)
BeitragVerfasst: 29.01.2008, 22:02 
Offline
Moderator
Benutzeravatar

Registriert: 15.04.2007, 20:20
Beiträge: 505
Wohnort: Reelsen
Erst wird das vom Parser in Bytecode umgewandelt, dann später in Maschinencode.

_________________
Meine Gameengine :)
Bild


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: PlusSkript 0.0.0.11 (pre-alpha)
BeitragVerfasst: 29.01.2008, 22:39 
Offline

Registriert: 12.04.2007, 11:47
Beiträge: 108
ich muss sagen das ganze funzt recht gut.
hab mal meine hardcoded ai in seine scriptsprache gepackt und es läuft sehr gut.
wie man sieht kann man sehr leicht neue verhaltensmuster erstellen wenn man nun genug c/c++ functionen exportiert. also alles sehr einfach
Code:
function activate()
   println("Ich werde dich kriegen");
end

function UpdateSimpleMonster(int ai) : int
   if checkTarget(ai) != 1 then
      generateNewPath(ai);
   end
   if checkDistance(ai) > 3 then
      moveMonster(ai);
      setAnimation(ai, 1);
   else
      setAnimation(ai, 0);
   end
   return 1;
end


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: PlusSkript 0.0.0.11 (pre-alpha)
BeitragVerfasst: 30.01.2008, 17:09 
Offline
Benutzeravatar

Registriert: 04.09.2007, 13:07
Beiträge: 12
Sehr sehr fein, hab davon im IRC garnix mitbekommen... wahrscheinlich zu viel geidlet :P

werde mir das noch genauer ansehen und so wies aussieht kann man das wirklich einfach und gut einsetzen also werde ich das wahrscheinlich fuer meine scripts verwenden ;)


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: PlusSkript 0.0.0.11 (pre-alpha)
BeitragVerfasst: 31.01.2008, 11:30 
Offline

Registriert: 12.04.2007, 11:47
Beiträge: 108
ok hab mal ein wenig rum gespielt mit der sprache.
Also folgendes ist mir aufgefallen:
if abfagen lassen sich nicht verschachteln also
Code:
if a>b then
   if a>c then
     mach was schönes
   end
end

geht nicht warum weiß ich nicht.
zum andern nehmen if abfragen immo auch erst ein argument.
was mir jedoch positiv aufgefallen ist, ist das diese sprache genauso schnell ist wie c/c++ hab zu dem zweg ein paar schleifen einfach laufen lassen die was ausdrucken. einmal in plusscript und einmal in c++. fps war absolut gleich. respeckt!!


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: PlusSkript 0.0.0.11 (pre-alpha)
BeitragVerfasst: 31.01.2008, 18:27 
Offline
Moderator
Benutzeravatar

Registriert: 15.04.2007, 20:20
Beiträge: 505
Wohnort: Reelsen
Auch wenn ich nicht weiß, was das Problem mit den Ifs war, es scheint in aktuelleren Revisionen behoben zu sein.

atm habe ich folgendes Problem: Das Programm stürzt an einer absolut unlogischen Stelle ab und zeigt dabei falsche Funktionsparameter an, das ganze passiert nur unter amd64, nicht unter x86.
Im Debugger sieht das so aus:
Zitat:
272 while ((pos < module->codelen) && (module->bytecode[pos] != CMD_END))
(gdb) s
274 switch (module->bytecode[pos])
(gdb) s
834 float var = *((float*)(&module->bytecode[pos + 1]));
(gdb) s
835 log_print(LOG_DEBUG, "%04d: GETF (%f)\n", pos, var);
(gdb) s

Program received signal SIGSEGV, Segmentation fault.
0x00002b5c9be07b38 in log_print (level=3, format=0x2b5c9be08a53 "%04d: LABEL (%d)\n") at src/logger.c:13
13 {
(gdb)

Kann mir wer verraten, wonach ich suchen muss?

EDIT: Scheint daran zu liegen, dass er das %f nicht mag. -.-

_________________
Meine Gameengine :)
Bild


Nach oben
 Profil  
 
BeitragVerfasst: 04.02.2008, 11:26 
Offline

Registriert: 08.04.2007, 16:55
Beiträge: 115
Hey, schon mal dran gedacht damit sowas code::WAR mäßiges zu coden, sprich son game für programmierer? Wenn die noch weiter entwickelt wird und entsprechend funzt, währe ich fast in Versuchung...
(sry wegen der dummen Frage aus dem letztewn Post.. nicht richtig gelesen -_-)


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 26 Beiträge ]  Gehe zu Seite 1, 2, 3  Nächste

Alle Zeiten sind UTC + 1 Stunde


Wer ist online?

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