Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: SrCooper en 8 Septiembre 2013, 22:16 pm



Título: [Duda] ¿Compilar un programa mientras se ejecuta?
Publicado por: SrCooper en 8 Septiembre 2013, 22:16 pm
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


Título: Re: [Duda] ¿Compilar un programa mientras se ejecuta?
Publicado por: 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.


Título: Re: [Duda] ¿Compilar un programa mientras se ejecuta?
Publicado por: SrCooper en 8 Septiembre 2013, 23:02 pm
Entiendo. Bueno, nos tendremos que conformar con cerrar el programa y volverlo a abrir   :laugh:

En fin, gracias por contestar.


Título: Re: [Duda] ¿Compilar un programa mientras se ejecuta?
Publicado por: vangodp en 9 Septiembre 2013, 08:10 am
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://es.wikipedia.org/wiki/Java_Native_Interface)

http://holamundojava.blogspot.com.es/2009/07/acceso-metodos-nativos-jni-vs-jna.html (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


Título: Re: [Duda] ¿Compilar un programa mientras se ejecuta?
Publicado por: eferion en 9 Septiembre 2013, 08:27 am
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.


Título: Re: [Duda] ¿Compilar un programa mientras se ejecuta?
Publicado por: 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 ...


Título: Re: [Duda] ¿Compilar un programa mientras se ejecuta?
Publicado por: vangodp en 9 Septiembre 2013, 10:01 am
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


Título: Re: [Duda] ¿Compilar un programa mientras se ejecuta?
Publicado por: SrCooper en 9 Septiembre 2013, 11:57 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


Título: Re: [Duda] ¿Compilar un programa mientras se ejecuta?
Publicado por: Eternal Idol en 9 Septiembre 2013, 12:55 pm
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.