erlang虚拟机代码执行原理

erlang是开源的,很多人都研究过源代码。但是,从erlang代码到c代码,这是个不小的跨度,而且代码也比较复杂。所以这里,我利用一些时间,整理下erlang代码的执行过程,从erlang代码编译过程,到代码执行过程做讲解,然后重点讲下虚拟机执行代码的原理。

erlang代码编译过程

erlang对开发者是友好的,从erlang程序文件编译成能被erlang虚拟机识别的beam文件,在这个编译过程还对开发者暴露中间代码。借助这个中间代码,我们就可以逐步探究erlang代码的执行过程。

继续阅读erlang虚拟机代码执行原理

erlang send剖析及参数意义

erlang send是一个很基础的消息发送函数,用于进程把一个消息发给另外一个进程。这个函数可以同时用于本地节点进程通信,或者和远程节点进程之间的通信。

最近有同事遇到erlang:send导致消息堆积问题,这个引起了我的强烈关注。我也看了这块的代码,这里简单做个分享。

继续阅读erlang send剖析及参数意义

lua匹配UTF-8中文汉字

lua5.3虽然支持utf-8,但是自带的string库不支持汉字的处理,而且lua的正则实现也比较鸡肋,很难匹配中文。所以文章讨论UTF-8字符集,中文汉字的表示方法,然后说明lua如何匹配UTF-8中文汉字。

初识UTF-8

UTF-8是Unicode的一种实现,是一种变长字节编码方式。对于某一个字符的UTF-8编码,如果只有一个字节则其最高二进制位为0;如果是多字节,其第一个字节从最高位开始,连续的二进制位值为1的个数决定了其编码的位数,其余各字节均以10开头。UTF-8最多可用到6个字节。

继续阅读lua匹配UTF-8中文汉字

skynet 热更新 lua 代码

skynet开发太多数情况下只是写lua代码,很少用写c,这一定程度上提高了项目的开发效率。lua虽然没有C高效,但开发复杂业务却是非常便捷,而且lua支持热更。skynet有两种方法热更新lua代码,clearcache和inject,文章分别对这两种方法做说明。

继续阅读skynet 热更新 lua 代码