我正在尝试创建一个用Go程序编写的静态对象与C程序(比如内核模块或其他东西).
我已经找到了关于从Go调用C函数的文档,但是我没有找到关于如何走另一条道路的文档.我发现它是可能的,但很复杂.
这是我发现的:
有任何人对此有经验吗?简而言之,我正在尝试创建一个完全用Go编写的PAM模块.
我正在尝试使用一些Haskell代码编译一些Rust代码.我有一个测试系统设置了一个文件,Fibonacci.hs其中一个函数在Haskell中计算斐波纳契数,并fibonacci_hs通过Haskell的FFI 导出函数(如下所示:https://github.com/nh2/haskell-from-python,尽管我将在底部复制并粘贴,并且wrapper.c已经定义了要导出的函数,以便初始化和退出Haskell的RTS.
代码如下所示:
{- Fibonacci.hs -}
{-# LANGUAGE ForeignFunctionInterface #-}
module Fibonacci 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
Run Code Online (Sandbox Code Playgroud)
// wrapper.c
#include <stdlib.h>
#include "HsFFI.h"
void
example_init (void)
{
hs_init (NULL, …Run Code Online (Sandbox Code Playgroud) 根据 http://gallery.rcpp.org/articles/r-function-from-c++,Rcpp 允许用户从C++调用R函数.Fortran中有类似的东西,以便人们可以在Fortran代码中调用R函数吗?
我正在考虑将python嵌入fortran90的选项,以便为我现有的fortran90代码添加python功能.我知道可以通过使用来自numpy的f2py使用fortran90扩展python来反过来做到这一点.但是,我想在fortran中保留我的超级优化主循环并添加python来执行一些额外的任务/评估进一步的开发,然后才能在fortran中完成它,并且还可以简化代码维护.我正在寻找以下问题的答案:
1)是否存在已经存在的库,我可以将python嵌入到fortran中?(我知道f2py并且它反过来了)2)我们如何处理从fortran到python并返回的数据传输?3)我们如何实现回调功能?(让我稍微描述一下场景....我在Fortran中有我的main_fortran程序,在python中调用Func1_Python模块.现在,从这个Func1_Python,我想调用另一个函数...在Fortran中说Func2_Fortran)4)什么在性能方面将python的解释器嵌入到fortran中的影响......就像加载时间,运行时间,发送数据(双精度的大数组)等.
非常感谢您的帮助!
Edit1:我想通过添加一些关于我正在做的工作的更多信息来设置正确的讨论方向.我是科学计算的东西.因此,我会在双精度和浮点运算中对大型数组/矩阵进行大量工作.因此,除了fortran之外,很少有其他选择可以为我做这项工作.我想将python包含到我的代码中的原因是我可以使用NumPy在必要时进行一些基本计算,并以最小的努力扩展代码的功能.例如,我可以使用几个库来链接python和其他一些包(比如使用PyFoam库的OpenFoam).
我试图让以下代码工作:
sample_hs :: CInt -> (CInt -> CInt)
sample_hs x = (x+)
foreign export ccall sample_hs :: CInt -> (CInt -> CInt)
Run Code Online (Sandbox Code Playgroud)
我希望能够在c中做这样的事情:
pf = sample_hs(2);
result = pf(3); //Should be 5;
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试这样做时,我收到一条错误消息:
错误:函数'sample_hs'的参数太少
我猜这个语言之间的接口不起作用我怎么想.有没有办法做我想做的事情?