Pony (programming language)
{{Short description|Programming language}}
{{Infobox programming language
| name = Pony
| logo = Main_galloping.svg
| paradigm = Actor model, Object-oriented, Imperative
| designer = Sylvan Clebsch{{cite web |title=Sylvan Clebsch |website=ACM |url=https://dl.acm.org/profile/83358632257}}
| influenced by = E{{cite web|author1=Daniele BonettaLuca|author2=Svizzera italiana|author3=Stefan Marr|author4=Walter Binder|url=https://labs.oracle.com/pls/apex/f?p=LABS:0:107979754432222:APPLICATION_PROCESS=GETDOC_INLINE:::DOC_ID:975|title=GEMS: Shared-Memory Parallel Programming for Node.js|quote=Pony is itself inspired by the design of E's programming model|website=oracle|date=2 November 2016|access-date=10 March 2025}}
| influenced = Project Verona{{Cite web|url=https://www.zdnet.com/article/microsoft-opens-up-rust-inspired-project-verona-programming-language-on-github/|title=Microsoft opens up Rust-inspired Project Verona programming language on GitHub|quote="Project Verona, which also borrows concepts from Cyclone, a "safe dialect of C" and Pony, which has key contributors from Microsoft Research"|author1=Liam Tung|website=ZDNet}}
| released = {{Start date and age|2015|04|28|df=yes}}{{cite web |title=First public release | website=GitHub |url=https://github.com/ponylang/ponyc/releases/tag/0.1.0 |date=28 April 2015}}
| latest_release_version = 0.59.0
| latest_release_date = {{start date and age|2025|04|26}}
| typing = strong, static, inferred, nominal, structural
| website = {{URL|http://www.ponylang.org}}
| license = BSD-2.{{cite web | url=https://github.com/ponylang/ponyc/blob/master/LICENSE | title=Ponyc/LICENSE at main · ponylang/Ponyc | website=GitHub }}
| programming_language = C
}}
Pony (also referred to as ponylang) is a free and open source, object-oriented, actor model, capabilities-secure, high performance programming language.{{Sfn|Allen|2024}}{{cite web | date=8 August 2024 |title=Introduction to Actor Model |url=https://adabeat.com/fp/introduction-to-actor-model/ |access-date=8 March 2025 |website=adabeat}} 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".{{cite journal |author1=Sylvan Clebsch | author2=Juliana Franco | author3=Sophia Drossopoulou |date=12 October 2017 |title=Ownership and Reference Counting Based Garbage Collection in the Actor World |url=https://dl.acm.org/doi/10.1145/3133896 |access-date=24 December 2024 |journal=Proc. ACM Program. Lang.| volume=1 | issue=OOPSLA | pages=72:1–72:28 | doi=10.1145/3133896}}{{cite web | publisher=Society 5 Solutions | date=15 October 2024 |title=Introduction to the Pony Programming Language |url=https://www.linkedin.com/pulse/introduction-pony-programming-language-society-5-solutions-llc-s3ppf |access-date=28 December 2024 |website=LinkedIn}}{{Cite web| author=Daniel Caccamo| year= 2018| title = GoA: Actors with Locally Managed Memory for Go| url= https://uwspace.uwaterloo.ca/bitstreams/b7bb2925-6bd6-49ab-a9b3-bc7581139529/download| access-date=28 December 2024 |website=UWSpace}} Sylvan Clebsch is the original creator of the language.{{cite web | author=Charles Humble |date=14 March 2016 |title=Using the Actor-model Language Pony for FinTec |url=https://www.infoq.com/news/2016/03/pony-fintech/ |access-date=24 December 2024 |website=InfoQ}}{{cite web |author=Sophia Drossopoulou |date=14 September 2020 |title=Pony, Actors, Causality, Types, and Garbage Collection |url=https://www.infoq.com/presentations/pony-types-garbage-collection/ |access-date=24 December 2024 |website=InfoQ}} It is now being maintained and developed by members of the Pony team.{{cite web |title=Team Pony | website=GitHub |url=https://github.com/orgs/ponylang/people |access-date=28 December 2024}}
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.{{cite conference |author=Kristoffer Grönlund |date=22 January 2018 | publisher=Linux Conference Australia 2018 (LCA2018) |title=Everyone gets a pony!| url=https://archive.org/details/lca2018-Everyone_gets_a_pony| access-date=28 December 2024 |website=archive}}
Language design
At its core, Pony is a systems language designed around safety and performance.
= Safety =
- Type safety - Pony is a type safe language.{{cite web |author=John Mumm |date=19 March 2019 |title=Safely Sharing Data: Reference Capabilities in Pony |url=https://talks.codemotion.com/safely-sharing-data-reference-capabiliti |access-date=28 December 2024 |website=codemotion}}
- 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.{{Sfn|Allen|2024}}{{cite conference |author=Ankush Thakur |date=21 December 2024 | title=12 New Programming Languages You Should Know| url=https://geekflare.com/dev/new-programming-languages/| access-date=3 January 2025 |website=geekflare}}
- Exception safety - There are no runtime exceptions. All exceptions have defined semantics and are always caught.{{Sfn|MCStone|2023}}
- Concurrency safety - The type system employs reference capabilities to ensure (at compile time) that there are no data races nor deadlocks.{{Sfn|Mölle|2017}}{{cite web |author=Sean T Allen |date=30 May 2018 |title=Introduction to the Pony programming language |url=https://opensource.com/article/18/5/pony |access-date=28 December 2024 |website=opensource}}{{cite conference |author1 = Sylvan Clebsch | author2 = Sophia Drossopoulou | author3 = Sebastian Blessing | title = Deny capabilities for safe, fast actors | book-title = AGERE! 2015: Proceedings of the 5th International Workshop on Programming Based on Actors, Agents, and Decentralized Control | date = October 2015 | pages = 1–12 | publisher = Association for Computing Machinery | location = Pittsburgh, PA, USA| isbn = 9781450339018 | doi = 10.1145/2824815.2824816 | editor = Elisa Gonzalez Boix, Philipp Haller, Alessandro Ricci, Carlos Varela}}{{cite web|author1=Juliana Franco|author2=Sylvain Clebsch|author3=Sophia Drossopoulou|author4=Jan Vitek|author5=Tobias Wrigstad| url=https://www.doc.ic.ac.uk/research/technicalreports/2018/DTRS18-1.pdf|title=Soundness of a Concurrent Collector for Actors|website=imperial|date=9 March 2018|access-date=8 March 2025}}
= Performance =
- 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 compiled language. There is no interpreter or virtual machine{{Sfn|Mölle|2017}}
- Concurrent garbage collection - Each actor's heap is collected separately and concurrently, avoiding the need to "stop the world" for global collection.
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 the Pony program.{{Sfn|Allen|2024}}{{Sfn|MCStone|2023}}
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. As such, even the environment that allows for printing to standard output is passed as a parameter.{{Sfn|Allen|2024}}
References
{{Reflist}}
Further reading
- {{cite journal |last=Mölle |first=Andreas |date=Dec 2017 |title=Developing concurrent programs with Pony |journal=Linux Magazine |issue=205 |issn=1536-4674}}
- {{Cite book |last1=MCStone |first1=Maverick |date=Dec 2023 |title=Pony Playbook: Mastering the Basics of Concurrent Programming|publisher=Independently Published|isbn=979-8870768175|language=en}}
- {{Cite book |last1=Allen |first1=Corby |date=Jul 2024 |title=Pony Programming: The Complete Guide to Building High-Performance, Concurrent, and Secure Applications with Pony |publisher=Independently Published|isbn=979-8332662072|language=en}}
External links
- [http://www.ponylang.org Official website]
- [https://tutorial.ponylang.io/ Ponylang Tutorial]
- [https://www.youtube.com/watch?v=KvLjy8w1G_U Pony: Making it easy to write efficient, concurrent, data race free programs] at [http://curry-on.org/2015/sessions/pony-making-it-easier-to-write-efficient-concurrent-programs.html Curry On 2015] associated with ECOOP [http://2015.ecoop.org/ 2015]
Category:Programming languages
Category:Concurrent programming languages
Category:Multi-paradigm programming languages
Category:Software using the BSD license
Category:Cross-platform software