I think Prescott explained it very well. I should not have specified a tool. Any tool that enables a 100% automated conversion will meet our needs.
What we need is a methodology for conversion which meets these criteria: - Automated, Repeatable, and Well Documented (e.g. a script or build task with minimal human involvement) - Based on free, open source tools - Performs a reasonable and high quality conversion that presents a 1:1 API between Java/C# and the same functionality and performance I liked the idea of using Sharpen because it's FOSS and because it allows you to customize your conversions. It's the only system I've found that allows you to modify it's behaviour. Most of the other conversion tools just crank through the code "doing their best" and leave you will a partial conversion which must then be manually cleaned up. I'd like to have a tool which allows us to define custom conversion so that at the end of the automated (but custom configured) process, you have no need to do any additional manual work. I think Sharpen might enable that. That said, I think we should explore other options. One possibility is for us to ask Tangible to donate licenses for their tool. Many companies will donate licenses to open source projects. That leaves the question: Does the Tangible tool meet the above criteria even if it was freely available to us? Another possibility is to develop a customized conversion tool. This isn't quite as hard as it may seem. There are existing tools (such as ANTLR) that can take Java source and parse it into an AST (Abstract Syntax Tree). Then, we can convert the Java AST to a C# AST, and compile using the .NET BCL. Writing a *generalized* converter for that purpose would be difficult. Writing one that just supports the needs of our project would be less difficult. We could also incorporate a facility to inject custom conversion logic into the AST->AST conversion logic. Much of it could be generalized, and where it didn't have appropriate conversion logic, or where we wanted to override false-positive logic, we could specify a injectable piece of conversion logic that we manually coded. That may seem like a lofty plan, but it could work, and might be the best solution in the end. We could start a separate project just for that, and perhaps start working towards a system that could be used for all the Java projects at Apache, to generate customized conversions to C#. I recall finding a open source project that was similar to the AST level conversion process I was just describing, but at the moment I can't remember the name of the project or find it in Google. :( Here's a similar project that uses this methodology to go from Java to Scala: http://code.google.com/p/jatran/ It was designed to be extended to work with numerous output languages, so that could be a good starting point. It only supports Java 5 (1.5) but that should be sufficient to port Lucene. Anyhow, those are my thoughts at the moment. Thanks, Troy On Sun, Jan 2, 2011 at 1:35 PM, Prescott Nasser <geobmx...@hotmail.com> wrote: > > I think the 100% Sharpen is more to mean, it should be 100% automatic > conversion including pre/post processing scripts so that future translations > can be quick, easy, and as error free as possible. If you replace 100% > Sharpen with 100% Java 2 CSharp Translator I think Troy's intent stands. > As for Sharpen specifically - I think it comes from when we were trying back > in mid November to get it up and going, it was the only free option we could > find. The eclipse plugin I haven't seen before, but should definitely be > evaluated. As for Tangibles - I actually like their software (I've used their > VB.Net -> C# for a few projects), but I couldn't get a copy for testing > purposes - and unless we can get a free licenses for the project, I don't > like the idea of requiring a piece of not free software as part of our > conversion process. > ~P > > > > >> From: digyd...@gmail.com >> To: lucene-net-dev@lucene.apache.org >> Subject: RE: Proposal Stage: Backwards Compatibility / Support >> Date: Sun, 2 Jan 2011 19:03:25 +0200 >> >> > The 3.0.X ports should be 100% Sharpen >> Why? >> What about other alternatives? >> >> Lucene.java 3.0.3 ==> .Net Conversion Samples ( >> http://people.apache.org/~digy/Lucene.Net.3.0.3.zip ) >> >> DIGY >> >> >> >> -----Original Message----- >> From: Troy Howard [mailto:thowar...@gmail.com] >> Sent: Saturday, January 01, 2011 1:58 AM >> To: lucene-net-dev@lucene.apache.org >> Subject: Re: Proposal Stage: Backwards Compatibility / Support >> >> We are inheriting the outstanding issues facing the Lucene.Net project. >> >> This includes remaining committed to providing a line-by-line port >> that stays in sync with the Java Lucene releases. >> >> The project is currently extremely behind schedule on this. The 2.9.2 >> code base, which is widely used and thus a fairly well received build, >> has never been formally packaged as a release (i.e. binary builds, >> etc). This is the first order of business to take care of (in terms of >> code). >> >> After that we need to evaluate weather or not to create releases to >> match all subsequent releases made by the Java Lucene project. >> >> Those releases are: >> - 3.0.0 >> - 3.0.1 >> - 2.9.3 >> - 3.0.2 >> - 2.9.4 >> - 3.0.3 >> >> In the interest of time, we could skip some of the intermediate >> releases and just get in sync at 2.9.4 and 3.0.3 releases. >> >> The 3.0.X ports should be 100% Sharpen conversions and post-processing >> scripts. Once written, anyone should be able to repeat the process of >> pulling down the appropriate Java Lucene SVN revision, executing the >> porting scripts, and building the resulting .NET code, yield a valid >> 3.0.X release with a 1:1 matching API. >> >> This is something we will need to continue being able to do for every >> subsequent Java Lucene release. >> >> This aspect of our development should be completely separate from our >> refactoring/re-imagining of a more .NET-like API. They need to be >> separate development branches, and possibly even completely different >> implementations. We will attempt to reuse as much of the automated >> port code as we can, with the understanding that the goal of the >> secondary branch is to make a high-quality .NET implementation of >> Lucene, rather than a API compatible implementation. >> >> Thanks, >> Troy >> >> >> >> On Fri, Dec 31, 2010 at 3:29 PM, Alex Thompson <pierogi...@hotmail.com> >> wrote: >> > Maybe we could just bug-fix support the current 2.9.2 codebase unless >> > people >> > really need something in 2.9.x >> > >> > I think there would be a 3.0.x line-by-line port and a 3.0.x idiomatic >> > version. >> > >> > I'd like to throw another idea into the mix which is perhaps the idiomatic >> > version could be created by an automated refactoring of the line-by-line. >> > It >> > might be additional upfront work but might make it easier for future >> > changes >> > from java lucene to be propagated down. >> > >> > Alex >> > >> > -----Original Message----- >> > From: mhern...@amptools.net [mailto:mhern...@amptools.net] On Behalf Of >> > Michael Herndon >> > Sent: Friday, December 31, 2010 1:28 PM >> > To: lucene-net-dev@lucene.apache.org >> > Subject: Proposal Stage: Backwards Compatibility / Support >> > >> > *Backwards Compatibility / Support: * >> > This is definitely something we need to cover. >> > >> > I'm guessing the obvious choice would be to continue the 2.9.X versions >> > under sharpen, maintain the current api thats has java idioms so that >> > people >> > can continue to use it, release patches, ensure stability with the current >> > community. This would be important for people who have built products on >> > top >> > of lucene.net. >> > >> > The 3.0 version should probably match java in terms of breaking the api due >> > to the language changes or maybe even a separate project inside: >> > lucene.netredux (for lack of a better term at the moment). >> > >> > >> > * >> > * >> > -- >> > Michael Herndon >> > >> > >> >