在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 -\u0026gt; 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的用户。
\
借助Hubris可以在Ruby中调用Haskell代码以提高性能。通过编写Haskell文件并使用特定命令导出函数,最终通过Ruby/DL加载动态库实现跨语言调用。此方法适用于希望突破Ruby性能限制的应用。

被折叠的 条评论
为什么被折叠?



