(José Valim and Aaron Patterson)
@josevalim是我很崇拜的一位,自 2010 年加入 Rails Core 之后,到现在是 Rails 代码提交量的第二名(仅次于@dhh),Plataformatec 的 Co-Founder,@josevalim也是 Devise 和 SimpleForm 等 gem 的主要作者,最特别的是他还是一门编程语言的作者(Elixir)。
这个演讲来自于 2011 GoldenGateRubyConf,@josevalim通过在编写 Elixir 解释器是遇到的问题,向观众解释了 Ruby 语法的一些特别之处,大概包含如下内容:
关于 Elixir:
Elixir 是一门运行在 Erlang VM 上的编译型的函数语言,拥有 Ruby 的语法,Haskell 的 Pattern,Clojure 的 Protocol,Erlang 的 Actor,Elixir 的代码最终编译为 Erlang VM 字节码,由 Erlang VM 执行,所以 Elixir 和 Erlang 的二进制代码可以不加修改的互相调用。
jose 从 2011 年初开始开发 Elixir,但到 2011 年底时 jose 发现 Elixir 的很多的地方偏离了 Erlang(当初 jose 想将 Elixir 设计成一门 OOP 语言),之后 jose 和@wycats重新起草了一份名叫 Lego 的语言规范 https://github.com/josevalim/lego-lang ,该语言规范最终成为现在 Elixir 语法的基石。
Elixir 在语言之外有些特别之处:
具体的语言细节可以参见官方网站以及 Github:
http://elixir-lang.org/ https://github.com/elixir-lang/elixir
Elixir 现在已经是一门可以实际使用的语言,不过由于开发过于迅速,API 变化的十分频繁,据 jose 本人所说,今年年会有一个 Stable 版本发布(那时候 Dave Thomas 的书也会正式发售),大家到时候可以去尝试一下。
#4 楼 @blacktulip Scala 与 Java,Elixir 运行在 Erlang VM(Beam?) 上,Scala 运行在 JVM 上。
#4 楼 @blacktulip 第一句的回答是 No,第二句应该是 Yes,因为我不是很了解 Scala。
Coffee 是 Java Script 的语法糖,他没有对语言本身进行扩展,Coffe Script 和 Java Script 本质上是同样的东西,你不能在 Coffee Script 上做 Java script 不能做的事。Coffee Script 被编译为 Java Script,但是 Elixir 并不会被编译为 Erlang,如果把 Coffee Script 看做 Java script 的超集,那么 Elixir 和 Erlang 是算是交集,因为 Erlang 和 Erlang VM 本身也是两个东西。
Dave was excited about Elixir, in the introduction to his new book he says:
I came across Ruby in 1998 because I was an avid reader of comp.lang.misc (ask your parents). I downloaded it, compiled it, and fell in love. As with any time you fall in love, it’s difficult to explain why. It just worked the way I work, and it had enough depth to keep me interested.
Fast forward 15 years. All that time I’d been looking for something new that gave me the same feeling.
I came across Elixir a while back, but for some reason never got stuck in. But a few months ago I was chatting with Corey Haines. I was bemoaning the fact that I wanted to find a way to show people functional programming concepts without the kind of academic trappings those books seem to attract. He told me to look again at Elixir. I did, and I felt the same way I felt when I first saw Ruby.
额...
rubyrogues 最近也有个 elixir 的 episode 诶 http://rubyrogues.com/114-rr-elixir-with-jose-valim/
peepcode 上也有教程了https://peepcode.com/products/elixir 社区里 1 年前就有人关注http://ruby-china.org/topics/796 几年过去了,Elixir 有杀手级应用吗?
#10 楼 @camel 应该说还没有,Elixir 现在的开发重点都在语言本身上,Dynamo 可以用,但是和语言一样一样是 unstable 的状态。相比当时的 0.4,现在的版本号为 0.10.1,有了许许多多的提升 http://elixir-lang.org/blog/categories.html#releases
Erlang 跑分直逼 PHP,不比 Ruby 更差,但也好不了多少。 感觉语法搞成那样还要编译成 beam,性能搞不好有不小损失。 目测不出来语法和 Erlang 有啥区别,就多了几个控制流语句。
http://benchmarksgame.alioth.debian.org/u64q/benchmark.php?test=all&lang=erlang&lang2=yarv&data=u64q
现在就觉得 erlang 在打包部署上比较麻烦 (那个 rebar 总是有各种小问题),我只需要把这个问题简化一下就行了 (比如用 rake)。elixir 也很好,可是我不觉得有特别的价值
#25 楼 @bhuztez 可以看看这个 http://elixir-lang.org/crash-course.html
不一样的地方还是有的,比如 Macros http://elixir-lang.org/getting_started/5.html
#22 楼 @bhuztez jose 自己说希望 Elixir 用于 Web,像 Ruby 和 Python 一样,而不是 Erlang 大量的用于交换机,电话网络这方面。希望可以把 Erlang 在 Web 上的优势发挥出来,还有就是 jose 认为 Erlang VM 很好,但是 Erlang 语言的语法设计的很烂,具体可以参见 9 楼的 podcast。
#24 楼 @jonny 语言本身都不是问题,还是方法和思想的问题,Ruby 也有 Actor 的库,基于 Fiber 实现的 https://github.com/celluloid/celluloid Sidekiq 就是基于 Celluloid 比较成功的项目。
Erlang 也不是不可以,只是原生提供的方式比较 tricky 而已。而且,直接生成 beam 也不是不可以么。
http://www.erlang.org/doc/man/erl_id_trans.html
Erlang 语法的设计是相当好的,比很多语言都要好的多,要把 Erlang 的语法设计的很烂是一件非常难的事,Erlang 可是从 Prolog 演变过来的。说 Erlang 语法很烂的说明还没理解 Erlang。