DeviceScript: A TypeScript Subset Compiling to Custom VM Bytecode with Visual Studio Code Extension
Microsoft is making significant strides in the Internet of Things (IoT) landscape with its experimental DeviceScript technology, extending the popular TypeScript language to cater to tiny IoT devices. Introduced as an open-source project by Microsoft Research in May, DeviceScript aims to provide a TypeScript-like development experience specifically for low-resource, microcontroller-based devices. This initiative is particularly relevant for developers working with platforms like ESP32 and RP2040, which are commonly used in IoT applications.
At its core, DeviceScript is a subset of TypeScript that compiles down to custom VM bytecode, allowing it to operate efficiently in highly constrained environments. The virtual machine (VM) that executes this bytecode is impressively compact, with the base code size measuring just 10KB. When combined with additional components like the floating-point library and the Jacdac SDK, the total footprint rises to approximately 40KB. Jacdac, developed by Microsoft, serves as a comprehensive hardware and software stack designed for microcontrollers and peripheral devices, enhancing the overall functionality of the DeviceScript environment.
For developers eager to get started with DeviceScript, comprehensive instructions are readily available on the project’s official website. An integral part of this experience is the DeviceScript extension for Visual Studio Code. This extension empowers developers to build, deploy, debug, and trace their DeviceScript code seamlessly within the popular editor. Additionally, it offers device monitoring capabilities, ensuring developers can easily track the performance and behavior of their IoT applications in real-time.
To further streamline the development process, DeviceScript also features a command-line interface (CLI) that allows users to compile programs directly from their preferred Integrated Development Environment (IDE). The CLI is versatile, enabling use within containers like Docker, thus catering to a wide range of development setups and preferences. This flexibility ensures that developers can integrate DeviceScript into their existing workflows without significant friction.
While DeviceScript is designed to work similarly to TypeScript, it’s important to note that not all TypeScript features are supported within this environment. Developers will encounter certain semantic differences due to the resource limitations inherent in the DeviceScript runtime. For instance, strings are represented as Unicode rather than UTF-16, and the system employs aggressive tree shaking to optimize performance. Additionally, the runtime lacks support for subnormal numbers, which can affect how certain calculations are handled.
Overall, Microsoft’s DeviceScript represents a promising development in the IoT space, merging the ease and familiarity of TypeScript with the specialized needs of microcontroller environments. As IoT continues to expand, tools like DeviceScript are crucial in enabling developers to create efficient, robust applications for constrained devices. With its focus on performance and usability, DeviceScript is set to play a key role in shaping the future of IoT development, making it easier for developers to leverage the power of TypeScript in this rapidly evolving field.