Draft:Pony (programming language)
Paradigm | Actor model, Object-oriented, Imperative |
---|---|
Designed by | Sylvan Clebsch |
First appeared | November 9, 2012 |
Stable release | 0.58.5
/ June 1, 2024 |
Typing discipline | strong, static, inferred, nominal, structural |
Implementation language | C |
License | BSD-2.[1] |
Website | www |
Influenced by | |
E | |
Influenced | |
Encore, Project Verona[2], Savi, Inko |
Pony (sometimes referred to as ponylang) is a free and open source, object-oriented, actor model, capabilities-secure, high performance programming language. Pony's reference capabilities allow even mutable data to be safely passed by reference between actors. Garbage collection is performed concurrently, per-actor, without the need to "stop the world".
Language design
[edit]At its core, Pony is a systems language designed around safety and performance.
Safety
[edit]- Type Safety - Pony is a type safe language.[3]
- 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.
- Exception Safety - There are no runtime exceptions. All exceptions have defined semantics and they are always caught.
- Concurrency Safety - The type system employs reference capabilities[4] to ensure (at compile time) that your program is free of data races and deadlocks.
Performance
[edit]- Lock-Free - By design, Pony avoids the need for traditional locking mechanisms, which eliminates the overhead and contention associated with locks.
- Native Code - Pony is an ahead-of-time (AOT) compiled language. There is no interpreter or virtual machine
- Concurrent Garbage Collection - Each actor's heap is collected separately and concurrently, avoiding the need to "stop the world" for global collection.
Examples
[edit]A few examples of idiomatic Pony follow.
Hello World
[edit]In Pony, instead of a main function, there is a main actor. The creation of this actor serves as the entry point into the Pony program.
actor Main
new create(env: Env) =>
env.out.print("Hello, world!")
There are no global variables in Pony, everything must be contained within an instance of a class or an actor. As such, even the environment that allows for printing to stdout is passed as a parameter.
References
[edit]- ^ https://github.com/ponylang/ponyc/blob/master/LICENSE
- ^ "Verona FAQ". Github.
- ^ https://www.ponylang.org/media/papers/fast-cheap.pdf
- ^ Sylvan Clebsch, Sophia Drossopoulou, Sebastian Blessing, Andy McNeil (October 2015). "Deny capabilities for safe, fast actors". In Elisa Gonzalez Boix, Philipp Haller, Alessandro Ricci, Carlos Varela (ed.). AGERE! 2015: Proceedings of the 5th International Workshop on Programming Based on Actors, Agents, and Decentralized Control. Pittsburgh, PA, USA: Association for Computing Machinery. pp. 1–12. doi:10.1145/2824815.2824816. ISBN 9781450339018.
{{cite conference}}
: CS1 maint: multiple names: authors list (link)
External links
[edit]- Offical website
- Composition over Inheritance with Pony
- QCon London: Co-Designing a Type System and Runtime
- InfoQ Interview: Sylvan Clebsch on the Actor-Model Language Pony, Garbage Collection, Capabilities, Concurrency
- From Go to Pony
- InfoQ: Using the Actor-model Language Pony for FinTech
- Pony: Making it easy to write efficient, concurrent, data race free programs at Curry On 2015 associated with ECOOP 2015