您的位置:首頁 > 移動互聯

                                            在 Android 上運行 ClojureScript

                                            發布時間:2022-04-11 15:12:46  來源:IT資訊網    采編:author  背景:

                                            在過去的幾天里,我有了開發生涯中最有意義的經歷之一, 想在這里跟大家分享。

                                            現在我們已經讓 ClojureScript 可以在 Android 上運行了。不是在一個 WebView 里面,也不是利用像 Cordova 這樣的東西,而是實實在在的運行在一個嵌入式的 JavaScript 引擎中。到底發生了什么?

                                            最近,我們做了一些工作創建出了一個 iOS 的 ClojureScript REPL 應用,Replete。整個看上去很酷,而對應的 Android 應用就只算勉強能創建出來。不幸的是,我的 Android 技術平平,也不能立馬就上手。

                                            不過,這方面 Tahmid Sadik 的技術還能上得了臺面。

                                            Tahmid 可以把UI都串起來,也能將 Rhino 實例化并對JavaScript語句進行計算,但是接下來讓引導式的 ClojureScript 運行起來對他而言可謂是一次挑戰。

                                            不過在此之前,他必須在他的 app 里將 ClojureScript 引導起來。引導這個詞被我特意標明,指出他需要用 Google 的 Closure 依賴管理系統把 ClojureScript 運行時啟動起來,沒有 JavaScript,也沒有其他的優化(例如 :none 模式),根據需要,可以定義 CLOSURE_IMPORT_SCRIPT 環境變量。如果想包含一個 REPL,用這種方式來引入運行時是很重要的。這也為在你的 REPL 包含源碼級的名字空間提供了支持。

                                            實際上,Replete 也需要做這些,用到的是 Ambly 的一個功能。我當然知道,Replete 是一個獨立的 REPL,并不需要 Ambly。不過我使用了一個小花招,可以復用這個功能,讓 ClojureScript 啟動在 Replete 里運行。

                                            順便說一下,我最初是打算用 React Native 來實現 Replete 的。結果發現,使用 React Native 的 ClojureScript 支持還為時尚早,而可以引導的 ClojureScript 確實只是初期的功能,要想能夠實際工作還需要做很多努力。所以,對于 Replete,我還是保持簡單吧,就算是 Goby 也沒有用到。

                                            對于上述的結果,好的一點是不需要 React Native 的依賴(Android 版還沒有正式公開發布),也沒有 Goby 的依賴(只支持 iOS)。Replete 內置的 ClojureScript 非常簡潔,使用傳統的 iOS 的 UI,事實證明這對 Tahmid 去完成同樣功能的 Android 版很有幫助。

                                            讓我們回到故事的開始:本質上 Tahmid 復制了 Ambly 的 bootstrap 邏輯,按照順序逐一的執行了在 Rhino 里的 JavaScript 語句。不過時不時的他會遇到一些奇怪的問題,我的記憶中幾個月前也會遇到類似的問題,在研究過 Ambly 的代碼后,我給了一點建議。

                                            之后,他基本上可以引導成功 ClosureScriptle。

                                            cljs.core.apply.call(null,cljs.core.inc,newcljs.core.PersistentVector(null,1,5,cljs.core.PersistentVector.EMPTY_NODE,[1],null))

                                            這行就是(apply inc [1])需要綁定的JavaScript代碼

                                            然后Tahmid終于有了2.0。真棒!這應該是有史以來的***次,在基于Android的嵌入式的Rhino上跑起來ClojureScript。

                                            接下來,需要嘗試用起來reader, analyzer, 和compiler?,F在我們來試一下,只需要簡單的使用Replete里的JavaScript,讓Android的app執行Replete的read_eval_print函數,參數為字符串 (+ 1 2),如果工作正常,那么恭喜,ClojureScript已經成功啟動了。

                                            replete.core.read_eval_print.call(null,'(+12)')

                                            且慢,Transit 里執行 goog.require('replete.core');的時候出了問題,應該是跟 randomUUID 有關。悲劇了,看上去顯然還有很多地方需要處理。

                                            不過沒關系,Replete 之前一直嘗試用不同的方式加載 analysis 緩存,感謝 Karl Mikkelsen,我們有了一個可用的版本只使用純 JavaScript,沒有任何依賴。把這個用起來之后,在把print回調弄好(這樣類似 println 這樣的方法就可以工作了),接下來 Tahmid 就通過Slack通知我:

                                            Igot3(+12)=3

                                            ... 然后不斷煩我,還會擅自發博客。就這樣,引導的 ClojureScript REPL 在 Android 上誕生了!

                                            Tahmid 在界面上封裝了一些東西,修復了 JavaScript/ClojureScript 集成的一些小問題之后就發布了Replicator。

                                            簡直就是一場暴風雨!

                                            現在,Tahmid 正在用 JavaScriptCore 替換 Rhino,這就沒那么快了。

                                            我認為這將使速度提升。這為我們在 Android 上使用 JavaScriptCore 進行本地交換的功能提供一些重要的基礎。

                                            從大圖片來看,我真的認為 ClojureScript 在 Android 上運行很快。特別是使用 JavaScriptCore。對于這個觀點的問題,可以看看 Bocko 對 Android 的 Vladimir Iakovlev 的端口在啟動速度上的差異。

                                            Clojure~14秒Clojure/Skummet~11秒ClojureScript~2秒

                                            以上是在模擬器上運行的結果,但是,我仍然認為它顯示了 ClojureScript 真正的實現了在移動設備上減少計算延時的承諾。我認為是時候讓 ClojureScript 活躍起來,用于為移動設備開發應用!

                                              聲明:本文僅為傳遞更多網絡信息,不代表IT資訊網觀點和意見,僅供參考了解,更不能作為投資使用依據。


                                            返回網站首頁 本文來源:IT資訊網

                                            本文評論
                                            Kafka 如何解決消息不丟失?
                                            Kafka 消息框架,大家一定不陌生,很多人工作中都有接觸。
                                            日期:03-31
                                            意外出現 Cortana導致Windows 10系統還原失敗
                                            最近有Windows 10用戶嘗試使用系統還原來解決電腦問題
                                            日期:03-23
                                            IDC:第一季度云基礎設施支出下滑全年有望實現增長
                                            盡管該季度需求疲軟,但IDC預測2021全年云基礎設施支出
                                            日期:01-25
                                            十一長假大熱銷 這幾款1000-2000元機型值得關注
                                            1000-2000元價位,歷來擁有用戶最多。其中的原因很簡單,
                                            日期:10-02
                                            俄羅斯人Wzor分享Windows 10 Build 10537系統截圖
                                            今天,俄羅斯知名報料人WZor再次分享了Build 10537的一
                                            日期:03-22
                                            Kubernetes配置熱更新的兩種方式
                                            在我們使用Kubernetes的過程中,通常都會將應用的配置文
                                            日期:03-27
                                            數據安全仍是中小企業上云的較大阻礙
                                            研究表明,使用云服務優化運營的趨勢可能帶來一些嚴重的
                                            日期:03-26
                                            騰訊知名程序員意外身故,引發業界惋惜,他到底是何方神圣?
                                            他到底是誰?明明只是騰訊的一名“普通”程序員,為什么
                                            日期:03-10
                                            如何使用DokuWiki將軟硬件記入文檔?
                                            您是否在尋找一個地方來存放您的說明文檔、核對清單以
                                            日期:02-17
                                            微軟:Windows 11 流暢設計滾動條將引入到谷歌 Chrome 瀏覽器
                                            微軟還在考慮對用戶與 Chrome 瀏覽器中的滾動條的互動
                                            日期:03-26
                                            國內最適宜建設數據中心地區,原來在這里
                                            一直以來,建設數據中心是一項重大決策,也是大家普遍比較
                                            日期:01-21
                                            21.5英寸臺式機 同方S5800
                                            清華同方真愛S5800-S007(下鄉機型)是一款性價比較高的
                                            日期:02-26
                                             

                                            精品无码久久午夜福利