skynet 1.6.0

1,170次阅读
没有评论

最近半个月,因为广州防疫政策,我一直居家办公。找了点时间,给 skynet 做了一年一度的 release 。

这次的 1.6.0 版,相比去年的 1.5.0 版,没有太大的变化。主要是平时积累的一些 bugfix 。它所依赖的第三方库,例如 Lua , jemalloc 我都更新到了最新的版本。

值得一提的是,mongo 的 driver 也更新了。因为 mongo 在最新的版本中已经淘汰了旧的 wire protocol ,如果再不更新,就无法连接新版 mongo server 了。具体讨论可以参看 PR #1649 。因为 mongo 自己的设计原因,我们无法给出一个同时兼容新老版本协议的方案。从这点来看,我个人认为 redis 的底层协议设计就稳定的多。 这么多年更迭基本不需要修改。

这些年,我一直在追踪 Lua 的更迭。我认为 Lua 的源代码是最值得一读的开源代码。作者的编码风格相当严谨,几乎每处细节都严格准循标准,而不仅仅只保证在现有环境下正确。这份严谨也并非从一开始就固有的,是这二十多年来逐步形成的。

我的硬盘上留有几乎所有 Lua 发行版的源代码,经常对比阅读。自从 Lua 在 github 上镜像了开发仓库后,我就习惯阅读它的每一个 commit ,经常能学到一些东西。

比如最近的这个:把 stack 的扩展从 free / copy / alloc 改成了 realloc 。

因为 realloc 可能会移动内存,引用 stack 内的地址的指针需要重新计算。如果以我通常的做法,求出新老地址的偏移量,然后加在新地址指针上就好了。

但是 Lua 的作者选用了另一种方案:在 realloc 生效之前,将指针转换为 stack 的 offset ;realloc 之后再转换为新指针。它这样做的原因是:

In ISO C, any pointer use after the pointer has been deallocated is undefined behavior. So, before the reallocation, all pointers are changed to offsets, and after the reallocation they are changed back to pointers.

就是说,ISO C 对使用被释放的指针的行为是未定义的。这里指的是使用,而不仅仅是解引用。我相信现存的硬件上,对释放的指针地址本身做计算都是安全的,但这种正确性从标准来说,还是属于未定义的行为。

记得前段时间在 Lua 的邮件列表中还看到过关于指针的另一处讨论:Lua 的作者解释为什么没有用 memset 0 初始化包含有指针的数据结构。他说,从标准的定义看,NULL 未必是数值 0 。所以必须用 = NULL 去初始化指针。

最近半个月,因为广州防疫政策,我一直居家办公。找了点时间,给 skynet 做了一年一度的 release 。

这次的 1.6.0 版,相比去年的 1.5.0 版,没有太大的变化。主要是平时积累的一些 bugfix 。它所依赖的第三方库,例如 Lua , jemalloc 我都更新到了最新的版本。

值得一提的是,mongo 的 driver 也更新了。因为 mongo 在最新的版本中已经淘汰了旧的 wire protocol ,如果再不更新,就无法连接新版 mongo server 了。具体讨论可以参看 PR #1649 。因为 mongo 自己的设计原因,我们无法给出一个同时兼容新老版本协议的方案。从这点来看,我个人认为 redis 的底层协议设计就稳定的多。 这么多年更迭基本不需要修改。

这些年,我一直在追踪 Lua 的更迭。我认为 Lua 的源代码是最值得一读的开源代码。作者的编码风格相当严谨,几乎每处细节都严格准循标准,而不仅仅只保证在现有环境下正确。这份严谨也并非从一开始就固有的,是这二十多年来逐步形成的。

我的硬盘上留有几乎所有 Lua 发行版的源代码,经常对比阅读。自从 Lua 在 github 上镜像了开发仓库后,我就习惯阅读它的每一个 commit ,经常能学到一些东西。

比如最近的这个:把 stack 的扩展从 free / copy / alloc 改成了 realloc 。

因为 realloc 可能会移动内存,引用 stack 内的地址的指针需要重新计算。如果以我通常的做法,求出新老地址的偏移量,然后加在新地址指针上就好了。

但是 Lua 的作者选用了另一种方案:在 realloc 生效之前,将指针转换为 stack 的 offset ;realloc 之后再转换为新指针。它这样做的原因是:

In ISO C, any pointer use after the pointer has been deallocated is undefined behavior. So, before the reallocation, all pointers are changed to offsets, and after the reallocation they are changed back to pointers.

就是说,ISO C 对使用被释放的指针的行为是未定义的。这里指的是使用,而不仅仅是解引用。我相信现存的硬件上,对释放的指针地址本身做计算都是安全的,但这种正确性从标准来说,还是属于未定义的行为。

记得前段时间在 Lua 的邮件列表中还看到过关于指针的另一处讨论:Lua 的作者解释为什么没有用 memset 0 初始化包含有指针的数据结构。他说,从标准的定义看,NULL 未必是数值 0 。所以必须用 = NULL 去初始化指针。

 

正文完
可以使用微信扫码关注公众号(ID:xzluomor)
post-qrcode
 0
评论(没有评论)

文心AIGC

2023 年 3 月
 12345
6789101112
13141516171819
20212223242526
2728293031  
文心AIGC
文心AIGC
人工智能ChatGPT,AIGC指利用人工智能技术来生成内容,其中包括文字、语音、代码、图像、视频、机器人动作等等。被认为是继PGC、UGC之后的新型内容创作方式。AIGC作为元宇宙的新方向,近几年迭代速度呈现指数级爆发,谷歌、Meta、百度等平台型巨头持续布局
文章搜索
热门文章
潞晨尤洋:日常办公没必要上私有模型,这三类企业才需要 | MEET2026

潞晨尤洋:日常办公没必要上私有模型,这三类企业才需要 | MEET2026

潞晨尤洋:日常办公没必要上私有模型,这三类企业才需要 | MEET2026 Jay 2025-12-22 09...
面向「空天具身智能」,北航团队提出星座规划新基准丨NeurIPS’25

面向「空天具身智能」,北航团队提出星座规划新基准丨NeurIPS’25

面向「空天具身智能」,北航团队提出星座规划新基准丨NeurIPS’25 鹭羽 2025-12-13 22:37...
钉钉又发新版本!把 AI 搬进每一次对话和会议

钉钉又发新版本!把 AI 搬进每一次对话和会议

钉钉又发新版本!把 AI 搬进每一次对话和会议 梦晨 2025-12-11 15:33:51 来源:量子位 A...
商汤Seko2.0重磅发布,合作短剧登顶抖音AI短剧榜No.1

商汤Seko2.0重磅发布,合作短剧登顶抖音AI短剧榜No.1

商汤Seko2.0重磅发布,合作短剧登顶抖音AI短剧榜No.1 十三 2025-12-15 14:13:14 ...
跳过“逐字生成”!蚂蚁集团赵俊博:扩散模型让我们能直接修改Token | MEET2026

跳过“逐字生成”!蚂蚁集团赵俊博:扩散模型让我们能直接修改Token | MEET2026

跳过“逐字生成”!蚂蚁集团赵俊博:扩散模型让我们能直接修改Token | MEET2026 一水 2025-1...
最新评论
ufabet ufabet มีเกมให้เลือกเล่นมากมาย: เกมเดิมพันหลากหลาย ครบทุกค่ายดัง
tornado crypto mixer tornado crypto mixer Discover the power of privacy with TornadoCash! Learn how this decentralized mixer ensures your transactions remain confidential.
ดูบอลสด ดูบอลสด Very well presented. Every quote was awesome and thanks for sharing the content. Keep sharing and keep motivating others.
ดูบอลสด ดูบอลสด Pretty! This has been a really wonderful post. Many thanks for providing these details.
ดูบอลสด ดูบอลสด Pretty! This has been a really wonderful post. Many thanks for providing these details.
ดูบอลสด ดูบอลสด Hi there to all, for the reason that I am genuinely keen of reading this website’s post to be updated on a regular basis. It carries pleasant stuff.
Obrazy Sztuka Nowoczesna Obrazy Sztuka Nowoczesna Thank you for this wonderful contribution to the topic. Your ability to explain complex ideas simply is admirable.
ufabet ufabet Hi there to all, for the reason that I am genuinely keen of reading this website’s post to be updated on a regular basis. It carries pleasant stuff.
ufabet ufabet You’re so awesome! I don’t believe I have read a single thing like that before. So great to find someone with some original thoughts on this topic. Really.. thank you for starting this up. This website is something that is needed on the internet, someone with a little originality!
ufabet ufabet Very well presented. Every quote was awesome and thanks for sharing the content. Keep sharing and keep motivating others.
热评文章
预见未来:96位前沿先锋超万字核心观点总结,抢抓未来产业新高地

预见未来:96位前沿先锋超万字核心观点总结,抢抓未来产业新高地

预见未来:96位前沿先锋超万字核心观点总结,抢抓未来产业新高地 henry 2025-12-11 10:27:...
Meta公开抄阿里Qwen作业,还闭源了…

Meta公开抄阿里Qwen作业,还闭源了…

Meta公开抄阿里Qwen作业,还闭源了… Jay 2025-12-11 11:48:25 来源:量子位 Ja...
MEET2026挤爆了,AI圈今年最该听的20+场演讲&对谈都在这

MEET2026挤爆了,AI圈今年最该听的20+场演讲&对谈都在这

MEET2026挤爆了,AI圈今年最该听的20+场演讲&对谈都在这 西风 2025-12-11 15:...
钉钉又发新版本!把 AI 搬进每一次对话和会议

钉钉又发新版本!把 AI 搬进每一次对话和会议

钉钉又发新版本!把 AI 搬进每一次对话和会议 梦晨 2025-12-11 15:33:51 来源:量子位 A...