skynet 1.6.0

1,185次阅读
没有评论

最近半个月,因为广州防疫政策,我一直居家办公。找了点时间,给 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...
“昆山杯”第二十七届清华大学创业大赛决赛举行

“昆山杯”第二十七届清华大学创业大赛决赛举行

“昆山杯”第二十七届清华大学创业大赛决赛举行 一水 2025-12-22 17:04:24 来源:量子位 本届...
MiniMax海螺视频团队首次开源:Tokenizer也具备明确的Scaling Law

MiniMax海螺视频团队首次开源:Tokenizer也具备明确的Scaling Law

MiniMax海螺视频团队首次开源:Tokenizer也具备明确的Scaling Law 一水 2025-12...
天下苦SaaS已久,企业级AI得靠「结果」说话

天下苦SaaS已久,企业级AI得靠「结果」说话

天下苦SaaS已久,企业级AI得靠「结果」说话 Jay 2025-12-22 13:46:04 来源:量子位 ...
最新评论
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.
热评文章
摩尔线程的野心,不藏了

摩尔线程的野心,不藏了

摩尔线程的野心,不藏了 量子位的朋友们 2025-12-22 10:11:58 来源:量子位 上市后的仅15天...
摩尔线程的野心,不藏了

摩尔线程的野心,不藏了

摩尔线程的野心,不藏了 量子位的朋友们 2025-12-22 10:11:58 来源:量子位 上市后的仅15天...
AI体育教练来了!中国团队打造SportsGPT,完成从数值评估到专业指导的智能转身

AI体育教练来了!中国团队打造SportsGPT,完成从数值评估到专业指导的智能转身

AI体育教练来了!中国团队打造SportsGPT,完成从数值评估到专业指导的智能转身 量子位的朋友们 2025...
AI体育教练来了!中国团队打造SportsGPT,完成从数值评估到专业指导的智能转身

AI体育教练来了!中国团队打造SportsGPT,完成从数值评估到专业指导的智能转身

AI体育教练来了!中国团队打造SportsGPT,完成从数值评估到专业指导的智能转身 量子位的朋友们 2025...
真正面向大模型的AI Infra,必须同时懂模型、系统、产业|商汤大装置宣善明@MEET2026

真正面向大模型的AI Infra,必须同时懂模型、系统、产业|商汤大装置宣善明@MEET2026

真正面向大模型的AI Infra,必须同时懂模型、系统、产业|商汤大装置宣善明@MEET2026 量子位的朋友...