Interested in the design decision process for porting to .NET vs using IKVM

Mar 28, 2013 at 10:38 PM

Very interesting work. I wish Codeplex was better at flagging users with new projects of interest...

I am considering ways to reuse existing libraries (ECJ, JMetal, and others) from a C# metaheuristics framework of mine, so your project caught my attention. My framework is largely meant as a consistent set of pattern in C# and I have no intention nor time to reimplement the algorithms.

You mention in the project description that you do need a C# port, but some users may not. I'd be very interested in the design criteria you have and in particular whether you considered using IKVM and found out difficulties or missed on some C#/.NET idioms, hence the port to C#. I'd just like not to rediscover something you already found out.

Apr 14, 2013 at 4:12 PM
Hi jperraud,

The conversion supplied here is meant to be an INITIAL port to native .NET.

It only makes sense for those (such as me) who will wish to CHANGE it in some significant way.

The primary goal for the baseline conversion was to make it functionally EQUIVALENT to the original ECJ. That is, it should be able to parse parameter files used by the original java version and produce similar (if not exact) results.

The main reason I didn't take the conversion any further than what has been posted here, is because the changes I am making in a private fork won't make sense for those targeting different domains. In the future, it is possible I may post more radical changes if the end result might be useful to a broad audience.

Some of the changes I am working on privately include...
  • Major refactoring to separate interfaces from plug-in algorithmic implementations and concrete types.
  • The widespread use of generics.
  • The use of WCF for distributed communications and interaction.
  • The use of WF for long-running process logic and state persistence.
  • The use of TPL for parallel and asynchronous processing (including Async-Await semantics).
  • Heavy usage of things like Enterprise Library for Logging, Instrumentation, Configuration, and so on.
On top of all of these fundamental changes, I have need for numerous domain-specific optimizations and capabilities that not everyone would particularly desire. Leaving the conversion in its most basic form, I felt, was the best way to provide a starting point for others who might have completely different objectives.

While IKVM is a great way to take advantage of java libraries that might be useful "as-is", it doesn't really address my own particular (and perhaps peculiar) requirements.