ted.neward@newardassociates.com | Blog: http://blogs.newardassociates.com | Github: tedneward | LinkedIn: tedneward
learn the core Virgil syntax, type system, and semantics
discover how Virgil deploys and interoperates with the rest of the world
get a sense of how to use Virgil well
Code: https://github.com/tedneward/Demo-Virgil
Slides: http://www.newardassociates.com/presentations/BusyDevsGuide/Virgil.html
Statically-typed
Balancing five factors:
Classes - for basic object-oriented programming
Functions - for small-scale reuse of functionality
Tuples - for efficient aggregation and uniform treatment of multi-argument functions
Type parameters - for powerful and clean abstraction over types
Algebraic data types - for easy building and matching of data structures
Cross-compiles to several different target architectures
bash (or compatible) shell
One of:
JVM 1.3+
x86 Linux (including Windows WSL)
x86 macOS (no Apple Silicon)
git (for installation)
git clone https://github.com/titzer/virgil.git
put virgil/bin on the $PATH
run v3i to verify it's working
Aeneas III-8.1787 stable current version (as of Nov 2025)
v3i: interpreter
v3c: compiler
target-specific compilers
v3c-jar: JVM
v3c-x86-64-darwin, v3c-x86-darwin: macOS
v3c-x86-64-linux, v3c-x86-linux: Linux
v3c-host: compile to host architecture
v3db: debugger
virgil: Driver CLI tool
HelloWorld.v3: Hello, world
def main() {
System.puts("Hello World!\n");
}
Interpret
$ v3i HelloWorld.v3 Hello World!
Compile
$ v3c HelloWorld.v3 $ ./HelloWorld Hello World!
GitHub: Virgil repo
https://github.com/titzer/virgil
Tutorial
https://github.com/titzer/virgil/blob/master/doc/tutorial/Overview.md
Examples
https://github.com/titzer/virgil/tree/master/doc/tutorial/examples
Bradley Wei Jie Teo and Ben L. Titzer. Unboxing Virgil ADTs for Fun and Profit. In Proceedings of the Workshop Dedicated to Jens Palsberg on Occasion of of His 60th Birthday (JENSFEST 24). Pasadena, CA. October 2024.
Ben L. Titzer. Harmonizing Classes, Functions, Tuples and Type Parameters in Virgil III [pdf]. In Proceedings of the ACM Conference on Programming Language Design and Implementation (PLDI '13). San Diego, CA. June 2013.
Stephen Kou and Jens Palsberg. From OO to FPGA: Fitting round objects into square hardware? [pdf] In Proceedings of the ACM Conference on Object-Oriented Programming Systems, Languages and Applications (OOPSLA '10). Reno, Nevada, 2010.
Ben L. Titzer and Jens Palsberg. Vertical Object Layout and Compression for Fixed Heaps. In Semantics and Algebra Specification. Pp. 376-408. 2009.
Ben L. Titzer and Jens Palsberg. Vertical Object Layout and Compression for Fixed Heaps [pdf]. In Proceedings of the International Conference on Compilers, Architecture, and Synthesis for Embedded Systems (CASES ’07). Salzburg, Austria. October 2007.
Ben L. Titzer. Virgil: Objects on the Head of a Pin [pdf]. In Proceedings of the 21 st Annual Conference on Object-Oriented Systems, Languages, and Applications (OOPSLA '06). October 2006.
Architect, Engineering Manager/Leader, "force multiplier"
http://www.newardassociates.com
http://blogs.newardassociates.com
Sr Distinguished Engineer, Capital One
Educative (http://educative.io) Author
Performance Management for Engineering Managers
Books
Developer Relations Activity Patterns (w/Woodruff, et al; APress, forthcoming)
Professional F# 2.0 (w/Erickson, et al; Wrox, 2010)
Effective Enterprise Java (Addison-Wesley, 2004)
SSCLI Essentials (w/Stutz, et al; OReilly, 2003)
Server-Based Java Programming (Manning, 2000)