¿Por qué el concepto de bytecode no es tan relevante como lo era antes?


Introduccion


Los lenguajes compilados del tipo interpretado son aquellos lenguajes de programación que se compilan en algún tipo de representación intermedia (a veces denominada " código de bytes "). El ejemplo más llamativo es la JVM (Java Virtual Machine).


Este artículo expone mis pensamientos sobre el concepto de una máquina virtual para lenguajes de programación en las realidades actuales. En las realidades, donde la mayoría de los servicios funcionan en Internet, y los programas de escritorio se están eliminando gradualmente.


Causas de ocurrencia


En el momento en que nació la World Wide Web, apareció la tecnología Java que popularizó por primera vez el uso de una máquina virtual como un entorno de tiempo de ejecución para lenguajes de programación de alto nivel.


Sun Microsystems intentó combinar la fiabilidad y la alta velocidad de los lenguajes compilados con la portabilidad y la facilidad de uso de los interpretados. Hasta cierto punto, la idea se realizó, porque Java todavía se convirtió en la tecnología más común en la construcción de servidores altamente cargados.


Entre otras cosas, se presentó uno de los requisitos principales de la plataforma, que más tarde se convirtió en el eslogan: "¡Compila una vez, ejecuta en todas partes!" . Esto significa que el programador solo debe compilar el código fuente en el llamado bytecode, capaz de ejecutarse en cualquier sistema donde esté instalado el JVM.


Esto se ha convertido en la fuerza impulsora detrás de la tecnología, arrojando muchos idiomas a un segundo plano. Esta fue una especie de revolución en el mundo de la informática digital, porque antes nadie podía alcanzar un nivel similar de multiplataforma. Ahora los usuarios pueden descargar la misma versión del programa en muchos sistemas operativos y arquitecturas de procesador, y asegurarse de que funcionará exactamente como los desarrolladores pretendieron.


Pero los tiempos están cambiando y la tecnología con ellos. La World Wide Web está ganando cada vez más popularidad, desplazando algunas cosas que nos son familiares.


La era de los servicios remotos.


"¿Por qué entregar programas a los usuarios si solo puedes crear un sitio web?" - Esta pregunta fue formulada por grandes empresarios, lo que luego resultó en una emigración de servicios a gran escala a la World Wide Web. Los programas de escritorio estándar han comenzado a perder su popularidad, porque es mucho más fácil y más eficiente crear un sitio web simple (o no).


En consecuencia, la necesidad de descargar programas de Internet a menudo ha desaparecido. Abra un sitio y realice las acciones necesarias mucho más rápido que descargar megabytes de datos binarios.


Mientras tanto, Java ha ganado popularidad en la construcción de esos mismos sitios, porque no existía nada más conveniente en ese momento (hasta el día de hoy). Los archivos de origen comenzaron a compilarse solo para una arquitectura de servidor específica, por lo tanto, el principio "¡Compila una vez, ejecuta en todas partes!" dejó de tener su significado anterior . Los usuarios dejaron de descargar programas y los desarrolladores comenzaron a compilar solo para una arquitectura específica.


Evolución del lenguaje


Anteriormente, los lenguajes de programación compilados tenían una funcionalidad bastante pobre de la biblioteca estándar, por lo que era necesario usar muchas funciones dependientes de la plataforma incluso para una aplicación simple que no hace nada sobrenatural.


Los lenguajes de programación tampoco se detuvieron , y lenguajes como Rust y Golang , ambos compilados, salieron a la luz, y ambos tienen un estándar y muchas bibliotecas de terceros que proporcionan una funcionalidad independiente de la arquitectura y el sistema operativo. Además, el ecosistema C / C ++ tampoco se detuvo.


Como resultado, resultó que las bibliotecas estándar modernas y las máquinas virtuales desempeñan el mismo papel : traducen el código multiplataforma en funciones dependientes de la plataforma.


El resto de


Algunos podrían argumentar que todavía hay una demanda de programas de escritorio. Básicamente, se trata de programas cerrados destinados al uso interno en corporaciones, así como a un pequeño número de aplicaciones disponibles públicamente.


En ambos casos, compilar para cientos de plataformas diferentes no tiene sentido, ya que en la gran mayoría de los casos solo se utilizan tres sistemas operativos conocidos ( GNU / Linux , Microsoft Windows y Mac OS ) y una familia de arquitecturas de procesador ( x86 ).


Conclusión


En total, tenemos máquinas virtuales que ralentizan su trabajo (como tiempos de ejecución de bytecode), que han perdido sus principales ventajas debido a los dos factores anteriores:


  1. La necesidad de ejecutar el programa en cientos de arquitecturas diferentes no tiene sentido, ya que la mayoría de los programas funcionan en servidores, y no hay tantas arquitecturas de usuario y sistemas operativos.
  2. Los lenguajes compilados no se detuvieron, y sus bibliotecas estándar adquirieron la funcionalidad básica necesaria para el código multiplataforma.

Las discusiones en los comentarios son bienvenidas, espero que el artículo te haya motivado a pensar en elegir el idioma adecuado para tus tareas.


Adiciones


Como se señaló en los comentarios , el código administrado tiene algunas ventajas que no están disponibles para el código compilado, incluidas la reflexión y las anotaciones.

Source: https://habr.com/ru/post/454562/


All Articles