- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个小型测试框架。它执行一个循环,执行以下操作:
runhaskell
执行此操作.该程序生成各种磁盘文件。 runhaskell
占用了程序绝大部分的执行时间。
runhaskell
设法从磁盘加载文件,对其进行标记,对其进行解析,进行依赖性分析,从磁盘加载 20KB 以上的文本,标记并解析所有这些,执行完整的类型推断,检查类型,对核心进行脱糖,链接编译的机器代码,并在解释器中执行该操作,所有时间都在 2 秒的墙上时间之内,当您考虑它时,实际上非常令人印象深刻。另一方面,我仍然想让它走得更快。 ;-)
runhaskell
仍然需要大约 1 秒.
-e
切换会更快吗?
runhaskell
大概会导致操作系统探索系统搜索路径,找到必要的二进制文件,将其加载到内存中(肯定这已经在磁盘缓存中?),将其链接到任何 DLL,然后启动它。有什么方法可以(轻松)保持 GHC 的一个实例运行,而不必不断创建和销毁操作系统进程?
GHC -e
(即,现在除了正在执行的一个表达式之外的所有内容都已编译)没有可测量的性能差异。在这一点上似乎很清楚,这都是操作系统开销。我想知道我是否可以创建一个从测试仪到 GHCi 的管道,从而只使用一个操作系统进程......
最佳答案
好的,我有一个解决方案:我创建了一个 GHCi 进程并连接了它的 stdin
到管道,以便我可以将表达式发送到交互式评估。
后来进行了几次相当大的程序重构,整个测试套件现在大约需要 8 秒来执行,而不是 48 秒。这对我有用! :-D
(对于其他尝试这样做的人:看在上帝的份上,记得将 -v0
切换到 GHCi,否则您会收到 GHCi 欢迎横幅!奇怪的是,如果您以交互方式运行 GHCi,即使使用 -v0
命令提示符仍然出现,但是当连接到管道时,命令提示符消失了;我认为这是一个有用的设计功能,而不是随机事故。)
当然,我走这条奇怪路线的一半原因是我想捕获stdout
和 stderr
到一个文件。使用 RunHaskell
,这很容易;只需在创建子进程时传递适当的选项。但是现在所有的测试用例都由单个操作系统进程运行,所以没有明显的方法来重定向 stdin
和 stdout
.
我想出的解决方案是将所有测试输出定向到单个文件,并且在测试之间让 GHCi 打印出一个魔术字符串(我希望!)不会出现在测试输出中。然后退出 GHCi,下载文件,然后寻找魔法字符串,这样我就可以将文件剪切成合适的 block 。
关于haskell - 加速 runhaskell,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9326097/
我试图了解在 runhaskell 下运行程序时观察到的性能异常。 . 有问题的程序是: isFactor n = (0 ==) . (mod n) factors x = filter (isFac
我有一个小型测试框架。它执行一个循环,执行以下操作: 生成一个小的 Haskell 源文件。 使用 runhaskell 执行此操作.该程序生成各种磁盘文件。 处理刚刚生成的磁盘文件。 这种情况发生了
我想将模块放在不同的文件夹中。是否有可能在导入语句中告知模块的路径?注意我不想使用 cabal,因为在我使用的编辑器中,runhaskell 是 haskell 的默认可执行文件。 最佳答案 例如,您
在 haskell 构建系统中,Cabal以及 runhaskell有几乎相同的子命令集,configure , build .对于 runhaskell,它是: runhaskell Setup.h
很多人包括.ghci在他们的 haskell 项目中添加文件以包含将模块加载到 ghci 中所需的选项.这是一个例子: :set -isrc -itest -iexamples -packagehsp
RWH 突然开始使用 runhaskell 而不是 runghc。有什么不同?据我所知,它们的工作方式相同。 最佳答案 runhaskell可以运行您在系统上使用的任何 Haskell 解释器——它不
我正在尝试使用 Cabal 从 haskell 的 Hackage 安装包。 特别是,我正在尝试下载 gloss 包: cabal install gloss 出现这个错误: binary-0.7.1
我正在使用 runhaskell 构建简单的脚本我尝试使用 FastString来自 ghc-7.10.2 .简单地: import FastString main = putStrLn "Hello
我在 ghc7.0.2 上创建了一个 yesod 应用程序。 当我使用命令 runhaskell devel-server.hs运行应用程序,发生错误: GHCi runtime linker: fa
不幸的是 cabal-dev ghci 在这个项目中不起作用,我收到一个错误: Loading package download-0.3.2 ... linking ... ghc: /home/st
我刚刚偶然发现了一个我不明白的东西。 如果我使用 GHCi 并使用 getLine我得到以下 Prelude> a oo -- the Backspace action results in a '^
我在 haskell 中编写了一个名为 testscript 的脚本,代码如下: #!/usr/bin/env runhaskell main = putStrLn "hello" 使脚本可执行后,我
在安装了 GHC 的类 UNIX 系统上,我可以创建一个包含以下内容的文件 #!/usr/bin/env runhaskell main = putStrLn "Hello, I am a UNIX
如果您declare a library + executable sections in a cabal file while avoiding double compilation of the
升级到 ghc 7.4 后,我必须从各种脚本中删除 import System,但这使得它们与 GHC 6.0 中的 runhaskell 不兼容,而 GHC 6.0 仍在许多环境中使用。 有没有办法
我是一名优秀的程序员,十分优秀!