<?xml version="1.0" encoding="utf-8" ?>
<rss version="2.0">
	<channel>
		<title>BlitzBasic Portal Worklogs - VisualBlitz - B3D &amp; BMax in Visual Studio</title>
		<link>https://www.blitzforum.de/worklogs/548/</link>
		<description>Worklog von PacMani</description>
		<language>de</language>
		<managingEditor>mail@blitzforum.de</managingEditor>
		<webMaster>mail@blitzforum.de</webMaster>
		<pubDate>Wed, 23 Jul 2014 15:14:16 +0200</pubDate>
		<lastBuildDate>Wed, 23 Jul 2014 15:14:16 +0200</lastBuildDate>

		<item>
			<title>Ein kleines Update über ANTLR</title>
			<link>https://www.blitzforum.de/worklogs/548/#3752</link>
			<guid>https://www.blitzforum.de/worklogs/548/#3752</guid>
			<author>PacMani</author>
			<description>Da die n&amp;auml;chste Phase etwas l&amp;auml;nger dauert, gebe ich mal ein kurzes Update dar&amp;uuml;ber woran ich gerade arbeite.&lt;br /&gt;&lt;br /&gt;Ich habe nun die Sprache analysiert und aufgeschrieben, welche Dinge alle zu beachten sind, um BlitzBasic richtig parsen zu k&amp;ouml;nnen. Dabei habe ich auch viele merkw&amp;uuml;rdige Schreibweisen ausprobiert um herauszufinden, wie BlitzBasic auch auf schludrige Programmierung reagiert (denn die ist leider nicht selten).&lt;br /&gt;Im letzten Post hatte ich ja bereits einige Dinge angesprochen, die ich so nicht erwartet h&amp;auml;tte, welche aber (gr&amp;ouml;&amp;szlig;tenteils) gl&amp;uuml;cklicherweise logische Hintergr&amp;uuml;nde hatten.&lt;br /&gt;&lt;br /&gt;Nun setze ich ANTLR ein, um BlitzBasic zu lexen und zu parsen. ANTLR erkl&amp;auml;rt sich am besten selbst; die Abk&amp;uuml;rzung steht f&amp;uuml;r &amp;quot;&lt;b&gt;An&lt;/b&gt;other &lt;b&gt;T&lt;/b&gt;ool for &lt;b&gt;L&lt;/b&gt;anguage &lt;b&gt;R&lt;/b&gt;ecognition&amp;quot; und besteht einfach gesagt aus zwei Dingen:&lt;br /&gt;&lt;br /&gt;Zun&amp;auml;chst ist da die ANTLR-&amp;quot;Grammar&amp;quot;, eine Sprache, mit der Sprachen definiert werden. Textuell wird hier im ANTLR-Grammer-Format niedergeschrieben, was z.B. ein Keyword / Operator / Whitespace ist und wie Bedingungen aufgebaut sind. Es ist also die ANTLR-kompatible Abbildung meiner niedergeschriebenen Notizen, um BlitzBasic in seine einzelne Bestandteile auseinander nehmen und analysieren zu k&amp;ouml;nnen.&lt;br /&gt;&lt;br /&gt;Dann ist ANTLR selbst ein Tool, was aus der Grammar-Datei einen Parser und einen Lexer erstellt - also echte Klassen, die sp&amp;auml;ter im Code verwendet werden. Gl&amp;uuml;cklicherweise gibt es von ANTLR eine C#-Version, die C#-Code erzeugt - da mein VS-Package auch in C# geschrieben ist, l&amp;auml;sst sich dies wunderbar einbinden (neben C# erzeugt das urspr&amp;uuml;ngliche ANTLR Java-Code und ist auch in Java selber geschrieben).&lt;br /&gt;Die Arbeit, selber das &amp;quot;Ger&amp;uuml;st&amp;quot; f&amp;uuml;r einen Parser zu schreiben, entf&amp;auml;llt damit, denn die erledigt ANTLR f&amp;uuml;r mich.&lt;br /&gt;&lt;br /&gt;Mithilfe dieser Klassen kann ich dann die BB-Syntax von Anfang bis Ende abklopfen und mein Syntaxhighlighting darauf anwenden sowie intern die Liste der Variablen / Typen / etc. aktualisieren oder G&amp;uuml;ltigkeitsbereiche erkennen.&lt;br /&gt;&lt;br /&gt;Hoffentlich gibt es bald wieder etwas zu sehen, dann gibt's auch interessantere Screenshots. Soviel erstmal zum Thema Parsen und Lexen. =)</description>
			<pubDate>Wed, 23 Jul 2014 15:14:16 +0200</pubDate>
		</item>

		<item>
			<title>Blitz3D-Merkwürdigkeiten</title>
			<link>https://www.blitzforum.de/worklogs/548/#3747</link>
			<guid>https://www.blitzforum.de/worklogs/548/#3747</guid>
			<author>PacMani</author>
			<description>Ich wahr mitten beim Implementieren des Syntax Highlightings von Blitz3D, da fielen mir einige interessante Merkw&amp;uuml;rdigkeiten vom BlitzCC (dem Blitz3D Compiler) auf.&lt;br /&gt;&lt;br /&gt;Die Syntax von Blitz3D scheint mir an manchen Stellen unausgereift zu sein. Zumindest sind einige Dinge m&amp;ouml;glich, die einfach nur verwirrend sind. Hier eine Auflistung einiger Mysteriosit&amp;auml;ten, die mir &amp;uuml;ber den Weg gelaufen sind.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Fake Leerzeichen in Variablen-Namen&lt;/b&gt;&lt;br /&gt;Es ist m&amp;ouml;glich, eine Variable mit Leerzeichen im Namen zu definieren.&lt;br /&gt;&lt;b&gt;Code: &lt;/b&gt;&lt;span style=&quot;font-size:0.8em; display:inline;&quot; id=&quot;showcodebox0&quot;&gt; &lt;a href=&quot;javascript&amp;#058;show_code('0')&quot;&gt;[AUSKLAPPEN]&lt;/a&gt; &lt;/span&gt;&lt;span style=&quot;font-size:0.8em; display:none;&quot; id=&quot;hidecodebox0&quot;&gt; &lt;a href=&quot;javascript&amp;#058;hide_code('0')&quot;&gt;[EINKLAPPEN]&lt;/a&gt; &lt;/span&gt;&lt;div id=&quot;codebox0&quot; class=&quot;codebox&quot; style=&quot;max-height: 200px;&quot; onload=&quot;check_code('0');&quot;&gt;Global Variable&amp;nbsp;Mit&amp;nbsp;Leerzeichen = 1&lt;br /&gt;DebugLog&amp;#40;Variable&amp;nbsp;Mit&amp;nbsp;Leerzeichen&amp;#41;&lt;/div&gt;&lt;br /&gt;Dieses Programm gibt brav 1 aus und erzeugt keinen Syntaxfehler. Wie kann das sein?&lt;br /&gt;Okay, ich habe etwas gelogen. Der Variablenname besitzt keine Leerzeichen. Das sieht nur so aus. Tats&amp;auml;chlich handelt es sich hier allerdings um &amp;quot;Fake Leerzeichen&amp;quot;, die mit der Tastenkombination Alt+255 (auf dem Numpad) erzeugbar sind (es wird ein Zeichen mit dem ASCII-Wert 255 erzeugt). W&amp;uuml;rde ich diese Zeichen gegen Unterstriche austauschen, sieht der Code schon viel logischer aus:&lt;br /&gt;[syntax=&amp;quot;bb&amp;quot;]Global Variable_Mit_Leerzeichen = 1&lt;br /&gt;DebugLog(Variable_Mit_Leerzeichen)[/syntax]&lt;br /&gt;Dennoch ist es fahrl&amp;auml;ssig, das der BlitzCC das zul&amp;auml;sst. Moderne Programmiersprachen wie C# erlauben den ganzen Unicode-Block &amp;quot;Whitespaces&amp;quot; nicht und deuten diese als Trenner von Sprachelementen. Klar, Blitz3D-Dateien d&amp;uuml;rfen an sich nichtmal Unicode sein und k&amp;ouml;nnen auf diese Methode nicht zur&amp;uuml;ckgreifen - dennoch w&amp;auml;re ein einfacher Check von Alt+255 nicht sonderlich schwer gewesen. Zumal sonst auch alle anderen ASCII-Zeichen, die keine Buchstaben oder Zahlen sind, nicht erlaubt.&lt;br /&gt;&amp;Uuml;brigens rallt das weder IDEal noch der Syntax Highlighter hier. Der &amp;quot;Mit Leerzeichen&amp;quot;-Teil wird jeweils zu zwei weiteren Variablen gedeutet.&lt;br /&gt;Ich sollte es dagegen so wie der Compiler parsen, f&amp;uuml;r sp&amp;auml;tere Funktionalit&amp;auml;ten wird das wichtig (z.B. einer einfachen Variablenliste aus der dann Intellisense erzeugt wird).&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Altmodische Initialisierung mehrerer Variablen in einer Zeile&lt;/b&gt;&lt;br /&gt;Leider nutzt BlitzBasic die altmodische Art, mehrere Variablen in einer Zeile zu initialisieren - oder eben nur die letzte davon, wie der folgende Code demonstiert:&lt;br /&gt;[syntax=&amp;quot;bb]Global Variable1, Variable2 = 2&lt;br /&gt;DebugLog(Variable1)&lt;br /&gt;DebugLog(Variable2)[/syntax]&lt;br /&gt;Dies gibt &amp;quot;0&amp;quot; und &amp;quot;2&amp;quot; aus.&lt;br /&gt;Zun&amp;auml;chst verst&amp;ouml;rt es, dass die 2 nur an die zuletzt genannte Variable zugewiesen wird. In moderneren Sprachen bekommt jede der in der Zeile genannten Variablen den Wert 2 zugewiesen.&lt;br /&gt;Damit der Effekt klarer wird, sollte man diese Art der Initialisierung als Programmierer lieber lassen und folgendes schreiben:&lt;br /&gt;[syntax=&amp;quot;bb]Global Variable1 = 2&lt;br /&gt;Global Variable2 = Variable1&lt;br /&gt;DebugLog(Variable1)&lt;br /&gt;DebugLog(Variable2)[/syntax]&lt;br /&gt;Dies gibt beide Male 2 aus.&lt;br /&gt;&lt;i&gt;Nachtrag:&lt;/i&gt; Hier bin ich wohl tats&amp;auml;chlich mit etwas anderem durcheinander gekommen. Folgendes VB-Beispiel: &lt;br /&gt;&lt;b&gt;Code: &lt;/b&gt;&lt;span style=&quot;font-size:0.8em; display:inline;&quot; id=&quot;showcodebox1&quot;&gt; &lt;a href=&quot;javascript&amp;#058;show_code('1')&quot;&gt;[AUSKLAPPEN]&lt;/a&gt; &lt;/span&gt;&lt;span style=&quot;font-size:0.8em; display:none;&quot; id=&quot;hidecodebox1&quot;&gt; &lt;a href=&quot;javascript&amp;#058;hide_code('1')&quot;&gt;[EINKLAPPEN]&lt;/a&gt; &lt;/span&gt;&lt;div id=&quot;codebox1&quot; class=&quot;codebox&quot; style=&quot;max-height: 200px;&quot; onload=&quot;check_code('1');&quot;&gt;Dim a, b, c As String&lt;/div&gt;&lt;br /&gt;Im alten VB6 hat dies zwei Integer a und b und einen String deklariert. c war ein String. &lt;br /&gt;Im neuen VB.NET werden drei Strings deklariert. Das finde ich vern&amp;uuml;nftiger, weil man es auch so von der Leseart her erwartet. Sowas ist in BB aber ohnehin nicht m&amp;ouml;glich, da Typen direkt hinter dem Variablennamen stehen.&lt;br /&gt;Das mit der Wertezuweisung bei der Deklaration ist nat&amp;uuml;rlich eine ganz andere Sache. Ist die Frage, was sch&amp;ouml;ner ist. Aber in C ist es bisher auch nicht anders abgelaufen wie in BB. Von daher nochmal ein Sorry f&amp;uuml;r meine Verwirrtheit &lt;img src=&quot;/forum/images/smiles/icon_wink.gif&quot; alt=&quot;Wink&quot; /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Komma vergessen? Let's mess!&lt;/b&gt;&lt;br /&gt;Noch schlimmer wird die soeben genannte Geschichte, wenn man Kommata vergisst. Betrachten wir diesen Code:&lt;br /&gt;[syntax=&amp;quot;bb&amp;quot;]Global Variable1 Variable2 = 2&lt;br /&gt;DebugLog(Variable1)&lt;br /&gt;DebugLog(Variable2)[/syntax]&lt;br /&gt;Dies gibt 0 und 2 aus. Es wurden also auf jeden Fall schonmal zwei Variablen definiert (wenn auch wieder verwirrend initialisiert). Dumm nur, dass Variable1 eine globale Variable geworden ist und Variable2 eine lokale. Verwirrung pur.&lt;br /&gt;Was hier passiert, ist dass Variable2 keine explizit deklarierte Variable ist (man vergesse nicht, dass in Blitz Variablen zuvor leider nicht als Local / Global oder Dim deklariert werden m&amp;uuml;ssen, sondern einfach &amp;quot;On-The-Fly&amp;quot; genutzt werden k&amp;ouml;nnen). Sie wird demnach als Local definiert wie jede andere nicht zuvor deklarierte Variable.&lt;br /&gt;Warum jetzt allerdings &amp;uuml;berhaupt eine zweite Variable nach einer anderen Definition genannt werden kann, ohne dass man ein Komma erw&amp;auml;hnt, ist mir noch nicht ganz klar geworden, der Grund liegt ggf. woanders - oder es gibt garkeinen.&lt;br /&gt;&lt;i&gt;Nachtrag:&lt;/i&gt; Xeres hat hinzugef&amp;uuml;gt: Ein Statement kann auch durch ein Leerzeichen abgeschlossen werden, nicht nur durch einen Zeilenumbruch. Dadurch ergibt die Verhaltensweise von BB wieder einen Sinn. Der Compiler sieht im Grunde folgendes:&lt;br /&gt;[syntax=&amp;quot;bb&amp;quot;]Global Variable1&lt;br /&gt;Variable2 = 2&lt;br /&gt;DebugLog(Variable1)&lt;br /&gt;DebugLog(Variable2)[/syntax]&lt;br /&gt;Da ich mich darauf verlassen habe, dass nur Zeilenumbr&amp;uuml;che das Statement abschlie&amp;szlig;en, konnte ich das nicht richtig deuten. Die on-the-fly deklarierte Variable2 wird dementsprechend nat&amp;uuml;rlich Local, und Variable1 bekommt keinen Wert zugewiesen.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Wissenschaftliche Schreibweise darf man nicht selber verwenden&lt;/b&gt;&lt;br /&gt;Wir kennen ja, das Blitz gern extrem gro&amp;szlig;e oder kleine Zahlen in der wissenschaftlichen Schreibweise mit e ausgibt:&lt;br /&gt;[syntax=&amp;quot;bb&amp;quot;]Global zahl# = 0.000000000000000003&lt;br /&gt;DebugLog(zahl)&lt;br /&gt;[/syntax]&lt;br /&gt;Das gibt &amp;quot;3.e-018&amp;quot; aus.&lt;br /&gt;Aber wehe dem, der versucht, das selber so im Code zu schreiben:&lt;br /&gt;[syntax=&amp;quot;bb&amp;quot;]Global zahl# = 3.e-018&lt;br /&gt;DebugLog(zahl)&lt;br /&gt;[/syntax]&lt;br /&gt;Das l&amp;auml;sst sich garnicht erst compilieren und bricht mit der Fehlermeldung &amp;quot;Function e not found&amp;quot; ab.&lt;br /&gt;Okay, das macht es f&amp;uuml;r mich einfacher, Literale (also Zahlen) zu erkennen.&lt;br /&gt;Dennoch merkw&amp;uuml;rdig, wieso der Compiler hier eine Funktion vermutet. Hinter einem Punkt h&amp;auml;tte ich eher einen Type erwartet. Aber naja, mir ist das egal &lt;img src=&quot;/forum/images/smiles/icon_wink.gif&quot; alt=&quot;Wink&quot; /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Unterstrich am Anfang eines Variablennamens ist verboten&lt;/b&gt;&lt;br /&gt;Was mir jede andere bekannte und breiter verwendete Programmiersprache erlaubt, geht in Blitz3D nicht: Unterstriche am Anfang von Variablennamen:&lt;br /&gt;[syntax=&amp;quot;bb&amp;quot;]Global bla&lt;br /&gt;Global _laber[/syntax]&lt;br /&gt;Wegen der zweiten Zeile l&amp;auml;sst sich das Programm nicht kompilieren. Schade. Gerade in C# nutze ich den Unterstrich so, um Felder einer Klasse zu kennzeichnen. Na gut, Klassen hat B3D ja eh nicht &lt;img src=&quot;/forum/images/smiles/icon_smile.gif&quot; alt=&quot;Smile&quot; /&gt;&lt;br /&gt;Ach ja, das Fake-Leerzeichen ist am Anfang allerdings erlaubt!&lt;br /&gt;&lt;b&gt;Code: &lt;/b&gt;&lt;span style=&quot;font-size:0.8em; display:inline;&quot; id=&quot;showcodebox2&quot;&gt; &lt;a href=&quot;javascript&amp;#058;show_code('2')&quot;&gt;[AUSKLAPPEN]&lt;/a&gt; &lt;/span&gt;&lt;span style=&quot;font-size:0.8em; display:none;&quot; id=&quot;hidecodebox2&quot;&gt; &lt;a href=&quot;javascript&amp;#058;hide_code('2')&quot;&gt;[EINKLAPPEN]&lt;/a&gt; &lt;/span&gt;&lt;div id=&quot;codebox2&quot; class=&quot;codebox&quot; style=&quot;max-height: 200px;&quot; onload=&quot;check_code('2');&quot;&gt;Global&amp;nbsp; bla&lt;br /&gt;Global &amp;nbsp;bla&lt;/div&gt;&lt;br /&gt;Das deklariert &amp;quot;bla&amp;quot; und &amp;quot;&amp;nbsp;bla&amp;quot; als eigenst&amp;auml;ndige Variablen. Die endg&amp;uuml;ltige Methode meines Classifiers sieht demnach am Ende so aus, um den g&amp;uuml;ltigen Start von Variablennamen zu erkennen (C#):&lt;br /&gt;&lt;b&gt;Code: &lt;/b&gt;&lt;span style=&quot;font-size:0.8em; display:inline;&quot; id=&quot;showcodebox3&quot;&gt; &lt;a href=&quot;javascript&amp;#058;show_code('3')&quot;&gt;[AUSKLAPPEN]&lt;/a&gt; &lt;/span&gt;&lt;span style=&quot;font-size:0.8em; display:none;&quot; id=&quot;hidecodebox3&quot;&gt; &lt;a href=&quot;javascript&amp;#058;hide_code('3')&quot;&gt;[EINKLAPPEN]&lt;/a&gt; &lt;/span&gt;&lt;div id=&quot;codebox3&quot; class=&quot;codebox&quot; style=&quot;max-height: 200px;&quot; onload=&quot;check_code('3');&quot;&gt;private static bool IsNameStart&amp;#40;char character&amp;#41;&lt;br /&gt;&amp;#123;&lt;br /&gt;&amp;nbsp; &amp;nbsp; int asciiCode = &amp;#40;int&amp;#41;character;&lt;br /&gt;&amp;nbsp; &amp;nbsp; return &amp;#40;asciiCode &amp;gt;= 65 &amp;amp;&amp;amp; asciiCode &amp;lt;= 90&amp;#41;&amp;nbsp; // Uppercase letters&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; || &amp;#40;asciiCode &amp;gt;= 97 &amp;amp;&amp;amp; asciiCode &amp;lt;= 122&amp;#41; // Lowercase letters&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; || asciiCode == 255;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// Non-breakable space&lt;br /&gt;&amp;#125;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Sicherlich fallen mir noch mehr Dinge auf, welche ich in einem nachfolgenden Teil ansprechen werde.&lt;br /&gt;&lt;br /&gt;Das man alle genannten &amp;quot;Features&amp;quot; dazu nutzen kann, um unglaublich verwirrenden und m&amp;uuml;lligen Code schreiben zu k&amp;ouml;nnen (Stichwort Obfuscation?), sollte klar sein:&lt;br /&gt;&lt;b&gt;Code: &lt;/b&gt;&lt;span style=&quot;font-size:0.8em; display:inline;&quot; id=&quot;showcodebox4&quot;&gt; &lt;a href=&quot;javascript&amp;#058;show_code('4')&quot;&gt;[AUSKLAPPEN]&lt;/a&gt; &lt;/span&gt;&lt;span style=&quot;font-size:0.8em; display:none;&quot; id=&quot;hidecodebox4&quot;&gt; &lt;a href=&quot;javascript&amp;#058;hide_code('4')&quot;&gt;[EINKLAPPEN]&lt;/a&gt; &lt;/span&gt;&lt;div id=&quot;codebox4&quot; class=&quot;codebox&quot; style=&quot;max-height: 200px;&quot; onload=&quot;check_code('4');&quot;&gt;Global Pflaumen Apfel = 1 &lt;br /&gt;Global Pfirsiche Trauben = 2 &lt;br /&gt;Const&amp;nbsp;Bananen = 3 &lt;br /&gt;&lt;br /&gt;Apfel = Apfel + 4 &lt;br /&gt;Trauben = Trauben + 3 &lt;br /&gt;Bananen = 5 &lt;br /&gt;&lt;br /&gt;DebugLog&amp;#40;Pflaumen&amp;#41; &lt;br /&gt;DebugLog&amp;#40;Pfirsiche&amp;#41; &lt;br /&gt;DebugLog&amp;#40;Trauben&amp;#41; &lt;br /&gt;DebugLog&amp;#40;Apfel&amp;#41; &lt;br /&gt;DebugLog&amp;#40;Bananen&amp;#41;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Ausgabe: 0, 0, 3, 5 und 5. Und ja, es l&amp;auml;sst sich compilieren. &lt;img src=&quot;/forum/images/smiles/icon_smile.gif&quot; alt=&quot;Smile&quot; /&gt; Wer erkl&amp;auml;rt, warum? &lt;img src=&quot;/forum/images/smiles/icon_wink.gif&quot; alt=&quot;Wink&quot; /&gt; Achtung: Kann sein, dass der Code-Tag hier im Post Fake-Leerzeichen in normale umwandelt.</description>
			<pubDate>Sun, 22 Jun 2014 13:08:14 +0200</pubDate>
		</item>

		<item>
			<title>Aller Anfang ist Blitz3D</title>
			<link>https://www.blitzforum.de/worklogs/548/#3746</link>
			<guid>https://www.blitzforum.de/worklogs/548/#3746</guid>
			<author>PacMani</author>
			<description>Hallo liebe BBler!&lt;br /&gt;&lt;br /&gt;Wie vor einiger Zeit angek&amp;uuml;ndigt, habe ich vor, Blitz3D und anschlie&amp;szlig;end BlitzMax in Microsoft Visual Studio zu integrieren. Visual Studio erm&amp;ouml;glicht eine sehr flexible und leistungsstarke Integration von eigenen und anderen Sprachen. So wurde bereits Python und PHP komplett mit Debugging-Funktionen, IntelliSense, Syntax-Hervorhebung und Tooltips implementiert, die dem Entwickler das Leben leichter machen. Interessant ist auch, dass man mit VS Integrated eine komplette Blitz-IDE zur Verf&amp;uuml;gung stellen kann, die Visual Studio-Technik unter der Haube benutzt und auch so aussieht - und das v&amp;ouml;llig kostenlos f&amp;uuml;r andere. Die unterst&amp;uuml;tzt dann halt nur B3D und im Nachhinein BMax, nicht die anderen Microsoft-Sprachen.&lt;br /&gt;&lt;br /&gt;Nun bin ich mit der Integration von zun&amp;auml;chst Blitz3D und anschlie&amp;szlig;end BlitzMax dran. Aber, warum eigentlich? Ist Blitz3D nicht von vornerein veraltet und man sollte nicht gleich BlitzMax nehmen? Ich habe dar&amp;uuml;ber lange nachgedacht und kam zu dem Entschluss: Geh' es langsam an.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Blitz3D ist deutlicher einfacher aufgebaut als BlitzMax. Kein &amp;quot;echtes&amp;quot; OOP, keine Zeilenumbr&amp;uuml;che - das klingt banal aber macht die Implementierung der Sprache in VS deutlich leichter. Schlie&amp;szlig;lich muss ich Parser, Lexer, Tokenizer, Colorizer etc. selber programmieren, um den Mist zu deuten, den der Programmierer verbockt hat &lt;img src=&quot;/forum/images/smiles/icon_wink.gif&quot; alt=&quot;Wink&quot; /&gt;. Erst dann kann ich Syntax hervorheben oder IntelliSense anbieten.&lt;br /&gt;&lt;li&gt;BlitzMax hat es dagegen in sich. Echte Klassen und dazugeh&amp;ouml;rige Methoden machen schon die Behandlung von sogenannten Scopes komplizierter - also wann eine Methode aufgerufen werden kann (nur von der Instanz der Klasse) und wann nicht.&lt;br /&gt;&lt;li&gt;Deswegen gehe ich BlitzMax erst danach an und benutze meine gewonnenen Kenntnisse in Blitz3D, um Support f&amp;uuml;r BMax anzubieten.&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Das tolle an den Visual Studio-Erweiterungen (sogenannte &amp;quot;Packages&amp;quot;) ist, dass ich ein Feature nach dem anderen hinzuf&amp;uuml;gen kann. Also erstmal die Syntax-Hervorhebung, und sp&amp;auml;ter dann, wenn ich Lust habe (&lt;img src=&quot;/forum/images/smiles/icon_razz.gif&quot; alt=&quot;Razz&quot; /&gt;) z.B. IntelliSense. Im Grunde funktioniert so eine Erweiterung wie ein Eimer, in den man Features hineinwirft.&lt;br /&gt;&lt;br /&gt;Welche Features habe ich in welcher Reihenfolge vor?&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Syntaxhervorhebung. Der Tokenizer, der hierf&amp;uuml;r notwendig wird, kann von vielen nachfolgenden Komponenten genutzt werden.&lt;br /&gt;&lt;li&gt;Automatische Einr&amp;uuml;ckung und Formatierung. Am besten vom Benutzer einstellbar.&lt;br /&gt;&lt;li&gt;Automatische Klammererg&amp;auml;nzung.&lt;br /&gt;&lt;li&gt;B3D-Projektmappen und externen Kompiler anbinden, damit die Arbeit in Visual Studio erst richtig Sinn ergibt.&lt;br /&gt;&lt;li&gt;Outlining von Text, sprich Ein- und Ausklappen von Functions oder Types.&lt;br /&gt;&lt;li&gt;Anweisungsvervollst&amp;auml;ndigung. Sowas wie IntelliSense.&lt;br /&gt;&lt;li&gt;Navigationsleiste (die Comboboxen &amp;uuml;ber dem Visual Studio-Texteditor)&lt;br /&gt;&lt;li&gt;Tooltips. So kann ein &amp;uuml;ber der Funktion stehender Kommentar als Tooltip angezeigt werden, wie javadoc oder XML-Summaries.&lt;br /&gt;&lt;li&gt;Syntaxfehler erkennen und unterstreichen. Das kommt erst so sp&amp;auml;t dran, weil ich hier noch nicht genau wei&amp;szlig;, wie ich in VS vorzugehen habe.&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Wenn sich der Compiler und Debugger von Blitz3D aufknacken l&amp;auml;sst, w&amp;uuml;rde ich auch gerne ein integriertes Debugging in Visual Studio erm&amp;ouml;glichen. Nur leider wird der Blitz3D-Compiler da recht unzug&amp;auml;nglich sein. Mal sehen, was sich machen l&amp;auml;sst.&lt;br /&gt;&lt;br /&gt;Die Arbeit am Syntax-Highlighting habe ich bereits begonnen. Die ersten Ergebnisse nach einer Stunde Arbeit: schrullig, aber Proof-Of-Concept geeignet &lt;img src=&quot;/forum/images/smiles/icon_wink.gif&quot; alt=&quot;Wink&quot; /&gt;&lt;br /&gt;&lt;span&gt;&lt;img onload=&quot;resize_image(this)&quot; src=&quot;http://pacmani.vibeware.net/blitzforum/visualblitz/syntax001.png&quot; alt=&quot;user posted image&quot; /&gt;&lt;/span&gt;</description>
			<pubDate>Sun, 15 Jun 2014 11:40:42 +0200</pubDate>
		</item>


	</channel>
</rss>
