为什么字节码的概念没有以前那么重要


引言


解释类型的编译语言是那些被编译为某种中间表示形式(有时称为“ 字节码 ”)的编程语言。 最引人注目的示例是JVM (Java虚拟机)。


本文阐述了我对当前现实中用于编程语言的虚拟机概念的看法。 在现实中,大多数服务都在Internet上运行,并且桌面程序正在逐步淘汰。


发生原因


万维网诞生时,Java技术出现了,该技术首先普及了将虚拟机用作高级编程语言的运行时环境。


Sun Microsystems试图将编译语言的可靠性和高速性与可移植性和易于使用的解释语言相结合。 在某种程度上,这个想法得以实现,因为Java仍然成为构建高负载服务器中最常用的技术。


除其他外,提出了平台的主要要求之一,后来又成为口号: “一次编译,随处运行!” 。 这意味着程序员仅应一次将源代码编译为所谓的字节码,即可在安装了JVM的任何系统上运行。


这已成为技术背后的驱动力,将多种语言引入了后台。 这是数字计算领域的一场革命,因为在此之前,任何人都无法实现类似水平的跨平台。 现在,用户可以在许多操作系统和处理器体系结构上下载该程序的相同版本,并确保该程序一定可以按照开发人员的预期运行。


但是时代在变化,技术也在与时俱进。 万维网越来越受欢迎,排挤了一些我们熟悉的事物。


远程服务时代


“如果您只能创建一个网站,为什么要向用户交付程序?” -大型企业家提出了这个问题,后来导致服务大规模迁移到万维网。 标准的桌面程序已开始失去其流行性,因为创建一个简单的(或不是这样)网站变得更加容易和高效。


因此,从Internet上下载程序的需求经常消失了。 打开站点并采取必要的措施比下载兆字节的二进制数据要快得多。


同时,Java在构建这些站点方面已变得越来越流行,因为当时(到目前为止)还没有任何方便的方法。 开始只针对特定的服务器体系结构编译源文件,因此, 原则是“一次编译,随处运行!” 不再具有以前的意义 。 用户停止下载程序,并且开发人员开始仅针对特定体系结构进行编译。


语言进化


以前,编译的编程语言在标准库中的功能相当差,因此,即使对于不执行任何超自然操作的简单应用程序,也有必要使用许多依赖于平台的功能。


编程语言也没有停滞不前,诸如RustGolang之类的语言,都经过编译,并且都具有标准语言,并且诞生了许多第三方库,它们提供的功能与体系结构和操作系统无关。 另外,C / C ++生态系统也没有停滞不前。


结果,事实证明, 现代标准库和虚拟机扮演着相同的角色 -它们将跨平台代码转换为依赖于平台的功能。


其余的


有人可能会争辩说仍然需要桌面程序。 基本上,这些是封闭的程序,仅供公司内部使用,以及少数公共可用的应用程序。


在这两种情况下,为数百种不同的平台进行编译都是没有意义的,因为在绝大多数情况下,仅使用三种众所周知的操作系统( GNU / LinuxMicrosoft WindowsMac OS )和一种处理器体系结构家族( x86 )。


结论


总体而言,我们让虚拟机减慢了它们的工作速度(作为字节码运行时),由于上述两个因素,这些虚拟机失去了主要优势:


  1. 由于大多数程序都可以在服务器上运行,并且用户架构和操作系统不多,因此无需在数百种不同架构上运行该程序是没有道理的。
  2. 编译语言并没有停滞不前,它们的标准库为跨平台代码获得了必要的基本功能。

欢迎在评论中进行讨论,我希望本文能引起您一些思考,以选择适合您任务的语言。


加法


注释中所述 ,托管代码具有一些编译后的代码无法使用的优点,包括反射和注释。

Source: https://habr.com/ru/post/zh-CN454562/


All Articles