Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: 4dr14n31t0r en 11 Marzo 2016, 13:33 pm



Título: Programar en C o ensamblador para la maquina virtual de java
Publicado por: 4dr14n31t0r en 11 Marzo 2016, 13:33 pm
Teniendo en cuenta que C es un lenguaje que depende en gran parte de la maquina, ¿Se puede programar en C para la maquina virtual de java? La ventaja de java esque es portable, pero lento por ser de alto nivel. Sin embargo C es mas rapido por ser de mas bajo nivel, pero no portable, asi que se me ocurrió que sería buena idea programar directamente en C para la maquina virtual de java, de modo que los programas contarian con las ventajas de los 2 lenguajes.

Lo mismo digo para ensamblador.


Título: Re: Programar en C o ensamblador para la maquina virtual de java
Publicado por: MAFUS en 11 Marzo 2016, 13:57 pm
Bueno, tampoco habría tanta ventaja. El compilador de java pasa a bytecode de la máquina java el código y después la máquina java va traduciendo el código máquina de la máquina virtual al código máquina del procesador. Toda una historia muy larga. Y el trabajo este se realiza cada vez que se ejecuta un java. No sé si hace como .NET que traduce al momento y al mismo tiempo guarda en caché las instrucciones en IL para una próxima ejecución más rápida.
En cámbio C, normalmente, lo traduce todo a ensamblador y el linker a código máquina. Esto unido a que tiene un entorno de ejecución pequeño es lo que lo convierte en un lenguaje rápido, pero a la vez inseguro porque su entorno de ejecución hace muy poco para el programador.


Título: Re: Programar en C o ensamblador para la maquina virtual de java
Publicado por: Orubatosu en 11 Marzo 2016, 21:33 pm
Hombre, eso no tiene mucho sentido ya que hablas de conceptos diferentes.

No obstante, Java en realidad es bastante parecido a un C++ en su parte de POO


Título: Re: Programar en C o ensamblador para la maquina virtual de java
Publicado por: class_OpenGL en 11 Marzo 2016, 21:46 pm
Lo que pides es imposible. Es contradictorio. Cada tipo de CPU tiene una arquitectura, es imposible crear un código máquina o un código ensamblador que sirva para todos los tipos de CPU. No obstante, no es tanto que Java sea lento (aunque lo sea un poco más que C/C++), sino que los programadores en más alto nivel no suelen optimizar a más bajo nivel. No estoy diciendo que los programadores que programan en más alto nivel sean peores programando, sino que no se fijan en los detalles en los que se fija un programador en C/C++.

Te explico, Java es más lento que C++, no tanto porque sea un lenguaje interpretado, sino que con el fin de ahorrarles tiempo y disgustos a los programadores, hace muchas comprobaciones de memoria o otras cosas para ver que todo ha ido bien en una instrucción, para que el programa no crashee. Por ejemplo, cuando reservamos memoria dinámica en C/C++ tenemos que tener muchísimo cuidado mientras que en Java, si se produce algún error en la memoria dinámica, directamente el programa lo detecta y se actúa según el error. En C++ tenemos la opción de hacer esas comprobaciones, o no porque estemos seguros de que no van a fallar!! Otro error común en C++ es acceder a lugares de la memoria que no nos pertenece...

Espero haber aclarado el tema :D


Título: Re: Programar en C o ensamblador para la maquina virtual de java
Publicado por: Orubatosu en 12 Marzo 2016, 22:11 pm
Eso sin contar lo principal

C es un lenguaje de programación imperativa. Java es un lenguaje de programación orientado al objeto.

Convertir directamente un programa de C en Java "no funciona" ni a la de 3. Como te he comentado, es posible portar de forma "mas o menos" sencilla (que nunca es fácil) un programa de C++ diseñado en programación orientada al objeto a Java, ya que comparten muchos conceptos (no todos). No obstante ese programa en C++ si tiene partes de programación imperativa (porque C++ es multiparadigma, acepta los dos conceptos) la adaptación será desde luego menos fácil.

Y decir que comparten muchos conceptos, e incluso nombres de instrucciones no es lo mismo que pensar que se puede hacer un "cortar y pegar" y que eso funcione.