未來應該是屬于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 就是選擇未來!
總結:
本周是獲得蠻多成果的一周:
完成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/10(周一):
上午:
花了一個上午,研究v8對C++包裝的問題。
終于解決了一個困擾我蠻多時間的問題,非常棒的感覺,具體蠻難說清楚,等我好了后再分享。
非常棒的感覺,這樣的話,現有的C++程序會非常方便的被V8所調用。
下午/晚上:
2017/4/11(周二):
上午:
下午
- 編譯跨平臺的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%。
將generator.js讀入內存,由v8 運行
generator.js,實際調用的是用C++中的JSAST::SourceGenerator 類(該C++類被包裝成V8 js腳本可以調用的形式)。test.js是一個純js實現,303k,還是比較大的一個js文件。
generator.js中調用的SourceGenerator類對應的C++類:
樹形打印出JS的ast名稱(ast=抽象語法樹)
原來寫的程序有近5000行,當時還不知道有nodejs,后來發現nodejs真是好東西,想移植過去,但是工作量有點大。現在好了,完美的解決js/c++互調.
現在重寫整個程序,進行擴展,先JS版,然后typescript版,實際上ts更容易轉換成C++
兩年前弄的規范,由于js缺乏類型系統,因此為了能自動轉換,需要一些變量聲明帶類型前綴的規范。還有就是需要規定一套機制,例如繼承,虛函數動態綁定,函數回調之類,內存析構等(還有很多,碰到一個問題解決一個唄,不停的測試),由于js太靈活,因此需要一套限定規則,才能更好的進行轉換。目前重新弄一下。慢慢來!整個框架和關鍵的地方都弄好了,現在就是需要更好的制定規則。
貼一些以前的研究成果,后來重寫整個解析和生成流程,代碼比以前質量高很多,但是目前只是完成關鍵部分,還有很多沒弄呢
下圖是兩年前的成果:(都是由js源碼自動生成對應的語言,當時沒做縮進輸出,字符輸出間隔規則也沒做處理,可以利用代碼編輯器format,現在可以進行縮進輸出,因為ast樹結構,天然的層次關系,特棒)
js2cpp
js2objc
js2cs
入口
2017/4/13(周四):
上午:
撰寫設計模式在UI系統開發中的應用(UIPAnimation實現 上),完成二分之一的內容。
StarUML的逆向工程引擎還是蠻好用的,UIPAnimation實現中的UML圖都是直接由C++頭文件自動生成的,然后手動添加類之間的關系。
下午:
- 參加孩子學校舉行的安全教育,由上海東方衛視的東方110主持人黃奕警官進行現場指導,氣氛熱烈,并且學到不少知識!
-
分享一下有用的信息:
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,并且重要的是字體渲染和質量很高,其實渲染里面最麻煩的是字體渲染!
一共1404個編譯單元,超過30分鐘的編譯時間!
最后發現,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操作系統。完美!
- 今天是家庭運動日,出去吃飯,下午乒乓,羽球運動。