无副作用,引用透明的函数编程的承诺之一是可以广泛优化这样的代码.引用维基百科:
在许多情况下,数据的不可变性可以通过允许编译器在命令式语言中做出不安全的假设来提高执行效率,从而增加强调文本在线扩展的机会.
我想看一些示例,其中函数式语言编译器通过生成更好的优化代码来优于命令式编译器.
编辑:我试图给出一个特定的场景,但显然这不是一个好主意.所以我会尝试以不同的方式解释它.
程序员将想法(算法)翻译成机器可以理解的语言.同时,翻译的一个最重要的方面是人类也可以理解产生的代码.不幸的是,在许多情况下需要权衡:简洁易读的代码会受到性能降低的影响,需要手动优化.这容易出错,耗时,并且使代码的可读性降低(完全不可读).
函数式语言的基础,例如不变性和引用透明性,允许编译器执行广泛的优化,这可以取代手动优化代码和免费程序员进行权衡.我正在寻找想法(算法)及其实现的示例,例如:
如果它有点模糊,我道歉,但我希望这个想法很明确.我不想对答案给予不必要的限制.如果有人知道如何更好地表达它,我愿意接受建议.
我的兴趣不仅仅是理论上的.我想使用这些例子(以及其他内容)来激发学生对函数式编程感兴趣.
起初,我对评论中提出的一些例子并不满意.我想再次反对,这些都是很好的例子.请随意将它们扩展为完整的答案,以便人们可以评论并投票给他们.
(一类这样的例子很可能是并行化代码,它可以利用多个CPU内核.通常在函数式语言中,这可以轻松完成而不会牺牲代码的简单性(比如在Haskell中添加par或pseq在适当的位置).我是对这些例子感兴趣,但也对其他非平行的例子感兴趣.)
optimization performance haskell functional-programming imperative-programming
Jest文档内容如下:
toBe只是检查一个值是你所期望的.它使用===来检查严格的相等性.
并为toEqual:
如果要检查两个对象是否具有相同的值,请使用.toEqual.这个匹配器递归地检查所有字段的相等性,而不是检查对象标识 - 这也称为"深度相等".例如,toEqual和toBe在此测试套件中的行为不同,因此所有测试都通过.
const x = { a: { b: 3 } };
const y = { a: { b: 3 } };
expect(x).toEqual(y);
expect(x).toBe(y);
Run Code Online (Sandbox Code Playgroud)
在这种情况下,toEqual通过但toBe失败.我明白这是toEqual通过,因为它做了一个非常平等的检查.为什么toBe在这种情况下失败?
此外,是否有使用toBe和toEqual(不仅仅是在Jest中,而且在其他测试框架中)的最佳实践?
根据昌昌的回答更新:
我怎样才能在shell(Ubuntu)中看到这些线程?我用ps -eLf | grep节点| grep -v grep只看到两个:
root 16148 7492 16148 0 2 20:43 pts/26 00:00:00 ./bin/node /home/aaron/workspace/test.js
root 16148 7492 16149 0 2 20:43 pts/26 00:00:00./bin/node /home/aaron/workspace/test.js
我正在寻找方法让我的博客上的一些帖子只对我自己可见,但在Hugo看来似乎不是这样.
有没有办法解决这个问题,比如为某些帖子设置密码?
或者支持该功能但我还没有找到它?
我在多台机器(台式机和笔记本电脑)和操作系统(Windows 和 Mac)上对此进行了测试,我可以复制相同的行为:
在隐身模式下下载资源的速度要快得多(而不是渲染速度)
我可以粗略地想到两种情况,在两种情况下,隐身模式和普通模式分别可以更快:
因此,我在正常模式下禁用了所有扩展程序,并“重置”了删除缓存和浏览历史记录等的所有设置。
在所有情况下,当我查看 Chrome 检查器时,隐身模式下的资源下载速度比正常模式下快得多。链接在隐身模式下加载速度极快。
为什么会出现这种情况?
performance ×2
blogs ×1
browser ×1
haskell ×1
hugo ×1
io ×1
javascript ×1
jestjs ×1
libuv ×1
linux ×1
node.js ×1
optimization ×1
testing ×1