skynet v0.2.0 发布
按原计划, 我今天给 skynet 的 github 仓库 打上了 v0.2.0 的 tag 。
这个版本增加的主要特性是组播 。其它都是对已有代码的整理。
虽然 skynet 只有不到三年的历史,但已经有不少历史包袱了。最早的 skynet 是用 erlang 实现的,在 erlang 中编写了一个 C driver 然后在里面嵌入 lua 虚拟机。设计 skynet 的 C 接口时,也没有经过实际项目的使用,有许多设计不当的地方。
有一些后来觉得不应该放在核心层的东西被实现在了核心内,一些本应该在底层提供的设施被放在了很高层实现。
还有一些小特性几乎没有被使用过,但却增加了整体实现的复杂度。
调整这些历史造成的设计需要一点点来,v0.2.0 向前迈了一步。
这次简化了 skynet 在 bootstrap 流程上花的代码量,且把它变成可定制的。这样,skynet 多节点网络的组网也被尽力分离出来了。这可以让我在未来多考虑一下更好的 skynet 网络的设计。
另外,还简化了 lua 服务的加载预处理的流程,把许多原本在 C 里实现的代码移到了 lua 代码中。
skynet 的异常处理的方法在底层被慢慢固定下来,寻找一个简单的异常传播方案花了我不少的时间。希望这次的方法是一个更好的选择。上次的 monitor 方案加的太仓促,贸然去掉它又会影响许多已有的项目,所以还需要慢慢寻找调整的方法。
目前,skynet 的一些核心层之上,业务层之下的基础服务基本固定下来。在未来的版本里,我会多考虑一下这些基础服务的设计。并可以在此之上开发更多的工具。
值得高兴的是:这次的这些改变,没有增加整体代码的复杂度,反而去掉了上百行 C 代码。这符合我所信奉的设计哲学:保持实现的简单、更甚于简洁的接口。