Ver Mensaje Individual
  #2 (permalink)  
Antiguo 11/12/2014, 01:38
eferion
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 7 meses
Puntos: 204
Respuesta: ¿Me explican si los .exe necesitan algun framework para funcionar?

Tanto Java como .Net (C# pertenece al entorno .Net) funcionan con máquinas virtuales.

Cuando estás diseñando un programa en uno de estos entornos, el ejecutable que se genera no contiene un programa listo para ejecutar, sino que se compone de, básicamente, dos partes:

* Un script que inicializa la máquina virtual
* Una especie de código precompilado de tu código fuente.

El código, como habrás notado, viene precompilado en vez de, simplemente, compilado. ¿cual es la diferencia? los compiladores de Java y .Net no generan código ejecutable, sino que procesan el código fuente y lo "traducen" a un lenguaje intermedio ( en el caso de .Net se llama MSIL, en Java lo desconozco ). Este lenguaje intermedio es el que se almacena en el "ejecutable". Como el código del ejecutable no tiene instrucciones que pueda reconocer el ordenador, se hace necesario el uso de la máquina virtual. Ésta incorpora un compilador a medida que coge ese código intermedio y genera código ejecutable.

¿Por qué tanto jaleo cuando se podía generar código ejecutable directamente? Muy sencillo. Este mecanismo tiene como ventaja que el código intermedio es portable hasta el punto que puedes usar el mismo ejecutable indistintamente tanto en Linux como en Windows (siempre que no accedas a funciones específicas de un sistema operativo en concreto). Otra ventaja de usar C# o Java es que el desarrollo de aplicaciones es bastante más sencillo que si te toca programar con lenguajes de más bajo nivel. La desventaja de este sistema es que te obliga a instalar el framework en todas las máquinas que necesiten ejecutar tu programa.

Inciso: El sistema operativo Windows suele venir con la versión 2.0 de .Net instalada por defecto, por lo que si basas tus programas en este framework no tendrás que realizar instalaciones adicionales.

Obviamente, puedes crear código nativo, programando con C o C++, por ejemplo. Los programas que crees con código nativo no necesitarán hacer uso de la máquina virtual, pero:

* no podrás portarlos directamente de Windows a Linux, tendrás que compilar programas específicos para cada sistema operativo
* el código que se genera no suele estar especializado para un procesador en concreto, por lo que el código puede no aprovechar las bondades de determinados procesadores.

Aún así, aunque no tengas que instalar la máquina virtual, no olvides que la inmensa mayoría de los programas tienen dependencias de librerías externas, por lo que será bastante rara la ocasión en la que no tengas que llevar un paquete de DLLs junto con tu ejecutable.

Un saludo.