我正在构建一个包含两个组件的应用程序 - 用Haskell编写的服务器和用Qt(C++)编写的客户端.我正在使用节俭来传达它们,我想知道它为什么这么慢.
我进行了性能测试,这是我机器上的结果
C++ server and C++ client:
Sending 100 pings - 13.37 ms
Transfering 1000000 size vector - 433.58 ms
Recieved: 3906.25 kB
Transfering 100000 items from server - 1090.19 ms
Transfering 100000 items to server - 631.98 ms
Haskell server and C++ client:
Sending 100 pings 3959.97 ms
Transfering 1000000 size vector - 12481.40 ms
Recieved: 3906.25 kB
Transfering 100000 items from server - 26066.80 ms
Transfering 100000 items to server - 1805.44 ms
Run Code Online (Sandbox Code Playgroud)
为什么Haskell在这个测试中这么慢?如何提高性能?
这是文件: …
我正在尝试实现一个数据结构,如果我使用无穷大进行数字比较,那就简单了.请注意,这不是maxBound/minBound,因为值可以<= maxbound,但所有值都是<infinity.
没希望?
介绍
以下代码显示使用runhaskellHaskell Garbage Collector时释放内存,何时a不再使用.它导致核心转储,同时释放变量a- 为了一个目的,检查行为 - a已经nullFunPtr作为终结器.
module Main where
import Foreign.Ptr
import Foreign.ForeignPtr
main :: IO ()
main = do
a <- newForeignPtr nullFunPtr nullPtr
putStrLn "Hello World"
Run Code Online (Sandbox Code Playgroud)
问题
在ghci中运行相同时,它不会释放内存.如何强制ghci释放不再使用的变量?
$ ghci
> import Foreign.Ptr
> import Foreign.ForeignPtr
> import System.Mem
> a <- newForeignPtr nullFunPtr nullPtr
> a <- return () -- rebinding variable a to show gc that I'm no longer using it
> performGC
> -- did …Run Code Online (Sandbox Code Playgroud) 什么是最好的(在简单的使用和性能方面)C++/C++ 11库可以简化如下的公式?
(a < 0 && b > 0) || (a < 0 && c > 0) || (a < 0 && c > 1)
Run Code Online (Sandbox Code Playgroud)
到(例如)
a < 0 && (b > 0 || c > 0)
Run Code Online (Sandbox Code Playgroud)
我认为解释一件事是非常重要的(因为我看到这个问题被误解了).
我不想简化C/C++表达式 - 我知道,编译器可以实现它.
我正在制作一个图形处理工具.在图形的边缘,有让关于其顶点某些情况下(比如顶点是a,b,c和这些条件都一样a<b,b>0等等-请注意,这些条件不表示为"弦",他们可以是任何功能或图书馆电话).在处理过程中,我正在收集表达式,在进一步的图形处理之前,我想简化它们.
条件和表达式将在运行时创建.
我希望能够向该库输入一些表达式,例如:
[...]
a = new Variable();
b = new Variable();
expr1 = lib.addExpr(a,0, lib.LESS);
expr2 = lib.addExpr(b,0, lib.MORE);
expr3 = lib.addExpr(expr1, expr2, lib.AND);
[...]
cout << lib.solve(exprn).getConditionsOf(a); …Run Code Online (Sandbox Code Playgroud) 我需要为函数编写一个包装器.其目的是缓存结果以及可能的函数异常.它应该如下工作:在第一次执行期间,它应该执行函数并存储函数返回的结果(或异常).在下次执行期间,它应返回先前存储的结果或重新抛出捕获的异常.
问题是,我想存储异常类型.所以基本上我想捕获每种类型的异常,并在将来重新抛出它而不会丢失它的类型.
我正在使用C++或C++ 11,因此非常感谢使用其中一种语言的任何解决方案.
我在Qt(C++)中构建一个应用程序,它使用在Haskell中编写的库作为后端.如何将Haskell库的界面导出到C++?
当haskell库中的函数使用简单类型时,int或者float它不是问题,但当它们使用结构作为参数时会是什么?这种情况下最具可扩展性的解决方案是什么?
我正在创建一个实现某种缓存的程序.我需要尽可能多地使用内存,为此我需要做两件事:
我需要一个独立于平台的解决方案(Linux,Windows等).
使用这两个信息,我将减少缓存的大小或放大它.如何在Haskell中获取此信息?有没有可以提供这些信息的软件包?
我将在ZeroMQ上实现分布式消息总线,并且我试图使其尽可能高效.我的要求是:
我正在考虑的方法是:
有没有其他/更好的架构可以与ZeroMQ一起使用来创建这样的消息总线?
我建立简单的脚本runhaskell,我尝试使用FastString的ghc-7.10.2.只是:
import FastString
main = putStrLn "Hello SO"
Run Code Online (Sandbox Code Playgroud)
运行它runhaskell Main.hs导致错误:
Main.hs:1:8:
Could not find module ‘FastString’
It is a member of the hidden package ‘ghc-7.10.2’.
Use -v to see a list of the files searched for.
Run Code Online (Sandbox Code Playgroud)
我知道我可以构建它cabal并指定ghc为依赖,但我真的需要这样做runhaskell.
我怎样才能取消隐藏ghc库runhaskell?
如何在Haskell中列出磁盘驱动器?我想在Windows上获取磁盘驱动器号并在Linux上获得"/".可能吗?我无处可寻.
haskell ×7
c++ ×3
ghc ×2
api ×1
architecture ×1
boolean ×1
c++11 ×1
caching ×1
dbus ×1
exception ×1
expression ×1
ffi ×1
ghci ×1
infinity ×1
interface ×1
ipc ×1
memory ×1
networking ×1
performance ×1
resources ×1
runhaskell ×1
thrift ×1
visual-c++ ×1
windows ×1
zeromq ×1