IBM创建了Eclipse OMR,一个用于为任何语言创建运行时环境的开源虚拟机工具包。OMR旨在让各种语言都能利用虚拟机技术的一般改进,像垃圾收集或硬件集成。为此,IBM正在推广自己名为J9的JVM。

\\

虽然JVM日益成为许多语言的通用运行时,但它同Java语言的紧密关系意味着其设计和功能的很大一部分都是同Java本身紧密相关的。这就使得在尝试使用JVM作为其他语言的运行时时会遇到挑战,尤其是动态类型的语言: 在Java 7引入InvokeDynamic之前,动态语言都不得不使用低效的变通方案来克服JVM的静态类型特性,严重影响了性能。就像Daryl Maier和其他OMR项目成员所说的那样,这给语言创建者两种选择:要么从头开始为新语言创建一个运行时,这会带来难以承受的成本,或者,就像大多数团队所做的那样,调整语言,让它可以使用已有的运行时环境,接受它的限制。

\\

OMR提供了第三种选择。虽然OMR本身不是一个运行时,但它是一个让你可以轻松创建运行时的工具包。OMR是通过重构IBM Java虚拟机J9的组件创建出来的,对于任何运行时中最常见的功能,它都提供了一种语言无关的实现,同时,它还提供了一套接口,用于创建接口作者所说的“语言胶水(language glue)”或者是特定于语言的代码,作为OMR提供的通用功能同需要处理的语言细节之间的桥梁。将OMR同语言胶水相结合,语言设计者就可以获得一个包含如下功能的运行时:

\\

  • 内存分配器 \\
  • 线程库 \\
  • 用于将运行时移植到不同平台的硬件抽象层 \\
  • 用于连接不同运行时和操作系统事件的事件钩子框架 \\
  • 用于调式及其他目的的跟踪引擎 \\
  • 垃圾收集 \\
  • JIT编译器\

为了促进推广,语言胶水接口并不需要从头全部实现,语言设计者可以根据他们想要获得的运行时功能仅实现其中的一部分。例如,简单地实现这些API中的三个就可以获得一个单线程的标记/清除垃圾收集功能,而实现更多的接口就可以获得并发标记、并行或分代收集功能。

\\

这次重构有一个有趣的副作用,就是单个组件更容易测试了。在这次修改之前,像垃圾收集这样的组件只能使用整个运行时来执行,这意味着测试需要大量复杂的设置和分析。不过,在对这个复杂的逻辑进行分隔和解耦之后,单个组件可以隔离测试了,这简化了测试设置和分析。

\\

不过,OMR最有前途的特性可能是它将成为一个由Eclipse基金会(IBM是其战略成员)运作的开源项目。项目负责人希望Eclipse基金会培养一个开发者社区,为OMR提供创新性贡献,所有以OMR工具包为基础创建运行时的语言都可以从中受益。这有助于OMR攻占OpenJDK的领地,后者虽然也是开源的,但它在吸收有价值的贡献时一直有些困难,比如谷歌对CMS所做的性能改进。

\\

然而,这种方法也有缺点。虽然迫使语言设计者采用一种已有的运行时可能会带来一些挑战,但那也意味着不同的语言可以同时在同一个虚拟机中运行,这样就便于语言互操作。OMR为每种语言创建一个不同的运行时的方法意味着,即使可能,实现互操作也要困难许多。最终的结果可能是,不同的语言设计者根据自己的战略重点,在易于互操作和易于语言开发之间作出权衡,选择这一个或其他方法。

\\

查看英文原文:IBM Kick-Starts Eclipse OMR, a Toolkit for Creating Language Runtimes

IBM推出创建语言运行时的工具包Eclipse OMR相关推荐

  1. 对Eclipse OMR(用于创建语言运行时环境的工具集)架构师Mark Stoodley的访谈

    IBM的Eclipse OMR是一个开源的虚拟机工具集,用于创建任意语言的运行时环境.它的意图在于让实现语言的人能够重用IBM在Java运行时方面所投入的数百开发人年所取得的成果,能够受益的包含已有的 ...

  2. c语言运行时内存不够,浅析C语言运行时内存管理

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 主要讨论C语言怎样组织正在运行的程序的数据结构的细节. 我们知道知道在UNIX操作系统中,一个C语言文件经过预处理(cp ...

  3. [SQL Server]无法创建 SSIS 运行时对象,请验证 DTS.dll 是否可用及是否已注册

    前言 今天在使用SQL Server 2014 导"出数据"时,报了一个错,内容如下: 无法创建 SSIS 运行时对象.请验证 DTS.dll 是否可用及是否已注册.此向导无法继续 ...

  4. Go 语言运行时环境变量快速导览

    原文: http://dave.cheney.net/2015/11/29/a-whirlwind-tour-of-gos-runtime-environment-variables Go 语言运行时 ...

  5. c语言运行时隐藏dos窗口

    c语言运行时隐藏dos窗口 只要加一个这个语句就行了. #pragma comment(linker,"/subsystem:"windows" /entry:" ...

  6. Go 语言运行时环境变量快速

    Go 语言运行时环境变量快速导览 Go Runtime除了提供:GC, goroutine调度, 定时器,network polling等服务外, 还提供其它一些工具设施,用于开启额外的调试输出, 或 ...

  7. C语言运行时数据结构

    段(Segment): 对象文件/可执行文件: SVr4 UNIX上被称为ELF(起初"Extensible Linker Format", 现在"Executable ...

  8. MFC中的动态创建与运行时识别

    MFC中支持运行时类型识别与动态创建.这更多的是设计问题.理解了其中的设计,可以更快定位用MFC框架开发的代码.通过研究MFC实现这些的细节,可以更快地掌握其他开发框架的设计思想. 宏定义中的&quo ...

  9. c语言运行时显示内存不足,请问:c或c++运行时 遇到虚拟内存不足时咋办,帮优化下代码...

    请问:c或c++运行时 遇到虚拟内存不足时咋办,帮优化下代码 [size=4][size=5]我编的一个高精度解hilbert方程组的程序段,用的是GS跌代,但运行时出现"虚拟内存不足&qu ...

最新文章

  1. 2022-2028年中国塑料制品行业投资分析及前景预测报告(全卷)
  2. VC++下使用md5函数
  3. MySQL优化group by和distinct
  4. 洛谷 - P2163 [SHOI2007]园丁的烦恼(不带修二维数点-树状数组/主席树)
  5. 用计算机数字技术制作的电影是,如何面对电影制作中的数字技术
  6. ccf 智能运维 裴丹_智能运维 聊一聊实时计算系统
  7. [Java] [Lock] [Synchronized VS ReentrantLock]
  8. 关于css外链和js外链的位置
  9. java调用webservice的.asmx接口
  10. mapreduce 和hive 的区别
  11. 最漂亮的人是为梦想而努力的人
  12. Lm317电压源芯片制作电流源
  13. rono在oracle的作用_Oracle 11g各种服务作用以及哪些需要开启
  14. Jetson Nano入门教程:硬件篇+视频学习教程
  15. [SQL]如何实现表数据的去重
  16. 2020ACM俱乐部后备营个人训练赛第七、八、九场
  17. 逻辑代数的基本定理和规则
  18. c语言程序跟踪调试,VC6断点调试之监视变量
  19. [NOI2005]瑰丽华尔兹 动态规划 + 单调队列
  20. IDEA运行tomcat时,控制台红色中文乱码的解决办法

热门文章

  1. java导出excel居中不生效_POI 导出Excel 设置内容居中 换行
  2. 渣一本毕业,面试多家大厂(阿里、蘑菇街、腾讯、百度、网易),成功斩获网易Offer
  3. ECMAScript6 类
  4. 信号完整性分析和印制电路板
  5. Cloudera CDH离线安装增加节点到集群
  6. 现有改善肠道菌群的药物有哪些?
  7. 用Redis作为消息队列的使用方法——附C#源码
  8. 在VUE中获取当前时间
  9. Vue电商项目-登录注册仿掘金可爱萌猫
  10. Spring拦截器(实现自定义注解)