Draft:Pony (programming language)


Pony
ParadigmActor model, Object-oriented, Imperative
Designed bySylvan Clebsch
First appearedNovember 9, 2012; 12 years ago (2012-11-09)
Stable release
0.58.5 / June 1, 2024; 6 months ago (2024-06-01)
Typing disciplinestrong, static, inferred, nominal, structural
Implementation languageC
LicenseBSD-2.[1]
Websitewww.ponylang.org
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
  1. ^ https://github.com/ponylang/ponyc/blob/master/LICENSE
  2. ^ "Verona FAQ". Github.
  3. ^ https://www.ponylang.org/media/papers/fast-cheap.pdf
  4. ^ 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)
edit