初识elixir

本文介绍了作者初识Elixir的过程,强调了它作为一门面向函数的动态语言,具有高可扩展性和高可维护性。Elixir运行在Erlang虚拟机上,擅长构建分布式、高容错系统。尽管其语法对C/C++程序员可能较为陌生,但它的轻量级进程特性使其在高并发场景下表现出色。作者分享了自学Elixir的经历,并计划分享更多学习心得。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

初识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的特性。因为我是自学的,在这当中因为之前没有接触过函数式编程语言所以真的走了很多弯路,不过现在好了,总算是说可以顺利利用这么门语言去解决实际问题了,所以现在也想吧自己的一些学习经验写下来,一方面是当自己的学习总结,另一方面也是为了能够让自己的经验可以帮助到更多的人!分享学习经验是利己利人的^^

Table of Contents 第⼀部分:基础 Introduction 基础集合Enum 模块 模式匹配 控制语句 函数管道操作符 模块(Module) Mix 魔符(Sigil) ⽂档模块 测试推导字符串 ⽇期和时间 ⾃定义Mix任务 IEx辅助函数 第⼆部分:⾼级 1 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 2.10 2.11 2.12 2.13 2.14 3.1 3.2 3.3 3.4 4.1 4.2 4.3 和Erlang互操作 错误处理 可执⾏⽂件 并发OTP并发 OTP Supervisors OTP 分布式 元编程 Umbrella Projects Specifications and types ⾏为GenStage 协议Nerves 第三部分:ECTO Basics Changesets 关联关系 查询第四部分:专题 Plug 嵌⼊的 Elixir(EEx) Erlang 项式存储(ETS) 2 4.4 4.5 5.1 5.2 5.3 5.4 5.5 5.6 Mnesia 数据库 调试第五部分:程序库 Guardian(基础) Poolboy Benchee Bypass Distillery(基础) StreamData 3 Introduction 绪⾔第⼀部分:基础 基础集合Enum 模块 模式匹配 控制语句 函数管道操作符 模块(Module) Mix 魔符(Sigil) ⽂档模块 测试推导字符串 ⽇期和时间 ⾃定义Mix任务 IEx辅助函数 第⼆部分:⾼级 和Erlang互操作 错误处理 可执⾏⽂件 并发OTP并发 OTP Supervisors 4 Introduction OTP 分布式 元编程 Umbrella Projects Specifications and types ⾏为GenStage 协议Nerves 第三部分:ECTO Basics Changesets 关联关系 查询 第四部分:专题 Plug 嵌⼊的 Elixir(EEx) Erlang 项式存储(ETS) Mnesia 数据库 调试 第五部分:程序库 Guardian(基础) Poolboy Benchee Bypass Distillery(基础) StreamData
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值