- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图了解在 runhaskell
下运行程序时观察到的性能异常。 .
有问题的程序是:
isFactor n = (0 ==) . (mod n)
factors x = filter (isFactor x) [2..x]
main = putStrLn $ show $ sum $ factors 10000000
isFactor
作为:
isFactor n f = (0 ==) (mod n f)
最佳答案
尽管功能应该相同,但它们的应用方式却有所不同。对于第一个定义,isFactor
完全应用于调用站点isFactor x
.在第二个定义中,它不是,因为现在 isFactor
显式接受两个参数。
即使是最小的优化也足以让 GHC 看穿它并为两者创建相同的代码,但是如果您使用 -O0 -ddump-simpl
编译您可以确定,在没有优化的情况下,这会有所不同(至少对于 ghc-7.2.1,YMMV 和其他版本)。
与第一个 isFactor
, GHC 创建一个作为谓词传递给“GHC.List.Filter”的函数,调用 mod 10000000
和 (==)
内联。对于第二个定义,发生的是 isFactor
中的大多数调用。是对类函数的 let-bound 引用,并且在 isFactor
的多个调用之间不共享.所以有很多完全没有必要的字典开销。
这几乎从来都不是问题,因为即使是默认的编译器设置也会对其进行优化,但是 runhaskell 显然甚至没有做那么多。即便如此,我偶尔也会将代码结构化为 someFun x y = \z ->
因为我知道someFun
将被部分应用,这是保持调用之间共享的唯一方法(即 GHC 的优化器不够聪明)。
关于haskell - Runhaskell 性能异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9325167/
我试图了解在 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 仍在许多环境中使用。 有没有办法
我是一名优秀的程序员,十分优秀!