原创 QuickJS 源碼剖析:垃圾回收原理

QuickJS 是一個輕量級的 JavaScript 引擎,可以代替 V8 實現 JS 腳本的執行,如果要使用 QuickJS,必須要弄懂其垃圾回收原理,否則容易出現野指針或內存泄漏,從而導致程序崩潰,本文通過源碼剖析 QuickJS 的垃

原创 Android NDK 開發中正確釋放 JNI 對象

獲取字符串 錯誤❌:沒有正確釋放,會導致內存泄漏 const char *str = env->GetStringUTFChars(jstr, nullptr); 正確✅:必須調用 ReleaseStringUTFChars 釋放 con

原创 C++11 標準庫 std::thread 多線程使用教程

從 C++11 開始,標準庫裏已經包含了對線程的支持,std::thread是C++11標準庫中的多線程的支持庫,pthread.h 是標準庫沒有添加多線程之前的在Linux上用的多線程庫。std::thread 是面向對象的多線程庫,使用

原创 C++:CMake 項目集成 GTest 單元測試教程

單元測試是對軟件基本組成單元進行的測試,可以用於對某個功能或者某個類或某個函數進行測試。善用單元測試可以有效提高開發效率,使用單元測試編寫代碼的也更加可靠性。GTest 全程 Google Test,是 Google 推出的 C++ 測試框

原创 C++ 使用 Lambda 實現匿名函數

匿名函數是指不需要聲明和定義的函數,匿名函數僅需要在使用時候進行創建。匿名函數的 結構如下: [capture](parameters)->return-type{body} capture []:未定義變量,不允許在函數體內使用任意外

原创 fmt:現代的 C++ 字符串格式化庫,實現了 C++20 的特徵

fmt 是一個先進的文本格式庫,具有現代語言的特徵,用來代替 C 的 stdio 和 C++ iostreams。實現了 C++20 的 std::format 標準。fmt 基於 CMakeLists.txt 開發,引入到項目中非常簡單。

原创 C++ 使用智能指針 shared_ptr、unique_ptr、make_shared 更安全管理內存

有使用 C++ 做開發的童鞋應該都經歷過被 指針 折磨,使用指針的使用需要保證 new 和 delete 對齊,如果不注意使用很容易出現野指針、空指針和內存泄漏等風險。我們應該儘量避免使用指針,如果一定要用指針,推薦使用 C++ STL 提

原创 一文看懂 C++11 的 右值引用、std::move 和 std::forward

右值引用、std::move 和 std::forward 是 C++11 中的最重大語言新特性之一。就算我們不主動去使用右值引用,它也在影響着我們的編碼,這是因爲STL的 string、vector 等類都經過了右值引用的改造。由於現在的

原创 使用 quickjs 和 Vue.js 模仿微信小程序的雙線程模型

微信小程序和網頁最大的不同是小程序基於 WebView + JS引擎實現的雙線程渲染架構,參考微信小程序的 渲染層和邏輯層 文檔,實際上是多個 WebView 加上一個 JS引擎,在 Android 上是使用 Google v8 引擎。之所

原创 談談 JS 引擎、瀏覽器、setTimeout 和 Event Queue 的關係

setTimeout setTimeout(fun,time),是一個延遲執行的函數,有 V8、QuickJS 開發經驗的童鞋可能嘗試過在引擎上執行 setTimeout,發現是會報錯的,對於前端童鞋而言,setTimeout 不是一個很常

原创 在 Android 使用 QuickJS JavaScript 引擎教程

quickjs-android 是 QuickJS JavaScript 引擎的 Android 接口框架,整體基於面向對象設計,提供了自動GC功能,使用簡單。armeabi-v7a 的大小僅 350KB,是 Google V8 不錯的替代

原创 ES6 的 import、export 對比 CommonJS 的 require、exports

最近在開發 quickjs-android,一個小型的 JavaScript 引擎封裝框架,需要給框架增加模塊加載能力,以提高框架的可用度,所以就模塊化能力對常用的模塊化規範展開分析。 前言 目前常用的模塊規範有兩種,CommonJS 和

原创 編譯 JavaScript 引擎 QuickJS 到 Android 教程

QuickJS 是一個小型並且可嵌入的 Javascript 引擎,它支持ES2020規範,包括模塊,異步生成器和代理器。編譯下來只有幾百KB,相比 V8 需要幾MB小得多,在對大小有要求的嵌入式設備來說是 V8 一個不錯的替代品。國人寫了

原创 通過 J2V8 在 Android 使用 V8 JavaScript 引擎教程

V8 引擎是由 Google 開源的 JavaScript 引擎,大名鼎鼎的 Chrome 就是基於 V8 開發,V8 是基於 C++ 開發,可以輕鬆移植到各種平臺,當然也可以移植到 Android 使用。其中 J2V8 是最多人選擇的框架

原创 談談微信小程序的雙線程模型

WebView是屬於單線程模型,頁面的渲染和JavaScript邏輯運算都是運行在WebView中,而微信小程序是使用雙線程模式,就是渲染層和邏輯層分開。 渲染層和邏輯層 在微信的文檔可以看到這麼一段話,小程序的渲染層和邏輯層分別由2個線程