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.