托管语言(managed language)

托管语言、非托管语言、解释性语言、编译性语言、虚拟机语言、脚本语言...

面对各种语言分类,有些之间的差异也是模糊的,有些是确定的,比如:

编译性语言:C、C++

解释性语言:Python、MATLAB、JavaScript、Java?

脚本语言:Python

托管语言(managed language)通常表示存在垃圾收集(GC)的内存管理/存在虚拟机基础结构。

“已编译”和“受管理”之间不一定有区别。这些不是对立的。语言可以被编译和不被管理,或者可以被解释(不被编译)和被管理,或两者兼而有之。

“编译”语言只是其中的一种,其中有一个步骤将开发人员编写的源代码转换为某种更常规的“字节码”,即由机器执行的字节码。“机器”可以是实际的处理器,也可以是对字节码执行附加操作以将其转换为“本机”机器指令的“虚拟机”。“编译”语言的反义词是“解释”语言,其中在运行时将源代码在执行时逐行转换为字节码指令,而无需编译步骤。它们之间的混合是“ JIT”(Just In Time)中的“ jitting”,它通常被执行机器解释为一次性步骤;

“托管”语言是一种设计用于生成在特定运行时环境中使用的程序的语言,该运行时环境几乎总是包含字节码解释器;一个“虚拟机”,它采用程序的代码并执行一些其他机器或特定于环境的转换。该环境还可以包括内存管理,例如“垃圾收集器”和其他“安全”功能,这些功能旨在使程序在其空间和工具的“沙箱”中运行,但是这些功能并非“托管”运行时的唯一领域。实际上,所有解释语言都可以视为托管语言,因为它们要求解释器在要执行的“用户”代码行下运行。此外,JVM和.NET语言(Java,Scala,C#,VB,F#,IronWhatever)被编译成一种中间语言或IL,其形式和功能与二进制汇编语言在表面上相似,但并不100%遵循任何“本机”指令集。这些指令由JVM或.NET的CLR执行,它们将它们有效地转换为特定于计算机CPU体系结构和/或操作系统的本机二进制指令。

因此,语言通常可以描述为“编译”或“解释”,以及“非托管”(或“本机”)和“托管”。可以将这些语言描述为这些语言的任何组合,除了可能的“解释的本机”(仅适用于手写十六进制操作码才适用);如果您将解释层视为“运行时”(这很容易辩驳,很难反对),则所有解释语言都是“托管”的。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值