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

\\

该项目真正意识到了在开发人员中,存在语言多样性这一客观现实。语言运行时可以从重用其他语言的组件方面受益。它的理念在于,尽管每种语言都有自己的定位,但是它们实际上会有相同或类似的组件。比如说,一个全新的语言可以使用来自Java的分代垃圾收集器,不必再重复造轮子,完全不用关心这个语言的语法和表现形式与Java的语法完全不同。

\\

InfoQ采访到了该提议的架构师Mark Stoodley。

\\

InfoQ:IBM在Java运行时方面已经投入了数百的开发人年和上百万美元,现在为什么这么做呢?是不是IBM不会在Java领域进行重点投入了呢?

\\

\

Mark Stoodley:并非如此,IBM在Java生态系统中投入了很多,而且将会持续投入。但是,我们希望这么巨大的投入也能为其他的语言社区带来红利。
\随着像IBM Bluemix这样的云平台的流行以及微服务架构的发展,相比于几年前,我们需要更广泛地关注语言多样性的问题。我们的客户关注很多不同的语言,因此我们也必须要关注这些不同的语言。对于IBM来说,以跨语言社区的方式,高效利用投资是非常重要的,我认为并不是只有IBM面临这样挑战,这就是我们致力于构建Eclipse OMR社区的原因。
\因为几乎所有的现代语言都是开源的,所以对于我们来说参与进来并发挥差异性的最佳方式就是将自身开放出来。实际上,Eclipse OMR就是IBM加入已有的开放社区,用来构建语言运行时,而不是关起门来自己进行研究。

\

\\

InfoQ:Eclipse OMR项目是否致力于让更新的语言从中收益,这些语言指的是还没有发明的或者还没有进入开发人员的视野的?它能够帮助已有的语言吗,如Ruby、Python、Javascript等等?

\\

\

Mark Stoodley:实际上,两方面都可以!
\Eclipse OMR组件在与某个语言的运行时集成时,需要实现我们所谓的“语言胶水层(language glue layer)”。基本上来讲,这些代码就是帮助OMR组件实现特定语言的语法和行为。我们努力让这个胶水层尽可能简单和直接地描述该语言对Eclipse OMR组件的需求。
\例如,某个语言的运行时需要告诉OMR GC如何循环访问内存区域中的值(也就是对象)来查找指向其他内存区域(对象)的指针。这个过程是与语言运行时所采用的对象模型密切相关的,所以它需要作为该语言胶水层的一部分,用来支持OMR GC组件。返回的指针将会被OMR GC组件所使用,保证这些对象处于存活的状态。至于在任意机型,任意数量的内核上高效地遍历完整的对象图,OMR GC就知道该怎么做了。
\搭建一个简单的标记-清除(mark-sweep)收集器并使其运行起来相对来讲比较简单,只需要实现几项内容即可。更为复杂的收集器如分代的GC技术,则需要编写内存屏障(barrier),这需要的工作会更多一些。但是我们正在努力寻找使其更加简单的方法,也欢迎任何有志于使它变得更好的人参与进来。对于构成Eclipse OMR项目的每一个组件,都有类似的来历。
\填充语言的胶水层通常会涉及到重构已有运行时的一些代码,或者为新的运行时从头进行编写。但是,如果你要编写自己的运行时的话,这些代码很可能也是必须要编写的。通过使用OMR的组件,你能够编写更少的代码,获得更好的功能。

\

\\

InfoQ:你能在技术上总体介绍一下Java的运行时组件吗,有哪些组件已经可以进行重用了?还有哪些组件是最近就可以重用的?

\\

\

Mark Stoodley:IBM已经贡献了20万行的代码,其中包含了多个现在就可以使用的不同组件:

\\

  1. 垃圾收集(GC)\\t
  2. 平台抽象层(端口)\\t
  3. 跨平台线程库(线程)\\t
  4. 运行时结构:当构建运行时的时候,全局以及每个线程可用的上下文\

我们只是为GC组件添加了通用的支持,这样的话,就将我们主要的Java GC技术开放了出去,可以供其他语言来使用。我们正在做一个诊断工具,帮助运行时的开发人员编写和调试语言运行时相关的问题。我们正在努力地让即时编译(Just In Time,JIT)技术能够开源,预计今年晚些时候就能完成了。编写JIT编译器是一项艰巨的任务,我们也在为JIT做一个更简单的接口,这样人们就能更快地准备就绪并使其运行起来,不用再去担心编译器开发人员日常所关心的所有细节。

\

\\

InfoQ:Eclipse为什么开源这个项目呢?

\\

\

Mark Stoodley:这个过程其实就是确保每个人都可以访问我们的项目并且自由地使用这项技术,不管你是完成班级项目的学生、尝试一些酷炫事物的hacker、与开源社区协作或者在社区内工作的公司,甚至是想构建自己的业务,也没有意愿为社区做出什么回馈的人,都可以使用这些技术(但是,我们希望这些人都能够看到回馈社区所带来的价值!)。
\Eclipse基金会提供了我们所需的可信环境和基础设施,确保我们的知识产权(intellectual property,IP)在得到保护同时,还能保证它们的自由访问。这个环境能够让我们非常舒服地进行开放开发,知道我们的IP是安全的,我认为其他人也能感受到同等程度的舒适。随着时间的推移,我们也希望能够从Eclipse项目中收益,它们具备构建平台的实际经验,其他人能够使用、扩展这些平台,并为其做出贡献,这完全匹配Eclipse OMR项目的初衷。
\Eclipse基金会对我们来说,是完全适合的。

\

\\

InfoQ:我认为,从短期来看,Java社区所能得到的收益应该是最少的。你认为Java运行时能够在这个共生的关系中最终收益吗?

\\

\

Mark Stoodley:绝对会这样的。 Eclipse OMR项目是用来共享运行时方面的技术投资的,这些技术能够跨多种不同的语言,其中也包括Java,它想围绕实现语言运行时的人群构建一个社区。具有共享、可重用的组件对社区来讲是很棒的一种方式,不管人们来自何处都能分享他们的最佳实践。IBM通过贡献其Java平台的一些技术来帮助培育这个社区。Eclipse OMR是一个开放的项目,具有开放的贡献规则:任何人都可以为其做出贡献,项目的提交者欢迎各种类型的贡献提交,我们致力于扩大提交者的数量,鼓励社区为OMR组件贡献内容,包括为已有的组件进行功能增强,或者贡献/构建OMR尚未包含的全新组件。
\我们期望其他的语言能够影响OMR的众多组件,例如,我们认为比Java更加动态的语言将会帮助Java本身更好地适应动态语言。
\所以,我坚定地认为Java将会在这里有所收获,就像其他的语言在这里会有所收获一样:没有人能够垄断伟大的创意。但是当我们通过可重用的运行时技术组件共享这些伟大的创意时,整个开发社区都能从中受益。

\

\\

InfoQ:你们有证据证明这种重用工作的实际可行性吗?并不仅限于学术练习方面的证据?

\\

\

Mark Stoodley:我们已经进行了一些探索性的工作,以此来证明Eclipse OMR组件不仅能够用在一种语言上:目前是Java、Ruby、Python以及一个Smalltalk运行时,名为SOM++,它是用来教授学生如何构建运行时的。我们知道它是可以运行的:我们已经设法将方法profiling、垃圾收集以及即时编译器技术从Java迁移到到了Ruby、Python以及SOM++,如果大家感兴趣的话,都会将其贡献给社区。
\不过,现在的工作还没有完成。我们的目标就是想证明Eclipse OMR理念从开始就是可行的。事实上,我们的工作完成得要超过该目标:即便开始的需求是不能破坏已有运行时的兼容性,我们依然做了许多很酷的事情。通过使用IBM Health Center工具,为我们的Ruby和Python实现集成了方法profiling功能,确定了工具API能够引入到OMR中,然后可以非常容易地用于多种语言运行时,从而提供内置的监控功能。我们将自己的Java GC技术用在了Ruby所有的非堆数据上,使其变成了受托管(可垃圾回收)的堆,这样的话,在内存占用方面会有更好的控制,并且带来了性能提升,因为受托管的内存会比原生内存分配和释放得更快。最后,我们实现了相对简单的即时编译(JIT)器,只用了几千行代码,尽管我们对其没有报太大的希望,它还是将性能提升了两倍。这些JIT编译器可以进一步完善,从而提供更好的性能,但是我们认为这些工作可以在社区内部或围绕社区来做,随着Eclipse OMR项目的成熟,我们希望在这种类型的事情上能够做更多的工作。
\Ruby+OMR Technology Preview能够运行Rails应用,即便将Ruby+OMR JIT功能开启也可以,这证明了它的兼容性,其GitHub地址是https://github.com/rubyomr-preview/ruby。我们欢迎大家的反馈,所以尽可以下载并尝试一下!
\另外一个明显的样例是IBM JDK本身。J9开发团队已经开始从IBM JDK中提取Eclipse OMR组件,在这个过程中,推出了IBM JDK的Java 8版本。我们并没有在其他的分支上开展这项工作,在进行这项工作的同时,大的开发团队在持续开发和发布IBM JDK 8,带来了令人印象深刻的新特性和全面的性能提升。我们正在构建下一个版本的IBM JDK,同时还要顾及到Eclipse OMR项目所带来的变化。这对于我们来说,并不是学术练习:这关系到我们是如何构建自己的运行时的。
\如果其他的语言社区对Eclipse OMR组件能够给它们的运行时带来什么变化感兴趣的话,我们也期待针对其他的语言社区开展工作。

\

\\

InfoQ:有没有公司或社区已经针对OMR项目开展工作?能谈一下它的下一步规划吗?

\\

\

Mark Stoodley:目前,Eclipse OMR项目主要还是活跃在IBM的开发人员之间,这并不是因为我们不想让别人和我们一起工作!该项目依然处于初期阶段,这就意味着它还缺少好的文档和对新人的培训。这些也是我们非常想进行提升的领域。除了核心技术相关的提升并将所有相关的内容全部开放出来以外,我们也在构建文档和接触其他人。我们欢迎任何对它感兴趣的人下载该项目,地址是https:// github.com/eclipse/omr,即便只是告诉我们你想做什么都可以。
\我们目前正在为Ruby社区提交一些pull request,从而让社区考虑将OMR组件接受到下一个Ruby的主版本中。我们目前基于Ruby 2.2.5版本,可以参考https://github.com/rubyomr-preview/ruby,我们正在努力将这些补丁添加到Ruby的主分支中,同时还在将其重构为更小、更易管理的提交内容,这些提交内容会通过OMR实现特定的功能。
\但是,这只是已有的团队成员正在做的事情。我们欢迎任何想参与该技术的人,不管你是在做语言平台、与语言进行交互的工具、语言所运行的平台还是其他的框架(通过与不同的语言进行紧密集成,这些框架可能会从中受益)。我们目前确实处于先有鸡还是先有蛋的初始阶段,但是借助你们和其他人的帮助,我们将会进行扩展,并且会在越来越多的语言社区上开展工作,从而兑现承诺,交付可共享、可重用的组件来构建运行时环境。
\我期待在Eclipse OMR社区能够看到你们!

\

\\

在InfoQ之前的一篇文章中,我们曾经介绍过该项目的发布。

\\

查看英文原文:Q\u0026amp;A with Mark Stoodley, Architect of Eclipse OMR Toolkit for Creating Language Runtimes

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

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

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

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

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

  3. IBM推出创建语言运行时的工具包Eclipse OMR

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

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

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

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

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

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

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

  7. 在lomboz eclipse 3.3中配置tomcat7/8 server运行时环境遇到的问题

    今天看完了tomcat的视频,感觉离JSP又近了一步!   由于马士兵老师的视频已经有将近6年的时间了,在这段时间内好多软件版本都更新了很多了,自然我们不能完全按照视频中的步骤来做.今天我就遇到了在l ...

  8. 编译器设计-RunTime运行时环境

    编译器设计-RunTime运行时环境 Compiler Design - Run-Time Environment 作为源代码的程序仅仅是文本(代码.语句等)的集合,要使其活动,它需要在目标计算机上执 ...

  9. flink 运行一段时间 内存溢出_Flink之运行时环境

    Flink 运行时环境由两种类型进程组成,JobManager和TaskManager JobManager,也称为 master,用于协调分布式执行.负责调度任务,检查点,失败恢复等. TaskMa ...

最新文章

  1. 2021-春季学习-智能车技术创新与实践-Lesson 1
  2. 6.1的学习成果,主要是用到指向函数的指针
  3. 传说中的WCF:消息拦截与篡改
  4. 如何更改计算机性能,如何修改注册表优化电脑性能 修改注册表优化电脑性能方法...
  5. VTK:光标形状用法实战
  6. SQL Server 2008 安装过程中遇到“性能计数器注册表”..
  7. 索引 | ggplot2基础语法系列推文汇总
  8. String:字符串常量池
  9. 力扣-1. 两数之和
  10. fisco bcos应用开发(一) springboot报错 Error reading resource
  11. 20155213 实验三《敏捷开发与XP实践》实验报告
  12. 小米盒子投屏+android,使用小米盒子手机投屏电视看村晚
  13. java性能调优原因和因素
  14. 福利!H3CNE认证网络工程师GB0-191 考试试题库超详细解析-02。持续更新~~
  15. multienant oracle_OraCleen智能牙刷:您牙齿的高颜值智慧伙伴
  16. Oracle 12.2 Flex ASM安装RU后ASM、GIMR等资源未启动, 手动启动提示CRS-2549“it is not a valid candidate as per the place
  17. codeforces 69A. Young Physicist
  18. Conhost.exe是什么进程?为什么会启动运行?图文详解
  19. 数据库分库分表,分片配置轻松入门!
  20. oracle数据库之统计分析(方差、标准差、协方差)

热门文章

  1. 【前端圭臬】十三:AST ——代码重构利器
  2. ffmpeg+opencv实现将视频中的人物头像框选
  3. 如何用c语言做高精度计算原理,C语言羁绊之高精度乘法计算
  4. linux下查看mysql端口号和修改端口号方法
  5. AOP - 概念知识
  6. 什么是stdin、stdout?
  7. FB主页被下架,个人账号被封,申诉链接
  8. centos环境搭建pptp服务器
  9. samtools sort -@ 4 -t CB -O BAM -o $new $idsamtools排序原理过程
  10. 2019年最新PHP面试题