Pony (programming language): Difference between revisions

Content deleted Content added
fix comment
Added mascot of Pony programming language from wikimedia
 
(10 intermediate revisions by 5 users not shown)
Line 1:
{{Short description|Programming language}}
{{AFC submission|||u=Wukuendo|ns=118|ts=20250103143656}} <!-- Do not remove this line! -->
 
{{AFC comment|1=Another missing citation here: "As such, even the environment that allows for printing to stdout is passed as a parameter." [[User:Caleb Stanford|Caleb Stanford]] ([[User talk:Caleb Stanford|talk]]) 06:24, 10 March 2025 (UTC)}}
 
{{AFC comment|1=Please fix the following: (1) The "Creator of Pony". ACM. reference is not formatted correctly. The title of the website is not "Creator of Pony". (2) "The result is he began development on Pony." This sentence can be removed, as it is implied. (3) "capabilities-secure" should likely have a wikilink. (4) "A few examples of idiomatic Pony follow" There is only one, also the "idiomatic" needs a citation or the word can just be removed. (5) "influenced" and "influenced by" are missing a citation. [[User:Caleb Stanford|Caleb Stanford]] ([[User talk:Caleb Stanford|talk]]) 06:23, 10 March 2025 (UTC)}}
 
{{AFC comment|1=I do believe that the topic is potentially notable. While it's mostly an academic language (with some not-so-well-cited papers), the paper "Deny capabilities for safe, fast actors" is quite well-cited. The developer is a real researcher at Microsoft Research, and the language has 5.8K stars on GitHub. The sources here are of mixed quality but there are some real ones.
 
However I think the article draft needs some work. What is "stop the world" in the lead? The references need a bit of cleanup. "Creator of Pony, Google Scholar" is not something to include as a reference. "Deny Capabilities for Safe, Fast Actors" is listed twice, once as a plain PDF. InfoQ sources probably OK. Can you fix these things and try again? [[User:Caleb Stanford|Caleb Stanford]] ([[User talk:Caleb Stanford|talk]]) 18:10, 8 March 2025 (UTC)}}
 
----
 
{{AFC comment|1=Some parts of the critique seem opinionated. For instance, "stop the world" is a phrase from the references, used when referring to GCs, and originally placed into the lead by a previous editor. As this is still a draft, which has not been reviewed, it looks not to be a problem to correct errors, violations of rules, or grammar. When it comes to matters of opinion or aesthetics, however, that appears to be more problematic or something to have been addressed in talk.[[User:Wukuendo|Wukuendo]] ([[User talk:Wukuendo|talk]]) 16:00, 9 March 2025 (UTC)}}
 
{{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=Sylvan Clebsch |website=[[Association for Computing Machinery|ACM]] |url=https://dl.acm.org/profile/83358632257}}</ref>
Line 21 ⟶ 8:
| 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>
| 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.130
| latest_release_date = {{start date and age|2025|0304|0926}}
| typing = [[strong typing|strong]], [[static typing|static]], [[type inference|inferred]], [[nominal typing|nominal]], [[structural typing|structural]]
| website = {{URL|http://www.ponylang.org}}
Line 29 ⟶ 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="hnoon">{{cite web |author=Alex Lashkov |date=26 July 2023 |title=The New Wave of Programming Languages: Pony, Zig, Crystal, Vlang, and Julia |url=https://hackernoon.com/the-new-wave-of-programming-languages-exploring-the-hidden-gems |access-date=24 December 2024 |website=Hackernoon}}</ref><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>
 
==History==
Line 37 ⟶ 24:
At its core, Pony is a systems language designed around safety and performance.
=== Safety ===
* [[Type safety]] - Pony is a type safe language.<ref name="hnoon"></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>
* [[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}}
Line 43 ⟶ 30:
 
=== Performance ===
* Lock-free - 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 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>
Line 58 ⟶ 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" /> 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 73 ⟶ 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]]