<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" version="2.0">
  <channel>
    <title>IKVM.NET Weblog</title>
    <link>http://weblog.ikvm.net/</link>
    <description>The development of a Java VM for .NET</description>
    <copyright>Jeroen Frijters</copyright>
    <lastBuildDate>Fri, 26 Jun 2009 04:42:52 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 1.5.3337.0</generator>
    <managingEditor>blog@jeroen.nu</managingEditor>
    <webMaster>blog@jeroen.nu</webMaster>
    <item>
      <trackback:ping>http://weblog.ikvm.net/Trackback.aspx?guid=73837321-ce29-48da-9f12-e60b2b477c41</trackback:ping>
      <pingback:server>http://weblog.ikvm.net/pingback.aspx</pingback:server>
      <pingback:target>http://weblog.ikvm.net/PermaLink.aspx?guid=73837321-ce29-48da-9f12-e60b2b477c41</pingback:target>
      <wfw:comment>http://weblog.ikvm.net/CommentView.aspx?guid=73837321-ce29-48da-9f12-e60b2b477c41</wfw:comment>
      <wfw:commentRss>http://weblog.ikvm.net/SyndicationService.asmx/GetEntryCommentsRss?guid=73837321-ce29-48da-9f12-e60b2b477c41</wfw:commentRss>
      <slash:comments>0</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      I have done a massive amount of fixes to IKVM.Reflection.Emit to make it full
      featured (even though it still doesn't implement all Reflection.Emit APIs, the functionality
      should (almost) all be there, for example via different overloads).
   </p>
        <p>
      I completed support for generics (I think) and fixed many bugs in that area, ikvmc
      only uses a very small amount of generics so these fixes are unlikely to affect it.
   </p>
        <p>
      It's worth explicitly stating the design goals of IKVM.Reflection.Emit:
   </p>
        <ul>
          <li>
         It's a write-only API. Some GetXXX methods or properties may be implemented, but that's
         mostly for its internal convenience. 
      </li>
          <li>
         There is intentionally no error checking. During ikvm development the error checking
         in System.Reflection.Emit has cost me a huge amount of time, it is generally much
         easier to diagnose the problem when you have a broken assembly file. PEverify and
         ILDASM are your friends. 
      </li>
          <li>
         Code that uses System.Reflection.Emit in a write-only way is supposed to "just work"
         (modulo missing APIs, but those changes should be trivial).</li>
        </ul>
        <p>
      I've done some pretty heavy duty testing on it. It should be ready for external (i.e.
      non-ikvmc) usage now. If you decide to use it (or consider using it), please let me
      know. As always, feedback is appreciated.
   </p>
        <p>
      Changes:
   </p>
        <ul>
          <li>
         Added support for ByRef and Pointer types. 
      </li>
          <li>
         Completed support for all literal field constant types and fixed null literal fields. 
      </li>
          <li>
         Added ModuleBuilder.DefineInitializedData(). 
      </li>
          <li>
         Fixed many generics related bugs. 
      </li>
          <li>
         Added a (non-standard) API to ModuleBuilder to set the PE image base address. 
      </li>
          <li>
         Added TypeBuilder.SetParent(). 
      </li>
          <li>
         Added TypeBuilder.GetMethod() and TypeBuilder.GetConstructor() to instantiate methods
         on generic types. 
      </li>
          <li>
         Added a (non-standard) API to ILGenerator to disable the "helpful" automatic leave/endfinally
         instructions in exception blocks. 
      </li>
          <li>
         Added support for pinned local variables. 
      </li>
          <li>
         Added UIntPtr and TypedReference signature encodings. 
      </li>
          <li>
         Fixed handling of TypeBuilder enums in custom attributes. 
      </li>
          <li>
         Added MethodBuilder.SetSignature(). 
      </li>
          <li>
         Added GenericTypeParameterBuilder.SetInterfaceConstraints() and .SetGenericParameterAttributes(). 
      </li>
          <li>
         Fixed (Method|Type)Builder.SetCustomAttribute() to set HasSecurity flag when SuppressUnmanagedCodeSecurityAttribute
         is set. 
      </li>
          <li>
         Added support for defining events.</li>
        </ul>
        <p>
      Binary available here: <a href="http://www.frijters.net/ikvm-refemit-0.41.3464.zip">ikvm-refemit-0.41.3464.zip</a></p>
        <img width="0" height="0" src="http://weblog.ikvm.net/aggbug.ashx?id=73837321-ce29-48da-9f12-e60b2b477c41" />
      </body>
      <title>IKVM.Reflection.Emit Update</title>
      <guid>http://weblog.ikvm.net/PermaLink.aspx?guid=73837321-ce29-48da-9f12-e60b2b477c41</guid>
      <link>http://weblog.ikvm.net/PermaLink.aspx?guid=73837321-ce29-48da-9f12-e60b2b477c41</link>
      <pubDate>Fri, 26 Jun 2009 04:42:52 GMT</pubDate>
      <description>&lt;p&gt;
   I&amp;nbsp;have done a massive amount of fixes to IKVM.Reflection.Emit to make it full
   featured (even though it still doesn't implement all Reflection.Emit APIs, the functionality
   should (almost) all be there, for example via different overloads).
&lt;/p&gt;
&lt;p&gt;
   I completed support for generics (I think) and fixed many bugs in that area, ikvmc
   only uses a very small amount of generics so these fixes are unlikely to affect it.
&lt;/p&gt;
&lt;p&gt;
   It's worth explicitly stating the design goals of IKVM.Reflection.Emit:
&lt;/p&gt;
&lt;ul&gt;
   &lt;li&gt;
      It's a write-only API. Some GetXXX methods or properties may be implemented, but that's
      mostly for its internal convenience. 
   &lt;li&gt;
      There is intentionally no error checking. During ikvm development the error checking
      in System.Reflection.Emit has cost me a huge amount of time, it is generally much
      easier to diagnose the problem when you have a broken assembly file. PEverify and
      ILDASM are your friends. 
   &lt;li&gt;
      Code that uses System.Reflection.Emit in a write-only way is supposed to "just work"
      (modulo missing APIs, but those changes should be trivial).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
   I've done some pretty heavy duty testing on it. It should be ready for external (i.e.
   non-ikvmc) usage now. If you decide to use it (or consider using it), please let me
   know. As always, feedback is appreciated.
&lt;/p&gt;
&lt;p&gt;
   Changes:
&lt;/p&gt;
&lt;ul&gt;
   &lt;li&gt;
      Added support for ByRef and Pointer types. 
   &lt;li&gt;
      Completed support for all literal field constant types and fixed null literal fields. 
   &lt;li&gt;
      Added ModuleBuilder.DefineInitializedData(). 
   &lt;li&gt;
      Fixed many generics related bugs. 
   &lt;li&gt;
      Added a (non-standard) API to ModuleBuilder to set the PE image base address. 
   &lt;li&gt;
      Added TypeBuilder.SetParent(). 
   &lt;li&gt;
      Added TypeBuilder.GetMethod() and TypeBuilder.GetConstructor() to instantiate methods
      on generic types. 
   &lt;li&gt;
      Added a (non-standard) API to ILGenerator to disable the "helpful" automatic leave/endfinally
      instructions in exception blocks. 
   &lt;li&gt;
      Added support for pinned local variables. 
   &lt;li&gt;
      Added UIntPtr and TypedReference signature encodings. 
   &lt;li&gt;
      Fixed handling of TypeBuilder enums in custom attributes. 
   &lt;li&gt;
      Added MethodBuilder.SetSignature(). 
   &lt;li&gt;
      Added GenericTypeParameterBuilder.SetInterfaceConstraints() and .SetGenericParameterAttributes(). 
   &lt;li&gt;
      Fixed (Method|Type)Builder.SetCustomAttribute() to set HasSecurity flag when SuppressUnmanagedCodeSecurityAttribute
      is set. 
   &lt;li&gt;
      Added support for defining events.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
   Binary available here: &lt;a href="http://www.frijters.net/ikvm-refemit-0.41.3464.zip"&gt;ikvm-refemit-0.41.3464.zip&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://weblog.ikvm.net/aggbug.ashx?id=73837321-ce29-48da-9f12-e60b2b477c41"&gt;</description>
      <comments>http://weblog.ikvm.net/CommentView.aspx?guid=73837321-ce29-48da-9f12-e60b2b477c41</comments>
    </item>
    <item>
      <trackback:ping>http://weblog.ikvm.net/Trackback.aspx?guid=0ea23c36-48ea-4d34-a8d0-0c8d49376408</trackback:ping>
      <pingback:server>http://weblog.ikvm.net/pingback.aspx</pingback:server>
      <pingback:target>http://weblog.ikvm.net/PermaLink.aspx?guid=0ea23c36-48ea-4d34-a8d0-0c8d49376408</pingback:target>
      <wfw:comment>http://weblog.ikvm.net/CommentView.aspx?guid=0ea23c36-48ea-4d34-a8d0-0c8d49376408</wfw:comment>
      <wfw:commentRss>http://weblog.ikvm.net/SyndicationService.asmx/GetEntryCommentsRss?guid=0ea23c36-48ea-4d34-a8d0-0c8d49376408</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      A minor update.
   </p>
        <p>
      Changes:
   </p>
        <ul>
          <li>
         Changed version to 0.40.0.2</li>
          <li>
         Changed build to generate rmi stubs instead of depend on .class files in openjdk6-b12-stripped-IKVM-0.40.zip.
         Thanks to Jo Shields for helping with this.</li>
          <li>
         Fixed verifier bugs. Thanks to Brian Heineman for reporting this.</li>
        </ul>
        <p>
      Binaries available here: <a href="http://www.frijters.net/ikvmbin-0.40.0.2.zip">ikvmbin-0.40.0.2.zip</a>.
   </p>
        <p>
      Sources: <a href="http://www.frijters.net/ikvm-0.40.0.2.zip">ikvm-0.40.0.2.zip</a>, <a href="http://www.frijters.net/classpath-0.95-stripped.zip">classpath-0.95-stripped.zip</a>, <a href="http://www.frijters.net/openjdk6-b12-stripped-IKVM-0.40.zip">openjdk6-b12-stripped-IKVM-0.40.zip</a></p>
        <img width="0" height="0" src="http://weblog.ikvm.net/aggbug.ashx?id=0ea23c36-48ea-4d34-a8d0-0c8d49376408" />
      </body>
      <title>IKVM 0.40 Update 1 Release Candidate 0</title>
      <guid>http://weblog.ikvm.net/PermaLink.aspx?guid=0ea23c36-48ea-4d34-a8d0-0c8d49376408</guid>
      <link>http://weblog.ikvm.net/PermaLink.aspx?guid=0ea23c36-48ea-4d34-a8d0-0c8d49376408</link>
      <pubDate>Mon, 15 Jun 2009 05:40:05 GMT</pubDate>
      <description>&lt;p&gt;
   A minor update.
&lt;/p&gt;
&lt;p&gt;
   Changes:
&lt;/p&gt;
&lt;ul&gt;
   &lt;li&gt;
      Changed version to 0.40.0.2&lt;/li&gt;
   &lt;li&gt;
      Changed build to generate rmi stubs instead of depend on .class files in openjdk6-b12-stripped-IKVM-0.40.zip.
      Thanks to Jo Shields for helping with this.&lt;/li&gt;
   &lt;li&gt;
      Fixed verifier bugs. Thanks to Brian Heineman for reporting this.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
   Binaries available here: &lt;a href="http://www.frijters.net/ikvmbin-0.40.0.2.zip"&gt;ikvmbin-0.40.0.2.zip&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
   Sources: &lt;a href="http://www.frijters.net/ikvm-0.40.0.2.zip"&gt;ikvm-0.40.0.2.zip&lt;/a&gt;, &lt;a href="http://www.frijters.net/classpath-0.95-stripped.zip"&gt;classpath-0.95-stripped.zip&lt;/a&gt;, &lt;a href="http://www.frijters.net/openjdk6-b12-stripped-IKVM-0.40.zip"&gt;openjdk6-b12-stripped-IKVM-0.40.zip&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://weblog.ikvm.net/aggbug.ashx?id=0ea23c36-48ea-4d34-a8d0-0c8d49376408"&gt;</description>
      <comments>http://weblog.ikvm.net/CommentView.aspx?guid=0ea23c36-48ea-4d34-a8d0-0c8d49376408</comments>
    </item>
    <item>
      <trackback:ping>http://weblog.ikvm.net/Trackback.aspx?guid=9aa75bec-7b19-47a0-abf2-a28756e5e080</trackback:ping>
      <pingback:server>http://weblog.ikvm.net/pingback.aspx</pingback:server>
      <pingback:target>http://weblog.ikvm.net/PermaLink.aspx?guid=9aa75bec-7b19-47a0-abf2-a28756e5e080</pingback:target>
      <wfw:comment>http://weblog.ikvm.net/CommentView.aspx?guid=9aa75bec-7b19-47a0-abf2-a28756e5e080</wfw:comment>
      <wfw:commentRss>http://weblog.ikvm.net/SyndicationService.asmx/GetEntryCommentsRss?guid=9aa75bec-7b19-47a0-abf2-a28756e5e080</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      I've <a href="http://sourceforge.net/project/showfiles.php?group_id=69637">released
      IKVM 0.40</a> to SourceForge. The binaries are identical to the ones in <a href="/PermaLink.aspx?guid=926c9651-bb1c-49dd-9cc9-49157fc524f7">release
      candidate 1</a>.
   </p>
        <p>
          <b>Release Notes</b>
        </p>
        <p>
      This document lists the known issues and incompatibilities.
   </p>
        <p>
          <b>Runtime</b>
        </p>
        <ul>
          <li>
         Code unloading (aka class GC) is not supported. 
      </li>
          <li>
         In Java static initializers can deadlock, on .NET some threads can see uninitialized
         state in cases where deadlock would occur on the JVM. 
      </li>
          <li>
         JNI<br /><ul><li>
               Only supported in the default AppDomain. 
            </li><li>
               Only the JNICALL calling convention is supported! (On Windows, HotSpot appears to
               also support the cdecl calling convention). 
            </li><li>
               Cannot call string contructors on already existing string instances 
            </li><li>
               A few limitations in Invocation API support<br /><ul><li>
                     The Invocation API is only supported when running on .NET. 
                  </li><li>
                     JNI_CreateJavaVM: init options "-verbose[:class|:gc|:jni]", "vfprintf", "exit" and
                     "abort" are not implemented. The JDK 1.1 version of JavaVMInitArgs isn't supported. 
                  </li><li>
                     JNI_GetDefaultJavaVMInitArgs not implemented 
                  </li><li>
                     JNI_GetCreatedJavaVMs only returns the JavaVM if the VM was started through JNI or
                     a JNI call that retrieves the JavaVM has already occurred. 
                  </li><li>
                     DestroyJVM is only partially implemented (it waits until there are no more non-daemon
                     Java threads and then returns JNI_ERR). 
                  </li><li>
                     DetachCurrentThread doesn't release monitors held by the thread.</li></ul></li><li>
               Native libraries are never unloaded (because code unloading is not supported).</li></ul></li>
          <li>
         The JVM allows any reference type to be passed where an interface reference is expected
         (and to store any reference type in an interface reference type field), on IKVM this
         results in an IncompatibleClassChangeError. 
      </li>
          <li>
         monitorenter / monitorexit cannot be used on unitialized this reference. 
      </li>
          <li>
         Floating point is not fully spec compliant. 
      </li>
          <li>
         A method returning a boolean that returns an integer other than 0 or 1 behaves differently
         (this also applies to byte/char/short and for method parameters). 
      </li>
          <li>
         Synchronized blocks are not async exception safe. 
      </li>
          <li>
         Ghost arrays don't throw ArrayStoreException when you store an object that doesn't
         implement the ghost interface. 
      </li>
          <li>
         Class loading is more eager than on the reference VM. 
      </li>
          <li>
         Interface implementation methods are never really final (interface can be reimplemented
         by .NET subclasses). 
      </li>
          <li>
         JSR-133 finalization spec change is not fully implemented. The JSR-133 changes dictate
         that an object should not be finalized unless the Object constructor has run successfully,
         but this isn't implemented.</li>
        </ul>
        <p>
          <b>Static Compiler (ikvmc)</b>
        </p>
        <ul>
          <li>
         Some subtle differences with ikvmc compiled code for public members inherited from
         non-public base classes (so called "access stubs"). Because the access stub lives
         in a derived class, when accessing a member in a base class, the derived cctor will
         be run whereas java (and ikvm) only runs the base cctor. 
      </li>
          <li>
         Try blocks around base class ctor invocation result in unverifiable code (no known
         compilers produce this type of code). 
      </li>
          <li>
         Try/catch blocks before base class ctor invocation result in unverifiable code (this
         actually happens with the Eclipse compiler when you pass a class literal to the base
         class ctor and compile with -target 1.4). 
      </li>
          <li>
         Only code compiled in a single assembly fully obeys the JLS binary compatibility rules. 
      </li>
          <li>
         An assembly can only contain one resource with a particular name. 
      </li>
          <li>
         Passing incorrect command line options to ikvmc may result in an exception rather
         than a proper error messages.</li>
        </ul>
        <p>
          <b>Class Library</b>
        </p>
        <p>
      Most class library code is based on OpenJDK 6 build 12. Below is a list of divergences
      and IKVM specific implementation notes.
   </p>
        <table cellspacing="0">
          <tbody>
            <tr>
              <td style="BORDER-TOP: black 1px solid">
               com.sun.security.auth.module        
            </td>
              <td style="BORDER-TOP: black 1px solid">
               Not implemented.</td>
            </tr>
            <tr bgcolor="#f0f0f0">
              <td>
               java.applet</td>
              <td>
               GNU Classpath implementation. Not implemented.</td>
            </tr>
            <tr>
              <td>
               java.awt</td>
              <td>
               GNU Classpath implementation with partial System.Windows.Forms based back-end. Not
               supported.</td>
            </tr>
            <tr bgcolor="#f0f0f0">
              <td>
               java.io.Console</td>
              <td>
               Not implemented.</td>
            </tr>
            <tr>
              <td>
               java.lang.instrument</td>
              <td>
               Not implemented.</td>
            </tr>
            <tr bgcolor="#f0f0f0">
              <td>
               java.lang.management</td>
              <td>
               Not implemented.</td>
            </tr>
            <tr>
              <td>
               java.net</td>
              <td>
               No IPv6 support implemented.</td>
            </tr>
            <tr bgcolor="#f0f0f0">
              <td>
               java.net.ProxySelector</td>
              <td>
               Getting the default system proxy for a URL is not implemented.</td>
            </tr>
            <tr>
              <td>
               java.text.Bidi</td>
              <td>
               GNU Classpath implementation. Not supported.</td>
            </tr>
            <tr bgcolor="#f0f0f0">
              <td>
               java.util.zip</td>
              <td>
               Partially based on GNU Classpath implementation.</td>
            </tr>
            <tr>
              <td>
               javax.imageio.plugins.jpeg</td>
              <td>
               Partial implementation. JPEGs can be read and written, but there is no metadata support.</td>
            </tr>
            <tr bgcolor="#f0f0f0">
              <td>
               javax.management</td>
              <td>
               Not implemented.</td>
            </tr>
            <tr>
              <td>
               javax.print</td>
              <td>
               Not implemented.</td>
            </tr>
            <tr bgcolor="#f0f0f0">
              <td>
               javax.script</td>
              <td>
               Not implemented.</td>
            </tr>
            <tr>
              <td>
               javax.smartcardio</td>
              <td>
               Not implemented.</td>
            </tr>
            <tr bgcolor="#f0f0f0">
              <td>
               javax.sound</td>
              <td>
               Not implemented.</td>
            </tr>
            <tr>
              <td>
               javax.swing</td>
              <td>
               GNU Classpath implementation. Not supported.</td>
            </tr>
            <tr bgcolor="#f0f0f0">
              <td>
               javax.tools</td>
              <td>
               Not implemented.</td>
            </tr>
            <tr>
              <td>
               org.ietfs.jgss</td>
              <td>
               Not implemented.</td>
            </tr>
            <tr bgcolor="#f0f0f0">
              <td>
               sun.jdbc.odbc</td>
              <td>
               Implementation based on .NET ODBC managed provider.</td>
            </tr>
            <tr>
              <td>
               sun.net.www.content.audio</td>
              <td>
               Audio content handlers not implemented.</td>
            </tr>
            <tr bgcolor="#f0f0f0">
              <td style="BORDER-BOTTOM: black 1px solid">
               sun.net.www.content.image</td>
              <td style="BORDER-BOTTOM: black 1px solid">
               Image content handlers not implemented.</td>
            </tr>
          </tbody>
        </table>
        <p>
      The entire public API is available, so "Not implemented." for javax.print, for example,
      means that the API is there but there is no back-end to provide the actual printing
      support. "Not supported." means that the code is there and probably works at least
      somewhat, but that I'm less likely to fix bugs reported in these areas.
   </p>
        <p>
      Specific API notes:
   </p>
        <ul>
          <li>
         java.lang.Thread.stop(Throwable t) doesn't support throwing arbitrary exceptions on
         other threads (only java.lang.ThreadDeath). 
      </li>
          <li>
         java.lang.Thread.holdsLock(Object o) causes a spurious notify on the object (this
         is allowed by the J2SE 5.0 spec). 
      </li>
          <li>
         java.lang.String.intern() strings are never garbage collected. 
      </li>
          <li>
         Weak/soft references and reference queues are inefficient and do not fully implement
         the required semantics. 
      </li>
          <li>
         java.lang.ref.SoftReference: Soft references are not guaranteed to be cleared before
         an OutOfMemoryError is thrown. 
      </li>
          <li>
         Threads started outside of Java aren't "visible" (e.g. in ThreadGroup.enumerate())
         until they first call Thread.currentThread(). 
      </li>
          <li>
         java.lang.Thread.getState() returns WAITING or TIMED_WAITING instead of BLOCKING when
         we're inside Object.wait() and blocking to re-acquire the monitor. 
      </li>
          <li>
         java.nio.channel.FileChannel.lock() shared locks are only supported on Windows NT
         derived operating systems. 
      </li>
          <li>
         java.lang.SecurityManager: Deprecated methods not implemented: classDepth(String),
         inClass(String), classLoaderDepth(), currentLoadedClass(), currentClassLoader(), inClassLoader()</li>
        </ul>
        <p>
          <b>Supported Platforms</b>
        </p>
        <p>
      This release has been tested on the following CLI implementations / platforms:
   </p>
        <table border="0">
          <tbody>
            <tr>
              <td>
                <b>CLI Implementation       </b>
              </td>
              <td>
                <b>Architecture      </b>
              </td>
              <td>
                <b>Operating System</b>
              </td>
            </tr>
            <tr>
              <td>
               .NET 2.0 SP2</td>
              <td>
               x86</td>
              <td>
               Windows</td>
            </tr>
            <tr>
              <td>
               .NET 2.0 SP2</td>
              <td>
               x64</td>
              <td>
               Windows</td>
            </tr>
          </tbody>
        </table>
        <p>
          <br />
          <b>Partial Trust</b>
        </p>
        <p>
      There is experimental support for running in partial trust.<br />
       
   </p>
        <img width="0" height="0" src="http://weblog.ikvm.net/aggbug.ashx?id=9aa75bec-7b19-47a0-abf2-a28756e5e080" />
      </body>
      <title>IKVM 0.40 Released</title>
      <guid>http://weblog.ikvm.net/PermaLink.aspx?guid=9aa75bec-7b19-47a0-abf2-a28756e5e080</guid>
      <link>http://weblog.ikvm.net/PermaLink.aspx?guid=9aa75bec-7b19-47a0-abf2-a28756e5e080</link>
      <pubDate>Fri, 05 Jun 2009 13:32:45 GMT</pubDate>
      <description>&lt;p&gt;
   I've &lt;a href="http://sourceforge.net/project/showfiles.php?group_id=69637"&gt;released
   IKVM 0.40&lt;/a&gt; to SourceForge. The binaries are identical to the ones in &lt;a href="/PermaLink.aspx?guid=926c9651-bb1c-49dd-9cc9-49157fc524f7"&gt;release
   candidate 1&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
   &lt;b&gt;Release Notes&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
   This document lists the known issues and incompatibilities.
&lt;/p&gt;
&lt;p&gt;
   &lt;b&gt;Runtime&lt;/b&gt;
&lt;/p&gt;
&lt;ul&gt;
   &lt;li&gt;
      Code unloading (aka class GC) is not supported. 
   &lt;li&gt;
      In Java static initializers can deadlock, on .NET some threads can see uninitialized
      state in cases where deadlock would occur on the JVM. 
   &lt;li&gt;
      JNI&lt;br&gt;
      &lt;ul&gt;
         &lt;li&gt;
            Only supported in the default AppDomain. 
         &lt;li&gt;
            Only the JNICALL calling convention is supported! (On Windows, HotSpot appears to
            also support the cdecl calling convention). 
         &lt;li&gt;
            Cannot call string contructors on already existing string instances 
         &lt;li&gt;
            A few limitations in Invocation API support&lt;br&gt;
            &lt;ul&gt;
               &lt;li&gt;
                  The Invocation API is only supported when running on .NET. 
               &lt;li&gt;
                  JNI_CreateJavaVM: init options "-verbose[:class|:gc|:jni]", "vfprintf", "exit" and
                  "abort" are not implemented. The JDK 1.1 version of JavaVMInitArgs isn't supported. 
               &lt;li&gt;
                  JNI_GetDefaultJavaVMInitArgs not implemented 
               &lt;li&gt;
                  JNI_GetCreatedJavaVMs only returns the JavaVM if the VM was started through JNI or
                  a JNI call that retrieves the JavaVM has already occurred. 
               &lt;li&gt;
                  DestroyJVM is only partially implemented (it waits until there are no more non-daemon
                  Java threads and then returns JNI_ERR). 
               &lt;li&gt;
                  DetachCurrentThread doesn't release monitors held by the thread.&lt;/li&gt;
            &lt;/ul&gt;
         &lt;li&gt;
            Native libraries are never unloaded (because code unloading is not supported).&lt;/li&gt;
      &lt;/ul&gt;
   &lt;li&gt;
      The JVM allows any reference type to be passed where an interface reference is expected
      (and to store any reference type in an interface reference type field), on IKVM this
      results in an IncompatibleClassChangeError. 
   &lt;li&gt;
      monitorenter / monitorexit cannot be used on unitialized this reference. 
   &lt;li&gt;
      Floating point is not fully spec compliant. 
   &lt;li&gt;
      A method returning a boolean that returns an integer other than 0 or 1 behaves differently
      (this also applies to byte/char/short and for method parameters). 
   &lt;li&gt;
      Synchronized blocks are not async exception safe. 
   &lt;li&gt;
      Ghost arrays don't throw ArrayStoreException when you store an object that doesn't
      implement the ghost interface. 
   &lt;li&gt;
      Class loading is more eager than on the reference VM. 
   &lt;li&gt;
      Interface implementation methods are never really final (interface can be reimplemented
      by .NET subclasses). 
   &lt;li&gt;
      JSR-133 finalization spec change is not fully implemented. The JSR-133 changes dictate
      that an object should not be finalized unless the Object constructor has run successfully,
      but this isn't implemented.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
   &lt;b&gt;Static Compiler (ikvmc)&lt;/b&gt;
&lt;/p&gt;
&lt;ul&gt;
   &lt;li&gt;
      Some subtle differences with ikvmc compiled code for public members inherited from
      non-public base classes (so called "access stubs"). Because the access stub lives
      in a derived class, when accessing a member in a base class, the derived cctor will
      be run whereas java (and ikvm) only runs the base cctor. 
   &lt;li&gt;
      Try blocks around base class ctor invocation result in unverifiable code (no known
      compilers produce this type of code). 
   &lt;li&gt;
      Try/catch blocks before base class ctor invocation result in unverifiable code (this
      actually happens with the Eclipse compiler when you pass a class literal to the base
      class ctor and compile with -target 1.4). 
   &lt;li&gt;
      Only code compiled in a single assembly fully obeys the JLS binary compatibility rules. 
   &lt;li&gt;
      An assembly can only contain one resource with a particular name. 
   &lt;li&gt;
      Passing incorrect command line options to ikvmc may result in an exception rather
      than a proper error messages.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
   &lt;b&gt;Class Library&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
   Most class library code is based on OpenJDK 6 build 12. Below is a list of divergences
   and IKVM specific implementation notes.
&lt;/p&gt;
&lt;table cellspacing=0&gt;
   &lt;tbody&gt;
      &lt;tr&gt;
         &lt;td style="BORDER-TOP: black 1px solid"&gt;
            com.sun.security.auth.module&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
         &lt;/td&gt;
         &lt;td style="BORDER-TOP: black 1px solid"&gt;
            Not implemented.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr bgcolor=#f0f0f0&gt;
         &lt;td&gt;
            java.applet&lt;/td&gt;
         &lt;td&gt;
            GNU Classpath implementation. Not implemented.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
         &lt;td&gt;
            java.awt&lt;/td&gt;
         &lt;td&gt;
            GNU Classpath implementation with partial System.Windows.Forms based back-end. Not
            supported.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr bgcolor=#f0f0f0&gt;
         &lt;td&gt;
            java.io.Console&lt;/td&gt;
         &lt;td&gt;
            Not implemented.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
         &lt;td&gt;
            java.lang.instrument&lt;/td&gt;
         &lt;td&gt;
            Not implemented.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr bgcolor=#f0f0f0&gt;
         &lt;td&gt;
            java.lang.management&lt;/td&gt;
         &lt;td&gt;
            Not implemented.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
         &lt;td&gt;
            java.net&lt;/td&gt;
         &lt;td&gt;
            No IPv6 support implemented.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr bgcolor=#f0f0f0&gt;
         &lt;td&gt;
            java.net.ProxySelector&lt;/td&gt;
         &lt;td&gt;
            Getting the default system proxy for a URL is not implemented.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
         &lt;td&gt;
            java.text.Bidi&lt;/td&gt;
         &lt;td&gt;
            GNU Classpath implementation. Not supported.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr bgcolor=#f0f0f0&gt;
         &lt;td&gt;
            java.util.zip&lt;/td&gt;
         &lt;td&gt;
            Partially based on GNU Classpath implementation.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
         &lt;td&gt;
            javax.imageio.plugins.jpeg&lt;/td&gt;
         &lt;td&gt;
            Partial implementation. JPEGs can be read and written, but there is no metadata support.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr bgcolor=#f0f0f0&gt;
         &lt;td&gt;
            javax.management&lt;/td&gt;
         &lt;td&gt;
            Not implemented.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
         &lt;td&gt;
            javax.print&lt;/td&gt;
         &lt;td&gt;
            Not implemented.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr bgcolor=#f0f0f0&gt;
         &lt;td&gt;
            javax.script&lt;/td&gt;
         &lt;td&gt;
            Not implemented.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
         &lt;td&gt;
            javax.smartcardio&lt;/td&gt;
         &lt;td&gt;
            Not implemented.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr bgcolor=#f0f0f0&gt;
         &lt;td&gt;
            javax.sound&lt;/td&gt;
         &lt;td&gt;
            Not implemented.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
         &lt;td&gt;
            javax.swing&lt;/td&gt;
         &lt;td&gt;
            GNU Classpath implementation. Not supported.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr bgcolor=#f0f0f0&gt;
         &lt;td&gt;
            javax.tools&lt;/td&gt;
         &lt;td&gt;
            Not implemented.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
         &lt;td&gt;
            org.ietfs.jgss&lt;/td&gt;
         &lt;td&gt;
            Not implemented.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr bgcolor=#f0f0f0&gt;
         &lt;td&gt;
            sun.jdbc.odbc&lt;/td&gt;
         &lt;td&gt;
            Implementation based on .NET ODBC managed provider.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
         &lt;td&gt;
            sun.net.www.content.audio&lt;/td&gt;
         &lt;td&gt;
            Audio content handlers not implemented.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr bgcolor=#f0f0f0&gt;
         &lt;td style="BORDER-BOTTOM: black 1px solid"&gt;
            sun.net.www.content.image&lt;/td&gt;
         &lt;td style="BORDER-BOTTOM: black 1px solid"&gt;
            Image content handlers not implemented.&lt;/td&gt;
      &lt;/tr&gt;
   &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;
   The entire public API is available, so "Not implemented." for javax.print, for example,
   means that the API is there but there is no back-end to provide the actual printing
   support. "Not supported." means that the code is there and probably works at least
   somewhat, but that I'm less likely to fix bugs reported in these areas.
&lt;/p&gt;
&lt;p&gt;
   Specific API notes:
&lt;/p&gt;
&lt;ul&gt;
   &lt;li&gt;
      java.lang.Thread.stop(Throwable t) doesn't support throwing arbitrary exceptions on
      other threads (only java.lang.ThreadDeath). 
   &lt;li&gt;
      java.lang.Thread.holdsLock(Object o) causes a spurious notify on the object (this
      is allowed by the J2SE 5.0 spec). 
   &lt;li&gt;
      java.lang.String.intern() strings are never garbage collected. 
   &lt;li&gt;
      Weak/soft references and reference queues are inefficient and do not fully implement
      the required semantics. 
   &lt;li&gt;
      java.lang.ref.SoftReference: Soft references are not guaranteed to be cleared before
      an OutOfMemoryError is thrown. 
   &lt;li&gt;
      Threads started outside of Java aren't "visible" (e.g. in ThreadGroup.enumerate())
      until they first call Thread.currentThread(). 
   &lt;li&gt;
      java.lang.Thread.getState() returns WAITING or TIMED_WAITING instead of BLOCKING when
      we're inside Object.wait() and blocking to re-acquire the monitor. 
   &lt;li&gt;
      java.nio.channel.FileChannel.lock() shared locks are only supported on Windows NT
      derived operating systems. 
   &lt;li&gt;
      java.lang.SecurityManager: Deprecated methods not implemented: classDepth(String),
      inClass(String), classLoaderDepth(), currentLoadedClass(), currentClassLoader(), inClassLoader()&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
   &lt;b&gt;Supported Platforms&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
   This release has been tested on the following CLI implementations / platforms:
&lt;/p&gt;
&lt;table border=0&gt;
   &lt;tbody&gt;
      &lt;tr&gt;
         &lt;td&gt;
            &lt;b&gt;CLI Implementation&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/b&gt;&lt;/td&gt;
         &lt;td&gt;
            &lt;b&gt;Architecture&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/b&gt;&lt;/td&gt;
         &lt;td&gt;
            &lt;b&gt;Operating System&lt;/b&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
         &lt;td&gt;
            .NET 2.0 SP2&lt;/td&gt;
         &lt;td&gt;
            x86&lt;/td&gt;
         &lt;td&gt;
            Windows&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
         &lt;td&gt;
            .NET 2.0 SP2&lt;/td&gt;
         &lt;td&gt;
            x64&lt;/td&gt;
         &lt;td&gt;
            Windows&lt;/td&gt;
      &lt;/tr&gt;
   &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;
   &lt;br&gt;
   &lt;b&gt;Partial Trust&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
   There is experimental support for running in partial trust.&lt;br&gt;
   &amp;nbsp;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://weblog.ikvm.net/aggbug.ashx?id=9aa75bec-7b19-47a0-abf2-a28756e5e080"&gt;</description>
      <comments>http://weblog.ikvm.net/CommentView.aspx?guid=9aa75bec-7b19-47a0-abf2-a28756e5e080</comments>
    </item>
    <item>
      <trackback:ping>http://weblog.ikvm.net/Trackback.aspx?guid=230eb091-659b-49f8-8dbc-fbd5e8946538</trackback:ping>
      <pingback:server>http://weblog.ikvm.net/pingback.aspx</pingback:server>
      <pingback:target>http://weblog.ikvm.net/PermaLink.aspx?guid=230eb091-659b-49f8-8dbc-fbd5e8946538</pingback:target>
      <wfw:comment>http://weblog.ikvm.net/CommentView.aspx?guid=230eb091-659b-49f8-8dbc-fbd5e8946538</wfw:comment>
      <wfw:commentRss>http://weblog.ikvm.net/SyndicationService.asmx/GetEntryCommentsRss?guid=230eb091-659b-49f8-8dbc-fbd5e8946538</wfw:commentRss>
      <slash:comments>4</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      Class gc support has now been checked in (but is not available in the attached binaries,
      because they've been built for .NET 2.0). This is somewhat of a milestone snapshot,
      because it is the first version that no longer requires GNU Classpath to build*. However,
      please note that AWT / Swing still needs a lot of work.
   </p>
        <p>
      *What this means is that there is no longer an external dependency on GNU Classpath.
      There is still GNU Classpath derived code in ikvm's source tree. For example, small
      parts of AWT and the pure Java  implementation of java.util.zip.
   </p>
        <p>
      Changes:
   </p>
        <ul>
          <li>
         Removed dependency on classpath-0.95-stripped.zip. All AWT / Swing code is now from
         OpenJDK or in the ikvm codebase.</li>
          <li>
         Defined NET_4_0 when building on .NET 4.0 to enable conditional code.</li>
          <li>
         Changed IKVM.Reflection.Emit's ModuleBuilder and AssemblyBuilder to extends Module
         and Assembly respectively when building on .NET 4.0.</li>
          <li>
         Added .NET 4.0 fix to IKVM.Reflection.Emit (for the fact that Type now defines ==
         operator).</li>
          <li>
         Fixed locking for image based Graphics.</li>
          <li>
         Various changes to remove warnings when building on .NET 4.0.</li>
          <li>
         Several fixes related to dynamic assemblies.</li>
          <li>
         Several improvements to better work in partial trust.</li>
          <li>
         More AWT work.</li>
          <li>
         Made java.lang.reflect.Field exception messages the same as JDK 6.</li>
          <li>
         Implemented class gc (for .NET 4.0 builds).</li>
          <li>
         Added -Xnoclassgc option to ikvm (only meaningful in a .NET 4.0 build).</li>
        </ul>
        <p>
      Binaries available here: <a href="http://www.frijters.net/ikvmbin-0.41.3440.zip">ikvmbin-0.41.3440.zip</a>.
   </p>
        <img width="0" height="0" src="http://weblog.ikvm.net/aggbug.ashx?id=230eb091-659b-49f8-8dbc-fbd5e8946538" />
      </body>
      <title>New Development Snapshot</title>
      <guid>http://weblog.ikvm.net/PermaLink.aspx?guid=230eb091-659b-49f8-8dbc-fbd5e8946538</guid>
      <link>http://weblog.ikvm.net/PermaLink.aspx?guid=230eb091-659b-49f8-8dbc-fbd5e8946538</link>
      <pubDate>Tue, 02 Jun 2009 08:49:01 GMT</pubDate>
      <description>&lt;p&gt;
   Class gc support has now been checked in (but is not available in the attached binaries,
   because they've been built for .NET 2.0). This is somewhat of a milestone snapshot,
   because it is the first version that no longer requires GNU Classpath to build*. However,
   please note that AWT / Swing still needs a lot of work.
&lt;/p&gt;
&lt;p&gt;
   *What this means is that there is no longer an external dependency on GNU Classpath.
   There is still GNU Classpath derived code in ikvm's source tree. For example, small
   parts of AWT and the pure Java&amp;nbsp; implementation of java.util.zip.
&lt;/p&gt;
&lt;p&gt;
   Changes:
&lt;/p&gt;
&lt;ul&gt;
   &lt;li&gt;
      Removed dependency on classpath-0.95-stripped.zip. All AWT / Swing code is now from
      OpenJDK or in the ikvm codebase.&lt;/li&gt;
   &lt;li&gt;
      Defined NET_4_0 when building on .NET 4.0 to enable conditional code.&lt;/li&gt;
   &lt;li&gt;
      Changed IKVM.Reflection.Emit's ModuleBuilder and AssemblyBuilder to extends Module
      and Assembly respectively when building on .NET 4.0.&lt;/li&gt;
   &lt;li&gt;
      Added .NET 4.0 fix to IKVM.Reflection.Emit (for the fact that Type now defines ==
      operator).&lt;/li&gt;
   &lt;li&gt;
      Fixed locking for image based Graphics.&lt;/li&gt;
   &lt;li&gt;
      Various changes to remove warnings when building on .NET 4.0.&lt;/li&gt;
   &lt;li&gt;
      Several fixes related to dynamic assemblies.&lt;/li&gt;
   &lt;li&gt;
      Several improvements to better work in partial trust.&lt;/li&gt;
   &lt;li&gt;
      More AWT work.&lt;/li&gt;
   &lt;li&gt;
      Made java.lang.reflect.Field exception messages the same as JDK 6.&lt;/li&gt;
   &lt;li&gt;
      Implemented class gc (for .NET 4.0 builds).&lt;/li&gt;
   &lt;li&gt;
      Added -Xnoclassgc option to ikvm (only meaningful in a .NET 4.0 build).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
   Binaries available here: &lt;a href="http://www.frijters.net/ikvmbin-0.41.3440.zip"&gt;ikvmbin-0.41.3440.zip&lt;/a&gt;.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://weblog.ikvm.net/aggbug.ashx?id=230eb091-659b-49f8-8dbc-fbd5e8946538"&gt;</description>
      <comments>http://weblog.ikvm.net/CommentView.aspx?guid=230eb091-659b-49f8-8dbc-fbd5e8946538</comments>
    </item>
    <item>
      <trackback:ping>http://weblog.ikvm.net/Trackback.aspx?guid=7f47ad08-cdef-4dc2-b2fd-5dfdc1baf11d</trackback:ping>
      <pingback:server>http://weblog.ikvm.net/pingback.aspx</pingback:server>
      <pingback:target>http://weblog.ikvm.net/PermaLink.aspx?guid=7f47ad08-cdef-4dc2-b2fd-5dfdc1baf11d</pingback:target>
      <wfw:comment>http://weblog.ikvm.net/CommentView.aspx?guid=7f47ad08-cdef-4dc2-b2fd-5dfdc1baf11d</wfw:comment>
      <wfw:commentRss>http://weblog.ikvm.net/SyndicationService.asmx/GetEntryCommentsRss?guid=7f47ad08-cdef-4dc2-b2fd-5dfdc1baf11d</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      Back in the PDC build of .NET 4.0 another interesting new feature was introduced: <a href="http://msdn.microsoft.com/en-us/library/dd287757(VS.100).aspx">ConditionalWeakTable&lt;TKey,
      TValue&gt;</a>. This is a special purpose dictionary to associate objects with other
      objects. It was introduced to help the <a href="http://www.codeplex.com/dlr">DLR</a>,
      which needs the ability to add properties to arbitrary objects. The documentation
      is pretty clear and the <a href="http://blogs.msdn.com/clrteam/archive/2009/05/18/the-conditional-weak-table-enabling-dynamic-object-properties.aspx">CLR
      team blog</a> also has some info on it, so I won't rehash that. Instead I'll just
      mention that ConditionalWeakTable itself is not a magic type (i.e. the runtime knows
      nothing about it), but instead it is built on top of a private value type System.Runtime.Compiler.Services.DependentHandle.
      DependentHandle is essentially a handle based <a href="http://en.wikipedia.org/wiki/Ephemeron">ephemeron</a> implementation.
   </p>
        <p>
          <b>JVM vs CLR</b>
        </p>
        <p>
      This means that the CLR now comes a bit closer to the JVM in terms of memory management
      features. The JVM has had some very interesting reference types for a long time (<a href="http://java.sun.com/javase/6/docs/api/java/lang/ref/WeakReference.html">WeakReference</a>, <a href="http://java.sun.com/javase/6/docs/api/java/lang/ref/SoftReference.html">SoftReference</a> and <a href="http://java.sun.com/javase/6/docs/api/java/lang/ref/PhantomReference.html">PhantomReference</a>)
      and the ability to have these references posted to a <a href="http://java.sun.com/javase/6/docs/api/java/lang/ref/ReferenceQueue.html">ReferenceQueue</a> by
      the GC when the relevant change in reachability to the referenced object occurs.
   </p>
        <p>
      Unfortunately there still isn't parity between the CLR and JVM, even though the CLR
      now provides a capability the JVM doesn't.
   </p>
        <table border="0" cellspacing="0">
          <tbody>
            <tr>
              <td>
                <b>Java</b>
              </td>
              <td>
                <b>.NET</b>
              </td>
              <td>
                <b>Notes</b>
              </td>
            </tr>
            <tr style="BACKGROUND: #eee">
              <td>
               ReferenceQueue</td>
              <td>
               n/a</td>
              <td>
                </td>
            </tr>
            <tr>
              <td>
               WeakReference</td>
              <td>
               WeakReference (short)</td>
              <td>
               .NET has no ReferenceQueue equivalent notification mechanism.</td>
            </tr>
            <tr style="BACKGROUND: #eee">
              <td>
               n/a</td>
              <td>
               WeakReference (long)     
            </td>
              <td>
              </td>
            </tr>
            <tr>
              <td>
               SoftReference</td>
              <td>
               n/a</td>
              <td>
                </td>
            </tr>
            <tr style="BACKGROUND: #eee">
              <td>
               PhantomReference     
            </td>
              <td>
               n/a</td>
              <td>
                </td>
            </tr>
            <tr>
              <td>
               WeakHashMap</td>
              <td>
               n/a</td>
              <td>
                </td>
            </tr>
            <tr style="BACKGROUND: #eee">
              <td>
               n/a</td>
              <td>
               ConditionalWeakTable</td>
              <td>
                </td>
            </tr>
          </tbody>
        </table>
        <p>
      (If you think that Java's WeakHashMap and .NET's ConditionalWeakTable are similar,
      consider that ConditionalWeakTable is <a href="http://en.wikipedia.org/wiki/Ephemeron">ephemeron</a> based.
      Plus the fact that WeakHashMap uses <a href="http://msdn.microsoft.com/en-us/library/ms404247.aspx">short
      weak references</a> and ConditionalWeakTable uses long weak references.)
   </p>
        <p>
          <b>IKVM.NET</b>
        </p>
        <p>
      ConditionalWeakTable is very useful for IKVM in several places:
   </p>
        <ul>
          <li>
         Used to support class unloading by mapping Assembly to ClassLoader.</li>
          <li>
         Used in caching of MethodBase properties.</li>
          <li>
         Can be used to track the type of ghost arrays.</li>
          <li>
         Can be used to more efficiently implement adding references to a ReferenceQueue.</li>
        </ul>
        <p>
          <b>Java</b>
        </p>
        <p>
      Given the effort going into Java 7 to improve support for dynamic languages it would
      not be surprising nor unwelcome to see ephemerons being added to the JVM.
   </p>
        <img width="0" height="0" src="http://weblog.ikvm.net/aggbug.ashx?id=7f47ad08-cdef-4dc2-b2fd-5dfdc1baf11d" />
      </body>
      <title>.NET 4.0 -- System.Runtime.CompilerServices.ConditionalWeakTable</title>
      <guid>http://weblog.ikvm.net/PermaLink.aspx?guid=7f47ad08-cdef-4dc2-b2fd-5dfdc1baf11d</guid>
      <link>http://weblog.ikvm.net/PermaLink.aspx?guid=7f47ad08-cdef-4dc2-b2fd-5dfdc1baf11d</link>
      <pubDate>Fri, 29 May 2009 06:08:54 GMT</pubDate>
      <description>&lt;p&gt;
   Back in the PDC build of .NET 4.0 another interesting new feature was introduced: &lt;a href="http://msdn.microsoft.com/en-us/library/dd287757(VS.100).aspx"&gt;ConditionalWeakTable&amp;lt;TKey,
   TValue&amp;gt;&lt;/a&gt;. This is a special purpose dictionary to associate objects with other
   objects. It was introduced to help the &lt;a href="http://www.codeplex.com/dlr"&gt;DLR&lt;/a&gt;,
   which needs the ability to add properties to arbitrary objects. The documentation
   is pretty clear and the &lt;a href="http://blogs.msdn.com/clrteam/archive/2009/05/18/the-conditional-weak-table-enabling-dynamic-object-properties.aspx"&gt;CLR
   team blog&lt;/a&gt; also has some info on it, so I won't rehash that. Instead I'll just
   mention that ConditionalWeakTable itself is not a magic type (i.e. the runtime knows
   nothing about it), but instead it is built on top of a private value type System.Runtime.Compiler.Services.DependentHandle.
   DependentHandle is essentially a handle based &lt;a href="http://en.wikipedia.org/wiki/Ephemeron"&gt;ephemeron&lt;/a&gt; implementation.
&lt;/p&gt;
&lt;p&gt;
   &lt;b&gt;JVM vs CLR&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
   This means that the CLR now comes a bit closer to the JVM in terms of memory management
   features. The JVM has had some very interesting reference types for a long time (&lt;a href="http://java.sun.com/javase/6/docs/api/java/lang/ref/WeakReference.html"&gt;WeakReference&lt;/a&gt;, &lt;a href="http://java.sun.com/javase/6/docs/api/java/lang/ref/SoftReference.html"&gt;SoftReference&lt;/a&gt; and &lt;a href="http://java.sun.com/javase/6/docs/api/java/lang/ref/PhantomReference.html"&gt;PhantomReference&lt;/a&gt;)
   and the ability to have these references posted to a &lt;a href="http://java.sun.com/javase/6/docs/api/java/lang/ref/ReferenceQueue.html"&gt;ReferenceQueue&lt;/a&gt; by
   the GC when the relevant change in reachability to the referenced object occurs.
&lt;/p&gt;
&lt;p&gt;
   Unfortunately there still isn't parity between the CLR and JVM, even though the CLR
   now provides a capability the JVM doesn't.
&lt;/p&gt;
&lt;table border=0 cellspacing=0&gt;
   &lt;tbody&gt;
      &lt;tr&gt;
         &lt;td&gt;
            &lt;b&gt;Java&lt;/b&gt;&lt;/td&gt;
         &lt;td&gt;
            &lt;b&gt;.NET&lt;/b&gt;&lt;/td&gt;
         &lt;td&gt;
            &lt;b&gt;Notes&lt;/b&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr style="BACKGROUND: #eee"&gt;
         &lt;td&gt;
            ReferenceQueue&lt;/td&gt;
         &lt;td&gt;
            n/a&lt;/td&gt;
         &lt;td&gt;
            &amp;nbsp;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
         &lt;td&gt;
            WeakReference&lt;/td&gt;
         &lt;td&gt;
            WeakReference (short)&lt;/td&gt;
         &lt;td&gt;
            .NET has no ReferenceQueue equivalent notification mechanism.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr style="BACKGROUND: #eee"&gt;
         &lt;td&gt;
            n/a&lt;/td&gt;
         &lt;td&gt;
            WeakReference (long)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
         &lt;/td&gt;
         &lt;td&gt;
         &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
         &lt;td&gt;
            SoftReference&lt;/td&gt;
         &lt;td&gt;
            n/a&lt;/td&gt;
         &lt;td&gt;
            &amp;nbsp;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr style="BACKGROUND: #eee"&gt;
         &lt;td&gt;
            PhantomReference&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
         &lt;/td&gt;
         &lt;td&gt;
            n/a&lt;/td&gt;
         &lt;td&gt;
            &amp;nbsp;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
         &lt;td&gt;
            WeakHashMap&lt;/td&gt;
         &lt;td&gt;
            n/a&lt;/td&gt;
         &lt;td&gt;
            &amp;nbsp;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr style="BACKGROUND: #eee"&gt;
         &lt;td&gt;
            n/a&lt;/td&gt;
         &lt;td&gt;
            ConditionalWeakTable&lt;/td&gt;
         &lt;td&gt;
            &amp;nbsp;&lt;/td&gt;
      &lt;/tr&gt;
   &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;
   (If you think that Java's WeakHashMap and .NET's ConditionalWeakTable are similar,
   consider that ConditionalWeakTable is &lt;a href="http://en.wikipedia.org/wiki/Ephemeron"&gt;ephemeron&lt;/a&gt; based.
   Plus the fact that WeakHashMap uses &lt;a href="http://msdn.microsoft.com/en-us/library/ms404247.aspx"&gt;short
   weak references&lt;/a&gt; and ConditionalWeakTable uses long weak references.)
&lt;/p&gt;
&lt;p&gt;
   &lt;b&gt;IKVM.NET&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
   ConditionalWeakTable is very useful for IKVM in several places:
&lt;/p&gt;
&lt;ul&gt;
   &lt;li&gt;
      Used to support class unloading by mapping Assembly to ClassLoader.&lt;/li&gt;
   &lt;li&gt;
      Used in caching of MethodBase properties.&lt;/li&gt;
   &lt;li&gt;
      Can be used to track the type of ghost arrays.&lt;/li&gt;
   &lt;li&gt;
      Can be used to more efficiently implement adding references to a ReferenceQueue.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
   &lt;b&gt;Java&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
   Given the effort going into Java 7 to improve support for dynamic languages it would
   not be surprising nor unwelcome to see ephemerons being added to the JVM.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://weblog.ikvm.net/aggbug.ashx?id=7f47ad08-cdef-4dc2-b2fd-5dfdc1baf11d"&gt;</description>
      <comments>http://weblog.ikvm.net/CommentView.aspx?guid=7f47ad08-cdef-4dc2-b2fd-5dfdc1baf11d</comments>
    </item>
    <item>
      <trackback:ping>http://weblog.ikvm.net/Trackback.aspx?guid=e53ece91-5d47-4769-b760-4d871f700e71</trackback:ping>
      <pingback:server>http://weblog.ikvm.net/pingback.aspx</pingback:server>
      <pingback:target>http://weblog.ikvm.net/PermaLink.aspx?guid=e53ece91-5d47-4769-b760-4d871f700e71</pingback:target>
      <wfw:comment>http://weblog.ikvm.net/CommentView.aspx?guid=e53ece91-5d47-4769-b760-4d871f700e71</wfw:comment>
      <wfw:commentRss>http://weblog.ikvm.net/SyndicationService.asmx/GetEntryCommentsRss?guid=e53ece91-5d47-4769-b760-4d871f700e71</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      I never thought I'd see the day, but it has arrived:
   </p>
        <p>
          <code>
            <font color="#0000ff">using</font> System;<br /><font color="#0000ff">using</font> java.net;<br /><br /><font color="#0000ff">class</font><font color="#2b91af">ClassGC</font><br />
      {<br />
        <font color="#0000ff">static void</font> Main(<font color="#0000ff">string</font>[]
      args)<br />
        {<br />
          <font color="#2b91af">URLClassLoader</font> loader = <font color="#0000ff">new</font><font color="#2b91af">URLClassLoader</font>(<font color="#0000ff">new</font><font color="#2b91af">URL</font>[]
      { <font color="#0000ff">new</font><font color="#2b91af">URL</font>(<font color="#a31515">"file:/c:/j/"</font>)
      });<br />
          <font color="#2b91af">WeakReference</font> weak = <font color="#0000ff">new</font><font color="#2b91af">WeakReference</font>(loader);<br />
          <font color="#0000ff">object</font> obj = loader.loadClass(<font color="#a31515">"test"</font>).newInstance();<br />
          <font color="#2b91af">Console</font>.WriteLine(obj);;<br />
          <font color="#2b91af">GC</font>.Collect();<br />
          <font color="#2b91af">Console</font>.WriteLine(weak.Target);<br />
          <font color="#008000">//GC.KeepAlive(obj);<br /></font>  }<br />
      }</code>
        </p>
        <p>
      Running this on .NET 4.0 (with references to a version of IKVM 0.41 in which I've
      prototyped support for class gc):<br /><strong>(Don't forget to run in Release mode, otherwise the JIT will extend the lifetime
      of the local variables to the end of the method.)</strong></p>
        <p>
          <img src="http://www.frijters.net/classgc1.png" />
        </p>
        <p>
      Uncomment the GC.KeepAlive(obj) line to show that the object instance really does
      keep alive the class loader (and all associated IKVM and .NET infrastructure):
   </p>
        <p>
          <img src="http://www.frijters.net/classgc2.png" />
        </p>
        <p>
      Source + binaries (remember this is prototype level code): <a href="http://www.frijters.net/ikvm-classgc-prototype.zip">ikvm-classgc-prototype.zip</a></p>
        <img width="0" height="0" src="http://weblog.ikvm.net/aggbug.ashx?id=e53ece91-5d47-4769-b760-4d871f700e71" />
      </body>
      <title>Class Unloading</title>
      <guid>http://weblog.ikvm.net/PermaLink.aspx?guid=e53ece91-5d47-4769-b760-4d871f700e71</guid>
      <link>http://weblog.ikvm.net/PermaLink.aspx?guid=e53ece91-5d47-4769-b760-4d871f700e71</link>
      <pubDate>Wed, 27 May 2009 05:31:59 GMT</pubDate>
      <description>&lt;p&gt;
   I never thought I'd see the day, but it has arrived:
&lt;/p&gt;
&lt;p&gt;
   &lt;code&gt;&lt;font color=#0000ff&gt;using&lt;/font&gt; System;&lt;br&gt;
   &lt;font color=#0000ff&gt;using&lt;/font&gt; java.net;&lt;br&gt;
   &lt;br&gt;
   &lt;font color=#0000ff&gt;class&lt;/font&gt; &lt;font color=#2b91af&gt;ClassGC&lt;/font&gt;
   &lt;br&gt;
   {&lt;br&gt;
   &amp;nbsp; &lt;font color=#0000ff&gt;static void&lt;/font&gt; Main(&lt;font color=#0000ff&gt;string&lt;/font&gt;[]
   args)&lt;br&gt;
   &amp;nbsp; {&lt;br&gt;
   &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color=#2b91af&gt;URLClassLoader&lt;/font&gt; loader = &lt;font color=#0000ff&gt;new&lt;/font&gt; &lt;font color=#2b91af&gt;URLClassLoader&lt;/font&gt;(&lt;font color=#0000ff&gt;new&lt;/font&gt; &lt;font color=#2b91af&gt;URL&lt;/font&gt;[]
   { &lt;font color=#0000ff&gt;new&lt;/font&gt; &lt;font color=#2b91af&gt;URL&lt;/font&gt;(&lt;font color=#a31515&gt;"file:/c:/j/"&lt;/font&gt;)
   });&lt;br&gt;
   &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color=#2b91af&gt;WeakReference&lt;/font&gt; weak = &lt;font color=#0000ff&gt;new&lt;/font&gt; &lt;font color=#2b91af&gt;WeakReference&lt;/font&gt;(loader);&lt;br&gt;
   &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color=#0000ff&gt;object&lt;/font&gt; obj = loader.loadClass(&lt;font color=#a31515&gt;"test"&lt;/font&gt;).newInstance();&lt;br&gt;
   &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color=#2b91af&gt;Console&lt;/font&gt;.WriteLine(obj);;&lt;br&gt;
   &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color=#2b91af&gt;GC&lt;/font&gt;.Collect();&lt;br&gt;
   &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color=#2b91af&gt;Console&lt;/font&gt;.WriteLine(weak.Target);&lt;br&gt;
   &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color=#008000&gt;//GC.KeepAlive(obj);&lt;br&gt;
   &lt;/font&gt;&amp;nbsp; }&lt;br&gt;
   }&lt;/code&gt;
&lt;/p&gt;
&lt;p&gt;
   Running this on .NET 4.0 (with references to a version of IKVM 0.41 in which I've
   prototyped support for class gc):&lt;br&gt;
   &lt;strong&gt;(Don't forget to run in Release mode, otherwise the JIT will extend the lifetime
   of the local variables to the end of the method.)&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
   &lt;img src="http://www.frijters.net/classgc1.png"&gt;
&lt;/p&gt;
&lt;p&gt;
   Uncomment the GC.KeepAlive(obj) line to show that the object instance really does
   keep alive the class loader (and all associated IKVM and .NET infrastructure):
&lt;/p&gt;
&lt;p&gt;
   &lt;img src="http://www.frijters.net/classgc2.png"&gt;
&lt;/p&gt;
&lt;p&gt;
   Source + binaries (remember this is prototype level code): &lt;a href="http://www.frijters.net/ikvm-classgc-prototype.zip"&gt;ikvm-classgc-prototype.zip&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://weblog.ikvm.net/aggbug.ashx?id=e53ece91-5d47-4769-b760-4d871f700e71"&gt;</description>
      <comments>http://weblog.ikvm.net/CommentView.aspx?guid=e53ece91-5d47-4769-b760-4d871f700e71</comments>
    </item>
    <item>
      <trackback:ping>http://weblog.ikvm.net/Trackback.aspx?guid=7e0740e1-49fa-48fd-bbd9-4d66a92ad7c8</trackback:ping>
      <pingback:server>http://weblog.ikvm.net/pingback.aspx</pingback:server>
      <pingback:target>http://weblog.ikvm.net/PermaLink.aspx?guid=7e0740e1-49fa-48fd-bbd9-4d66a92ad7c8</pingback:target>
      <wfw:comment>http://weblog.ikvm.net/CommentView.aspx?guid=7e0740e1-49fa-48fd-bbd9-4d66a92ad7c8</wfw:comment>
      <wfw:commentRss>http://weblog.ikvm.net/SyndicationService.asmx/GetEntryCommentsRss?guid=7e0740e1-49fa-48fd-bbd9-4d66a92ad7c8</wfw:commentRss>
      <slash:comments>0</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <strong>.NET 4.0</strong>
        </p>
        <p>
      I wasn't sure whether to release a snapshot or not, because things are still very
      much in flux, but I decided that the ability to build on .NET 4.0 was a big enough
      feature to at least warrant a development snapshot (albeit a source snapshot this
      time).
   </p>
        <p>
      I had to make a number of changes to be able to build on .NET 4.0:
   </p>
        <ul>
          <li>
            <a href="http://msdn.microsoft.com/en-us/library/system.type(VS.100).aspx">System.Type</a> now
         overloads the <a href="http://msdn.microsoft.com/en-us/library/system.type.op_equality(VS.100).aspx">==
         operator</a>, so TypeBase.Equals had to be modified to use <a href="http://msdn.microsoft.com/en-us/library/system.object.referenceequals(VS.100).aspx">ReferenceEquals</a> to
         avoid infinite recursion. 
      </li>
          <li>
         Apply the <a href="http://msdn.microsoft.com/en-us/library/system.security.securityrulesattribute(VS.100).aspx">SecurityRules</a>(<a href="http://msdn.microsoft.com/en-us/library/system.security.securityruleset(VS.100).aspx">Level1</a>)
         attribute to IKVM.Runtime.dll to opt out of the new security model. This is needed
         because IKVM.Runtime.dll has the AllowPartiallyTrustedCallers and SecurityCritical
         attributes. 
      </li>
          <li>
         Modify ikvmc and the runtime to apply the SecurityRules(Level1) attribute to all generated
         assemblies to opt out of the new security model to work around a (likely) bug in .NET
         4.0. Special thanks to <a href="http://blogs.msdn.com/shawnfa/">Shawn Farkas</a> for
         helping with this. 
      </li>
          <li>
         Modify JNI code to move RuntimeMethodHandle from unmanaged to managed data. 
      </li>
          <li>
         Changed IKVM.Reflection.Emit to write current runtime version into module header instead
         of a hardcoded "v2.0.50727".</li>
        </ul>
        <p>
          <b>Visual Studio 2010</b>
        </p>
        <p>
      Building with Visual Studio was never supported and it still isn't. You need to build
      with NAnt ("nant clean &amp;&amp; nant"). You can use Visual Studio 2010 to edit the
      source and do test compiles (after first building with NAnt to make sure the required
      files are all there). If you want to use nant to build on .NET 4.0 you'll have to
      modify NAnt.exe.config to add the net-4.0 target framework and add a &lt;supportedRuntime
      ... /&gt; line to the &lt;startup&gt; section.
   </p>
        <p>
          <b>Changes</b>
        </p>
        <ul>
          <li>
         Many AWT / Swing related changes as Volker continues to merge in OpenJDK code. 
      </li>
          <li>
         Fixed java.io.File.list() to not throw a System.NotSupportedException for certain
         invalid paths. 
      </li>
          <li>
         Added workaround for .NET C# compiler bug that prevents it from subclassing a Java
         class that implements a protected abstract method using a public method. This workaround
         is required to build IKVM.AWT.WinForms.dll, but the Mono C# compiler has a related
         bug that I have not been able to work around. Filed Mono Bug <a href="https://bugzilla.novell.com/show_bug.cgi?id=506757">#506757</a>. 
      </li>
          <li>
         Added support for java.io.File.list() to VFS. 
      </li>
          <li>
         Added support for declarative security attributes on assemblies and types. 
      </li>
          <li>
         Added some sun.misc.Unsafe methods that appear to be used by JRuby. 
      </li>
          <li>
         Various fixes for .NET 4.0 beta 1. 
      </li>
          <li>
         Removed code that supports .NET 2.0 RTM (SP1 is now required).</li>
        </ul>
        <p>
      The source-only snapshot is availabe here: <a href="http://www.frijters.net/ikvmsrc-0.41.3432.zip">ikvmsrc-0.41.3432.zip</a>.
   </p>
        <img width="0" height="0" src="http://weblog.ikvm.net/aggbug.ashx?id=7e0740e1-49fa-48fd-bbd9-4d66a92ad7c8" />
      </body>
      <title>Development Snapshot</title>
      <guid>http://weblog.ikvm.net/PermaLink.aspx?guid=7e0740e1-49fa-48fd-bbd9-4d66a92ad7c8</guid>
      <link>http://weblog.ikvm.net/PermaLink.aspx?guid=7e0740e1-49fa-48fd-bbd9-4d66a92ad7c8</link>
      <pubDate>Mon, 25 May 2009 05:10:29 GMT</pubDate>
      <description>&lt;p&gt;
   &lt;strong&gt;.NET 4.0&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
   I wasn't sure whether to release a snapshot or not, because things are still very
   much in flux, but I decided that the ability to build on .NET 4.0 was a big enough
   feature to at least warrant a development snapshot (albeit a source snapshot this
   time).
&lt;/p&gt;
&lt;p&gt;
   I had to make a number of changes to be able to build on .NET 4.0:
&lt;/p&gt;
&lt;ul&gt;
   &lt;li&gt;
      &lt;a href="http://msdn.microsoft.com/en-us/library/system.type(VS.100).aspx"&gt;System.Type&lt;/a&gt; now
      overloads the &lt;a href="http://msdn.microsoft.com/en-us/library/system.type.op_equality(VS.100).aspx"&gt;==
      operator&lt;/a&gt;, so TypeBase.Equals had to be modified to use &lt;a href="http://msdn.microsoft.com/en-us/library/system.object.referenceequals(VS.100).aspx"&gt;ReferenceEquals&lt;/a&gt; to
      avoid infinite recursion. 
   &lt;li&gt;
      Apply the &lt;a href="http://msdn.microsoft.com/en-us/library/system.security.securityrulesattribute(VS.100).aspx"&gt;SecurityRules&lt;/a&gt;(&lt;a href="http://msdn.microsoft.com/en-us/library/system.security.securityruleset(VS.100).aspx"&gt;Level1&lt;/a&gt;)
      attribute to IKVM.Runtime.dll to opt out of the new security model. This is needed
      because IKVM.Runtime.dll has the AllowPartiallyTrustedCallers and SecurityCritical
      attributes. 
   &lt;li&gt;
      Modify ikvmc and the runtime to apply the SecurityRules(Level1) attribute to all generated
      assemblies to opt out of the new security model to work around a (likely) bug in .NET
      4.0. Special thanks to &lt;a href="http://blogs.msdn.com/shawnfa/"&gt;Shawn Farkas&lt;/a&gt; for
      helping with this. 
   &lt;li&gt;
      Modify JNI code to move RuntimeMethodHandle from unmanaged to managed data. 
   &lt;li&gt;
      Changed IKVM.Reflection.Emit to write current runtime version into module header instead
      of a hardcoded "v2.0.50727".&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
   &lt;b&gt;Visual Studio 2010&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
   Building with Visual Studio was never supported and it still isn't. You need to build
   with NAnt ("nant clean &amp;amp;&amp;amp; nant"). You can use Visual Studio 2010 to edit the
   source and do test compiles (after first building with NAnt to make sure the required
   files are all there). If you want to use nant to build on .NET 4.0 you'll have to
   modify NAnt.exe.config to add the net-4.0 target framework and add a &amp;lt;supportedRuntime
   ... /&amp;gt; line to the &amp;lt;startup&amp;gt; section.
&lt;/p&gt;
&lt;p&gt;
   &lt;b&gt;Changes&lt;/b&gt;
&lt;/p&gt;
&lt;ul&gt;
   &lt;li&gt;
      Many AWT / Swing related changes as Volker continues to merge in OpenJDK code. 
   &lt;li&gt;
      Fixed java.io.File.list() to not throw a System.NotSupportedException for certain
      invalid paths. 
   &lt;li&gt;
      Added workaround for .NET C# compiler bug that prevents it from subclassing a Java
      class that implements a protected abstract method using a public method. This workaround
      is required to build IKVM.AWT.WinForms.dll, but the Mono C# compiler has a related
      bug that I have not been able to work around. Filed Mono Bug&amp;nbsp;&lt;a href="https://bugzilla.novell.com/show_bug.cgi?id=506757"&gt;#506757&lt;/a&gt;. 
   &lt;li&gt;
      Added support for java.io.File.list() to VFS. 
   &lt;li&gt;
      Added support for declarative security attributes on assemblies and types. 
   &lt;li&gt;
      Added some sun.misc.Unsafe methods that appear to be used by JRuby. 
   &lt;li&gt;
      Various fixes for .NET 4.0 beta 1. 
   &lt;li&gt;
      Removed code that supports .NET 2.0 RTM (SP1 is now required).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
   The source-only snapshot is availabe here: &lt;a href="http://www.frijters.net/ikvmsrc-0.41.3432.zip"&gt;ikvmsrc-0.41.3432.zip&lt;/a&gt;.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://weblog.ikvm.net/aggbug.ashx?id=7e0740e1-49fa-48fd-bbd9-4d66a92ad7c8"&gt;</description>
      <comments>http://weblog.ikvm.net/CommentView.aspx?guid=7e0740e1-49fa-48fd-bbd9-4d66a92ad7c8</comments>
    </item>
    <item>
      <trackback:ping>http://weblog.ikvm.net/Trackback.aspx?guid=0df57cfc-1028-42c0-a706-c5f1bac529d0</trackback:ping>
      <pingback:server>http://weblog.ikvm.net/pingback.aspx</pingback:server>
      <pingback:target>http://weblog.ikvm.net/PermaLink.aspx?guid=0df57cfc-1028-42c0-a706-c5f1bac529d0</pingback:target>
      <wfw:comment>http://weblog.ikvm.net/CommentView.aspx?guid=0df57cfc-1028-42c0-a706-c5f1bac529d0</wfw:comment>
      <wfw:commentRss>http://weblog.ikvm.net/SyndicationService.asmx/GetEntryCommentsRss?guid=0df57cfc-1028-42c0-a706-c5f1bac529d0</wfw:commentRss>
      <slash:comments>3</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      This week .NET 4.0 beta 1 was released. I've been playing around with it a little
      bit and was very excited to find a new Reflection.Emit feature. If you're a reflection
      nut like me, the title of this blog entry probably already gave it away. Dynamic assemblies
      can now be garbage collected!
   </p>
        <p>
          <b>A Little Demo</b>
        </p>
        <p>
      Running this simple example will show that a System.Type instance is created and then
      garbage collected.
   </p>
        <p>
          <code>
            <font color="#0000ff">using</font> System;<br /><font color="#0000ff">using</font> System.Reflection;<br /><font color="#0000ff">using</font> System.Reflection.Emit;<br /><br /><font color="#0000ff">class</font><font color="#2b91af">RunAndCollectDemo</font><br />
      {<br />
        <font color="#0000ff">static void</font> Main()<br />
        {<br />
          <font color="#2b91af">Type</font> type = CreateType();<br />
          <font color="#0000ff">object</font> obj = <font color="#2b91af">Activator</font>.CreateInstance(type);<br />
          <font color="#2b91af">Console</font>.WriteLine(obj);<br />
          <font color="#2b91af">WeakReference</font> weak = <font color="#0000ff">new</font><font color="#2b91af">WeakReference</font>(type);<br />
          type = <font color="#0000ff">null</font>;<br />
          obj = <font color="#0000ff">null</font>;<br />
          <font color="#2b91af">Console</font>.WriteLine(<font color="#a31515">"type
      = "</font> + weak.Target);<br />
          <font color="#2b91af">GC</font>.Collect();<br />
          <font color="#2b91af">Console</font>.WriteLine(<font color="#a31515">"type
      = "</font> + weak.Target);<br />
        }<br /><br />
        <font color="#0000ff">static</font><font color="#2b91af">Type</font> CreateType()<br />
        {<br />
          <font color="#2b91af">AssemblyBuilder</font> ab =<br />
            <font color="#2b91af">AppDomain</font>.CurrentDomain.DefineDynamicAssembly(<br />
              <font color="#0000ff">new</font><font color="#2b91af">AssemblyName</font>(<font color="#a31515">"foo"</font>),<br />
              <span style="BACKGROUND-COLOR: #ffff00"><font color="#2b91af">AssemblyBuilderAccess</font>.RunAndCollect</span>);<br />
          <font color="#2b91af">ModuleBuilder</font> modb = ab.DefineDynamicModule(<font color="#a31515">"foo.dll"</font>);<br />
          <font color="#2b91af">TypeBuilder</font> tb = modb.DefineType(<font color="#a31515">"Foo"</font>);<br />
          <font color="#0000ff">return</font> tb.CreateType();<br />
        }<br />
      }</code>
        </p>
        <p>
      As you can imagine, this required some pretty deep runtime changes. One of them is
      that <a href="http://msdn.microsoft.com/en-us/library/system.runtimemethodhandle.aspx">RuntimeMethodHandle</a> is
      no longer a handle. Previously it contained an unmanaged pointer to the native CLR
      datastructure corresponding to the method, but now it contains a managed interface
      reference, because the corresponding method can be garbage collected (I haven't looked
      into it, but I assume that the interface reference points either to a RuntimeMethodInfo <strike>or
      in the case of a method in a RunAndCollect assembly a proxy that contains a weak reference
      to the RuntimeMethodInfo</strike>. UPDATE: <a href="http://msdn.microsoft.com/en-us/library/dd554932(VS.100).aspx">A
      RuntimeMethodHandle represents a strong reference</a>.)
   </p>
        <p>
      Somewhat ironically, this change breaks the compilation of ikvm's <a href="http://ikvm.cvs.sourceforge.net/viewvc/ikvm/ikvm/runtime/JniInterface.cs?revision=1.69&amp;view=markup">JniInterface.cs</a>,
      because it stuffs a RuntimeMethodHandle in unmanaged memory. The fix is fairly
      straightforward (using a GCHandle to point to the MethodBase instead), but it does
      reveal an interesting property of C#, if you use unsafe code the (normally hidden)
      implementation details of managed value types can cause your code to break (and not
      because you explicitly depend on any internals).
   </p>
        <p>
          <b>What Does This Mean for IKVM.NET?</b>
        </p>
        <p>
      It would be really awesome if this feature could be used to finally make ClassLoaders
      garbage collectable, but unfortunately for that to happen <a href="/commentview.aspx?guid=54">this
      ancient bug</a> first has to be fixed.
   </p>
        <img width="0" height="0" src="http://weblog.ikvm.net/aggbug.ashx?id=0df57cfc-1028-42c0-a706-c5f1bac529d0" />
      </body>
      <title>.NET 4.0 -- AssemblyBuilderAccess.RunAndCollect</title>
      <guid>http://weblog.ikvm.net/PermaLink.aspx?guid=0df57cfc-1028-42c0-a706-c5f1bac529d0</guid>
      <link>http://weblog.ikvm.net/PermaLink.aspx?guid=0df57cfc-1028-42c0-a706-c5f1bac529d0</link>
      <pubDate>Fri, 22 May 2009 05:26:20 GMT</pubDate>
      <description>&lt;p&gt;
   This week .NET 4.0 beta 1 was released. I've been playing around with it a little
   bit and was very excited to find a new Reflection.Emit feature. If you're a reflection
   nut like me, the title of this blog entry probably already gave it away. Dynamic assemblies
   can now be garbage collected!
&lt;/p&gt;
&lt;p&gt;
   &lt;b&gt;A Little Demo&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
   Running this simple example will show that a System.Type instance is created and then
   garbage collected.
&lt;/p&gt;
&lt;p&gt;
   &lt;code&gt;&lt;font color=#0000ff&gt;using&lt;/font&gt; System;&lt;br&gt;
   &lt;font color=#0000ff&gt;using&lt;/font&gt; System.Reflection;&lt;br&gt;
   &lt;font color=#0000ff&gt;using&lt;/font&gt; System.Reflection.Emit;&lt;br&gt;
   &lt;br&gt;
   &lt;font color=#0000ff&gt;class&lt;/font&gt; &lt;font color=#2b91af&gt;RunAndCollectDemo&lt;/font&gt;
   &lt;br&gt;
   {&lt;br&gt;
   &amp;nbsp; &lt;font color=#0000ff&gt;static void&lt;/font&gt; Main()&lt;br&gt;
   &amp;nbsp; {&lt;br&gt;
   &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color=#2b91af&gt;Type&lt;/font&gt; type = CreateType();&lt;br&gt;
   &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color=#0000ff&gt;object&lt;/font&gt; obj = &lt;font color=#2b91af&gt;Activator&lt;/font&gt;.CreateInstance(type);&lt;br&gt;
   &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color=#2b91af&gt;Console&lt;/font&gt;.WriteLine(obj);&lt;br&gt;
   &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color=#2b91af&gt;WeakReference&lt;/font&gt; weak = &lt;font color=#0000ff&gt;new&lt;/font&gt; &lt;font color=#2b91af&gt;WeakReference&lt;/font&gt;(type);&lt;br&gt;
   &amp;nbsp;&amp;nbsp;&amp;nbsp; type = &lt;font color=#0000ff&gt;null&lt;/font&gt;;&lt;br&gt;
   &amp;nbsp;&amp;nbsp;&amp;nbsp; obj = &lt;font color=#0000ff&gt;null&lt;/font&gt;;&lt;br&gt;
   &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color=#2b91af&gt;Console&lt;/font&gt;.WriteLine(&lt;font color=#a31515&gt;"type
   = "&lt;/font&gt; + weak.Target);&lt;br&gt;
   &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color=#2b91af&gt;GC&lt;/font&gt;.Collect();&lt;br&gt;
   &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color=#2b91af&gt;Console&lt;/font&gt;.WriteLine(&lt;font color=#a31515&gt;"type
   = "&lt;/font&gt; + weak.Target);&lt;br&gt;
   &amp;nbsp; }&lt;br&gt;
   &lt;br&gt;
   &amp;nbsp; &lt;font color=#0000ff&gt;static&lt;/font&gt; &lt;font color=#2b91af&gt;Type&lt;/font&gt; CreateType()&lt;br&gt;
   &amp;nbsp; {&lt;br&gt;
   &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color=#2b91af&gt;AssemblyBuilder&lt;/font&gt; ab =&lt;br&gt;
   &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color=#2b91af&gt;AppDomain&lt;/font&gt;.CurrentDomain.DefineDynamicAssembly(&lt;br&gt;
   &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color=#0000ff&gt;new&lt;/font&gt; &lt;font color=#2b91af&gt;AssemblyName&lt;/font&gt;(&lt;font color=#a31515&gt;"foo"&lt;/font&gt;),&lt;br&gt;
   &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="BACKGROUND-COLOR: #ffff00"&gt;&lt;font color=#2b91af&gt;AssemblyBuilderAccess&lt;/font&gt;.RunAndCollect&lt;/span&gt;);&lt;br&gt;
   &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color=#2b91af&gt;ModuleBuilder&lt;/font&gt; modb = ab.DefineDynamicModule(&lt;font color=#a31515&gt;"foo.dll"&lt;/font&gt;);&lt;br&gt;
   &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color=#2b91af&gt;TypeBuilder&lt;/font&gt; tb = modb.DefineType(&lt;font color=#a31515&gt;"Foo"&lt;/font&gt;);&lt;br&gt;
   &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color=#0000ff&gt;return&lt;/font&gt; tb.CreateType();&lt;br&gt;
   &amp;nbsp; }&lt;br&gt;
   }&lt;/code&gt;
&lt;/p&gt;
&lt;p&gt;
   As you can imagine, this required some pretty deep runtime changes. One of them is
   that &lt;a href="http://msdn.microsoft.com/en-us/library/system.runtimemethodhandle.aspx"&gt;RuntimeMethodHandle&lt;/a&gt; is
   no longer a handle. Previously it contained an unmanaged pointer to the native CLR
   datastructure corresponding to the method, but now it contains a managed interface
   reference, because the corresponding method can be garbage collected (I haven't looked
   into it, but I assume that the interface reference points either to a RuntimeMethodInfo &lt;strike&gt;or
   in the case of a method in a RunAndCollect assembly a proxy that contains a weak reference
   to the RuntimeMethodInfo&lt;/strike&gt;. UPDATE: &lt;a href="http://msdn.microsoft.com/en-us/library/dd554932(VS.100).aspx"&gt;A
   RuntimeMethodHandle represents a strong reference&lt;/a&gt;.)
&lt;/p&gt;
&lt;p&gt;
   Somewhat ironically, this change breaks the compilation of ikvm's &lt;a href="http://ikvm.cvs.sourceforge.net/viewvc/ikvm/ikvm/runtime/JniInterface.cs?revision=1.69&amp;amp;view=markup"&gt;JniInterface.cs&lt;/a&gt;,
   because it stuffs a RuntimeMethodHandle in unmanaged memory. The&amp;nbsp;fix is fairly
   straightforward (using a GCHandle to point to the MethodBase instead), but it does
   reveal an interesting property of C#, if you use unsafe code the (normally hidden)
   implementation details of managed value types can cause your code to break (and not
   because you explicitly depend on any internals).
&lt;/p&gt;
&lt;p&gt;
   &lt;b&gt;What Does This Mean for IKVM.NET?&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
   It would be really awesome if this feature could be used to finally make ClassLoaders
   garbage collectable, but unfortunately for that to happen &lt;a href="/commentview.aspx?guid=54"&gt;this
   ancient bug&lt;/a&gt; first has to be fixed.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://weblog.ikvm.net/aggbug.ashx?id=0df57cfc-1028-42c0-a706-c5f1bac529d0"&gt;</description>
      <comments>http://weblog.ikvm.net/CommentView.aspx?guid=0df57cfc-1028-42c0-a706-c5f1bac529d0</comments>
    </item>
    <item>
      <trackback:ping>http://weblog.ikvm.net/Trackback.aspx?guid=926c9651-bb1c-49dd-9cc9-49157fc524f7</trackback:ping>
      <pingback:server>http://weblog.ikvm.net/pingback.aspx</pingback:server>
      <pingback:target>http://weblog.ikvm.net/PermaLink.aspx?guid=926c9651-bb1c-49dd-9cc9-49157fc524f7</pingback:target>
      <wfw:comment>http://weblog.ikvm.net/CommentView.aspx?guid=926c9651-bb1c-49dd-9cc9-49157fc524f7</wfw:comment>
      <wfw:commentRss>http://weblog.ikvm.net/SyndicationService.asmx/GetEntryCommentsRss?guid=926c9651-bb1c-49dd-9cc9-49157fc524f7</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      Thanks to Nat Luengnaruemitchai the MDB symbol writer has been fixed and finished
      and a couple of bugs were fixed.
   </p>
        <p>
      Changes:
   </p>
        <ul>
          <li>
         Changed version to 0.40.0.1.</li>
          <li>
         Updated copyright notices in OpenJDK assemblies.</li>
          <li>
         Fixed bug in workaround for <a href="https://bugzilla.novell.com/show_bug.cgi?id=486307">#486307</a> that
         could cause "duplicate MemberRef" warnings when running PEVerify on an ikvmc generated
         assembly.</li>
          <li>
         Fixed bug <a href="https://sourceforge.net/tracker/?func=detail&amp;aid=2777128&amp;group_id=69637&amp;atid=525264">#2777128</a>.</li>
          <li>
         Fixed bug <a href="https://sourceforge.net/tracker/?func=detail&amp;aid=2777171&amp;group_id=69637&amp;atid=525264">#2777171</a>.</li>
        </ul>
        <p>
      Binaries available here: <a href="http://www.frijters.net/ikvmbin-0.40.0.1.zip">ikvmbin-0.40.0.1.zip</a><br /><br />
      Sources: <a href="http://www.frijters.net/ikvm-0.40.0.1.zip">ikvm-0.40.0.1.zip</a>, <a href="http://www.frijters.net/classpath-0.95-stripped.zip">classpath-0.95-stripped.zip</a>, <a href="http://www.frijters.net/openjdk6-b12-stripped-IKVM-0.40.zip">openjdk6-b12-stripped-IKVM-0.40.zip</a></p>
        <img width="0" height="0" src="http://weblog.ikvm.net/aggbug.ashx?id=926c9651-bb1c-49dd-9cc9-49157fc524f7" />
      </body>
      <title>IKVM 0.40 Release Candidate 1</title>
      <guid>http://weblog.ikvm.net/PermaLink.aspx?guid=926c9651-bb1c-49dd-9cc9-49157fc524f7</guid>
      <link>http://weblog.ikvm.net/PermaLink.aspx?guid=926c9651-bb1c-49dd-9cc9-49157fc524f7</link>
      <pubDate>Wed, 22 Apr 2009 05:03:48 GMT</pubDate>
      <description>&lt;p&gt;
   Thanks to Nat Luengnaruemitchai the MDB symbol writer has been fixed and finished
   and a couple of bugs were fixed.
&lt;/p&gt;
&lt;p&gt;
   Changes:
&lt;/p&gt;
&lt;ul&gt;
   &lt;li&gt;
      Changed version to 0.40.0.1.&lt;/li&gt;
   &lt;li&gt;
      Updated copyright notices in OpenJDK assemblies.&lt;/li&gt;
   &lt;li&gt;
      Fixed bug in workaround for &lt;a href="https://bugzilla.novell.com/show_bug.cgi?id=486307"&gt;#486307&lt;/a&gt; that
      could cause "duplicate MemberRef" warnings when running PEVerify on an ikvmc generated
      assembly.&lt;/li&gt;
   &lt;li&gt;
      Fixed bug &lt;a href="https://sourceforge.net/tracker/?func=detail&amp;amp;aid=2777128&amp;amp;group_id=69637&amp;amp;atid=525264"&gt;#2777128&lt;/a&gt;.&lt;/li&gt;
   &lt;li&gt;
      Fixed bug &lt;a href="https://sourceforge.net/tracker/?func=detail&amp;amp;aid=2777171&amp;amp;group_id=69637&amp;amp;atid=525264"&gt;#2777171&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
   Binaries available here: &lt;a href="http://www.frijters.net/ikvmbin-0.40.0.1.zip"&gt;ikvmbin-0.40.0.1.zip&lt;/a&gt;
   &lt;br&gt;
   &lt;br&gt;
   Sources: &lt;a href="http://www.frijters.net/ikvm-0.40.0.1.zip"&gt;ikvm-0.40.0.1.zip&lt;/a&gt;, &lt;a href="http://www.frijters.net/classpath-0.95-stripped.zip"&gt;classpath-0.95-stripped.zip&lt;/a&gt;, &lt;a href="http://www.frijters.net/openjdk6-b12-stripped-IKVM-0.40.zip"&gt;openjdk6-b12-stripped-IKVM-0.40.zip&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://weblog.ikvm.net/aggbug.ashx?id=926c9651-bb1c-49dd-9cc9-49157fc524f7"&gt;</description>
      <comments>http://weblog.ikvm.net/CommentView.aspx?guid=926c9651-bb1c-49dd-9cc9-49157fc524f7</comments>
    </item>
    <item>
      <trackback:ping>http://weblog.ikvm.net/Trackback.aspx?guid=77760aba-a035-406d-801d-0a747aa97a10</trackback:ping>
      <pingback:server>http://weblog.ikvm.net/pingback.aspx</pingback:server>
      <pingback:target>http://weblog.ikvm.net/PermaLink.aspx?guid=77760aba-a035-406d-801d-0a747aa97a10</pingback:target>
      <wfw:comment>http://weblog.ikvm.net/CommentView.aspx?guid=77760aba-a035-406d-801d-0a747aa97a10</wfw:comment>
      <wfw:commentRss>http://weblog.ikvm.net/SyndicationService.asmx/GetEntryCommentsRss?guid=77760aba-a035-406d-801d-0a747aa97a10</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      A couple of fixes and some more OpenJDK AWT/Swing merges.
   </p>
        <p>
      Changes:
   </p>
        <ul>
          <li>
         Fixed build regression introduced in previous snapshot caused by different build directory
         structure in OpenJDK 6 b16.</li>
          <li>
         Handle Graphics2D.setPaint(null) correctly.</li>
          <li>
         Integrated OpenJDK java/awt/image and java/awt/image/renderable packages.</li>
          <li>
         Fixed duplicate MemberRefs generated by IKVM.Reflection.Emit caused by Mono workaround
         generic types not being canonicalized.</li>
          <li>
         Integrated OpenJDK sun/swing and sun/awt packages.</li>
        </ul>
        <p>
      Binaries available here: <a href="http://www.frijters.net/ikvmbin-0.41.3398.zip">ikvmbin-0.41.3398.zip</a></p>
        <img width="0" height="0" src="http://weblog.ikvm.net/aggbug.ashx?id=77760aba-a035-406d-801d-0a747aa97a10" />
      </body>
      <title>New Development Snapshot</title>
      <guid>http://weblog.ikvm.net/PermaLink.aspx?guid=77760aba-a035-406d-801d-0a747aa97a10</guid>
      <link>http://weblog.ikvm.net/PermaLink.aspx?guid=77760aba-a035-406d-801d-0a747aa97a10</link>
      <pubDate>Tue, 21 Apr 2009 06:03:55 GMT</pubDate>
      <description>&lt;p&gt;
   A couple of fixes and some more OpenJDK AWT/Swing merges.
&lt;/p&gt;
&lt;p&gt;
   Changes:
&lt;/p&gt;
&lt;ul&gt;
   &lt;li&gt;
      Fixed build regression introduced in previous snapshot caused by different build directory
      structure in OpenJDK 6 b16.&lt;/li&gt;
   &lt;li&gt;
      Handle Graphics2D.setPaint(null) correctly.&lt;/li&gt;
   &lt;li&gt;
      Integrated OpenJDK java/awt/image and java/awt/image/renderable packages.&lt;/li&gt;
   &lt;li&gt;
      Fixed duplicate MemberRefs generated by IKVM.Reflection.Emit caused by Mono workaround
      generic types not being canonicalized.&lt;/li&gt;
   &lt;li&gt;
      Integrated OpenJDK sun/swing and sun/awt packages.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
   Binaries available here: &lt;a href="http://www.frijters.net/ikvmbin-0.41.3398.zip"&gt;ikvmbin-0.41.3398.zip&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://weblog.ikvm.net/aggbug.ashx?id=77760aba-a035-406d-801d-0a747aa97a10"&gt;</description>
      <comments>http://weblog.ikvm.net/CommentView.aspx?guid=77760aba-a035-406d-801d-0a747aa97a10</comments>
    </item>
    <item>
      <trackback:ping>http://weblog.ikvm.net/Trackback.aspx?guid=83441187-b021-4722-b601-977d40f900f5</trackback:ping>
      <pingback:server>http://weblog.ikvm.net/pingback.aspx</pingback:server>
      <pingback:target>http://weblog.ikvm.net/PermaLink.aspx?guid=83441187-b021-4722-b601-977d40f900f5</pingback:target>
      <wfw:comment>http://weblog.ikvm.net/CommentView.aspx?guid=83441187-b021-4722-b601-977d40f900f5</wfw:comment>
      <wfw:commentRss>http://weblog.ikvm.net/SyndicationService.asmx/GetEntryCommentsRss?guid=83441187-b021-4722-b601-977d40f900f5</wfw:commentRss>
      <slash:comments>0</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      Even though 0.40 is still baking, I'm already working on the next version.
   </p>
        <p>
      Changes:
   </p>
        <ul>
          <li>
         Integrated <a href="http://blogs.sun.com/darcy/entry/openjdk_6_b16_source_bundle">OpenJDK
         6 b16</a>. 
      </li>
          <li>
         Changed decoded bytecode stream to use indexes in branches instead of PC offsets. 
      </li>
          <li>
         Fixed .MDB debug symbol generation (thanks to Nat Luengnaruemitchai). 
      </li>
          <li>
         Several AWT fixes contributed by Judit Vasko-Szedlar (Chemaxon). 
      </li>
          <li>
         Moved jsr/ret bytecode processing into a seperate (inlining) pass to reduce complexity
         in the verifier and compiler. 
      </li>
          <li>
         Fixed a bug in the compiler that caused exception handler to be dropped after an unreachable
         exception block was encountered. 
      </li>
          <li>
         Updated copyright notices.</li>
        </ul>
        <p>
      Binaries available here: <a href="http://www.frijters.net/ikvmbin-0.41.3393.zip">ikvmbin-0.41.3393.zip</a><br /><br />
      OpenJDK 6 b16 sources + build artifacts: <a href="http://www.frijters.net/openjdk6-b16-stripped.zip">openjdk6-b16-stripped.zip</a></p>
        <img width="0" height="0" src="http://weblog.ikvm.net/aggbug.ashx?id=83441187-b021-4722-b601-977d40f900f5" />
      </body>
      <title>New Development Snapshot</title>
      <guid>http://weblog.ikvm.net/PermaLink.aspx?guid=83441187-b021-4722-b601-977d40f900f5</guid>
      <link>http://weblog.ikvm.net/PermaLink.aspx?guid=83441187-b021-4722-b601-977d40f900f5</link>
      <pubDate>Thu, 16 Apr 2009 10:26:38 GMT</pubDate>
      <description>&lt;p&gt;
   Even though 0.40 is still baking, I'm already working on the next version.
&lt;/p&gt;
&lt;p&gt;
   Changes:
&lt;/p&gt;
&lt;ul&gt;
   &lt;li&gt;
      Integrated &lt;a href="http://blogs.sun.com/darcy/entry/openjdk_6_b16_source_bundle"&gt;OpenJDK
      6 b16&lt;/a&gt;. 
   &lt;li&gt;
      Changed decoded bytecode stream to use indexes in branches instead of PC offsets. 
   &lt;li&gt;
      Fixed .MDB debug symbol generation (thanks to Nat Luengnaruemitchai). 
   &lt;li&gt;
      Several AWT fixes contributed by Judit Vasko-Szedlar (Chemaxon). 
   &lt;li&gt;
      Moved jsr/ret bytecode processing into a seperate (inlining) pass to reduce complexity
      in the verifier and compiler. 
   &lt;li&gt;
      Fixed a bug in the compiler that caused exception handler to be dropped after an unreachable
      exception block was encountered. 
   &lt;li&gt;
      Updated copyright notices.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
   Binaries available here: &lt;a href="http://www.frijters.net/ikvmbin-0.41.3393.zip"&gt;ikvmbin-0.41.3393.zip&lt;/a&gt;
   &lt;br&gt;
   &lt;br&gt;
   OpenJDK 6 b16 sources + build artifacts: &lt;a href="http://www.frijters.net/openjdk6-b16-stripped.zip"&gt;openjdk6-b16-stripped.zip&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://weblog.ikvm.net/aggbug.ashx?id=83441187-b021-4722-b601-977d40f900f5"&gt;</description>
      <comments>http://weblog.ikvm.net/CommentView.aspx?guid=83441187-b021-4722-b601-977d40f900f5</comments>
    </item>
    <item>
      <trackback:ping>http://weblog.ikvm.net/Trackback.aspx?guid=a3be92c5-69c6-462e-8910-3c334a775e20</trackback:ping>
      <pingback:server>http://weblog.ikvm.net/pingback.aspx</pingback:server>
      <pingback:target>http://weblog.ikvm.net/PermaLink.aspx?guid=a3be92c5-69c6-462e-8910-3c334a775e20</pingback:target>
      <wfw:comment>http://weblog.ikvm.net/CommentView.aspx?guid=a3be92c5-69c6-462e-8910-3c334a775e20</wfw:comment>
      <wfw:commentRss>http://weblog.ikvm.net/SyndicationService.asmx/GetEntryCommentsRss?guid=a3be92c5-69c6-462e-8910-3c334a775e20</wfw:commentRss>
      <slash:comments>4</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      The eagerly anticipated (by some) first release candidate of 0.40 is ready!
   </p>
        <p>
      Changes since previous snapshot:
   </p>
        <ul>
          <li>
         Changed version to 0.40.0.0.</li>
          <li>
         Added back RMI stubs that got left out in the module split.</li>
          <li>
         Added cmm profiles and dummy color management implementation.</li>
          <li>
         Fixed regression in ObjectInputStream.latestUserDefinedLoader().</li>
        </ul>
        <p>
      Binaries available here: <a href="http://www.frijters.net/ikvmbin-0.40.0.0.zip">ikvmbin-0.40.0.0.zip</a><br /><br />
      Sources: <a href="http://www.frijters.net/ikvm-0.40.0.0.zip">ikvm-0.40.0.0.zip</a>, <a href="http://www.frijters.net/classpath-0.95-stripped.zip">classpath-0.95-stripped.zip</a>, <a href="http://www.frijters.net/openjdk6-b12-stripped-IKVM-0.40.zip">openjdk6-b12-stripped-IKVM-0.40.zip</a></p>
        <img width="0" height="0" src="http://weblog.ikvm.net/aggbug.ashx?id=a3be92c5-69c6-462e-8910-3c334a775e20" />
      </body>
      <title>IKVM 0.40 Release Candidate 0</title>
      <guid>http://weblog.ikvm.net/PermaLink.aspx?guid=a3be92c5-69c6-462e-8910-3c334a775e20</guid>
      <link>http://weblog.ikvm.net/PermaLink.aspx?guid=a3be92c5-69c6-462e-8910-3c334a775e20</link>
      <pubDate>Mon, 06 Apr 2009 09:05:34 GMT</pubDate>
      <description>&lt;p&gt;
   The eagerly anticipated (by some) first release candidate of 0.40 is ready!
&lt;/p&gt;
&lt;p&gt;
   Changes since previous snapshot:
&lt;/p&gt;
&lt;ul&gt;
   &lt;li&gt;
      Changed version to 0.40.0.0.&lt;/li&gt;
   &lt;li&gt;
      Added back RMI stubs that got left out in the module split.&lt;/li&gt;
   &lt;li&gt;
      Added cmm profiles and dummy color management implementation.&lt;/li&gt;
   &lt;li&gt;
      Fixed regression in ObjectInputStream.latestUserDefinedLoader().&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
   Binaries available here: &lt;a href="http://www.frijters.net/ikvmbin-0.40.0.0.zip"&gt;ikvmbin-0.40.0.0.zip&lt;/a&gt;
   &lt;br&gt;
   &lt;br&gt;
   Sources: &lt;a href="http://www.frijters.net/ikvm-0.40.0.0.zip"&gt;ikvm-0.40.0.0.zip&lt;/a&gt;, &lt;a href="http://www.frijters.net/classpath-0.95-stripped.zip"&gt;classpath-0.95-stripped.zip&lt;/a&gt;, &lt;a href="http://www.frijters.net/openjdk6-b12-stripped-IKVM-0.40.zip"&gt;openjdk6-b12-stripped-IKVM-0.40.zip&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://weblog.ikvm.net/aggbug.ashx?id=a3be92c5-69c6-462e-8910-3c334a775e20"&gt;</description>
      <comments>http://weblog.ikvm.net/CommentView.aspx?guid=a3be92c5-69c6-462e-8910-3c334a775e20</comments>
    </item>
    <item>
      <trackback:ping>http://weblog.ikvm.net/Trackback.aspx?guid=dc37f6f1-7f5c-4698-a8d2-991e0ecd8cc6</trackback:ping>
      <pingback:server>http://weblog.ikvm.net/pingback.aspx</pingback:server>
      <pingback:target>http://weblog.ikvm.net/PermaLink.aspx?guid=dc37f6f1-7f5c-4698-a8d2-991e0ecd8cc6</pingback:target>
      <wfw:comment>http://weblog.ikvm.net/CommentView.aspx?guid=dc37f6f1-7f5c-4698-a8d2-991e0ecd8cc6</wfw:comment>
      <wfw:commentRss>http://weblog.ikvm.net/SyndicationService.asmx/GetEntryCommentsRss?guid=dc37f6f1-7f5c-4698-a8d2-991e0ecd8cc6</wfw:commentRss>
      <slash:comments>0</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      As 0.40 is getting nearer, I need some help. This snapshot is pretty close to what
      the first 0.40 release candidate is going to be. However, there is still something
      missing. As part of this release cycle I wrote a custom implementation of Reflection.Emit
      named IKVM.Reflection.Emit. This is the part that is responsible for writing managed
      PE binaries used by ikvmc. It is also responsible for writing the debugging files
      (.pdb on .NET and .mdb on Mono). I've written a working .pdb writer, but only a basic
      (and untested) implementation of the .mdb writer and this where I need help. I need
      someone to test, debug, finish this. So if you care about being able to debug your
      Java code in <a href="http://monodevelop.com/">MonoDevelop</a>, please help out! To
      get an idea of what's involved <a href="http://ikvm.cvs.sourceforge.net/viewvc/ikvm/ikvm/refemit/IKVM.MdbWriter/SymbolWriter.cs?view=markup">here</a> is
      the current source.
   </p>
        <p>
      Changes:
   </p>
        <ul>
          <li>
         Workaround for Mono bug <a href="https://bugzilla.novell.com/show_bug.cgi?id=486307">486307</a>.</li>
          <li>
         Added "Windows 7" detection for os.name system property.</li>
          <li>
         Improved IKVM.Reflection.Emit symbol writer "plug in" interface.</li>
          <li>
         Wrote a basic (untested) symbol writer for Mono.</li>
        </ul>
        <p>
      As always with a development snapshot, don't use this in production, but please do
      try it out and let me know about it. The sources are available in cvs and the binaries
      here: <a href="http://www.frijters.net/ikvmbin-0.39.3373.zip">ikvmbin-0.39.3373.zip</a><br />
       
   </p>
        <img width="0" height="0" src="http://weblog.ikvm.net/aggbug.ashx?id=dc37f6f1-7f5c-4698-a8d2-991e0ecd8cc6" />
      </body>
      <title>New Development Snapshot -- Help Needed</title>
      <guid>http://weblog.ikvm.net/PermaLink.aspx?guid=dc37f6f1-7f5c-4698-a8d2-991e0ecd8cc6</guid>
      <link>http://weblog.ikvm.net/PermaLink.aspx?guid=dc37f6f1-7f5c-4698-a8d2-991e0ecd8cc6</link>
      <pubDate>Fri, 27 Mar 2009 05:25:54 GMT</pubDate>
      <description>&lt;p&gt;
   As 0.40 is getting nearer, I need some help. This snapshot is pretty close to what
   the first 0.40 release candidate is going to be. However, there is still something
   missing. As part of this release cycle I wrote a custom implementation of Reflection.Emit
   named IKVM.Reflection.Emit. This is the part that is responsible for writing managed
   PE binaries used by ikvmc. It is also responsible for writing the debugging files
   (.pdb on .NET and .mdb on Mono). I've written a working .pdb writer, but only a basic
   (and untested) implementation of the .mdb writer and this where I need help. I need
   someone to test, debug, finish this. So if you care about being able to debug your
   Java code in &lt;a href="http://monodevelop.com/"&gt;MonoDevelop&lt;/a&gt;, please help out! To
   get an idea of what's involved &lt;a href="http://ikvm.cvs.sourceforge.net/viewvc/ikvm/ikvm/refemit/IKVM.MdbWriter/SymbolWriter.cs?view=markup"&gt;here&lt;/a&gt; is
   the current source.
&lt;/p&gt;
&lt;p&gt;
   Changes:
&lt;/p&gt;
&lt;ul&gt;
   &lt;li&gt;
      Workaround for Mono bug &lt;a href="https://bugzilla.novell.com/show_bug.cgi?id=486307"&gt;486307&lt;/a&gt;.&lt;/li&gt;
   &lt;li&gt;
      Added "Windows 7" detection for os.name system property.&lt;/li&gt;
   &lt;li&gt;
      Improved IKVM.Reflection.Emit symbol writer "plug in" interface.&lt;/li&gt;
   &lt;li&gt;
      Wrote a basic (untested) symbol writer for Mono.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
   As always with a development snapshot, don't use this in production, but please do
   try it out and let me know about it. The sources are available in cvs and the binaries
   here: &lt;a href="http://www.frijters.net/ikvmbin-0.39.3373.zip"&gt;ikvmbin-0.39.3373.zip&lt;/a&gt;
   &lt;br&gt;
   &amp;nbsp;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://weblog.ikvm.net/aggbug.ashx?id=dc37f6f1-7f5c-4698-a8d2-991e0ecd8cc6"&gt;</description>
      <comments>http://weblog.ikvm.net/CommentView.aspx?guid=dc37f6f1-7f5c-4698-a8d2-991e0ecd8cc6</comments>
    </item>
    <item>
      <trackback:ping>http://weblog.ikvm.net/Trackback.aspx?guid=7892d162-ffa5-49c9-83c1-14b4ae4504f9</trackback:ping>
      <pingback:server>http://weblog.ikvm.net/pingback.aspx</pingback:server>
      <pingback:target>http://weblog.ikvm.net/PermaLink.aspx?guid=7892d162-ffa5-49c9-83c1-14b4ae4504f9</pingback:target>
      <wfw:comment>http://weblog.ikvm.net/CommentView.aspx?guid=7892d162-ffa5-49c9-83c1-14b4ae4504f9</wfw:comment>
      <wfw:commentRss>http://weblog.ikvm.net/SyndicationService.asmx/GetEntryCommentsRss?guid=7892d162-ffa5-49c9-83c1-14b4ae4504f9</wfw:commentRss>
      <slash:comments>3</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      One major change: I rewrote exception handling to store exception state in java.lang.Throwable
      (for non-.NET exceptions) instead of using a weak map. I never got around to doing
      that earlier, because the overhead of exceptions on the CLR is such that the weak
      map didn't contribute significantly, but on Mono the situation was very different,
      as it turns out the weap map was very slow there and exception handling is much faster.
      Anyway, the result is that on Mono a particular microbenchmark went from 40 seconds
      to less than a second. On the CLR the performance is also a little bit better, but
      still horrible.
   </p>
        <p>
      If you use exceptions for control flow, make sure to override fillInStackTrace (simply
      "return this") as this saves a lot of time in collecting the stack trace. On previous
      versions of IKVM this sometimes didn't help, but now it always does.
   </p>
        <p>
      Changes:
   </p>
        <ul>
          <li>
         Rewrote exception handling.</li>
          <li>
         Moved PDB generating code (used by IKVM.Reflection.Emit.dll) into a separate assembly
         (IKVM.PdbWriter.dll) to work around missing ISymWrapper.dll on Mono.</li>
          <li>
         Made java.lang.Object and java.lang.StackTraceElement serializable (in the .NET sense).</li>
          <li>
         Added workaround for Mono bug (Type.IsGenericTypeDefinition throws for non-MonoType
         types).</li>
          <li>
         Fixed ikvm.extensions.ExtensionMethods.printStackTrace() to unmap the exception after
         printing the stack trace.</li>
          <li>
         Volker implemented a couple more AWT graphics functions.</li>
        </ul>
        <p>
      As always with a development snapshot, don't use this in production, but please do
      try it out and let me know about it. The sources are available in cvs and the binaries
      here: <a href="http://www.frijters.net/ikvmbin-0.39.3363.zip">ikvmbin-0.39.3363.zip</a><br />
       
   </p>
        <img width="0" height="0" src="http://weblog.ikvm.net/aggbug.ashx?id=7892d162-ffa5-49c9-83c1-14b4ae4504f9" />
      </body>
      <title>New Development Snapshot</title>
      <guid>http://weblog.ikvm.net/PermaLink.aspx?guid=7892d162-ffa5-49c9-83c1-14b4ae4504f9</guid>
      <link>http://weblog.ikvm.net/PermaLink.aspx?guid=7892d162-ffa5-49c9-83c1-14b4ae4504f9</link>
      <pubDate>Tue, 17 Mar 2009 06:10:27 GMT</pubDate>
      <description>&lt;p&gt;
   One major change: I rewrote exception handling to store exception state in java.lang.Throwable
   (for non-.NET exceptions) instead of using a weak map. I never got around to doing
   that earlier, because the overhead of exceptions on the CLR is such that the weak
   map didn't contribute significantly, but on Mono the situation was very different,
   as it turns out the weap map was very slow there and exception handling is much faster.
   Anyway, the result is that on Mono a particular microbenchmark went from 40 seconds
   to less than a second. On the CLR the performance is also a little bit better, but
   still horrible.
&lt;/p&gt;
&lt;p&gt;
   If you use exceptions for control flow, make sure to override fillInStackTrace (simply
   "return this") as this saves a lot of time in collecting the stack trace. On previous
   versions of IKVM this sometimes didn't help, but now it always does.
&lt;/p&gt;
&lt;p&gt;
   Changes:
&lt;/p&gt;
&lt;ul&gt;
   &lt;li&gt;
      Rewrote exception handling.&lt;/li&gt;
   &lt;li&gt;
      Moved PDB generating code (used by IKVM.Reflection.Emit.dll) into a separate assembly
      (IKVM.PdbWriter.dll) to work around missing ISymWrapper.dll on Mono.&lt;/li&gt;
   &lt;li&gt;
      Made java.lang.Object and java.lang.StackTraceElement serializable (in the .NET sense).&lt;/li&gt;
   &lt;li&gt;
      Added workaround for Mono bug (Type.IsGenericTypeDefinition throws for non-MonoType
      types).&lt;/li&gt;
   &lt;li&gt;
      Fixed ikvm.extensions.ExtensionMethods.printStackTrace() to unmap the exception after
      printing the stack trace.&lt;/li&gt;
   &lt;li&gt;
      Volker implemented a couple more AWT graphics functions.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
   As always with a development snapshot, don't use this in production, but please do
   try it out and let me know about it. The sources are available in cvs and the binaries
   here: &lt;a href="http://www.frijters.net/ikvmbin-0.39.3363.zip"&gt;ikvmbin-0.39.3363.zip&lt;/a&gt;
   &lt;br&gt;
   &amp;nbsp;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://weblog.ikvm.net/aggbug.ashx?id=7892d162-ffa5-49c9-83c1-14b4ae4504f9"&gt;</description>
      <comments>http://weblog.ikvm.net/CommentView.aspx?guid=7892d162-ffa5-49c9-83c1-14b4ae4504f9</comments>
    </item>
    <item>
      <trackback:ping>http://weblog.ikvm.net/Trackback.aspx?guid=70da1cdd-fa7f-4bf3-abc8-89b6ec624524</trackback:ping>
      <pingback:server>http://weblog.ikvm.net/pingback.aspx</pingback:server>
      <pingback:target>http://weblog.ikvm.net/PermaLink.aspx?guid=70da1cdd-fa7f-4bf3-abc8-89b6ec624524</pingback:target>
      <wfw:comment>http://weblog.ikvm.net/CommentView.aspx?guid=70da1cdd-fa7f-4bf3-abc8-89b6ec624524</wfw:comment>
      <wfw:commentRss>http://weblog.ikvm.net/SyndicationService.asmx/GetEntryCommentsRss?guid=70da1cdd-fa7f-4bf3-abc8-89b6ec624524</wfw:commentRss>
      <slash:comments>0</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      Various fixes and improvements.
   </p>
        <p>
      Changes:
   </p>
        <ul>
          <li>
         Made Mono compilation workarounds conditional on __MonoCS__.</li>
          <li>
         Fixed Class.desiredAssertionStatus() instrinsic to use the RemoveAsserts flag from
         the right class loader.</li>
          <li>
         Fixed several generics related bugs in IKVM.Reflection.Emit.</li>
          <li>
         Implemented ikvm.internal.ClassLiteral&lt;T&gt; to allow for more efficient class
         literals.</li>
          <li>
         Switched java.awt.print package from GNU Classpath to OpenJDK.</li>
          <li>
         Switched java.awt.geom package from GNU Classpath to OpenJDK.</li>
          <li>
         Switched java.awt.color package from GNU Classpath to OpenJDK.</li>
          <li>
         Switched java.awt.event package from GNU Classpath to OpenJDK.</li>
          <li>
         Switched java.awt.datatransfer package from GNU Classpath to OpenJDK.</li>
          <li>
         Switched java.awt.dnd package from GNU Classpath to OpenJDK.</li>
          <li>
         Added hack to skip running the static initializer when computing the serialVersionUID
         while running ikvmstub.</li>
          <li>
         Added support for defining delegates in Java.</li>
          <li>
         Fixed regression introduced in 0.38 that caused LinkageError to be thrown instead
         of ClassCircularyError.</li>
          <li>
         Updated mscorlib.jar (to get the new default constructor in MulticastDelegate).</li>
          <li>
         Added utility class ikvm.runtime.Delegates to make it easier to create Runnables and
         PrivilegeActions from .NET languages.</li>
          <li>
         Fixed JNI constructor invocation on dynamically loaded class.</li>
          <li>
         Added hack to java.io.FileDescriptor to support JRuby's tty detection.</li>
          <li>
         Implemented java.lang.ClassLoader$NativeLibrary.finalize(). Note that under normal
         circumstances this is never called, because IKVM doesn't support class unloading and
         by default finalization doesn't run on exit.</li>
          <li>
         Fixed IKVM.Reflection.Emit bug that caused NullReferenceException in Save when using
         the ikvmc -target:module option.</li>
        </ul>
        <p>
      The last IKVM.Reflection.Emit fix isn't in cvs yet, because <a href="http://apps.sourceforge.net/wordpress/sourceforge/2009/03/11/2009-03-10-service-cvs-unplanned-downtime-update/">SourceForge
      cvs is down</a>.
   </p>
        <p>
      As always with a development snapshot, don't use this in production, but please do
      try it out and let me know about it. The sources are available in cvs and the binaries
      here: <a href="http://www.frijters.net/ikvmbin-0.39.3358.zip">ikvmbin-0.39.3358.zip</a></p>
        <img width="0" height="0" src="http://weblog.ikvm.net/aggbug.ashx?id=70da1cdd-fa7f-4bf3-abc8-89b6ec624524" />
      </body>
      <title>New Development Snapshot</title>
      <guid>http://weblog.ikvm.net/PermaLink.aspx?guid=70da1cdd-fa7f-4bf3-abc8-89b6ec624524</guid>
      <link>http://weblog.ikvm.net/PermaLink.aspx?guid=70da1cdd-fa7f-4bf3-abc8-89b6ec624524</link>
      <pubDate>Thu, 12 Mar 2009 05:41:37 GMT</pubDate>
      <description>&lt;p&gt;
   Various fixes and improvements.
&lt;/p&gt;
&lt;p&gt;
   Changes:
&lt;/p&gt;
&lt;ul&gt;
   &lt;li&gt;
      Made Mono compilation workarounds conditional on __MonoCS__.&lt;/li&gt;
   &lt;li&gt;
      Fixed Class.desiredAssertionStatus() instrinsic to use the RemoveAsserts flag from
      the right class loader.&lt;/li&gt;
   &lt;li&gt;
      Fixed several generics related bugs in IKVM.Reflection.Emit.&lt;/li&gt;
   &lt;li&gt;
      Implemented ikvm.internal.ClassLiteral&amp;lt;T&amp;gt; to allow for more efficient class
      literals.&lt;/li&gt;
   &lt;li&gt;
      Switched java.awt.print package from GNU Classpath to OpenJDK.&lt;/li&gt;
   &lt;li&gt;
      Switched java.awt.geom package from GNU Classpath to OpenJDK.&lt;/li&gt;
   &lt;li&gt;
      Switched java.awt.color package from GNU Classpath to OpenJDK.&lt;/li&gt;
   &lt;li&gt;
      Switched java.awt.event package from GNU Classpath to OpenJDK.&lt;/li&gt;
   &lt;li&gt;
      Switched java.awt.datatransfer package from GNU Classpath to OpenJDK.&lt;/li&gt;
   &lt;li&gt;
      Switched java.awt.dnd package from GNU Classpath to OpenJDK.&lt;/li&gt;
   &lt;li&gt;
      Added hack to skip running the static initializer when computing the serialVersionUID
      while running ikvmstub.&lt;/li&gt;
   &lt;li&gt;
      Added support for defining delegates in Java.&lt;/li&gt;
   &lt;li&gt;
      Fixed regression introduced in 0.38 that caused LinkageError to be thrown instead
      of ClassCircularyError.&lt;/li&gt;
   &lt;li&gt;
      Updated mscorlib.jar (to get the new default constructor in MulticastDelegate).&lt;/li&gt;
   &lt;li&gt;
      Added utility class ikvm.runtime.Delegates to make it easier to create Runnables and
      PrivilegeActions from .NET languages.&lt;/li&gt;
   &lt;li&gt;
      Fixed JNI constructor invocation on dynamically loaded class.&lt;/li&gt;
   &lt;li&gt;
      Added hack to java.io.FileDescriptor to support JRuby's tty detection.&lt;/li&gt;
   &lt;li&gt;
      Implemented java.lang.ClassLoader$NativeLibrary.finalize(). Note that under normal
      circumstances this is never called, because IKVM doesn't support class unloading and
      by default finalization doesn't run on exit.&lt;/li&gt;
   &lt;li&gt;
      Fixed IKVM.Reflection.Emit bug that caused NullReferenceException in Save when using
      the ikvmc -target:module option.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
   The last IKVM.Reflection.Emit fix isn't in cvs yet, because &lt;a href="http://apps.sourceforge.net/wordpress/sourceforge/2009/03/11/2009-03-10-service-cvs-unplanned-downtime-update/"&gt;SourceForge
   cvs is down&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
   As always with a development snapshot, don't use this in production, but please do
   try it out and let me know about it. The sources are available in cvs and the binaries
   here: &lt;a href="http://www.frijters.net/ikvmbin-0.39.3358.zip"&gt;ikvmbin-0.39.3358.zip&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://weblog.ikvm.net/aggbug.ashx?id=70da1cdd-fa7f-4bf3-abc8-89b6ec624524"&gt;</description>
      <comments>http://weblog.ikvm.net/CommentView.aspx?guid=70da1cdd-fa7f-4bf3-abc8-89b6ec624524</comments>
    </item>
  </channel>
</rss>