Elixir是一种运行于Erlang VM上的函数式、具有元编程特性的动态语言。它拥有灵活的语法和强大的宏系统,还具备模式匹配、通过协议(类似Clojure的方式)支持多态等功能;继承了Erlang的优点,尤其适合开发并行、分布式,以及高容错应用。Erlang之父Joe Armstrong也对Elixir赞赏有加。213年11月份左右,Elixir设计者José Valim接受了《程序员》专访,分享了他在设计这门语言时的感悟。其中José谈Elixir的设计目标一部分很有价值,特摘录过来「以飨读者」:
《程序员》:请详细谈谈Elixir的设计目标。
José Valim:我希望Elixir和Erlang将能共享相同的字节码和数据类型。这意味着开发者可以同时拥有Elixir的表达力,以及Erlang具备的高可靠性和高性能。
Elixir的设计目标可以概括为兼容性、高效率和扩展性这几部分。
刚已谈到兼容Erlang VM是Elixir的目标之一,当我们谈到Erlang这个词,可以将它分解为下面三部分:
- 一种函数式编程语言Erlang;
- 一系列设计原则,称为OTP;
- Erlang虚拟机,称为EVM或BEAM。
Elixir与Erlang运行在同一种虚拟机上,并兼容OTP。不仅如此,所有Erlang生态系统中使用的工具和库,Elixir也能使用,因为在Erlang中调用Elixir没有任何性能代价,反过来也是如此。
所有Elixir代码在轻量级进程中运行,包含自己的状态,用于彼此交换信息。Erlang VM将这些进程分配到多个处理器核心中,使代码可以轻松地并行执行。
如果你编译Elixir代码,会发现CPU中的所有核心都在开动。当像Parallella(www.parallella.org)这种技术变得更容易获取且成本更低廉时,你很难忽视Erlang VM所能提供的强大能力。未来ErlangVM将会被用来搭建能永久运行、能自我修复和扩展的系统。
效率很难测量,能高效开发桌面应用的编程语言却可能在数学运算领域捉襟见肘,它与你期望从事的领域、生态圈中的可用工具,以及是否能方便地创造和扩展这些工具有关。
基于这种原因,我们选择了简约的语言核心。在许多编程语言中,if、case、try这些关键词都需要专门的语法分析器,而Elixir中只有宏。这样做的好处之一是,开发者可以自己扩展语言,以适应他们自己的工作领域。宏还是Elixir元编程的构建
基础:有通过代码生成代码的能力,令开发者能摆脱烦琐的工作,创造出更强大的工具。
宏也对语法有巨大的影响,前面已经提到。尽管许多关于语言的话题一开始就会讨论语法,但在Elixir身上,从未将“简单地提供另一种不同语法”作为它的目标。
尽管基于简洁的语言核心,开发者可以构建和扩展针对自己领域的语言。但Elixir还继承了擅长并行和分布式应用的特点。在这些领域,Elixir补充了下面一些标准库:
- Unicode字符串和相应的操作
- 强大的单元测试框架
- 更多数据类型
- 多态记录
- 严格和惰性枚举API
- 便于脚本操作的函数,例如路径和文件系统
- 用于编译和测试Elixir代码的项目管理工具
还有更多库、模块、协议等便于扩展的特性。
回到今天的新闻,Alchemist实现了将Elixir函数式编程语言的相关工具集成到Emacs编辑器中。
Alchemist v1.0发布,该团队声称这次更新是一次巨大的进步,带来了诸多新特性,主要包括:
- 强大的IEx集成;
- Mix 集成
- 编译和执行Elixir代码
- 内联inline代码评量
- 文档查询
- 定义查询
- 智能代码实现
- Elixir项目管理
- 集成company-mode
功能改进:
- [Server] Implement a server which runs as background process for each mix project or one for project independent work.
- [Completion] Use the server background process for all the completion related functionality.
- [Goto] Use the server background process for all the go to code definition related functionality.
- [Eval] Use the server background process for all the inline code evaluation related functionality.
- [Help] Use the server background process for all the documentation lookup related functionality.
- [Completion] Functions of modules which are used inside a context with use or importwill be completed.
- [Goto] Handle Erlang syntax specific aliases
- [Completion] Use the company-mode specific functions for doc and location lookup The functionality to open the doc and jumpt to location for the current selected completion candidate is now called through the proper company-mode functions.
- [Goto] Improvement of symbols for one line definitions.
改变:
- [Project] remove .alchemist setup file. There is no need anymore for controlling the compiling in special cases.
- [Project] remove legacy alchemist-project-open-tests-for-current-file function
Bug修复:
- [Help] Fix wrong message about not existing doc
- [Goto] Fix regex for jumping to functions inside file
- [Goto] Fix issue that jumping to functions inside file without function parentheses
- [Goto] save-excursion have to be used to restore the last position informations afterparse-partial-sexp call.
下载
发布说明:Alchemist v1.0 is released! – Elixir Tooling Integration Into Emacs