# Saturday, December 28, 2002
No Title

Have you tried the java.util.zip.ZipFile speedup patch? http://gcc.gnu.org/ml/java/2002-12/msg00288.html It made a huge difference in startup time for gij. [Mark Wielaard]

Just did. Startup (with the CVS explorer and a Java source open) went from 7:18 to 7:03, so it does help, but not enough ;-)

Saturday, December 28, 2002 5:29:40 PM (W. Europe Standard Time, UTC+01:00)  #    Comments [0]
No Title

Eclipse on .NET. Jeroen Frijters: I got Eclipse to run  I wonder if something like NGEN could be used to address the startup time issues. [Sam Ruby]

It should be possible to use ikvmc to compile the jars to .NET assemblies, at some point in the future I will probably look into this.

Saturday, December 28, 2002 4:57:46 PM (W. Europe Standard Time, UTC+01:00)  #    Comments [0]
Eclipse on .NET

I got Eclipse to run. Lot's of stuff still doesn't work, but CVS browsing and Java file editing works. Startup is very slow (a couple of minutes), but once the classes are loaded performance is OK.

Screenshot. Exception log.


  • Download the ikvm.net binaries
  • Install Eclipse
  • cd \eclipse
  • \ikvm\bin\ikvm -Djava.version=1.3 -cp startup.jar -Xbootclasspath:plugins\org.apache.xerces_4.0.7\xercesImpl.jar;plugins\org.apache.xerces_4.0.7\xmlParserAPIs.jar org.eclipse.core.launcher.Main -os win32 -ws win32 -arch x86 -install file:C:/eclipse/
  • Ignore the "System.UnauthorizedAccessException: Access to the path "d:\eclipse" is denied." exceptions

Updated the binaries and source snaphots.

Saturday, December 28, 2002 1:39:24 PM (W. Europe Standard Time, UTC+01:00)  #    Comments [2]
# Thursday, December 19, 2002

I set up a SourceForge project. I checked in all the code and created a mailing list. Since I'm a total SourceForge newby, any comments are appreciated.

I expect the mailing list to be very low traffic, so if you're at all interested in following IKVM.NET, please subscribe.

BTW, I dropped the first dot from the name. It's now IKVM.NET.

Thursday, December 19, 2002 9:07:54 AM (W. Europe Standard Time, UTC+01:00)  #    Comments [2]
# Tuesday, December 17, 2002
Back home and logs

I'm back from Bonaire. Many things to do, and I'm not sure when there will be progress.

While browsing the web server logs, I found an interesting item:
tide72.microsoft.com using Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3215; .NET CLR 1.0.3705; .NET CLR 1.1.4322; .NET CLR 1.2.21120)

Someone inside Microsoft running Whidbey on Longhorn? Not very surprising of course, but the fact the version number is 1.2 puzzles me. It has been generally assumed that Whidbey would be 2.0.

I'm looking forward to beta testing that stuff... On a related note, anybody have any idea when the next PDC will be?

Tuesday, December 17, 2002 12:48:01 PM (W. Europe Standard Time, UTC+01:00)  #    Comments [5]
# Friday, December 13, 2002
temporarily out of order

The server hosting www.frijters.net seems to be having problems. For the time being the source and binaries can be downloaded here: source, binaries.

UPDATE: server is back up again.

Friday, December 13, 2002 7:37:56 PM (W. Europe Standard Time, UTC+01:00)  #    Comments [0]

Interesting post by Chris Daly on the advanced-dotnet list today. He questions the C# language spec, which says that the following is illegal:

public class A
protected int x;
public class B: A
static void F(A a, B b) {
a.x = 1; // Error, must access through instance of B
b.x = 1; // Ok

The equivalent Java is legal. When I statically compile the Java equivalent of A and B into two different assemblies, to resulting B.dll is unverifiable. It's not just a C# language issue, the CLR restricts access to protected members in this way. When both types are compiled into the same assembly there is no problem, because protected is compiled as famorassem so any type in the assembly already has access (this is needed because protected also implies package access, which has no CLR equivalent).

I wonder if a work around is required.

UPDATE: I wasn't quite awake yet. Of course, the reason that the above code works in Java is because protected implies package access, it has nothing to do with the protectness of the field. When you move A and B into different packages, javac fails with the same error as the C# compiler.

Friday, December 13, 2002 2:32:21 PM (W. Europe Standard Time, UTC+01:00)  #    Comments [0]
# Tuesday, December 10, 2002
No Title
I did some debugging last night to try and figure out where the random NullReferenceExceptions come from when running the SWT samples. I couldn't pinpoint anything (adding Console.WriteLines completely changed the behavior :-(), but when I tried running the exe under the 1.1 beta CLR the problem didn't occur, so naturally, now I'm beginning to wonder whether it is actually caused by a CLR bug...
Tuesday, December 10, 2002 4:25:19 PM (W. Europe Standard Time, UTC+01:00)  #    Comments [3]
# Friday, December 6, 2002

I'm off to Bonaire until the 17th, so there probably won't be any updates before then.

Friday, December 6, 2002 8:34:09 AM (W. Europe Standard Time, UTC+01:00)  #    Comments [0]
# Tuesday, December 3, 2002

I've been working on getting the SWT (the Eclipse windowing toolkit) examples to run. This mostly involved implementing a lot of JNI methods.

The examples now run, but they do run into the occasional random NullPointerException. Probably caused by a sneaky bug in the (un)managed C++ code.

Here is a statically compiled version ControlExample (including all the supporting DLLs needed).

Note that this will only run on Windows, because my JNI implementation is written in Managed C++ it will not run on Mono.

Some interesting findings:

  • SWT has a reference to the sun.awt.windows.WEmbeddedFrame class. What's that about?
  • In order to get the FileViewer example to run, I had to use the STAThread attribute on my main method. Boy I'm I glad I missed the whole COM thing (was busy doing Java). This just too lame.
  • Reflection.Emit does not support embedding resources in a module (lame!). I had to add resource support to ikvmc (and the VM) to get ControlExample to work, statically compiled, so I added initialized global public fields to the assembly and used System.Runtime.CompilerServices.RuntimeHelpers.InitializeArray to copy the field data to an array.
Tuesday, December 3, 2002 9:32:32 AM (W. Europe Standard Time, UTC+01:00)  #    Comments [10]