在嵌入式设备中使用 JavaScript 的前景

时间:2022-05-20 05:46:24

by Conmajia

PC上的JavaScript已经发展到ECMAScript 6(ES6),马上ES10都快出来了(虽然还是草案),但是硬件上的JS却很少听说。这几年手持设备/可穿戴设备的发展非常快,可以说快到令人发指。以ARM为主的嵌入式CPU几年前运行gingerbread都还卡的不行,现在已经845、855,3GHz主频起步,轻松秒杀一票PC了。既然硬件这么强,那么我就有了在嵌入式设备里玩JavaScript的可能,并且我坚信它一定是可行的,于是我找权威人士咨询了一下。

在嵌入式设备中使用 JavaScript 的前景
▲ 仙人指路让我省了不少劲(Sebestyen是ECMA的秘书长)

果然,这方面的工作早就开展起来了。不过也证明了我的想法是可行的。按图索骥,在联系了Hoddie和Luthi之后,我找到了用于嵌入式设备的JavaScript草案。这份草案在ECMA 2019备忘录中已经有了明确的agenda,让我突然有点兴奋。

TC53 – Smart Wearable Systems and Sensor-based Devices
Scope:
Internet of Things (IoT) is becoming a reality, and with it, the appearance of small intelligent devices linked together by large data networks to data centers collecting and analyzing “big data”. A sizable category of such intelligent devices are in form of so called wearables. Wearable sensor-based systems can comprise various types of small sensors, transmission modules and processing capabilities, and can thus capture various information ranging from monitoring of bodily activities to blood pressure, body temperature and heart rate in wearable devices, and external temperature, humidity, atmospheric pressure, location, and even altitude in small intelligent devices.

事实上,嵌入式设备的JS引擎目前全世界只有Peter Hoddie的Moddable公司一家在提供。不过他们起步很早,大约在2005年前后发布了第一个公开的用于硬件的JS引擎叫做XS3,基于ES3。但使用的厂家比较少,主要是Sony在用,代表产品PRS-500。

在嵌入式设备中使用 JavaScript 的前景
▲ 大法的另类电子书(注定扑街)

随后2010、2014年前后,XS5、XS6分别发布,可惜依然没什么代表性的产品。这可以理解,那会儿嵌入式设备的计算能力还是太若弱了,必须牺牲很大一部分资源来实现硬件JS。从第6版开始,XS慢慢发力,并实行了开源,加快发展步伐。

在嵌入式设备中使用 JavaScript 的前景
▲ 基于XS6的产品,我不知道这是什么玩意儿,看着像个wifi router

现在,到了最新的XS7之后,硬件JS已经非常强大了。除了跨平台支持win、mac、linux之外,还通过了几乎全部Test262。图片有点旧,最新版是99.8%/99.4%的comformance。新的XS7现在成为了TC-39的核心。

在嵌入式设备中使用 JavaScript 的前景
▲ 语言特性方面,已经通关了

XS不光可以运行在嵌入式设备上,还可以集成到PC里。这一点,让我觉得它将来的应用非常广泛。想象一下,一台自带“JS引擎”的手环、路由器、电脑,听着就很带感。

在嵌入式设备中使用 JavaScript 的前景
▲ XS的链接模型

最近,XS8也即将出现。显然TC-53就是它的雏形。根据介绍,asyncawait 都将粉墨登场,这对于MCU经典的setup-loop结构来说非常有用。不管是配置、读取传感器,还是上传数据等等操作,有了JS异步能力的加持,未来的嵌入式(可穿戴)设备开发必然如虎添翼。XS甚至还有更大的野心,想要在多核MCU上实现并行计算能力,支持 automicsshared memory 等等。并行的JavaScript,我他妈吹爆