String ID (SID)是开发游戏常用到的工具
主要是当作在游戏中存取素材(asset look-up)的钥值(key)
基本上就是把字串用杂凑值取代
最近开始计画撰写游戏程式系列文
对SID的需求迅速演变成一个独立专案...
https://github.com/TheAllenChou/string-id
主要的好处有:
- 每个SID使用的内存量是固定的(取决于杂凑值的型别)
- SID之间的比较是constnat-time
- 一般用SID当作存取素材的key比用字串当key有效率
- SID若实作成编译时期常数,则可以用作switch case,字串则不行
- 动态将SID串接字串生成新的SID是linear-time,且不需要原SID之对应字串
主要的坏处与解决方式:
- SID较难除错,因为其本质是杂凑值
一般的做法是另外做个数据库,储存SID与对应字串的对照表
然后再做个debugger外挂,让watch window显示对应字串
有了这些应变措施之后,SID除错起来就跟一般字串没两样
- 因为SID是杂凑值,会有两个字串产生相同SID的可能性(杂凑碰撞, hash collision)
遇到这种状况,要嘛额外实作解决杂凑碰撞的机制,要嘛改变其中一个字串
杂凑函示选择恰当和运气好的话,杂凑碰撞的机率不高
(公司十年来还没碰过SID杂凑碰撞,所以一直还没有实作解决方式XD)
我的SID专案进度是已经有可以实用的SID
但是还在开发除错用的数据库和debugger plugin
开始撰写游戏程式系列文的预订日无限推延中...