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
你们怎么看?
Ruby 不像 Clojure 对这个东西那么急切(我不是说 Ruby 不需要)。
Clojure 很需要这个东西,是因为,Clojure 把 map 当对象用,把 map 的字段当方法用,Ruby 有对象,对象有啥方法、字段都是相对明确的。
还是更喜欢做成语法,话说之前看了篇 CB 文章 编程语言之父谈语言设计,龟叔大赞 TypeScript
里面提到:
Hejlsberg 将类型系统视为“工具性”的功能,开发者喜欢 IDE 提供的代码补全、重构和代码导航这些功能,而这背后都离不开具有类型系统的编译器。Hejlsberg 也不认为编程语言添加了类型系统就能提升开发者的生产力,他觉得开发者使用动态语言,然后以非侵入性方式来添加类型特性反而能提高开发效率。
于是 Sorbet 这样的方案有大佬认为是科学的了
coinbase, stripe 两家大厂出品,估计不会降低性能(运行时检查应该可以关掉)。
类型系统对于重构绝对是必须的,已经提交试用申请了