Haskell(使用GHC
编译器)比你期望的要快很多.如果使用得当,它可以与低级语言保持密切联系.(Haskellers最喜欢的事情是尝试在C的5%范围内(或者甚至击败它,但这意味着你使用的是低效的C程序,因为GHC将Haskell编译为C).)我的问题是,为什么?
Haskell是声明性的,基于lambda演算.机器架构显然势在必行,粗略地基于图灵机.实际上,Haskell甚至没有具体的评估顺序.此外,您不必处理机器数据类型,而是始终生成代数数据类型.
最奇怪的是更高阶函数.你会认为动态创建函数并抛出它们会使程序变慢.但是使用更高阶函数实际上使Haskell更快.实际上,似乎要优化Haskell代码,你需要使它更优雅和抽象,而不是更像机器.如果Haskell的更高级功能没有改进,它们似乎甚至都不会影响它的性能.
很抱歉,如果这听起来不错,但这是我的问题:为什么Haskell(使用GHC编译)如此之快,考虑到它的抽象性质和与物理机器的差异?
注意:我说C和其他命令式语言有点类似于图灵机的原因(但不是Haskell类似于Lambda微积分)是因为在命令式语言中,你有一个有限数量的状态(也就是行号) ,以及磁带(ram),以便状态和当前磁带确定对磁带做什么.有关从图灵机到计算机的过渡,请参阅维基百科条目,图灵机等效项.
performance haskell lambda-calculus ghc higher-order-functions
为什么不推荐使用 DOMSubtreeModified事件以及我们应该使用什么?
以下是我如何检查是否mystring
以某个字符串开头:
>>> mystring.lower().startswith("he")
True
Run Code Online (Sandbox Code Playgroud)
问题是mystring
很长(数千个字符),所以lower()
操作需要很多时间.
问题:有更有效的方法吗?
我不成功的尝试:
>>> import re;
>>> mystring.startswith("he", re.I)
False
Run Code Online (Sandbox Code Playgroud) 我有一个类似于CSS Auto Margin按下其他元素的问题:右浮动侧边栏被推到主非浮动内容div下面.建议的答案是:只需反转标记的顺序,并在非浮点div 之前写出浮点div.
例如,这个:
<div class="container">
<div id="non-floating-content">
fooburg content
</div>
<div id="float-right">
test right
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
需要笨拙地重新订购:
<div class="container">
<div id="float-right">
test right
</div>
<div id="non-floating-content">
fooburg content
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
那么,为什么这也可以在没有重新排序的情况下工作:使用基于网格的设计的最大宽度和最小宽度的弹性布局?查看现场演示.标记的顺序仍然合理:float div 在非浮点div 之后写出.然而浮动不会被推到页面上.
我问,因为我不想破解主题PHP(重新排序div)以便正确地设计它.
其他也说解决方案的帖子是"重新订购你的div":
这很奇怪.我正在尝试在右浮动div旁边有一个固定宽度的div,我不想重新排序div(因为这是分布式主题).所以我在固定div上使用负边距右边,我觉得奇怪的是:如果它是-4px或更小,那么浮动移动到一边; 否则,它会保持在低于.
与戏剧的代码现场演示在jsbin,其中有这样的:
<style>
.container {
width: 200px;
height: 200px;
}
.box {
width: 100px;
height: 100px;
}
.one {
margin-right: -4px; /* If <= -4, .two box shifts up */
display: inline-block;
}
.two {
float: right;
}
</style>
<div class="container">
<div class="box one"></div>
<div class="box two"></div>
</div>
Run Code Online (Sandbox Code Playgroud)
有人可以解释这个谜吗?在这种情况下,数字-4有什么特别之处?
如果我在Chrome开发者工具中打开JavaScript控制台来调试扩展程序的内容脚本,我就不会获得内容脚本的上下文.例如,jQuery是不可访问的,除非我去调试器并设置断点,否则我无法访问我的全局变量.
我只是错过了一些东西吗?能够从JS控制台检查我的全局变量或调用jQuery会很棒.
javascript-debugger google-chrome-extension google-chrome-devtools
尝试使用 pyenv 在 macOS 上构建 python 版本,但我所做的每次安装都以
? python
>>> import lzma
ModuleNotFoundError: No module named '_lzma'
Run Code Online (Sandbox Code Playgroud)
我已经安装了以下所有软件包:
brew install openssl readline sqlite3 xz zlib
xcode-select --install
Run Code Online (Sandbox Code Playgroud)
唯一需要注意的是 homebrew 将软件包安装到~/.brew
.
任何意见都会受到赞赏。
我正在为复杂的Web应用程序编写用户脚本.现有代码正在捕获'j'和'k'keydown事件.
我希望能够找到这个功能,看看它在做什么.有没有办法列出文档中的所有关键事件处理程序?或者也许是一种在Chrome开发者工具中以某种方式设置断点的方法,当我按下这封信时?
css ×2
html ×2
javascript ×2
performance ×2
python ×2
css-float ×1
deprecated ×1
dom ×1
dom3 ×1
fluid-layout ×1
ghc ×1
google-plus ×1
haskell ×1
homebrew ×1
ios ×1
keydown ×1
knitr ×1
lzma ×1
macos ×1
margin ×1
pyenv ×1
r ×1
startswith ×1
string ×1