開發(fā)周記(2017/4/10-2017/4/16)

skia4.jpg

未來應(yīng)該是屬于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 就是選擇未來!

總結(jié):
本周是獲得蠻多成果的一周:

本周的成果源于前兩周的準(zhǔn)備,前兩周的開發(fā)周記如下:

2017/4/10(周一):

上午:

花了一個上午,研究v8對C++包裝的問題。
終于解決了一個困擾我蠻多時間的問題,非常棒的感覺,具體蠻難說清楚,等我好了后再分享。
非常棒的感覺,這樣的話,現(xiàn)有的C++程序會非常方便的被V8所調(diào)用。

下午/晚上:

撰寫設(shè)計(jì)模式在UI系統(tǒng)開發(fā)中的應(yīng)用(導(dǎo)讀)一文

2017/4/11(周二):

上午:

下午

  • 編譯跨平臺的Cario繪圖引擎
  • 測試Cario引擎的性能,感覺還是稍微差了點(diǎn)。算了,還是選擇opengl(es)吧!
  • 將以前用C++寫的一個程序通過V8 C++,并入到Nodejs中去。感覺還是滿爽的,不需要重新用JS來撰寫,雖然研究花了不少時間,但是比重寫要有趣的多了
  • 繼續(xù)學(xué)習(xí)vue2.x,繼續(xù)我的前后端Demo制作。
  • 明白了vue2.x中的prop單向綁定的含義及原理
  • 明白了vue2.x中slot的含義,其實(shí)就像面向?qū)ο笳Z言中的多態(tài)的概念一樣.slot就像類的虛函數(shù),有個default的實(shí)現(xiàn)。你可以繼承后進(jìn)行override。從而替換內(nèi)容。

2017/4/12(周三):

上午:

  • 修正原來寫的程序

下午:

  • 一個很重大的成果,找到JS和CPP之間完美的協(xié)調(diào)關(guān)系,不需要修改一句代碼,就能自動將CPP綁定到V8引擎,由于nodejs也使用V8引擎,這樣,以前寫的c++代碼,可以自動并入到nodejs

以前用C++寫的JSCode-->JSAst--->CPP源碼的工具,后來重寫目前完成60%。

js_ast.png

將generator.js讀入內(nèi)存,由v8 運(yùn)行

main函數(shù).png

generator.js,實(shí)際調(diào)用的是用C++中的JSAST::SourceGenerator 類(該C++類被包裝成V8 js腳本可以調(diào)用的形式)。test.js是一個純js實(shí)現(xiàn),303k,還是比較大的一個js文件。

JS源碼.png

generator.js中調(diào)用的SourceGenerator類對應(yīng)的C++類:

對應(yīng)的C++類.png

樹形打印出JS的ast名稱(ast=抽象語法樹)

JS2CPPGenerator.png

原來寫的程序有近5000行,當(dāng)時還不知道有nodejs,后來發(fā)現(xiàn)nodejs真是好東西,想移植過去,但是工作量有點(diǎn)大?,F(xiàn)在好了,完美的解決js/c++互調(diào).

現(xiàn)在重寫整個程序,進(jìn)行擴(kuò)展,先JS版,然后typescript版,實(shí)際上ts更容易轉(zhuǎn)換成C++

js2cpp文檔.png

兩年前弄的規(guī)范,由于js缺乏類型系統(tǒng),因此為了能自動轉(zhuǎn)換,需要一些變量聲明帶類型前綴的規(guī)范。還有就是需要規(guī)定一套機(jī)制,例如繼承,虛函數(shù)動態(tài)綁定,函數(shù)回調(diào)之類,內(nèi)存析構(gòu)等(還有很多,碰到一個問題解決一個唄,不停的測試),由于js太靈活,因此需要一套限定規(guī)則,才能更好的進(jìn)行轉(zhuǎn)換。目前重新弄一下。慢慢來!整個框架和關(guān)鍵的地方都弄好了,現(xiàn)在就是需要更好的制定規(guī)則。

貼一些以前的研究成果,后來重寫整個解析和生成流程,代碼比以前質(zhì)量高很多,但是目前只是完成關(guān)鍵部分,還有很多沒弄呢
下圖是兩年前的成果:(都是由js源碼自動生成對應(yīng)的語言,當(dāng)時沒做縮進(jìn)輸出,字符輸出間隔規(guī)則也沒做處理,可以利用代碼編輯器format,現(xiàn)在可以進(jìn)行縮進(jìn)輸出,因?yàn)閍st樹結(jié)構(gòu),天然的層次關(guān)系,特棒)

js2cpp

6C4EC7EE89EB4F056D8CF1D146F210E0.jpg

js2objc

6BD841C90CCAFA115DBE8427ADC533D8.jpg

js2cs

F3026FEA065CA99BBEFDD07BD1ADBB44.jpg

入口

E637B3F02E59C716D07AD3E7614EB511.jpg

2017/4/13(周四):

上午:

下午:

  • 參加孩子學(xué)校舉行的安全教育,由上海東方衛(wèi)視的東方110主持人黃奕警官進(jìn)行現(xiàn)場指導(dǎo),氣氛熱烈,并且學(xué)到不少知識!
安全教育.jpg
  • 分享一下有用的信息:
    1、一定要了解,上海的每個地鐵內(nèi)都是分區(qū)塊的,每個區(qū)塊都是有編號的,只要報(bào)編號,110可以在30秒內(nèi)快速定位。

    2、在高架上,如果車子出問題,不知道具體方位,可以在周圍找區(qū)塊編號,只要報(bào)標(biāo)號,110可以在30秒內(nèi)快速定位。

最后還接受了電視臺采訪,感覺講的不錯,就不知道什么時候播出,不知道處女秀是否可以被播出,應(yīng)該ok吧。哈哈哈!

2017/4/14(周五):

上午:

下午:

2017/4/15(周六):

上午:

  • skia庫編譯成功,單單編譯,花了半個小時以上,生成的skia.lib靜態(tài)鏈接庫281兆,還真是夠大啊!

  • 測試一下skia庫是否ok

  • 從昨天下午到今天上午,終于編譯出最新版的skia引擎,測試效果還是滿不錯的,效率很高,畢竟可直接調(diào)用opengl等API,并且重要的是字體渲染和質(zhì)量很高,其實(shí)渲染里面最麻煩的是字體渲染!

skia編譯.jpg

一共1404個編譯單元,超過30分鐘的編譯時間!

skia編譯結(jié)果.jpg
skia1.jpg
skia2.jpg
skia3.jpg
skia4.jpg

最后發(fā)現(xiàn),google還是很強(qiáng)大的,技術(shù)棧還是選擇:
google v8 js engine/google skia render engine/C++
或許是目前質(zhì)量比較有保證的選擇!

這幾天再將這些庫在android/ios中編譯運(yùn)行。IOS應(yīng)該不會有很大問題,但是android ndk或許會碰到一些問題,但是應(yīng)該是可以解決的。

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

2017/4/16(周日):

上午:

  • 京東購買的東西到貨,一個HDMI轉(zhuǎn)VGA接口,另外一個32G 閃存卡,這樣我的兩個樹莓派3就有用武之地,一個已經(jīng)裝了linux操作系統(tǒng),一個安裝了android things操作系統(tǒng)。完美!
google技術(shù)棧.jpg
  • 今天是家庭運(yùn)動日,出去吃飯,下午乒乓,羽球運(yùn)動。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容