作好不容易
require 'benchmark'
def fib n
if n < 2
1
else
fib(n-2) + fib(n-1)
end
end
# 直接执行
puts Benchmark.measure {
8.times do
fib(40)
end
}
# 进程
puts Benchmark.measure {
8.times do
fork { fib(40) }
end
Process.wait
}
# 线程
puts Benchmark.measure {
8.times.map {
Thread.new{fib(40)}
}.each{|t| t.value}
}
# Ractor
puts Benchmark.measure {
8.times.map {
Ractor.new{ fib(40) }
}.each{|r| r.take}
}
方法 | user time | system time | user+system times | real time |
---|---|---|---|---|
顺序执行 | 84.713012 | 0.131839 | 84.844851 | 84.845332 |
进程 | 0.000214 | 0.002798 | 14.607795 | 14.787335 |
多线程 | 84.604395 | 0.145657 | 84.750052 | 84.744966 |
Ractor | 116.438639 | 0.148765 | 116.587404 | 14.853680 |
答案是 Ractor 和多进程差不多快
商业公司支持的语言,早晚受到限制。比如 Java,收割你。
Nodejs 的社区 npm 包质量太次,普遍进入维护期了,疯狂报 warning
Python 的问题在于永远无法拥有真正的 JIT。没有标准化实现,Instagram、Dropbox 使用 Python 的都尝试过研发 Python-JIT 已经失败了好几轮 Python 社区,我怀疑混入了 Node 社区的人,花式加一些无用的语法最近。
Ruby 唯一没有金主爸爸。这个角度,他是属于自由个人的选择。 Ruby 的 gem 幸存下来的,都经过一番洗礼,质量都挺高。保持小众,猥琐发育也挺好。要像 npm 那样,100w 的包,一半都失效了,各种问题。。。也是蛋疼。
小众好处也是一种筛选吧,真正热爱的人会继续搞好的。像 Java 作为大众蓝领语言,已经膨胀到难以理解了。
不管怎么样,我会继续偷着用 Ruby
可能这就是它的优势所在。
就像 lisp 程序,程序就是在写 AST 一样
Yep, I can
B 站直播怎么样,给老铁刷火箭
补充,想要运行里面的返回函数怎么办呢?
method(a()).call
可以用户 method 获得 :c 的函数主体,然后调用 call 调用它。
涉及到 2 个背景知识:
1.符号
符号 用 :xxx
来表示。符号用于 方法名、类名、常量。符号是一种特殊的数据类型,他唯一、检索速度快。所以被用于前者。想想是不是很合理?非常合理。为了性能。
2.返回值
ruby 认为所有函数都应该有返回。即使是返回空,也是一种返回。所以除了 显示调用 return 返回值,默认没有 return 的情况下,返回方法内最后一个计算值。它相当于
def a
return def c
'hello,world'
end
end
所以这里,函数内部被调用,没有 return 情况下,会返回 内部定义的函数名,函数名用符号表示,所以返回 :c
微软可以用 Mac 么
+1
所以都切换为电脑版搞
SQL 特殊地方,他是一个 三元逻辑系统 true、false、null 逻辑处理的时候,必须要考虑 null,除非这个字段加了 非 null 约束。
他的布尔值运算,也要遵循三元真值表。
(前几天看了,逃。。。
感觉远程这件事,算时间成本、租办公区成本,应该是比较共赢的。只是这个想法里面,对打工人利好,管理者应该不想。
速度上来了。以前 gitlab.com 访问起来非常非常慢
可以这样理解。毕竟 KPI 驱动、急功近利的晋升导向的不良氛围,而且维护性根本不可靠。而且做来做去就那点东西抄抄弄弄的。
实话是活,和国外还是有点差距。
他们家网站的插画,真是喜欢
答案如果找到了,AI 不就造出来了。如果 AI 造不出来(不能被复现) 说明答案还没找到。
有时候我觉得,这跟 Ruby、Rails 都没什么关系。
市场上有的是未成熟的技术就有人上赶着去用。Go、Rust 周边设施都没完善起来。Nodejs 也是乱七八糟的情况。
新技术替代旧技术,有一大部分原因是一种技术营销的结果。
另外还有一个国情特殊,国内的人喜欢迷信有国外大厂背景的技术比如 Google,仅此而已。国外大厂推出了什么,国内就会换一波。这几年一直都是这样。
国内缺乏上游技术制造的氛围和生态,所以总是换来换去。
🆙
截止今天 Rubinius 2 年没又提交了。
看来东西也要看是否能坚持到底
如果自己,可能是正则、字符串替换。
这个是 Ruby 的 Syntax 范畴,肯定是 他的 解释器里面 Parser 部分实现的。转成 AST,以语法的形式处理。
背景:在公司的 slack channel 里一直安利 Ruby,突然有一天,有个同事问我——想白嫖一个环境搭建的教程。
我是菜鸡,难的我不会。可是这个简单啊,我快速撸一篇,这个适合新手。
关键字 Safe Navigation Operator
官方最新的文档
https://ruby-doc.org/core-3.0.2/doc/syntax/calling_methods_rdoc.html#label-Safe+Navigation+Operator
更新历史
https://www.ruby-lang.org/en/news/2015/11/11/ruby-2-3-0-preview1-released/
Feature BUG 跟踪 https://bugs.ruby-lang.org/issues/11537
update
我其实觉得有高质量的标准库挺好的。
JavaScript 就不存在高质量、标准库。所以各种代码的操作都极大地围绕周边第三方仓库。一些简单的事情也很复杂。百里不同样。 第三方也可能不维护了。这样说可能有些人都没有概念。比如处理时间,JS 是没有自己完善的标准库的。需要仰赖第三方,那你选择就多了 moment、date-fns ……简单的事情,可能每个仓库不同人经手口味不同。
简单的事情也变复杂了。
这个角度,我其实很欣赏官方愿意花精力维护一些标准库。
而且 Ruby 的标准库范围很广,让我觉得很有趣。 etc
的存在,意味着,你去写一些命令行的程序也很方便。操作系统方面兼容性的细碎不是一般小白,或者我就想快速做一个脚本。这样的人可以搞定的。
web 即 app
周杰伦可以给我签个名么