Pony (programming language): Difference between revisions

Content deleted Content added
"Naming" section
Added mascot of Pony programming language from wikimedia
 
(82 intermediate revisions by 13 users not shown)
Line 1:
{{Short description|Programming language}}
{{AFC submission|t||ts=20190419190000|u=Milotheshort|ns=118|demo=}}
{{Infobox programming language
| name = Pony
| logo = <!-- (filename) -->Main_galloping.svg
| paradigm = [[Actor model]], [[object-oriented programming|Object-oriented]], [[Imperative programming|Imperative]]
| logo caption =
| designer = Sylvan Clebsch<ref>{{cite web |title=Sylvan Clebsch |website=[[Association for Computing Machinery|ACM]] |url=https://dl.acm.org/profile/83358632257}}</ref>
| screenshot = <!-- (filename) -->
| influenced by = [[E (programming language)|E]]<ref name="gems">{{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}}</ref>
| screenshot caption =
| influenced = [[Project Verona]]<ref name="zdnetver">{{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}}</ref>
| paradigm = <!-- or: | paradigms = -->
| released = {{Start date and age|2015|04|28|df=yes}}<ref>{{cite web |title=First public release | website=[[GitHub]] |url=https://github.com/ponylang/ponyc/releases/tag/0.1.0 |date=28 April 2015}}</ref>
| family =
| latest_release_version = 0.59.0
| designer = [[Sylvan Clebsch]]
| latest_release_date = {{start date and age|2025|04|26}}
| developer = <!-- or: | developers = -->
| typing = [[strong typing|strong]], [[static typing|static]], [[type inference|inferred]], [[nominal typing|nominal]], [[structural typing|structural]]
| released = <!-- {{Start date and age|YYYY|MM|DD|df=yes/no}} -->
| website = https{{URL|http://www.ponylang.io/org}}
| latest release version =
| license = [[BSD licenses|BSD]]-2.<ref>{{cite web | url=https://github.com/ponylang/ponyc/blob/master/LICENSE | title=Ponyc/LICENSE at main · ponylang/Ponyc | website=[[GitHub]] }}</ref>
| latest release date = <!-- {{Start date and age|YYYY|MM|DD|df=yes/no}} -->
| programming_language = [[C (programming language)|C]]
| latest preview version =
| latest preview date = <!-- {{Start date and age|YYYY|MM|DD|df=yes/no}} -->
| typing =
| scope =
| programming language =
| discontinued =
| platform =
| operating system =
| license = [[2-clause BSD]]<ref>[https://github.com/ponylang/ponyc/tree/12466227bb253b600b7a3ee995b56b442d02b6e2#license]</ref>
| file ext =
| file format = <!-- or: | file formats = -->
| website = https://www.ponylang.io/
| implementations = [[Ponylang]] [[Ponyc]]
| dialects =
| influenced by = [[Erlang (programming language)|Erlang]], [[Rust (programming language)|Rust]]
| influenced =
}}
 
'''Pony''' (also referred to as '''ponylang''') is a [[Free software|free]] and [[open-source|open source]], object-oriented, [[actor model]], [[Capability-based security|capabilities-secure]], high performance programming language.{{Sfn|Allen|2024}}<ref name="adabeat">{{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}}</ref> Pony's reference capabilities allow even mutable data to be safely [[Evaluation strategy#Call by reference|passed by reference]] between actors. [[Garbage collection (computer science)|Garbage collection]] is performed [[Concurrency (computer science)|concurrently]], per-actor, which eliminates the need to pause program execution or [[Tracing garbage collection#Stop-the-world vs. incremental vs. concurrent|"stop the world"]].<ref name="orca">{{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}}</ref><ref name="soc5">{{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}}</ref><ref name="dcpony">{{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}}</ref> Sylvan Clebsch is the original creator of the language.<ref name="pfintech">{{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}}</ref><ref name="pqc2020">{{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}}</ref> It is now being maintained and developed by members of the Pony team.<ref>{{cite web |title=Team Pony | website=[[GitHub]] |url=https://github.com/orgs/ponylang/people |access-date=28 December 2024}}</ref>
'''Pony''' is an [[object-oriented]], [[actor-model]], capabilities-secure, high-performance programming language.The actor model is particularly borrowed extensively from Erlang. The stated goals of pony are to provide [[concurrency protection]] by creating restriction keys.
 
==History==
<ref>{{cite web |url=https://www.ponylang.org/discover/#what-is-pony |title=What is Pony? |accessdate=5 June 2018}}</ref>
The language was created by Sylvan Clebsch, while a [[PhD]] student at [[Department of Computing, Imperial College London|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.<ref name="kgpony">{{cite conference |author=Kristoffer Grönlund |date=22 January 2018 | publisher=[[Linux.conf.au|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}}</ref>
<ref>{{cite web |url=https://opensource.com/article/18/5/pony?utm_medium=Email&utm_campaign=weekly&sc_cid=701f2000000RRACAA4 |title=Introduction to the Pony Programming Language |accessdate=5 June 2018}}</ref>
<ref>{{cite web |url=https://www.infoq.com/news/2016/03/pony-fintech |title=Using the Actor-model Language Pony for FinTech |accessdate=5 June 2018}}</ref>
 
==Language Naming design==
At its core, Pony is a systems language designed around safety and performance.
Sylvan Clebsch got the name "Pony" when someone said "Yeah, and I want a pony" in response to him talking about his numerous ideas for Pony.<ref>{{Cite web|last=Clebsch|first=Sylvan|date=2017-05-06|title=An Early History of Pony|url=https://www.ponylang.io/blog/2017/05/an-early-history-of-pony/|url-status=live|access-date=2022-01-15|website=}}</ref>
=== Safety ===
* [[Type safety]] - Pony is a type safe language.<ref name="jmpony">{{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}}</ref>
* [[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}}<ref name="atpony">{{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}}</ref>
* [[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 [[Race condition|data races]] nor [[Deadlock (computer science)|deadlocks]].{{Sfn|Mölle|2017}}<ref name="ipony">{{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}}</ref><ref>{{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}}</ref><ref name="soundness">{{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}}</ref>
 
=== Performance ===
* Lock-free - By design, Pony avoids the need for traditional locking mechanisms, which eliminates the overhead and contention associated with locks.<ref name="kgpony"></ref>
* Native code - Pony is an [[ahead-of-time compilation|ahead-of-time compiled language]]. There is no interpreter or virtual machine{{Sfn|Mölle|2017}}<ref name="atpony"></ref>
* Concurrent garbage collection - Each actor's heap is collected separately and concurrently, avoiding the need to "stop the world" for global collection.<ref name="pfintech"></ref><ref name="pqc2020"></ref><ref name="soundness"></ref>
 
==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}}
 
<syntaxhighlight lang="pony">
actor Main
new create(env: Env) =>
env.out.print("Hello, world!")
</syntaxhighlight>
 
There are no global variables in Pony, meaning everything must be contained within an instance of a class or an actor.<ref name="kgpony" /> As such, even the environment that allows for printing to [[stdout|standard output]] is passed as a parameter.<ref name="kgpony" />{{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]]
[[Category:Cross-platform free software]]
[[Category:Free and open source compilers]]