大家好 小弟又來嘴砲了 我把最近稍為有看一下的東西做整理(謎之音:你最近都在打Game巴,之前 初音F 2nd 現在在玩 第三次機器人大戰Z 時獄篇)
JavaScript & JavaScriptCore 相關簡介
JavaScriptCore? Framework
The JavaScriptCore? Framework allows you to evaluate JavaScript programs from within a C-based program. It also lets you insert custom objects to the JavaScript environment. 請參考見 WebKit_JavaScriptCore_Ref.pdf 裡面敘述到相關主要在使用的API
Mozilla的 JavaScriptCore
JavaScript Version 定義 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference
以下有些內容主要都參考 轉自 http://blog.csdn.net/horkychen
http://zh.wikipedia.org/zh-tw/SpiderMonkey 最早的JavaScript引擎 敘述介紹
https://code.google.com/p/v8/ google V8 引擎
http://blog.csdn.net/bertzhang/article/details/6759055 浅谈WebKit之JavaScriptCore/V8篇
http://www.cash.idv.tw/wordpress/?p=8772 webkit小檔案
https://developers.google.com/web-toolkit/speedtracer/get-started Getting Started with Speed Tracer
移动Web应用程序开发 高性能JavaScript篇 (一) JavaScript 性能瓶颈
關於JavaScript的一個基礎特性介紹.
移动Web应用程序开发 高性能JavaScript篇 (二) JavaScript 性能分析工具
一些可以用來Debug的工具或是profiler
移动Web应用程序开发 高性能JavaScript篇 (三) JavaScript 加载解析和部署
移动Web应用程序开发 高性能JavaScript篇 (四) JavaScript数据访问和DOM编程
PS: webkit的所有 member 都是在 private 上,沒有public。另外要access member的data 就要先new 才行,在 interpreter 資料夾內狠才看到這類做法,因為要存取runtime 資料夾內的codeblocak等內容。
JSGlobalObject====>getProgramCodeBlock:
藉由 privateExecute(負責做call 初始化會將抓取相關的值處理完return)去 call,Evalcall=>在轉去CodeCache資料抓取做編譯。
並且將檢查Stack 是否有異常。
callFrame =0xb0648100registerFile =0xb3c68fccargv =0xb0648120argc =2registerOffset =12 FILE=interpreter/Interpreter.cpp LINE=391 function=callEval eval=0xb2c1c700callFrame=0xb0648100callFrame->uncheckedR(codeBlock->thisRegister()).jsValue().toThisObject(callFrame)=0xb2c94128callFrame->registers() - registerFile->start() + registerOffset=556scopeChain=0xb2233328
除了有用ASSERT做DEBUG用途之外,也有重新define opcode做debug flag用
DEFINE_OPCODE(其define的opcode巨集設定在Opcode.h內)
網頁傳進來是Unicode 在Lexer & parser 之前要先轉成ASCII Code.
inline bool Lexer::isWhiteSpace(int ch) { return isASCII(ch) ? (ch == ' ' || ch == '\t' || ch == 0xB || ch == 0xC) : (WTF::Unicode::isSeparatorSpace(ch) || ch == 0xFEFF); } inline bool Lexer::isLineTerminator(int ch) { return ch == '\r' || ch == '\n' || (ch & ~1) == 0x2028; } inline unsigned char Lexer::convertHex(int c1, int c2) { return (toASCIIHexValue(c1) << 4) | toASCIIHexValue(c2); } inline UChar Lexer::convertUnicode(int c1, int c2, int c3, int c4) { return (convertHex(c1, c2) << 8) | convertHex(c3, c4); }
題外話 目前感覺 JavaScriptCore 有用到的裝置變少很多,因為以同樣的JavaScript engine 來看的話 V8 比他強大好多(Android 裡面就是用那個喔),例如在GC的處理能力方面。
不過說實在話,光是JavaScriptCore 就有很多地方看得不是很懂,半知半解。
和QML Qt 5.2的環境一直搞不定 出現Qapplication not found ,luncher編譯不出來,ubuntu環境似乎被我搞爛了。乖乖用虛擬機 重新佈署環境 當練習看看了 囧
以上 感謝收看 下台一鞠躬
留言