猿问

V8可以安装在嵌入式芯片中吗?

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

这家试图雇用我的公司正在做 vanilla javascript 和 jquery。没有反应,或任何其他框架。众所周知,JQuery 是最糟糕的狗屎,在 2020 年他们仍然没有使用更好的东西,这难道不奇怪吗?你会接受这样的报价吗?[1]

这让我想到:当然,如果一家公司正在做任何事情,那么它有充分的理由,并且将 javascript 推到运行它没有意义的地方是非常受欢迎的。销售点系统、嵌入式系统,他们没有很多资源可以闲置。因此,您可以切入每一个可能的角落,以从您尝试使用的芯片中获得更多性能。这样的想法让我想起了马克·扎克伯格 (Mark Zuckerberg) 所说的“Facebook 浪费了太多时间试图用 javascript 和 HTML5 而不是本机实现移动应用程序”的那段时间 [2]。我似乎无法找到消息来源,但我确实听到了一些谣言,说他很快被一些知道 javascript 在移动设备上工作原理的公司证明是错误的。这个想法让我开始思考以下问题:

  1. 嵌入式芯片可以包含多少代码?

  2. 是否有可能将整个 V8 引擎嵌入到芯片中,让 javascript 以“与 C/C++ 相同”(或接近相同)的性能在它们上运行?

  3. 现在做香草javascript真的有那么大的耻辱吗?

最后一个问题更像是一个修辞问题。但我会感谢任何输入。


叮当猫咪
浏览 150回答 2
2回答

拉丁的传说

V8 开发人员在这里。正如评论者所指出的,这个问题有点过于模糊,无法得到可靠的答案(并且可能也不是真正的主题),但我可以提供一些想法。V8 有一定的硬性要求,例如:它需要几兆字节的内存才能启动,因此它不会在内存不足的微控制器上运行对于正常操作,它需要权限(来自操作系统/内核)来分配可执行内存。最近的版本支持“jitless”模式,可以避免这种情况,但代价是性能损失(不生成优化代码)——这取决于你的工作量。它生成的代码针对某些最低 CPU 功能,例如 x86 上的 SSE2 和 ARM 上的 armv6+vfpv2。这个最小值甚至适用于“无抖动”模式,因为它会执行 V8 在构建时生成并包含在其二进制文件中的代码。(如果有足够的工程投资,在技术上可以修改其代码生成后端以针对较低的硬件要求。)正式支持在Windows、MacOS、Linux、Android、Fuchsia上运行;还有一些其他操作系统的社区支持。如果您的嵌入式设备有不同的操作系统,或者根本没有内核,则必须进行调整。除此之外,这只是您希望事情变得多快的问题。撇开平台兼容性要求不谈,如果您愿意等待足够长的时间,几乎所有软件都可以在几乎所有硬件上运行。见过树莓派在 Pentium-133 上启动普通 Linux 发行版或 Windows XP 吗?它有效,但速度很慢!人们在更快的硬件上花费大量资金是有原因的;-)关于这方面的更多考虑:在许多情况下,原始执行速度并不重要。例如,当在原生模块中完成繁重的工作时,通常可以使用相对较慢的脚本语言作为这些模块之间的“粘合剂”。V8 并非针对资源严重受限的环境,但还有其他 JavaScript 引擎专门针对微控制器。它们中的许多只支持有限的功能集(例如仅 ES3 或 ES5,没有现代 EcmaScript 功能)以节省内存和复杂性。如果给定的用例确实对弱硬件有严格的性能要求,那么使用低级语言是有意义的。出于这个原因,许多微控制器都是用 C 方言(即 C 的子集)编程的。说到 C/C++ 与 JavaScript:很难比较。简短的回答是 C 更快,但这取决于。您可以在动态编译的代码处于优势的情况下制作微基准测试,因此 JavaScript 会更快。通常,与手动内存管理相比,自动垃圾收集等语言功能会降低性能的几个百分点。通过 JIT 编译来缓解动态语言的缓慢性同样需要花费一些时间,因为这是 CPU 必须做的额外工作。在足够快的硬件上,所有这些开销通常都小到无关紧要,但是当您遇到硬件完全可以做的限制时(同时仍然满足用户对性能的期望),那么该评估可能会改变。

aluckdog

对于一个完整的答案,这是太多的问题。是否有可能将整个 V8 引擎嵌入到芯片中,让 javascript 以“与 C/C++ 相同”(或接近相同)的性能在它们上运行?没有 V8 不能在微控制器上运行。也许是微处理器。但是是的,您可以在微控制器上运行 javascript。Espruino就是一个很好的例子。我不知道它的速度,但它似乎能够填补编程微控制器的爱好者空间。就像微蟒一样。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答