平台特性
可伸缩
所有Elixir代码运行于相互隔离的轻量级线程中,相互间通过message通信:
由于它们的轻量特性,在同一台机器上同时运行数十万个进程并不少见。隔离允许独立地对进程进行垃圾收集,减少系统范围内的暂停,并尽可能高效地使用所有机器资源(垂直扩展)。
进程还可以与同一网络中不同计算机上运行的其他进程通信。这为分发提供了基础,允许开发人员协调跨多个节点的工作(水平缩放)。
容错性
关于软件运行在产品环境的一个无法避开的真相:总是会出错,加上网络、文件系统及其他第三方资源的问题会更多。.
为了应对各种失误,Elixir提供了supervisor - 描述当事情变得扭曲时如何重启你的系统的某些部分,返回已知的能保证正常运行的初始状态:
语言特性
函数式编程
函数式编程提升了编码风格、帮助开发者写出简短、快速及可维护的代码。例如,模式匹配允许开发者轻易就能结构数据并访问它的内容:
当你想加入guard时,模式匹配允许我们优雅的匹配与声明某些代码执行的特定条件:
Elixir强烈依赖那些特性,来确保你的软件运行于预期的约束下。如果没有,也别担心,supervisors会支持你的!
可扩展性 和 DSLs
Elixir被设计成了可扩展的语言,让开发者自然的扩展语言到特定领域,以便增加他们的生产力。
举个例子,让我们使用Elixir的测试框架-ExUnit来写个简单的测试用例:
async: true
选项允许测试运行在并行模式,尽可能使用更多的CPU核,同时断言函数可以内省(introspect)你的代码,提供失败情况下的强大报告。那些特性是用Elixir的宏来构建的,让其可以添加新的结构并作为语言本身的一部分存在。
工具特性
发展中的生态系统
Elixir发布了整套工具来简化开发。 Mix是一套build工具,它让你很简单的就能创建项目、管理任务、运行测试以及更多:
Mix is also able to manage dependencies and integrates nicely with the Hex package manager, which provides dependency resolution and the ability to remotely fetch packages.
交互式开发
像IEx (Elixir的交互式shell)能提供语言和平台各方面的特性,如自动完成、调试工具、代码重新载入、良好格式化的文档: