[Duda] ¿Compilar un programa mientras se ejecuta?

Iniciado por SrCooper, 8 Septiembre 2013, 22:16 PM

0 Miembros y 1 Visitante están viendo este tema.

SrCooper

Buenas, resulta que hace un tiempo, viendo unos videos de programación, el hombre que programaba tenía dos pantallas abiertas: en una el código fuente y en otra el programa compilado ejecutandose.

Cuando él escribía algo en el código fuente y le daba a compilar el programa se actualizaba automáticamente, sin necesidad de cerrar la ejecución y volverla a abrir.

El hombre del video estaba programando en java, mi duda era si eso mismo se puede hacer también en C++ y las razones por las que sí o no.

Un saludo y muchas gracias por vuestra atención :P

amchacon

Java es un lenguaje semi-interpetrado por lo que se puede permitir algunas libertades como esa.

PD: Un lenguaje interpetrado es aquel que se compila y luego se interpetra el binario. El interpetre que hace esto se le llama maquina virtual.
Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar

SrCooper

Entiendo. Bueno, nos tendremos que conformar con cerrar el programa y volverlo a abrir   :laugh:

En fin, gracias por contestar.

vangodp

#3
Java Native Interface (JNI)
Java Native Access (JNA)

Un bello dia eh leido sobre esas 2 cositas monitas pero que complicado de co...
A ver si te interesa algo jeje
http://es.wikipedia.org/wiki/Java_Native_Interface

http://holamundojava.blogspot.com.es/2009/07/acceso-metodos-nativos-jni-vs-jna.html

Eh leido que son para acceder desde java a c++, pero haciendo unas movidas se podia hacer el contrario... :silbar:

interesante no??
pero aun soy mu novatin en c++ pa liarme con esto jajaj
Saludos

eferion

Cita de: amchacon en  8 Septiembre 2013, 22:54 PM
Java es un lenguaje semi-interpetrado por lo que se puede permitir algunas libertades como esa.

PD: Un lenguaje interpetrado es aquel que se compila y luego se interpetra el binario. El interpetre que hace esto se le llama maquina virtual.

No es técnicamente así... tu cuando compilas una aplicación JAVA o .NET, se genera lo que se conoce como código intermedio... este código debe ser compilado después por la máquina virtual para generar código ejecutable... pero ese código ejecutable sólo se genera la primera vez que se ejecuta esa parte del código.

La característica que hace que se pueda modificar partes del código mientras éste está en ejecución es que los ejecutables de .NET y JAVA no son un monolito en memoria, sino que están divididos en módulos ejecutables que se pueden descargar y recompilar sin interferir en el resto del programa.

Me explico:

Las llamadas a las funciones se configuran con punteros. Cuando la función llamada no está compilada, el puntero apunta a una instrucción de la máquina virtual que se encargará de compilar esa parte y modificar el puntero... si se requiere recompilar esa función "en caliente", basta con modificar de nuevo el puntero para que vuelva a apuntar a la máquina virtual en vez de a la porción de código que se debe recompilar.

Eternal Idol

Es bastante complejo y no muy util pero una cosa que podes hacer es emular la tecnica de hotpatching de Microsoft. Basicamente pones un salto al principio de la funcion que queres modificar, previamente generaste el codigo binario necesario y lo pusiste en la memoria del proceso en cuestion. Esto hace Microsoft para que en los servidores se puedan actualizar binarios sin reiniciar ...
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

vangodp

No entiendo mucho de programacion pero creo que java tambien tiene su gracia.
Aun que prefiero c++ jejej
Pero no descarto aprender algo de java si un dia termino c++, y lo digo si un dia lo termino por que voy a mi bola muuuuu lennnnnto  :laugh:
cada lenguaje tiene su gracia ojala subiera unos cuantos jaja
tengo curiosidad por python, java y javascript, tambien el html5 ^^
Pero despues tengo la cabeza mas vacia que un globo jajaja, no se que hacer con esas cosas jaja

SrCooper

Cita de: Eternal Idol en  9 Septiembre 2013, 09:30 AM
Es bastante complejo y no muy util pero una cosa que podes hacer es emular la tecnica de hotpatching de Microsoft. Basicamente pones un salto al principio de la funcion que queres modificar, previamente generaste el codigo binario necesario y lo pusiste en la memoria del proceso en cuestion. Esto hace Microsoft para que en los servidores se puedan actualizar binarios sin reiniciar ...

Me parece que eso es demasiado complicado a no ser que el archivo con el que estes trabajando sea muy grande y entonces si te salga rentable.

Un saludo y gracias por las respuestas

Eternal Idol

Cita de: SrCooper en  9 Septiembre 2013, 11:57 AM
Me parece que eso es demasiado complicado a no ser que el archivo con el que estes trabajando sea muy grande y entonces si te salga rentable.

Y si, es para evitar reiniciar a toda costa, de otra manera no hace falta por mas cool que parezca hacerlo.
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón