forkIO
在Haskell中编程时,我习惯于依赖GHC 用于可移植轻量级线程.
什么是C的等效库,可以提供相同的可扩展性和易用性?
具体来说,我需要C等价物至少以下两个功能.
forkIO :: IO () -> IO ThreadId
killThread :: ThreadId -> IO ()
Run Code Online (Sandbox Code Playgroud)
我假设我的应用程序,如果线程只打开阻塞操作而不是被强制挂起就足够了,因为所有线程都经常阻塞网络IO,我只使用splice
系统调用要求Linux内核在套接字之间推送数据.
更新
本文比较了数字和表格
结果有利于Protothreads.由于我没有使用过任何其他图书馆,我很乐意听到任何使用/开发此类图书馆的人.
我已成功PortFusion
使用全新的64位GHC 7.6.1 Release Candidate 1 for Windows构建.
使用来自http://www.drangon.org/mingw的新下载的本机64位 mingw
二进制文件,该软件包易于安装(在一系列不相关的小修复之后)作为一个简单的network
CC=mingw64/bin/gcc cabal install
Run Code Online (Sandbox Code Playgroud)
LLVM
同一网站上还有一个工具包.
现在我想知道如何在编译期间GHC
使用特定的LLVM
二进制文件.
它是否像上面那样简单和类似:
#v??v
LLVM=????????? ghc -W -O2 -fllvm -optlo-O3 --make src/Main.hs
LLVM=????????? cabal install PortFusion -f llvm #¹
#^??^
Run Code Online (Sandbox Code Playgroud)
¹定义llvm
标志的PortFusion.cabal中的相关行
还是完全不同?
对于我正在编写的工具(http://hackage.haskell.org/package/explore),我需要一种在运行时读取haskell函数定义的方法,将它们应用于我的工具中的值并检索其应用程序的结果.
任何人都可以使用GHC(6.10.4或6.12.1)API给我一个非常基本的例子吗?
要在运行时从文件中读取的示例函数定义:
f x = 10**(4/1102*x - 1)
Run Code Online (Sandbox Code Playgroud)
预期的计划产出
--mapM_ print $ map f [428, 410, 389]
3.577165388142748
3.077536885227335
2.5821307011665815
Run Code Online (Sandbox Code Playgroud)
!! UPDATE!
我发布了一个快速回答,但它在执行目录中创建了一个目标文件,任何提示都可以避免这种情况并避免使用所有文件IO.我还希望看到一个在内存中执行所有操作的版本:例如,用户在GUI中提供函数定义,编译/评估不会创建任何目标文件.
如何在parallel.foreach循环范围之外增加一个整数值?什么是同步访问并行循环外的对象的最轻的方法?
var count = 0;
Parallel.ForEach(collection, item =>
{
action(item);
// increment count??
}
Run Code Online (Sandbox Code Playgroud) 如何删除动态依赖libgmp
并从中继续:
linux-vdso.so.1 => (0x00007fffdccb1000)
libgmp.so.10 => /usr/lib/x86_64-linux-gnu/libgmp.so.10 (0x00007fb01afc1000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fb01acc7000)
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007fb01aabe000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fb01a8ba000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fb01a69d000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fb01a2df000)
/lib64/ld-linux-x86-64.so.2 (0x00007fb01b249000)
Run Code Online (Sandbox Code Playgroud)
对此(目前需要):
linux-vdso.so.1 => (0x00007fffdccb1000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fb01acc7000)
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007fb01aabe000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fb01a8ba000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fb01a69d000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fb01a2df000)
/lib64/ld-linux-x86-64.so.2 (0x00007fb01b249000)
Run Code Online (Sandbox Code Playgroud)
以干净,可移植的方式适用于所有GNU/Linux发行版(而不是搞乱BSD(包括OS X))?
在分发针对多个GNU/Linux发行版的单个Haskell二进制文件时,您是否看到任何其他可能导致当前所需列表中存在问题的依赖项?
笔记:
libgmp.a
不起作用(如何有选择地将某些系统库静态链接到Haskell程序二进制文件?)libgmp
仍然在ldd
输出中列出.F#(至少在Visual Studio 2012中)具有Control.Observable
和Control.Event
.
我还想知道通过.NET的反应式扩展所实现的.NET IEnumerable
/ IObservable
对偶性的Haskell模块/包/功能.
我怎样才能__TIMESTAMP__
在ISO 8601:2004中取代?
__TIMESTAMP__
Sat Jul 6 02:50:06 2013
Run Code Online (Sandbox Code Playgroud)
VS
__TIMESTAMP_ISO__
2013-07-06T00:50:06Z
Run Code Online (Sandbox Code Playgroud) 当我安装vector
时:
cabal install vector
Run Code Online (Sandbox Code Playgroud)
我得到了很多SpecConstr
限制警告,如果我可以指定,它会消失-fspec-constr-count=SOMETHING-HIGHER
.
将
cabal install vector -fspec-constr-count=HIGH
Run Code Online (Sandbox Code Playgroud)
工作?
如果X
依赖vector
,是否有一种方式可以说X.cabal
我vector
最好依赖(如果X
还没有安装)-fpsec-constr-count=HIGH
?
是vector
仍然保持还是有现在一个更值得推荐的选择吗?
我正在为游戏制作一个简单的堆栈,玩家可以移动编号的棋子,以跟踪他们与完成收集胜利手段的距离.
目前我使用jQuery UI的可拖动和可拖放.它很适合轻松启动,但一次只能移动一件:http://cssdeck.com/labs/cowmmudd/4.
canvas
但是我想要像谷歌那样实现相同的目标:http://mrdoob.com/projects/chromeexperiments/google-gravity/)有人可以使用他们所知道的最好的JavaScript物理库提供控制普通,非画布HTML元素的放置和碰撞的简约示例吗?
haskell ×7
ghc ×5
c ×2
cabal ×2
concurrency ×2
c# ×1
clang ×1
compilation ×1
evaluation ×1
events ×1
f# ×1
game-physics ×1
gcc ×1
ghc-api ×1
html5 ×1
icc ×1
javascript ×1
llvm ×1
locking ×1
networking ×1
physics ×1
runtime ×1
vector ×1