【问题标题】:Can V8 be installed in an embedded chip? [closed]V8可以安装在嵌入式芯片中吗? [关闭]
【发布时间】:2019-11-15 12:49:26
【问题描述】:

在我常去的一个频道中,有人问了以下问题:

这家试图雇用我的公司正在做 vanilla javascript 和 jquery。没有反应,或任何其他框架。 JQuery 以最骇人听闻的东西而闻名,到 2020 年他们仍然没有使用更好的东西,这不是很奇怪吗?你会接受这样的提议吗? [1]

这让我开始思考:当然,如果一家公司使用原版做任何事情,那是有充分理由的,并且将 javascript 推到运行它没有意义的地方是非常流行的。销售点系统、嵌入式系统,它们没有多少资源可供使用。因此,您尽可能地切入每一个角落,以从您尝试使用的芯片中获得更高的性能。这样的想法让我想起了 Mark Zuckerberg 说过“Facebook 浪费了太多时间试图用 javascript 和 HTML5 而不是原生来实现移动应用程序”[2]。我似乎无法找到消息来源,但我确实听到了一些谣言,即某家公司迅速证明他是错误的,该公司了解 javascript 如何在移动设备上工作的来龙去脉。这个想法让我开始思考以下问题:

  1. 嵌入式芯片可以包含多少代码?
  2. 是否可以将整个 V8 引擎嵌入到芯片中,让 JavaScript 在其上以“与 C/C++ 一样”(或接近于同等)性能运行?
  3. 现在做 vanilla javascript 真的有那么大的耻辱吗?

最后一个问题更像是一个修辞问题。但我将不胜感激。


  1. 课程问题经过编辑以适合观众。
  2. https://techcrunch.com/2012/09/11/mark-zuckerberg-our-biggest-mistake-with-mobile-was-betting-too-much-on-html5/

【问题讨论】:

  • 什么是“芯片”?可以是任何东西,从裸机 8 位 MCU 到可怕的 Cortex A-something。你在问“一根绳子有多长”。
  • What topics can I ask about here?:"具体的编程问题(_no),或者软件算法(no),或者程序员常用的软件工具并且是一个实用的、可回答的问题,是软件开发所独有的 (no)。
  • @Lundin 我不太了解那里确实存在哪些芯片,因此它是非描述性的。我所知道的是每个都是不同的:有不同的可用处理能力、RAM、闪存空间等。我想这类问题可能是“我需要什么来创建这个嵌入了 V8 的神奇芯片”。
  • 这对 SO 来说更离题
  • @Dragas 基本上,您需要可以运行“托管系统”的东西,即 Linux、Android 或类似系统。也就是说,“伪装的PC”。例如,像 Raspberry Pi 这样的爱好者单板计算机应该可以。但是你永远不会在独立系统上做这样疯狂的事情,比如裸机/RTOS 微控制器,因为它没有任何意义,而且它们受到的限制太多。

标签: javascript embedded v8


【解决方案1】:

V8 开发人员在这里。正如评论者所指出的,这个问题有点太模糊了,无法给出一个可靠的答案(而且这里可能也不是真正的主题),但我可以提供一些想法。

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

  • 它需要几兆字节的内存才能启动,因此它无法在内存不足的微控制器上运行
  • 对于正常操作,它需要权限(来自操作系统/内核)来分配可执行内存。最近的版本支持“jitless”模式,可以避免这种情况,但代价是性能损失(不生成优化代码)——这有多重要取决于您的工作量。
  • 它生成的代码针对某些最低 CPU 功能,例如x86 上的 SSE2 和 ARM 上的 armv6+vfpv2。这个最小值甚至适用于“jitless”模式,因为它执行 V8 在构建时生成并包含在其二进制文件中的代码。 (如果有足够的工程投资,技术上可以修改其代码生成后端以针对较低的硬件要求。)
  • 正式支持在Windows、MacOS、Linux、Android、Fuchsia上运行;还有一些其他操作系统的社区支持。如果您的嵌入式设备有不同的操作系统,或者根本没有内核,您就必须做出调整。

除此之外,这只是您希望事情多快的问题。除了平台兼容性要求之外,如果您愿意等待足够长的时间,几乎所有软件都可以在几乎任何硬件上运行。曾经见过 Raspberry Pi 在 Pentium-133 上启动常规 Linux 发行版或 Windows XP 吗?它有效,但速度很慢!人们花很多钱购买更快的硬件是有原因的 ;-)

在这方面还有一些注意事项:

  • 在许多情况下,原始执行速度并不重要。例如,当在原生模块中完成繁重的工作时,通常可以使用相对较慢的脚本语言作为这些模块之间的“粘合剂”。
  • V8 并非针对资源严重受限的环境,但还有其他 JavaScript 引擎专门针对微控制器。其中许多只支持有限的功能集(例如,只有 ES3 或 ES5,没有现代 EcmaScript 功能)以节省内存和复杂性。
  • 如果给定的用例确实对弱硬件有严格的性能要求,那么使用低级语言是有意义的。出于这个原因,许多微控制器都使用 C 方言(即 C 的子集)进行编程。

说到 C/C++ 与 JavaScript:很难比较。简短的回答是 C 更快,但这取决于。您可以在动态编译代码具有优势的情况下制作微基准,因此 JavaScript 会更快。通常,与手动内存管理相比,自动垃圾收集等语言功能会花费百分之几的性能。通过 JIT 编译来缓解动态语言的缓慢性同样需要花费一些时间,因为这是 CPU 必须做的额外工作。在足够快的硬件上,所有这些开销通常都足够小,无关紧要,但是当您运行硬件完全可以做的极限时(同时仍然满足用户对性能的期望),那么这种评估可能会改变。

【讨论】:

    【解决方案2】:

    这个问题太多了,无法完整回答,但是。

    1. 是否可以将整个 V8 引擎嵌入到芯片中,让 JavaScript 在其上以“与 C/C++ 一样”(或接近于同等)性能运行?

    V8 不能在微控制器上运行。也许是微处理器。但是是的,您可以在微控制器上运行 javascript。 Espruino 就是一个很好的例子。我不知道它的速度,但它似乎能够填补业余爱好者对微控制器进行编程的空间。就像 micropython 一样。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-14
      • 1970-01-01
      • 2012-11-24
      • 1970-01-01
      相关资源
      最近更新 更多