tomjoro has quit [Remote host closed the connection]
tcrawley-away is now known as tcrawley
pawnbox has joined #jruby
mattwildig has joined #jruby
pawnbox has quit [Ping timeout: 268 seconds]
tjohnson has quit [Quit: Connection closed for inactivity]
tcrawley is now known as tcrawley-away
pawnbox has joined #jruby
tomjoro has joined #jruby
pawnbox has quit [Ping timeout: 244 seconds]
tomjoro has quit [Ping timeout: 268 seconds]
norc_ has joined #jruby
norc__ has quit [Ping timeout: 252 seconds]
mattwildig has quit [Read error: Connection reset by peer]
mattwild_ has joined #jruby
tomjoro has joined #jruby
mattwild_ is now known as mattwildig
tomjoro has quit [Ping timeout: 240 seconds]
mattwildig has quit [Remote host closed the connection]
pawnbox has joined #jruby
pawnbox has quit [Ping timeout: 264 seconds]
pawnbox has joined #jruby
pawnbox has quit [Ping timeout: 264 seconds]
pawnbox has joined #jruby
tomjoro has joined #jruby
tomjoro has quit [Ping timeout: 276 seconds]
pawnbox has quit [Remote host closed the connection]
pawnbox has joined #jruby
tomjoro has joined #jruby
tomjoro has quit [Ping timeout: 244 seconds]
mattwildig has joined #jruby
mattwildig has quit [Ping timeout: 260 seconds]
pawnbox has quit [Remote host closed the connection]
pawnbox has joined #jruby
tomjoro has joined #jruby
tomjoro has quit [Ping timeout: 246 seconds]
skade has joined #jruby
tomjoro has joined #jruby
tomjoro has quit [Ping timeout: 264 seconds]
skade has quit [Ping timeout: 244 seconds]
thedarkone2 has quit [Quit: thedarkone2]
tomjoro has joined #jruby
skade has joined #jruby
skade has quit [Read error: Connection reset by peer]
skade has joined #jruby
drbobbeaty has quit [Read error: Connection reset by peer]
drbobbeaty has joined #jruby
bga57 has quit [Ping timeout: 250 seconds]
mattwildig has joined #jruby
skade has quit [Read error: Connection reset by peer]
mattwildig has quit [Ping timeout: 244 seconds]
bga57 has joined #jruby
donV has joined #jruby
<GitHub177>
[jruby] chrisseaton opened issue #3713: IRReturnJump unhandled https://git.io/v2pv0
pawnbox has quit [Remote host closed the connection]
pawnbox has joined #jruby
skade has joined #jruby
vtunka has joined #jruby
<GitHub81>
[jruby] eregon commented on commit 90061ea: Should totally be written in Ruby! :smiley: (well, except that backup feature but the SCM should be good enough for that) https://git.io/v2pkh
<GitHub94>
[jruby] chrisseaton commented on commit 90061ea: It needs to run in CI before we've built anything and we don't always have a Ruby then. https://git.io/v2pI4
pawnbox has quit [Remote host closed the connection]
pawnbox has joined #jruby
pawnbox has quit [Remote host closed the connection]
donV has quit [Ping timeout: 248 seconds]
pawnbox has joined #jruby
pawnbox has quit [Remote host closed the connection]
pawnbox has joined #jruby
mattwildig has joined #jruby
<GitHub35>
[jruby] chrisseaton pushed 4 new commits to truffle-head: https://git.io/v2pZc
<GitHub35>
jruby/truffle-head 764a21e Chris Seaton: [Truffle] Update Truffle version.
<GitHub35>
jruby/truffle-head 3b5463f Chris Seaton: Merge branch 'truffle-om-dsl' into truffle-head...
<GitHub35>
jruby/truffle-head d69ed5c Chris Seaton: [Truffle] TypeSystem has default parameters now.
mattwildig has quit [Ping timeout: 250 seconds]
donV has joined #jruby
<GitHub105>
[jruby] chrisseaton pushed 1 new commit to truffle-head: https://git.io/v2p4H
<GitHub105>
jruby/truffle-head aded0cb Chris Seaton: [Truffle] Manage the source section ourselves.
vtunka has quit [Quit: Leaving]
<GitHub101>
[jruby] ruskotron opened issue #3714: Windows line endings confuse javac under linux https://git.io/v2p02
<GitHub167>
[jruby] chrisseaton pushed 1 new commit to master: https://git.io/v2hUa
<GitHub167>
jruby/master febf590 Chris Seaton: [Truffle] Add a test for OSR.
tcrawley-away is now known as tcrawley
nirvdrum has quit [Ping timeout: 244 seconds]
brightball has joined #jruby
pawnbox has quit [Remote host closed the connection]
<lopex>
chrisseaton: can you control osr thresholds in truffle ?
vtunka has quit [Quit: Leaving]
<chrisseaton>
with a VM command line flag yeah
<chrisseaton>
If we needed it to be different for Ruby for some particular reason we could also let it be set programmatically - we do that for node limits for inlining
<lopex>
chrisseaton: from what I read about hotspot itself osr tends to generate slower code than normal compiler
<lopex>
but it might be an old thing
nirvdrum has joined #jruby
<lopex>
chrisseaton: what if there's multiple nested loops, the whole body is compiled or just the inner thing ?
<lopex>
oh, I guess I'm mixing hotspot and graal here
<chrisseaton>
lopex: OSR probably means your frame is being accessed by the interpreter and compiled code at the same time, so it will be on the heap, which is slower
<chrisseaton>
but OSR doesn't stop you also compiling the outer method as well
<chrisseaton>
If you have nested loops then whichever loop becomes hot first will be compiled, and if outer loops also become hot they can pre-empt
<chrisseaton>
Imagine if blocks could be compiled separately from the method they are in - well that's exactly how OSR for while loops etc works
vtunka has joined #jruby
pawnbox has joined #jruby
mattwildig has quit [Read error: Connection reset by peer]
tomjoro has quit [Remote host closed the connection]
mattwild_ has joined #jruby
johnsonch_afk is now known as johnsonch
<lopex>
yeah, but that's the whole reason of having it in method based jits
nirvdrum has quit [Ping timeout: 268 seconds]
nirvdrum has joined #jruby
e_dub has quit [Ping timeout: 244 seconds]
<GitHub27>
[jruby] eregon commented on commit 90061ea: I see, I thought it was a dev-only thing. https://git.io/v2hCZ
skade has quit [Quit: Computer has gone to sleep.]
e_dub has joined #jruby
donV has quit [Ping timeout: 276 seconds]
camlow325 has joined #jruby
camlow325 has quit [Read error: Connection reset by peer]
camlow325 has joined #jruby
enebo has joined #jruby
e_dub has quit [Quit: It's a hard knock life]
mattwild_ has quit [Remote host closed the connection]
e_dub has joined #jruby
<GitHub127>
[jruby] mkristian pushed 1 new commit to master: https://git.io/v2h66
<GitHub127>
jruby/master 102a088 Christian Meier: do not preinstall ruby-maven on jruby-dist archives...
<GitHub66>
[jruby] mkristian closed issue #3676: can not install ruby-maven on jruby from jruby-dist archives https://git.io/vgN46
<GitHub67>
[jruby] enebo commented on commit c9e46b7: Ultimately, it would be nice to eliminate ever having a null check or initial assignment unless it is needed but this particular problem is a somewhat deep hole for us to fix having check/init from IRBuilder alone. Consider:... https://git.io/v2h6h
<GitHub103>
jruby/master 02b2c96 Charles Oliver Nutter: Temporary patch for patch: use different temp for each opt arg....
<enebo>
so yeah however parser now works it seems to match MRI in creating a var vs vcall
<subbu>
but, anyway .. i am in th emiddle of something now .. going back to it. :-) but, i can take a look at this a=a mess and why it was failing in the first place that necessitated the tmp copy patch from headius
<enebo>
so I am back to thinking I can just replace this with a nil
<subbu>
separately, you guys can resolved if you wantto deal with it in the parser or not.
<headius>
as written in IRBuilder, it would not work
<subbu>
ok.
<headius>
I'm not sure if a pass was supposed to do it right or not
<headius>
but as written, it was broken
<headius>
for a = a specifically
<subbu>
headius, right .. why was it broken .. i haven't fully understood yet.
<headius>
I imagine it could be worse for cases that pass uninitialized value to a call
<subbu>
since retrieve of a lvar initializes it to nil already?
<headius>
def foo(a = bar(a)) would pass undefined to bar
<headius>
subbu: it's not unassigned though
<subbu>
oh?
<headius>
it does a = receive_opt_arg(args)
<headius>
if there's not enough args, a is assigned undefined
<subbu>
aaah .. ok. it gets initialized to undefined.
<headius>
then it proceeds to do a = a
<headius>
right
<subbu>
that is the part i missed.
<enebo>
we need another state variable!
<headius>
the temp prevents that by not using the temp value if it's undefined and just running the opt arg logic on its own
<enebo>
unassigned
<headius>
so the target var is not polluted by arg processing state
<subbu>
headius, makes sense now.
<headius>
ok
<headius>
why sharing a temp var doesn't work I'm not sure
<subbu>
i was mostly concerned that some other bug was being hidden. but it was clearly broken. so, ok.
<headius>
I'll try to reproduce this new issue
<subbu>
headius, my first hunch without looing at code is the opt-tmp-var-pass.
<headius>
while travis catches up a bit
<headius>
ok
<subbu>
if it is not diabled, disabled it.
<headius>
I'll see if that's going, but this fails immediately
<headius>
so simple interp
<subbu>
ok. i'll let you take a look at it .. maybe dump the ir and see what it looks like.
<headius>
yeah
<headius>
something's weird
* subbu
goes back to wikitext
<enebo>
subbu: it is dead
<enebo>
subbu: class is grayed out in IDE
<nirvdrum>
headius: That looks to have worked. Thanks@
<enebo>
subbu: you know IDEs right?
<subbu>
enebo, kill it from the repo.
* subbu
wonders what IDEs are
<subbu>
aliens?
<enebo>
heh nuke it from orbit
<enebo>
subbu: ok I will delete it
<enebo>
we can always ressurrect it later if we care
<subbu>
yup
tenderlove has quit [Remote host closed the connection]
<enebo>
ah so lhs ends up resolving first ‘a’ and assigns
<enebo>
so the actual assign unfortunately happens in lhs vs in production performing the assign
<enebo>
a = 1; a = a;
<enebo>
so once you start following this sort of logic you realize that the ‘a =‘ part cannot do this when hitting this first ‘a’ and detecting the rhs a having not had an assignment yet
<headius>
yeah
<headius>
I think I know my problem too
<enebo>
but if I push it up higher in the production I think it is solvable
<enebo>
but I don’t know how many places it would need to be pushed up yet
<headius>
zsuper compilation uses the argument instructions to figure out where the arg values are located
<enebo>
so it might be unfeasiable to fix in parser
<headius>
so it looks in ReceiveOptArg and sees my tmp var and uses that for "a"
<headius>
then looks in next ReceiveOptArg and uses my tmp for "b"
<headius>
since it can't see final target by looking at that instr
<headius>
so that's an unwritten assumption about the arg instrs...their target needs to be the final variable because other code expects that
<headius>
might be simplest to combine the receive_opt logic plus the branch? then the intermediate temp is just up to however the instr is implemented
<enebo>
so far I think I can possibly change lhs in assignments up to places where assignment happens
donV has joined #jruby
<enebo>
although I guess I don’t know about mrhs
<enebo>
can we a, b= b,a :)
<enebo>
funny
<headius>
nice
<enebo>
yeah even more pathological but same behavior
<enebo>
so I guess that is nice
<enebo>
ok lunch bbiab
<headius>
enebo, subbu: kwargs have the same problem as opt args
<subbu>
headius, oh .. that is bad wrt Receive* logic .. it should at least be documented.
<headius>
this blows up with undefined leaking out: def foo(a:a); p a; end; foo
<subbu>
grr ...
<headius>
same issue, receive of optional kwarg returns undefined if it isn't there
<subbu>
a lot of useless copying around to deal with that odd a=a edge case.
<headius>
subbu: yeah, I can't think of a single form where opt arg/kwarg would have a reason to read uninitialized var
<subbu>
one hack/fix would be to fix UndefinedValue retrieve to return nil.
<headius>
we use it for logic in other places though
<subbu>
i think we compare with the operand type, i think?
<subbu>
or retrieved value?
<subbu>
i don't remember.
<headius>
there's at least a couple places where we check value
<headius>
but I'm not sure how many survive through to execution
<headius>
or are actually jit
<headius>
hit
<headius>
I'll come up with a short-term fix for these two instrs
<subbu>
ok. i think we need a better solution for this odd edge case. headius while at it, can you add documnetation to Receive* instructions about the zsuper dependency about target being the actual arg lvar?
<headius>
subbu: I have a fix that eliminate the temp
<headius>
I just "clear" the arg on the undefined path
<headius>
clear = assign nil
<headius>
so before it runs default arg logic it resets it back to nil
evenix has quit [Remote host closed the connection]
<subbu>
ya .. put together all the weird oddities in one place. :-)
<headius>
for sure
johnsonch is now known as johnsonch_afk
lance|afk is now known as lanceball
Prasun has joined #jruby
<enebo>
back…I don’t think I can fix this in the parser without adding some infrastructure to keep track of use/def which sort of pushes back towards fixing this in IR
<enebo>
headius: are things cool now? so far as you know?
<headius>
yeah I believe so
<enebo>
If I pull up asgn to actual asgn prodution then the rhs will change the lvar to a vcall
<enebo>
so I need to know what I am assigning on lhs and then change vcalls on rhs. Seems like the cure might be worse than the disease
<enebo>
pulling up means pulling up in several productions and not one
<headius>
ick
<enebo>
honestly it is disappointing this is not considered a bug and then fixed
<enebo>
a = a should be lvarasgn = vcall(a)
<enebo>
It makes no sense it behaves the way it does now
<enebo>
but I did talk to Matz or nobu or someone and they thought this behavior was fine
<enebo>
I remember the conversation because I would have a = a as a slide in some decks and I had it in Japan one year
yipdw has quit [Ping timeout: 250 seconds]
<GitHub163>
[jruby] chrisseaton pushed 1 new commit to master: https://git.io/v2j4f
<GitHub163>
jruby/master c8543ea Chris Seaton: [Truffle] Add RubyArguments.tryGetMethod, which fails safe.
<headius>
yeah this comes around every so often and I always forget which way it actually parses :-)
Aethenelle has quit [Quit: Aethenelle]
mattwildig has joined #jruby
subbu is now known as subbu|lunch
<chrisseaton>
Has anyone here ever successfully built BouncyCastle from source?
<subbu|lunch>
enebo, there is also optimizeTemporaryVariablesIfEnabled in IRManager and the ramifications of folding that back into regular passes.
<subbu|lunch>
so, worth looking at that as well.
<enebo>
subbu|lunch: as in removing it
<enebo>
subbu|lunch: since we don’t really care for compiler
olle has joined #jruby
<headius>
chrisseaton: not I
<GitHub31>
[jruby] chrisseaton pushed 1 new commit to truffle-head: https://git.io/v2j09
<GitHub31>
jruby/truffle-head 1ef6d7c Chris Seaton: Merge branch 'master' into truffle-head
<chrisseaton>
headius: it has hardcoded paths like /opt/junit/junit.jar in the build shell scripts :(
<headius>
you had me at "shell scripts"
<GitHub5>
[jruby] enebo closed issue #3712: format string with no format token errors when a nil parameter is passed. https://git.io/v2A7H
<enebo>
you had me at /opt/junit/junit.jar
Aethenelle has joined #jruby
<enebo>
ln -s /opt ~/my_build_dir
olle has quit [Ping timeout: 240 seconds]
<chrisseaton>
enebo: I feel like this is the tip of the iceberg though
<chrisseaton>
enebo: I'm doing this to get some assurance we have repeatable builds - this isn't a good start for that
<enebo>
chrisseaton: yeah for some reason bouncy is always a rough upgrade too
<enebo>
chrisseaton: perhaps if you work through this you can update bouncy team to be mavenized and raise all boats
<enebo>
not that that is a fun time
<chrisseaton>
there's some gradle stuff but they said to ignore it for now
<chrisseaton>
it produced jars but they were slightly different from those on maven central
drbobbeaty has quit [Read error: Connection reset by peer]
drbobbeaty has joined #jruby
tjohnson has joined #jruby
drbobbeaty has quit [Client Quit]
drbobbeaty has joined #jruby
<nirvdrum>
Why are the builds on ci.jruby.org named like jruby-bin-9.1.0.0-SNAPSHOT.tar.gz but the artifacts from "mvn -Pdist package" named like jruby-dist-9.1.0.0-SNAPSHOT-bin.tar.gz?
<headius>
there's a post-processing script that renames them
<nirvdrum>
But they're otherwise the same?
mattwildig has quit [Remote host closed the connection]
johnsonch_afk is now known as johnsonch
bbrowning_ has joined #jruby
<GitHub64>
[jruby] pitr-ch closed issue #3416: [Truffle] fix MultibyteCharsUTF8Behaviour related bugs to let activesupport pass https://git.io/vWCbI
bbrowning has quit [Ping timeout: 244 seconds]
Prasun has quit [Ping timeout: 276 seconds]
phlebas has quit [Ping timeout: 268 seconds]
bbrowning__ has joined #jruby
bbrowning_ has quit [Ping timeout: 248 seconds]
pawnbox has quit [Remote host closed the connection]
<GitHub1>
jruby/master c60ce9e Petr Chalupa: [Truffle] j+tr: better output message
<GitHub1>
jruby/master 8c4e206 Petr Chalupa: [Truffle] j+tr: do_definition has to return true if it finds and runs the definition
olle has joined #jruby
pawnbox has joined #jruby
robbyoconnor has joined #jruby
olle has quit [Ping timeout: 244 seconds]
<enebo>
nirvdrum: they are the same but the maven generated names -bin at end is not what any tool or advertised URL says they should be named so dist runs ‘rake post_process_artifacts’ to make expected names
pawnbox has quit [Ping timeout: 250 seconds]
<nirvdrum>
enebo: Thanks.
<nirvdrum>
enebo: And I suppose there's no way to configure the maven naming? Or does that break other maven stuff?
<nirvdrum>
It's not a big deal. I just hit this whenever I want to integrate a locally build ruby with rbenv. I figured I'd finally ask about it.
robbyoconnor has quit [Read error: Connection reset by peer]
<headius>
this is just something I saw while untagging...simple thing to fix until I discovered this oddity
<headius>
I can't find anything online about "ignore" getitng stuck in a signal
<enebo>
I think I can just rebuild this and strip out the lambda specific instrs
<enebo>
headius: do you know how often you see define_method with an explicit return statement in it?
<enebo>
I also realize now this is a huge performance bug for us
<enebo>
we pay cost on proc for things which may only happen in lambdas
<headius>
hmm
<headius>
I dunno, maybe 50/50
<enebo>
so I think we can rewrite in that case too
<headius>
sure, should be simple
<enebo>
but explicit return reduces perf of blocks by like 30x
<enebo>
well I won’t go say simple but I think I have the rebuild code made for rebuilding now
<enebo>
I just need to try hooking it up when captures are present
<headius>
nice
<headius>
lots of specs getting untagged btw
Aethenelle_ has joined #jruby
Aethenelle has quit [Ping timeout: 264 seconds]
Aethenelle_ is now known as Aethenelle
pawnbox has joined #jruby
pawnbox has quit [Ping timeout: 240 seconds]
skade has joined #jruby
<chrisseaton>
enebo: do you understand the performance difference? Is it the return exception that needs to be thrown?
<enebo>
chrisseaton: well I know it is the precence of those two extra helkper instrs but I did not look to see why they are so slow itself.
<enebo>
chrisseaton: from my perspective we should not actually be calling them in this case since we know they no longer apply in define_method
<enebo>
chrisseaton: I half wonder if we would be better served just generating a lambda and a proc version i
<chrisseaton>
I think we actually create two copies of all blocks - one for procs, one for everything else
slash_nick is now known as slash_quit
<enebo>
chrisseaton: yeah it is starting to strike me it would be a lot simpler just to make two versions
<enebo>
chrisseaton: it will also use more memory though
<chrisseaton>
enebo: few other ways to trade-off performance!
<enebo>
chrisseaton: my current mechanism is to just regenerate the meat of our closure data in IR where I request none of those extra non-local flow checks get emitted
<enebo>
chrisseaton: but this means the closure must keep a copy of the AST
<enebo>
so I am paying a memory cost anyways
<chrisseaton>
Or you could have two code paths and remove the unused one until it's needed
<chrisseaton>
We avoided that... can't really remember why
<enebo>
chrisseaton: yeah codesize would be one reason
<enebo>
chrisseaton: hotspot does not like big methods
<chrisseaton>
I guess you'd never want both at the same time - if you needed both you'd definitely want to split
<chrisseaton>
Can you guys not use @forceinline to ignore the size of methods?
<enebo>
chrisseaton: in truth you would just always go down one path so probably performance would still mostly work out
<enebo>
chrisseaton: closures do not inline in current runtime for us anyways so it would not be a bad way?
<chrisseaton>
We have these annotations that let us tell the compiler the true cost of the method - ignoring all the face-value code because we know it will optimise away
<enebo>
chrisseaton: we do not use it no
<enebo>
chrisseaton: so for this particular problem the long term solution will be to rewrite nearly all closures into methods but we need to add code to be able to hoist or at least scope out of the method scope
<enebo>
chrisseaton: define_method is a really simple closure in that is not actually a closure other than captures
<chrisseaton>
you mean it doesn't capture other implicit stuff?
<enebo>
I think it scopes like a method in pretty much every ways except for zsuper (which I htink is a bug) and being able to see outer variable scopes
<eregon>
headius: more specs coming soon BTW :)
<enebo>
We may still even be implementing zsuper in blocks the way you would expect them to work in a define_method…subbu went through much pain for that :)
<eregon>
in truffle, I made define_method just create a method with a constant reference to the lambda version of the block, so it's fairly simple to plug in and there is no special case of needing to call a method with a surrounding frame for captures
<chrisseaton>
and then lambda.call in the defined method?
<GitHub125>
[jruby] headius pushed 3 new commits to master: https://git.io/v2jhr
<GitHub125>
jruby/master 1cc902d Charles Oliver Nutter: More tweaks for Kernel#gsub/sub/chop/chomp.
<GitHub125>
jruby/master c0d5a48 Charles Oliver Nutter: Untag a bunch of specs that run correctly now.
<GitHub125>
jruby/master 2ab50cd Charles Oliver Nutter: Tweaks for Kernel#trap to support symbolic commands.
skade has quit [Quit: Computer has gone to sleep.]
skade has joined #jruby
skade has quit [Quit: Computer has gone to sleep.]