plataforma - ¿Existe un convertidor/herramienta Java a C++?
java wikipedia (10)
Hay uno, poco, no estoy seguro de si realmente funciona. Souventions de Java a C ++ Converter-Tangible Software .
Es extraño cómo hay convertidores c ++ a java, pero solo 1 convertidor java a c ++.
Siempre me pregunté si sería posible crear un convertidor de Java a C ++.
¿Tal vez una herramienta que convierta la sintaxis de Java a la sintaxis de C ++?
Soy consciente de que los idiomas son diferentes, pero cosas simples como bucles donde la semántica coincide con 1 a 1.
¿Hay tal herramienta? ¿O es posible hacer uno?
Como dije, sería difícil convertir Java a C ++, pero podemos tener una aplicación o herramienta que genere código en Java y código C ++ de Equivalnet.
Conozco una aplicación que genera código en C ++ / Java / C # dado un modelo que tiene su propia manera de definirlo.
Esa herramienta pertenece a CA y su nombre es CA Plex. Busque en www.ca.com
Es posible, no hay duda, pero no será tan simple. Sería un compilador de Java que genera C ++.
Si quieres hacer eso desde cero, será muy difícil, tienes que hacer todo el trabajo que javac y JVM hacen por ti (por ejemplo, recolección de basura).
Por cierto. Google tiene un compilador de Java a JavaScript (incluido en GWT )
Hay programas que afirman que pueden hacer esto, pero ninguno ha ganado suficiente popularidad como para mencionarlo con frecuencia, así que los dejamos en "intentos". Hacer un convertidor requeriría una gran cantidad de inteligencia artificial integrada en su programa. La dificultad aumenta diez veces cuando se trata de swing, ya que GTK / wxWidgets / Qt / win32 API difieren mucho de swing. Pero es posible. No es que la calidad del código sea excelente y no hay garantías de que su programa no se bloquee debido a métodos separados de manejo de memoria, pero es posible.
Es posible hacer cualquier cosa con tiempo, dinero y recursos suficientes. ¿Es práctico? Más allá de ejemplos triviales en realidad no. O más bien depende de lo que constituye una tasa de error aceptable.
El verdadero problema es que las expresiones idiomáticas son diferentes en Java a C ++. Java a C #, por ejemplo, en realidad sería mucho más fácil (porque los modismos son mucho más similares). El más grande, por supuesto, es que C ++ tiene destructores y memoria administrada manualmente. Java usa finalmente bloques para este tipo de comportamiento y tiene recolección de basura.
También Java tiene un supertipo de objeto común. C ++ no.
Los genéricos de las plantillas serían casi imposibles, me imagino.
El problema principal es que java es un lenguaje escrito y diseñado para hablar con una máquina virtual. Supongo que sería posible, pero todo lo que quedará es una aplicación muy pobremente optimizada con una capa de auto traducción que hace lo que la VM ya hace. Quiero decir, seguro, es posible, todavía no sería una solución para cualquier cosa que pudiera pensar. Si buscas hacer que tu lenta aplicación java sea nativa, tal vez tu forma de pensar es demasiado difícil, simplemente utiliza una aplicación como JET, en realidad es bastante buena, y te dará los beneficios que una aplicación nativa podría traer. Por supuesto, si la VM ya está haciendo lo que la aplicación le está pidiendo que haga tan bien como podría hacerlo el código nativo (sucede ... a veces: P) podría no cambiar nada.
Java to c #, sin embargo, suena más razonable, ya que ambos idiomas están escritos de manera similar, hablando con un framework como tal, pero esto aún dejaría el código muy desoptimizado ya que el código escrito desde cero para un framework particular no puede ser superado.
http://www.tangiblesoftwaresolutions.com/Order/Order_Upgrade_Instant_CPlus_Java_Edition.htm
Depende del dominio de dónde se usará el código, desde una perspectiva de aprendizaje quizás sea interesante.
Acabo de encontrar esto a través de Google, ya que recordaba haber visto uno en la Universidad que creaba código basado en uml.
Java to C sería en realidad el más fácil. Recuerde que necesita convertir el idioma. Si lo hace, el compilador nuevo puede convertir las bibliotecas necesarias. En otras palabras, Swing y AWT no deberían ser un gran problema ...
Comenzaría echando un buen vistazo a Java Native Interface (JNI). El JNI es una parte de Java que permite su uso con C y C ++. La razón por la que comenzaría aquí es que se vuelve bastante obvio cómo partes de Java pueden implementarse en C. Una vez que tuve una comprensión de las estructuras básicas, como cómo se pueden mapear los objetos Java en estructuras C (struct) y cómo casi todo en Java es un objeto que incluye matrices; podría echar un vistazo al código fuente de Open JDK.
El convertidor real tendría que convertir todas las bibliotecas Java importadas (y sus bibliotecas importadas, etc.) lo que significa que necesitaría el código fuente para todo. Esta conversión no es una tarea pequeña ya que las bibliotecas de Java son grandes.
El proceso llevaría mucho tiempo, pero no debería requerirse AI. Sin embargo, no veo ninguna razón para realizar una conversión como esta. Pierde la portabilidad de Java y no obtendría la eficiencia de C (excepto que se compilaría con código nativo, pero sería mejor compilar el código de máquina directamente desde Java).
Algo bueno sería una herramienta que traduzca java a "C ++ usando la API de Java" (como GNU GCJ CNI), un problema que queda es administrar array.length
(array not vector) ...
El analizador HTML5 de Firefox está escrito en Java y convertido a C ++ . Pero creo que el convertidor utilizado allí es bastante específico para este proyecto. Curiosamente, resultó que el analizador de C ++ resultante era más rápido que el analizador antiguo escrito en C ++.
También estoy escribiendo un convertidor como parte de la base de datos H2 , en src / tools / org / h2 / java. La idea es permitir la conversión de un subconjunto de la base de datos H2 a C ++, por lo que este tampoco es un traductor de propósito general.
Y está el proyecto de código abierto J2C .
Entonces, hay formas de convertir Java a C ++. Pero no espere que el traductor admita todas las características, y no espere que el código resultante sea más rápido que una buena Java JVM.