{"id":385,"date":"2009-08-04T09:49:00","date_gmt":"2009-08-04T09:49:00","guid":{"rendered":"http:\/\/www.tutego.de\/blog\/javainsel\/?p=385"},"modified":"2009-08-04T09:49:00","modified_gmt":"2009-08-04T09:49:00","slug":"iphone-applikationen-mit-java-entwickeln-xmlvm","status":"publish","type":"post","link":"https:\/\/www.tutego.de\/blog\/javainsel\/2009\/08\/iphone-applikationen-mit-java-entwickeln-xmlvm\/","title":{"rendered":"iPhone-Applikationen mit Java entwickeln (XMLVM)"},"content":{"rendered":"<p>Ein gro\u00dfartiges Projekt ist <a title=\"http:\/\/www.xmlvm.org\/\" href=\"http:\/\/www.xmlvm.org\/\">http:\/\/www.xmlvm.org\/<\/a>. Es steht zwar erst am Anfang, aber der sieht sehr vielversprechend aus. Die Idee von XMLVM ist einfach: Man nehme den Bytecode, repr\u00e4sentierte diesen als XML, transformiere den \u00fcber XSLT in Objective C und kompilieren dann. <\/p>\n<p><img decoding=\"async\" alt=\"XMLVM Overview Diagram\" src=\"http:\/\/www.xmlvm.org\/overview\/overview.jpg\"><\/p>\n<p>(Bilder von der Webseite)<\/p>\n<p>&nbsp;<\/p>\n<p><img decoding=\"async\" alt=\"XMLVM Frontend\" src=\"http:\/\/www.xmlvm.org\/frontend\/frontend.jpg\"><\/p>\n<p>Die Stack-Operationen vom Java-Bytecode werden \u00fcber XSLT einfach in Objective C abgebildet, wobei die Stack-Operationen beibehalten werden. Die M\u00fche \u00fcber einen internen AST oder so macht man sich nicht.<\/p>\n<p>&lt;xsl:template match=&#8220;jvm:irem&#8220;&gt;<br \/>&nbsp; &lt;xsl:text&gt;<br \/>&nbsp;&nbsp;&nbsp; _op2.i = _stack[&#8211;_sp].i; \/\/ Pop operand 1<br \/>&nbsp;&nbsp;&nbsp; _op1.i = _stack[&#8211;_sp].i; \/\/ Pop operand 2<br \/>&nbsp;&nbsp;&nbsp; _stack[_sp++].i = _op1.i % _op2.i; \/\/ Push remainder<br \/>&nbsp; &lt;\/xsl:text&gt;<br \/>&lt;\/xsl:template&gt;  <\/p>\n<p>Das gibt zwar f\u00fcr den GCC \u2018ne Menge zu optimieren, aber das ist der einfachste Weg der Transformation. Sp\u00e4ter sieht das dann so aus:<\/p>\n<p>@interface org_xmlvm_test_HelloWorld : java_lang_Object<br \/>+ (void) main___java_lang_String_ARRAYTYPE :(NSMutableArray*)n1;<br \/>@end<br \/>@implementation org_xmlvm_test_HelloWorld;<br \/>+ (void) main___java_lang_String_ARRAYTYPE :(NSMutableArray*)n1<br \/>{<br \/>&nbsp;&nbsp;&nbsp; XMLVMElem _stack[2];<br \/>&nbsp;&nbsp;&nbsp; XMLVMElem _locals[1];<br \/>&nbsp;&nbsp;&nbsp; int _sp = 0;<br \/>&nbsp;&nbsp;&nbsp; XMLVMElem _op1, _op2, _op3;<br \/>&nbsp;&nbsp;&nbsp; int _i;<br \/>&nbsp;&nbsp;&nbsp; for (_i = 0; _i &lt;1; _i++) _locals[_i].o = nil;<br \/>&nbsp;&nbsp;&nbsp; NSAutoreleasePool* _pool = [[NSAutoreleasePool alloc] init];<br \/>&nbsp;&nbsp;&nbsp; _locals[0].o = n1;<br \/>&nbsp;&nbsp;&nbsp; _op1.o = [java_lang_System _GET_STATIC_java_lang_System_out];<br \/><strong>&nbsp;&nbsp;&nbsp; _stack[_sp++].o = _op1.o;<br \/>&nbsp;&nbsp;&nbsp; _stack[_sp++].o = @&#8220;Hello World&#8220;;<br \/>&nbsp;&nbsp;&nbsp; _sp -= 2;<br \/><\/strong>&nbsp;&nbsp;&nbsp; [((java_io_PrintStream*) _stack[_sp].o) println___java_lang_String:_stack[_sp + 1].o];<br \/>&nbsp;&nbsp;&nbsp; [_pool release];<br \/>&nbsp;&nbsp;&nbsp; return;<br \/>}<br \/>@end<\/p>\n<p>&nbsp;<object width=\"480\" height=\"385\"><param name=\"movie\" value=\"http:\/\/www.youtube.com\/v\/s8nMpi5-P-I&amp;hl=en&amp;fs=1&amp;rel=0&amp;color1=0x234900&amp;color2=0x4e9e00\"><\/param><param name=\"allowFullScreen\" value=\"true\"><\/param><param name=\"allowscriptaccess\" value=\"always\"><\/param><\/object><\/p>\n<p>Weitere Beispiele gibt <a title=\"http:\/\/xmlvm.org\/showcase\/\" href=\"http:\/\/xmlvm.org\/showcase\/\">http:\/\/xmlvm.org\/showcase\/<\/a> und der Blog <a title=\"http:\/\/www.cokeandcode.com\/aboidblog\" href=\"http:\/\/www.cokeandcode.com\/aboidblog\">http:\/\/www.cokeandcode.com\/aboidblog<\/a>. <\/p>\n<p>Insgesamt ein sehr spannendes Projekt, welches auch die Frage Android \u2013&gt; iPhone Entwicklung angeht, und .NET -&gt; Java Cross-Compilation bietet. Mal sehen, wie sich das Entwickeln wird. MONO f\u00fcr iPhone ist auch bald bereit und dann wird iPhone Entwicklung wirklich einfach. (Bekommen wir dann noch mehr Schrott im Store?)<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ein gro\u00dfartiges Projekt ist http:\/\/www.xmlvm.org\/. Es steht zwar erst am Anfang, aber der sieht sehr vielversprechend aus. Die Idee von XMLVM ist einfach: Man nehme den Bytecode, repr\u00e4sentierte diesen als XML, transformiere den \u00fcber XSLT in Objective C und kompilieren dann. (Bilder von der Webseite) &nbsp; Die Stack-Operationen vom Java-Bytecode werden \u00fcber XSLT einfach in [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":"","_links_to":"","_links_to_target":""},"categories":[18],"tags":[],"class_list":["post-385","post","type-post","status-publish","format-standard","hentry","category-android"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/385","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/comments?post=385"}],"version-history":[{"count":0,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/385\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/media?parent=385"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/categories?post=385"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/tags?post=385"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}