[Erlang 0063] Joe Armstrong 《A Few Improvements to Erlang》EUC 2012

  
  EUC(Erlang User Conference)2012上Joe Armstrong的演讲主题是: 《A Few Improvements to Erlang》,很惊喜!!!因为Joe Armstrong提到的问题,我一直保持关注,而且他提到的前面两种方法我都实践过, : )
 
Note:下面的截图来自Joe Armstrong的演讲稿,下载地址: http://www.erlang-factory.com/upload/presentations/594/armstrong_erl2.pdf

第一种方法:多加一个参数

当时解决问题的思路就是:" 如果要达到我们的目标,要把尾递归要执行的当前方法作为参数传进去"
 
我写的第一篇,没有好的思路纯粹是在Shell中试出来的: [Erlang 0050]用fun在Erlang Shell中编写尾递归 (2012-03-24 22:08)

 

第二种方法:Y Combinator

第一种方法总是感觉怪异,主要是感觉语法噪音过多,于是一直关注寻找看是否有别的解决方案,找到了Y Combinator的方法
 
 
 

 

Erlang 未来的解决方案

通过引入一个新的关键字def(类似 Haskell的define ),新的解决方案将是下面这样的:
 

  
  Joe Armstrong紧接着解释了,上面解决方案只是表面现象,根源上这是由于 Forms and Expressions的分歧造成的:Erlang Shell是一个Expression计算器;而我们的erlang模块是有Form序列构成的,编译器会把这些Form序列编译成目标文件(object file).Forms和Expressions的差异见下图:
 

 
     换言之,在模块文件中和在Erlang Shell中的代码行为是不一致的,def的引入就是在语法层面做了小小的改动,让我们的Erlang代码在 shell, modules, and escript中表现尽量一致.这个目前依然在进行中的项目被Joe Armstrong成为 erl2  地址: https://github.com/joearms/erl2 之前总结微软.net framework演变历程的时候发现语言和框架发展日趋完善对项目级开发的各种支持也愈发完善,Erlang的这个变化应该也属于这一类.
 
 
按照Joe Armstrong的描述,erl2除了解决了上面的问题之外还提供了一种元编程的方式,来解决项目代码的各种定制,之前
What is Erlang II?
An erlang generator - running the command
erl2 File.erl2 creates one or more erlang modules.
Don’t mess with Erlang. Write a program that writes programs.
erl2 programs create erl1 programs
erl3 programs create erl2 programs
Metaprograming!
 
 不过我还是想发自心底的想问前辈:什么时候把Unicode的问题统一了啊?
 
更多精彩,点击这里:
 
 
看来要继续努力了,加油!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值