簡體   English   中英

V8可以安裝在嵌入式芯片中嗎?

[英]Can V8 be installed in an embedded chip?

在我經常看到的一個頻道中,有人問了以下問題:

這家試圖雇用我的公司正在做普通的 javascript 和 jquery。 沒有反應,或任何其他框架。 JQuery 是眾所周知的最駭人聽聞的狗屎,在 2020 年他們仍然沒有使用更好的東西,這不是很奇怪嗎? 你會接受這樣的提議嗎? [1]

這讓我想到:當然,如果一家公司正在做任何事情,它有一個很好的理由,將 javascript 推到運行它沒有意義的地方是很受歡迎的。 銷售點系統、嵌入式系統,它們沒有多少資源可供使用。 因此,您盡可能地切入每一個角落,以從您嘗試使用的芯片中獲得更多性能。 這樣的想法讓我想起了馬克扎克伯格說過“Facebook浪費了太多時間試圖在 javascript 和 HTML5 而不是原生實現移動應用程序”[2]。 我似乎無法找到消息來源,但我確實聽到了一些謠言,說他被一些公司迅速證明是錯誤的,這些公司了解 javascript 如何在移動設備上工作的來龍去脈。 這個想法讓我開始思考以下問題:

  1. 嵌入式芯片可以包含多少代碼?
  2. 是否有可能將整個 V8 引擎嵌入到芯片中,以使 javascript 在它們上以“與 C/C++ 一樣”(或接近於同等)性能運行?
  3. 現在做香草javascript真的有那么大的恥辱嗎?

最后一個問題更像是一個修辭問題。 但我會很感激任何意見。


  1. 當然,這個問題經過編輯以適合觀眾。
  2. https://techcrunch.com/2012/09/11/mark-zuckerberg-our-biggest-mistake-with-mobile-was-betting-too-much-on-html5/

V8 開發人員在這里。 正如評論者所指出的,這個問題有點太模糊了,無法給出一個可靠的答案(而且這里可能也不是真正的主題),但我可以提供一些想法。

V8 有一定的硬性要求,例如:

  • 它需要幾兆字節的 memory 才能啟動,因此它無法在少於該值的微控制器上運行
  • 對於正常操作,它需要權限(來自操作系統/內核)來分配可執行 memory。 最近的版本支持“jitless”模式,可以避免這種情況,但代價是性能損失(不生成優化代碼)——這有多重要取決於您的工作量。
  • 它生成的代碼針對某些最低 CPU 功能,例如 x86 上的 SSE2 和 ARM 上的 armv6+vfpv2。 這個最小值甚至適用於“jitless”模式,因為它執行 V8 在構建時生成並包含在其二進制文件中的代碼。 (如果有足夠的工程投資,技術上可以修改其代碼生成后端以針對較低的硬件要求。)
  • 正式支持在Windows、MacOS、Linux、Android、Fuchsia上運行; 還有一些其他操作系統的社區支持。 如果您的嵌入式設備具有不同的操作系統,或者根本沒有 kernel,則您必須進行調整。

除此之外,這只是您希望事情多快的問題。 除了平台兼容性要求之外,如果您願意等待足夠長的時間,幾乎所有軟件都可以在幾乎任何硬件上運行。 曾經見過 Raspberry Pi 在 Pentium-133 上啟動常規 Linux 發行版或 Windows XP 嗎? 它有效,但速度很慢; 人們在更快的硬件上花費大量金錢是有原因的;-)

在這方面還有一些考慮:

  • 在許多情況下,原始執行速度並不重要。 例如,當在本地模塊中完成繁重的工作時,通常可以使用相對較慢的腳本語言作為這些模塊之間的“粘合劑”。
  • V8 並非針對資源嚴重受限的環境,但還有其他專門針對微控制器的 JavaScript 引擎。 它們中的許多只支持有限的功能集(例如,只有 ES3 或 ES5,沒有現代 EcmaScript 功能)以節省 memory 和復雜性。
  • 如果給定的用例確實對弱硬件有嚴格的性能要求,那么使用低級語言是有意義的。 由於這個原因,許多微控制器都使用 C 方言(即 C 的子集)進行編程。

說到 C/C++ 與 JavaScript:很難比較。 簡短的回答是 C 更快,但這取決於。 您可以在動態編譯代碼具有優勢的情況下制作微基准,因此 JavaScript 會更快。 通常,與手動 memory 管理相比,自動垃圾收集等語言功能會花費百分之幾的性能。 通過 JIT 編譯來緩解動態語言的緩慢性同樣需要花費一些時間,因為這是 CPU 必須做的額外工作。 在足夠快的硬件上,所有這些開銷通常都足夠小,無關緊要,但是當您運行硬件完全可以做的限制時(同時仍然滿足用戶對性能的期望),那么評估可能會改變。

對於一個完整的答案,這是一個太多的問題,但是。

  1. 是否有可能將整個 V8 引擎嵌入到芯片中,以使 javascript 在它們上以“與 C/C++ 一樣”(或接近於同等)性能運行?

沒有 V8 不能在微控制器上運行。 也許是微處理器。 但是是的,您可以在微控制器上運行 javascript。 Espruino就是一個很好的例子。 我不知道它的速度,但它似乎能夠填補業余愛好者對微控制器進行編程的空間。 就像 micropython 一樣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM