Pony (programming language)
Programming language
From Wikipedia, the free encyclopedia
Pony (also known as ponylang) is a object-oriented, actor model, capabilities-secure, high performance programming language.[6][7] Pony's reference capabilities allow even mutable data to be safely passed by reference between actors. Garbage collection is performed concurrently, per-actor, which eliminates the need to pause program execution or "stop the world".[8][9][10] Sylvan Clebsch is the original creator of the language.[11][12] It is now being maintained and developed by members of the Pony team.[13] It is free and open-source software with a BSD 2-clause license.
| Pony | |
|---|---|
| Paradigms | Actor model, object-oriented, imperative |
| Designed by | Sylvan Clebsch[1] |
| First appeared | 28 April 2015[2] |
| Stable release | 0.60.4 (Beta)
/ October 31, 2025 |
| Typing discipline | strong, static, inferred, nominal, structural |
| Implementation language | C |
| License | BSD 2-clause.[3] |
| Website | www |
| Influenced by | |
| E[4] | |
| Influenced | |
| Project Verona[5] | |
History
The language was created by Sylvan Clebsch, while a PhD student at Imperial College London. His professor at that time was Sophia Drossopoulou, who is also well known for her contributions to computer programming, and as a lecturer. According to developers who have talked to Sylvan, he was frustrated with not having a high performance language that could run concurrent code securely, safely, and more simply.[14]
Language design
At its core, Pony is a systems language designed around safety and performance.
Safety
- Type safety – Pony is a type safe language.[15]
- Memory safety – There are no dangling pointers and no buffer overruns. There is no null but optional types can be safely represented using unions with the None type.[6][16]
- Exception safety – There are no runtime exceptions. All exceptions have defined semantics and are always caught.[17]
- Concurrency safety – The type system employs reference capabilities to ensure (at compile time) that there are no data races nor deadlocks.[18][19][20][21]
Performance
- Lock-free – By design, Pony avoids the need for traditional locking mechanisms, which eliminates the overhead and contention associated with locks.[14]
- Native code – Pony is an ahead-of-time compiled language. There is no interpreter or virtual machine[18][16]
- Concurrent garbage collection – Each actor's heap is collected separately and concurrently, avoiding the need to "stop the world" for global collection.[11][12][21]
Examples
Hello, World
In Pony, instead of a main function, there is a main actor. The creation of this actor serves as the entry point into a Pony program, as in this "Hello, World!" program.[6][17]
actor Main
new create(env: Env) =>
env.out.print("Hello, world!")
There are no global variables in Pony, meaning everything must be contained within an instance of a class or an actor.[14] As such, even the environment that allows for printing to standard output is passed as a parameter.[14][6]