Essay - Free Blitz2D

Übersicht Sonstiges Smalltalk

Gehe zu Seite Zurück  1, 2, 3, 4  Weiter

Neue Antwort erstellen

Vertex

BeitragFr, Nov 09, 2007 7:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Aus dem AST einen C/C++ Code(ich liebäugle aber mit reinem C) zu erstellen ist einfacher, als einen Bytecode zu produzieren. Finde es auch unsinnig, das ganze in einer VM laufen zu lassen. Angemerkt sei hier aber, dass .NET NICHT in einer virtuellen Maschine ausgeführt wird. Der CIL Code wird zuvor vom Framework in echten Maschinencode kompiliert. Den Spaß in Java zu konvertieren wäre vllt. in Richtung Blitz4HandyGame sinnig.

Ein Backend direkt für x86 zu erzeugten, bekomme ich nicht hin - dazu fehlt mir die Erfahrung und von optimierten Code kann dann auch nicht mehr die Rede sein.

Den C Code als Ausgabe finde ich am idealsten. C ist mit den Standardlibs Plattform unabhängig und erzeugt einen optimierten Maschinencode. Die Runtime muss dann für die Plattformen zum Teil speziell entwickelt werden. Aber mit OpenGL usw. dürfte das kein Problem darstellen.

Ach ja, der Compiler wird definitiv NICHt in BlitzMax entwickelt werden. Vllt. später mal portiert, aber nicht entwickelt. Man braucht bei einem solchen Projekt ganz einfach eine Entwicklungsumgebung, die einem unter die Arme greift.

Blitz soll auch nicht modifiziert werden. Es soll möglich sein, alte Blitz2D Projekte damit zu kompilieren, ohne etwas zu verändern(Userlibs ausgenommen). Aber mit ein paar Modifikationen beschäftige ich mich dennoch:
Code: [AUSKLAPPEN]
; Ein Ausdruck über mehrere Zeilen verteilt
If X > Y And ..
   A > B Or ..
   C < D Then Print("Blub")



Code: [AUSKLAPPEN]
Local MyPointer@, ABC%, pABC@

// Funktionspointer für Decls
MyPointer = &CallMe

ABC = 10
pABC = &ABC
Print("pABC zeigt auf den Wert " + pABC[0])

Function CallMe(X%, Y%)
   Print("X = " + X + "; Y = " + Y)
End Function


Oder vllt. einfach nur den Adressoperator & für Userlibs.

mfg olli
vertex.dreamfall.at | GitHub

TheShadow

Moderator

BeitragFr, Nov 09, 2007 19:26
Antworten mit Zitat
Benutzer-Profile anzeigen
im prinzip ist es egal wohin es konvertiert wird...
bei Blitz2D kann es problemlos auch C sein
Bei BlitzMax sollte es schon C++ sein

Assembler soll an sich auch nicht sooo schwer sein - aber das ist mir zu lowlevel - und im prinzip bringt es GAR nix nach assembler zu konvertieren, wenn man keine Ahnung von Optimierugen hat... Z.B. ist BlitzMax immer noch einen kleinen taken langsamer als GCC - und GCC ist viel langsamer als MS-Compiler...

Java - davon weiß ich nicht was ich halten soll... Genau wie von .NET - ich habe hier nichtmal NET-Framework installiert (Java schon, denn im Internet braucht man es ab und an) - und ich habe keine einzige Anwendung die NET überhaupt braucht... ich halte NET für eine Fehlentwicklung - das Konzept ist zwar interessant und z.B. C# besser als C++ - aber ich mag doch lieber native Anwendungen...
AMD64 3500+ | GeForce6600GT 128MB | 1GB DDR | WinXPsp2

Vertex

BeitragSa, Nov 10, 2007 22:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Joar, den C Compiler kann man sich ja nach belieben aussuchen. Ich habe dazu auch keine Meinung, da ich bisher nie mit denen gearbeitet habe.

Und zum Thema .NET - ja, das ist deine Meinung. Ich finde es eine der besten Innovationen überhaupt ^^

Wie dem auch sei - hier der aktuelle Stand vom Lexer/Scanner:
freeblitz.zip (29 KByte)(habe mal alles rein genommen, was wichtig sein könnte).

Ich arbeite hier nicht mit Exceptions. Diese werden durch den Joker-Token ersetzt. Der Grund ist, FreeBlitz soll nicht nur immer einen Syntaxfehler in einer Messagebox ausgeben, sondern gleich mehrere auf einmal. Das macht das Programmieren schneller.

Naja, schaut es euch mal an. Testet bitte mal ein paar Quellcodes durch und sagt mir ggf. Fehler an. Ich weiß aber, dass z.Z. keine Umlaute unterstützt werden. Hier muss ich demnächst auf UTF8 umstellen.

mfg olli
vertex.dreamfall.at | GitHub

DAK

BeitragSo, Nov 11, 2007 0:41
Antworten mit Zitat
Benutzer-Profile anzeigen
wenn da drei leute an genau dem selben arbeiten, bringts recht wenig... wie wärs, wenn einer es nach java macht und die anderen nach c/c++... dann hätts einen sinn, das es mehrere machen (ja ich weiß, ich hab gut reden, als einer der da nicht mit macht, aber so wörs meiner Meinung nach am besten und gschiktesten....)
Das mim java wegen blitz4handy, weil grad am handy lassen sich minigames noch verkaufen und anderes wird mit bb kaum gemacht...
Gewinner der 6. und der 68. BlitzCodeCompo

TheShadow

Moderator

BeitragSo, Nov 11, 2007 1:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
Joar, den C Compiler kann man sich ja nach belieben aussuchen. Ich habe dazu auch keine Meinung, da ich bisher nie mit denen gearbeitet habe.

Tatsächlich gibt es gar nicht so viele gute auf dem Markt - die zudem OpenSource sind. Zwischen den Compilern gibt es minimale Unterschiede - was auch an libs/includes liegen kann...

Zitat:
Testet bitte mal ein paar Quellcodes durch und sagt mir ggf. Fehler an

hab nur bisschen getestet - scheint zu gehen...

Zitat:
wenn da drei leute an genau dem selben arbeiten, bringts recht wenig...

Ja das ist schon klar - aber jeder macht es bisschen anders... Der eine codet in C#, der andere in BB und ich in C. Weiterhin codet einer BB-Klon und andere neue Sprache... Die Ausgabesprache und Konzepte sind auch hier und da anders...

Zitat:
Das mim java wegen blitz4handy, weil grad am handy lassen sich minigames noch verkaufen und anderes wird mit bb kaum gemacht...

1) Wird Java Mobile in den nächsten 10 jahren aussterben und 2) Java auf Handy ist grausam - denn jedes Spiel das auf Handy läuft wurde auf jedem unterstützten Modell auch getestet - d.h. die Tester haben 100te handys zum testen da - das ist Wahnsinn.

Ich denke es ist schwer wenn mehrere an einem Projekt arbeiten, solange es nix lauffähiges gibt. Ich bin eher der Meinung dass Libs/Modules von dritten gecodet werden können.
AMD64 3500+ | GeForce6600GT 128MB | 1GB DDR | WinXPsp2

DAK

BeitragSo, Nov 11, 2007 1:28
Antworten mit Zitat
Benutzer-Profile anzeigen
TheShadow hat Folgendes geschrieben:
1) Wird Java Mobile in den nächsten 10 jahren aussterben

Da hat mans wenigstens noch 10 Jahre... Ich bin mir relativ sicher, das es mit Windows in 10 Jahren ähnlich ausschaut...
TheShadow hat Folgendes geschrieben:
2) Java auf Handy ist grausam

Trotzdem gibts anscheinend einen Haufen Leute, die genau damit ihr Geld machen. Und ich könnte mir denken, das BB am Handy wenigstens einfacher zu Proggen währe, als Java am Handy...
Gewinner der 6. und der 68. BlitzCodeCompo
 

lettorTrepuS

BeitragSo, Nov 11, 2007 1:43
Antworten mit Zitat
Benutzer-Profile anzeigen
-aus Sicherheitsgründen gelöscht- Diese Information ist mit Ihrer Sicherheitsfreigabe leider nicht erhältlich, Bürger.

TheShadow

Moderator

BeitragSo, Nov 11, 2007 13:54
Antworten mit Zitat
Benutzer-Profile anzeigen
ST ich glaub du weißt, dass wenn ein Handyspiel bei jamba und Co verkauft wird, dass es auf allen unterstützten Geräten getestet werden muss - das ist ein Aufwand ohne Gleichen

Bei PC testet man es auf win98/2000/xp/vista hier und da linux und das wars... bei handy ist der aufwand 20x hoher das zu testen... Man kann da nicht einfach so einen Konverter coden und davon ausgehen, dass es funzt.

Solange es solche schammigen Standard wie J2ME gibt, ist die Entwicklung sinnlos... Es ist ein Riesenunterschied zu Java auf dem Desktop. SUN hat offiziell J2ME begraben, wenn du es in news mitbekommen hast...

Zitat:
Trotzdem gibts anscheinend einen Haufen Leute, die genau damit ihr Geld machen. Und ich könnte mir denken, das BB am Handy wenigstens einfacher zu Proggen währe, als Java am Handy...

Spiele zu testen ist nicht vernünftig möglich. Ein Emulator am PC arbeitet anders wie es am handy später aussieht. Jedes handy kann bugs haben die man immer umgehen muss... Das Coden in Java ist an sich OK - wie in BB nur extrem OOp lastig.
AMD64 3500+ | GeForce6600GT 128MB | 1GB DDR | WinXPsp2
 

lettorTrepuS

BeitragSo, Nov 11, 2007 17:22
Antworten mit Zitat
Benutzer-Profile anzeigen
-aus Sicherheitsgründen gelöscht- Diese Information ist mit Ihrer Sicherheitsfreigabe leider nicht erhältlich, Bürger.
  • Zuletzt bearbeitet von lettorTrepuS am So, Nov 11, 2007 17:40, insgesamt einmal bearbeitet

mahe

BeitragSo, Nov 11, 2007 17:40
Antworten mit Zitat
Benutzer-Profile anzeigen
ST du hast das nicht richtig verstanden.

Kaum ein Handyhersteller hat die J2ME-Spezifikationen vollständig und richtig umgesetzt.
Oft unterscheiden sich die Java-Implementation schon zwischen den Modellen eines Herstellers so stark, dass ein Programm für jedes Modell angepasst werden muss.
Handyspezifische Spezialfunktionen sind da noch mal ein ganz anderes Thema.
ʇɹǝıdɯnɹɹoʞ ɹnʇɐuƃıs - ǝpoɥʇǝɯ-ɹoɹɹıɯ ɹǝp uı ,ɹoɹɹǝ,
 

lettorTrepuS

BeitragSo, Nov 11, 2007 17:47
Antworten mit Zitat
Benutzer-Profile anzeigen
-aus Sicherheitsgründen gelöscht- Diese Information ist mit Ihrer Sicherheitsfreigabe leider nicht erhältlich, Bürger.

Vertex

BeitragMo, Nov 12, 2007 1:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Haltet euch mal bitte etwas zurück wegen den Handyspielen - das könnt separat diskutieren.

Um das mal klar zu stellen:
Ich möchte einen freien Compiler für Blitz2D schaffen der mit dem kommerziellen kompatibel ist.
Mit Basicprogger habe ich bereits mich darüber unterhalten. Wir sind da unterschiedlicher Auffassung. Er möchte ein überarbeitetes Blitz ich ein 100% kompatibles. D. h., wir arbeiten nicht am selben Projekt.

Habe heute nochmal den Lexer umgeschrieben. Er unterstützt nun auch Umlaute:
freeblitz.zip (29 KByte)
Ich muss mich mal etwas zurücknehmen bei den ganzen schönen C# Features, sonst wird wohl möglich noch die Performance darunter zu leiden haben.

Jetzt kann die Arbeit am Parser beginnen.

mfg olli
vertex.dreamfall.at | GitHub
 

lettorTrepuS

BeitragMo, Nov 12, 2007 4:56
Antworten mit Zitat
Benutzer-Profile anzeigen
-aus Sicherheitsgründen gelöscht- Diese Information ist mit Ihrer Sicherheitsfreigabe leider nicht erhältlich, Bürger.

Vertex

BeitragMo, Nov 12, 2007 7:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Ah, war ich also doch zu voreilig ^^ Ist jedenfalls behoben. Lag in der Methode scanIdentifier in Scanner.cs:
Code: [AUSKLAPPEN]
                    // Pop positions
                    character.Content = ' ';
                    character.IsWhitespace = true;
                    character.IsEOF = false;
                    character.Position = savePosition2;
                    character.Row = saveRow;
                    character.Column = saveColumn;
                    reader.BaseStream.Seek(savePosition, SeekOrigin.Begin);

Hatte zuvor nur Content auf ' ' gesetzt, ohne den Character als Whitespace zu und nicht EOF zu markieren. Ergo, es kam beim nächsten NextToken ein Leerzeichen was nicht mehr als Whitespace erkannt wurde und übersprungen werden konnte.

SQLite dafür zu verwenden klingt interessant, kann mir aber nicht vorstellen, dass das schneller sein soll, als die kapazitären ArrayLists.

Danke für die Fehlermeldung ^^

mfg olli
vertex.dreamfall.at | GitHub

TheShadow

Moderator

BeitragMo, Nov 12, 2007 18:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
Jetzt kann die Arbeit am Parser beginnen.


hust - über den Punkt bin ich noch nie drübergekommen... aber evtl. schaffe ich es diesmal

Zitat:
Auch habe ich hier noch einen kleinen Tipp: Verwende am besten SQLite für die Speicherung von Variablen, Types+Felder usw. So kannst du garantiert viel an Geschwindigkeit rausholen.


ich hab mir jetzt sqlite nur grob angeguckt... aber ich denke sqlite ist übertrieben... außerdem wird die Datenbank als Datei abgebildet...
AMD64 3500+ | GeForce6600GT 128MB | 1GB DDR | WinXPsp2
 

FWeinb

ehemals "ich"

BeitragMo, Nov 12, 2007 18:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich verfolge das Thema auch schon sehr lange und bin Ziemlich Beindruckt (ich habe mich noch nie mit Solch einem Thema Befasst (außer ner Kleinen Script Sprache) und bin wircklich überrascht was das für eine Arbeit ist.

@Vertex
Dein Programm läuft bei mir sehr gut er erkennt alles und giebt mir auch keinen Fehler aus
"Wenn die Menschen nur über das sprächen, was sie begreifen, dann würde es sehr still auf der Welt sein." Albert Einstein (1879-1955)
"If you live each day as if it was your last, someday you'll most certainly be right." Steve Jobs
 

lettorTrepuS

BeitragMo, Nov 12, 2007 21:22
Antworten mit Zitat
Benutzer-Profile anzeigen
-aus Sicherheitsgründen gelöscht- Diese Information ist mit Ihrer Sicherheitsfreigabe leider nicht erhältlich, Bürger.
 

Florian

BeitragFr, Nov 16, 2007 23:00
Antworten mit Zitat
Benutzer-Profile anzeigen
BasicCompiler


Input
Code: [AUSKLAPPEN]

FUNCTION MAIN
 DO
 ASM
  PUSH EAX
  PUSH EBX
  MOV EAX,100
  MOV EBX,50
  ADD EAX,EBX
  POP EAX
  POP EBX

  jmp Main_asm

      MessageBoxIrgendeintitel    db "Unglaublich, aber wahr",0
      MessageBoxNixsagenderInhalt db "Tolle Nachricht, was ?",0

  Main_asm:


      push DWORD MB_ICONHAND + MB_OKCANCEL
      push DWORD MessageBoxIrgendeintitel
      push DWORD MessageBoxNixsagenderInhalt
      ;hier kann man das HANDLE fuer unser Fenster angeben,
      ;aber Fenster kommen erst im naechsten Tutorial:
      push DWORD 0
      CALL [MessageBoxA]

 ENDASM
 SYSTEM
 enddo
 EXITFUNCTION
ENDFUNCTION


Output
Code: [AUSKLAPPEN]

%include "win32n.inc"
EXTERN ExitProcess
IMPORT ExitProcess kernel32.dll
EXTERN MessageBoxA
IMPORT MessageBoxA user32.dll
segment .data USE32
ErrorCode dd 0
segment .code USE32
..start
call main
push dword ErrorCode
call [ExitProcess]
main:
;main
L1:
push ebp
mov ebp,esp
L3:

PUSH EAX
PUSH EBX
MOV EAX,100
MOV EBX,50
ADD EAX,EBX
POP EAX
POP EBX
jmp Main_asm
MessageBoxIrgendeintitel db "Unglaublich, aber wahr",0
MessageBoxNixsagenderInhalt db "Tolle Nachricht, was ?",0
Main_asm:
push DWORD MB_ICONHAND+MB_OKCANCEL
push DWORD MessageBoxIrgendeintitel
push DWORD MessageBoxNixsagenderInhalt
;hier kann man das HANDLE fuer unser Fenster angeben,
;aber Fenster kommen erst im naechsten Tutorial:
push DWORD 0
CALL[MessageBoxA]
push dword ErrorCode
call [ExitProcess]
JMP L3
pop ebp
RET
pop ebp
RET

TheShadow

Moderator

BeitragSa, Nov 17, 2007 10:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Und was möchtest du uns mitteilen?
Das man genau so gut nach Assembler konvertieren kann?

Natürlich geht es - ABER...
zum einen muss man wirklich schon ASM seit jahren programmieren, um alle Tricks der Optimierung zu kennen - ansonsten wird es langsamer sein als C.

Beispiel:
i = 320 * 200 * 32

So einen Code würde ein guter Compiler optimieren, und zwar nach: i=2048000
Und dann würde man wiederum auch einen optimierten ASM-Output generieren.
Von solchen Compiler-Optimierungen und ASM-Optimierungen gibt es massenweise.

Setzt man dann auf einen C(++) Compiler, dann wird die Entwicklung enorm vereinfacht - da bei C(++) schon alles durchgekaut ist.


Außerdem ist so ein ASM-Output nicht mehr portabel - d.h. für jedes System muss man große Teile anpassen.
AMD64 3500+ | GeForce6600GT 128MB | 1GB DDR | WinXPsp2

Silver_Knee

BeitragSa, Nov 17, 2007 12:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
SetBuffer BackBuffer(

und der Vertex-lexer sagt:
Code: [AUSKLAPPEN]

Bei blitz würde kommen:
Code: [AUSKLAPPEN]
---------------------------
Blitz Basic
---------------------------
Expecting ')'
---------------------------
OK   
---------------------------

Gehe zu Seite Zurück  1, 2, 3, 4  Weiter

Neue Antwort erstellen


Übersicht Sonstiges Smalltalk

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group