Foros del Web » Programación para mayores de 30 ;) » C/C++ »

¿Me explican si los .exe necesitan algun framework para funcionar?

Estas en el tema de ¿Me explican si los .exe necesitan algun framework para funcionar? en el foro de C/C++ en Foros del Web. Hola: tengo conocimiento programando en JAVA y se que para que un .jar funcione la computadora debe tener la maquina virtual de java. Ahora estoy ...
  #1 (permalink)  
Antiguo 11/12/2014, 01:14
 
Fecha de Ingreso: abril-2014
Mensajes: 7
Antigüedad: 10 años
Puntos: 0
¿Me explican si los .exe necesitan algun framework para funcionar?

Hola:

tengo conocimiento programando en JAVA y se que para que un .jar funcione la computadora debe tener la maquina virtual de java.

Ahora estoy tratando de programar en C# (y en futuro C y C++), la duda me surge porque he leido por alli que dicen que necesito tener cierto framework para C# pero no se si se refieren a que solo lo necesito para programar (en el desarrollo) o el framework es una especie de complemento necesario para que el .exe generado se pueda ejecutar (tanto para C#, C y C++). Esta duda me surge porque quiero hacer aplicaciones .exe pero si las aplicaciones van a depender de ciertas herramientas previamente instaladas entonces tendria que buscar una mejor solucion.

Un ejemplo de aplicacion que quiero desarrollar es un cliente - servidor en C# (y luego en C y C++): ¿esto necesitaria un framework instalado en las pc que usen la aplicacion?

Gracias.
  #2 (permalink)  
Antiguo 11/12/2014, 01:38
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 6 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.
  #3 (permalink)  
Antiguo 11/12/2014, 02:19
 
Fecha de Ingreso: abril-2014
Mensajes: 7
Antigüedad: 10 años
Puntos: 0
Respuesta: ¿Me explican si los .exe necesitan algun framework para funcionar?

Cita:
Iniciado por eferion Ver Mensaje
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.
¡Muchas gracias! Tu respuesta fue perfecta y exacta, no me resolvia la duda en ningun lugar ni preguntando a gente del rubro.
  #4 (permalink)  
Antiguo 11/12/2014, 02:46
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 9 años, 8 meses
Puntos: 182
Respuesta: ¿Me explican si los .exe necesitan algun framework para funcionar?

Buenas,

Solo por completar la excelente respuesta de Eferion.

Cita:
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.
Esto no es siempre asi. Actualmente tanto Java como C# incluyen, entre sus optimizationes, compiladores Just In Time (JIT).
http://en.wikipedia.org/wiki/Just-in-time_compilation

Gracias al JIT, cuando la maquina virtual detecta una parte del codigo que necesita mas velocidad (ya sea por su complejidad o porque es muy utilizada) realiza una compilacion super-optimizada a lenguaje maquina de dicha parte del codigo y la almacena en una cache. De esta forma, cada vez que ese codigo vuelve a ser invocado, se ejecuta el codigo nativo en lugar de interpretar y compilar al vuelo el lenguage intermedio.
En Java, por ejemplo, un fragmento de codigo se compila y cachea una vez ejecutado 1500 veces, aunque este valor de threshold es configurable. Hay que destacar que este codigo compilado esta tan optimizado que resulta algunas veces incluso mas rapido que si lo desarrollamos en C/C++.

http://www.javacodegeeks.com/2013/07...-buzzword.html
http://programmers.stackexchange.com...-faster-than-c

En el caso de C# el JIT es mas configurable que en Java y se permite incluso pre-compilar directamente todo el codigo fuente.
http://www.c-sharpcorner.com/UploadF...time-compiler/

Un saludo
__________________
If to err is human, then programmers are the most human of us
  #5 (permalink)  
Antiguo 11/12/2014, 03:27
lareto
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: ¿Me explican si los .exe necesitan algun framework para funcionar?

Java y C# generalmente implican máquina virtual (o .NET Framework); C o C++ no.

C# generalmente implica Windows, mientras que Java, C o C++ no.

Los cuatro necesitan librerías y runtimes ya instalados, aunque es frecuente que un programa escrito en C o C++ no necesite nada que no esté previamente instalado en el sistema operativo (otras veces sí)

Una introducción a C#:
https://en.wikipedia.org/wiki/C_Shar...ng_language%29

Y hay un par de respuestas concretas en:
https://stackoverflow.com/questions/...-sharp-and-net
  #6 (permalink)  
Antiguo 11/12/2014, 03:56
 
Fecha de Ingreso: septiembre-2010
Mensajes: 494
Antigüedad: 13 años, 6 meses
Puntos: 10
Respuesta: ¿Me explican si los .exe necesitan algun framework para funcionar?

Cita:
Iniciado por eferion Ver Mensaje
* 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.
Siempre había pensado que cada compilador estaba optimizado para cada plataforma de hardware. Me quedo perplejo.

Y por cierto, me uno a las alabanzas por una respuesta tan completa
__________________
Mi calculadora en Qt
  #7 (permalink)  
Antiguo 11/12/2014, 04:38
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 6 meses
Puntos: 204
Respuesta: ¿Me explican si los .exe necesitan algun framework para funcionar?

Cita:
Iniciado por dehm Ver Mensaje
Siempre había pensado que cada compilador estaba optimizado para cada plataforma de hardware. Me quedo perplejo.
Si tu haces un programa en tu máquina y luego pretendes que funcione en la de aquel que te compre una licencia tienes un problema:

* Si el código está optimizado para tu máquina puede que en la suya no funcione correctamente (por ejemplo si su procesador es un AMD y el tuyo un Intel)

* Si el código está optimizado para su máquina... espera, ¿cómo haces esto? te vas a casa de cada cliente y, delante de el, compilas una versión a medida para su máquina? no, verdad?

Al final lo que se suele hacer es una especie de compilación más o menos genérica. Obviamente los procesadores de los PCs suelen tener un juego de instrucciones común y es este juego el que usa el compilador.

Si necesitases sacarle el máximo partido a una máquina en concreto seguramente tendrías que hacer uso de alguna instrucción específica de ese procesador... pero claro, el código generado no sería portable a ninguna máquina que tuviese un procesador diferente porque entonces los juegos de instrucciones no son iguales.

El que piense que la diferencia entre un pentium 2 (si hace tiempo, lo se) y un intel i7 es únicamente la velocidad y cambios internos, que se lo haga mirar... y sin embargo un programa que funcionaba en un pentium 2 es perfectamente capaz de correr en un i7 (obviamos problemas del sistema operativo, eso ya es otro cantar)
  #8 (permalink)  
Antiguo 11/12/2014, 04:47
 
Fecha de Ingreso: septiembre-2010
Mensajes: 494
Antigüedad: 13 años, 6 meses
Puntos: 10
Respuesta: ¿Me explican si los .exe necesitan algun framework para funcionar?

Espera, creo que estamos hablado de cosas diferentes.
Yo pensaba efectivamente en la compilación de cada uno en su ordenador, disponiendo de los fuentes, no en los ejecutables

Si además el usuario sabe tocar algún flag adecuado para optimizar la compilación para su máquina, pues eso, que eso es en lo que yo estaba pensando.
__________________
Mi calculadora en Qt

Etiquetas: exe, framework, funcion, programa
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:34.