草庐IT

zeromq4-haskell

全部标签

c++ - 如何在haskell中封装对象的构造函数和析构函数

我有Haskell代码,它需要与C库接口(interface),有点像这样://MyObject.htypedefstructMyObject*MyObject;MyObjectnewMyObject(void);voidmyObjectDoStuff(MyObjectmyObject);//...voidfreeMyObject(MyObjectmyObject);原始FFI代码使用unsafePerformIO将所有这些函数包装为纯函数。这导致了错误和不一致,因为操作的顺序未定义。我正在寻找的是一种在Haskell中处理对象的通用方法,而无需求助于IO中的所有操作。最好是我可以做类

python - 从另一个线程中止 zeromq recv() 或 poll() - 立即且无需等待超时

我在许多配置中使用Python和C++中的ZeroMQ,我想知道从另一个中止recv()或poll()的最优雅的方法是什么线程(例如,在受控程序终止的情况下,但如果您想在不需要终止套接字的情况下停止监听)。对比this问题我不仅想避免不定式等待,还想从recv()或poll()返回立即。我知道我可以像这样提供一个timeout并中止recv():poller=zmq.Poller()poller.register(socket,zmq.POLLIN)while_running:ifpoller.poll(timeout=100)==[]:#maybehandleunwantedtimo

c++ - 使用 ffi 将 C++ 数据类型导入 haskell

我正在为c++库编写一个haskell包装器,尽管我可以将函数从库导入到我的haskell程序,但我不知道如何导入c++数据类型。例如,我有一个函数将video::E_DRIVER_TYPEEDT_OPENGL类型作为参数,定义在some.h文件中,正如我之前所说,我知道如何使用ffi导入函数国外进口ccall...使用适当的编译器损坏的函数名但我无法从haskell调用该函数,因为我不知道如何导入/使用这种特定的视频驱动程序数据类型。现在,我知道您可以在Haskell中创建类型,但我仍然需要一个起点来定义类型,无论C++表示是什么。(此时我很困惑)如有任何帮助,我将不胜感激!谢谢

c++ - C++ 中是否有类似 Haskell Data.Sequence 的东西?

是否有任何C++库实现了类似HaskellData.Sequence容器的东西?我最感兴趣的是:维护元素顺序(它们被插入的顺序)。O(logn)通过索引访问。又名operator[](size_typepos)。O(logn)在中间插入/删除(通过索引)。 最佳答案 在我看来,要实现*这样的数据结构,您需要一棵树来存储每个节点中的元素数量。它允许在O(log(N))中插入和检索,并且只需通过计算树中给定节点“左侧”的元素数量来维护索引。*我在这里回答的问题可能略有不同,实际问题是要求推荐一个库,这在SO上显然是题外话。这棵树的一个节

c++ - 通过 FFI block 从 Haskell 调用共享库,而从 C 程序链接时则不会

我正在尝试通过Haskell应用程序连接BaslerUSB3相机,但我遇到了一些困难。该相机带有一个C++库,使其相当简单。以下代码可用于获取相机源:extern"C"{voidbasler_init(){PylonAutoInitTermpylon;CInstantCameracamera(CTlFactory::GetInstance().CreateFirstDevice());camera.RegisterConfiguration((CConfigurationEventHandler*)NULL,RegistrationMode_ReplaceAll,Cleanup_Non

c++ - ZeroMQ REQ/REP 如何处理多个客户端?

我开始将ZeroMQ用于IPC并制作了一个简单的echo-client/server,我对一件事感到惊讶。这是C++代码(使用zmq.hpp和zmq_addon.hpp)。服务器:zmq::context_tcontext(1);zmq::socket_tsocket(context,ZMQ_REP);socket.bind("ipc:///tmp/machine-1");while(1){zmq::multipart_tm;m.recv(socket);inti=m.poptyp();i++;m.addtyp(i);m.send(socket);}客户:zmq::context_tc

c++ - 使用 C++ 模板实现 Haskell 的 `map` 函数的问题

我喜欢使用Haskell,但不得不使用C++来完成学校作业。我正在为C++编写自己的库,它模拟Haskell的Prelude函数,因此如果我愿意,我可以用C++编写更简洁、更实用的风格(repoonGitHub)。我遇到的一个问题是实现类似map的功能对列表进行操作。在Haskell中,String相当于[Char],因此您可以在采用列表的函数中使用字符串。在C++中,std::string不与std::vector是一回事,所以我必须编写多个版本的函数来取std::string或std::vector.这适用于像filter这样的功能或tail因为它们的输入和输出是同一类型。但是用m

c++ - haskell FFI : Interfacing with simple C++?

就我目前所读的内容而言,将FFI与C++结合使用非常难以实现。最大的原因之一似乎是将C++对象转换为Haskell。我现在的问题是我没有任何C经验,但有几年C++经验,而且我更喜欢OOP。因此,自然而然地想从C++中受益。那么我可以编写专供HaskellFFI使用的C++程序来解决这些问题吗?C++可以在幕后做任何事情,但API会像C一样,即我不交换对象,没有重载的顶级函数等等。有什么需要注意的陷阱吗?(将我的项目与您可能熟悉的项目进行比较:考虑使用SciPy的Weave来加速Python代码。) 最佳答案 是的,如果您在C++代码

c++ - ZeroC ICE 对比 0MQ/ZeroMQ 对比 Crossroads IO 对比开源 DDS

ZeroCICE与0MQ相比如何?我知道0MQ/Crossroads和DDS非常相似,但似乎无法弄清楚ICE的用武之地。我需要快速实现一个系统,将实时市场数据从C++卸载到C#,作为我项目的第一阶段。下一阶段将是实现具有底层Pub/Sub设计的基于事件的架构。我愿意使用TCP..但系统目前正在单个24核服务器上运行..所以IPC选项会很好。据我了解,ICE只是TCP,而DDS和0mq有一个IPC选项。目前,我倾向于将Protobuf与ICE或CrossroadsIO结合使用。从OpenSpliceDDS网站关闭。我对各种选项进行了大量研究,最初考虑的是OpenMPI+boost:mpi

使用Haskell查找置换

我试图弄清楚如何从集合{排列[1..n]}中找到偶数排列。我之前曾在另一个论坛上问这个问题,并得到一个有效的答案,即代码是:ImportData.List--numberofinversionsinapermutationinversionsas=sum$mapgo(tailsas)wherego[]=0go(x:xs)=length$filter(我了解代码中的最后一行:alternatingn=[p|p。那就是p集合{permutations[1..n]}使它们甚至是排列。功能evenPerm我认为我也明白。这只是集合的偶数元素{inversionas}。我真正不理解它如何工作的事情是反转