GLScriptBasic

Previous topic - Next topic

WPShadow

Hey, wann ist es denn soweit?

Das GLScript würde sich optimal zum "scripten" für LR eignen! Bin schon richtig heiss drauf!  :good:
AMD X2 4600, 2 GB Ram, ATI X1950 XTX, XP PRO SP2: GLB Premium 10.beta_dingsi, <(´.´<) Kirby Dance (>`.`)>
http://lostrevenant.blogspot.com
alea iacta est

metzzo

Puh ich schätze gegen Ende von den Sommerferien wird es was zum testen geben.

Leider fehlen im Moment noch die zwei wichtigsten Dinge: Types und Funktionen. Vorallem die Types sind in GLBasic recht eigenwillig, weshalb diese viel Zeit in Anspruch werden.

Btw. Nun gibt es auch die fehlenden Operatoren >=,<=,<> und das in GLBasic lange vermisste NOT ;)
That's no Bug, that's my project!

http://programming-with-design.at/

Kitty Hello

NOT kommt in V8. In der Online-Hilfe ist's schon drin ;)

backslider

Wann kommt denn GLB 8?  :blink:

Kitty Hello

Wenn's fertig ist ;)
Ich habe mir viel vorgenommen und will auch alles reinpacken. Ich weiß aber, dass manche Sachen schon ziemlich pressieren. Mal sehen. Ich schätze in den nächsten 8 Wochen.

backslider

Du bist der Beste  :) Freu mich schon, was es wohl alles Neues gibt!

metzzo

Hey ho!

Nun habe ich SUB's implementiert. Das war einfacher als ich gedacht habe. Naja was gibt es viel dazu zu sagen? Rekursion kann ich noch nicht viel testen, scheint aber bis jetzt zu funktionieren.

Aber Code sagt mehr als 1000 Worte:
Code (glbasic) Select
GLOBAL gg=10
FOR i=0 TO 10 STEP 2
GOSUB sub1
NEXT

SUB sub1:
LOCAL Hallo=10 //Damit kommt der Stack auch klar
STDOUT "In Sub1 "+Hallo
GOSUB sub2
ENDSUB

SUB sub2:
STDOUT "zzz "+gg
ENDSUB
That's no Bug, that's my project!

http://programming-with-design.at/

WPShadow

Hey, das wird ja so richtig genial, wie ich sehe!  :good:

Wird es auch Möglichkeiten für z.B. Ladefunktionen, Graphikfunktionen usw. geben? z.B. Loadsprite oder Drawrect?
AMD X2 4600, 2 GB Ram, ATI X1950 XTX, XP PRO SP2: GLB Premium 10.beta_dingsi, <(´.´<) Kirby Dance (>`.`)>
http://lostrevenant.blogspot.com
alea iacta est

metzzo

SOfern Gernot nichts dagegen hat natürlich ;).
That's no Bug, that's my project!

http://programming-with-design.at/

Kitty Hello

Jo. Hau rein. Ich werde in die AGB reinschreiben, dass ein Export der Script-Language als eigenes Produkt unzulässig ist.
(Nicht, dass einer GLBasic.script macht und als Stand-Alone verkauft).

Soll das Teil was kosten?

metzzo

Da bin ich mir nicht sicher. Vllt. wird es was kosten, da hierbei nur der Source Code mitgeliefert wird, wäre es noch immer von GLBasic abhängig. Es ist schließlich ziemlich viel Aufwand. Aber nur wenn du es auch erlaubst ;)


Ich will das ganze erstmal fertig kriegen und dann schau ich weiter.
That's no Bug, that's my project!

http://programming-with-design.at/

metzzo

#26
Soooooooo

nun habe ich die VM mal ordentlich umstrukturiert. Am meisten hat sich was bei den Stacks verändert. Nun gibt es anstatt einem drei Stacks. Warum habe ich mich dazu entschieden? Ganz einfach, es war mir zu fehleranfällig. Es musste nur irgendwo irgendein Wert vom Stack gelöscht werden damit alles durcheinander kommt. Nun kommt zwar auch alles durcheinander, allerdings kann ich den Fehler um einiges leichter finden, da ja alles geordnet ist. Dadurch entsteht ein geringer Overhead bei Funktionen/subs da ja nun 3 anstatt ein Stack verwaltet werden muss. Aber diesen Nachteil nehme ich in Kauf (es ist eh ziemlich gering).

Ich habe mir nun einen "Plan" gemacht was welche Version können muss:
0.1: Alle Kontrollstrukturen (done)
0.2: Alle Schleifen (done)
0.3: Variablen, Arrays (es fehlen noch String Variablen und Arrays können noch nicht als Parameter fungieren)
0.4: Subs und Funktionen (Subs bereits implementiert)
0.5: Types (Das wird SEHR schwierig)
0.6: Alle Funktionen aus GLBasic implementieren(2D, 3D und NET...) und auch div. Kleinigkeiten wie DATA Statements oder CONSTANT
0.7: API fertigstellen: Diese soll ähnlich flexibel wie die von Lua werden
0.8: Fehlerbereinigung (Hoffentlich nicht allzuviel)
0.9: Geschwindigkeits Optimierung
1.0: ddgui erfolgreich kompilieren und praktisch jedes beliebige Projekt
<1.0: Bugfixes und erweiterte Syntax (FUNCTION in Types, CALLBACk und PROTOTYPEs)
<2.0: Eigene Erweiterungen (stark Erweitertes OOP [Vererbung, Polymorphie,...], div. andere Syntax Elemente und die Java Version des Interpreters)

Tja bis dahin ist ein langer Weg. Mittlerweile ist GLScriptBasic bei Version 0.25. Ich bin allerdings guter Dinge in den Sommerferien (sind ja nurnoch ein Monat bis es soweit ist) bis zur Version 0.5 zu kommen. Ab da wären dann alle Syntax Elemente implementiert.

Ach ja bevor ich es vergesse: FUNCTION's können mittlerweile einen Parameter entgegennehmen:
Code (glbasic) Select
funk(-999)
FUNCTION funk: Param1
    STDOUT "Parameter: "+Param1
ENDFUNCTION
That's no Bug, that's my project!

http://programming-with-design.at/

metzzo

Hi!

Nun wurden Strings fertig implementiert. Das heißt, sie können in Variablen gespeichert werden, als Parameter arbeiten uvm. Dabei sind mir einige böse Bugs aufgefallen, welche ich noch nicht alle entfernen konnte.
Code (glbasic) Select
LOCAL txt$
txt$="Hallo Welt"
STDOUT txt$
txt$=txt$+100 //Hier wird nicht addiert sondern aneinandergefügt
STDOUT txt$

Somit hat GLScriptBasic Version 0.275 erreicht (Sobald die Arrays 100%ig funktionieren ists bei Version 0.3).
That's no Bug, that's my project!

http://programming-with-design.at/

metzzo

#28
Hallo,
nun nach einer einwöchigen Programmierpause mache ich mit GLScriptBasic weiter. Weshalb die Pause? Ich habe einen hartnäckigen Bug nicht gefunden. Ich habe noch keine Ahnung wo sich dieser Käfer eingenistet hat, aber den werde ich nich finden. Er tritt dann auf wenn eine Subfunktion innerhalb einer Fallunterscheidung/Schleife aufgerufen wird. Hier wird aus irgendeinem Grund jede Variable in ein Array umgewandelt. Worauf hin die gesamte VM durcheinander gerät...

Naja eine kleine Sache habe ich implementiert: INLINE - ENDINLINE
Nun jetzt werdet ihr bestimmt denken "Woah cool" oder "Warum ist der Himmel blau?".
Aber ich muss euch enttäuschen. INLINE ist nur dazu da um OpCodes direkt zu verwenden. Das entspricht quasi Inline Assembler.
Wofür das gut ist? Nunja dadurch dass das ganze bereits "vorkompiliert" ist, braucht der Compiler weniger Zeit zum kompilieren. Außerdem können diverse Optimierungen vorgenommen werden, wozu der Compiler auch nicht in der Lage ist.
Code (glbasic) Select
INLINE
pushstr "Ich werde in Inline ausgegeben" //Haa Inline OpCodes
call SCRIPT_STDOUT
ENDINLINE
STDOUT "Ich werde in nicht inline ausgegeben"
That's no Bug, that's my project!

http://programming-with-design.at/

metzzo

So Funktionen funktionieren nun auch einwandfrei. Das heißt Rekursion und so funktioniert auch.
Code (glbasic) Select
LOCAL Array[]
DIM Array[5]
Array[-1]=99
STDOUT funk(20,"Hallo",Array[])
STDOUT rekursiv(-2)

FUNCTION funk: Param, Test$, Arr[]
Param=Param+5
STDOUT "In Funktion!! "+Param+ "    "+Test$+" --"+Arr[-1]
RETURN 100
ENDFUNCTION

FUNCTION rekursiv: Pum
IF Pum>10
STDOUT "Aus "+Pum
RETURN Pum
ELSE
STDOUT "Rek: "+Pum
RETURN rekursiv(Pum+1)
ENDIF
ENDFUNCTION


Man kann bereits Strings, Numbers und Arrays als Parameter übergeben. Zurückgeben kann man allerdings nur Numbers. Dies werde ich demnächst ändern. Die Arrays werden im Gegensatz zu GLBasic (noch) kopiert beim übergeben. Dies werde ich allerdings ebenfalls ändern.

Außerdem kann man mittlerweile auch (wie man sieht) Arrays als Parameter übergeben. Das heißt sowas wie "DIMPUSH Array[],10" ist bereits möglich.

Somit erreicht GLScriptBasic Version 0.35
That's no Bug, that's my project!

http://programming-with-design.at/