繁体   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