- 标签
- elixir
- 标签动态
Elixir是跑在Erlang vm上的一门新语言,有着灵活的语法,又兼具了Erlang的并发,性能,稳定性。是一门非常值得学习的语言。作者是José Valim,从2011年开始开发,Elixir已经可以实际使用了。 可以看看Erlang作者...[ 百科 ]
在编辑抽象语法树(AST) 的时候, 我们经常需要遍历整个结构, elixir 标准库中提供了两种遍历方式. 举个例子, 有这样一个 AST: {代码...} quote 后的数据结构是这样: {代码...} 用图像表示的话, 大概就是这样, 有很...
在 elixir 中常用的数据结构都是不可变(immutable)的,也就是每次修改实际上是在内存中新建一个数据。不可变数据的好处是可以避免副作用,方便测试,减少bug。缺点也很明显,就是速度慢。
这里第二个 foo 的地方应该是 foo 这个函数本身被递归调用,然而这个时候 foo 的定义还没有完成。没关系,遇到不知道的东西,就把它作为参数吧。
网络上有很多有趣的编程题库,其中 Advent of code 近几年收到越来越多人的关注。原因是题目很有趣,结合圣诞节主题,在圣诞节前的25天每天一题。另外不限制编程语言,只需要输入正确答案即可。每做出一题还会得...
要从一次线上的内存泄漏说起. 最终定位到在异步send方法中, monitor了被调用进程, 而又没有释放, 导致泄漏. 违反直觉的是, 这个泄漏是双向的, A monitor B后, A会记录 monitors B, B会记录 monitored_by A. 进程A...
mix.exs 添加依赖 {代码...} 配置 ejabberd application config/config.exs {代码...} 下载官方示例配置文件到 config/ejabberd.yml[链接]编译 {代码...} openssl 问题 {代码...} openssl [链接]设置环境变量 {代...
回调(callback)是编程中经常会用到的一种模式,在 elixir 中我们通常通过假定一个些模块里面包含了一些符合特定函数签名的函数定义,或者说这个模块实现了某种 behaviour,来进行回调编程。这种编程模式的好处...
在 beam 虚拟机里,进程之间一般通过消息传递来沟通,而消息传递是需要复制而非共享的。在消息体积小,且只在少量的进程之间传播时,是没有什么性能问题的。而如果我们需要在大量进程之间共享大量的数据,那么消...
在上一篇文章中我们通过 erlang 的 trace 功能了解到了打印字符串是通过消息传递来完成的。那么,同样是属于 IO,写入文件是否也是通过消息传递呢?
互联网产品往往要面对突如其来的巨大请求量,而后端业务能够支持的并发请求数量是有限的。常用的架构是首先让请求进入消息队列,例如 Kafka,RabbitMQ,GooglePubSub 等等。同时后端服务最为消费者分批地从消息队...
经常阅读 ljzn(就是在下)的专栏的朋友们可能知道,他平时最爱两样技术:beam虚拟机和 bitcoin网络。究其原因,可能是两者都在追求构建一个永生的网络集群。目标类似,那么实现方法一定会相似,我们现在就来盘点...
当你生来是一个beam虚拟机里的进程,你所熟悉的一切是在这个世界上,每个进程可以相互收发消息。你所不知道的事是,每个进程并不是同时执行的,而是由调度器进行调度。
我们知道几乎每个编程语言都会有打印输出的函数,elixir也不例外,常用的有 IO.puts, IO.inspect, IO.write 等等。 然而你是否知道, 这些函数都可以在增加一个参数在第一位,从而选择不同的IO设备进行读写。
平时使用 iex 进行调试时经常会遇到需要重新打开 iex 的情况,这时候刚才输入的历史内容就全部丢失了。那么如何让 iex 保存历史记录呢?
很早之前就对 WebSocket 协议非常感兴趣,今天有空时看了一下 RFC6455, 发现其实是一个很简单的协议。于是尝试着实现了一个客户端。这里摘取一些关键部分的代码。