那你的观点是? 另外,工具不谈生产力,谈什么呢?
Rubinius 感觉已经没在继续了吧,WSL 2 是标准的 Linux 虚拟机了,如果编译有问题那说明是编译器啥的问题,在标准 Linux 上应该也会一样的结果。
还是用 MRI 吧
能把语句写对这是最基础不过的了。。。写多了还没肌肉记忆非要让 IDE 让你生成这生成那的,这不就是因为语言太啰嗦才需要工具支持么
我一直强调,真正影响生产力的是实现业务时的差异,楼上有人问你了,你把这些最基础的在 Java 上实现一下,再看看 Ruby 上怎么做的,更复杂的业务呢?
你谈到了“小”,小项目用什么都问题不大
当你一个线程有多个 fiber,要多个 fiber 切来切去的时候,这时候还是用的一个核…… 所以你很聪明的说 io 不涉及计算来绕开了这个问题
Fiber 调度器改善的是:提高 IO 密集型应用的 CPU 利用率,这不叫“绕开了这个问题”而是,Fiber 调度器只为了解决 IO 的问题
然后我想说的问题不是 io 的问题,而是计算的问题
当 CPU 已经被充分利用时,使用调度器不仅没有意义,而且有害。 “计算的问题”跟 Fiber 调度器一点关系都没有,计算密集型的场景也不应该使用 Fiber 调度器。
Redmine,另外我听说几家 Linux 发行版公司都有自研的基于 Ruby 的用例管理平台,但是都不开源。。。
赞!
就恰好缺了 4 胶水语言
jasl@jasl-mbp:~$ irb --version
irb 1.2.3 (2020-02-15)
jasl@jasl-mbp:~$ irb
2.7.1 :001 > a=[1,2,3,1,2]
2.7.1 :002 > pa = a.pack("C*")
2.7.1 :003 > b=pa[0,2]
2.7.1 :004 > b == "\x01\x02"
=> true
可能你用了盗版 Ruby?
根据我过去的经验,这个东西本身是一个 OA 系统,但是各家的具体的行政任务是不同的,所以免不了定制流程或者二次开发...
还没,我回头要一波,最近还要上传到国内
传说 Turbolinks 6 会抛弃 UJS,但是 DHH 休假去了。。。目前几个 Rails 的组件处于维护状态。。。
这是 BBCode
可以找相关的 gem 比如 https://github.com/veger/ruby-bbcode 把 bbcode 翻译成 HTML 然后做进一步处理
require
是加载 Ruby Gem 的,加载动态链接库需要考虑用 https://github.com/ffi/ffi
我以为是方便光脚。。。
公益项目,不赚钱 其实卖周边组委会也是要在最理想情况下,有微弱盈利的。
不过明年做线下要回到购票参加机制了,请记得买票参加~
YouTube 上两天的都有了,https://www.youtube.com/channel/UCOLKFS_uA7nX26_u8z9V9og 这里找一下
按演讲来剪辑的录像,还有上传到国内平台,可能要等等,顺利下周。
我不觉得这是扣帽子,你没有拿出证据证明这里有瓶颈,谈何优化?况且我不觉得你的态度很友善
为什么要我去理解你的情况和语境?表述不清楚是你的错,不是我的错
Ruby 的引用和 Java 的引用并无二致,编程语言上的“引用”的理解都是一样的,如果你认为概念有别,那么是你对引用的理解有误区。
Ruby 只有引用,这个是语言定义上就明确提到的
周六的应该 YouTube 上可以看的,今天组委会在活动结束后全扑街了,等明天睡醒再搞今天的吧。国内平台要晚一些了,再之后会按场次分开上传
题外话,Ruby 有 WeakRef
那么优化性能难道不是以 事实 存在性能瓶颈为前提进行的吗?
a 和 b 指向同一个对象,请问“拷贝”发生在哪里?
Ruby 不存在 值 这个概念,我不知道你说的值拷贝在 Ruby 上会是什么样子
我们再来看看是否如你所说产生了大量的小对象
n = 100_000
index = n / 2
GC.disable
puts "Checkpoint 1"
pp ObjectSpace.count_objects
arr = 1.upto(n).to_a
arr.index(index)
puts "Checkpoint 2"
pp ObjectSpace.count_objects
arr1 = arr[2..]
arr1.index(index)
puts "Checkpoint 3"
pp ObjectSpace.count_objects
注意为了避免 irb 的干扰(语句打印到控制台会产生大量对象)语句这段代码要么保存成文件执行,要么用 eval
来执行
另外注意,我们在代码里关闭了 GC,也就是说产生的任何对象,都不会被回收
Checkpoint 1
{:TOTAL=>48914,
:FREE=>3078,
:T_OBJECT=>2032,
:T_CLASS=>998,
:T_MODULE=>76,
:T_FLOAT=>4,
:T_STRING=>23003,
:T_REGEXP=>323,
:T_ARRAY=>4881,
:T_HASH=>274,
:T_STRUCT=>1000,
:T_BIGNUM=>2,
:T_FILE=>5,
:T_DATA=>567,
:T_MATCH=>248,
:T_COMPLEX=>1,
:T_SYMBOL=>58,
:T_IMEMO=>12265,
:T_ICLASS=>99}
Checkpoint 2
{:TOTAL=>49321,
:FREE=>303,
:T_OBJECT=>2161,
:T_CLASS=>1016,
:T_MODULE=>78,
:T_FLOAT=>4,
:T_STRING=>24893,
:T_REGEXP=>323,
:T_ARRAY=>5357,
:T_HASH=>284,
:T_STRUCT=>1002,
:T_BIGNUM=>2,
:T_FILE=>7,
:T_DATA=>615,
:T_MATCH=>248,
:T_COMPLEX=>1,
:T_SYMBOL=>58,
:T_IMEMO=>12867,
:T_ICLASS=>102}
Checkpoint 3
{:TOTAL=>49729,
:FREE=>167,
:T_OBJECT=>2290,
:T_CLASS=>1016,
:T_MODULE=>78,
:T_FLOAT=>4,
:T_STRING=>25066,
:T_REGEXP=>323,
:T_ARRAY=>5512,
:T_HASH=>286,
:T_STRUCT=>1003,
:T_BIGNUM=>2,
:T_FILE=>7,
:T_DATA=>656,
:T_MATCH=>248,
:T_COMPLEX=>1,
:T_SYMBOL=>58,
:T_IMEMO=>12910,
:T_ICLASS=>102}
观察结果,并没有产生大量的元素复制,假设证伪。
现在用 rubocop 或者 https://github.com/testdouble/standard 这些 linting 工具解决就是了
就 each_char
为例,文档已经关联了对应的源代码 https://ruby-doc.org/core-2.4.0/String.html#method-i-each_char 自己追就可以了
反驳的点是 他认为 b = a
是值拷贝,事实上 Ruby 不存在值语义,
换 Float 结果依旧成立
2.7.1 :027 > a = 1.1
2.7.1 :028 > a.object_id
=> -32425917317067566
2.7.1 :029 > b = a
2.7.1 :030 > b.object_id
=> -32425917317067566
此外
ruby 中有值和引用语义
这句话明显也是错的,Ruby 语言已经明确了只存在引用,就你以 Integer 的例子,证伪很容易
2.7.1 :021 > a = 1
2.7.1 :022 > a.object_id
=> 3
2.7.1 :023 > b = a
2.7.1 :024 > b.object_id
=> 3
a 和 b 都指向同一个 Integer 对象,并没有发生值拷贝
你对 b = a
的理解也有误区,他的意思是将 a
指向的对象 binding
(绑定)到 b
上。