Main Page

The Virgil Programming Language is designed for building robust, flexible, and scalable software systems on embedded hardware platforms. Virgil builds on ideas from object-oriented, statically typed languages like Java, providing a clean, consistent source language. Its compiler system provides an efficient implementation for resource-constrained environments.

What is Virgil?

Virgil is an new, light-weight object-oriented programming language that is designed for building software for resource-constrained embedded systems at the lowest level. Microcontroller programmers can now develop complete software systems, including hardware drivers and OS services, in one language, without the need to resort to unsafe libraries or native code. Virgil also provides a whole-program compiler system that applies novel global optimization techniques to produce efficient machine code that runs directly on the hardware, without the need of a virtual machine or a language runtime system.

Why are microcontrollers important?

Embedded computers are everywhere. While the desktop computer revolution has brought computing to millions of users worldwide, the embedded system revolution has been quietly automating the world we live in--everything from the cars we drive to the roadways we drive them on; from factory production to the goods we use every day. In 2005, nearly 6 billion microcontroller units were manufactured. Today, microcontrollers outnumber people on this planet by more than 5 to 1. Soon, most electronic devices will have a software-programmable embedded computer with capabilities ranging from simple arithmetic to wireless communication, and microcontrollers offer a compelling solution for many of these products.

How is software for embedded systems different?

Software in this environment has very different requirements than traditional desktop and server computers. First, embedded programs must control devices that sense and interact with the physical world, in contrast to desktop and server software that is driven by databases, websites, and input from users. Second, embedded systems often operate in safety critical real-time scenarios, where software is tasked with controlling physical processes and actuators that can pose physical danger to people, infrastructure, and the environment. Third, the cost of software update for billions of devices makes it largely infeasible, vastly increasing the importance of software verification.

How can new language technology help?

Advances in programming languages over the past 30 years have yielded demonstrable productivity gains, including better static checking, more expressiveness, and better portability and maintability. Yet these advances have not been put into practical use in developing embedded systems software. The continued use of unsafe, low-level languages that frustrate automated program reasoning and verification poses a significant stumbling block to progress. While no magic bullet exists for software development, we believe that applying modern technology to this problem will produce real, tangible gains in both software quality and efficiency.