Draft:Pony (programming language): Difference between revisions
No edit summary |
Andy Dingley (talk | contribs) →References: columns are now by default |
||
(25 intermediate revisions by 10 users not shown) | |||
Line 1: | Line 1: | ||
{{ |
<!-- {{AfC submission|t||ts=20221122223018|u=Ferdinand55|ns=118|demo=}} --> |
||
<!-- Note: The following pages were redirects to [[Pony_(programming_language)]] before draftification: |
|||
⚫ | |||
--> |
|||
{{Infobox programming language |
{{Infobox programming language |
||
| name = |
| name = Pony |
||
| logo = |
| logo = Main-galloping.svg |
||
| paradigm = [[Actor model]], [[object-oriented programming|Object-oriented]], [[Imperative programming|Imperative]] |
|||
| logo caption = |
|||
⚫ | |||
| screenshot = <!-- (filename) --> |
|||
⚫ | |||
| screenshot caption = |
|||
| influenced = {{URL|https://www.gitbook.com/book/stw/the-encore-programming-language/details|Encore}}, [[Project Verona]]<ref>{{cite web |title=Verona FAQ |url=https://github.com/microsoft/verona/blob/master/docs/faq.md |website=Github}}</ref>, [https://github.com/savi-lang/savi Savi], [https://inko-lang.org/ Inko] |
|||
| paradigm = <!-- or: | paradigms = --> |
|||
| latest_release_version = 0.58.5 |
|||
| family = |
|||
| latest_release_date = {{start date and age|2024|06|01}} |
|||
⚫ | |||
| typing = [[strong typing|strong]], [[static typing|static]], [[type inference|inferred]], [[nominal typing|nominal]], [[structural typing|structural]] |
|||
| developer = <!-- or: | developers = --> |
|||
| website = {{URL|http://www.ponylang.org}} |
|||
| released = <!-- {{Start date and age|YYYY|MM|DD|df=yes/no}} --> |
|||
| |
| year = {{release date and age|2012|11|09}} |
||
| license = [[BSD licenses|BSD]]-2.<ref>https://github.com/ponylang/ponyc/blob/master/LICENSE</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 = |
|||
⚫ | |||
| discontinued = |
|||
| platform = |
|||
| operating system = |
|||
| license = |
|||
| file ext = |
|||
| file format = <!-- or: | file formats = --> |
|||
| website = <!-- {{url|www.example.com}} --> |
|||
| implementations = [[Ponylang]] [[Ponyc]] |
|||
| dialects = |
|||
⚫ | |||
| influenced = |
|||
}} |
}} |
||
'''Pony''' is |
'''Pony''' (sometimes referred to as '''ponylang''') is a [[Free software|free]] and [[open-source|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== |
|||
At its core, Pony is a systems language designed around safety and performance. |
|||
=== Safety === |
|||
* Type Safety - Pony is a type safe language.<ref>https://www.ponylang.org/media/papers/fast-cheap.pdf</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. |
|||
* 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<ref>{{cite conference |
|||
| author = Sylvan Clebsch, Sophia Drossopoulou, Sebastian Blessing, Andy McNeil |
|||
| 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> to ensure (at compile time) that your program is free of data races and deadlocks. |
|||
=== 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 (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== |
|||
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. |
|||
<syntaxhighlight lang="pony"> |
|||
actor Main |
|||
new create(env: Env) => |
|||
env.out.print("Hello, world!") |
|||
</syntaxhighlight> |
|||
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== |
|||
{{Reflist}} |
|||
== External links == |
|||
* [http://www.ponylang.org Offical website] |
|||
<ref>{{cite web |url=https://www.ponylang.org/discover/#what-is-pony |title=What is Pony? |accessdate=5 June 2018}}</ref> |
|||
* [https://medium.com/@KevinHoffman/composition-over-inheritance-in-pony-33bbe107914 Composition over Inheritance with Pony] |
|||
<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> |
|||
* [https://qconlondon.com/ln2017/presentation/pony-co-designing-type-system-and-run-time QCon London: Co-Designing a Type System and Runtime] |
|||
⚫ | |||
* [https://www.infoq.com/interviews/clebsch-pony InfoQ Interview: Sylvan Clebsch on the Actor-Model Language Pony, Garbage Collection, Capabilities, Concurrency] |
|||
* [https://c7.se/from-go-to-pony/ From Go to Pony] |
|||
⚫ | |||
* [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] |
Latest revision as of 01:36, 21 June 2024
Paradigm | Actor model, Object-oriented, Imperative |
---|---|
Designed by | Sylvan Clebsch |
First appeared | November 9, 2012 |
Stable release | 0.58.5
/ June 1, 2024 |
Typing discipline | strong, static, inferred, nominal, structural |
Implementation language | C |
License | BSD-2.[1] |
Website | www |
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]- ^ https://github.com/ponylang/ponyc/blob/master/LICENSE
- ^ "Verona FAQ". Github.
- ^ https://www.ponylang.org/media/papers/fast-cheap.pdf
- ^ 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)
External links
[edit]- Offical website
- Composition over Inheritance with Pony
- QCon London: Co-Designing a Type System and Runtime
- InfoQ Interview: Sylvan Clebsch on the Actor-Model Language Pony, Garbage Collection, Capabilities, Concurrency
- From Go to Pony
- InfoQ: Using the Actor-model Language Pony for FinTech
- Pony: Making it easy to write efficient, concurrent, data race free programs at Curry On 2015 associated with ECOOP 2015