rust 的 issue 数都突破 10000 了... go 还只有 600 多
瓶颈在你把数据读出来需要的时间,而不是计算方法
str.count '1'
结果单位是弧度,转成角度即可
Math.asin(0.5) * 180 / Math::PI
内存要够大 (readme 说 1.8G), 否则碰到 swap 就慢了 ^_^
#2 楼 @wppurking 很多 c++ 实现的部分用 rust 重写了,meta-circular bootstrap 都要经历的 -_-
在新 thread 里做也不会 block 的
/E
选项是做什么的...warning: foo unused
是什么意思?关于语法的一些陈述不太对。一般是先设计语法,然后细化 parser. 优化的做法是减少回溯或者需要 look ahead 的部分,对于 CFG 系列的 (LL, LR, GLR 等) 语法不精细的地方,解决方案就是找会有二义性的点添加断言,并写进 spec 里表明哪一种更优先。go 里只有把类型写在后面的语法是有利于 parsing 的,但那是其他语言长时间得来的经验,也不是 go 特有的。应该说 go 根本就没花多少心思在设计语法上。
我同意你降低心智的说法...
@sunfmin 这两贴把 go 程序员都钓出来了,还要招人么?
#96 楼 @chai2010 70000 行是哪里来的 -__-
-Werror=unused
同样可以禁止定义未使用变量 (不止是变量,还有很细粒度的控制). 最终集成 build 打开就可以,开发时那种限制就是恶心人。C++ 编译速度和链接速度是可以自己做主的,如果想忽略掉链接期优化,关闭编译器开关即可,链接就快多了。但是 Go 的设计决定就把需要链接期优化的人都一竿子打死了。其实 git 命令行也能做行内的 diff
[color "diff"]
old = black red
new = black green
[alias]
d = diff --color-words='[^[:space:]]+|.'
#63 楼 @astaxie 别激动... 理论上 Go 就不太可能接近 C 的速度。
现在的主流 C 编译器中,GCC 和 LLVM 都有一个叫做 IL 的东西,IL 是 intermediate language 的缩写, Go 的编译速度主要是去掉了 IL 和链接期优化而来的 (应该说 Go 是有 intermediate representation, 但还很原始简单没上升到 intermediate language 的高度).
GCC, LLVM, Java, C# 性能优良的原因之一,就是有设计良好的 IL. GCC 的其中一层 IL Gimple 就是个 lisp 方言,由于 lisp 程序员眼里没有语法,只有语法树,所以 lisp 用来处理树和 DAG 等结构也是比较得心应手... Java 的 IL JVM bytecode, C# 的 MSIL 都是基于栈的简单语言。LLVM 的 bytecode 是个无限寄存器制的 SSA 语言。
IL 作为可读代码可以简化编译器开发 debug 的工作,可以归一化平台无关的优化,没有 IL 的话很多平台就要用相似但不同的代码实现一些优化逻辑,偏门一点的平台就容易出 bug. 不过由于 Go 的作者有多年的 Inferno OS 开发编译器的经验,Go 才没有发生很多问题,但是在这个基础上的发展肯定会比拥有 IL 的语言慢很多。链接期优化也是 IL 的主要作用之一,例如 clang -S -O4
的输出就是 LLVM IL 而非汇编,得到所有 IL 以后再来做变换,获得更好性能。javac 和 csc 编译的输出也是 IL.
抽象层次高的代码,编译器可以做的优化就越多,运行时优化也比编译期优化的空间大。搞编译器的朋友表示动态语言理论极限会比静态语言快... Go 的编译器设计就已经给自己划定了极限...
#49 楼 @astaxie 不了解 C/C++ 不要瞎说... 是 google 的 C++ 项目编译太慢了 lol, 其实就是拆分好模块,用动态链接就能解决,另一方面是 google 内部广泛应用的 protobuf 生成的代码大量应用了 C++ 模板进一步增加了编译时间,protobuf 作者后来设计的 capnproto 就没这个问题。对于 C 准确来说是 C89 之前的表达能力有欠缺,但经过 C99, C11 的改进,表达能力 (dynamic array, inner function, type-generic macro, thread 等等) 已经强多了。C macro 的问题,由于编译器改进,追踪 macro 中的问题已经比 30 年前容易多了。而没有 macro 的 Go, 很多情况比 C 的表达能力还弱 -_-.
&& (@health < warrior.health)
---> && (@health == warrior.health)
我碰到过 nginx 不在启动时自动加载的问题,sudo 拷贝到 /Library/LaunchAgents/homebrew.nginx.plist 然后 chomd 644 就可以了。
但是第一次访问正常而第二次失败很诡异... log 怎么写的?
#28 楼 @Numbcoder 有关系哦,你看见有几个 Go 的使用者会用这些函数?不少人实现了发现用起来根本没 Ruby 的一半方便就放弃了回到 for
循环里了
#22 楼 @Numbcoder 可以无缝使用 C/C++ 的 lib 啊
#19 楼 @gaicitadie 对啊,这个拼爹社会里人的认识受各种因素影响,反而失去了对事物本身的判断能力...
就语言本身设计来说
web 开发,如果一个语言不支持元编程,没有 map, reduce, each_slice, find ... 等函数,写复杂业务逻辑就是噩梦...
相似的语言的话,Rust 设计得更好,相比 Go 的各种优点:
let
和 ;
以外都是表达式