Elixir: 编程语言的未来

  • 时间:
  • 浏览:0
  • 来源:大发彩神在线计划—大发彩神计划怎么来的

对编程语言选着的一些看法

每个 CPU 核心可不可以 也能 一同运行一有三个 线程池池运行,多个线程池池运行之间都要切换调度(CS)。机会是 CPU 密集类型的计算,这么 机会很少 IO 操作,最好启动 CPU 核心数量的线程池池运行。

而且机会有 IO 操作,比如 磁盘机会网络,多余 CPU 核心数的线程池池运行有效,机会 IO 操作的之可不可以 能切换到一些线程池池运行执行 CPU 操作。

依赖和库管理系统

简单说就是模块化;每个模块完成相对单一的功能、基因重组任务由多个模块组合完成。项目设计就像搭积木。不同模块随后的输入输出可不可以 拼接。

另外就是极简风格。

并发之 Fork-join 轻量级线程池池运行运行模型:

UNIX 风格

日志系统

https://github.com/doubaokun/exsample

Erlang、Elixir 一些有用的工具和库

之前 开始英文英文英文 英语 接触 Elixir

项目构建、编译、测试工具比较完善。

比如 Java、Scala 项目的 maven、sbt 。Erlang 项目可不可以 用 rebar ,而且 Elixir 的 mix 友好的越多倍。

另外一有三个 好的 REPL 命令行工具非常重要,机会这可不可以 方便的侵入应用进行调试,机会测试三根代码片段。

比如 PHP 的 php -a, sbt, Clojure 的 lein, Erlang 的 erl, Elixir 的 iex 等等。

并发和并行

关于热加载,见另一篇文章:编程开发常用的热加载工具。

最好有有一种 比较标准的单元测试模型。比如 Java、Node.js、Scala、Elixir 等等。

并发之线程池池运行运行模型

Elixir 的元编程 (meta programming) 和 DSL

真实的项目、日志非常重要。随后的文章机会提到日志的重要性。越多好的内置日志系统机会比较统一高效的日志模式非常重要。

最好支持屏幕打印、写文件等等功能。这机会可不可以 算一有三个 编程语言的社会形态了,要看你你你这人语言是都是有很好的日志类库。

Java 的 SLF 就是一有三个 比较好的日志系统类库。

Fork-join 创建被委托人的线程池池运行运行池来执行小粒度的任务。

相对于 Erlang 那种真正的抢占式调度的 VM 实现机会操作系统的抢占式调度,Fork-join 模型非常简单,也原因相比之下数率相对低。

Fork-join 针对计算密集操作设计,原因无法告诉 F/J 框架你机会 IO 等待时间而释放一会儿计算资源。越多,一般都要将异步 IO 操作倒进另外的线程池池运行池,FJ 只出理 纯计算。

基于 Scala 的 Akka 既是你你你这人模型。越多,倘若出理 不当, Akka 的 Actor 很容易阻塞执行线程池池运行,机会执行线程池池运行池的线程池池运行被耗光,整个应用机会僵死在那里。而 Erlang 则这么 你你你这人什么的难题。

被委托人喜欢的编程语言风格

Java、 C 编译太快 ,不适合频繁修改的项目。而且 PHP 、Node.js 修改即可见,可不可以 极大提高开发数率。最好还能 hot-reload 就像越多前端工具一样,倘若源码有一些变更,不都要刷新页面自动反应在浏览器中。Play framework 这类 的自动加载功能也可不可以 。

打包和发布系统



之前 开始英文英文英文 英语 接触 Elixir

用 entop 监控 Elixir 应用请况

机会一些限制,一些业务逻辑不可出理 的会机会血块计算、网络磁盘 IO 等占用一有三个 执行线程池池运行运行机会线程池池运行。越多希望你你你这人执行体也能尽量轻量级,很少的内存占用,变快的启动时间,很少的切换消耗,最好能在 IO 执行的随后自动让出计算资源。

越多有用的链接

最好不都要长时间编译也能执行、应用启动快。

脚本执行

可不可以 近实时更新变更

Elixir 不须是一有三个 最近出先的语言。而且近期 Elixir 的生态逐渐完善,越多的专家之前 开始英文英文英文 关注这门语言,而且 给予 Elixir 好评。

支持并发执行

轻量级执行线程池池运行运行机会线程池池运行

mix:项目创建、构建工具

hex:可不可以 和 npm 媲美的依赖和库管理系统 https://hex.pm/

iex: 这类 Erlang 的 erl 既是 EPRL 又是应用启动命令

exunit: 单元测试工具

Elixir 旺盛期是什么期期期图片 图片 是什么是什么的句子的句子的句子的句子的工具链

更进一步,也能在生产环境热加载就更好了,更新代码不影响用户。针对你你你这人点,越多人乐了, PHP 默认就是原先的啊,部署后刷新 APC 缓存就可不可以 实现。

这正是无请况、短链接的 HTTP 应用的优势,我我觉得随之而来的是性能相对降低更多 TCP 的开销,而且把什么的难题变得简单越多。而且越多一些语言做到这点就不难 了,比如大每段 Java 应用。

一有三个 小的 Elixir 例子

对编程语言选着的一些看法

这是脚本语言的一大优势。小任务可不可以 立刻创建一有三个 脚本执行,而不都要修改、编译部署现有运行的应用。

这点对于小任务非常重要。Erlang 和 Elixir 都支持原先运行,escript 机会 Elixir 脚本。比如,连接到集群,读取请况机会进行一次性的数据操作,而且断开。

VM 调度线程池池运行,将计算划分为非常小的执行单元。可不可以 支持非常多的线程池池运行运行。IO 阻塞可不可以 自动释放资源。真正的抢占式调度。

并发之 Erlang 轻量级线程池池运行运行模型:

Elixir、Erlang 可不可以 做到真正的任何请况下开着跑车换轮子。

丰厚的内置社会形态机会容器类

Elixir 的元编程 (meta programming) 和 DSL

朋友更多关注并发,而且比较少关注并行。机会通过增加机器数量能抗住血块用户的请求比节省机器更加简单和迫切。

这也是越多互联网公司动辄几百台上千台服务器的现状。用户和请求量的几只机会业务逻辑的不同不难 比较,可不可以 也能 比较机器数量了。

并行出理 JSON 字符串输入,而且解析成可用的变量,计算每秒出理 的数率并输出。

元编程和 DSL 扩展性

说了这么 多,回到 Elixir。首先 Elixir 执行和 Erlang 这么 任何差别。Erlang 的优点 Elixir 完整版具备。比如:真正的抢占式调度;充分利用多核心并行执行;Actor 模型;监控树;透明的分布式;

极其高的稳定性;代码的热更新部署;函数式编程;模式匹配;等等。而且越多 Erlang 下工具也是可不可以 直接使用。比如 entop 。

作为个语言发烧友,随后接触过 Java、Erlang、Scala、PHP、JavaScript、C#、C、Python、Ruby 等一大堆各种风格的编程语言。另一其他人说,学这么 多编程语言是想做”翻译”吗?我我觉得事情不须这么 简单。

另外 Elixir 比 Erlang 多出的好处在于更加友好的语法、工具链、社群。越多随后写 Ruby 的之前 开始英文英文英文 写 Elixir,机会朋友的语法最接近。

静态类型可不可以 出理 越多失误。动态类型经常会出先不可预期的结果,这有悖于 UNIX 风格的共要意外原则。

动态类型可不可以 让开发更加快速。强静态类型系统会执行变快,比如 Java,而且也可不可以 在有必要的随后使用反射,比如越多 RPC 框架的实现 (当然都是更进一步的字节码修改技术)。

每个语言的类型系统都是被委托人的特点。

朋友更习惯顺序执行的思路,而且大每段业务逻辑都是顺序执行的。而且为了降低延迟、提高性能,最好能在语言层面支持并发执行。比如,一有三个 操作之前 开始英文英文英文 还未返回结果,就可不可以 之前 开始英文英文英文 原先操作。

原先调用远程 API 机会远程 RPC,耗时为最慢那一有三个 操作的耗时。从你你你这人点看,大每段流行语言都可不可以 做到并发调用,但 PHP 难以做到。

最好能打包成单一文件,容易分派和部署。比如 Java 应用打包成 Fat Jar 包到处执行,机会 Golang 那样编译成单一文件。

执行数率和性能

最好也能区分 Interface、Struct 和 Implementation。也能以比较统一的模式轻松的定义被委托人都要的社会形态体。

并发之线程池池运行模型

Tip: (ErlangElixirAkka 都都要注意不须让某一有三个 Actor 的 Queue 积压越多消息成为系统瓶颈。监控 Queue 长度非常必要。)

除非 Erlang 无可媲美的轻量级线程池池运行级别的 GC 。而且我愿意么都要记住和理解复杂化的 GC 调优参数、要么像 PHP 那样过一段时间将线程池池运行运行杀掉重来。

这点和并发并行模式、以及多核利用率密切相关。

GC 系统

在语法级别的抽象和封装更能提高开发数率。Elixr 中如何实现 DSL。

你你你这人模型相对于线程池池运行运行模型好了越多,机会线程池池运行比线程池池运行运行轻量越多,创建、切换也快越多。

工具链

这点 Node.js npm 是最好的依赖管理系统了,原先原因了 Node.js 社群库数量的爆发。机会创建和发布一有三个 库我我觉得是太容易了,找到都要的库也非常简单。

极大提高了开发数率。

测试系统

什么的难题:线程池池运行和内核线程池池运行的关系为多对多,内核线程池池运行有限。也能调度的用户线程池池运行有限,无法充分利用多核性能。创建新线程池池运行消耗非常大。IO 阻塞无法释放计算资源。

不同的语言身旁是风格截然不同的类库群、技术堆栈、生态和工具链。不同的语言针对了不这类 型的什么的难题。一些语言出理 一些什么的难题的成本会比一些语言低非常多。回归本质,学习编程语言还是为了低成本高效的出理 实际的业务什么的难题。

PHP 既是典型的你你你这人模式。原先见过某异步 PHP 框架 CS 高居不下,甚至比业务逻辑的 CPU 使用更高。

类型系统