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
<staticassert_> Hm. Seems like there's an error being raised here: `let info = FileInfo.create(path)` - but I don't see documentation around when FileInfo.create will error
<staticassert_> Oh, nevermind.
<staticassert_> I think the path is incorrect. It's just 'pony' (name of an exe in the parent dir) but that doesn't include the relative path of ../
Unit158 has joined #ponylang
jemc has quit [Ping timeout: 240 seconds]
<staticassert_> Is there a way to display a path?
jemc has joined #ponylang
<SeanTAllen> Not sure what you mean
unbalancedparen has joined #ponylang
<staticassert_> SeanTAllen: I have a FilePath and I want to pass it to env.out.print
<staticassert_> Just trying to print out the path to the terminal
<SeanTAllen> file_path.path
<SeanTAllen> its a public string
<staticassert_> oh, thank you
<staticassert_> Sweet. I can recurse through a directory and its subdirectories, I *think* in parallel because every directory goes to a separate actor recursively
<staticassert_> This is pretty cool.
<SeanTAllen> have you done the state of the stable community survey staticassert_ ?
<staticassert_> Saw it on twitter. Realized that now that I'm programming in Pony I can fill it out
unbalancedparen has quit [Quit: WeeChat 1.6]
<staticassert_> Rust has the survey structured in such a way that, if you haven't used rust, you can still take the survey. Questions like "I haven't used rust because" etc. I think they've had good success with that.
<staticassert_> I'll take the survey now though
<staticassert_> also planning on listening to the meeting today when I'm at work tomorrow
<SeanTAllen> i missed it for personal reasons, lately ive missed many because of work
<SeanTAllen> :(
<staticassert_> Ah, yeah. I was stuck working all day as well.
<staticassert_> Writing Java -_-
<SeanTAllen> for some tasks, i find java quite useful
<SeanTAllen> but this is a pony channel not a java channel so i will stay on topic
<staticassert_> wew survey filled
<staticassert_> oh hm, you can't send messages in a _final
<SeanTAllen> correct
jemc has quit [Ping timeout: 260 seconds]
<staticassert_> Tiny little program, but I am super happy with it. Definitely going to keep writing Pony.
chemist69 has quit [Ping timeout: 258 seconds]
Praetonus has joined #ponylang
<SeanTAllen> Awesome
unbalancedparen has joined #ponylang
unbalancedparen has quit [Client Quit]
chemist69 has joined #ponylang
abbiya has quit [Ping timeout: 260 seconds]
abbiya has joined #ponylang
<staticassert_> I have String.create() and then I do .add's to it. I then try to print with env.out. And I get String ref is not a subtype of String val: ref is not a subcap of val
<Praetonus> staticassert_: Are you familiar with what `ref` and `val` mean?
<staticassert_> Er. I think ref is mutable, val is immutable?
<staticassert_> oh. env.out.print is sending a message
<staticassert_> And I can't send a ref in a message because it's mutable
<Praetonus> Yes
<Praetonus> To fix the problem, you have to recover your String to a val
<staticassert_> Thanks
plietar has joined #ponylang
<staticassert_> Eh, I don't think I'm gonna get it tonight. Will have to try again tomorrow.
staticassert_ has quit [Quit: Page closed]
Praetonus has quit [Quit: Leaving]
Unit158 has quit [Quit: ChatZilla 0.9.93 [Firefox 51.0.1/20170125094131]]
jemc has joined #ponylang
<plietar> Hi, I'm currently looking into the code in https://github.com/ponylang/ponyc/blob/master/src/libponyc/type/subtype.c
<plietar> It define 4 different subtype checking in check_cap_t
<plietar> I gather CHECK_CAP_SUB is just normal subtyping (function arguments, assignments), CHECK_CAP_EQ is subtyping where capabilities have to match (for generic constraints)
<plietar> Is CHECK_CAP_IGNORE just used as a fast path ?
<plietar> And I'm quite confused as to what CHECK_CAP_BOUND is
gmcabrita has quit [Quit: Connection closed for inactivity]
<jemc> plietar: there's a little bit more helpful explanation text in `type/cap.h`
<plietar> Oh thanks
<jemc> the `is_cap_sub_cap_bound` function is used when checking if one reference is a subtype of another, when *both references are of the same type parameter*
<plietar> That makes sense
<jemc> and yes, `CHECK_CAP_IGNORE` is used as a fast path
<jemc> I recently introduced it because there are some places where failing fast can save us some allocations
<plietar> I've been listening to your sync from a few weeks ago where you discussed this with Sylvan
<plietar> But I had missed the "same type parameter" part
<jemc> cool - did you see the original issue ticket for the bug that spawned this work? https://github.com/ponylang/ponyc/issues/1328
<plietar> Yes, I opened https://github.com/ponylang/ponyc/issues/1549 which was a duplicate of this
<jemc> ah, right - I remember now :)
gornikm_ has quit [Ping timeout: 240 seconds]
gornikm_ has joined #ponylang
jemc has quit [Ping timeout: 260 seconds]
jemc has joined #ponylang
jemc has quit [Ping timeout: 240 seconds]
amclain has quit [Quit: Leaving]
Ritwick has joined #ponylang
Ritwick has quit [Client Quit]
obadz has quit [Ping timeout: 268 seconds]
obadz has joined #ponylang
virtual_lark has quit [Read error: Connection reset by peer]
virtual_lark has joined #ponylang
plietar has quit [Remote host closed the connection]
plietar has joined #ponylang
plietar has quit [Ping timeout: 264 seconds]
gmcabrita has joined #ponylang
plietar has joined #ponylang
_andre has joined #ponylang
<SeanTAllen> 0.11.2 has been released. Should have the correct fix for "illegal instruction" problem that some folks got when using Linux packages.
plietar has quit [Remote host closed the connection]
plietar has joined #ponylang
plietar has quit [Ping timeout: 258 seconds]
plietar has joined #ponylang
plietar_ has joined #ponylang
<plietar_> Should the following code typecheck ?
<plietar_> class A[X, Y: X]
<plietar_> let x : X = consume y
<plietar_> fun foo(y: Y) =>
<plietar_> It doesn't currently, gives "Y #any is not a subtype of X #any: the subtype has no constraint"
plietar has quit [Ping timeout: 258 seconds]
plietar_ is now known as plietar
<plietar> But I feel like it should, given the `Y: X` bound
staticassert has quit [Quit: Page closed]
<SeanTAllen> that wont build for me plietar
<SeanTAllen> seems to get the compiler into an infinite loop
<plietar> You mean the compiler doesn't terminate ?
staticassert has joined #ponylang
<SeanTAllen> yes
<plietar> It does terminate with an error for me, using latest master
<SeanTAllen> what os are you on?
<plietar> macOS
<SeanTAllen> in on OSX mavericks
<SeanTAllen> sorry el capitan
<plietar> I'm on Sierra
<plietar> SeanTAllen: Should I open an issue for that ?
<plietar> It seems to me like it should build fine
<staticassert> I had already run into an issue with 'try' hiding a partial function that I hadn't realized was partial
<staticassert> Glad this was merged (I'm catching up on yesterday's meeting)
spazz has joined #ponylang
spazz is now known as spazzpp2
jemc has joined #ponylang
bougyman has quit [Ping timeout: 260 seconds]
bougyman has joined #ponylang
bougyman is now known as Guest92871
<SeanTAllen> plietar: yes, thank you for opening the issue. it makes me very happy when new folks come along and push on areas of the implementation that haven't seen as much use. thank you! also, sorry you are running into problems.
<SeanTAllen> staticassert: before that was opened Sylvan and I went back and forth for a long time about that. I'm interested to see how the tradeoffs end up playing out in practice. I think it will be an excellent idea but I have some worries.
<staticassert> SeanTAllen: still listening in, I think paying attention to Midori is very smart. Error handling is probably the 'core' part of Pony that feels the roughest to me right now.
<plietar> SeanTAllen: Haha no worries. I'm currently trying to formalize the typing rules around generics, which forces me to think about all the edge cases
<plietar> And the only "source of truth" at the moment on how generics should behave is the compiler, so I end up trying a lot of these edge cases
<staticassert> A lot of this 'abandonment'/ midori stuff reminds me a lot of how Rust does error handling. Unions represent partial functions. Panics/ abandonment for assertions. It feels like you could drop the try syntax and use Unions for errors, and then write assertions around them that might propagate up to some 'boundary' (an actor) where they have to be handled
<staticassert> In the meeting the assumption on assertions is that they crash the program but that doesn't seem necessary
<staticassert> Wish I had been in this meeting :P
<SeanTAllen> Unions for errors have a runtime cost that errors dont staticassert
<SeanTAllen> If you use unions for errors that rarely occur, you have to pay a cost for checking the error each time
<SeanTAllen> So if it only happens rarely, using error is better for performance as there is no cost in the "normal" case
<SeanTAllen> The cost is higher for error when triggered than for a match but overall, in aggregate it can be much much less
<staticassert> SeanTAllen: Shouldn't the cost of a union be basically a jmp on the tag of the union?
<staticassert> Basically, I'm hearing a lot in this discussion that mirrors to some extent what rust has. Typed, checked errors implemented as unions *or* untyped, unchecked 'valueless' errors implemented as panics/ stack unwinding.
<staticassert> The former should be much more common than the latter.
<jemc> staticassert: you should definitely feel free to come to the next meeting, if it's possible in your schedule
<staticassert> I'm going to try to.
<jemc> otherwise, maybe you can share your thoughts in this ticket: https://github.com/ponylang/rfcs/pull/76
<staticassert> Yeah, I've been reading that. I was planning on commenting.
<jemc> great, thanks!
<jemc> also, very relevant IRC nick, BTW :P
<staticassert> :P yeah, I'm fond of this one
<staticassert> I go by insanitybit elsewhere
Guest92871 has quit [Changing host]
Guest92871 has joined #ponylang
Guest92871 is now known as bougyman
<staticassert> My current hesitation in commenting on the RFC is that I feel like I'm still inexperienced, but it sort of feels like a lot of the issues here remind me of issues that Rust has tried to solve. I actually feel that Pony is better suited to solve these problems though due to actors being such a natural boundary for failure.
<jemc> you're right that there's definitely a lot of experience with pony involved in us making the arguments we've been making, but it's also true that a fresh perspective can often be very helpful as well
<staticassert> Makes sense. I'd like to contribute to the discussion, certainly.
<SeanTAllen> unrelated jemc but i cant believe the most difficult thing to get right ive worked on lately involves .travis.yml and a Makefile
<jemc> I'm not surprised, personally - every time I have to futz with a travis config, I usually set aside a full day or two to work on it, since the lead time for seeing results of your experiments is so darn long
<SeanTAllen> i should have run it all locally to make sure it did what i expected. which is what i finally did this morning to verify my suspicion on why it still didn't work
plietar has quit [Remote host closed the connection]
plietar has joined #ponylang
amclain has joined #ponylang
plietar has quit [Ping timeout: 258 seconds]
plietar has joined #ponylang
<SeanTAllen> jemc: can you modify Main to put [skip ci] in the commit message so travis skips running ci for that commit? should help speed up our process a little. i'm going to add to release.sh in a couple places.
<jemc> SeanTAllen: good idea - will do
spazzpp2 has quit [Ping timeout: 268 seconds]
spazzpp2 has joined #ponylang
plietar has quit [Remote host closed the connection]
plietar has joined #ponylang
plietar has quit [Ping timeout: 258 seconds]
plietar has joined #ponylang
plietar has quit [Remote host closed the connection]
plietar has joined #ponylang
spazzpp2 has quit [Quit: Konversation terminated!]
plietar has quit [Ping timeout: 258 seconds]
plietar has joined #ponylang
virtual_lark has quit [Read error: Connection reset by peer]
plietar has quit [Remote host closed the connection]
plietar has joined #ponylang
renato has joined #ponylang
renato is now known as Guest31021
<Guest31021> Hi there.... I tried Pony a few years ago, but there was no good editor with IDE features at the time... just checking back if you guys recommend any editor now_
plietar has quit [Ping timeout: 258 seconds]
Praetonus has joined #ponylang
<Guest31021> Is there any editor with syntax checks and code completion?
<SeanTAllen> a few years ago? When ws that Guest31021?
<SeanTAllen> There is no editor that has code completion at this time. We are trying to find folks who want to work on a Pony language server that could be integrated into different editors.
<Guest31021> I looked into Pony when someone posted about it on Reddit at least 2 years ago.
<Guest31021> And then again 9 months ago, when I wrote a Gradle plugin for Pony.
<Guest31021> I see now there's a unit testing framework, I think I will add support for Gradle to run tests for Pony.
<jemc> editor support is about the same as it was 9 months ago
<jemc> the unit test system was definitely around 9 months ago, though
<SeanTAllen> pony test has existed for a couple years
<Guest31021> Lack of tooling may be one of the things making it hard to use Pony... unfortunately, such a great language.
<SeanTAllen> for on the fly syntax checking, the emacs mode has flycheck support, not sure about others
<Guest31021> It wasn't in the tutorial last I checked... or maybe I just missed that.
<SeanTAllen> Guest31021: we welcome contributions and are actively seeking people to work on language server protocol support.
<SeanTAllen> If you are interested in seeing tooling more forward, that is a great way to make it happen.
<Guest31021> I understand. I might give it a shot myself :) is there anything started yet?
<SeanTAllen> unless someone started something and didn't tell me, nope
<Guest31021> I tried the IntelliJ plugin 9 months ago and it was not usage ready yet... I guess that hasn't changed?
<SeanTAllen> if you get something in place where you are ready for contributions, let me know and i'll help promote it
<SeanTAllen> i don't use intellij so i personally cant comment on that
<SeanTAllen> language server support would make vs code, eclipse, intellij and more all much more doable
<Guest31021> I can try that real quick (it broke my other project last time, hope it doesn't still do that!)
<Guest31021> yeah, I know about that.
<Guest31021> The IntelliJ plugin has not been updated since 2015 :(
<Guest31021> ok, looks like the Language Server uses JSON RPC v2.0. I guess Pony would need a library to help with that if the server was to be implemented in Pony itself.
<Guest31021> the JSON RPC spec is very simple... looks like a very nice first Pony project for me to try.
<Guest31021> given there's already a JSON parser and a http library.
<jemc> well, the tricky part will be generating and reading the data about the codebase that the server will serv up
<Guest31021> yeah, that's true, specially if there isn't a AST available from the Pony code.
<Guest31021> if the compiler generated that, it would be easier.
<jemc> actually, there is an option to make the compiler send the AST to stdout
<jemc> problem is that it turns out to be quite huge
<Guest31021> what format is that?
<jemc> it's a lisp-like human-readable format
<Guest31021> at least that's easy to parse.
plietar has joined #ponylang
<jemc> I am actively working on some pony libraries that would make what you're doing easier, but I'm finding I have to fix some performance issues in the compiler first before those libraries become practical to use
<Guest31021> I am very newbie in Pony, but I really like it... I want to get started with something easy like the Json RPC lib.
<Guest31021> So it should take time for me to get to the point of being able to write something more advanced.
<Guest31021> We can keep in touch.
<Guest31021> Just ran the sample unit tests... gosh, it's so fast to run.
plietar has quit [Remote host closed the connection]
plietar has joined #ponylang
plietar has quit [Ping timeout: 258 seconds]
<staticassert> Is there any kind of company behind Pony?
<jemc> staticassert: there used to be a company that was developing the language full time, and marketing their services for commerical support, but that was stopped some time ago
<staticassert> gotcha, thanks
<SeanTAllen> over a year now
<jemc> however, Sendence (where SeanTAllen works) regularly funds contributions to the language
<jemc> that is, employees of Sendence regularly contribute performance improvements (and soon some open source libraries) on-the-clock
<SeanTAllen> and will so as long as our startup-ness is around and doing Pony
<staticassert> that's pretty cool
<staticassert> is that high frequency trading?
<staticassert> iirc someone mentioned that pony was used for that
<staticassert> I'm curious about what the performance target of Pony is as well. If it's used for something like HFT, which I know little about in practice, is that going to mean targetting near C/C++ perf? Or would somewhere closer to Go be acceptable?
<staticassert> Would definitely help when considering an error handling scheme - whether collecting a stack trace is an acceptable hit, etc
<jemc> collecting a stack trace in general is typically not considered an acceptable hit
<jemc> I think it's fair to say that we're targetting perf somewhere in the ballpark of C/C++
<jemc> I personally don't know if Pony has been used for HFT specifically - the most specific I've heard is "financial tech"
<SeanTAllen> 0.11.3 has been released. should fix the "illegal instruction" issues with Deb/RPM packages: https://github.com/ponylang/ponyc/releases/tag/0.11.3
<staticassert> ah right I guess it was fintech, not necessarily HFT
<SeanTAllen> HFT would require some more perf work. but its entirely doable.
<SeanTAllen> legit slowest thing in lots of financial apps is parsing FIX messages, that is not a gc nor speed friendly protocol
plietar has joined #ponylang
dougmacdoug has joined #ponylang
<staticassert> SeanTAllen: I guess the FFI is useful for that sort of thing though
<staticassert> I'm probably going to try to bind to rust's regex library for this toy project I'm using.
<SeanTAllen> staticassert: for what sort of thing?
<jemc> staticassert: FYI pony has stdlib FFI bindings to the PCRE library
<staticassert> Yeah but it'll be more fun to do it with rust :P I'll learn how Pony's FFI feels.
<staticassert> SeanTAllen: It's just a simple program to search files
<staticassert> so it'll recurse through a directory structure and send files to an actor that performs the search
<staticassert> I can already recurse concurrently and send the files to a ring of actors that will perform the search
<SeanTAllen> i think i missed a line or something
<Guest31021> @jemc I am not being able to compile the zmq lib.
<SeanTAllen> i dont know what "SeanTAllen: I guess the FFI is useful for that sort of thing though" is in reference to
<Guest31021> jemc-pony-zmq-0cbe950/zmq/_socket_bind_tcp.pony:96:7: lambda ... end is no longer supported syntax; use {...} for lambdas lambda val(res: _ZapResponse)(t = this) => t.notify_zap_response(res) end ^
<staticassert> SeanTAllen: Sorry, I meant that in cases where you would want to avoid GC, such as parsing FIX messages, you could FFI out to a non-GC'd language
<Guest31021> using the latest compiler built from the master branch.
<jemc> Guest31021: yeah, that was a fairly recent syntax change, and I guess I haven't worked on that library since then
<Guest31021> ah, ok.
<jemc> I'll push up a quick fix for you
<Guest31021> About the GC concern, I thought the GC in Pony was not a big concern because it can do GC without pauses?
<SeanTAllen> staticassert: it would still not be memory friendly, it involves tons of allocations
<SeanTAllen> it a variable length, string based protocol which means slow to parse, lots of extra allocations
<SeanTAllen> which is not GC friendly but isnt friendly in general due to allocations
<SeanTAllen> not gc friendly is a polite way of saying "forces tons of allocations"
<SeanTAllen> you'd have the same issues without a gc
<SeanTAllen> sorry, i should have been more clear
<SeanTAllen> most people see GC and they jump to certain conclusions
<SeanTAllen> so replace "not gc friendly" with "forces tons of allocations"
<SeanTAllen> that will suck in java, pony, c++, c, rust, doesn't matter
<SeanTAllen> another forces tons of allocations protocol: http
<jemc> Guest31021: FYI "GC without pauses" is not quite accurate - it's just that the pause is per-actor instead of being a global pause as most GCs are
<staticassert> SeanTAllen: I gotcha
<staticassert> You could probably map system calls to capabilities, right? So in theory you could statically determine all of the possible system calls a pony program might make.
Guest31021 has quit [Ping timeout: 260 seconds]
<dougmacdoug> is there any list of 3rd party libraries both pure pony and wrappers ? thinking of something like the awesome-go list : https://github.com/avelino/awesome-go
<SeanTAllen> dougmacdoug: nothing up to date at the moment
<SeanTAllen> it would be great if there was a community driven site
<SeanTAllen> but it would probably just be "pony" rather than "awesome pony" as there isnt a ton to curate right now
<dougmacdoug> also a bit redundant ;p
<jemc> now that github has added repository tags, that might be an easy way to get the list going
<jemc> that is, convince third party packages to all use a specific tag in their github repo
<jemc> sorry, the github term is "topic": https://github.com/blog/2309-introducing-topics
<dougmacdoug> my goal was to hit a high need area early on by comparing what others have already covered, but it's quite difficult just to find what is available
<jemc> I guess they were trying to avoid confusion with git tags
<jemc> dougmacdoug: in the past I've used this github search to look for other Pony repos on github: https://github.com/search?p=1&q=language%3Apony+actor+Main&ref=searchresults&type=Code&utf8=%E2%9C%93
<jemc> comes up with a lot of "hello world"s to sort through though
staticassert has quit [Quit: Page closed]
_andre has quit [Quit: leaving]
plietar has quit [Remote host closed the connection]
plietar has joined #ponylang
plietar has quit [Remote host closed the connection]
dougmacdoug has quit [Quit: dougmacdoug]