开发周记(2017/4/10-2017/4/16)

开发周记(2017/4/10-2017/4/16)_第1张图片
skia4.jpg

未来应该是属于google以及Android的世界 伟大 开放的google
我决定以后成为google的跟屁虫了
选择google的v8 js engine
选择google的skia render engine
选择google的android mobile platform
选择google的Android things embedded system
选择google的Android studio / sdk / ndk
选择google 就是选择未来!

总结:
本周是获得蛮多成果的一周:

  • 完成设计模式在UI系统开发中的应用(导读)

  • 完成设计模式在UI系统开发中的应用(实现UIPLib 上)

  • 完成设计模式在UI系统开发中的应用(实现UIPLib 下)

  • 完成设计模式在UI系统开发中的应用(UIPAnimation实现 上)

  • 完成google v8 / molliza spidermonkey / ms chakra引擎编译工作

  • 完成Nodejs v8 版以及chakra版的编译和运行工作

  • 完成v8 / spidermonkey / chakra 与 c++互调工作

  • 完成Nodejs和c++互调工作

  • 完成cario渲染引擎的编译和运行工作

  • 完成skia渲染引擎的编译和运行工作

  • 以上都是windows版中的编译工作,下周开始ios和android端进行编译,当然不是全部,仅v8 / chakra 以及skia和cario。

  • 一单技术选型确定,基本就进入开发阶段。

本周的成果源于前两周的准备,前两周的开发周记如下:

  • 开发周记(2017/4/3-2017/4/9)

  • 开发周记(2017/3/26-2017/4/2)

2017/4/10(周一):

上午:

花了一个上午,研究v8对C++包装的问题。
终于解决了一个困扰我蛮多时间的问题,非常棒的感觉,具体蛮难说清楚,等我好了后再分享。
非常棒的感觉,这样的话,现有的C++程序会非常方便的被V8所调用。

下午/晚上:

撰写设计模式在UI系统开发中的应用(导读)一文

2017/4/11(周二):

上午:

  • 完成设计模式在UI系统开发中的应用(实现UIPLib 上)
  • 完成设计模式在UI系统开发中的应用(实现UIPLib 下)

下午

  • 编译跨平台的Cario绘图引擎
  • 测试Cario引擎的性能,感觉还是稍微差了点。算了,还是选择opengl(es)吧!
  • 将以前用C++写的一个程序通过V8 C++,并入到Nodejs中去。感觉还是满爽的,不需要重新用JS来撰写,虽然研究花了不少时间,但是比重写要有趣的多了
  • 继续学习vue2.x,继续我的前后端Demo制作。
  • 明白了vue2.x中的prop单向绑定的含义及原理
  • 明白了vue2.x中slot的含义,其实就像面向对象语言中的多态的概念一样.slot就像类的虚函数,有个default的实现。你可以继承后进行override。从而替换内容。

2017/4/12(周三):

上午:

  • 修正原来写的程序

下午:

  • 一个很重大的成果,找到JS和CPP之间完美的协调关系,不需要修改一句代码,就能自动将CPP绑定到V8引擎,由于nodejs也使用V8引擎,这样,以前写的c++代码,可以自动并入到nodejs

以前用C++写的JSCode-->JSAst--->CPP源码的工具,后来重写目前完成60%。

开发周记(2017/4/10-2017/4/16)_第2张图片
js_ast.png

将generator.js读入内存,由v8 运行

开发周记(2017/4/10-2017/4/16)_第3张图片
main函数.png

generator.js,实际调用的是用C++中的JSAST::SourceGenerator 类(该C++类被包装成V8 js脚本可以调用的形式)。test.js是一个纯js实现,303k,还是比较大的一个js文件。

开发周记(2017/4/10-2017/4/16)_第4张图片
JS源码.png

generator.js中调用的SourceGenerator类对应的C++类:

开发周记(2017/4/10-2017/4/16)_第5张图片
对应的C++类.png

树形打印出JS的ast名称(ast=抽象语法树)

开发周记(2017/4/10-2017/4/16)_第6张图片
JS2CPPGenerator.png

原来写的程序有近5000行,当时还不知道有nodejs,后来发现nodejs真是好东西,想移植过去,但是工作量有点大。现在好了,完美的解决js/c++互调.

现在重写整个程序,进行扩展,先JS版,然后typescript版,实际上ts更容易转换成C++

开发周记(2017/4/10-2017/4/16)_第7张图片
js2cpp文档.png

两年前弄的规范,由于js缺乏类型系统,因此为了能自动转换,需要一些变量声明带类型前缀的规范。还有就是需要规定一套机制,例如继承,虚函数动态绑定,函数回调之类,内存析构等(还有很多,碰到一个问题解决一个呗,不停的测试),由于js太灵活,因此需要一套限定规则,才能更好的进行转换。目前重新弄一下。慢慢来!整个框架和关键的地方都弄好了,现在就是需要更好的制定规则。

贴一些以前的研究成果,后来重写整个解析和生成流程,代码比以前质量高很多,但是目前只是完成关键部分,还有很多没弄呢
下图是两年前的成果:(都是由js源码自动生成对应的语言,当时没做缩进输出,字符输出间隔规则也没做处理,可以利用代码编辑器format,现在可以进行缩进输出,因为ast树结构,天然的层次关系,特棒)

js2cpp

开发周记(2017/4/10-2017/4/16)_第8张图片
6C4EC7EE89EB4F056D8CF1D146F210E0.jpg

js2objc

开发周记(2017/4/10-2017/4/16)_第9张图片
6BD841C90CCAFA115DBE8427ADC533D8.jpg

js2cs

开发周记(2017/4/10-2017/4/16)_第10张图片
F3026FEA065CA99BBEFDD07BD1ADBB44.jpg

入口

开发周记(2017/4/10-2017/4/16)_第11张图片
E637B3F02E59C716D07AD3E7614EB511.jpg

2017/4/13(周四):

上午:

  • 撰写设计模式在UI系统开发中的应用(UIPAnimation实现 上),完成二分之一的内容。

  • StarUML的逆向工程引擎还是蛮好用的,UIPAnimation实现中的UML图都是直接由C++头文件自动生成的,然后手动添加类之间的关系。

下午:

  • 参加孩子学校举行的安全教育,由上海东方卫视的东方110主持人黄奕警官进行现场指导,气氛热烈,并且学到不少知识!
开发周记(2017/4/10-2017/4/16)_第12张图片
安全教育.jpg
  • 分享一下有用的信息:
    1、一定要了解,上海的每个地铁内都是分区块的,每个区块都是有编号的,只要报编号,110可以在30秒内快速定位。

    2、在高架上,如果车子出问题,不知道具体方位,可以在周围找区块编号,只要报标号,110可以在30秒内快速定位。

最后还接受了电视台采访,感觉讲的不错,就不知道什么时候播出,不知道处女秀是否可以被播出,应该ok吧。哈哈哈!

2017/4/14(周五):

上午:

  • 下载google skia源码,这个貌似要有点时间了。
  • 继续撰写设计模式在UI系统开发中的应用(UIPAnimation实现 上)
  • 现在的软件真是太大了,就这两个礼拜,我已经用掉了50g 硬盘空间,仅仅是编译一些库而已,现在每个库动不动就可以产生好几个g的中间文件,太可怕了,咋就这么大呢,代码量咋就这么多呢!

下午:

  • 下载最新版的skia源码,以及生成编译工具等,一个漫长的过程
  • 编译最新版的skia源码,生成vs2015.sln,花了很多时间编译,还是有错误,再说吧
  • 继续撰写设计模式在UI系统开发中的应用(UIPAnimation实现 上)

2017/4/15(周六):

上午:

  • skia库编译成功,单单编译,花了半个小时以上,生成的skia.lib静态链接库281兆,还真是够大啊!

  • 测试一下skia库是否ok

  • 从昨天下午到今天上午,终于编译出最新版的skia引擎,测试效果还是满不错的,效率很高,毕竟可直接调用opengl等API,并且重要的是字体渲染和质量很高,其实渲染里面最麻烦的是字体渲染!

开发周记(2017/4/10-2017/4/16)_第13张图片
skia编译.jpg

一共1404个编译单元,超过30分钟的编译时间!

开发周记(2017/4/10-2017/4/16)_第14张图片
skia编译结果.jpg
开发周记(2017/4/10-2017/4/16)_第15张图片
skia1.jpg
开发周记(2017/4/10-2017/4/16)_第16张图片
skia2.jpg
开发周记(2017/4/10-2017/4/16)_第17张图片
skia3.jpg
开发周记(2017/4/10-2017/4/16)_第18张图片
skia4.jpg

最后发现,google还是很强大的,技术栈还是选择:
google v8 js engine/google skia render engine/C++
或许是目前质量比较有保证的选择!

这几天再将这些库在android/ios中编译运行。IOS应该不会有很大问题,但是android ndk或许会碰到一些问题,但是应该是可以解决的。

  • 好了,skia可以使用了,也算是一个不小的成果。今天天气好,下午一起出去玩玩,心情舒畅.

2017/4/16(周日):

上午:

  • 京东购买的东西到货,一个HDMI转VGA接口,另外一个32G 闪存卡,这样我的两个树莓派3就有用武之地,一个已经装了linux操作系统,一个安装了android things操作系统。完美!
开发周记(2017/4/10-2017/4/16)_第19张图片
google技术栈.jpg
  • 今天是家庭运动日,出去吃饭,下午乒乓,羽球运动。

你可能感兴趣的:(开发周记(2017/4/10-2017/4/16))