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

Javascript V8可以安装在嵌入式芯片中吗?,javascript,embedded,v8,Javascript,Embedded,V8,在我经常访问的一个频道中,有人问了以下问题: 这家试图雇佣我的公司正在做香草javascript和jquery。没有react或任何其他框架。JQuery以其最黑客的特性而闻名,到2020年,他们还没有使用更好的东西,这不是很奇怪吗?你会接受这样的提议吗?[1] 这让我想到:当然,如果一家公司正在做一些普通的事情,它有一个很好的理由,而且将javascript推到运行它没有意义的地方是相当流行的。销售点系统,嵌入式系统,他们没有太多的备用资源。因此,您尽一切可能从您试图使用的芯片中获得更高的性能

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

这家试图雇佣我的公司正在做香草javascript和jquery。没有react或任何其他框架。JQuery以其最黑客的特性而闻名,到2020年,他们还没有使用更好的东西,这不是很奇怪吗?你会接受这样的提议吗?[1]

这让我想到:当然,如果一家公司正在做一些普通的事情,它有一个很好的理由,而且将javascript推到运行它没有意义的地方是相当流行的。销售点系统,嵌入式系统,他们没有太多的备用资源。因此,您尽一切可能从您试图使用的芯片中获得更高的性能。这种想法让我想起了马克·扎克伯格(Mark Zuckerberg)曾经说过的“Facebook浪费了太多时间试图用javascript和HTML5而不是本机实现移动应用程序”[2]。我似乎找不到消息来源,但我确实听到一些谣言,说他很快被某家公司证明是错的,该公司对javascript在移动设备上的工作方式了如指掌。这个想法让我开始思考以下问题:

  • 嵌入式芯片可以包含多少代码
  • 是否有可能将整个V8引擎嵌入到芯片中,使javascript在芯片上以与C/C++相当的性能运行
  • 现在做香草javascript真的那么丢脸吗
  • 最后一个问题更像是一个修辞问题。但我将感谢任何意见


  • 当然,这个问题是为了迎合听众而编辑的

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

    V8具有某些硬要求,例如:

    • 它只需要几兆的内存就可以启动,所以它不会在内存不足的微控制器上运行
    • 对于正常操作,它需要权限(来自操作系统/内核)来分配可执行内存。最近的版本支持“jitless”模式,这避免了这种情况,但代价是性能损失(没有生成优化的代码)——这在多大程度上取决于您的工作负载
    • 它生成的代码针对某些最低CPU功能,例如x86上的SSE2和ARM上的armv6+vfpv2。这个最小值甚至适用于“jitless”模式,因为它执行V8在构建时生成并包含在二进制文件中的代码。(有了足够的工程投资,就可以在技术上修改其代码生成后端,以满足较低的硬件要求。)
    • 它正式支持在Windows、MacOS、Linux、Android、Fuchsia上运行;还有一些其他操作系统的社区支持。如果您的嵌入式设备有不同的操作系统,或者根本没有内核,那么您必须进行调整
    除此之外,这只是一个你希望事情发展得有多快的问题。撇开平台兼容性要求不谈,如果您愿意等待足够长的时间,几乎任何软件都可以在几乎任何硬件上运行。有没有见过Raspberry Pi在常规Linux发行版上启动,或者在奔腾133上启动Windows XP?它能工作,但很慢!人们在更快的硬件上花很多钱是有原因的;-)

    在这方面还有一些考虑:

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

    说到C/C++和JavaScript:很难比较。简单的回答是C更快,但这取决于。您可以在动态编译代码占优势的地方创建微基准,这样JavaScript会更快。通常,与手动内存管理相比,自动垃圾收集等语言功能的性能成本仅为其性能的百分之几。通过JIT编译动态语言来降低它们的速度同样需要花费一些时间,因为这是CPU必须做的额外工作。在速度足够快的硬件上,所有这些开销通常都很小,无关紧要,但当您的硬件性能达到极限时(同时仍然满足用户对性能的期望),评估可能会改变。

    这是一个太多的问题,无法给出完整的答案

  • 是否有可能将整个V8引擎嵌入到芯片中,使javascript在芯片上以与C/C++相当的性能运行

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

    什么是“芯片”?可能是任何东西,从一个裸机8位MCU到一个巨大的皮质什么的。你在问“绳子有多长?”:“一个特定的编程问题(_no),或一个软件算法(no),或程序员常用的软件工具,是一个实用的、可回答的问题,是软件开发所特有的(no)@Lundin我不太了解那里确实存在哪些芯片,因此无法描述。我所知道的是每个芯片都是不同的:有不同的过程