The Internet of Things (IoT) revolves around the development, mass-production and deployment of wireless embedded sensor devices. A plethora of prototyping platforms for exploring and developing those sensor nodes exists. However many of those toolkits do not scale beyond prototyping or offer an inferior development experience compared to other domains, e.g. mobile-apps or the web.
The Bosch Cross-Domain-Development Kit (XDK) offers a clear path from prototyping to mass-production. Because of this scalability goal developers need to write their software on a low abstraction level (in C, working on a bare resource-level) which eases product development later-on but impedes exploration and flexibility. Developers have to care about hardware-specific details instead of focusing on sensor data and connectivity to the Cloud or other systems. Novices face a high entry barrier and are offered a complex developer experience.
To overcome the rigidity of the conventional embedded IoT device development process, we propose a new systems programming language designed for the IoT. While the idea originally evolved from the need on the Bosch XDK, we designed the language to be hardware independent and easy to adapt to other IoT and sensor driven developments. It inherits the syntax of modern general-purpose system-level languages (e.g. Swift or Rust), but compiles to near-production ready C code. This transports the hardware scalability (from prototyping to mass-production) to the software world.
We introduce first-class primitives for sensor access and connectivity to other systems, which allows for quick exploration and integration into IoT ecologies. We support embedded algorithm through powerful primitives, e.g. lists, vectors and statistic functions. In order to prevent problems at compile-time we implemented a static strong type-system.
Methodology and Evaluation
We and develop the language in a user-centered design process, in addition to building on state-of-the-art language concepts. The former means that we evaluate our design decisions with experienced and novice user-groups in A/B tests and semi-structured interviews. The latter we have derived by studying modern system-level languages.
Conclusion and Future Work
In future work we plan to explore the language-level integration with Eclipse Vorto, a technology-agnostic device description language. Further, we intend to investigate a visual programming language built on top of this work.
In summary, we present a new system-level programming language for the IoT. We empower developers to directly develop, interact and ideate with an ecology of sensors and connectivity. Through its language features and integrated development environment we can offer a developer experience similar to the web. All the while we enable a smooth transition from prototyping to mass-production by generating near production-ready C code.