February 17, 2021
By Dan Sullivan
As they build IoT applications, developers have many programming languages at their disposal.
Let’s start with the characteristics of any programming language that makes it a good candidate for IoT development.
Application performance is a top priority, especially for code running on devices with minimal CPU and memory resources. Developers can develop highly performant applications with C and C++, but at a cost. C and C++ developers know all too well the risks and challenges of dealing with bugs related to memory management such as unhandled null pointers and failing to de-allocate unused memory.
Another component of a good IoT development language is developer productivity. Productivity is often a byproduct of skills, tools, and programming language abstractions and patterns. Popular programming languages are well supported by development environments. Additionally, developer acquire build tools and skills with time and experience; as a result, language abstractions and patterns are a key variable with regards to developer productivity.
For those looking for both application performance and developer productivity, Rust is an increasingly popular option.
Register for IoT World 2021 here.
Rust Development for IoT Performance and Productivity
Rust is an open source systems programming language developed by the Mozilla Foundation. It’s designed to be memory safe, fast, and with the ability to easily support concurrency. The syntax of Rust is superficially similar to C and C++, but it also captures some of the benefits of functional languages like Haskel by providing abstractions such as iterators and closures.
Some noteworthy traits of Rust are that it guarantees memory safety and doesn’t use garbage collection (a form of automatic it doesn’t allow dangling pointers or null pointers, and it uses the concept of a lifetime to track when memory is allocated, when it’s deallocated, and who can access it.
It’s important to note that Rust uses static types as well as type states for modeling assertions about the state of computation before and after a statement. With a static system, the compiler can apply constraints to avoid bugs that can occur in dynamically typed languages. In addition, Rust provides a type system called traits.
Rust offers several advantages over other systems programming languages. Its compiler is designed to catch subtle bugs that can afflict low-level and concurrency code, and Cargo, its dependency manager and build tool, streamlines compiling, testing and documenting code.
As noted previously, Rust is designed for application performance as well as speed of development. An example of this is demonstrated in abstractions like iterators that can perform as well as equivalent custom code.
Rust also brings a broad set of abstractions to low-level, high-performance programming, including vectors and hash maps. Although Rust is not a functional programming language, it has abstractions like closures and iterators available when functional programming approaches are called for. An example of a low-level feature, Rust allows programmers to decide when to store data on the stack or in heap storage.
Rust Development Community Offers Best Practices
A discussion of the advantages of Rust would be incomplete without acknowledging its community. Various resources have been made available by developers and users, such as documentation, a free book, and cookbooks freely available to developers who work with bare metal, microcontrollers, and IoT devices.
Rust offers developers speed, safety, high level abstractions and an efficient development environment. With all the different edges it has over alternative languages, it’s not too surprising Rust is gaining traction in systems programming, scientific programming, and other application areas including IoT applications.
In the next article in this series, we will explore the Rust ecosystem, packages for IoT and how to architect an application.
You May Also Like