Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 如何生成ghci并将指针传递到它以后可以访问的位置?_Haskell_Process - Fatal编程技术网

Haskell 如何生成ghci并将指针传递到它以后可以访问的位置?

Haskell 如何生成ghci并将指针传递到它以后可以访问的位置?,haskell,process,Haskell,Process,在我的haskell程序中,我通过System.Process模块中的createProcess调用ghci。我想在进入永久循环之前在ghci中运行一些初始化代码,该循环获取用户输入并传递给ghci进行评估。其中一个值是aPtr a,它是使用c代码中的FFI创建的。另一个是从共享库导入的函数,它需要指针来完成所有有用的工作。我可以直接在ghci中“创建”这个函数,或者让ghci加载一个模块文件,但指针是关键问题 该指针实际上指向一个大型结构,并且是可变的。理想情况下,ghci应该能够随时访问内存

在我的haskell程序中,我通过System.Process模块中的
createProcess
调用ghci。我想在进入永久循环之前在ghci中运行一些初始化代码,该循环获取用户输入并传递给ghci进行评估。其中一个值是a
Ptr a
,它是使用c代码中的FFI创建的。另一个是从共享库导入的函数,它需要指针来完成所有有用的工作。我可以直接在ghci中“创建”这个函数,或者让ghci加载一个模块文件,但指针是关键问题

该指针实际上指向一个大型结构,并且是可变的。理想情况下,ghci应该能够随时访问内存。我不熟悉Linux进程,不知道在这种情况下是否可能。或者有没有更好的方法来达到同样的效果?(创建一个repl环境,其中包含其他辅助函数,可供用户交互使用)


我不喜欢编写自己的repl代码,也不喜欢使用hint。

我可能有点不太可能,但我的理解是,在现代系统中,没有可行的方法在进程之间传递和使用指针,因为每个get都有自己的[虚拟化]地址空间。我认为您需要设置一个通信通道,在该通道中,读/写请求在内存所有者内传输和执行。如果两个进程都不需要访问数据结构,您可以序列化内容吗?您是否研究过这样的问题:不生成不同的进程?您可以创建一个共享内存区域,操作系统将确保两个进程的虚拟内存空间将该区域映射到相同的物理内存。如果你能说服C代码接受一个指针并在那里初始化自己,而不是让C用malloc创建指针并将其返回给你,这可能是一个可行的解决方案,但是你能通过
:l MyFancyModule
ptr@ryachza吗最初我想用一种相对简单的方式寻找一些功能,比如制表符完成,这就是为什么我要调用ghci。对于ptr问题,可能GHCAPI(或提示)是一种解决方法。我会详细调查医生的。@amalloy很遗憾我不能。haskell程序实际上就像原始c程序的“语言插件”。它将被编译成一个共享库,并公开一个“插件”结构,定义init、prompt、run、,等等。C程序将在运行时打开它,并在某个时候调用这些函数。我可能有点不对劲,但我的理解是,在现代系统中,没有可行的方法在进程之间传递和使用指针,因为每个进程都有自己的[虚拟化]地址空间。我认为您需要设置一个通信通道,在该通道中,读/写请求在内存所有者内传输和执行。如果两个进程都不需要访问数据结构,您可以序列化内容吗?您是否研究过这样的问题:不生成不同的进程?您可以创建一个共享内存区域,操作系统将确保两个进程的虚拟内存空间将该区域映射到相同的物理内存。如果你能说服C代码接受一个指针并在那里初始化自己,而不是让C用malloc创建指针并将其返回给你,这可能是一个可行的解决方案,但是你能通过
:l MyFancyModule
ptr@ryachza吗最初我想用一种相对简单的方式寻找一些功能,比如制表符完成,这就是为什么我要调用ghci。对于ptr问题,可能GHCAPI(或提示)是一种解决方法。我会详细调查医生的。@amalloy很遗憾我不能。haskell程序实际上就像原始c程序的“语言插件”。它将被编译成一个共享库,并公开一个“插件”结构,定义init、prompt、run等函数。C程序将在运行时
dlopen
它,并在某个时候调用这些函数。