写点什么

MagLev:Gemstone 基于 Smalltalk 虚拟机构建 Ruby 运行时

  • 2008-06-02
  • 本文字数:2748 字

    阅读完需:约 9 分钟

OODB 厂商 Gemstone 正致力于开发一个名为“MagLev”的Ruby 虚拟机。InfoQ 对 MagLev的产品经理 Bob Walker 进行了访问来获得项目背后的细节, Avi Bryant 也参与到了项目中来。首先,我们和Bob Walker进行了交流。

InfoQ: 在虚拟机级别,Gemstone/S 和 MagLev 有什么联系?

毫无疑问,MagLev 和 Gemstone/S 共享了大量的代码和功能,但是它们是独立的产品,包括在虚拟机级别。MagLev 虚拟机使用的大量字节码和算法都是 Ruby 独有的。然而,它当然还是保留了可以运行 Smalltalk 代码的能力。

InfoQ: 有多少人参与这个项目?目前有时间方面的计划吗?

目前有 8 个至少是兼职的人在开发 MagLev。我现在的确还说不出时间点来,但是在 RailsConf 上我会说一些在时间方面的计划。

InfoQ: MagLev 由什么语言编写?是一种“倒退”吗?

我们的目标和 Rubinius 项目类似:支持由 Ruby 实现的标准库中的全部方法,除了一些性能敏感的部分。虚拟机是由 C 编写的。

InfoQ: 是为虚拟机生成字节码还是为其他的什么方式?

是的,我们为虚拟机生成字节码,可以为多种架构产生不同的原生代码。

InfoQ: 你用什么来解析 Ruby?(是纯 Ruby 的 ruby_parser 还是别的什么自制的解析器?)

我们有能力借鉴众多解析器来自行开发用于编译的和一个解析器的内部实现。我们尚未决定在最终发布时采用哪个解析器。

InfoQ: 除了 Ruby 标准,你们有从 Rubinius 项目中借鉴什么吗?

我正在通过 Rubinius 的 bm 脚本和测试来手机不同 Ruby 实现的性能指标。我还借鉴了 MSpec 的实现,包括脚本和测试,来帮助我们确保 MagLev 在 API 级别可以和 Ruby 标准兼容。这也就是说,我也在查看其他的 Ruby 实现。
我们真心希望最终可以和 Rubinius 尽可能多的共享标准库代码。

InfoQ: 你对于 1.0 版本在性能方面的预期是什么?

相对于单纯的性能来说我们更关注与可伸缩性。当然我们相信和其他的实现相比 MagLev 在性能方面还是有竞争力的,我们还相信我们的可伸缩持久化架构将成为最大的卖点。

InfoQ: 说一说 MagLev 的线程?是原生 1:1 线程、m:n 模型还是普通用户空间线程?

每一个独立的虚拟机是一个普通用户空间线程。然而,多虚拟机之间可以写协同并发访问同一对象,所以实际上最终的效果和 m:n 模型类似。

InfoQ: 考虑到你将会参加 RailsConf,可以说说 Rails 兼容性的目标吗?或者其他的什么(比如 merb)?

这真是个有趣的问题,我们也投入了大量的精力在上面。我们当然希望 MagLev 可以兼容 Rails。但 是这个不容易做到,因为我们已经有所了解在实现过程中有太多太多潜在的(和实际存在的)陷阱。在支持 Rails 以前我们必须先完全支持 Ruby。我们也关 注其他的替代品,我们希望可以支持所有用 Ruby 编写的东西。至于先做什么后做什么,一个很主要的参考就是我们从 Ruby 社区收集到的热点和反馈。

InfoQ: 你计划让 ActiveRecord 在 OODB 下工作,还是用户定制或者使用 MagLev 特定的 API?

让 ActiveRecord 在 MagLev DB 下工作是一个十分令人期待的目标,尽管部分 ActiveRecord 的 API 假定对象状态存储在基于 SQL 的 RDB 中。这可能会导致耦合。在任何事件 中,任何在 ActiveRecord 之下的 API 可能对于不希望使用 ActiveRecord 的用户都是可用的。对于我来说,现在过多的谈论这个话题为时 尚早,我希望社区可以让我们知道哪种方法是最有益的。

InfoQ: 你计划 MagLev 是作为标准 Ruby 的一个简易替换,还是它将使用某种类似 Smalltalk 风格基于映像的部署方式?

对于 MagLev 来说绝对是作为简易替换的。但是对于那些更喜欢基于映像部署方法的人,MagLev 同时也是支持的,但并不强迫使用。

InfoQ: Ruby 代码进程可以被持久化成一个映像吗?

简言之,是的。例如,GLASS 系列产品目前可以让你将出错的进程保存到仓库中,然后迟些时候将它们放入一个本地的虚拟机中进行调试。没理由 Ruby 不支持。

InfoQ: 你将会和 GLASS 系列产品采用相似的授权模型吗?

我们查看了许多不同的模型。我可以说(但不保证)在 MagLev 上我们会做类似的事情。

InfoQ: 目前有用于 MagLev 的工具吗?你是否在寻求 Ruby IDE 的支持以作为前端(例如用于调试 GUI 等等)?

当然我们有一个 IRB 的 shell,和一个类似 ruby 的命令用于在 MagLev 上运行 Ruby 代码。我希望看到 IDE 插件,但是我也不敢猜想何时 GUI 工具将会实现。
需 要提到的是,MagLev 团队计划要参与并支持 Ruby 社区,我们希望社区成员可以看到一些令人感兴趣的理由来贡献 MagLev。我们在 GemStone 的核心竞争力是动态语言、可伸缩虚拟机和原生语言对象持久化——其他人中有很多在工具和 UI 方面十分擅长,我们欢迎他们对 MagLev 做出贡献。

InfoQ: 在 MagLev 上的 Ruby 代码有机会能和 Smalltalk 代码或者对象进行交互吗?

MagLev 虚拟机不但支持 Ruby,而且完美的支持 Smalltalk。我得说能够做到这样非常棒,但是在我们在这个方向上深入以前,我们要看看这是否是一个需求强烈的功能且对社区有用。

Gemstone开源技术上已经深耕一段时间了——例如为在Gemstone/S上运行 Seaside web 框架提供了解决方案。这个叫做 GLASS——GemStone、Linux、Apache、Seaside 和 Smalltalk 。GLASS 是免费的,带有一个数据库,容量为4 GB,同时也有其他的授权方式

Seaside 由Avi Bryant所创建,作为重用 Smalltalk 虚拟机用于 Ruby 这个想法的推广者之一(参见他在这个话题的文章《Turtles all the way down》)。在一个视频采访中(很快将由InfoQ 发布),Avi Bryant 将会给出更多关于他致力于 Seaside DabbleDB 的信息,以及他在 GemStone 的工作和MagLev。对于这个项目 Avi 说道:

我已游说 Smalltalk 提供商多年来使他们的技术被 Ruby 社区所熟知,现在令人激动的是它终于实 现了。我们还有不到三个月就可以完成 MagLev 的开发,但我已经被结果深深的鼓舞,而且我们将会在 RailsConf 上展示一些很棒的演示实例。恐怕在 那之前我还不能说的太深入,来看我们的讲座吧,这样会了解到更多的。

在一篇最近的 blog 帖子中, Avi 给出了一个关于像 Gemstone 之类的 OODB 的优势介绍, 在其中比较了他们的那些基于 Rails 构建的接解决方案,使用了 memcachedb 和其他相似的技术:

关于 Gemstone,凑巧架构完全相同:有一个单独的存储引擎(名叫“stone”),一个在每个服 务器上的内存缓存(叫做“共享页面缓存”),还有一些 Smalltalk 虚拟机的工作进程(“gems”)。gems 用来处理请求并执行代码,它们将对象 贮存在页面缓存中以加速,并放入 stone 中以持久化。区别在于,在 Gemstone 中,它们的自底向上被设计的尽可能的迅捷和无缝。

注意:这篇 blog 帖子更为深入,并且给出了一个解决方案和其他方法概览。

GemStone 将会在 5 月份的 RailsConf 2008 上更为详细的介绍 MagLev。

查看英文原文: MagLev: Gemstone builds Ruby runtime based on Smalltalk VM

2008-06-02 20:301301
用户头像

发布了 80 篇内容, 共 22.2 次阅读, 收获喜欢 5 次。

关注

评论

发布
暂无评论
发现更多内容

二维容器进行图的DFS搜索和BFS搜索-C++STL模板

清风莫追

c++ 算法 9月日更 9月月更

【Web前端】怎样用记事本写一个简单的网页-html

清风莫追

9月月更

iview提供的控件tree

zxhtom

9月月更

易观千帆 | 2022年7月宁波市手机银行应用活跃人数榜单

易观分析

手机银行 宁波

线上问题如何复盘

老张

线上故障 问题复盘

为什么这么多品牌迫切想要改变Logo?

Jackpop

【数独 2】候选数法解数独谜题-挖掘更深的信息-C++实现

清风莫追

9月月更

远程TS全栈学习+远程全职工作+远程高质量外包=3R教室

pincman

node.js typescript react.js 远程工作 nestjs

C++学习------cctype头文件的作用与源码学习

桑榆

c++ 9月月更

Ribbon源码分析之@LoadBalanced与LoadBalancerClient

急需上岸的小谢

9月月更

开源IM项目OpenIM单聊及万人群压测报告

Geek_1ef48b

计网复习一,计算机网络原理概述

前端小刘不怕牛牛

计算机网络 计算机基础 HTTP 9月月更

一名中年码农转型成远程工作及远程全栈教学创业者的故事

pincman

node.js typescript react.js 远程工作 nestjs

学 Go,最常用的技能是什么?打日志

梦想橡皮擦

Python 9月月更

金融网络安全体系建设

阿泽🧸

9月月更 安全体系建设

Java进阶(二)文件读操作

No Silver Bullet

Java 9月月更 文件读操作

分享一套自己制作的Nestjs实战教程

pincman

node.js typescript nestjs

k8s自定义controller三部曲之二:自动生成代码

程序员欣宸

Kubernetes k8s 9月月更

leetcode 21. Merge Two Sorted Lists 合并两个有序链表(简单)

okokabcd

LeetCode 数据结构与算法

易观之星 | “2022年度用户推荐数字应用”投票通道开启

易观分析

易观

云原生(三十四) | Kubernetes篇之平台存储系统实战

Lansonli

云原生 9月月更

[教你做小游戏] 只用几行原生JS,写一个函数,播放音效、播放BGM、切换BGM

HullQin

CSS JavaScript html 前端 9月月更

如何正确理解Java领域中的锁机制,我们一般需要掌握哪些理论知识?

PivotalCloud

上车上车,快速搞懂Redis 过期策略和内存淘汰策略

知识浅谈

redis 过期策略 9月月更

微服务为什么需要混沌工程

穿过生命散发芬芳

混沌工程 9月月更

高颜值!程序员专属浏览器

Jackpop

中国智能网联汽车信息安全分析2022案例征集

易观分析

汽车 案例征集 智联网

SpringCloud 配置中心(Nacos)的简单使用

nacos SpringCloud 配置中心 9月月更

2022-09-02:以下go语言代码输出什么?A:9;B:11;C:编译错误;D:不确定

福大大架构师每日一题

golang 福大大 选择题

Java进阶(三)Java安全通信:HTTPS与SSL应用配置

No Silver Bullet

https SSL证书 9月月更

什么是 SAP Business Function

汪子熙

SAP abap Netweaver 业务流程驱动 9月月更

MagLev:Gemstone基于Smalltalk虚拟机构建Ruby运行时_Ruby_Werner Schuster_InfoQ精选文章