Skip to content

Instantly share code, notes, and snippets.

@aturley
Last active March 17, 2023 03:21
Show Gist options
  • Star 38 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save aturley/49b60c98306d90ffc2f981515827b005 to your computer and use it in GitHub Desktop.
Save aturley/49b60c98306d90ffc2f981515827b005 to your computer and use it in GitHub Desktop.
Information about Pony based on the items outlined in https://twitter.com/casio_juarez/status/898706225642086400

Pony Considerations

If you're thinking of checking out the Pony programming language, here's a list of things that I think are important to know. This list is based on a Tweet that I wrote.

Editor/IDE support

There are Pony packages for several popular editors.

There is currently no support for popular IDEs like Eclipse or IntelliJ.

Build Tools

The Pony compiler can handle all of the work of building and linking Pony programs. If anything more complex is needed the most common solution is to use a Makefile. There's a Gradle plugin as well.

Compiler/Runtime

Pony programs are compiled into native code using ponyc. The compiler is based on LLVM.

The recommended method for installing Pony on supported systems is to use ponyup

There are installation instructions for other systems.

Debugging

The Pony compiler can create a debug build of a program that works with lldb (it also works with gdb, but that has been less tested). Here's the Pony LLDB Cheatsheet. You can set breakpoints and inspect variables. The pony-lldb extension makes it a little easier to inspect things like strings and arrays.

Package Management

corral is the recommended dependency manager. It replaces stable, the old dependency manager.

Community

The Pony community communicates primarily through Zulip. There is also a @ponylang Twitter account.

Testing

The standard library ships with a unit testing framework. It should look pretty familiar if you've used other unit testing frameworks. There are lots of unit tests for the standard library packages, so you can look at those as examples (here's the tests for the option parser).

There's also a property based testing system if you're into that kind of thing.

Project Organization

The Pony compiler is pretty flexible about where to find things. Packages are mapped on to directories, but files within those directories can contain any number of classes and can use any name that ends in .pony.

There's a project called Library Project Starter that can be used to set up a Pony project with some basic files for version control, CI, and documentation. The Pony Standard Library Style Guide includes recommendations for file naming.

Documentation

Pony supports package- and class-level doc strings. The compiler can then use these to generate documentation. The standard library documentation uses this system.

Learning

The main resource for learning Pony is the Pony Tutorial.

@JeffreyBenjaminBrown
Copy link

The first link on this page is dead. (Maybe others too, didn't check.)

@mattpodwysocki
Copy link

mattpodwysocki commented Mar 19, 2018

@aturley there is a Visual Studio Code plugin for Pony called the Pony Language Colorizer

@Arnavion
Copy link

-* Visual Studio 
-  * [VS pony](https://github.com/ponylang/VS-pony)
-  * [Pony Language Colorizer](https://marketplace.visualstudio.com/items?itemName=npruehs.pony)
+* Visual Studio: [VS pony](https://github.com/ponylang/VS-pony)
+* Visual Studio Code: [Pony Language Colorizer](https://marketplace.visualstudio.com/items?itemName=npruehs.pony)

@donpdonp
Copy link

'stable' is a cute bit of word-play but an unfortunate name for a pony software package. 'pony-stable' would mean the latest stable version of the pony language to almost anyone who is not already familitar with pony's package manager.

@mollymorphic
Copy link

mollymorphic commented Aug 16, 2018

Note at the time of this comment the instructions on how to add the keys to verify the package via apt-key fail on some version of Ubuntu/Debian. See description/fix here - ponylang/pony-stable#47

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment