-
Notifications
You must be signed in to change notification settings - Fork 253
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
tag的作用和map的实现上面不太理解 #53
Comments
现在能达到描述数据结构的需要,不会改。 |
我以前是做金融的,金融传输用FAST协议所以我不太喜欢json这种自描述的,习惯有一份模板就处理数据 |
可能我说的不清楚就是我写了一个测试包 3个段,因此pbc和我的bitstream都调用c 3次-4次,sproto只调用一次encode,发现效率绝大部分都消耗在调用上面,注释掉代码时间大概也就降低到7s,这块大的性能消耗相关资料和优化手段我需要深入研究下,如果有资料介绍给我非常感谢~~~~~ |
划分清两个语言的边界是非常重要的。性能应该放在第二位。 所以,应该尽量减少 FFI 调用。 |
感谢你的建议我也看了你5.3的中文文档,对我这个初学者很有帮助
另外sproto源码我看了然后昨天做了一次改版,里面有几个不太理解
1.tag的作用?除了实现option的功能外,是否还有其他用途?
2.map支持的局限性,是否考虑增加通用类型map?
目前我是改版支持任意类型的map结构不一定依赖于struct,以及里面的key定义(我们的项目中很多定义是 key 到 基础类型 的map)
另外修改lpeg使用C的struct定义,这样我觉得更能表示他和c的关系(其实也是为了偷懒,复制粘贴二进制的协议定义,支持字节对齐1,2,4,8,string,vt和map)
主要了解下map的以后发展,另外如果可以的话是否这样实现的通用类型map是否会有其他问题
encode{
...
if (args->index > 0) {
...
if (args->m_pMapKeyType > 0) {
...
lua_pushvalue(L, self->iter_index);
--根据类型读取key值
lua_pop(L, 1);
}
}
...
}
decode{
...
if (args->index != 0) {
...
if (args->m_pMapKeyType > 0){
//map,先压入key
lua_Integer v = *args->m_pMapKeyValue;
lua_pushinteger(L, v);
}
}
...
if (args->index > 0) {
if (args->m_pMapKeyType > 0)
{
//map
lua_settable(L, self->array_index);
}
else
{
//array
lua_seti(L, self->array_index, args->index);
}
} else {
lua_setfield(L, self->result_index, args->tagname);
}
}
主要是lua这里实现是否会引发其他问题?
The text was updated successfully, but these errors were encountered: