<?xml version="1.0" encoding="utf-8" ?>
<rss version="2.0">
	<channel>
		<title>BlitzBasic Portal Worklogs - B2J - BlitzBasic zu Java Crosscompiler</title>
		<link>https://www.blitzforum.de/worklogs/544/</link>
		<description>Worklog von DAK</description>
		<language>de</language>
		<managingEditor>mail@blitzforum.de</managingEditor>
		<webMaster>mail@blitzforum.de</webMaster>
		<pubDate>Tue, 12 Aug 2014 18:42:52 +0200</pubDate>
		<lastBuildDate>Tue, 12 Aug 2014 18:42:52 +0200</lastBuildDate>

		<item>
			<title>Es lebt doch noch</title>
			<link>https://www.blitzforum.de/worklogs/544/#3753</link>
			<guid>https://www.blitzforum.de/worklogs/544/#3753</guid>
			<author>DAK</author>
			<description>Da es scheinbar doch Interesse an diesem Projekt gibt, und gerade Uni-Ferien sind, habe ich es wieder mal raus geholt und was daran gemacht. Hab dabei &amp;uuml;berraschend schnell die Probleme gel&amp;ouml;st gehabt, an denen ich beim letzten Mal gehangen bin.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;Was jetzt schon alles funktioniert:&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Syntax-Elemente&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;If/Else If/Else/EndIf&lt;br /&gt;While/Wend&lt;br /&gt;Repeat/Until (Forever fehlt noch)&lt;br /&gt;For/Step/Next&lt;br /&gt;Function/End Function&lt;br /&gt;And/Or (Not buggt noch)&lt;br /&gt;Variablen-Autodeklaration mit passenden Typen&lt;br /&gt;Variablen-Autocast&lt;br /&gt;Funktionsaufrufe mit Klammern (ohne Klammern fehlt noch)&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Befehle&lt;/b&gt;&lt;br /&gt;Print&lt;br /&gt;Locate&lt;br /&gt;Input&lt;br /&gt;Delay&lt;br /&gt;Millisecs (z&amp;auml;hlt im Moment noch Millisekunden seit 1.1.1970 statt seit dem letzten Boot)&lt;br /&gt;Sin&lt;br /&gt;Cos&lt;br /&gt;Tan&lt;br /&gt;Graphics&lt;br /&gt;Cls&lt;br /&gt;Line&lt;br /&gt;Rect&lt;br /&gt;Oval&lt;br /&gt;Text&lt;br /&gt;Color&lt;br /&gt;Flip&lt;br /&gt;LoadFont&lt;br /&gt;SetFont&lt;br /&gt;KeyDown (KeyDown und Keyhit erkennnen momentan nur ESC und die Cursor-Tasten, da ich jede Taste einzeln mappen muss)&lt;br /&gt;KeyHit&lt;br /&gt;Exit (Sollte End hei&amp;szlig;en, bin ich gerade drauf gekommen)&lt;br /&gt;chr&lt;br /&gt;asc&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Abweichungen zu BlitzBasic&lt;/b&gt;&lt;br /&gt;Im Moment gibt es nur BackBuffer-Rendering. Das hei&amp;szlig;t, nach Graphics ist nicht der FrontBuffer als Renderziel gesetzt, sondern der BackBuffer.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;Fehlende Syntaxelemente&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;Einzeiler-Ifs&lt;br /&gt;Repeat/Forever&lt;br /&gt;Funktionsaufrufe ohne Klammern&lt;br /&gt;Dim-Arrays&lt;br /&gt;Blitz-Arrays&lt;br /&gt;Types&lt;br /&gt;Goto/Gosub&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Es gibt auch eine &lt;a href=&quot;https://www.blitzforum.de/upload/file.php?id=12879&quot; target=&quot;_blank&quot;&gt;Demo&lt;/a&gt;, die dem momentanen Zustand wiederspiegelt. Das Ding ist nur zu Demozwecken gedacht, nicht f&amp;uuml;r echte Projekte, daf&amp;uuml;r ist es noch nicht stabil genug. Auch sollte B2J bitte nicht dazu verwendet werden, Java zu lernen, da der erstellte Code echt grauenhaft zu lesen ist. Er tut was er soll, ist dabei aber echt nicht sch&amp;ouml;n.&lt;br /&gt;&lt;br /&gt;Wie man den Compiler verwendet und was man daf&amp;uuml;r ben&amp;ouml;tigt findet sich in der Readme im Download.&lt;br /&gt;&lt;br /&gt;Ich habe auch ein neues Demoprojekt erstellt, n&amp;auml;mlich einen kleinen Pong-Klon.&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;img onload=&quot;resize_image(this)&quot; src=&quot;https://www.blitzforum.de/upload/file.php?id=12880&quot; alt=&quot;user posted image&quot; /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Man kann also zumindest ein paar Kleinigkeiten schon damit machen.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Edit:&lt;/b&gt; Den generierten Code kann man sich gerne anschauen, nur nicht als Vorbild nehmen^^</description>
			<pubDate>Tue, 12 Aug 2014 18:42:52 +0200</pubDate>
		</item>

		<item>
			<title>Es werde Bild!</title>
			<link>https://www.blitzforum.de/worklogs/544/#3721</link>
			<guid>https://www.blitzforum.de/worklogs/544/#3721</guid>
			<author>DAK</author>
			<description>Es hat sich seit dem letzten Post doch so einiges getan.&lt;br /&gt;&lt;br /&gt;Zuerst mal das Wichtigste: der Compiler funktioniert soweit (und das ganz gut) und erzeugt Javacode und fertige JARs, was hei&amp;szlig;t, er kann schon lauff&amp;auml;higen Code erzeugen.&lt;br /&gt;&lt;br /&gt;Bislang fehlen noch einige Syntaxelemente (For, Repeat, Select, Default-Werte bei Funktionen, Funktionen ohne Klammern, explizite Casts, Arrays), die nicht fehlen, weil ich sie nicht hinkriege, sondern weil ich bislang noch nicht dazu gekommen bin. Ich habe mich als erstes darauf konzentriert, quasi gerade voraus zu gehen, und so schnell als m&amp;ouml;glich was Sichtbares zu bekommen.&lt;br /&gt;&lt;br /&gt;Der Gro&amp;szlig;teil des BB-Wirrsinns ist ist auch schon drinnen, sowas wie Autocast und Variablen, die aus dem nichts entstehen.&lt;br /&gt;&lt;br /&gt;So jetzt zu dem Interessanten. Ich habe n&amp;auml;mlich begonnen, die Standardlib zusammenzubasteln. Ist nat&amp;uuml;rlich noch nicht viel, gerade mal 11 Befehle, aber es kann schon was, vor allem, weil ich mit der Grafik begonnen habe (nur f&amp;uuml;r dich, Eingeproggt  &lt;img src=&quot;/forum/images/smiles/icon_wink.gif&quot; alt=&quot;Wink&quot; /&gt; ).&lt;br /&gt;&lt;br /&gt;Dazu erzeuge ich ein JFrame als Fenster in dem ein JPanel die Grafik selbst darstellt. JPanels funktionieren leider ziemlich anders als BB, weswegen ich z.B. einen Pseudo-Backbuffer einbauen hab m&amp;uuml;ssen, welcher aber ganz gut geht, und schon wunderbar augenkrebsverursachendes Geblinke auf den Bildschirm werfen kann.&lt;br /&gt;&lt;br /&gt;Wer es testen will, einen Download gibt es &lt;a href=&quot;https://www.blitzforum.de/upload/file.php?id=12625&quot; target=&quot;_blank&quot;&gt;hier&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Ich habe &amp;uuml;brigens Inlinejava und Inlinejavafunction rausgelassen, das wird stattdessen per Extern gemacht.&lt;br /&gt;So ein Extern-Feld schaut so aus:&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;extern&lt;br /&gt;&amp;nbsp; &amp;nbsp;import b2jlibs.ConsoleLib;&lt;br /&gt;&amp;nbsp; &amp;nbsp;ConsoleLib.print&amp;#40;text$&amp;#41;&lt;br /&gt;&amp;nbsp; &amp;nbsp;ConsoleLib.input$&amp;#40;text$&amp;#41;&lt;br /&gt;&amp;nbsp; &amp;nbsp;ConsoleLib.locate&amp;#40;x%,y%&amp;#41;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp; &amp;nbsp;import b2jlibs.basics.TimeAndRandom&lt;br /&gt;&amp;nbsp; &amp;nbsp;TimeAndRandom.delay&amp;#40;ms%&amp;#41;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp; &amp;nbsp;import b2jlibs.graphics.Graphics&lt;br /&gt;&amp;nbsp; &amp;nbsp;Graphics.cls&amp;#40;&amp;#41;&lt;br /&gt;&amp;nbsp; &amp;nbsp;Graphics.graphics&amp;#40;w%,h%,bit%,mode%&amp;#41;&lt;br /&gt;&amp;nbsp; &amp;nbsp;Graphics.line&amp;#40;x1%,y1%,x2%,y2%&amp;#41;&lt;br /&gt;&amp;nbsp; &amp;nbsp;Graphics.rect&amp;#40;x%,y%,w%,h%&amp;#41;&lt;br /&gt;&amp;nbsp; &amp;nbsp;Graphics.text&amp;#40;x%,y%,text$&amp;#41;&lt;br /&gt;&amp;nbsp; &amp;nbsp;Graphics.color&amp;#40;r%,g%,b%&amp;#41;&lt;br /&gt;&amp;nbsp; &amp;nbsp;Graphics.flip&amp;#40;&amp;#41;&lt;br /&gt;endextern&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Es wird also die Java-Klasse, die man verwenden will, importiert, und alle Funktionen, die man braucht, deklariert. Wichtig hierbei: Da Blitz ja nicht objektorientiert ist, m&amp;uuml;ssen s&amp;auml;mtliche so verwendeten Funktionen in Java static sein, und d&amp;uuml;rfen nur die Variablentypen Int, Float und String verwenden, da Blitz ja mit dem Rest nicht umgehen kann.&lt;br /&gt;&lt;br /&gt;Edit: Noch ein Bild:&lt;br /&gt;&lt;span&gt;&lt;img onload=&quot;resize_image(this)&quot; src=&quot;https://www.blitzforum.de/upload/file.php?id=12627&quot; alt=&quot;user posted image&quot; /&gt;&lt;/span&gt;</description>
			<pubDate>Mon, 28 Oct 2013 16:30:45 +0100</pubDate>
		</item>

		<item>
			<title>Zurückrudern und wieder an den Start</title>
			<link>https://www.blitzforum.de/worklogs/544/#3720</link>
			<guid>https://www.blitzforum.de/worklogs/544/#3720</guid>
			<author>DAK</author>
			<description>Da die Designentscheidungen vom vorigen Post ja wirklich nicht gut angekommen sind, habe ich mich entschieden, sie fallen zu lassen, und stattdessen von vorne zu beginnen. (Mein alter selbstgebastelter Compiler h&amp;auml;tte wirkliche Schwierigkeiten mit den meisten von den Punkten gehabt).&lt;br /&gt;&lt;br /&gt;F&amp;uuml;r die neue Version habe ich mir mal auf die Schnelle JavaCC beigebracht, was ist ein Parser-/Compilergenerator. Das Ding ist unglaublich m&amp;auml;chtig, nur leider auch alles andere als simpel und einfach. Statt dass ich z.B. die Rechnungen und Zuweisungen ann&amp;auml;hernd ohne Bearbeitung von Blitz nach Java &amp;uuml;bernehmen kann, muss ich das Parsen jetzt selber machen. Das ist auch das, womit ich mich die letzten Tage &amp;uuml;ber haupts&amp;auml;chlich besch&amp;auml;ftigt habe, daf&amp;uuml;r zu schauen, dass s&amp;auml;mtliche Rechnungen und Zuweisungen korrekt von Blitz nach Java &amp;uuml;bernommen werden. Das funktioniert jetzt auch schon ganz gut.&lt;br /&gt;&lt;br /&gt;Was ich bislang funktionabel habe:&lt;br /&gt;-Zuweisungen und Bedingungen werden korrekt nach Java &amp;uuml;bernommen&lt;br /&gt;-Autocasting zwischen String, Float und Int genau wie in Blitz, dazu noch den Autocast nach Boolean, wo es notwendig ist, um in Java den gleichen Effekt zu haben, wie in Blitz&lt;br /&gt;-If und While funktionieren&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Dazu noch eine weitere &amp;Uuml;berlegung, zu der ich gerne Feedback h&amp;auml;tte:&lt;br /&gt;&lt;u&gt;-Sind die Befehle inlinejava/inlinejavafunction sinnvoll?&lt;/u&gt;&lt;br /&gt;Java und Blitz direkt miteinander interagieren zu lassen, finde ich ein wenig gef&amp;auml;hrlich, vor allem, was Parametertypen von Funktionen angeht. Mit einem un&amp;uuml;berpr&amp;uuml;ftem inlinejava/inlinejavafunction k&amp;ouml;nnte man z.B. eine Funktion definieren, die als Parameter z.B. ein Objekt vom Typ Scanner will. Wenn man jetzt direkt aus Blitz die Funktion aufruft, und dann dort einen falschen Parameter eingibt, kann der Parser nicht mehr automatisch casten (so kann man z.B. beim besten Willen nicht von int auf InetAddress casten, nur als Beispiel), und das &amp;quot;alles geht&amp;quot;, was man in Blitz gewohnt ist, ist nicht mehr gew&amp;auml;hrleistet.&lt;br /&gt;Als Alternative w&amp;uuml;rde sich ein &amp;quot;extern&amp;quot; wie in BlitzMax anbieten. Man schreibt seine Java-Funktionen/-Klassen in ein normales Java-File, und muss im Blitz nur noch mittels extern den Header der Funktion reinschreiben.&lt;br /&gt;&lt;br /&gt;</description>
			<pubDate>Thu, 24 Oct 2013 12:10:14 +0200</pubDate>
		</item>

		<item>
			<title>Designentscheidungen</title>
			<link>https://www.blitzforum.de/worklogs/544/#3718</link>
			<guid>https://www.blitzforum.de/worklogs/544/#3718</guid>
			<author>DAK</author>
			<description>Ich wei&amp;szlig;, der Post kommt schnell nach dem Letzten, aber ich hab ein wenig dar&amp;uuml;ber nachgedacht, wie genau ich den Compiler mache, und h&amp;auml;tte gerne ein paar R&amp;uuml;ckmeldungen dar&amp;uuml;ber, was ihr dazu denkt.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;u&gt;&lt;b&gt;-Implizites Casting, ja oder nein?&lt;/b&gt;&lt;/u&gt;&lt;br /&gt;Ich finde das implizite Castverhalten von Blitz ein wenig m&amp;uuml;hsam, und denke, dass es mehr Fehler verursacht, als es beseitigt.&lt;br /&gt;Beispiel:&lt;br /&gt;[syntax=&amp;quot;bb&amp;quot;]Local x% = 5 ;ist int, wird also nicht gecastet&lt;br /&gt;Local y$ = 3 ;ist int, sollte aber String sein, wird also auf &amp;quot;3&amp;quot; gecastet&lt;br /&gt;Local z% = x+y ;x ist int, y ist String, das hei&amp;szlig;t, x wird automatisch zu &amp;quot;5&amp;quot; gecastet. &amp;quot;5&amp;quot; + &amp;quot;3&amp;quot; = &amp;quot;53&amp;quot;.&lt;br /&gt;;z% ist aber ein int, also wird wieder auf (int) 53 gecastet[/syntax]&lt;br /&gt;&lt;br /&gt;Das automatische &amp;quot;Hochcasten&amp;quot; von Int-&amp;gt;Float-&amp;gt;String tut Java auch, ist auch ansich kein Problem, das Problem kommt erst dann, wenn man erwartet, dass 5+&amp;quot;3&amp;quot; = 8, wenn man also erwartet, dass weil das Ergebnis ein int ist, automatisch auf int gecastet wird.&lt;br /&gt;Java w&amp;uuml;rde an dieser Stelle sich beschweren, und einen expliziten Cast von String auf int erwarten.&lt;br /&gt;&lt;br /&gt;Ich tendiere dazu, das implizite Runtercasten wegzulassen. Was meint ihr?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;u&gt;&lt;b&gt;-Klammern bei Funktionen m&amp;uuml;ssen sein&lt;/b&gt;&lt;/u&gt;&lt;br /&gt;Das steht schon recht fest, dass ich das so behalten werde.&lt;br /&gt;Zur Erl&amp;auml;uterung:&lt;br /&gt;In BB geht Folgendes:&lt;br /&gt;[syntax=&amp;quot;bb&amp;quot;]Print &amp;quot;test&amp;quot;[/syntax]&lt;br /&gt;In Java braucht man die Klammern unbedingt:&lt;br /&gt;[syntax=&amp;quot;bb&amp;quot;]Print(&amp;quot;test&amp;quot;)[/syntax]&lt;br /&gt;Ich denke, das werde ich fix so &amp;uuml;bernehmen, wie es in Java ist, da es in Blitz doch eher Probleme macht, weil:&lt;br /&gt;[syntax=&amp;quot;bb&amp;quot;]Print &amp;quot;test&amp;quot; ;Geht&lt;br /&gt;x = sin y ;Geht nicht&lt;br /&gt;eigeneFunktion ;Geht, solange es keinen Parameter gibt[/syntax]&lt;br /&gt;Das hei&amp;szlig;t:&lt;br /&gt;-Ein Statement ohne irgendwas (einfach nur den Namen einer Funktion) funktioniert als Funktion.&lt;br /&gt;-Eine Funktion l&amp;auml;sst sich ohne Funktionsklammern aufrufen, solange es keinen R&amp;uuml;ckgabewert gibt&lt;br /&gt;&lt;br /&gt;Wirklich schlimm wird es dann in Kombination damit:&lt;br /&gt;[syntax=&amp;quot;bb&amp;quot;]Print(MilliSecs) ;Gibt 0&lt;br /&gt;Print(MilliSecs()) ;Gibt momentane Systemzeit in ms&lt;br /&gt;MilliSecs = 5&lt;br /&gt;Print(MilliSecs) ;Gibt 5[/syntax]&lt;br /&gt;&lt;br /&gt;Dadurch, dass MilliSecs keine Klammern hat, wird es, nicht wie erwartet, als Funktion aufgerufen und der R&amp;uuml;ckgabewert zur&amp;uuml;ckgegeben, sondern als Variable aufgerufen, und der Wert der Variable (uninitialisiert = 0) zur&amp;uuml;ckgegeben.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;u&gt;&lt;b&gt;-Variablen m&amp;uuml;ssen initialisiert werden&lt;/b&gt;&lt;/u&gt;&lt;br /&gt;In Blitz ist eine Variable da, sobald man sie verwendet. Beispiel:&lt;br /&gt;[syntax=&amp;quot;bb&amp;quot;]x = 5&lt;br /&gt;Print(x)[/syntax]&lt;br /&gt;&lt;br /&gt;Das hat wieder seine T&amp;uuml;cken, vor allem sobald man sich vertippt:&lt;br /&gt;[syntax=&amp;quot;bb&amp;quot;]testvar = 5&lt;br /&gt;Print(tetsvar)[/syntax]&lt;br /&gt;Statt dass der Compiler hier einen Fehler wirft, und sagt, diese Variable gibt es gar nicht, l&amp;auml;sst er es einfach durchgehen, und man hat dann einfach ein falsches Rechenergebnis. Bei komplexeren Algos kann dass dann wirklich schwer zu finden sein.&lt;br /&gt;&lt;br /&gt;Variablen werden also wohl (au&amp;szlig;er es gibt gro&amp;szlig;en Gegenspruch dagegen) einzeln initialisiert werden m&amp;uuml;ssen:&lt;br /&gt;[syntax=&amp;quot;bb&amp;quot;]Local testvar% = 5&lt;br /&gt;Print(testvar)[/syntax]&lt;br /&gt;Dabei gilt wie im Standard-Blitz $ =&amp;gt; String, # =&amp;gt; Float, % oder nichts =&amp;gt; Int.&lt;br /&gt;&lt;br /&gt;Was haltet ihr von den Entscheidungen / Ideen?</description>
			<pubDate>Mon, 21 Oct 2013 13:42:02 +0200</pubDate>
		</item>

		<item>
			<title>Inlinejava und was sich unter der Haube tut.</title>
			<link>https://www.blitzforum.de/worklogs/544/#3717</link>
			<guid>https://www.blitzforum.de/worklogs/544/#3717</guid>
			<author>DAK</author>
			<description>So, bin jetzt etwas weiter gekommen.&lt;br /&gt;&lt;br /&gt;Das Wichtigste, was neu dazu gekommen ist, sind includes und inline-Java, da ich beides brauche, um die Standardbibliothek einzubauen.&lt;br /&gt;&lt;br /&gt;Was ich ja nicht wirklich mag, sind &amp;quot;magische Befehle&amp;quot;, also Befehle, der Compiler erm&amp;ouml;glicht, ohne dass ein User &amp;auml;hnliches selber einbauen kann, weswegen ich mich entschieden habe, die Standardbibliothek in einem include-File mit Inlinejava zu schreiben. Aber zum Inline-Java sp&amp;auml;ter noch mehr, davor noch etwas &amp;uuml;ber die Innereien des Compilers.&lt;br /&gt;&lt;br /&gt;[quote=Addi]- Was f&amp;uuml;r einen Parser (recursive descent, oder die bottom up variante) benutzt du und &lt;br /&gt;schreibst du diesen selbst oder hast du ihn generieren lassen.[/quote]&lt;br /&gt;Diese Frage habe ich gef&amp;uuml;rchtet. Ich verwende keinen richtigen Parser per se (im Sinne von dass ich zuerst das Ganze zerlege, und es dann nach dem Parsen wieder zusammensetze), sondern ich ersetze zeilenbasiert die Syntax von Blitz durch die Syntax von Java.&lt;br /&gt;Optimiert wird dabei nicht, da es nachher sowieso durch den Java-Compiler geworfen wird, und der viel besser optimiert, als ich es je k&amp;ouml;nnte.&lt;br /&gt;&lt;br /&gt;Da macht es sich wohl bestraft, dass ich bislang nur einen Compiler geschrieben habe, und der f&amp;uuml;r einen Assembler war &lt;img src=&quot;/forum/images/smiles/icon_wink.gif&quot; alt=&quot;Wink&quot; /&gt;&lt;br /&gt;&lt;br /&gt;Was ich allerdings noch mache, ist ich habe verschiedene &amp;quot;Scopes&amp;quot;, in die geschrieben wird, und zwar drei verschiedene: Main, Global und Function.&lt;br /&gt;&lt;br /&gt;Um das zu verdeutlichen mal folgendes BB-Codesegment:&lt;br /&gt;[syntax=&amp;quot;bb&amp;quot;]Local x = 5&lt;br /&gt;Function test(x)&lt;br /&gt;   Print(&amp;quot;X = &amp;quot;+x)&lt;br /&gt;End Function&lt;br /&gt;Global y = 2&lt;br /&gt;If (x=y+3) Then&lt;br /&gt;   x = 3&lt;br /&gt;EndIf[/syntax]&lt;br /&gt;&lt;br /&gt;In Blitz ist dieses Zusammenw&amp;uuml;rfeln von Hauptfunktion (das &amp;quot;normale&amp;quot; Programm au&amp;szlig;erhalb von Funktionen), Funktionen und Deklarationen von Globalen Variablen erlaubt und voll ok.&lt;br /&gt;In Java geht das leider nicht.&lt;br /&gt;Wird der Codeteil von oben in Java &amp;uuml;bersetzt, dann w&amp;uuml;rde das so ausschauen m&amp;uuml;ssen:&lt;br /&gt;&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;public class test &amp;#123;&lt;br /&gt;&amp;nbsp; &amp;nbsp;static int y;&lt;br /&gt;&amp;nbsp; &amp;nbsp;public void main&amp;#40;String args&amp;#91;&amp;#93;&amp;#41; &amp;#123;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;int x = 5;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;y = 2;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;if &amp;#40;x==y+3&amp;#41; &amp;#123;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;x = 3;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;#125;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;#125;&lt;br /&gt;&amp;nbsp; &amp;nbsp;public static void test&amp;#40;int x&amp;#41; &amp;#123;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;print&amp;#40;&amp;quot;X = &amp;quot;+x&amp;#41;;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;#125;&lt;br /&gt;&amp;#125;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Das hei&amp;szlig;t:&lt;br /&gt;-Die Hauptfunktion in Java ist tats&amp;auml;chlich eine Funktion&lt;br /&gt;-Globale Variablen sowie andere Funktionen m&amp;uuml;ssen au&amp;szlig;erhalb der Hauptfunktion sein&lt;br /&gt;&lt;br /&gt;Das hei&amp;szlig;t, je nach Scope, werden Zeilen wo anders hingeschrieben. Der Scope wird dabei automatisch je nach Schl&amp;uuml;sselwort umgeschalten.&lt;br /&gt;&lt;br /&gt;Jetzt wieder zum Inline-Java. Da gibt es n&amp;auml;mlich zwei verschiedene Varianten:&lt;br /&gt;-inlinejava / endinlinejava&lt;br /&gt;und&lt;br /&gt;-inlinejavafunction / endinlinejavafunction&lt;br /&gt;&lt;br /&gt;Alles zwischen inlinejava und endinlinejava wir 1:1 in den Java-Code &amp;uuml;bernommen. Dabei wird der momentane Scope nicht ge&amp;auml;ndert. Damit kann man z.B. in der Hauptfunktion ein paar Zeilen Java einf&amp;uuml;gen, wenn man z.B. eine Java-Funktion verwenden will, die es in Blitz so nicht gibt.&lt;br /&gt;&lt;br /&gt;Dazu gibt es noch inlinejavafunction (und das dazupassende endinlinejavafunction). Dabei wird wie beim inlinejava-Befehl alles dazwischen direkt in den Java-Code &amp;uuml;bernommen, allerdings auch der Scope auf Function gesetzt. Es wird aber nicht automatisch ein Funktionsheader erstellt.&lt;br /&gt;&lt;br /&gt;Ein Beispiel dazu aus der lib.bb, in der die Standardbibliothek entsteht:&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;inlinejavafunction&lt;br /&gt;&amp;nbsp; &amp;nbsp; public static void print&amp;#40;Object o&amp;#41; &amp;#123;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; System.out.println&amp;#40;&amp;quot;&amp;quot;+o&amp;#41;;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;#125;&lt;br /&gt;endinlinejavafunction&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Ein inlinejavaglobal halte ich f&amp;uuml;r unn&amp;ouml;tig, da man die f&amp;uuml;r die Funktion ben&amp;ouml;tigten globalen Variablen auch direkt vor der Funktion initialisieren kann. Beispiel hierf&amp;uuml;r (auch aus der lib.bb):&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;inlinejavafunction&lt;br /&gt;private static Scanner _bbInstreamScanner = new Scanner&amp;#40;System.in&amp;#41;;&lt;br /&gt;&amp;nbsp; &amp;nbsp; public static String input&amp;#40;String s&amp;#41; &amp;#123;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; System.out.println&amp;#40;&amp;quot;&amp;quot;+s&amp;#41;;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; try&amp;#123;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return _bbInstreamScanner.nextLine&amp;#40;&amp;#41;;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;#125; catch&amp;#40;Exception e&amp;#41; &amp;#123;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; System.exit&amp;#40;1&amp;#41;;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;#125;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return &amp;quot;&amp;quot;;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;#125;&lt;br /&gt;endinlinejavafunction&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Mir ist gerade beim Schreiben noch aufgefallen, dass ein inlinejavaimport, mit dem man weitere Java-Klassen importieren kann, doch sehr n&amp;uuml;tzlich w&amp;auml;re, wird also noch implementiert.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Explizite Casts sind jetzt auch drinnen. Was mir noch etwas schwieriger wird, ist das Implizite Casten von Blitz. Beispiel:&lt;br /&gt;&lt;br /&gt;[syntax=&amp;quot;bb&amp;quot;]local x$ = &amp;quot;5&amp;quot;&lt;br /&gt;local y% = 3&lt;br /&gt;local z# = y+x[/syntax]&lt;br /&gt;&lt;br /&gt;Dabei werden Strings, Ints und Floats automatisch umgecastet, so dass sie passen. In Java gibt es den Autocast in diesem Sinne nur, wenn keine Information verloren geht, das hei&amp;szlig;t von int nach float nach String, aber nicht in die andere Richtung. Da werde ich noch alle impliziten Casts auf Explizite umwandeln m&amp;uuml;ssen.&lt;br /&gt;&lt;br /&gt;Auch die Logik-Befehle sind inzwischen drin, sowie die Variablenvergleiche. Stringvergleiche kommen noch.&lt;br /&gt;&lt;br /&gt;Weiteres Todo:&lt;br /&gt;-Syntax&lt;br /&gt;--Repeat/Select (Fehlen nicht, weil sie so schwer sind, sondern nur weil ich noch nicht dazu gekommen bin, und ich sie selbst so selten verwende)&lt;br /&gt;--Stringvergleiche&lt;br /&gt;--Implizite Casts&lt;br /&gt;&lt;br /&gt;-Standardbibliothek portieren</description>
			<pubDate>Mon, 21 Oct 2013 11:17:49 +0200</pubDate>
		</item>

		<item>
			<title>Erster Anfang</title>
			<link>https://www.blitzforum.de/worklogs/544/#3716</link>
			<guid>https://www.blitzforum.de/worklogs/544/#3716</guid>
			<author>DAK</author>
			<description>Es kennt ja jeder das alte Lied mit BlitzBasic. Es war f&amp;uuml;r viele hier (wie auch f&amp;uuml;r mich) die erste Sprache, mit der man begonnen hat, weil sie so sch&amp;ouml;n einfach zu schreiben ist, und man trotzdem so viel damit machen kann. Aber dadurch, dass es seit mehreren Jahren keine Weiterentwicklung mehr gibt, wird Blitz leider immer inkompatibler mit modernen Windows-Versionen. Dazu kommt, dass Blitz ja wirklich nur auf Windows rennt.&lt;br /&gt;&lt;br /&gt;Also habe ich mir gedacht, ich bastel mal einen BlitzBasic zu Java Crosscompiler. Was der tut, ist, er kompiliert normalen Blitz-Code zu lauff&amp;auml;higem (wenn auch nicht gerade sch&amp;ouml;nem) Java-Code um. Damit hat man dann Blitz-Einfachheit auf der JVM. Der Code wird dann auch gleich mittels javac (falls vorhanden) kompiliert und per jar zu einem netten jar-File verpackt.&lt;br /&gt;Dadurch ist das Programm nicht nur auf Windows, sondern auch auf allen anderen wichtigen Plattformen lauff&amp;auml;hig.&lt;br /&gt;&lt;br /&gt;Bislang hab ich es so weit, dass der gr&amp;ouml;&amp;szlig;ere Teil der Syntax in lauff&amp;auml;higen Code &amp;uuml;bersetzt wird.&lt;br /&gt;Ein Beispiel dazu:&lt;br /&gt;&lt;br /&gt;[syntax=&amp;quot;bb&amp;quot;]While (True)&lt;br /&gt;	Local name$ = getName()&lt;br /&gt;	begruessen(name);&lt;br /&gt;Wend&lt;br /&gt;&lt;br /&gt;Function getName$()&lt;br /&gt;	Return Input(&amp;quot;Wie heisst du? &amp;quot;)&lt;br /&gt;End Function&lt;br /&gt;&lt;br /&gt;Function begruessen(name$)&lt;br /&gt;	Print(&amp;quot;Hallo &amp;quot;+name)&lt;br /&gt;End Function[/syntax]&lt;br /&gt;&lt;br /&gt;wird zu&lt;br /&gt;&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;//Created using David Krywult's amazing B2J-Compiler&lt;br /&gt;import java.util.Scanner;&lt;br /&gt;public class test &amp;#123;&lt;br /&gt;&amp;nbsp; &amp;nbsp;public static void main&amp;#40;String&amp;#91;&amp;#93; args&amp;#41; &amp;#123;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;while &amp;#40;true&amp;#41; &amp;#123;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;String name = getname&amp;#40;&amp;#41;;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;begruessen&amp;#40;name&amp;#41;;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;#125;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;#125;&lt;br /&gt;&amp;nbsp; &amp;nbsp;public static void print&amp;#40;Object o&amp;#41; &amp;#123;System.out.println&amp;#40;&amp;quot;&amp;quot;+o&amp;#41;;&amp;#125;&lt;br /&gt;&amp;nbsp; &amp;nbsp;private static Scanner _bbInstreamScanner = new Scanner&amp;#40;System.in&amp;#41;;&lt;br /&gt;&amp;nbsp; &amp;nbsp;public static String input&amp;#40;String s&amp;#41; &amp;#123;System.out.println&amp;#40;&amp;quot;&amp;quot;+s&amp;#41;;try&amp;#123;return _bbInstreamScanner.nextLine&amp;#40;&amp;#41;;&amp;#125;catch&amp;#40;Exception e&amp;#41;&amp;#123;System.exit&amp;#40;1&amp;#41;;return &amp;quot;&amp;quot;;&amp;#125;&amp;#125;&lt;br /&gt;&amp;nbsp; &amp;nbsp;public static String getname&amp;#40;&amp;#41; &amp;#123;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;return input&amp;#40;&amp;quot;Wie heisst du? &amp;quot;&amp;#41;;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;#125;&lt;br /&gt;&amp;nbsp; &amp;nbsp;public static int begruessen&amp;#40;String name&amp;#41; &amp;#123;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;print&amp;#40;&amp;quot;Hallo &amp;quot;+name&amp;#41;;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;return 0;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;#125;&lt;br /&gt;&amp;#125;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Was dann zuerst in eine .java &amp;uuml;bersetzt und dannin eine .jar gepackt wird, die man dann ausf&amp;uuml;hren kann.&lt;br /&gt;&lt;br /&gt;Wer das Ganze ausprobieren m&amp;ouml;chte, kann sich eine Techdemo &lt;a href=&quot;https://www.blitzforum.de/upload/file.php?id=12614&quot; target=&quot;_blank&quot;&gt;hier&lt;/a&gt; runterladen.&lt;br /&gt;&lt;br /&gt;N&amp;auml;chste Sachen am Todo:&lt;br /&gt;-Rest der Syntax implementieren&lt;br /&gt;--Repeat&lt;br /&gt;--Variablenvergleiche (= wird zu ==, &amp;lt;&amp;gt; zu !=) (inzwischen erledigt)&lt;br /&gt;--And, Not, Or implementieren&lt;br /&gt;--Stringvergleiche&lt;br /&gt;&lt;br /&gt;-Inline-Java erm&amp;ouml;glichen&lt;br /&gt;-Imports folgen&lt;br /&gt;&lt;br /&gt;-Standardbibliothek portieren (noch ohne 2D-Grafik, die kommt sp&amp;auml;ter dann, wenn sonst alles geht)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Besteht Interesse an dem Projekt?</description>
			<pubDate>Sat, 19 Oct 2013 18:38:35 +0200</pubDate>
		</item>


	</channel>
</rss>
