jemc changed the topic of #ponylang to: Welcome! Please check out our Code of Conduct => https://github.com/ponylang/ponyc/blob/master/CODE_OF_CONDUCT.md | Public IRC logs are available => http://irclog.whitequark.org/ponylang | Please consider participating in our mailing lists => https://pony.groups.io/g/pony
nyarum has joined #ponylang
nyarum has quit [Ping timeout: 240 seconds]
nyarum has joined #ponylang
nyarum has quit [Ping timeout: 268 seconds]
nyarum has joined #ponylang
nyarum has quit [Ping timeout: 240 seconds]
amclain has quit [Quit: Leaving]
_whitelogger has joined #ponylang
graaff has joined #ponylang
aedigix has quit [Ping timeout: 260 seconds]
endformationage has quit [Quit: WeeChat 1.7]
k0nsl_ has joined #ponylang
k0nsl has quit [Quit: “If we don't believe in freedom of expression for people we despise, we don't believe in it at all — Noam Chomsky”]
Matthias247 has joined #ponylang
Matthias247 has quit [Read error: Connection reset by peer]
boid has quit [Ping timeout: 240 seconds]
vaninwagen_ has joined #ponylang
boid has joined #ponylang
bimawa has quit [Quit: WeeChat 1.4]
ensrettet has joined #ponylang
<Candle> andarp: I have a maven plugin for dep management and project comprehension - https://github.com/CandleCandle/pony-maven-plugin though it doesn't support arbitrary github/etc dependencies; it is in maven central.
<Candle> I havn't tried running it on Windows, as my pony dev is on unix based systems, but I don't have any reason to believe that it won't work.
k0nsl_ has quit [Quit: “If we don't believe in freedom of expression for people we despise, we don't believe in it at all — Noam Chomsky”]
k0nsl has joined #ponylang
k0nsl has joined #ponylang
k0nsl has quit [Changing host]
ensrettet has quit [Quit: Textual IRC Client: www.textualapp.com]
TheLemonMan has joined #ponylang
k0nsl has quit [Quit: “If we don't believe in freedom of expression for people we despise, we don't believe in it at all — Noam Chomsky”]
k0nsl has joined #ponylang
k0nsl has joined #ponylang
k0nsl has quit [Changing host]
aav has quit []
graaff has quit [Quit: Leaving]
_andre has joined #ponylang
bimawa has joined #ponylang
aav has joined #ponylang
nyarum has joined #ponylang
lillis has joined #ponylang
<lillis> Hi! Playing devil's advocate here: the point of capabilities in pony is to be able to safely share data between actors - but simply using immutable data that is copied upon modification solves the same problem. So why go through all the trouble of using Pony and it's capabilities?
<abeaumont> I guess that because pony's capabilities give you a warranty that that's precisely what you are doing
<vaninwagen_> lillis, because copying can be pretty expensive. and sharing and passing mutable data around allows for really fast AND safe concurrency
<lillis> So is speed and actual guarantees the main reasons?
<lillis> are*
<vaninwagen_> lillis, at least for me :)
TheLemonMan has quit [Quit: "It's now safe to turn off your computer."]
vaninwagen_ has quit [Ping timeout: 240 seconds]
<lillis> If anyone else wants to chip in I'd be happy for more. I'll leave the channel now but @andarp is me as well so I'll read it later :)
lillis has quit [Quit: Page closed]
nyarum has quit [Remote host closed the connection]
aedigix has joined #ponylang
jemc has joined #ponylang
prettyvanilla has quit [Quit: Konversation terminated!]
Praetonus has joined #ponylang
aedigix has quit [Remote host closed the connection]
aedigix has joined #ponylang
amclain has joined #ponylang
nyarum has joined #ponylang
<Praetonus> lillis, andarp: Yes, the main reasons for capabilities are safety and performance (the main paper about Pony's type system being titled "Deny capabilities for safe, fast actors"). Aside from the obvious performance benefit of not having to copy message contents, pretty much every part of the runtime benefits from the safety guarantees
nyarum has quit [Ping timeout: 260 seconds]
<jemc> lillis, andarp: even languages/frameworks that have the paradigm that all data should be in immutable/persistent data structures still often have a concept of temporary mutability while "setting up" a data structure - for convenience and performance reasons
<jemc> in Pony this is a first-class language concept, with `trn`
nyarum has joined #ponylang
<jemc> passing of an isolated reference to a mutable object is also a common idiom among performance-oriented concurrent applications (though in many languages/frameworks, the safety of your application is relying only on humans' careful implementation of that convention, and not by compiler guarantees)
<jemc> and of course that is also a first-class language concept in Pony, in the form of `iso`
nyarum has quit [Remote host closed the connection]
<jemc> Pony is not a rejection of either of these paradigms (immutable data structures, isolated references), but rather a affirmation of both, and a proof of the concept that both paradigms can coexist together in compiler-guaranteed safety
<jemc> that is, as an application developer using Pony I have both sets of tools available at all times, and can apply whichever makes the most sense for what I'm doing rather than trying to force every solution into one or the other category
<jemc> also, I think it's a bit of a straw man to say "why go through all the trouble of using Pony and it's capabilities" as compared to only using immutable data structures - you can write programs in Pony that only use immutable data structures, and if that's all you're doing I think you'll find that difficulties relating to satisfying capabilities should largely disappear - whenever I've worked on objects that
<jemc> were all `val` capability, everything just kind of works with no fuss (with regard to capabilities)
<jemc> that is, everything "just works" other than stuff that you shouldn't be allowed to do with immutable data, like mutate it :P
<jemc> for example, much of the mental overhead for dealing with capabilities in writing generic classes melts away if you make the class a `val` and constrain the type parameter to `val` or `#share`
<andarp> Praetonus, jemc: thanks a lot for the answers, they are along the lines of what I guessed except more eloquently put and reasoned about :)
<andarp> I'm planning on learning pony to a decent degree and then have a short presentation about it at work (I work in fintech). So I'm trying to beat the most common instinctive reactions to the punch when faced with a new concept
<andarp> i.e. "this looks complex and i dont need it because i can solve it this other way i always have"
<jemc> right, it's definitely a good question to think about, as it's at the core of the value prop for Pony
<andarp> Personally I would've been sold on Pony if it was just "Go with generics" but that's because it seems the general language design/syntax just perfectly aligns with my taste. Obviously "Go with generics" isn't close to an accurate description of the language
<andarp> The capabilities are just pure genius though
<andarp> I'm rambling :) I'm just excited to get excited about a programming language again
<jemc> I was sold on Pony after dealing with oher actor systems that had zero-copy mechanisms, but had no way to guarantee the safety of what I was doing with them - it was always just relying on me being really careful, which is rather unnerving over time
<andarp> Yes, I find those types of solutions constrain the way you reason about the problem you're trying to solve, being scared about what you can and can't do.
<jemc> I had spent some time trying to come up with various framework aids to make breaking safety harder to do, but upon finding Pony I was definitely quite excited that it seemed to have solved the problem properly from the ground up
<andarp> The pony docs/vids I've seen talk a lot about "reasoning locally" and I think that really hits the nail on the head
<andarp> The smaller your scope of worries and abstractions the better
nyarum has joined #ponylang
TheNet has joined #ponylang
endformationage has joined #ponylang
Matthias247 has joined #ponylang
nyarum has quit [Remote host closed the connection]
Matthias247 has quit [Read error: Connection reset by peer]
Matthias247 has joined #ponylang
nyarum has joined #ponylang
nyarum has quit [Remote host closed the connection]
TheLemonMan has joined #ponylang
aav has quit []
jemc has quit [Ping timeout: 255 seconds]
nyarum has joined #ponylang
nyarum has quit [Ping timeout: 240 seconds]
TheLemonMan has quit [Quit: "It's now safe to turn off your computer."]
boid has quit [Ping timeout: 246 seconds]
nyarum has joined #ponylang
_andre has quit [Quit: leaving]
TheNet has quit [Quit: Textual IRC Client: www.textualapp.com]
nyarum has quit [Remote host closed the connection]
<andarp> Watching the "Writing Generic Code" VUG I see a lot of places where you'd normally pass a function but instead interfaces (?) implemented on primitives are used
<andarp> if this a common pattern?
<andarp> e.g. the HashFunction[K] in HashMap
Praetonus has quit [Quit: Leaving]
Arjan_ has joined #ponylang
FunkyBob_ has joined #ponylang
FunkyBob has quit [Write error: Broken pipe]
m6w6 has quit [Excess Flood]
m6w6 has joined #ponylang
Arjan has quit [Quit: bye]
Arjan_ is now known as Arjan
FunkyBob_ is now known as FunkyBob
FunkyBob has quit [Changing host]
FunkyBob has joined #ponylang
<SeanTAllen> andarp: so.. primitives. secretly they are also a bit like a module
<SeanTAllen> in fact you can use them a bit like an OCaml module
<SeanTAllen> and in those places that you are highlighting, yes its a somewhat common pattern and a way to specialize non stateful code
<SeanTAllen> I've discussed with Sylvan and Joe using that same pattern for FFI calls that would allow you to swap out the real FFI calls with another primitive that would allow you to insert testing code
<SeanTAllen> andarp: what you've noticed could be explained and written up as a Pony Pattern.
<SeanTAllen> if you feel like giving that a go, let me know. explaining the ins and outs of a topic is a great way to learn it.
<SeanTAllen> i'd be happy to help anyone who write that usage of primitive up as a Pony Pattern.
Matthias247 has quit [Read error: Connection reset by peer]
TheNet has joined #ponylang
TheNet has quit [Client Quit]
nyarum has joined #ponylang
nyarum has quit [Ping timeout: 272 seconds]
boid has joined #ponylang
nyarum has joined #ponylang
nyarum has quit [Ping timeout: 255 seconds]
<andarp> SeanTAllen: Thank you, that is really interesting. I recognize the pattern in some ways from e.g. Java and C#, using interfaces as a way to plug in functionality for e.g. a comparate function. But the way it's expressed in the code shown is a lot more terse and clean
<andarp> compare*