lunes, noviembre 1, 2010
|
Hoy en "Pregunta a eliax" respondo una pregunta que es bastante técnica, pero que creo debería ser del conocimiento general de cualquier persona que utilice cualquier sistema de computación, incluso para simplemente navegar el Internet, pues le dará una nueva perspectiva sobre temas que les afectan a diario.
La pregunta es, ¿Qué es un runtime y cómo me afecta en la vida diaria? y para responderla (y explicarla), utilizaré un sistema de analogías en donde una embajada se quiere comunicar con otra, pero tomando en consideración la barrera de idiomas... Imaginemos que una embajada española en Argentina desee enviarle un mensaje a una embajada estadounidense en Hawaii. Hay varias maneras de enviar este mensaje, considerando la barrera de idioma entre ambas embajadas (español e inglés), pero consideremos tres ejemplos específicos: 1. La embajada española posee un empleado estadounidense que habla bastante bien el español, por lo que el embajador español le dice directamente a este traductor lo que le quiere decir al embajador en Hawaii, y este traduce el mensaje, y después lo envía por email a Hawaii directamente al embajador estadounidense, quien lee el email inmediatamente. 2. La embajada española posee un empleado español que maneja de forma adecuada el idioma inglés (aunque su idioma natal y de uso diario es el español). En este caso el embajador español escribe su mensaje en español, y después se lo envía a este traductor español, quien hace el mejor esfuerzo posible de traducirlo al inglés, y después lo envía por email a Hawaii directamente al embajador estadounidense, quien lee el email inmediatamente. 3. La embajada española no posee traductores, pero confía que en Hawaii la embajada estadounidense tiene traductores, por lo que el embajador envía el mensaje directamente a la embajada estadounidense en Hawaii. Sin embargo, como el embajador estadounidense no entiende español, este reenvía el mensaje a un traductor para que le traduzca el mensaje, el cual después que termina de traducirlo se lo reenvía de vuelta al embajador en inglés. Es posible que algunos se pregunten si existe una gran diferencia entre el ejemplo 1 y 2, y aunque en la práctica quizás no la haya, para ilustrar el tema de un runtime si la hay. Antes de continuar, demos una breve descripción de lo que es un runtime (no se preocupen por entender ahora mismo, se hará evidente en un momento): Un runtime no es más que un ambiente que interpreta código (o software) para ejecutar en una determinada plataforma. En nuestros ejemplos, existe un solo runtime, y es el traductor en la embajada de Hawaii del tercer ejemplo. Así mismo, podemos considerar a la embajada de Hawaii como tu PC, y al mensaje del embajador español como un software que queremos correr (o que se entienda) en la embajada remota. El primer ejemplo, es uno en donde no existe un runtime, sino que la PC ejecuta lo que se llama "código nativo" (es decir, al embajador le llegó el mensaje en el idioma inglés, escrito por otro estadounidense como él sabiendo todas las idiosincracias y detalles semánticos y sintácticos del idioma inglés). Este es el tipo de código que muchos conocen cuando hablan de "conseguir un programa que funcione en Windows" (o en Linux, o en Mac, etc, como son Photoshop, Autocad, Microsoft Office, etc). Estos son programas optimizados para esos sistemas operativos y arquitecturas de hardware, y por ende hablan directamente el "idioma nativo" de la máquina. En el próximo nivel, en el segundo ejemplo, notamos que aunque el mensaje le llega en inglés al embajador, que el que hizo la traducción no era un traductor con el mismo nivel de conocimiento que el traductor del ejemplo 1, pero que sin embargo el mensaje llegó en inglés, y por tanto pudo ser entendido casi inmediatamente. Es posible que el embajador en un par de ocasiones se haya detenido un par de veces a ponderar el significado de alguna frase u oración, pero en resumen tuvo pocas dificultades en entender el mensaje, aun le hubiera tomado un poquito más de tiempo en entenderlo apropiadamente. Este es el caso de por ejemplo el motor de programación Javascript en los más recientes navegadores web (Javascript es un lenguaje que permite que programadores de aplicaciones web ejecuten programas localmente en tu PC, y no remotamente). En este caso lo que ocurre es que aunque el programa original (en Javascript) no está escrito o "compilado" tomando en cuenta en cual plataforma una determinada página web será abierta (pues recuerden que la misma página web puede ser accedida desde usuarios de Windows, Linux, iPhone, Android, etc), lo que sucede es que estos navegadores web tienen un "optimizador" que toma (casi en tiempo real) el programa en Javascript y lo "traduce" al "idioma" local de tu PC, y después que tiene el programa en el idioma local, lo ejecuta como si fuera una aplicación nativa del ejemplo 1. Esto permite que el programa se ejecute bastante rápidamente, pero por lo general no a la misma velocidad de una aplicación nativa, ya que similar al segundo ejemplo, el mensaje o programa original no estaba escrito optimizado para tu PC, sino que en otro idioma, por lo que algunas cosas resultan semi-optimizadas. En cuanto al tercer ejemplo, imaginemos por ejemplo todas esas aplicaciones, animaciones y juegos que ven en Internet en formato "Flash" de Adobe. En este caso, esas animaciones no solo están escritas en un lenguaje que no toma consideración de sobre cual plataforma el programa final ejecutará (es decir, no están optimizadas), sino que además el programa no es pre-traducido como en los modernos motores de Javascript antes de ejecutar el programa, sino que el programa va traduciendo y corriendo a la misma vez, lo que hace la labor mucho menos eficiente que en los otros dos ejemplos. A este último ejemplo se dice que el código está siendo "interpretado en tiempo real". Noten sin embargo que aunque el primer y segundo ejemplo tienen algo en común (el mensaje es traducido antes de ser enviado), que el segundo y tercer ejemplo también tienen algo en común: Ambos requieren de cierto procesamiento en el destino antes de que el mensaje sea entendido completamente. La única diferencia entre estos dos últimos ejemplos es que en el segundo ejemplo el código se convierte a código nativo, y después se ejecuta, mientras que en el tercer ejemplo existe una entidad fija (el traductor, o runtime) que continuamente está interpretando, traduciendo y ejecutando el programa. Pero, ¿y cómo nos afecta esto a nosotros en la vida diaria? Pues ahora saben, que cada vez que tienen que descargar un lector para documentos PDF (como el Adobe Reader), o actualizar el reproductor de Flash (de Adobe), o instalar el plugin de Java (de Oracle/Sun) en sus navegadores web y PCs, que lo que en realidad están haciendo es instalando un runtime que les traduce esos formatos a uno que sus PCs y navegadores web puedan entender. Esa es también la razón por la cual esos programas ponen sus máquinas por lo general más lentas, ya que esos formatos exigen el trabajo adicional de un "traductor" que exige potencia del rendimiento de sus PCs. Esta es también la razón por la cual quizás en meses recientes hayan oído hablar de un nuevo estándar llamado "HTML 5", en donde el objetivo de ese estándar es permitir que los navegadores web modernos no dependan de estos runtimes, y que puedan hacer lo mismo de forma nativa. Un ejemplo de esto es lo que hace Google con GMail hoy día, en donde si recibes un archivo PDF, este te permite abrirlo como una imagen dentro de tu propio navegador web, sin necesidad de lanzar el lector PDF de tu PC. En este caso, lo que ocurre es que Google utiliza su propio runtime en sus servidores para traducir con sus máquinas el PDF a una imagen web normal, y después te envían esa imagen a tu navegador web, ahorrándole a tu PC tener que perder tiempo con el runtime del lector PDF en tu PC. Espero que esto les haya dado una nueva perspectiva a aquellos usuarios no técnicos para que pueden comprender mejor el rol y la importancia de estas tecnologías en sus vidas diarias. También será de importancia que entiendan esto para un análisis que escribiré próximamente en eliax (actualización: aquí está el artículo), en donde explico (y ahora podrán entender mejor) por qué algunas de las empresas más importantes en el mundo del software tienen rivalidades que a simple vista parecen carecer de sentido... Nota a usuarios técnicos que conocen estos temas a fondo: Estoy conciente que estrictamente hablando, los tres ejemplos son runtimes, solo que a distintos tipos y niveles, pero la idea que quiero transmitir al lector casual es que un runtime se necesita cuando hay que hacer una traducción de código o mensajes en tiempo real (es decir, mientras se ejecuta un programa). También noten que simplifiqué estos ejemplos por motivos didácticos, pues Javascript hoy día es interpretado en un runtime en algunos ambientes, así como Flash ya pre-compila código en casi tiempo real antes de ejecutarlo (similar a como lo hace la plataforma Java con su tecnología de JIT, o Just-In-Time Compiler). Y como siempre, pueden acceder a mas artículos similares en la sección de "Pregunta a eliax", y enviar sus preguntas por este medio. autor: josé elías |
10 comentarios |
Educación , Pregunta a eliax , Software |
Comentarios
Añadir Comentario |
"Estoy leyendo tu libro Maquinas en el Paraiso, que te puedo decir, EXCELENTE.
Un placer, gracias"
Un placer, gracias"
en camino a la singularidad...
©2005-2024 josé c. elías
todos los derechos reservados
como compartir los artículos de eliax
Seguir a @eliax
Gracias por la explicación, disto mucho de ser un técnico con estas computadoras pero este artículo me aclaró un par de cosas que escapaban mi comprensión. Saludos a la familia!