初识elixir
这个时代编程语言遍地开花,能在茫茫语言海洋中使用一个语言也算是一种缘分,当然这不是巧合而是必然,是多核CPU时代的必然functional programing!
我使用elixir已经有一年多了,为什么现在才写这个文章?其实一开始我对这个语言是抗拒的,因为我的入门语言是C而且是嵌入式C,后来在此基础上又接受了面向对象的编程思想。当时真的以为这个面向对象就是完美的,因为相比C的面向过程来讲,面向对象的代码管理实在是太棒了!当我初次面对elixir我是嗤之以鼻的,为什么?因为与C类(编程风格)来讲这个语法还有编程思想真的是能让人发疯,当然如果你接触过ruby或者你本来就是erlang的一员,那么你应该有种相见恨晚的感觉。好了让我们切入正题!
elixir是为了能够轻松构建易于扩展的易于维护的应用而产生的一门面向函数的动态语言,高可扩展性和高可维护性是elixir所标榜的(这个后面会详细介绍),elixir运行于erlang虚拟机上(低延迟的分布式的高容错性的系统)就是那个和jvm一样变态稳定的虚拟机。
current_process = self()
# Spawn an Elixir process (not an operating system one!)
spawn_link(fn ->
send current_process, {:msg, "hello world"}
end)
# Block until the message is received
receive do
{:msg, contents} -> IO.puts contents
end
以上是摘自官方的一段代码,可以感受下elixir的语法,直接拷贝这段代码到iex(elixir的repl)中就可以看到hello world的输出了,但是生产者和消费者并不在一个进程中,所有的elixir代码都运行在轻量级的线程中,elixir称之为进程(elixir的进程不同于操作系统进程比之轻量)。得益于这样的轻量特性,在同一台机器上并发成千上万的进程也不是问题(但是有一点需要注意这样的并发并不是说elixir可以在数据计算上或是运行速度上快于C这样的编译型语言,只是说elixir为的是能在高并发下保持事物处理的正确性和快速的响应,事实上elixir并不善于数据计算这一点可以在之后考证)。我们知道对于操作系统而言线程是内存共享的,而进程是独立的,这也就保证了垃圾回收的独立性,和减少全系统的暂停并且可以更高效的利用系统的全部资源。对于elixir的这种轻量级进程的好处我们之后还要做更详细的介绍。
好了这片开始的文章就写到这,我也迫不及待的想要介绍更多的关于elixir的特性。因为我是自学的,在这当中因为之前没有接触过函数式编程语言所以真的走了很多弯路,不过现在好了,总算是说可以顺利利用这么门语言去解决实际问题了,所以现在也想吧自己的一些学习经验写下来,一方面是当自己的学习总结,另一方面也是为了能够让自己的经验可以帮助到更多的人!分享学习经验是利己利人的^^