› Developing:

关于对slua两次挑衅的被逼回应&ulua真实性能测试报告

› 恭喜蒙哥的cstolua新版发布,ulua一开始从AssetStore上面的一个收费开源lua热更新小插件,发展到今天被各大游戏公司争相使用的热更新技术,真的离不开各位的使用与贡献,我先介绍下ulua吧,好像只有我介绍比较合适,因为我是一年前花钱买了ulua后,在国内第一个引用到商业游戏里面《Q灵三国》的,并且把它从一个默默无名的小插件变得如此之庞大的使用社群。ulua的组成部分是luajit(免费开源)+LuaInterface(免费开源)+luawrap.c(作者添加些函数),然后稍微修改后就上传到AssetStore收费开源了。98%的代码都是免费开源的,我不知道luajit的原作者跟luainterface的原作者看了以后会不会气炸了,也不知道是不是迫于开源精神道德压力,还是什么原因,至少ulua原作者最后1.03版本的时候,也就不更新,我倒是想问问,拿着开源的代码去卖的是否合法?既然开源了嘛,我们感觉老外还算厚道,至少给我们机会源码去扩展并且完善它。作者也应该能想到会有人去这样做。

问几个问题,为啥要改ulua?答案是他已经不能满足用户要求(反射效率慢+众多移动平台不支持(iOS64/安卓x86/WP平台)),不改就没法用了嘛。那好,我们改了以后应该以一种什么形式存在呢?是换个名字xxLua上Assetstore跟ulua抢用户厚道?还是直接开源厚道?(至少大家要用嘛)大家很清楚我们选择了后者,虽然slua作者说ulua原作者会气死,我觉得至少比slua山寨ulua把luainterface+lua源码继续包起来拿到Assetstore跟ulua抢用户厚道吧?因为你跟ulua原作者抢生意去了,断了人家财路,他不气你?

上面已经开始提到slua这货,这货首次发布介绍文章是2015年1月14日,而我们游戏使用上线,接触ulua应该是2014年3月,我在Unity圣典发ulua文章是2014年4月,2014年6月建ulua技术交流群,当时跟刚认识的大C、蒙哥讨论,建议有人做静态化调用,提高效率。(当时L#作者李建英在我群里都可为证,因为我建议他去做,可惜他钟情于c#light,后来蒙哥去做了而已)发布第一版SimpleFramework框架是在2014年7月,而蒙哥发布cstolua首版应该是2014年的9月,半年时间怎么没看到你slua“亮瞎狗眼的率先原创发布”呢?酝酿了半年才发布?还是忘记了?还是没完成?毕竟cstolua发布几个月后,你才发!!

从一上来就纠缠着、死咬着、叫嚣着什么比ulua快一百倍,你怎么不说相差一万亿倍呢?都是同一份luajit、luavm源码,能差距100倍?你这忽悠别人的牛逼吹大发了吧?ulua不怕别人来较量(代蒙哥说),从去年热更新较早的c#light(L#)、Scorpio-Sharp、nlua时代,一直有人拿ulua做对比,我们并不介意,因为ulua很火,那为啥今天要写这么多文字来回应下呢?首先,他们虽然也是竞争关系,但是他们的劳动的确是原创的,多少个日日夜夜的技术攻克,是值得我们尊重的竞争对手!你敢说slua完全在ulua、cstolua之前就架构设计上的原创?不否认cstolua也借鉴了原来其他技术的设计概念,但是在unity平台,他是绝对的首创!!多少人看了代码都跟我说,这货敢情直接copy的蒙哥的cstolua设计架构,底层库是ulua的方式,静态代码绑定是cstolua的方式,后来我在群里试探说它不支持反射,相当于个太监,没有性生活,因为不能“射”了嘛,果然又给加上了个CreateClass。甚至后来有人发现只要cstolua这边一修复一些luainterface的bug,slua马上就有相同的修复,你是蒙哥肚子里蛔虫?思维这么高度统一?这么多历历在目的证据你敢说你没抄?是借鉴,可以吧?可以!如果是借鉴,不管从架构设计还是代码copy,都要向前辈致敬,而不是踩着前辈的身躯上位,得瑟的说:“看,这货没我牛逼!我比他牛逼100倍!”这一点做人的道理,我替你妈提醒下你!!

都说旁观者清,连slua用户都认为你道义是错的,了解真相的人评价最客观。也就是有些人用你东西,觉得你人性不行!!!群里的人一边用着你的东西,心里却觉得你人性不行,真不知道你做何感想??还是你根本不在乎旁人鄙视你的目光。我都替你感到悲哀!!以彼之道还施彼身,为啥要感激一个恶意攻击我们的人?

虽然cstolua早就存在了,现在的cstolua已经把原来ulua的代码都剔除了!!我们就算是跟slua一样学习了一遍ulua,然后重新做了个cstolua行呗?slua也是看了ulua之后做出来的嘛~你能仿照,我们为啥不行?你没代码copy?你LuaDLL里面不就是把原来的ulua改成了slua?有何脸面指责他人?但我还是一直以ulua称呼其存在(只有我自己还这么叫它,为了感激ulua原作者给我们带来的贡献),为啥,Unity插件版本仍以ulua_v1.xx.unitypackage命名,为啥?这就是你缺少的那一份基本道德,我没办法替ulua原作者收费(网上就有免费下载,后面很多优化方案都是群里同学合力完成的,毕竟这不是ulua原作者的贡献,我虽然作为群主但没权利把他们分享的知识商业化,然后返利给ulua原作者),国内又那么多免费用户,你当时不就是其中一个?

(我国《计算机软件保护条例》2001年1月1日开始实施。该条例第二十四条规定:软件的最终用户,包括任何单位和个人未经软件著作权人许可,使用盗版软件即为非法!!!)你Unity是不是正版的?给个凭证呗,请问你去年用的ulua给钱了嘛?有没有购买单据截图?拿收费版权理由出来,自己却不花钱买,本身就不遵守版权法的人,违法的人有什么脸、什么资格指责别人版权意识,故意的没事挑事,典型的人身攻击嘛!! 还有,slua能从一发布就拉着ulua秀速度、优越感,凭什么ulua就不能了?你管得着吗?切~还好意思拿这条来指责,我真想不通,还能找出更好的理由来吗?你指责的跟你有毛关系,关用户毛事?每个理由都是强词夺理、无中生有、人身攻击、恶心行径令人发指。cstolua本身就是从ulua演化来的,我承认。slua没抄?有什么资格说cstolua(我觉得c#light到是有资格,但是你没有资格^0^)?你是国家广电、还是文化部版署的?

NGUI在国内有几个付费的?到处都在免费下载,国家都没管,你急个啥!真是皇帝不急太监急,你怎么不去帮NGUI作者收收费?现在做Uniy热更的有谁不知道有个ulua,这叫饮水思源,懂不懂!没想到我们的道义竟然被当做把柄来回侮辱,在你眼中只有重新自己抄一份、彻底换个名字才算是合法????从一开始就用诋毁ulua,抬高自己的方式博得别人眼球,让朋友来群里刷屏拉用户(我群规不允许营销或者宣传,你找的人违反我们群规,自然按照群规处理T掉),这种事情你做的出来,我没让人去你群里干这种龌蹉的事情吧?还在”知乎“忽悠拉用户、在微博被骂骗子的2货有什么脸,什么资格说别人阴暗?你比谁不阴暗?如果说起源,也是你半年前纠缠挑起的。这些都合乎你家礼仪道德?谁教你这样做人做事的?一个抄ulua却指责我们无奈修改的下三滥二货,不以为耻反以为荣,纯人品问题!

› 接下来说技术,说实话我没看过slua代码,全部都是别人告诉我的,slua如何如何,又怎样怎样了(我只是个转述者而已,听错或者记错都非常正常),我代替用户问几个问题,在社群同学说他们lua配置较高大概有56M,循环创建大量GameObject之后直接lua堆栈崩溃了?你目前的luainterface.call怎么也有gc allc呢?你怎么说是0呢?你在每一帧的Physic.Raycast不用valueType有泄漏,每一帧的累计,你造吗?你的可选参数数组,隐藏着类型匹配问题,会遭致用户数据错乱,你的slua用户小伙伴造吗?我腾讯的技术朋友也就看了下代码就发现隐藏问题29处之多(4处要命,11处重要,14处一般),这些你都告诉你的slua用户小伙伴造吗?cstolua为了稳定做了大量的类型检查,而你为了那一丁点儿的提升,一直在裸奔,致小伙伴项目安全于不顾,你这样做真的好吗?你的小伙伴们造吗?不否认你的lua很熟,做了大量小细节修改,但是c#,unity真的做过实战项目吗?对Unity引擎深层次的问题,真的了解吗?是不是可以这样可以解释你没办法用lua写完所有valuetype的代码,而鼓动别人去偷取cstolua的实现部分?对引擎的坑都不了解的话,写的东西真的贴近引擎吗?这样的东西真的没风险吗?

效率问题,你不是觉得不屑于lua源码实现valuetype还瞧不起protobuf-lua-gen、csjon、pbc、sqlite之流嘛,本文做一个你的见证,看你最后食言不食言,等你食言的时候大家也就看清你的操行了。借用你一句话,别“不服来辩”了,每句话都暴露你博上位的企图,咱们不服来测!!!看你还要继续抄cstolua的优化策略不~~若还抄,用一个山寨货干嘛不用首创原版来的直接?

本来这些我们没准备文字化来说,平时谁都有些小毛病,如果只是单纯效率对比,我们看的多了,宣雨松的C#light也跟ulua对比过,我们也没说啥吧?半年前slua第一次做对比,我们更没说啥。在群里吐吐槽,实在不行骂两句,是吧,过去就过去了,slua作者非不,在上个月非要在博客上文字化骂我们道德不行吧、阴暗吧,把平时群里的吐槽提升到隔空人身攻击,有兴趣的人可以对比下博文时间。目前对于我们来说,走的每一步都是被逼的!cstolua作者蒙哥是个低调的人,是个老实人,真正的技术大咖,不愿意替自己申辩,请不要欺负老实人,被人这么挑衅,兄弟们看不过去,那这些算是替蒙哥跟兄弟们说些从道德到技术上的心里话吧,都骂到我们头上了,还不算挑衅?我们被逼得没办法,是个有血性的汉子,至少都得回应一次吧。要不就太怂B了!!!

严正声明,蒙哥是cstolua作者,我骏擎CP是ulua群主,非同一人,包括在slua群里面的Chiuan,还有其他兄弟,我们都是去年10月一起把酒言谈的兄弟。你要不是故意的捏造”马甲“,也可以向他求证他亲眼见到的是不是一个人。若你不在乎,那就是故意的找借口、故意诽谤、故意人身攻击而已。劝你一句群众眼睛是雪亮的,把别人当傻逼的人往往是傻逼。所以我都实事求是。非要捏造个马甲,故意显得别人阴暗,岂不知那么多知道真相的人,怎么看你这个装逼的,你不是要较量嘛?没问题,做优化蒙哥+其他兄弟上,写文章玩文字,我陪你,大家各自分工,你高兴,我无所谓!!!

使用你的测试脚本,取各自最新版。
1)属性的读取和设置

local start = os.clock()
for i=1,200000 do
local v = transform.position
transform.position=v
end
print(“test1/lua ” .. (os.clock() – start));

2)成员方法的调用

local v = transform.position
local t = os.clock()
for i=1,200000 do
v:Normalize()
end
print(“lua cost time: ” .. (os.clock() – t));

3)静态方法调用并返回

local t = os.clock()
for i=1,200000 do
v = Vector3.Normalize(v)
end
print(“lua cost time: ” .. (os.clock() – t));

4)纯属性设置

local v = transform.position
local t = os.clock()
for i=1,200000 do
transform.position=v
end
print(“lua cost time: ” .. (os.clock() – t));

5)构造valuetype并返回

local t = os.clock()
for i=1,200000 do
v = Vector3(i,i,i)
end
print(“lua cost time: ” .. (os.clock() – t));


真实的数据(单位:秒)

cstolua  : slua

1) 0.2    : 0.26

2) 0.3    : 0.93

3) 0       : 0.15

4) 2       : 2

5) 0.45  : 0.62

另外附上使用slua群的朋友(黄琰,小陆slua框架贡献者)的测试结果:

本来不想把朋友的名字打出来,怕他夹在中间为难,既然你以为我们是伪造数据,那看下slua群里黄琰的测试数据吧。不要为难我兄弟,这只是真实数据而已。

ulua/cstolua全面领先slua,这才是真实数据!

补一句:不在乎lua核心效率、堆栈安全、周边库效率的继续用slua,我看挺好!!^o^