News for hackers. Stuff that matters.
Re:Introduction to the Pony programming language by spooneybarger on Thursday May 31, 2018 @08:12AM (#17195696)
Hi all,

In addition to being the submitter, I'm also the author and a member of the Pony core team. I'll check the comments here from time to time and answer what I can.

Re:Introduction to the Pony programming language by sharpercoder on Thursday May 31, 2018 @10:19AM (#17196470)
The website does not show any code in the first or second page. Only a cheatsheet after 3 clicks - which is a pdf.
Re:Introduction to the Pony programming language by spooneybarger on Thursday May 31, 2018 @10:23AM (#17196503)
You'd be looking for the tutorial: https://tutorial.ponylang.org/
Re:Introduction to the Pony programming language by nalllar on Thursday May 31, 2018 @10:31AM (#17196571)
It would be good to show off the language more prominently, on the home page.

You could consider some runnable demos like python and rust's. [1], [2]

[1]: https://www.python.org/

[2]: https://www.rust-lang.org/en-US/

Re:Introduction to the Pony programming language by qop on Thursday May 31, 2018 @10:39AM (#17196627)
Not every language presents itself as an object to be marketed.

Also, pony is still an early product. It's secure, but it still needs more work before extremely important work happens using pony.

In that regard, it's better to attract only those who propel themselves then to attract a bunch of users who wont/cant contribute and will impose their demands on the core team.

It's just not time to market yet.

Re:Introduction to the Pony programming language by cobythedog on Thursday May 31, 2018 @11:05AM (#17196834)
I'm on mobile and I don't see any code or links to code. Is it different on desktop?
Re:Introduction to the Pony programming language by spooneybarger on Thursday May 31, 2018 @11:12AM (#17196887)
interesting. do you see code on mobile when you visit:

https://tutorial.ponylang.org/getting-started/hello-world.ht...

Re:Introduction to the Pony programming language by cobythedog on Thursday May 31, 2018 @11:15AM (#17196914)
Yep! I suppose I didn't notice the hamburger navigation at the top left.
Re:Introduction to the Pony programming language by spooneybarger on Thursday May 31, 2018 @11:22AM (#17196968)
The tutorial is hosted on Gitbook. I'm finding that it updates very slowly on mobile for me. Even if it isn't broken, it feels broken. Hadn't noticed that as an issue previously.
Re:Introduction to the Pony programming language by anthonybullard on Thursday May 31, 2018 @12:11PM (#17197441)
This is an issue I've noticed with GitBook in general. I think I began to notice it in 5.0
Re:Introduction to the Pony programming language by spooneybarger on Thursday May 31, 2018 @12:43PM (#17197764)
that's good to know and somewhat depressing.
Re:Introduction to the Pony programming language by zzzcpan on Thursday May 31, 2018 @09:05AM (#17195946)
I understand that its actor model pursues very different ideas from Erlang and is therefore very limited and bare bones, basically allowing only per actor event handlers (behaviors in Pony terms). How does it work in practice, do you use higher order functions to construct basic flows? Like doing something, then entering receive loop for certain messages and making sure no other handler gets called to mess with the state until we are in receive loop for this type of message, then doing something else and entering another receive loop and so on.
Re:Introduction to the Pony programming language by spooneybarger on Thursday May 31, 2018 @09:44AM (#17196212)
Sorry, I don't understand your question but I'm going to answer it as best as I understand. Apologies if it ends up being a non-answer.

There's a good talk by Scott Fritchie on the differences between Pony and Erlang that I would suggest.

talk: https://www.youtube.com/watch?v=uv-3ptTD8hg&feature=youtu.be slides: https://github.com/slfritchie/wide-world-of-actors

Like Erlang, each Pony actor has a mailbox that is processed in a serial fashion so that only one message is being processed.

In Erlang, you have selective receive that allows you to receive messages out of order that they arrived. Pony has causal messaging where each message has to be handled in the order it was received. Otherwise they are same in terms of how received messages are handled.

There's no `receive` in Pony as the behaviors are called directly.

I would not call that "very limited and bare bones". Its different.

Re:Introduction to the Pony programming language by aturley on Thursday May 31, 2018 @09:48AM (#17196243)
Pony's model is different than Erlang's, so trying to think of it in terms of Erlang's model ("entering receive loop") may not be helpful when trying to understand it.

The Pony runtime takes care of scheduling an actor to run when there is a message for that actor. The actor runs through the behavior and then waits to be scheduled again by the runtime when another message is available. If you want to filter messages you need to arrange a way to do that in your code. There's no way to inspect the message queue.

Re:Introduction to the Pony programming language by zzzcpan on Thursday May 31, 2018 @10:21AM (#17196481)
I get it, it's like event driven programming with static event handlers per actor. Where you can't express a wait for a specific message directly in the body of the function. But you still have to do it somehow, which is what my question was about, how do people do it in Pony. Typically in event driven systems to do this either nested callbacks are used or higher order programming (futures/promises, etc).
Re:Introduction to the Pony programming language by spooneybarger on Thursday May 31, 2018 @10:24AM (#17196519)
You can use callbacks, state machines, promises. All are available as options to use.
Re:Introduction to the Pony programming language by abritinthebay on Thursday May 31, 2018 @10:16AM (#17196451)
So kind of like the RabbitMQ worker/message/job dynamic?
Re:Introduction to the Pony programming language by aturley on Thursday May 31, 2018 @10:22AM (#17196499)
Pony uses a queue for storing messages that have been sent to an actor, so that's probably a reasonable way to start thinking about it. I'm not sure how far I would stretch this comparison, though. :)
Re:Introduction to the Pony programming language by spooneybarger on Thursday May 31, 2018 @10:41AM (#17196640)
This might be a little hard to converse on over HN comment. If you stop by the #ponylang channel on freenode, it would be easier to discuss as there would probably be a lot of back and forth.
Re:Introduction to the Pony programming language by Yoric on Thursday May 31, 2018 @08:28AM (#17195769)
Hi spooneybarger. I'm curious: why is 1/0 == 0? Is it because there is no way to panic/kill the current actor with an error?
Re:Introduction to the Pony programming language by spooneybarger on Thursday May 31, 2018 @08:37AM (#17195813)
That's covered in the Pony tutorial.

https://tutorial.ponylang.org/gotchas/divide-by-zero.html

I can elaborate a bit on what is in the tutorial. With the current semantics, you as the application programmer can check for division by zero and throw `error` if you want. Otherwise, every division operation would be partial which given that pony forces you to handle all partial functions, can get to be very painful.

We are working on adding value dependent types and will be revisiting the divide by 0 question. Some work was done on that for a thesis a couple years back but hasn't been integrated into Pony by the author as they have had time constraints since leaving school. You can check out a video about the work here: https://vimeo.com/175746403

It's definitely something that folks bring up. We aren't thrilled with the current functionality but feel its better than the previous functionality and are looking to slow improve the situation over time.

It can definitely bite the uninitiated if they aren't careful.

Re:Introduction to the Pony programming language by Serow225 on Thursday May 31, 2018 @10:38AM (#17196623)
It might be worth clarifying in that tutorial that this behavior is different for floating point division by zero (correct?) I believe that numerical tools like MATLAB give the same result as Pony for integer divide by zero, if that gives you or others more comfort... Although they return a 'divide by zero warning' at the same time which can be user-disabled.
Re:Introduction to the Pony programming language by philipwhiuk on Thursday May 31, 2018 @09:15AM (#17196015)
It's better to be wrong and functional than correct and complicated?

PS: This is the approach PHP took in the early days too.

Re:Introduction to the Pony programming language by pron on Thursday May 31, 2018 @09:19AM (#17196036)
BTW, this is the same approach taken by the Coq, Isabelle and Lean theorem provers. In all of them, 1/0 = 0. It is certainly unconventional, but whether this is wrong is a matter of philosophy. Basically, division by zero is undefined, but you can define it to be zero and so extend the definition. This is consistent with the rest of arithmetic. You get more theorems (like for all a, b and c, a/c = b/c), but no inconsistencies.
Re:Introduction to the Pony programming language by OskarS on Thursday May 31, 2018 @09:37AM (#17196163)
You'd think that in these kinds of dependent type systems you would have to use the type system to prove that when doing a/b, b is never equal to 0.
Re:Introduction to the Pony programming language by pron on Thursday May 31, 2018 @12:41PM (#17197741)
Well, designing a language (even a mathematical one) is an art, and you need to trade off measures of convenience. The mathematical axioms that define division by zero to be equal to zero are consistent and so "correct" (if unconventional), and it turns out to be more convenient to define things in this way in those particular formalisms (rather than having to prove each time that you're not zero). You can define different theories in those systems that leave zero outside the domain of division or define it to be some value that means "undefined", but that's how it's done in the default arithmetical theories in those languages (and, BTW, Isabelle/HOL is not based on dependent types; Coq and Lean are). Other proof systems, like TLA+, do it differently.

For a recent discussion about this on the Isabelle mailing list, see here https://lists.cam.ac.uk/pipermail/cl-isabelle-users/2018-Mar... (search for 1/0)

Re:Introduction to the Pony programming language by wafflebear on Thursday May 31, 2018 @09:48AM (#17196246)
The users of Coq and Isabelle are generally people with mathematics degrees who check their work. Not your average programmer.
Re:Introduction to the Pony programming language by pron on Thursday May 31, 2018 @12:49PM (#17197841)
You are correct that the requirements are different, but not exactly for the reasons you mention. Users of those languages use them to prove theorems, and the theorems you get are correct with respect to the arithmetical theory used. Programmers may want some error condition when dividing by zero, because that's what they believe their users expect (say, the program drives some actuator, and bad things may happen if division by zero is not detected). So yeah, the justification for this behavior needs to be different.
Re:Introduction to the Pony programming language by spooneybarger on Thursday May 31, 2018 @09:58AM (#17196321)
It's an intersting philosophical conversation. Take floating point for example. I just fired up a Python interpreter and did:

>>> 0.3 * 3.0

0.8999999999999999

There's are a lot of areas of computer science that touch on these sorts of problems. And people love to do Wat! talks for all those fun edge cases where how computers work and how programming languages work run up against our expectations of what we expect to be correct.

Re:Introduction to the Pony programming language by abritinthebay on Thursday May 31, 2018 @10:21AM (#17196484)
It’s not wrong. It’s just a definition issue. The result is undefined in mathematics.

Throwing an error is actually “wrong” as the result should actually be undefined/null but most languages throw for practical reasons.

So in fact it’s most languages that are being “wrong but functional”. Pony is just functioning differently.

Re:Introduction to the Pony programming language by pron on Thursday May 31, 2018 @01:25PM (#17198225)
You are right, but the question is what most programmers want. It is certainly reasonable to believe that most want some special treatment of division by zero. Assuming the program is connected to some actuator (even a screen) -- as most programs are -- while not wrong mathematically, this results in something that is wrong "physically," and doing so silently, without a mechanism to later recover, from the result alone, whether division by zero occurred.
Re:Introduction to the Pony programming language by abritinthebay on Thursday May 31, 2018 @02:47PM (#17198940)
Right, though there’s nothing intrinsically better about throwing an error - it’s just the idiom programmers are more familiar with.

If it’s raised and documented well there’s no reason it wouldn’t work as undefined (could throw type errors on usage after that for example).

Re:Introduction to the Pony programming language by pron on Thursday May 31, 2018 @04:01PM (#17199670)
> Right, though there’s nothing intrinsically better about throwing an error - it’s just the idiom programmers are more familiar with.

Well, it can be argued that physics dictates an error is intrinsically better than 0, and that programs care about physics at least as much as about mathematics.

Re:Introduction to the Pony programming language by Hamcha on Thursday May 31, 2018 @11:23AM (#17196982)
Any plans to make the compiler on Windows work with clang/msys rather than Visual Studio? I played with the flags and somehow managed to get an Hello world compiled to .exe, but it would crash upon start.

I know it's kind of stupid, but relying on such a huge behemoth was my biggest turnoff.

Re:Introduction to the Pony programming language by kulibali on Thursday May 31, 2018 @12:00PM (#17197320)
There's an issue for that: https://github.com/ponylang/ponyc/issues/2079

Also you can use the Visual C++ Build Tools, which is just the compiler without the IDE.

https://github.com/ponylang/ponyc#windows-using-zip-via-bint... http://landinghub.visualstudio.com/visual-cpp-build-tools

Re:Introduction to the Pony programming language by ghosttie on Thursday May 31, 2018 @05:19PM (#17200386)
Since there are no exceptions, in a try-else how can you tell what the error was?
Re:Introduction to the Pony programming language by spooneybarger on Thursday May 31, 2018 @05:28PM (#17200464)
If you need to distinguish between different errors than a union type like (Result | ErrorA | ErrorB) should be used.
Re:Introduction to the Pony programming language by ghosttie on Thursday May 31, 2018 @05:34PM (#17200507)
I mean like

  try
    if not x() then error end
    if not y() then error end
  else
    // which error happened?
  end
Re:Introduction to the Pony programming language by spooneybarger on Thursday May 31, 2018 @05:47PM (#17200600)
If you need to distinguish between error then that would inappropriate. Without a real example, I can't really say what the right approach would be.

Looking at your example, I would say, if you care about which error happened, you should be using separate try blocks.

Errors aren't meant for flow control like that so really, you shouldn't be indicating error inside a try like that.

One option that Pony could have gone with is to use union types to always indicate errors:

(My Result | MyError)

There's overhead to that though. You always have to match on the type. For situation where an error is unlikely, partial functions are nice. Partial functions are not exceptions though, and aren't designed to do flow control so trying to use like some might use exceptions (to do flow control) is going to be painful (as your example points out) because they weren't designed for that use case.

Re:Introduction to the Pony programming language by ghosttie on Thursday May 31, 2018 @05:54PM (#17200643)
How about things like opening a file, where there could be a variety of reasons it could fail?
Re:Introduction to the Pony programming language by spooneybarger on Thursday May 31, 2018 @06:05PM (#17200735)
This might be a better conversation for IRC (you can find me on Freenode in #ponylang as SeanTAllen) as we are replying to each other fast enough to trigger the flamewar detector. Now that it is letting me reply...

You should use a union type for that situation. Note, the current File API in the Pony standard library doesn't do that and it's something that we intend to fix before version 1.0. At this point, now one has gotten frustrated enough with it to open an RFC to propose an updated API. Someone will at some point though. But... volunteer project, limited time, itch to scratch etc.