Mar*_*ton 11
我讨论的时间有点晚了,但我现在正在写Ruby和Haskell之间的桥梁.它位于http://github.com/mwotton/Hubris-它是一个在C级工作的绑定.尽管如此,仍处于发展的初期阶段.
GHC 6.12.1支持在Linux上构建动态库.尝试类似的东西:
{-# LANGUAGE ForeignFunctionInterface #-}
module Example where
import Foreign.C.Types
fibonacci :: Int -> Int
fibonacci n = fibs !! n
    where fibs = 0 : 1 : zipWith (+) fibs (tail fibs)
fibonacci_hs :: CInt -> CInt
fibonacci_hs = fromIntegral . fibonacci . fromIntegral
foreign export ccall fibonacci_hs :: CInt -> CInt
#include <stdlib.h>
#include "HsFFI.h"
void
example_init (void)
{
  hs_init (NULL, NULL);
}
void
example_exit (void)
{
  hs_exit ();
}
require 'dl'
require 'dl/import'
module Example
    extend DL::Importable
    dlload "./libffi-example.so"
    extern "void example_init()"
    extern "void example_exit()"
    extern "int fibonacci_hs(int)"
end
Example.example_init
1.upto( 40 ) do | x |
    puts "#{ x } -> #{ Example.fibonacci_hs x }\n"
end
Example.example_exit
GHC=ghc-6.12.1
libffi-example.so: Example.o wrapper.o Example_stub.o
    $(GHC) -o $@ -shared -dynamic -fPIC $^ -lHSrts-ghc6.12.1
Example_stub.c Example_stub.h Example.o: Example.hs
    $(GHC) -c -dynamic -fPIC Example.hs
Example_stub.o: Example_stub.c
    $(GHC) -c -dynamic -fPIC Example_stub.c
wrapper.o: wrapper.c Example_stub.h
    $(GHC) -c -dynamic -fPIC wrapper.c
clean:
    rm -f *.hi *.o *_stub.[ch] *.so
make
ruby script.rb
我以前没有看过它,但它是可能的.
libruby.你的主要可执行文件将用Haskell编写,它将调用ruby_init()和相关的函数,以便在进程中运行Ruby解释器.但这确实允许您运行任意Ruby代码.hs_init(),并且只能访问foreign exported函数.您需要编写胶水代码,其中一些在C中,以获得这两个选项中的任何一个.
我不知道你的要求是什么,但这就是我想要的 - 它更容易.