`
wenjixiao
  • 浏览: 184341 次
社区版块
存档分类
最新评论

erlang的优秀之处

    博客分类:
  • tech
阅读更多
erlang是我见过的最简洁和实用以及符合直觉的语言。
现在,我大略的总结一下。

1,模式匹配
模式匹配是erlang的基础,在用erlang的时候,必须得时时在脑中有匹配的概念。
赋值,分支,函数,提取都要用。
变量的一次性赋值也是在这个概念下的。

2,基本的数据类型
number<atom<reference<fun<port<pid<tuple<list<binary
一共9种,上边我是默写的,无觉得应该把这些东西背下来。
我发现,我背下来的东西越多,我就越觉得erlang越少,越简洁。

3,语句
if
   pattern ->
   pattern ->
end

case something of
    pattern ->
    pattern ->
end

try something of
    pattern ->
    pattern ->
catch
    pattern ->
    pattern ->
after
    something
end

begin
    something,
    something
end

receive
    pattern ->
    pattern ->
end

上边这些就差不多了。
事实上,从函数式的观点上看,可以根本就不需要什么语句块神什么的,这些语句都可以以函数的方式来实现。当然,如果那样的话,你使用的时候也要用函数调用的方式,那就不美了。
而erlang这样,不多不少的几个语句,刚刚好。

上边的三点就是erlang的基础了,注意啊,我也是初学,别追究太多。


剩下的就是一些细节。
1,list
list的重要性,我想学过点lisp的都有数,所以,我不想多说了。因为我还得学呢。
2,函数引用和高阶函数
这个最重要了,必须得搞清楚fun这个东西,搞不清楚可就不fun了。
函数式程序设计之所以能行,也就是因为这个了。
3,bif
也就是内建函数了,要不怎么说erlang优雅呢,简单的几个语法,加上几个内建的函数接口,你可以想象用c实现这些函数应该是多么的明了。
erlang环境虚拟机的概念非常的清晰。
4,异常
三类,throw,exit,error,记住这个就差不多行了。
常用的是throw;exit是进程退出时用的;error是系统的内部不可预测的错误。
5,进程和并发
我们可以看到,pid作为数据类型存在了。
而erlang的多进程合作是用几个内建函数实现的,基本上,spawn,send,receive。
至于link什么的,也差不多吧,我也还不太明确。也就是多记住几个函数的问题。
6,otp
基本上不懂,我搞不清楚它是用模板替换的方式,还是用函数调用的方法搞的。
不过,即使用的时候也不必知道它是怎么做的,直接用就行了。
我有总想刨根问底的恶习。
7,宏
就是替换了。
8,尾递归
函数式嘛,不可避免的。
所以,必须的想法习惯。
我还有障碍。

大致差不多了。
我今天写这些不过是想坚定一下我的信心。
而且这些东西也可以在某些时候,我会查查看看,因为我会忘的。
=========================================================
9,并发,错误处理,分布式
并发——进程
错误处理——link,退出信号,系统进程
分布式——node

10,断言和断言序列
fun(X) when somesthing ->
这种函数的定义,加强了模式匹配的功能,这种对模式匹配的加强是非常必要的,不能没有的。而且,这种断言可以是很多个,且有and和or的组合。我原来也觉得光模式匹配确实是有毛病,只是不知道在哪里,现在的when断言,刚好弥补了模式匹配的不足。我也不知道是不是弥补好了,感觉好像差不多了。但是,什么地方有when这样的guard呢?基本上,除了if都可以加。
分享到:
评论
17 楼 mryufeng 2010-04-04  
Erlang语言成分在整个otp平台20%的分量都不到 所以他的核心不是语言 讨论偏了
16 楼 七猫 2010-04-02  
mlzboy 写道
fkpwolf 写道
学习functional language还是haskell正宗,个人感觉

它的优秀之处在哪,能否举个它做的很好,别的语言实现起来不太方便的例子


我也想问这个,毕竟语言是拿到做事的,要是纯漂亮,啥用也没有
15 楼 mlzboy 2010-04-02  
fkpwolf 写道
学习functional language还是haskell正宗,个人感觉

它的优秀之处在哪,能否举个它做的很好,别的语言实现起来不太方便的例子
14 楼 java_wei 2010-04-02  
高手是个概念  优秀也是个概念  我看你也在炒概念
13 楼 dandy 2010-03-30  
fkpwolf 写道
学习functional language还是haskell正宗,个人感觉

haskell太难了!
12 楼 fkpwolf 2010-03-29  
学习functional language还是haskell正宗,个人感觉
11 楼 mryufeng 2010-03-28  
你说的这些 是erlang语言最基本的特性 其实不算是优秀之处 什么语言都有的...

真正的优势的地方是在于进程的独立性和可预测管理性, 很容易抽象出现实世界的模拟...
10 楼 wenjixiao 2010-03-27  
mlzboy 写道
wenjixiao 写道
erlang是我见过的最简洁和实用以及符合直觉的语言。

它很好用吗,你觉得python怎么样

对于高手来说,什么语言并不是问题。
遗憾的是,我不是高手。
erlang我只是从概念分析上觉得很喜欢,我的程度还远远不够。
python我确实也用过,我觉得它太乱了,什么都有,什么都行。
这样的话,它是行了,我就不行,我迷糊了。
9 楼 mlzboy 2010-03-27  
wenjixiao 写道
erlang是我见过的最简洁和实用以及符合直觉的语言。

它很好用吗,你觉得python怎么样
8 楼 langzhe 2010-03-26  
<div class="quote_title">approach 写道</div>
<div class="quote_div">
<p>以前couchdb的作者写过一篇抱怨erlang语法的文章,可以看看:
<br><br><a href="http://ziranxi.com/blog/201003-erlang-16.html">What sucks about erlang</a></p>
<div class="quote_title">hittyo 写道</div>
<div class="quote_div">erlang 最麻烦的就是代码段结束符,分号/逗号/句号/无符号,头都大了,每次调试这块花了很多时间,不知是不是我个人的问题.</div>
<p>你推荐的文章中提到了 erlang没有变量 ,LOL 这是erlang天生的优点,“变量不变” 省去了 锁</p>
<p> </p>
</div>
<p> </p>
7 楼 tianshiyeben 2010-03-26  
hittyo 写道

目前尝试erlang IDE解决

头像不错 
6 楼 laser_lu 2010-03-26  
erlang的思想和架构值得学习。不过语言本身比较麻烦。。开发和调试的效率实在不高。。
java方面目前有个Netty框架不错,plurk.com用它做comet server,比较轻松得达到单机10万长连接,4核cpu占20%,已经相当不错了。不知道这里有没有对Netty以及java的高并发方面比较熟悉的高手?希望能够多交流:)
5 楼 hittyo 2010-03-25  

目前尝试erlang IDE解决
4 楼 approach 2010-03-25  
<p>以前couchdb的作者写过一篇抱怨erlang语法的文章,可以看看:
<br><br><a href="http://ziranxi.com/blog/201003-erlang-16.html">What sucks about erlang</a></p>
<div class="quote_title">hittyo 写道</div>
<div class="quote_div">erlang 最麻烦的就是代码段结束符,分号/逗号/句号/无符号,头都大了,每次调试这块花了很多时间,不知是不是我个人的问题.</div>
<p> </p>
<p> </p>
3 楼 wenjixiao 2010-03-25  
我也有这样的问题,有点头大,我觉得还是学的不太仔细的问题。
2 楼 hittyo 2010-03-25  
erlang 最麻烦的就是代码段结束符,分号/逗号/句号/无符号,头都大了,每次调试这块花了很多时间,不知是不是我个人的问题.
1 楼 langzhe 2010-03-25  
支持一下加油

相关推荐

    esl-erlang_16.b.3-1~windows_amd64.exe

    erlang作为一个小众语言,在分布式存储表现优秀,框架开源,为一些小型公司使用,也有中型公司使用,后端开发也有一席之地

    yajler:Erlang NIF 使用 yajl 库对 json 进行编码和解码

    基于优秀书籍 Erlang 和 OTP in Action 第 12 章中的 NIF 示例的简单 json 编码和解码。 这个实现的目的是在不丢失任何语义的情况下尽可能简洁地用 Erlang 术语表示 JSON。

    精品资源-springboot-rabbitmq-master项目.zip

    开源、性能优秀、稳定性较高 与SpringAMQP完美的整合、API丰富 集群模式丰富、表达式配置、HA模式、镜像队列模式 保证数据不丢失的情况下,做到高可用 AMQP全称:Advanced Message Queuing Protocol AMQP翻译:高级...

    公理-基于Erlang / Elixir和Akka的优点,为Rust实现高度可扩展且符合人体工程学的actor系统-Rust开发

    Rust语言基于多年来在Akka和Erlang中Actor模型实现中获得的许多经验教训。 但是,Axiom并不是上述两个参与者模型中任何一个的直接重新实现,而是一种新的实现,其从这些项目的优秀部分中获得了灵感。 2019-12-19 ...

    支持netlogo在editplus下语法加亮的文件

    netlogo是优秀的多主体仿真平台。netlogo自带的编辑工具功能有限,且对中文的支持有限。我在netlogo下编程,主程序不得不用自带编辑器,其他程序段另建文件保存,在主程序中引用。这样可以用editplus进行编辑。为...

    Sublime_Text3

    SublimeText2支持但不限于 C, C++, C#, CSS, D, Erlang, HTML, Groovy, Haskell, HTML, Java, JavaScript, LaTeX, Lisp, Lua, Markdown, Matlab, OCaml, Perl, PHP, Python, R, Ruby, SQL, TCL, Textile and XML 等...

    Sublime Text

    ST2 拥有优秀的代码自动完成功能 (自动补齐括号,大括号等配对符号;自动补全已经出现的单词;自动补全函数名),非常智能;另外 ST2 也拥有代码片段(Snippet)的功能,可以将常用的代码片段保存起来,在需要时随时...

    Sublime Text 3 优化版.7z

    SublimeText支持但不限于 C, C++, C#, CSS, D, Erlang, HTML, Groovy, Haskell, HTML, Java, JavaScript, LaTeX, Lisp, Lua, Markdown, Matlab, OCaml, Perl, PHP, Python, R, Ruby, SQL, TCL, Textile and XML 等...

    SublimeText 3中文版

    SublimeText支持但不限于 C, C++, C#, CSS, D, Erlang, HTML, Groovy, Haskell, HTML, Java, JavaScript, LaTeX, Lisp, Lua, Markdown, Matlab, OCaml, Perl, PHP, Python, R, Ruby, SQL, TCL, Textile and XML 等...

    Sublime Text编辑器

    SublimeText2支持但不限于 C, C++, C#, CSS, D, Erlang, HTML, Groovy, Haskell, HTML, Java, JavaScript, LaTeX, Lisp, Lua, Markdown, Matlab, OCaml, Perl, PHP, Python, R, Ruby, SQL, TCL, Textile and XML 等...

    Sublime Text 2.rar

    SublimeText2支持但不限于 C, C++, C#, CSS, D, Erlang, HTML, Groovy, Haskell, HTML, Java, JavaScript, LaTeX, Lisp, Lua, Markdown, Matlab, OCaml, Perl, PHP, Python, R, Ruby, SQL, TCL, Textile and XML 等...

    Sublime Text 2.0

    ST2 拥有优秀的代码自动完成功能 (自动补齐括号,大括号等配对符号;自动补全已经出现的单词;自动补全函数名),非常智能;另外 ST2 也拥有代码片段(Snippet)的功能,可以将常用的代码片段保存起来,在需要时随时...

    Sublime Text中文版

    ST2 拥有优秀的代码自动完成功能 (自动补齐括号,大括号等配对符号;自动补全已经出现的单词;自动补全函数名),非常智能;另外 ST2 也拥有代码片段(Snippet)的功能,可以将常用的代码片段保存起来,在需要时随时...

    Sublime Text 2 汉化

    ST2 拥有优秀的代码自动完成功能 (自动补齐括号,大括号等配对符号;自动补全已经出现的单词;自动补全函数名),非常智能;另外 ST2 也拥有代码片段(Snippet)的功能,可以将常用的代码片段保存起来,在需要时随时...

    dotnet-基于EasyNetQ操作RabbitMQ的Demo项目

    RabbitMQ是一个由erlang开发的基于AMQP(Advanced Message Queue)协议的开源实现。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面都非常的优秀。是当前最主流的消息中间件之一。

    SMQTTX 开源MQTT服务器.rar

    SMQTTX是基于SMQTT的一次重大技术升级,基于Java开发的分布式MQTT集群,是一款高性能,高吞吐量,并且可以完成二次开发的优秀的开源MQTT broker,主要采用技术栈:reactor3、reacotr-netty、netty、ignite等开源软件...

    yar:Elixir 的另一个 Redis 客户端

    它不是优秀的 Erlang 客户端的包装器,它是在 Elixir 中使用 (它本身是 Erlang 的gen_tcp的包装器)从头开始实现的,用于 TCP/IP 通信。 这个项目可能还没有准备好投入生产,但我非常感谢任何反馈和错误报告。 ...

    Python操作rabbitMQ的示例代码

    在易用性,扩展性,高可用性上表现优秀。使用消息中间件利于应用之间的解耦,生产者(客户端)无需知道消费者(服务端)的存在。而且两端可以使用不同的语言编写,大大提供了灵活性。 中文文档 安装 # 安装配置...

    springboot-rabbitmq:RabbitMQ的简单介绍,安装及与SpringBoot集成内置高可用的消息传递方案

    开源,性能优秀,稳定性较高 与SpringAMQP完美的整合,API丰富 具有丰富的模式,表达式配置,HA模式,纳入规模模式 保证数据不丢失的情况下,做到高可用 AMQP全称:高级消息队列协议 AMQP翻译:高级消息子系统协议 ...

    神级代码编辑软件(Sublime Text 3) 3083 汉化 绿色 注册版

    SublimeText2支持但不限于 C, C++, C#, CSS, D, Erlang, HTML, Groovy, Haskell, HTML, Java, JavaScript, LaTeX, Lisp, Lua, Markdown, Matlab, OCaml, Perl, PHP, Python, R, Ruby, SQL, TCL, Textile and XML 等...

Global site tag (gtag.js) - Google Analytics