从 C# 开发者角度看 Elixir 概述

最近,我发现了一种名为 Elixir 的编程语言。Elixir 被描述为一种动态的、函数式语言,用于构建可扩展和可维护的应用程序

语法

Elixir 的语法与 Ruby 非常相似。要开始一个新的代码块,你会使用 do...end,并且它没有 return 关键字(这让我一开始有些困惑),因为它总是返回最后一个语句的结果。

不可变性

Elixir 的另一个重要特性是不可变性。每次你修改一个对象时,实际上是克隆它并对其进行更改,这使得它在并发环境下非常安全。另一个小提示是,当你讨论列表时,Elixir 默认使用链表,你应该将新数据添加到列表的前面,因为前置操作是常数时间复杂度(我认为是 O(1)),而追加操作较慢(我认为是 O(N))

模式匹配

Elixir 最有趣的功能之一是模式匹配。它允许你根据参数的值执行不同的代码,例如:

def do_something(1), do: :foo
def do_something(0), do: :bar
def do_something(a) when is_integer(a) and a > 2 do: :foo2
def do_something(a) when is_integer(a) and a < 0, do: :ba2
def do_something(_a), do: :unknown

从上面的代码中可以看出,根据输入的不同,我们会得到不同的输出,从而消除了 do_something 内部的 if 判断。这类似于 C# 的方法重载,但功能更强大

动态语言

我并不太喜欢动态语言,因为我不清楚参数、变量或属性的具体类型。想象一下,我有一个名为 DoSomething 的方法,它接收一个参数,那么这个参数是什么类型呢?是字符串、整数还是对象?动态语言给我的印象是开发体验不够友好。我大部分时间都在使用 C#,只有少数时候接触过 JavaScript 和 Python,因此对动态语言的经验不多。不过,我很喜欢 Elixir 解决这个问题的方式:它正在实现一个类型系统,你可以通过注解为代码添加类型信息,同时 Elixir 会尝试通过上下文和守卫(guards)推断类型

@spec do_something(integer()) :: { :ok }
def do_something(a) when is_integer(a) do
  { :ok }
end

Beam 虚拟机

Elixir 构建在 Erlang/Beam 虚拟机之上。Beam 虚拟机由爱立信开发,旨在实现可扩展性、容错性、高可用性以及热更新——这些都是我所追求的特性。简单来说,Beam 虚拟机通过“进程”(这不是操作系统进程,而是一种轻量级进程,Beam 可以快速创建)工作,这些进程通过发送消息相互通信。Beam 虚拟机可以将消息发送到另一台机器(或其他 CPU),为开发者提供了抽象层。因此,在开始时,你不需要队列或流系统来实现扩展。

结论

Elixir 有许多优秀的特性,BEAM 虚拟机也非常强大。遗憾的是,它并不是一种主流语言(可能是因为没有大公司的支持),因此没有得到应有的关注。我会继续撰写更多关于 Elixir 的文章

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值