Ruby Ruby 3 将有类型系统了

laocainiao · 2019年04月20日 · 最后由 franklinyu 回复于 2019年06月26日 · 6854 次阅读

https://twitter.com/darkdimius/status/1119115657776209920

相关网站: https://sorbet.org/

# typed: true
extend T::Sig

sig {params(name: String).returns(Integer)}
def main(name)
  puts "Hello, #{name}!"
  name.length
end

main("Sorbet") # ok!
main()   # error: Not enough arguments provided for method `main`
man("")  # error: Method `man` does not exist

你们怎么看?

可选类型标注。。

对我来说依然不觉得类型检查有什么必要,过去遇到的 Bug 几乎都跟类型没什么关系,只是可选的那就留待观察好了。(真香警告)

Ruby 不像 Clojure 对这个东西那么急切(我不是说 Ruby 不需要)。

Clojure 很需要这个东西,是因为,Clojure 把 map 当对象用,把 map 的字段当方法用,Ruby 有对象,对象有啥方法、字段都是相对明确的。

我想知道 性能大概会有多少下降?

本来就有……

类型最大的帮助就是 ide 提示了,这个对重构代码有很大的帮助,重构的时候不用胆战心惊那边有关联的变量没有改过来。

这个类型验证不知道怎么和 duck type 和平相处

nouse 回复

参考 swift 里的 Any

10 楼 已删除

写法好罗嗦,像 haskell 那样 String -> Integer 就好了

还是更喜欢做成语法,话说之前看了篇 CB 文章 编程语言之父谈语言设计,龟叔大赞 TypeScript

里面提到:

Hejlsberg 将类型系统视为“工具性”的功能,开发者喜欢 IDE 提供的代码补全、重构和代码导航这些功能,而这背后都离不开具有类型系统的编译器。Hejlsberg 也不认为编程语言添加了类型系统就能提升开发者的生产力,他觉得开发者使用动态语言,然后以非侵入性方式来添加类型特性反而能提高开发效率。

于是 Sorbet 这样的方案有大佬认为是科学的了

laocainiao 回复

性能不是应该提升吗

nouse 回复

我也是这么想的

Swift 就有一套方法针对这个

laocainiao 回复

coinbase, stripe 两家大厂出品,估计不会降低性能(运行时检查应该可以关掉)。

类型系统对于重构绝对是必须的,已经提交试用申请了

Python 的 type hint 從 3.5 就有了,我看下來沒幾個人在用的

需要 登录 后方可回复, 如果你还没有账号请 注册新账号