由于目前项目中使用的语言是C#,而C#在IOS上只能以AOT方式执行,那么热更新就是一个非常棘手的问题。
为此我这里开源一个自己的.NET 解释器。
当前C#热更新的主要貌似有同仁实现过,好像有个C#SCRIPT(非标准C#)ILScript
后面的ILscript的实现和我目前的思路一致,直接解释执行IL CODE。同时依赖于现有的.net运行库,尽可能的不要全部都解释执行,如一些不需要热更新的部分,框架底层,网络层,IO层,通常这些代码会被大量使用,不太容易出现非常严重的问题。而一般引起问题的都是一些业务逻辑。所以我实现的解释器只解释执行一部分代码,而另外一部分还是原生执行。
但是这个解释执行有个非常大的问题,就是NATIVE代码(对于解释执行代码)来说,如何把一个解释层的虚拟对象与NATIVE代码中的对象对应,以及NATIVE代码的VIRTUAL CALL(在NATVIE代码执行时不能插入代码)。
目前这两个问题在代码中都能初步解决,具体原理嘛,大家先看代码,以后可能会开个系列文章,来说说怎么样实现一个.NET解释器。
代码仓库:https://github.com/dotnetscript
代码在DEVELOP分支中,大家有兴趣的话可以看看,对于其他IL解释器方案,目前的实现基本可以完美实现跨NATIVE层继承、交互,完整的泛型支持,ASYNC/AWAIT支持,另外异常支持也基本完成,但还没有完全测试,另外在解释代码中不能使用TYPE或者GETTYPE这种,这个会以后慢慢加进去。
大家有什么问题多多留言吧,互相交流!
原文:http://www.cnblogs.com/gamedevboy/p/5634659.html