原生语言和托管语言的本质区别是什么

本质区别是:原生语言和托管语言可能不是良好定义的。原生实现中的代码,都被静态编译成相应平台上的机器码,执行时直接执行这些机器码。托管实现中的代码,不一定被静态编译成相应平台的机器码,执行的方式是由某个环境解释或动态编译。

原生语言和托管语言的本质区别是什么-Worktile社区

原生语言和托管语言可能不是良好定义的。

我们可以试着定义原生实现和托管实现:

原生实现中的代码,都被静态编译成相应平台上的机器码,执行时直接执行这些机器码。

托管实现中的代码,不一定被静态编译成相应平台的机器码,执行的方式是由某个环境解释或动态编译。

原生实现在通过虚拟机转接后也会成为托管实现。

原生实现和托管实现的 runtime 是不同的东西:

原生实现的 runtime 只是库,只有在直接或间接调用库函数时会用到,虽然一般会在执行开始前要求其存在。理论上不依赖标准库的代码可以没有 runtime 。

托管实现的 runtime 是运行环境和库,执行的每时每刻都在使用。

通常非托管的程序, 比较有代表性的是C/C++所写的程序, 对CPU和内存的使用几乎没有什么限制(当然现代OS基本都采用保护模式和虚拟内存, 也可以看成更底层的一层托管). 因此对指令的运行必须受限于CPU所支持的范围, 内存的读写也没有约束, 开发者很容易写出对无效内存的访问而造成无法继续处理的结果。

通常认为内存受约束几乎离不开GC的帮助, 有较严格GC的语言就不能随意使用指针, 因此C/C++就做不到”托管”. Go虽然有指针, 但很巧妙地约束的指针的使用范围, 因此也符合托管. 不过由于Go必须先编译到CPU支持的指令才能运行, 因此第一条不太符合, 让人感觉Go不算完整地实现了”托管”。

所以, 所谓”原生语言”和”托管语言”并没有绝对的划分界限, 只是有些语言符合大部分”托管”特性就认为它是”托管语言”了。

延伸阅读:

什么是托管代码?

托管代码 (managed code)同受管制的代码,由公共语言运行库环境(而不是直接由操作系统)执行的代码。托管代码应用程序可以获得公共语言运行库服务,例如自动垃圾回收、运行库类型检查和安全支持等。这些服务帮助提供独立于平台和语言的、统一的托管代码应用程序行为。

托管代码是可以使用20多种支持Microsoft .NET Framework的高级语言编写的代码,它们包括:C#, J#, Microsoft Visual Basic .NET, Microsoft JScript .NET, 以及C++。所有的语言共享统一的类库集合,并能被编码成为中间语言(IL)。运行库编译器(runtime-aware compiler)在托管执行环境下编译中间语言(IL)使之成为本地可执行的代码,并使用数组边界和索引检查,异常处理,垃圾回收等手段确保类型的安全。

文章标题:原生语言和托管语言的本质区别是什么,发布者:小编,转载请注明出处:https://worktile.com/kb/p/38574

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023年2月17日 上午2:20
下一篇 2023年2月17日 上午2:22

相关推荐

  • 敏捷看板的作用是什么

    敏捷看板管理的作用体现在:1、具有多功能性;2、持续改进;3、提升响应能力;4、提升产量;5、打造自组织团队;6、提升产品质量。看板不是一种方法论,也不是一个流程框架,而是一种应该用于现有流程或工作方式的管理方法或途径。 1、具有多功能性 看板背后的中心思想是通过视觉信号进行交流,视觉信号的好处涉及…

    2022年11月16日
    21400
  • 产品功能优先级怎么划分

    产品功能优先级划分的排序框架:1、MoSCoW;2、KANO;3、执行 & 收益矩阵;4、延迟成本 / 工期(CD3);5、RICE分数。其中,MoSCoW是一个简单且有效的工具,可以帮助产品发现用户需求,让目标用户从中获益并找到价值。 1、MoSCoW MoSCoW是一个简单且有效的工具,…

    2023年1月2日
    15800
  • IP 地址安全风险有哪些

    IP 地址安全风险有:1、使用您的 IP 地址下载非法内容;2、追踪您的位置;3、直接攻击您的网络;4、入侵您的设备;网络罪犯可以使用各种技术来获取您的 IP 地址。最常见的两种方法是社会工程和在线跟踪。 一、网络罪犯获取IP 地址最常见的两种方法 网络罪犯可以使用各种技术来获取您的 IP 地址。最…

    2022年10月24日
    81100
  • 常见的软件开发模型有哪些

    常见的软件开发模型有:1、瀑布模型;2、快速原型模型;3、渐增模型;4、喷泉模型;5、迭代模型;6、敏捷开发模型。其中,使用瀑布模型开发时是通过设计一系列阶段顺序展开的,从系统需求分析开始直到产品发布和维护,每个阶段都会产生循环反馈。 1、瀑布模型 瀑布模型(Waterfall Model) 是一个…

    2023年1月5日
    39000
  • 日常进度报表有什么好的软件

    日常进度报表好的软件有:一、Worktile;二、PingCode;三、progress 进度条;四、简道云;五、SeaTable;六、Asana;七、Jira;八、Weekdone。Worktile 是国内首个同时提供OKR目标+项目管理功能的工具,它曾在2021年36氪发布的项目管理系列榜单总榜…

    2023年4月21日
    2100
  • 字符设备驱动是什么

    字符设备是Linux驱动中最基本的一类设备驱动,字符设备就是一个一个字节,按照字节流进行读写操作的设备,读写数据是分先后顺序的。比如我们最常见的点灯、按键、IIC、SPI、LCD等等都是字符设备,这些设备的驱动就叫做字符设备驱动。 字符设备是 Linux 驱动中最基本的一类设备驱动,字符设备就是一个…

    2023年5月29日
    500
  • codesys和西门子STEP7的区别与联系是什么

    codesys和西门子STEP7的区别与联系是:1、FC的定义;2、SCL的定义;3、顺序功能图的使用;4、EN/ENO;5、指针等。codesys中定义的FC就是单纯的FC,不允许有输出OUT参数;而step 7的FC是兼顾了无参数的程序的功能,相当与codesys中的子PRG。 一、FC的定义 …

    2023年5月5日
    3200
  • 哪个app有知识库的功能

    有知识库的功能的app有:1、PingCode Wiki;2、Baklib;3、有道云笔记;4、印象笔记;5、RemNote;6、石墨文档;7、Notion;8、语雀;9、幕布;10、Obsidian。PingCode Wiki是和腾讯文档、飞书文档等大厂产品一样,做到了实时的意识传递(协同者光标)…

    2023年4月21日
    2300
  • 在C#中 String.Empty和 “” 有什么区别

    区别是:string. Empty的内部实现是等于”的。二者在优化方面稍有差别,string.Empty 是C#对”在语法级别的优化。引用类型的数据将对象在堆.上的地址保存在””都会分配存储空间,具体的说是都会在内存的栈和堆上分配存储空间。 strin…

    2023年2月16日
    6600
  • 编辑进度计划的软件叫什么

    编辑进度计划的软件有:一、Microsoft Project;二、GanttProject;三、Smartsheet;四、Trello;五、Conclusion。Microsoft Project(或MSP)是由微软开发销售的项目管理软件程序。软件设计目的在于协助项目经理发展计划、为任务分配资源、跟…

    2023年3月19日
    5200

发表回复

登录后才能评论
联系我们
站长微信
站长微信
分享本页
返回顶部