<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:posterous="http://posterous.com/help/rss/1.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:media="http://search.yahoo.com/mrss/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
  <channel>
    <title>penberg's posterous</title>
    <link>http://penberg.posterous.com</link>
    <description>Most recent posts at penberg's posterous</description>
    <generator>posterous.com</generator>
    <link xmlns="http://www.w3.org/2005/Atom" href="http://posterous.com/api/sup_update#5448d48ad" type="application/json" rel="http://api.friendfeed.com/2008/03#sup" />
    
    
    <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/penberg" /><feedburner:info uri="penberg" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://posterous.superfeedr.com/" /><item>
      <pubDate>Wed, 31 Aug 2011 03:51:00 -0700</pubDate>
      <title>Jato status update for August 2011</title>
      <link>http://feedproxy.google.com/~r/penberg/~3/YruzVFDphyc/jato-status-update-for-august-2011</link>
      <guid isPermaLink="false">http://penberg.posterous.com/jato-status-update-for-august-2011</guid>
      <description>&lt;p&gt;
	&lt;p&gt;In August, people have mostly wrapped up their Google Summer of Code projects.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ana Farcasi&lt;/strong&gt; added a SSA-based array bound check elimination optimization. It does not work with loops so we haven't seen major speed gains. Ana is working on improving the optimization to include loops as well.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ankit Laddha&lt;/strong&gt; added support for more bytecodes (istore, iadd, and isub) to the ARM architecture port. Likewise, I was able to fix trampolines in the PowerPC port which now is able to successfully JIT and execute iconst and ireturn bytecodes. There's quite a bit of work to be done for both architectures, so people interested in hacking on JVM on ARM and PPC are more than welcome to join the effort.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Theo Dzierzbicki&lt;/strong&gt; was finally able to make the verifier is fully functional. It's limited in scope but is able to detect some classfile corruption and throw VerifyError:&lt;/p&gt;
&lt;div class="CodeRay"&gt;
  &lt;div class="code"&gt;&lt;pre&gt;$ ./jato -cp test/functional corrupt/CorruptedMaxLocalVar
error: corrupt/CorruptedMaxLocalVar: could not load
Exception in thread &amp;quot;main&amp;quot; java.lang.VerifyError: Reference to a too high local variable
   at java.lang.VMClassLoader.defineClass(Native Method)
   at java.lang.VMClassLoader.defineClassWithTransformers(VMClassLoader.java:428)
   at java.lang.ClassLoader.defineClass(ClassLoader.java:471)
   at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:83)
   at java.net.URLClassLoader.findClass(URLClassLoader.java:617)
   at java.lang.ClassLoader.loadClass(ClassLoader.java:341)
   at java.lang.ClassLoader$1.loadClass(ClassLoader.java:1112)
   at java.lang.ClassLoader.loadClass(ClassLoader.java:293)&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Finally, &lt;strong&gt;Nikhil Sarda&lt;/strong&gt; resumed Jato hacking after few months of silence fixing up some bugs and adding more test cases. He also announced on IRC that he's interested in hacking on our own garbage collector which hasn't seen much development in over a year.&lt;/p&gt;
&lt;p&gt;That's it for August!&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://penberg.posterous.com/jato-status-update-for-august-2011"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://penberg.posterous.com/jato-status-update-for-august-2011#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/penberg?a=YruzVFDphyc:qCGhbASlgzU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/penberg?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/penberg?a=YruzVFDphyc:qCGhbASlgzU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/penberg?i=YruzVFDphyc:qCGhbASlgzU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/penberg?a=YruzVFDphyc:qCGhbASlgzU:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/penberg?i=YruzVFDphyc:qCGhbASlgzU:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/penberg?a=YruzVFDphyc:qCGhbASlgzU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/penberg?i=YruzVFDphyc:qCGhbASlgzU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/penberg?a=YruzVFDphyc:qCGhbASlgzU:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/penberg?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/penberg?a=YruzVFDphyc:qCGhbASlgzU:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/penberg?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/penberg/~4/YruzVFDphyc" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/655374/IMG_1847.JPG</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/4wzI86iMGq7n</posterous:profileUrl>
        <posterous:firstName>Pekka</posterous:firstName>
        <posterous:lastName>Enberg</posterous:lastName>
        <posterous:nickName>penberg</posterous:nickName>
        <posterous:displayName>Pekka Enberg</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://penberg.posterous.com/jato-status-update-for-august-2011</feedburner:origLink></item>
    <item>
      <pubDate>Sat, 13 Aug 2011 00:53:00 -0700</pubDate>
      <title>Jato status update for July 2011</title>
      <link>http://feedproxy.google.com/~r/penberg/~3/jkSOquzHgeU/jato-status-update-for-july-2011</link>
      <guid isPermaLink="false">http://penberg.posterous.com/jato-status-update-for-july-2011</guid>
      <description>&lt;p&gt;
	&lt;p&gt;Here's a summary of what's been going on in Jato development in July. There has been 129 commits merged:&lt;/p&gt;
&lt;div class="CodeRay"&gt;
  &lt;div class="code"&gt;&lt;pre&gt;70 Pekka Enberg
27 Ana Farcasi
25 Ankit Laddha
5 Theo Dzierzbicki
2 Balagopal&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;SSA and optimizations&lt;/strong&gt;. It's pretty insane what Ana Farcasi has been able to do in just one month. She implemented SSA-based dead code elimination optimization and fixed tons of issues in the SSA conversion code. Both are now enabled by default and the JIT also does simple array bounds check elimination (also implemented by Ana).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Verifier.&lt;/strong&gt;&amp;nbsp;Theo Dzierzbicki's verifier patches are now merged to master. It verifies some simple error cases but the infrastructure should be in pretty good shape for future improvements. There's still some issues with actually throwing proper exceptions upon verify errors and there hasn't been updates to the code in the past few weeks.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Inline caching&lt;/strong&gt;&amp;nbsp;hasn't changed since June.&amp;nbsp;Balagopal has been doing&amp;nbsp;&lt;a href="http://gsoc11-jato-ic.blogspot.com/2011/08/profiling-results-for-inline-caching.html"&gt;performance analysis&lt;/a&gt;&amp;nbsp;on the code and is currently looking at method inlining optimizations.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;ARM.&lt;/strong&gt; Ankit Laddha has made excellent progress on the ARM port and we're actually JIT'ing some simple bytecodes such as &lt;em&gt;iconst&lt;/em&gt; and &lt;em&gt;ireturn&lt;/em&gt;. There's still lots to do so help is much appreciated! We're especially interested in knowing how things work on ARM hardware as we've only run Jato with QEMU in Scratchbox.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;PowerPC&lt;/strong&gt;. I was inspired by Ankit's progress on ARM so I dug up my old PowerBook G4 and resurrected the PPC port. I was able to copy-paste much of Ankit's ARM code under arch/ppc and started hacking on trampoline support. Trampolines sort of work but there's still some register clobbering issues so we're not able to succesfully JIT bytecodes yet. If you're intereted in helping out, let me know and I'll help you get started.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;x86-64.&lt;/strong&gt;&amp;nbsp;I've also been squashing bugs in the x86-64 port and gotten more tests to run. The x86-64 port needs more love and I think we need to fix method tracing and other infrastructure to make debugging easier. Hopefully this will be easier once Eduard Munteanu's work in moving more code generation into the instruction selector is finished.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;VM startup time.&lt;/strong&gt;&amp;nbsp;Ana has been speeding up SSA code and as part of that, I've also been looking at Jato startup performance profiles and speeding up things here and there which has made startup times faster. Most of our problems are related to JIT compiler data structures that are quite frankly way too memory hungry. Fortunately this doesn't matter that much for long-lived applications.&lt;/p&gt;
&lt;p&gt;That's it! As always, if you're interested in helping out Jato by testing, hacking, or improving the documentation, please drop by the #jato channel on irc.freenode.net.&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://penberg.posterous.com/jato-status-update-for-july-2011"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://penberg.posterous.com/jato-status-update-for-july-2011#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/penberg?a=jkSOquzHgeU:bBf5LsjMVyw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/penberg?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/penberg?a=jkSOquzHgeU:bBf5LsjMVyw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/penberg?i=jkSOquzHgeU:bBf5LsjMVyw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/penberg?a=jkSOquzHgeU:bBf5LsjMVyw:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/penberg?i=jkSOquzHgeU:bBf5LsjMVyw:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/penberg?a=jkSOquzHgeU:bBf5LsjMVyw:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/penberg?i=jkSOquzHgeU:bBf5LsjMVyw:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/penberg?a=jkSOquzHgeU:bBf5LsjMVyw:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/penberg?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/penberg?a=jkSOquzHgeU:bBf5LsjMVyw:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/penberg?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/penberg/~4/jkSOquzHgeU" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/655374/IMG_1847.JPG</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/4wzI86iMGq7n</posterous:profileUrl>
        <posterous:firstName>Pekka</posterous:firstName>
        <posterous:lastName>Enberg</posterous:lastName>
        <posterous:nickName>penberg</posterous:nickName>
        <posterous:displayName>Pekka Enberg</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://penberg.posterous.com/jato-status-update-for-july-2011</feedburner:origLink></item>
    <item>
      <pubDate>Sat, 02 Jul 2011 06:50:00 -0700</pubDate>
      <title>Jato status update for June 2011</title>
      <link>http://feedproxy.google.com/~r/penberg/~3/dQQ781y-6Ds/jato-status-update-for-june-2011</link>
      <guid isPermaLink="false">http://penberg.posterous.com/jato-status-update-for-june-2011</guid>
      <description>&lt;p&gt;
	&lt;p&gt;Another month has passed and Google Summer of Code is in full swing. Here's a brief summary of interesting developments in Jato since May.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Monomorphic inline caching&lt;/strong&gt; for 32-bit x86 has been merged to master and enabled by default. It doesn't seem to either improve or degrade performance so there's still some tuning left to do for Balagopal.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SSA conversion&lt;/strong&gt; from and LIR has been merged to master. It's still disabled by default because some regression tests are known to break but you can enable it with '-Xssa' if you want to give it a shot. Ana has already begun experimenting with SSA-based dead code elimination optimization so we'll probably see some performance benefits from her project in the coming month.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;ARM porting&lt;/strong&gt;&amp;nbsp;project was stalled a bit in June but Ankit has managed to implement instruction selection for EXPR_VALUE and EXPR_LOCAL so far. This hasn't been an easy project to work on but I'm hoping we'll see end-to-end arm JIT support for some bytecodes in July.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The verifier project&lt;/strong&gt;&amp;nbsp;hasn't resulted in any patches in Jato's git master yet.&lt;/p&gt;
&lt;p&gt;In related news, I've added a dead simple interpreter in vm/interp.c that supports the &lt;em&gt;nop&lt;/em&gt;&amp;nbsp;and &lt;em&gt;return&lt;/em&gt;&amp;nbsp;bytecodes. You can enable the interpreter with '-Xint' command line option and run test/functional/jvm/EntryTest.j with it! Admittedly, we're cheating a little bit as GNU Classpath initialization is JIT'd at the moment. That said, if anyone is interested in hacking on a JVM interpreter, drop by #jato on irc.freenode.net and I'm happy to help out. I think the feature is going to be important in future porting efforts and quite possibly reducing Jato startup times.&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://penberg.posterous.com/jato-status-update-for-june-2011"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://penberg.posterous.com/jato-status-update-for-june-2011#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/penberg?a=dQQ781y-6Ds:-vl8lQb1lRY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/penberg?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/penberg?a=dQQ781y-6Ds:-vl8lQb1lRY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/penberg?i=dQQ781y-6Ds:-vl8lQb1lRY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/penberg?a=dQQ781y-6Ds:-vl8lQb1lRY:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/penberg?i=dQQ781y-6Ds:-vl8lQb1lRY:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/penberg?a=dQQ781y-6Ds:-vl8lQb1lRY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/penberg?i=dQQ781y-6Ds:-vl8lQb1lRY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/penberg?a=dQQ781y-6Ds:-vl8lQb1lRY:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/penberg?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/penberg?a=dQQ781y-6Ds:-vl8lQb1lRY:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/penberg?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/penberg/~4/dQQ781y-6Ds" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/655374/IMG_1847.JPG</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/4wzI86iMGq7n</posterous:profileUrl>
        <posterous:firstName>Pekka</posterous:firstName>
        <posterous:lastName>Enberg</posterous:lastName>
        <posterous:nickName>penberg</posterous:nickName>
        <posterous:displayName>Pekka Enberg</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://penberg.posterous.com/jato-status-update-for-june-2011</feedburner:origLink></item>
    <item>
      <pubDate>Thu, 26 May 2011 08:23:00 -0700</pubDate>
      <title>GNU Classpath five months later</title>
      <link>http://feedproxy.google.com/~r/penberg/~3/aPiIKtWTDMw/gnu-classpath-five-months-later</link>
      <guid isPermaLink="false">http://penberg.posterous.com/gnu-classpath-five-months-later</guid>
      <description>&lt;p&gt;
	&lt;p&gt;It's now been five months since I wrote my slightly controversial &lt;a href="http://penberg.posterous.com/whats-the-future-of-gnu-classpath"&gt;Future of GNU Classpath&lt;/a&gt; blog post so I thought I'd take the time to whine some more. It seemed to have a net positive effect the last time.&lt;/p&gt;
&lt;p&gt;I have had GNU Classpath commit rights for the past four months or so and have committed total of 9 patches to CVS HEAD. I've fixed compatibility problems that prevented the use of JRuby, Jython, and Redline Smalltalk. It's not a huge amount of work but I've still been able to help GNU Classpath become more useful to end-users and be more compatible with OpenJDK.&lt;/p&gt;
&lt;p&gt;So what do I think need to improve in GNU Classpath still?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;CVS.&lt;/strong&gt; It's still painful to use. I think most of the remaining core developers agreed to switch to Mercurial or Git but nothing has happened after that.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;No release in two years.&lt;/strong&gt; Having no recent release is a problem for Jato, at least. CVS HEAD is already in much better shape than the latest 0.98 release which is already over two years old. Anyone interested in trying out Jato now needs to use CVS to fetch the latest sources which is an unnecessary barrier for newcomers.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Automated tests.&lt;/strong&gt; &lt;em&gt;Mauve&lt;/em&gt; is great. It has tons of important compatibility test cases.  However, Mauve has couple of problems: (1) running the whole test suite is slow, (2) not all tests pass with OpenJDK, and (3) the output is very verbose which makes it difficult to notice test breakage. &lt;em&gt;Malva&lt;/em&gt; has caught bugs in GNU Classpath, Jato, Jam VM, and CACAO. It fixes most of the problems I see in Mauve but it's of limited use because the number of test cases is still so small.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;JDK APIs.&lt;/strong&gt; The 1.7 release of OpenJDK is close and there's bunch of shiny new APIs queued for 1.8. The cold reality is that with every new JDK release, GNU Classpath becomes less and less relevant unless it's able to implement at least the major new APIs. JRuby, for example, is switching over to the invokedynamic APIs that are introduced in 1.7 so in not so distant future, we won't even be able to compile it with GNU Classpath.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;JVM support.&lt;/strong&gt; CACAO and JamVM support OpenJDK now and most of the interesting open source work seems to happen in the IcedTea project. This is a big problem because there's very little positive pressure from JVM developers to fix up GNU Classpath compatibility issues. One possible solution here is to make GNU Classpath binary compatible with OpenJDK so that any JVM out there that supports the OpenJDK VM ABI would be able to use GNU Classpath out-of-the-box.&lt;/p&gt;
&lt;p&gt;I guess that's enough whining. See you again in six months!&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://penberg.posterous.com/gnu-classpath-five-months-later"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://penberg.posterous.com/gnu-classpath-five-months-later#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/penberg?a=aPiIKtWTDMw:snonLLV8x_M:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/penberg?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/penberg?a=aPiIKtWTDMw:snonLLV8x_M:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/penberg?i=aPiIKtWTDMw:snonLLV8x_M:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/penberg?a=aPiIKtWTDMw:snonLLV8x_M:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/penberg?i=aPiIKtWTDMw:snonLLV8x_M:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/penberg?a=aPiIKtWTDMw:snonLLV8x_M:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/penberg?i=aPiIKtWTDMw:snonLLV8x_M:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/penberg?a=aPiIKtWTDMw:snonLLV8x_M:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/penberg?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/penberg?a=aPiIKtWTDMw:snonLLV8x_M:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/penberg?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/penberg/~4/aPiIKtWTDMw" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/655374/IMG_1847.JPG</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/4wzI86iMGq7n</posterous:profileUrl>
        <posterous:firstName>Pekka</posterous:firstName>
        <posterous:lastName>Enberg</posterous:lastName>
        <posterous:nickName>penberg</posterous:nickName>
        <posterous:displayName>Pekka Enberg</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://penberg.posterous.com/gnu-classpath-five-months-later</feedburner:origLink></item>
    <item>
      <pubDate>Tue, 24 May 2011 10:35:00 -0700</pubDate>
      <title>Jato status update for March - May 2011</title>
      <link>http://feedproxy.google.com/~r/penberg/~3/JufiD3Ud6j4/jato-status-update-for-march-may-2011</link>
      <guid isPermaLink="false">http://penberg.posterous.com/jato-status-update-for-march-may-2011</guid>
      <description>&lt;p&gt;
	&lt;p&gt;Jato was accepted to Google Summer of Code 2011 and work on the following projects has now started:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.google-melange.com/gsoc/project/google/gsoc2011/ana/14001"&gt;SSA form support&lt;/a&gt; (Ana-Maria Farcasi)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.google-melange.com/gsoc/project/google/gsoc2011/balagopal/4001"&gt;Inline caching&lt;/a&gt; (Balagopal)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.google-melange.com/gsoc/project/google/gsoc2011/laddha/16001"&gt;ARM architecture port&lt;/a&gt; (Ankit Laddha)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.google-melange.com/gsoc/project/google/gsoc2011/th2o/6003"&gt;Bytecode verifier&lt;/a&gt; (Theo Dzierzbicki)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Meanwhile Eduard-Gabriel Munteanu and&amp;nbsp;Sergey Mashkov squashed bugs in the x86-64 port and Joonas Reynders and&amp;nbsp;Nikhil Sarda implemented bunch of missing core Java and JNI APIs. Tomek Grabiec and Vegard Nossum also threw in some critical bug fixes putting us one step closer to a new release.&lt;/p&gt;
&lt;p&gt;Needless to say, I'm looking forward to an interesting summer and hopefully an impressive release!&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://penberg.posterous.com/jato-status-update-for-march-may-2011"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://penberg.posterous.com/jato-status-update-for-march-may-2011#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/penberg?a=JufiD3Ud6j4:2QKhWF-tt3o:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/penberg?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/penberg?a=JufiD3Ud6j4:2QKhWF-tt3o:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/penberg?i=JufiD3Ud6j4:2QKhWF-tt3o:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/penberg?a=JufiD3Ud6j4:2QKhWF-tt3o:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/penberg?i=JufiD3Ud6j4:2QKhWF-tt3o:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/penberg?a=JufiD3Ud6j4:2QKhWF-tt3o:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/penberg?i=JufiD3Ud6j4:2QKhWF-tt3o:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/penberg?a=JufiD3Ud6j4:2QKhWF-tt3o:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/penberg?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/penberg?a=JufiD3Ud6j4:2QKhWF-tt3o:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/penberg?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/penberg/~4/JufiD3Ud6j4" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/655374/IMG_1847.JPG</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/4wzI86iMGq7n</posterous:profileUrl>
        <posterous:firstName>Pekka</posterous:firstName>
        <posterous:lastName>Enberg</posterous:lastName>
        <posterous:nickName>penberg</posterous:nickName>
        <posterous:displayName>Pekka Enberg</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://penberg.posterous.com/jato-status-update-for-march-may-2011</feedburner:origLink></item>
    <item>
      <pubDate>Sun, 20 Mar 2011 01:47:00 -0700</pubDate>
      <title>Jato is participating in Google Summer of Code 2011!</title>
      <link>http://feedproxy.google.com/~r/penberg/~3/Jne8x3-Ri2M/jato-is-participating-in-google-summer-of-cod</link>
      <guid isPermaLink="false">http://penberg.posterous.com/jato-is-participating-in-google-summer-of-cod</guid>
      <description>&lt;p&gt;
	&lt;p&gt;Jato will be participating in Google Summer of Code again this year! If you're a student looking for interesting things to hack on, look no further! You can find our organization profile here:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.google-melange.com/gsoc/org/show/google/gsoc2011/jato"&gt;http://www.google-melange.com/gsoc/org/show/google/gsoc2011/jato&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;There's lots of interesting areas to work on. In particular, the following are pretty high on the list:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;JIT compiler optimizations (SSA in particular)&lt;/li&gt;
&lt;li&gt;Invokedynamic&lt;/li&gt;
&lt;li&gt;ARM and x86-64 architecture ports&lt;/li&gt;
&lt;li&gt;Exact garbage collector (we're using boehmgc now)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You can find the full list of project ideas here:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.jatovm.org/projects.html"&gt;http://www.jatovm.org/projects.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;And as always, we're also open to projects that are not on the list. Feel free to drop by at #jato on irc.freenode.net or send email to &lt;a href="mailto:penberg@kernel.org"&gt;penberg@kernel.org&lt;/a&gt; to discuss your ideas and ask questions!&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://penberg.posterous.com/jato-is-participating-in-google-summer-of-cod"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://penberg.posterous.com/jato-is-participating-in-google-summer-of-cod#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/penberg?a=Jne8x3-Ri2M:yC8pnNWiLp4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/penberg?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/penberg?a=Jne8x3-Ri2M:yC8pnNWiLp4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/penberg?i=Jne8x3-Ri2M:yC8pnNWiLp4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/penberg?a=Jne8x3-Ri2M:yC8pnNWiLp4:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/penberg?i=Jne8x3-Ri2M:yC8pnNWiLp4:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/penberg?a=Jne8x3-Ri2M:yC8pnNWiLp4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/penberg?i=Jne8x3-Ri2M:yC8pnNWiLp4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/penberg?a=Jne8x3-Ri2M:yC8pnNWiLp4:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/penberg?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/penberg?a=Jne8x3-Ri2M:yC8pnNWiLp4:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/penberg?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/penberg/~4/Jne8x3-Ri2M" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/655374/IMG_1847.JPG</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/4wzI86iMGq7n</posterous:profileUrl>
        <posterous:firstName>Pekka</posterous:firstName>
        <posterous:lastName>Enberg</posterous:lastName>
        <posterous:nickName>penberg</posterous:nickName>
        <posterous:displayName>Pekka Enberg</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://penberg.posterous.com/jato-is-participating-in-google-summer-of-cod</feedburner:origLink></item>
    <item>
      <pubDate>Fri, 25 Feb 2011 02:45:00 -0800</pubDate>
      <title>Jato status update for February 2011</title>
      <link>http://feedproxy.google.com/~r/penberg/~3/SYFJKj4qD6A/jato-status-update-for-february-2011</link>
      <guid isPermaLink="false">http://penberg.posterous.com/jato-status-update-for-february-2011</guid>
      <description>&lt;p&gt;
	&lt;p&gt;Lots of cool things happened in Jato in February!&lt;/p&gt;
&lt;div style="background-color: transparent; margin: 0px;"&gt;
&lt;ul&gt;
&lt;li&gt;Joonas Reynders completed his rework on JNI. You can now build native code against Jato and use the JNI API from C code.&lt;/li&gt;
&lt;li&gt;Class.getDeclaredAnnotations() mostly works now.&lt;/li&gt;
&lt;li&gt;JNI mostly works on x86-64 now.&lt;/li&gt;
&lt;li&gt;60% of our test suite passes on x86-64. Up from 50% in January!&lt;/li&gt;
&lt;li&gt;I started some experimental work to investigate if it&amp;rsquo;s possible to support Dalvik DEX format in Jato. You can find some preliminary DEX classloading code in &lt;a href="https://github.com/penberg/jato/tree/experimental/dalvik"&gt;experimental/dalvik&lt;/a&gt; branch on Github&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;p&gt;In related news, I fixed some problems in GNU Classpath that were blocking Jython from running under JamVM. I also fixed a problem in String.format() that was causing JRuby to fail to start up. JRuby doesn't work correctly yet due to some bug in GNU Classpath regexp code.&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://penberg.posterous.com/jato-status-update-for-february-2011"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://penberg.posterous.com/jato-status-update-for-february-2011#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/penberg?a=SYFJKj4qD6A:B_tWBFQs5Fw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/penberg?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/penberg?a=SYFJKj4qD6A:B_tWBFQs5Fw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/penberg?i=SYFJKj4qD6A:B_tWBFQs5Fw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/penberg?a=SYFJKj4qD6A:B_tWBFQs5Fw:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/penberg?i=SYFJKj4qD6A:B_tWBFQs5Fw:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/penberg?a=SYFJKj4qD6A:B_tWBFQs5Fw:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/penberg?i=SYFJKj4qD6A:B_tWBFQs5Fw:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/penberg?a=SYFJKj4qD6A:B_tWBFQs5Fw:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/penberg?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/penberg?a=SYFJKj4qD6A:B_tWBFQs5Fw:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/penberg?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/penberg/~4/SYFJKj4qD6A" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/655374/IMG_1847.JPG</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/4wzI86iMGq7n</posterous:profileUrl>
        <posterous:firstName>Pekka</posterous:firstName>
        <posterous:lastName>Enberg</posterous:lastName>
        <posterous:nickName>penberg</posterous:nickName>
        <posterous:displayName>Pekka Enberg</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://penberg.posterous.com/jato-status-update-for-february-2011</feedburner:origLink></item>
    <item>
      <pubDate>Wed, 26 Jan 2011 00:00:00 -0800</pubDate>
      <title>Jato and Malva status update for January 2011</title>
      <link>http://feedproxy.google.com/~r/penberg/~3/yWwVJ6FKqMw/jato-and-malva-status-update-for-january-2011</link>
      <guid isPermaLink="false">http://penberg.posterous.com/jato-and-malva-status-update-for-january-2011</guid>
      <description>&lt;p&gt;
	&lt;p&gt;Things have been little quiet over the past two months but we've managed to get some work done for Jato and Malva. I was hoping to do a release at the beginning of January but decided to wait for the annotation support to work properly before doing it.&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: 20px; font-weight: bold;"&gt;Jato&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I've been hacking on annotation support. Most of the classfile parsing is now done and Class annotation reflection API is under development.&lt;/li&gt;
&lt;li&gt;Joonas Reynders started working on JNI regression tests&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Joonas Reynders, Tomek Grabiec, and myself added some missing Classpath VM integration APIs.&lt;/li&gt;
&lt;li&gt;I've fixed "make check" to only run the passing tests on x86-64. 50% of all the tests pass now.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Malva&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Joonas Reynders added test cases for java.net.InetAddress.&lt;/li&gt;
&lt;li&gt;I added more test cases for java.lang.Class.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In related news, I became a GNU Classpath committer on January 21 and hope to help getting pending patches reviewed and merged. I'm also looking at fixing issues in GNU Classpath that have been found by test cases in Malva.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://penberg.posterous.com/jato-and-malva-status-update-for-january-2011"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://penberg.posterous.com/jato-and-malva-status-update-for-january-2011#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/penberg?a=yWwVJ6FKqMw:NwAUOy8veJQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/penberg?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/penberg?a=yWwVJ6FKqMw:NwAUOy8veJQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/penberg?i=yWwVJ6FKqMw:NwAUOy8veJQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/penberg?a=yWwVJ6FKqMw:NwAUOy8veJQ:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/penberg?i=yWwVJ6FKqMw:NwAUOy8veJQ:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/penberg?a=yWwVJ6FKqMw:NwAUOy8veJQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/penberg?i=yWwVJ6FKqMw:NwAUOy8veJQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/penberg?a=yWwVJ6FKqMw:NwAUOy8veJQ:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/penberg?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/penberg?a=yWwVJ6FKqMw:NwAUOy8veJQ:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/penberg?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/penberg/~4/yWwVJ6FKqMw" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/655374/IMG_1847.JPG</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/4wzI86iMGq7n</posterous:profileUrl>
        <posterous:firstName>Pekka</posterous:firstName>
        <posterous:lastName>Enberg</posterous:lastName>
        <posterous:nickName>penberg</posterous:nickName>
        <posterous:displayName>Pekka Enberg</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://penberg.posterous.com/jato-and-malva-status-update-for-january-2011</feedburner:origLink></item>
    <item>
      <pubDate>Tue, 07 Dec 2010 11:07:00 -0800</pubDate>
      <title>What's the future of GNU Classpath? </title>
      <link>http://feedproxy.google.com/~r/penberg/~3/XpAkoFh4KHo/whats-the-future-of-gnu-classpath</link>
      <guid isPermaLink="false">http://penberg.posterous.com/whats-the-future-of-gnu-classpath</guid>
      <description>&lt;p&gt;
	&lt;p&gt;The number of commits in GNU Classpath peaked at 3193 in 2006 (as measured from a git mirror of the CVS repository). Activity has since dropped significantly with an all time low of 30 commits in 2009. With 31 commits and counting this year, things aren't really improving. GNU Classpath used to be &lt;em&gt;the&lt;/em&gt; essential free Java runtime library but that's all changed now. Ubuntu, for example, has dropped the GNU Classpath package and only ships the OpenJDK version of &lt;a href="http://www.cacaovm.org/"&gt;CACAO&lt;/a&gt;. Another prominent alternative JVM, JamVM, seems to be also &lt;a href="http://developer.classpath.org/pipermail/classpath/2010-December/003043.html"&gt;migrating to OpenJDK&lt;/a&gt;. It looks like the community is moving over to OpenJDK and GNU Classpath development is grinding to a halt.&lt;/p&gt;
&lt;p&gt;But with OpenJDK licensed under the GPL, do we still need GNU Classpath to be actively developed? Thinking about the&amp;nbsp;&lt;a href="http://sstallion.blogspot.com/2010/08/opensolaris-is-dead.html"&gt;killing of OpenSolaris&lt;/a&gt;, &lt;a href="http://www.infoq.com/news/2010/11/apache-jcp"&gt;Harmony TCK dispute&lt;/a&gt;, and the &lt;a href="http://www.infoworld.com/d/the-industry-standard/java-founder-derides-oracles-lawsuit-against-google-065"&gt;Android lawsuit&lt;/a&gt;&amp;nbsp;I think there's enough doubt not to bet the future of free Java on OpenJDK alone. There's also probably something to be said about the dangers of &lt;a href="http://en.wikipedia.org/wiki/Monoculture_(computer_science)"&gt;software monoculture&lt;/a&gt; as well but the bottom line is that it's still important to have a community-driven project around free Java if don't want big vendors to control its destiny.&lt;/p&gt;
&lt;p&gt;So what do I think needs to happen with GNU Classpath?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The CVS repository needs to be migrated git or Mercurial.&lt;/strong&gt; I mean, just getting the GNU Classpath sources via &lt;code&gt;cvs checkout&lt;/code&gt; is painful enough to avoid contributing to the project not to mention how much problems it causes for developers that don't have commit rights to the centralized repository!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Patches need to be reviewed and merged more quickly.&lt;/strong&gt; There's lots of unmerged patches waiting in bugzilla and the mailing list. When I tried to help out and get one of those patches merged, it took two whole months of waiting before it ended up in CVS. That's too long time to wait for your patch to be merged and is likely holding back potential new contributors.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;More automated tests for compatibility testing.&lt;/strong&gt; It's pretty obvious by now that there's not going to be a freely available Technology Compatibility Kit (TCK). That's why it's so important to write automated compatibility tests against OpenJDK and make sure they pass with GNU Classpath as well. The &lt;a href="http://sourceware.org/mauve/"&gt;Mauve&lt;/a&gt; project seems to have been abandoned which is why I've started a new project called &lt;a href="https://github.com/penberg/malva"&gt;Malva&lt;/a&gt; that attempts to write compatibility tests for the core Java APIs.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Java 1.6 and 1.7 APIs need to be implemented.&lt;/strong&gt; GNU Classpath APIs are currently stuck at Java 1.5 level. There's already applications out there that use the Java 1.6 APIs and the situation is only going to get worse as time passes by. It's therefore crucial that work on Java 1.6 and 1.7 APIs starts as soon as possible for GNU Classpath to stay relevant.&lt;/p&gt;
&lt;p&gt;There's so much software written in Java that it's unlikely to go away any time soon. There's also some really cool development happening in the alternative JVM language space (Scala, Clojure, and JRuby, for example) which hopefully makes the JVM a relevant platform in the future. I do think OpenJDK is great but I don't think we should rely on it alone if we want to make sure Java stays a free and useful platform in the future as well.&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://penberg.posterous.com/whats-the-future-of-gnu-classpath"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://penberg.posterous.com/whats-the-future-of-gnu-classpath#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/penberg?a=XpAkoFh4KHo:EgWNxqv8bEw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/penberg?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/penberg?a=XpAkoFh4KHo:EgWNxqv8bEw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/penberg?i=XpAkoFh4KHo:EgWNxqv8bEw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/penberg?a=XpAkoFh4KHo:EgWNxqv8bEw:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/penberg?i=XpAkoFh4KHo:EgWNxqv8bEw:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/penberg?a=XpAkoFh4KHo:EgWNxqv8bEw:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/penberg?i=XpAkoFh4KHo:EgWNxqv8bEw:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/penberg?a=XpAkoFh4KHo:EgWNxqv8bEw:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/penberg?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/penberg?a=XpAkoFh4KHo:EgWNxqv8bEw:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/penberg?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/penberg/~4/XpAkoFh4KHo" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/655374/IMG_1847.JPG</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/4wzI86iMGq7n</posterous:profileUrl>
        <posterous:firstName>Pekka</posterous:firstName>
        <posterous:lastName>Enberg</posterous:lastName>
        <posterous:nickName>penberg</posterous:nickName>
        <posterous:displayName>Pekka Enberg</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://penberg.posterous.com/whats-the-future-of-gnu-classpath</feedburner:origLink></item>
    <item>
      <pubDate>Fri, 03 Dec 2010 07:02:00 -0800</pubDate>
      <title>How does Jato execute Java classes?</title>
      <link>http://feedproxy.google.com/~r/penberg/~3/mXn7vsKbrNQ/how-does-jato-execute-java-classes</link>
      <guid isPermaLink="false">http://penberg.posterous.com/how-does-jato-execute-java-classes</guid>
      <description>&lt;p&gt;
	&lt;p&gt;Each standalone Java application has an entry point that's the &lt;code&gt;main()&lt;/code&gt; method of some user-defined class. For example, a "hello, world" application looks something like this:&lt;/p&gt;
&lt;div class="CodeRay"&gt;
  &lt;div class="code"&gt;&lt;pre&gt;public class Hello {
    public static void main(String[] args) {
      System.out.println(&amp;quot;hello, world&amp;quot;);
    }
  }&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;After the source code is compiled with &lt;code&gt;javac&lt;/code&gt; to a &lt;code&gt;Hello.class&lt;/code&gt; classfile, you execute the class as follows:&lt;/p&gt;
&lt;div class="CodeRay"&gt;
  &lt;div class="code"&gt;&lt;pre&gt;java Hello&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Now there's all sorts of things Jato (like every other virtual machine) needs to do to initialize itself but how does execution actually get transferred to the &lt;code&gt;Hello.main()&lt;/code&gt; method?  Looking at the &lt;code&gt;main()&lt;/code&gt; C function of Jato itself in &lt;code&gt;vm/jato.c&lt;/code&gt; we see this piece of code:&lt;/p&gt;
&lt;div class="CodeRay"&gt;
  &lt;div class="code"&gt;&lt;pre&gt;switch (operation) {
  case OPERATION_MAIN_CLASS:
          status = do_main_class();
          break;
  case OPERATION_JAR_FILE:
          status = do_jar_file();
          break;
  }&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;As we're interested in Java class execution, we dive into &lt;code&gt;do_main_class()&lt;/code&gt; function where we find&lt;/p&gt;
&lt;div class="CodeRay"&gt;
  &lt;div class="code"&gt;&lt;pre&gt;struct vm_method *vmm = vm_class_get_method_recursive(vmc,
          &amp;quot;main&amp;quot;, &amp;quot;([Ljava/lang/String;)V&amp;quot;);
  if (!vmm) {
          fprintf(stderr, &amp;quot;error: %s: no main method\n&amp;quot;, classname);
          return -1;
  }

  [... snip ...]

  void (*main_method_trampoline)(void *)
          = vm_method_trampoline_ptr(vmm);
  main_method_trampoline(args);&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Here we do two things: (1) look up a "struct vm_method" for the user-specified class &lt;code&gt;Hello.main()&lt;/code&gt; method and (2) call a function pointer returned by &lt;code&gt;vm_method_trampoline_ptr()&lt;/code&gt; which transfers control to the JIT compiled machine code of &lt;code&gt;Hello.main()&lt;/code&gt; method.  So what is a trampoline then? A trampoline is a small per-method piece of code that acts as the receiver method for methods that have not yet been compiled.  For details, see &lt;code&gt;arch/x86/emit-code.c::emit_trampoline()&lt;/code&gt; how individual trampolines are generted. The heart of it all is &lt;code&gt;jit/trampoline.c::jit_magic_trampoline()&lt;/code&gt; function that determines the real target method by compiling the method or, in the case of native methods, looks up the address of the called native function. The same kind of approach is also used by VMs such as &lt;a href="http://www.mono-project.com/Mono:Runtime:Documentation:Trampolines"&gt;Mono&lt;/a&gt; and &lt;a href="http://www2.biglobe.ne.jp/~inaba/trampolines.html"&gt;Kaffe&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;In summary, Jato executes the Java &lt;code&gt;main()&lt;/code&gt; by looking up an internal &lt;code&gt;struct vm_method&lt;/code&gt; representation of it and calling it's trampoline function. The trampoline function then takes over and compiles the main method and executes the machine code. This process continues recursively until we either invoke &lt;code&gt;System.exit()&lt;/code&gt; or return back to the VM function &lt;code&gt;do_main_class()&lt;/code&gt; that called the first trampoline function.&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://penberg.posterous.com/how-does-jato-execute-java-classes"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://penberg.posterous.com/how-does-jato-execute-java-classes#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/penberg?a=mXn7vsKbrNQ:jzRIh08HyDQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/penberg?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/penberg?a=mXn7vsKbrNQ:jzRIh08HyDQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/penberg?i=mXn7vsKbrNQ:jzRIh08HyDQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/penberg?a=mXn7vsKbrNQ:jzRIh08HyDQ:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/penberg?i=mXn7vsKbrNQ:jzRIh08HyDQ:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/penberg?a=mXn7vsKbrNQ:jzRIh08HyDQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/penberg?i=mXn7vsKbrNQ:jzRIh08HyDQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/penberg?a=mXn7vsKbrNQ:jzRIh08HyDQ:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/penberg?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/penberg?a=mXn7vsKbrNQ:jzRIh08HyDQ:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/penberg?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/penberg/~4/mXn7vsKbrNQ" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/655374/IMG_1847.JPG</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/4wzI86iMGq7n</posterous:profileUrl>
        <posterous:firstName>Pekka</posterous:firstName>
        <posterous:lastName>Enberg</posterous:lastName>
        <posterous:nickName>penberg</posterous:nickName>
        <posterous:displayName>Pekka Enberg</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://penberg.posterous.com/how-does-jato-execute-java-classes</feedburner:origLink></item>
    <item>
      <pubDate>Sun, 31 Oct 2010 06:12:00 -0700</pubDate>
      <title>Malva status update for October 2010</title>
      <link>http://feedproxy.google.com/~r/penberg/~3/t1Jev7z7yW0/malva-status-update-for-october-2010</link>
      <guid isPermaLink="false">http://penberg.posterous.com/malva-status-update-for-october-2010</guid>
      <description>&lt;p&gt;
	&lt;p&gt;Joonas Reynders has been busy cranking bunch of new test cases for Malva. Looking at JamVM 1.5.3, CACAO 0.99.4, and Jato 0.1.1, none of them run all Malva test cases:&lt;/p&gt;
&lt;div class="CodeRay"&gt;
  &lt;div class="code"&gt;&lt;pre&gt;penberg@jaguar:~/src/malva$ make check JAVA=&amp;quot;jamvm&amp;quot;
  CHECK
malva/java/lang/RuntimeTest: Test FAILED
make: *** [check] Error 1
penberg@jaguar:~/src/malva$ make check JAVA=&amp;quot;java -cacao&amp;quot;
  CHECK
Exception in thread &amp;quot;main&amp;quot; java.lang.NullPointerException
        at java.lang.Thread.getAllStackTraces(Thread.java:1504)
        at malva.java.lang.ThreadTest.testGetAllStackTraces(ThreadTest.java:38)
        at malva.java.lang.ThreadTest.main(ThreadTest.java:294)
malva/java/lang/ThreadTest: Test FAILED
make: *** [check] Error 1
penberg@jaguar:~/src/malva$ make check JAVA=&amp;quot;jato&amp;quot;
  CHECK
Exception in thread &amp;quot;main&amp;quot; java.lang.UnsatisfiedLinkError: java/lang/VMRuntime.traceInstructions(Z)V
   at java.lang.Runtime.traceInstructions(Runtime.java:634)
   at malva.java.lang.RuntimeTest.testTraceInstructions(RuntimeTest.java:101)
   at malva.java.lang.RuntimeTest.main(RuntimeTest.java:122)
malva/java/lang/RuntimeTest: Test FAILED
make: *** [check] Error 1&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;NetworkIntefaceTest was disabled because GNU Classpath doesn't implement that API at all. That said, I'm impressed with the amount of compatibility problems we're finding!&lt;/p&gt;
&lt;p&gt;On a related note, I &lt;a href="http://github.com/penberg/classpath"&gt;"forked"&lt;/a&gt; GNU Classpath to be able to fix problems related to Jato faster. I hope all the changes make it to mainline in one form or another.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://penberg.posterous.com/malva-status-update-for-october-2010"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://penberg.posterous.com/malva-status-update-for-october-2010#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/penberg?a=t1Jev7z7yW0:2uCgMGIZODY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/penberg?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/penberg?a=t1Jev7z7yW0:2uCgMGIZODY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/penberg?i=t1Jev7z7yW0:2uCgMGIZODY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/penberg?a=t1Jev7z7yW0:2uCgMGIZODY:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/penberg?i=t1Jev7z7yW0:2uCgMGIZODY:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/penberg?a=t1Jev7z7yW0:2uCgMGIZODY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/penberg?i=t1Jev7z7yW0:2uCgMGIZODY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/penberg?a=t1Jev7z7yW0:2uCgMGIZODY:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/penberg?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/penberg?a=t1Jev7z7yW0:2uCgMGIZODY:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/penberg?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/penberg/~4/t1Jev7z7yW0" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/655374/IMG_1847.JPG</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/4wzI86iMGq7n</posterous:profileUrl>
        <posterous:firstName>Pekka</posterous:firstName>
        <posterous:lastName>Enberg</posterous:lastName>
        <posterous:nickName>penberg</posterous:nickName>
        <posterous:displayName>Pekka Enberg</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://penberg.posterous.com/malva-status-update-for-october-2010</feedburner:origLink></item>
    <item>
      <pubDate>Thu, 23 Sep 2010 06:51:00 -0700</pubDate>
      <title>Introducing Malva - a test suite for alternative JVMs</title>
      <link>http://feedproxy.google.com/~r/penberg/~3/P98Yfh6_jNE/introducing-malva-a-test-suite-for-alternativ</link>
      <guid isPermaLink="false">http://penberg.posterous.com/introducing-malva-a-test-suite-for-alternativ</guid>
      <description>&lt;p&gt;
	&lt;p&gt;&lt;a href="http://github.com/penberg/malva" title="Malva"&gt;Malva&lt;/a&gt; is a new Java core API test suite that's primary goal is to find compatibility problems in alternative JVMs such as &lt;a href="http://www.cacaovm.org/" title="CACAO"&gt;CACAO&lt;/a&gt;, &lt;a href="http://www.jamvm.org/" title="JamVM"&gt;JamVM&lt;/a&gt;, and &lt;a href="http://www.jatovm.org/" title="Jato"&gt;Jato&lt;/a&gt;. Malva is a companion project to the &lt;a href="http://sourceware.org/mauve/" title="Mauve Project"&gt;Mauve Project&lt;/a&gt; with focus on Java APIs that require implementation on the virtual machine side.&lt;/p&gt;
&lt;p&gt;If you have OpenJDK or Oracle Java installed on your system, running the test suite is as simple as:&lt;/p&gt;
&lt;div class="CodeRay"&gt;
  &lt;div class="code"&gt;&lt;pre&gt;git clone git://github.com/penberg/malva.git
cd malva
make check&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;All tests should pass.&lt;/p&gt;
&lt;p&gt;To run the test suite under an alternative JVM, use&lt;/p&gt;
&lt;div class="CodeRay"&gt;
  &lt;div class="code"&gt;&lt;pre&gt;make check JAVA=jamvm&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;and to use an alternative Java compiler for building the test suite, use&lt;/p&gt;
&lt;div class="CodeRay"&gt;
  &lt;div class="code"&gt;&lt;pre&gt;make JAVAC=ecj&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Malva is a brand new project so there aren't that many tests yet. It has found plenty of problems in Jato that I'm planning to fix. I'm unable to get CACAO working but I'm glad to see that all tests pass with JamVM!&lt;/p&gt;
&lt;p&gt;If you're interested in helping out, feel free to drop by at #jato channel on irc.freenode.net or send me email or patches at &lt;a href="mailto:penberg@kernel.org"&gt;penberg@kernel.org&lt;/a&gt;.&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://penberg.posterous.com/introducing-malva-a-test-suite-for-alternativ"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://penberg.posterous.com/introducing-malva-a-test-suite-for-alternativ#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/penberg?a=P98Yfh6_jNE:_6aivXJIzaQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/penberg?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/penberg?a=P98Yfh6_jNE:_6aivXJIzaQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/penberg?i=P98Yfh6_jNE:_6aivXJIzaQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/penberg?a=P98Yfh6_jNE:_6aivXJIzaQ:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/penberg?i=P98Yfh6_jNE:_6aivXJIzaQ:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/penberg?a=P98Yfh6_jNE:_6aivXJIzaQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/penberg?i=P98Yfh6_jNE:_6aivXJIzaQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/penberg?a=P98Yfh6_jNE:_6aivXJIzaQ:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/penberg?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/penberg?a=P98Yfh6_jNE:_6aivXJIzaQ:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/penberg?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/penberg/~4/P98Yfh6_jNE" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/655374/IMG_1847.JPG</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/4wzI86iMGq7n</posterous:profileUrl>
        <posterous:firstName>Pekka</posterous:firstName>
        <posterous:lastName>Enberg</posterous:lastName>
        <posterous:nickName>penberg</posterous:nickName>
        <posterous:displayName>Pekka Enberg</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://penberg.posterous.com/introducing-malva-a-test-suite-for-alternativ</feedburner:origLink></item>
    <item>
      <pubDate>Sat, 18 Sep 2010 12:15:00 -0700</pubDate>
      <title>Jato 0.1.1 released, what's next?</title>
      <link>http://feedproxy.google.com/~r/penberg/~3/VB3YraVYcaI/jato-011-released-whats-next</link>
      <guid isPermaLink="false">http://penberg.posterous.com/jato-011-released-whats-next</guid>
      <description>&lt;p&gt;
	&lt;p&gt;
&lt;p class="p1"&gt;I just released Jato version 0.1.1. It contains work from Tomek Grabiec and myself to improve performance and compatibility across board. Jato is now capable of running Eclipse and bunch of other big applications on 32-bit x86 Linux so what's next?&lt;/p&gt;
&lt;p class="p1"&gt;The biggest limitation of Jato is that it doesn't run on 64-bit x86 machines. I've also been working on that recently but there's still plenty of things to work on. I've been pondering about introducing an interpreter to Jato to at least make things work on 64-bit.&lt;/p&gt;
&lt;p class="p2"&gt;Another thing that's going to be a problem in the long-term is GNU Classpath. I've heard that it's being dropped from Ubuntu 10.10 beta. There hasn't been a new release of GNU Classpath for a while now and it seems everyone has moved on to OpenJDK and IcedTea. I'd really love to stick with GNU Classpath but it seems that we need to at least support OpenJDK to make Jato a viable option.&lt;/p&gt;
&lt;p class="p2"&gt;On performance side of things, we're actually doing pretty well. I did some benchmarking and compared Jato to CACAO, JamVM, and Hotspot. We're generally faster than JamVM which doesn't have a JIT and are actually pretty close to CACAO in some benchmarks. To improve performance further, we need to implement array bounds check elimination, inlining, and inlining. Our locking functions are pretty fast now but we can make them even faster with lock elision.&lt;/p&gt;
&lt;p class="p2"&gt;I recently started to work on SSA form conversion that will allow us to write certain optimizations easier. It's in really early stages, though, and there's plenty of things to do before we're going to get any benefit from it. Another obvious performance bottleneck is Boehm GC. It's not all that bad but we can see GC allocations show up high in benchmark CPU profiles.&lt;/p&gt;
&lt;p class="p2"&gt;There's also plenty of bugs to fix. JNI API is not complete and core VM APIs like reflection that GNU Classpath relies on are also incomplete. Jato is not really yet in a state where things Just Work (&amp;trade;) but it's good to see Jato grow up. It's pretty impressive how much work we've been able to accomplish although we didn't make it to Google Summer of Code this year. I'm looking forward to another interesting year with Jato!&lt;/p&gt;
&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://penberg.posterous.com/jato-011-released-whats-next"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://penberg.posterous.com/jato-011-released-whats-next#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/penberg?a=VB3YraVYcaI:MeOfubYNxMU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/penberg?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/penberg?a=VB3YraVYcaI:MeOfubYNxMU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/penberg?i=VB3YraVYcaI:MeOfubYNxMU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/penberg?a=VB3YraVYcaI:MeOfubYNxMU:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/penberg?i=VB3YraVYcaI:MeOfubYNxMU:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/penberg?a=VB3YraVYcaI:MeOfubYNxMU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/penberg?i=VB3YraVYcaI:MeOfubYNxMU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/penberg?a=VB3YraVYcaI:MeOfubYNxMU:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/penberg?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/penberg?a=VB3YraVYcaI:MeOfubYNxMU:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/penberg?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/penberg/~4/VB3YraVYcaI" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/655374/IMG_1847.JPG</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/4wzI86iMGq7n</posterous:profileUrl>
        <posterous:firstName>Pekka</posterous:firstName>
        <posterous:lastName>Enberg</posterous:lastName>
        <posterous:nickName>penberg</posterous:nickName>
        <posterous:displayName>Pekka Enberg</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://penberg.posterous.com/jato-011-released-whats-next</feedburner:origLink></item>
    <item>
      <pubDate>Sat, 24 Jul 2010 06:46:00 -0700</pubDate>
      <title>How I Learned Myself a Haskell</title>
      <link>http://feedproxy.google.com/~r/penberg/~3/GlJy-KSUyf4/how-i-learned-myself-a-haskell</link>
      <guid isPermaLink="false">http://penberg.posterous.com/how-i-learned-myself-a-haskell</guid>
      <description>&lt;p&gt;
	&lt;p&gt;I first ventured into the strange land of Haskell in late 2007. I was especially excited by Parsec, a parser framework for Haskell, and wanted to seeif I could write a simple compiler with it. Unfortunately I quickly hit a brick wall unable to write even the simplest program and quietly moved to other things. In the late 2009, I again picked up Haskell from a suggestion of my colleague. This time, armed with Programming in Haskell and &lt;a href="http://book.realworldhaskell.org/"&gt;Real World Haskell&lt;/a&gt;, and Erik Meijer's Functional Programming lecture series videos I was determined to get the bottom of things.&lt;/p&gt;
&lt;p&gt;The first thing I learned was that Haskell is whitespace significant like Python, for example. Significant whitespace means that you define program structure with whitespace, not with explicit syntax (e.g. curly braces) like in most mainstream languages. This little detail that had escaped be earlier helped me immensely - I was now able to write non-trivial functions! The second important lesson was that Haskell has type inference which means that the compiler is able to deduce types for you. For some reason, though, writing out function types explicitly is considered good Haskell style (according to Erik Meier anyway).&lt;/p&gt;
&lt;p&gt;With basic language features figured out, I started looking at how to solve problems in functional way. I had a lot of difficulties gasping the proper mindset until I realized that functional programming is a form of declarative programming. Combined with the fact that Haskell evaluates everything lazily, I finally understood why I was having such a hard time with the language. Instead of writing programs as a series of instructions, I should look at how to combine functions - just like in mathematics - to get the result I wanted. With this realization, the basic building blocks in &lt;a href="http://www.haskell.org/onlinereport/standard-prelude.html"&gt;Haskell Prelude&lt;/a&gt; started to make sense.&lt;/p&gt;
&lt;p&gt;The final obstacle in my understanding of Haskell was, rather unsurprisingly, monads. Learning about them through category theory and other abstract descriptions were a dead end as were the various &lt;a href="http://byorgey.wordpress.com/2009/01/12/abstraction-intuition-and-the-monad-tutorial-fallacy/"&gt;"explain monads by a metaphor"&lt;/a&gt; articles on the internet. What helped me the most was finally giving up trying to "understand monads" and settling on the fact that "a monad is constructed by defining two operations (bind and return) and a type constructor M that must fulfill several properties to allow the correct composition of monadic functions" (&lt;a href="http://en.wikipedia.org/wiki/Monad_(functional_programming)"&gt;Wikipedia&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;I'm still a complete Haskell newbie but the journey so far has been an eye opening experience. The difference between imperative and functional form wasn't news to me - in theory. In practice, my brain was hard-wired to imperative form which is why Haskell seemed borderline insane. Once I got around the basics and understood the functional programming is a form of declarative programming things started to get easier. It's been an interesting journey so far but well worth it. As Alan Perlis once said: "A language that doesn't affect the way you think about programming, is not worth knowing."&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://penberg.posterous.com/how-i-learned-myself-a-haskell"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://penberg.posterous.com/how-i-learned-myself-a-haskell#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/penberg?a=GlJy-KSUyf4:5BFuYH1fRPk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/penberg?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/penberg?a=GlJy-KSUyf4:5BFuYH1fRPk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/penberg?i=GlJy-KSUyf4:5BFuYH1fRPk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/penberg?a=GlJy-KSUyf4:5BFuYH1fRPk:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/penberg?i=GlJy-KSUyf4:5BFuYH1fRPk:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/penberg?a=GlJy-KSUyf4:5BFuYH1fRPk:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/penberg?i=GlJy-KSUyf4:5BFuYH1fRPk:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/penberg?a=GlJy-KSUyf4:5BFuYH1fRPk:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/penberg?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/penberg?a=GlJy-KSUyf4:5BFuYH1fRPk:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/penberg?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/penberg/~4/GlJy-KSUyf4" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/655374/IMG_1847.JPG</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/4wzI86iMGq7n</posterous:profileUrl>
        <posterous:firstName>Pekka</posterous:firstName>
        <posterous:lastName>Enberg</posterous:lastName>
        <posterous:nickName>penberg</posterous:nickName>
        <posterous:displayName>Pekka Enberg</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://penberg.posterous.com/how-i-learned-myself-a-haskell</feedburner:origLink></item>
  </channel>
</rss>

