2009-05-01 11 views
8

Tengo una herramienta de migración de base de datos Java de código abierto (http://www.liquibase.org) que estoy considerando transferir a .Net.JVM/CLR Opciones de idioma compatibles con la fuente

La mayoría de la herramienta (al menos desde el punto de vista de la complejidad) tiene lógica como "si está agregando una clave principal y la base de datos es Oracle use este SQL. Si la base de datos es MySQL use este SQL. es nombrado y la base de datos es Postgres usa este SQL ".

Podría bifurcar la base de código Java y encubrirla (de forma manual y/o automática), pero a medida que entren actualizaciones y correcciones de errores a la lógica anterior, no quiero tener que aplicarla a ambas versiones. Lo que me gustaría hacer es mover toda esa lógica a una forma que las versiones de Java y .Net puedan compilar y usar ingenuamente.

El código que intento convertir no contiene ningún uso avanzado de la biblioteca (JDBC, System.out, etc.) que varíe significativamente de Java a .Net, así que no creo que sea un problema (en lo peor se puede diseñar alrededor).

Así que lo que estoy buscando es:

  • Un lenguaje en el que puedo código partes comunes de mi aplicación y compilarlo en clases utilizables por las lenguas "estándar" en la plataforma de destino
  • no añade ningún requisito de tiempo de ejecución al sistema
  • Nada tan extraño que ahuyenta a los posibles contribuyentes

I kN Tanto Python como Ruby tienen implementaciones para JVM y CLR. ¿Qué tan bien se ajustan a mis requisitos? ¿Alguien ha tenido éxito (o no ha tenido éxito) usando esta técnica para aplicaciones multiplataforma? ¿Hay alguna pregunta de la que deba preocuparme?

Respuesta

5

Compruebe hacia fuera el Fantom programming language. Tiene su propia sintaxis similar a Java/C#, pero puede apuntar a Java VM o .NET CLR.

Su página "Why Fantom" ofrece una visión general de alto nivel de su enfoque de la portabilidad frente a los lenguajes dinámicos que se ejecutan en una máquina virtual.

+0

Creo que Fan parece ser la mejor opción. Jython en Java parece que no se ha trabajado durante un tiempo, mientras que IronRuby en CLR está en la versión 0.3. Tendré que aprender más Fan para saber si esto es lo que realmente me gustaría hacer o si es más fácil simplemente hacer el tenedor. –

+0

La última versión de Jython fue en noviembre, y parece bastante activa, aunque estoy de acuerdo en que Fantom encaja mejor en este caso. – Yishai

1

Puede tener algo de suerte usando IKVM.NET. No estoy seguro de su estado exacto, pero vale la pena intentarlo si insiste en ejecutar código Java en .NET Framework. Incluye una implementación .NET de la biblioteca de clases base de Java, por lo que parece razonablemente completa.

La única otra opción que podría sugerir es portar el código al lenguaje J#, un lenguaje .NET completo (aunque no de primera clase en el sentido de que C# o VB.NET). El lenguaje fue diseñado para que las diferencias con Java fueran mínimas.

+0

Pensé en ambas opciones, pero mi preocupación por IKVM era agregar una dependencia, y mi preocupación por J # fue burlada por los desarrolladores de .net ... –

+0

@Nathan: Muy comprensible ...aunque no creo que vayas a encontrar una solución "ideal" de la manera que la desees dentro de las tecnologías convencionales. La mayoría de los desarrolladores de proyectos transferirán la base de códigos completa a otro idioma (quizás con la ayuda de otros) y harán que los cambios/correcciones al código sean paralelos en todos los puertos. Personalmente creo que te vas a encontrar con más problemas de los que vale tratar de usar la misma base de código para las versiones de JVM/CLR, mantener un puerto separado es más esfuerzo, pero vale la pena en mi mente. – Noldorin

0

Si usted está pensando en un enfoque emdedded, puede mirar a Lua.

Cuestiones relacionadas