BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

使用Haskell和Hubris加强Ruby

| 作者 Sebastien Auvray 关注 0 他的粉丝 ,译者 杨晨 关注 0 他的粉丝 发布于 2009年9月2日. 估计阅读时间: 2 分钟 | Google、Facebook、Pinterest、阿里、腾讯 等顶尖技术团队的上百个可供参考的架构实例!

在Ruby或者Rails应用中嵌入C代码是解决性能瓶颈的办法之一,RubyInline大大简化了这个过程。Ruby社区也紧紧地和其他的函数语言社区联系在一起,包括Erlang、Caml和Haskell:Erlectricity已经成为和Erlang连接的纽带,而rocaml则可以与Objective Caml进行交互。Apache的Thrift则是以另外一种方式(通过PRC和序列化格式)与其他语言交互。

Mark Wotton编写了Hubris,使得在Ruby中调用Haskell代码成为可能。你只需要安装Haskell平台所带的ghc来兼容jhc(John的Haskell编译器),不过你必须注意的是,jhc只能运行在Linux或者Mac平台下。

一旦你有这些需求,你需要首先编写一个Haskell文件,在自定义的函数处添加额外的调用导出命令,例如Test.hs

fibonacci :: Int -> Int
fibonacci n = fibs !! n
  where fibs = 0 : 1 : zipWith (+) fibs (tail fibs)

然后你需要调用jhc_builder.sh Test.hs来创建动态库(libdynhs.so)。
接下来你可以放心大胆地编写Ruby代码,并且使用Ruby/DL加载动态库调用导出的函数了。

require 'dl/import'
 
module HaskyPants
  extend DL::Importable
  dlload "./libdynhs.so"
  extern "int fibonacci_hs(int)"
end
 
puts HaskyPants.fibonacci_hs(12)

Mark将会在九月份举办的rorosyd做一个关于Hubris的讲座。尽管只是初步意向,但是这个讲座肯定会吸引一些Haskell的用户。

查看英文原文:Empower Your Ruby With Haskell And Hubris

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT