This article was tagged by HasteurBot, because it may meet Wikipedia's criteria for speedy deletion as either a page in the draftspace, or a declined/unsubmitted userspace Articles for Creation page that has not been edited (excluding bot edits) in over six months. See CSD G13.
If this article does not meet the criteria for speedy deletion, please remove this notice. This draft was nominated by HasteurBot on January 23, 2018. If you plan to improve this draft, simply and remove the It MAY qualify to be deleted per WP:CSD#G13 as the edit before that occurred on July 15, 2017 (8.13 years ago). {{Db-afc}} , {{Db-draft}} , or {{Db-g13}} code.Administrators: check links, talk, history (last), and logs before deletion, as this page was tagged by a bot. This page was last edited by HasteurBot (contribs | logs) at 14:02, 23 January 2018 (UTC) (7 years ago) |
This article, Pony (programming language), has recently been created via the Articles for creation process. Please check to see if the reviewer has accidentally left this template after accepting the draft and take appropriate action as necessary.
Reviewer tools: Inform author |
This article, Pony (programming language), has recently been created via the Articles for creation process. Please check to see if the reviewer has accidentally left this template after accepting the draft and take appropriate action as necessary.
Reviewer tools: Inform author |
Comment: Source no. 3 is not independent of the subject. » Shadowowl | talk 16:56, 15 July 2017 (UTC)
Comment: This would've needed all major reviews. SwisterTwister talk 19:29, 20 January 2017 (UTC)
Pony (often referred to as ponylang) is a free and open source, object-oriented, actor model, capabilities-secure, high performance programming language. Pony blends together the race-free guarantees of the Rust programming language, static typing, generics, traits, and the structural typing so well used by the Go programming language. Its reference capabilities[2] system allows developers to be explicit about how data is shared among components and actors, visually indicating what can and cannot be read from or written to.
Pony | |
---|---|
Paradigm | Actor model |
Designed by | Sylvan Clebsch |
First appeared | November 9, 2012 |
Stable release | 0.15.0
/ August 7, 2017 |
Typing discipline | strong, static, inferred, structural |
Implementation language | C |
License | BSD-2.[1] |
Website | www |
Influenced by | |
E, Rust | |
Influenced | |
Encore |
This allows Pony to reside somewhere between the strict rules of Rust's borrow checker and Go's flexible structural typing while still being able to make race-free and data sharing guarantees.
History
In 2011, Sylvan Clebsch created a C-based actor library in order to solve some real problems for software he was creating. Ultimately this library became the first implementation of Pony in 2012.
Language design
At its core, Pony is a systems language designed around safety and performance.
- Type Safe - Pony is a very type safe language. For more details on why, check out the mathematical proof[3]
- Memory Safe - There are no dangling pointers and no buffer overruns. Like Rust, Pony does not even allow the concept of null.
- Exception-Safe -There are no runtime exceptions. All exceptions have defined semantics, and they are always caught.
- Data-race Free - Pony does not have locks or atomic operations. Instead, the type system ensures at compile time that your concurrent program can never have data races. This allows developers to write highly concurrent code with less change of problems occurring in the use of concurrency primitives.
- Deadlock-Free - Pony lacks language-level constructs to create locks. It is impossible to write code that compiles that will produce a deadlock.
- Native Code - Pony is an ahead-of-time (AOT) compiled language. There is no interpreter or virtual machine
- Compatible with C - Interop with C is enabled through FFI
- Garbage Collected - Each actor's heap is collected separately, there is no "stop the world" collection.
Examples
Here are a few examples of idiomatic Pony.
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.
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
- ^ https://github.com/ponylang/ponyc/blob/master/LICENSE
- ^ "Deny capabilities for safe, fast actors". 2015-10-26.
{{cite web}}
: Unknown parameter|authors=
ignored (help) - ^ https://www.ponylang.org/media/papers/fast-cheap.pdf
External links
- 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