13 meneos
548 clics
La más obsoleta infraestructura que el dinero pudiera comprar [ENG].
Hoy se cumple el décimo aniversario del trabajo más extraño y posiblemente más triste que jamás haya tenido. El año fue 2005. Mi interés en escribir un sistema de gestión de contenido en Java para la empresa que compró nuestra startup, se había ido agotando, mientras que mi verdadera pasión era trabajar en compiladores y otra infraestructura de lenguaje de programación (principalmente SBCL). Un día descubrí un anuncio de trabajo para especialistas en compiladores, algo raro en aquel momento y lugar. Volé a la entrevista de trabajo, pero no hice las preguntas correctas e ignoré un par de señales de advertencia. Oops. Resultó ser una aventura en retrocomputing.
|
comentarios cerrados
"que mi verdadera pasión era trabajar en compiladores y otra infraestructura de lenguaje de programación (principalmente SBCL)"
A nadie que le interese java le apasionan los compiladores.
stackoverflow.com/questions/1326071/is-java-a-compiled-or-an-interpret
"While this is still considered an "interpreter," It's quite different from interpreters that read and execute the high level source code"
El .NET de Microsoft hace lo mismo, pero como esta profundamente integrado con el sistema operativo, es mucho mas eficiente que la maquina virtual de Java.
(reparaba electrónica)
...
(nunca le hizo falta. )
Lo que no entiendo es porque se ataca una herramienta a veces casi fanáticamente, es como si le gritara a mi destornillador plano porque el de carraca es mejor para ciertos tornillos, me parece tronchante ..
De ahí al bytecode que usan Java o .NET en la actualidad no hay mucha diferencia.
Cuando se habla de "interpretes" se entiende por cualquier código que necesite de otro programa para poder ejecutarse, ya sea un interprete puro y duro en tiempo real o un compilador en tiempo de ejecución.
"Some implementations of JVM may choose to interpret the bytecode instead of JIT compiling it to machine code, and running it directly. While this is still considered an "interpreter," It's quite different from interpreters that read and execute the high level source code (i.e. in this case, Java source code is not interpreted directly, the bytecode, output of Java compiler, is.)
Pero, una vez más, no dejes que los hechos estropeen tu realidad. Si para ti es compilado, es compilado y ya esta.
www.seasip.info/Cpm/
cc @mr_b
Los programas, al ejecutarse en una plataforma específica, adoptan diferentes propiedades, derivadas de la naturaleza de ese entorno. A nivel lógico pueden pasar cosas muy diferentes, con EFECTOS muy diferenciados entre si, y tales efectos tienen un impacto muy grande en la forma en la que se trabaja en una plataforma.
El primer tipo de plataforma de computación, sería el interprete, donde el programa es evaluado linea por linea, en tiempo de ejecución por otro programa, que traduce las instrucciones del programa escritas por el programador, linea a linea, en instrucciones de código máquina que se ejecutan en el sistema físico subyacente. Esto provoca que el programador pueda ejecutar una parte del programa, incluso si mas adelante, hay una instrucción invalida o incompleta. Eso hace mas difícil el proceso de desarrollo, basicamente por dos razones. Por que el feedback de que algo está mal codiificado llega mas tarde y solo en esos codepaths. Y por que el estado puede quedar inconsistente, tras ejecutar procesos de forma incompleta, que se han detenido en puntos arbitrarios del proceso, dejando estados intermedios incompletos en el peor caso.
Luego, están las plataformas de computación donde el programa codificado por el programador, es compilado o traducido en un proceso previo a la ejecución (ya sea por orden directa del usuario, o por acción automática previa a la ejecución). El programa compilado resultante es una transformación a otro sistema de codificación de programas, válido para ejecutarse en un computador.
El computador puede ser físico o virtual, eso no tiene ningún impacto lógico en la forma en la que se realiza el proceso. Es decir, la jvm o python, son basicamente computadoras simuladas dentro de otras computadores. De ahí el nombre "máquina virtual" en este contexto, como máquina virtual de java.
Entonces, decir que interprete es toda plataforma de computación donde el código en tiempo de ejecución no se esté ejecutando de forma directa en un computador físico, es una definición muy poco útil de "interprete". Para el programador, lo que realmente va a tener impacto es si ha habido una compilación y su pertinente verificación, antes de ejecutar nada.
Además, hay el problema de que interpretado es normalmente entendido como lo contrario que compilado. Y java es compilado. Compilado no significa compilado a código máquina de la máquina física. Significa traducido de un lenguaje de programación a un código máquina (de la máquina que sea).
Por eso, decimos que java es un lenguaje compilado, y no interpretado. Igual que javascript (y por eso se llama máquina virtual de javascript, y no interprete de javascript). Igual que go, o que python.
Lenguajes de scripting que no sean DSL quedan pocos, pero hay por ejemplos el bash scripting.
/cc #33
Bien, entonces no podemos tener razón ninguno de los dos, porque cada cual puede entender lo que le de la gana...
"decir que interprete es toda plataforma de computación donde el código en tiempo de ejecución no se esté ejecutando de forma directa en un computador físico, es una definición muy poco útil de "interprete""
Ya, solo que eso es lo que significa un lenguaje interpretado.
"the term "interpreted" is practically reserved for "software processed" languages (by virtual machine or emulator) on top of the native (i.e. hardware) processor. "
en.wikipedia.org/wiki/Interpreted_language
Todo esto me suena a justificación de fans de Java...
Asúmelo! Java es interpretado, igual que .NET!
Puedes decir lo que quieras, pero no puedes ejecutar un programa de Java en un procesador sin que otro programa intermedio lo interprete para ejecutarlo. (igual que .NET, que para eso necesitas instalar el framework)
Porque si, una maquina virtual es un programa. Y estoy seguro de que la maquina virtual de Java no esta escrita en Java, sino en C (por ejemplo), que SI que es un lenguaje compilado porque el resultado de la compilación es un binario que se ejecuta directamente en el procesador.
Y una maquina virtual es, a fin de cuentas, un emulador. Te guste o no te guste.
Las habrá mas rápidas, mas lentas, mejores y peores. Las habrá incluso que casi casi parezcan lenguaje nativo... Pero seguirá siendo interpretado.
Una computadora al completo es un emulador por definición esencial de computadora.
Si un programa es interpretado cuando en el proceso de su ejecución incluye en algún punto una emulación, entonces cualquier programa para una computadora sería interpretado por definición.
Creo que tu posición sobre esta definición es insostenible y es absurda, ya que engloba a cualquier programa que se ejecute en una computadora. Y engloba cualquier programa por dos razones: la primera, por que una computadora es una máquina de simular, ergo, la simulación forma parte de cualquier programa que se ejecute en una computadora. Y la segunda por que cualquier programa esté como esté codificado, necesita de la asistencia de otros programas (sistema operativo, microcodigo del firmware de la cpu, etc) para ejecutarse, entonces todos los programas son interpretados también en cualquier medida.
Sobre el asunto de justificación de fans de java... no se de que me está usted hablando. Yo programo y he programado en multitud de lenguajes para muchas plataformas, entre las que se encuentran C, C++ y otros lenguajes compilados a instrucciones codificadas para un dispositivo electromagnético. Eso no me hace sentirme por encima de nadie, ni pensar que argumentos cutres sobre la persona, en lugar de sobre la materia, van a resultar en una respuesta lógica.