论坛首页 综合技术论坛

ERlang的语言特点及可以借鉴的东西,思考中。

浏览 10037 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-01-10  
初步考虑了三个主要特点
1)FP+特殊的并发模式
2)多种数据结构+数据结构随意组合支持
3)类是规则匹配的实现

1)FP+特殊并发模式
其最终结果是系统的鲁棒性,这在许多领域尤其是嵌入系统非常重要。
如果单实现这部分是否可以编译为目标机器码?

2)List等数据结构和c及其它静态语言的List不同,在于数据结构中元素的可以是多种类型,以及各种数据结构的组合,所谓程序=数据结构+算法的等式中,同样的目标程序,有了这么灵活的数据结构支持,算法当然要灵活得多,也自然得多。隐约中这个等式中数据结构和算法的界限似乎模糊起来。目前没有想到有什么办法用静态语言实现。

3)如果不是稍微有了解一些prolog,是不会体会到匹配的妙处。如果仅仅是使用一点正则表达式,不足为奇。但同样的技术使数据(消息)直接发言。但我认为这个用静态语言同样可以实现,用t1的话说不就是消息分派吗。

以上3条,我最考虑(非欣赏之类)第一条。我记得我看的第一本印象深刻的IT书就是《编写无错的c语言程序》,第一条目的很明确,这个目的不是用一些巧劲可以解决的,而是需要反复研究,千百次实验总结出来的。
2)和3)也很好,有些欣赏。但不是必须的。举个例子说(这可能会得罪人),最简单的做法是,你可以用这种方式去思考,去验证。到最后实现的时候可以用c代码去翻译,就好比用E语翻译古文,第一次难点,费点劲,只要项目组不缺人(一般程序员即可)。

   发表时间:2007-01-14  
经过再次思考,第二点是有可能实现的
对于数据结构中的每个元素在赋值后其类型是确定的,因此可以在编译时期确定。如果用静态语言实现可以通过宏替换等方法实现其中的一些功能。
0 请登录后投票
   发表时间:2007-01-24  
helloworld 写道

    所谓程序=数据结构+算法的等式中,同样的目标程序,有了这么灵活的数据结构支持,算法当然要灵活得多,也自然得多。隐约中这个等式中数据结构和算法的界限似乎模糊起来。目前没有想到有什么办法用静态语言实现。


如果你更深入的使用过Erlang,你会发现这句话反过来说也是非常有意思的:Erlang的一贯理念是数据和算法需要彻底分离,而面向对象语言的传统设计理念却是数据算法紧耦合.


0 请登录后投票
   发表时间:2007-03-28  
回帖专用 写道
helloworld 写道

    所谓程序=数据结构+算法的等式中,同样的目标程序,有了这么灵活的数据结构支持,算法当然要灵活得多,也自然得多。隐约中这个等式中数据结构和算法的界限似乎模糊起来。目前没有想到有什么办法用静态语言实现。


如果你更深入的使用过Erlang,你会发现这句话反过来说也是非常有意思的:Erlang的一贯理念是数据和算法需要彻底分离,而面向对象语言的传统设计理念却是数据算法紧耦合.



Erlang的一贯理念是数据和算法需要彻底分离.
应该说 函数式语言的理念就是数据和算法需要彻底分离吧?
0 请登录后投票
   发表时间:2007-03-28  
以上是我猜的.没学过什么函数式语言没看过什么函数式的东西.
先记着SICP
0 请登录后投票
   发表时间:2007-03-28  
c语言算不算 数据和算法需要彻底分离 的语言?如果是为什么和Erlang的好象又不一样呢?如果不是,那怎么不是?
0 请登录后投票
   发表时间:2007-03-28  
Erlang 写道
c语言算不算 数据和算法需要彻底分离 的语言?如果是为什么和Erlang的好象又不一样呢?如果不是,那怎么不是?


觉得c和FP确实有一些相似的地方,比如define,比如指向函数的指针.
0 请登录后投票
   发表时间:2007-03-31  
有一篇文章:关于C的函数型编程

大概的意思就是: c里面不支持模式匹配、不一定支持尾递归的优化,还有不支持fun(是不是就是lambada),还有就是要自己加GC,还有不知道了
0 请登录后投票
   发表时间:2007-04-01  
Erlang 写道
有一篇文章:关于C的函数型编程

大概的意思就是: c里面不支持模式匹配、不一定支持尾递归的优化,还有不支持fun(是不是就是lambada),还有就是要自己加GC,还有不知道了


呵呵,c 代码太bt了,指针就象孙悟空,变换无穷.
0 请登录后投票
   发表时间:2007-04-02  
Erlang 是一个比较有意思的语言,兼具"程序既数据","数据算法分离"两种特性.所谓的程序既数据,是对Erlang的函数来说的,因为Erlang是FP,所以他的函数可以当作数据来使用.
比如说
   Fun=fun(x,y)->x+y end.
   list:fold(Fun,0,[1,2,3,4,5])
而"数据算法分离"则是对于Erlang的数据存储来说.考虑如下java代码

class exmaple
{
  public int  age;
  public String name;
  public boolean gender;
  public example(int _age,boolean _gender,String _name)
{
    age=_age;
    name=_name;
    gender=_gender;
}
 
  public void print_info()
{
   System.out.println("Name:"+get_name()+",Age:"+get_age()+",Gender:"+get_gender());

public int get_age()
{
  return age;
}
public String get_name()
{
  return name;
}

public boolean get_gender()
{
  return gender;
}

}

exmaple ex=new exmaple()
从某种意义上来说,对象ex就是一个把数据,DML(getter function),算法(print_info)的捆在一块的内存数据库,而类example就是这个数据库的shceme.
相同一个需求,如果用Erlang 来写的话.你就会发现,Erlang的数据不会与算法捆绑在一起,而是有专门存储数据的数据库ets/menisa来存放数据.然后通过类似SQL的数据库存取API来访问数据,将内存中的算法Apply到数据上得出结果再将数据写回数据库.
这样一大好处就在于分布式应用的情况下,内存数据不会因为算法的bug而导致丢失,一个节点的crash以后其内存映像能够非常快的迁移到另外一个节点上.这个特性在OO语言上是非常难以实现的.
0 请登录后投票
论坛首页 综合技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics