Pony (programming language): Difference between revisions

Content deleted Content added
Updated references.
Added mascot of Pony programming language from wikimedia
 
(41 intermediate revisions by 5 users not shown)
Line 1:
{{Short description|Programming language}}
{{AfC submission|||ts=20250103143656|u=Wukuendo|ns=118}}
<!-- {{AfC submission|t||ts=20221122223018|u=Ferdinand55|ns=118|demo=}} -->
 
<!-- Note: The following pages were redirects to [[Pony_(programming_language)]] before draftification:
*[[Pony (programming Language)]]
-->
 
{{Infobox programming language
| name = Pony
| logo = Main-gallopingMain_galloping.svg
| paradigm = [[Actor model]], [[object-oriented programming|Object-oriented]], [[Imperative programming|Imperative]]
| designer = Sylvan Clebsch<ref>{{cite web |title=CreatorSylvan of PonyClebsch |website=[[GoogleAssociation Scholarfor Computing Machinery|ACM]] |url=https://scholardl.googleacm.ptorg/citations?user=4GSMPioAAAAJ&hl=enprofile/83358632257}}</ref>
| 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>
| influenced by = [[E (programming language)|E]]
| 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>
| influenced = [[Project Verona]]
| 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>
| latest_release_version = 0.5859.90
| latest_release_date = {{start date and age|20242025|1204|2926}}
| typing = [[strong typing|strong]], [[static typing|static]], [[type inference|inferred]], [[nominal typing|nominal]], [[structural typing|structural]]
| website = {{URL|http://www.ponylang.org}}
Line 22 ⟶ 16:
}}
 
'''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="hnoonadabeat">{{cite web |author=Alex Lashkov |date=268 JulyAugust 20232024 |title=TheIntroduction Newto WaveActor of Programming Languages: Pony, Zig, Crystal, Vlang, and JuliaModel |url=https://hackernoonadabeat.com/thefp/introduction-newto-wave-of-programming-languagesactor-exploring-the-hidden-gemsmodel/ |access-date=248 DecemberMarch 20242025 |website=Hackernoonadabeat}}</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, withoutwhich 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>
 
==History==
The language was created by Sylvan Clebsch, while a [[Ph.DPhD]] 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. The result is he began development on Pony.<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>
 
==Language design==
At its core, Pony is a systems language designed around safety and performance.
=== Safety ===
* [[Type Safetysafety]] - 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://wwwtalks.ponylangcodemotion.orgcom/media/papers/fastsafely-cheap.pdf</ref><refsharing-data-reference-capabiliti name|access-date="hnoon">28 December 2024 |website=codemotion}}</ref>
* [[Memory Safetysafety]] - 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 20242025 |website=geekflare}}</ref>
* [[Exception Safetysafety]] - There are no runtime exceptions. All exceptions have defined semantics and they are always caught.{{Sfn|MCStone|2023}}
* Concurrency Safetysafety - The type system employs reference capabilities to ensure (at compile time) that yourthere programare isno free of[[Race condition|data races]] andnor [[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>
| 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="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>
 
=== Performance ===
* Lock-Freefree - By design, Pony avoids the need for traditional locking mechanisms, which eliminates the overhead and contention associated with locks.<ref name="hnoon"></ref><ref name="kgpony"></ref>
* Native Codecode - Pony is an [[ahead-of-time (AOT)compilation|ahead-of-time compiled language]]. There is no interpreter or virtual machine{{Sfn|Mölle|2017}}<ref name="atpony"></ref>
* Concurrent Garbagegarbage Collectioncollection - 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==
A few examples of idiomatic Pony follow.
 
===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">
Line 65 ⟶ 45:
</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">< /ref> 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==
Line 80 ⟶ 60:
* [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]]