00:06
lichtkind left
00:33
leont left
04:22
leont joined
06:03
leont left
07:10
JJMerelo joined
07:46
JJMerelo left
07:57
patrickb joined
|
|||
patrickb | ping rba | 08:27 | |
tellable6 | 2020-06-04T08:00:39Z #raku-dev <JJMerelo> patrickb what's with these pipeline errors? dev.azure.com/Rakudo/rakudo/_build...02&l=9 | ||
hey patrickb, you have a message: gist.github.com/4ce7bdbd860ccd5eb0...ead9e89ef4 | |||
hey patrickb, you have a message: gist.github.com/d777c37435c55702ba...9ef831467e | |||
08:56
sena_kun joined
|
|||
patrickb | o/ | 09:14 | |
So I have this set of PRs (MoarVM, NQP, rakudo, doc and roast) that depend on each other. Especially rakudo and MoarVM will each break without their counterpart. Is there anything to look out for when merging except for also bumping the rev files? | 09:16 | ||
lizmat | nope, doing them in order is important :-) | 09:22 | |
AlexDaniel | sena_kun: just move November here: github.com/Raku/Blin/blob/7d81839a...lin.p6#L45 | 09:23 | |
sena_kun | AlexDaniel, that's another option, but I don't mean seeing it once in a while because it indicates we still have a bug somewhere... Somewhere. | 09:25 | |
MasterDuke | patrickb: i like to do moarvm, then add a commit to the nqp pr with a bump, and `git rebase -i` to move it first, and then rinse and repeat for the rakudo pr | ||
sena_kun | oops, s/mean/mind/ | ||
patrickb | MasterDuke: That's what I'm doing right now. Except for the reordering, as I have a bidirectional dependency so the order is irrelevant wrt not breaking. | 09:27 | |
MasterDuke | cool. and yeah, my method is not a requirement, just my usual workflow | 09:28 | |
patrickb | MasterDuke: It's been my workflow for quite some time as well. :-) | ||
Geth_ | nqp: be561a1576 | (Patrick Bƶker)++ | src/vm/js/nqp-runtime/io.js Always handle proc exec arguments verbatim on JS Together with a change in rakudo this fixes Raku/problem-solving#20. |
09:29 | |
nqp: 0604ccb4f3 | (Patrick Bƶker)++ | tools/templates/MOAR_REVISION Bump MoarMV for the Windows argument quoting change This is a prerequisite for a related upcoming Rakudo change. |
|||
nqp: db4395b5b0 | (Patrick Bƶker)++ (committed using GitHub Web editor) | 2 files Merge pull request #610 from patrickbkr/problem-solving20 Always handle proc exec arguments verbatim on JS |
|||
rakudo: 709941c6b7 | (Patrick Bƶker)++ | 2 files Implement verbatim arg handling in Proc This solves Raku/problem-solving#20. |
09:31 | ||
rakudo: 61a39f356b | (Patrick Bƶker)++ | tools/templates/NQP_REVISION Bump NQP for Windows argument quoting changes These are a requirement for the respective changes in rakudo to work. |
|||
rakudo: fc9df315a2 | (Patrick Bƶker)++ (committed using GitHub Web editor) | 3 files Merge pull request #3576 from patrickbkr/problem-solving20 Implement verbatim arg handling in Proc |
|||
roast: 09550709bb | (Patrick Bƶker)++ | 2 files Add tests for Windows specific Proc argument quoting |
09:32 | ||
roast: ce28dec228 | (Patrick Bƶker)++ (committed using GitHub Web editor) | 2 files Merge pull request #636 from patrickbkr/problem-solving20 Add tests for Windows specific Proc argument quoting. The respective implementation is merged already. |
|||
patrickb | Shall I also merge the matching `doc` changes even though these didn't make it into a release yet? | 09:33 | |
sena_kun | patrickb, why so? | 09:34 | |
Or, hmm. | |||
I can argue it either way, but it's better to wait, IMO. | |||
patrickb | People might read docs.raku.org and stuff will not work. On the other hand it feels good to merge the whole bunch at once. As you said, can argue either way. | 09:35 | |
lizmat | docs would need to mention "from a release" anyway, so if your doc update does that, then there is no problem merging it now | 09:36 | |
Files=1306, Tests=111378, 214 wallclock secs (29.15 usr 7.74 sys + 3016.21 cusr 261.55 csys = 3314.65 CPU) | 09:39 | ||
before patrickb++ merge ^^ | 09:40 | ||
09:41
leont joined
10:10
Altai-man_ joined
|
|||
jnthn | nine: So I decided earlier this week that I'd try and get a RakuAST-using compiler up and running before doing a load more nodes, in that it'd be kind of fun to do it by working my way through sanity tests etc. And of course am now realizing that this means thinking through some of the bits you're looking at. | 10:10 | |
(There's also the innevitable bit of CDD in here: would be nice to have something to show off in my CiC talk... :)) | 10:12 | ||
10:12
sena_kun left
|
|||
jnthn | One of the nice things about the serialization context is that it's got a lifetime that transcends an individual batch of bytecode we send off to MoarVM; I'm wondering what the code/lexical scopes view of that looks like. | 10:15 | |
nine | I've been thinking a bit more about the All The Things block as well. Seems to me like all that's needed is for the compiler to include the outer compiler's lexpad as well when looking for lexicals. Maybe if one is found, we still need to put it into the wrapper frame, so the value is available when running the code. But that's on-demand rather than up-front. | 10:26 | |
s/lexpad/lexpads/ | |||
jnthn | nine: I was kinda thinking about something where we have have "unfinished" frames registered with the VM, and lexical lookups that cross the boundary into one of those would potentially trigger a code callback | 10:28 | |
(such late-bound lookups would be compiled into a different op) | 10:29 | ||
10:30
JJMerelo joined
|
|||
jnthn | (it's lexical, so we know what is what...) | 10:30 | |
JJMerelo | Can someone who is owner of raku-community-modules give acces to travis-ci.com? | 10:31 | |
nine | That would of course make sense. I just wonder if the complexity is necessary. I don't think the wrapper frame is bad in itself, it's just the up front filling with all known lexicals that is. So, are there cases where the wrapper frame cannot work? Closures maybe? Where we really need the runtime to understand this? | 10:32 | |
JJMerelo | ... or give enough access so that I can do it | ||
jnthn | nine: Also that we have some model of a lexical scope that isn't an MVMFrame, but more late-bound, but come the point we actually finish the compilation and produce bytecode, they all have to be resolved into something that serializes like the outer context could | ||
nine: If the BEGIN does an EVAL, I think all bets are off... | 10:33 | ||
I think the wrapper frame actually *is* bad, because we're effecitvely telling lies about our outer chain | 10:34 | ||
And they keep catching up with us | |||
JJMerelo | ... meanwhile I'll keep using travis-ci.org, for which apparently I have permission. | ||
jnthn | JJMerelo: Hopefully done | 10:35 | |
JJMerelo | jnthn thanks! | ||
nine | Ok, then there's no sense in thinking about solutions involving that wrapper frame. | ||
jnthn | And I fear with what I want to do, the lies are turning into whoppers... :) | 10:36 | |
For example, I'd like to try and interpret role bodies in the common case | |||
So in that case a scope comes to be for something we never created bytecode for | 10:37 | ||
As well as closure clones of all the methods, which we'd also not have compiled the bytecode for yet | |||
nine | Looks to me like we have a compiler with some bolted on ability to finish compiling parts of the code early and running them. Works for limited cases but will run into issues quickly. Maybe we need a bit of a shift in mindset. | ||
Instead of BEGIN stuff and EVAL being those nasty special things, we should consider the situation normal, that at any point we have multiple nested compilations going on with outer stuff still in limbo and judge any solution against this picutre. | 10:38 | ||
jnthn | Exactly. | 10:39 | |
nine | Because....having a role body do a BEGIN EVAL which creates a sub that has a trait is actually not that contrived an example | 10:40 | |
jnthn | I mean, we have a quite traditional compilation model at the moment in terms of the compiler/VM relationship, and then we try and do all of this tradition-busting stuff atop of it. We've done pretty well given that, but...it feels like we're having to fight it. | 10:42 | |
nine | So it's normal that a lexical lookup can end up in a frame that's not compiled yet. A frame that on the runtime's side e.g. is just a stub? | ||
jnthn | Yes, I think the runtime needs to have some awareness of WIP static frames and WIP frames. | 10:43 | |
nine | I've fought it for weeks and weeks now :) I would much prefer to cooperate | ||
jnthn | Yes, your suffering was informative... :) | ||
nine | So we need to tell the runtime that these frames will exist. This kinda ties into something I've also thought: the linear separation of stages might be a bit of an oversimplification. | 10:44 | |
jnthn | Yup. This also ties into my "MoarVM should focus more on interpreter cooperation" quip. | 10:45 | |
nine | Currently I have a start stage in the MoarVM backend that initializes some stuff, but that's not a proper solution as compilation may start with a later stage (in case we already have a QAST). | ||
Feels like front- and backend should cooperate some more with both getting initialized early | |||
In which case we could create MAST::Frames at the same time we create the QAST::Block (or whatever it will be in the future) | 10:46 | ||
jnthn | Yes, much like we have an SC that we add to over time, I think we need a similar thing for a compilation unit. | ||
nine | Which gets the information one step closer to the runtime already | ||
More concurrency of these stages and closer ties between compiler and runtime also fit nicely with the re-imagining of spesh | 10:47 | ||
jnthn | Not quite sure on the MAST::Frame front, but there needs to be *something* that exists ("frame handle"?) that, at the point we do decide to produce bytecode, is involved with it. | 10:48 | |
nine | Yeah, whatever it's going to be. I'd just start with an almost empty MAST::Frame that gets filled with values over time. Maybe it works out, maybe we need something different | 10:49 | |
And keeping with the new mindset: no code is safe from getting run at BEGIN time. After all BEGIN time code may call any sub or method. So allocating frame handles for all blocks by default makes sense. | 10:51 | ||
jnthn | I think in some cases there might not be a MAST::Frame at all. I mean, if you write a BEGIN block or an EVAL that is super simple (e.g. a BEGIN that just does a mixin or some other MOP call), we might not ever bother producing bytecode. | 10:53 | |
nine | A possible generalization here is: since we'll have stubs for lexicals with callbacks for getting values, the same mechanism could be used for code objects. No need to treat them specially. | ||
jnthn | I guess new-disp is about saying "well, actually, let's just keep dispatch knowledge out of the VM but expose to the VM the things it needs to know to go fast", and I wonder if we need such a revolution for frames/scopes too. | 10:55 | |
nine | Can we actually get away with that? Maybe not so much in precompilation mode | ||
jnthn | I guess there's 3 concepts we want to expand the lifetime/workflow of; to use the MoarVM terms for them: compilation units, static frames, and frames | 10:59 | |
Keeping the last two apart is almost certainly really important | 11:01 | ||
It's the class/object style distinction | |||
nine | Yep, it's e.g. for locals one where you have the information on which slots are there and the other which has the values for them | 11:04 | |
Do we have any information on nested compilation units now that you mention them? | 11:05 | ||
I think they are only really linked at the frame level | 11:06 | ||
jnthn | Those aren't modeled at the VM level at all | ||
That's part of the problem really | |||
We don't actually want to have them | |||
nine | we don't? | 11:07 | |
jnthn | A BEGIN doing an EVAL doing a BEGIN doing an EVAL all really are part of the same (Raku level) compilation unit, which we expect to produce one bytecode file from | ||
nine | True. What I've really been doing the hard way is finding out which things really belong to the outer most compilation unit and which parts we need to keep locally. | 11:08 | |
Or as I discovered again yesterday: which parts need to be kept locally but added to the outer compilation unit later on | 11:09 | ||
The result being that almost everything will land in the outer most comp unit | 11:17 | ||
rba | patrickb: pong | 11:46 | |
12:10
sena_kun joined
12:12
Altai-man_ left
|
|||
Geth_ | rakudo: e1cefecc92 | (Elizabeth Mattijsen)++ | 331 files Unify all # vim lines to '# vim: expandtab sw=4', aka lose the reference to perl6. Let people configure their own syntax highlighter for their situation. But indicate we want expanded tabs with 4 spaces. |
12:17 | |
12:25
AlexDaniel left
|
|||
patrickb | rba: I'll have lunch now, back in an hour. Do you have a little time later today? I'd like to do something about the SSL rakubrew.org issue... | 12:31 | |
Geth_ | rakudo/rakuast: 2bca5d113e | (Jonathan Worthington)++ | 5 files Reorganize AST EVAL workflow In support of having a RakuAST-based compiler as well as AST EVAL. * We now always wrap the AST node into a compilation unit, making sure that it's something that makes sense as a top-level thing to evaluate (following the general principle of using the type system to model ... (5 more lines) |
||
rba | patrickb: Sure. All fine. Everything is going on at the same time ;-) | ||
12:32
Kaeipi left
12:34
Kaiepi joined
12:59
JJMerelo left
13:04
AlexDaniel joined,
AlexDaniel left,
AlexDaniel joined
|
|||
nine | So...I now know that I have to start compilation with an empty @!load_dependency_tasks and add those to the outer compiler's list at the end. This sounds like the most trivial things to do. But for 20 minutes I'm now sitting here without a good idea where exactly to put this. | 13:42 | |
It's like the World object has access to those tasks but doesn't know when compilation ends. And the compiler's driving loop doesn't actually have access to the World object as that gets created by a grammar | 13:43 | ||
Geth_ | rakudo/rakuast: db5f10e270 | (Jonathan Worthington)++ | 5 files Piece together enough to compile an empty file That is, `RAKUDO_RAKUAST=1 ./rakudo-m -e ''` now completes without error. |
13:55 | |
nine | Holy crap! It finally makes it through rakudo installation and passes Inline::Perl5's precompiled raku block tests :) | 14:07 | |
jnthn | Wow! | ||
nine++ | |||
14:10
Altai-man_ joined
14:12
leont left,
sena_kun left
14:17
leont joined
|
|||
patrickb | rba: I'm available now. | 14:27 | |
timotimo | cool | 14:46 | |
15:13
JJMerelo joined
15:35
Altai-man_ left
15:36
sena_kun joined
|
|||
Geth_ | rakudo/rakuast: ca57776839 | (Jonathan Worthington)++ | 5 files Get basic setting loading in place |
15:48 | |
rakudo/rakuast: c727635378 | (Jonathan Worthington)++ | 3 files Move RakuAST::CompUnit to its own file |
|||
16:00
JJMerelo left
16:10
Altai-man_ joined
16:12
sena_kun left
|
|||
Geth_ | rakudo/rakuast: 7f2d604a63 | (Jonathan Worthington)++ | 3 files Wire up enough to be able to compile `say(42)` Using existing RakuAST nodes, plus a stubbed in literals table class. We cheat heavily on many of the grammar rules for the moment. |
16:15 | |
jnthn | This is curious. `time ./rakudo-m -e 'say(42)'` comes out at 0.105s. `time RAKUDO_RAKUAST=1 ./rakudo-m -e 'say(42)'` comes out at 0.067s. | 16:16 | |
What I don't know is how much of that comes from my grammar being way simpler for now (this won't stay the case) and how much is 'cus we don't iterate and make stub QAST nodes for every top-level CORE.setting symbol (this will stay the case). | 16:17 | ||
So don't get too excited yet. | 16:18 | ||
[Coke] | still, good to start there and not twice as slow. :) | 16:22 | |
Geth_ | rakudo/rakuast: bcc7041e47 | (Jonathan Worthington)++ | tools/templates/Makefile-backend-common.in Make sure we invoke NQP properly in the build |
16:31 | |
rakudo/rakuast: 1b2121e133 | (Jonathan Worthington)++ | src/Raku/ast/resolver.rakumod Fix a comment; MasterDuke++ |
16:35 | ||
rakudo/rakuast: 181ec2df88 | (Jonathan Worthington)++ | 2 files Add precedence table and a bunch of infixes |
17:00 | ||
jnthn | oh dammit, the moment I think "time to go home" I hear it start hammering it down outside... | 17:02 | |
timotimo | whoops | 17:06 | |
jnthn | Though it seems to have already stopped... | ||
At least I have a vaguely waterproof jacket with me | |||
home & o/ | 17:11 | ||
Altai-man_ | o/ | 17:12 | |
Kaiepi | bastille% raku -e 'use v6.e.PREVIEW; say await $*RESOLVER.query: "www.google.com", T_A, C_IN' | 17:16 | |
(142.250.64.100) | |||
got async dns queries working | |||
patrickb | rba: ping | ||
rba | patrickb: yes sir | 17:19 | |
patrickb | Hey! :-) | ||
rba | I can fix the ssl cert. Yet I have to think more how to avoid it 3 months... | 17:21 | |
patrickb | What can we do to fix rakbrew.org? | ||
The difficulty is that it's separate servers, right? | |||
Boiling down to the "How do we sync the servers?" problem we brainstormed about a while ago? | 17:22 | ||
rba | patrickb: Yes, I guess so. | 17:24 | |
Give me another hour. Will copy the working cert later today... | 17:25 | ||
patrickb | rba: That was the brainstorming discussion: colabti.org/irclogger/irclogger_lo...02-14#l169 | 17:38 | |
The essence of that discussion was: If and only if the simple solution doesn't suffice, go for the complex solution. So just use rsync. | 17:42 | ||
For the static files. | |||
18:07
lichtkind joined
18:11
sena_kun joined
18:13
Altai-man_ left
|
|||
rba | patrickb: certificates are in sync now. fixing it longterm is done another time. | 18:51 | |
patrickb | rba: Nice! Ping me if you need help with the long term solution. | ||
rba | patrickb: will do :-) | 18:52 | |
nine | Kaiepi: cool! | 19:08 | |
19:24
MasterDuke left
20:10
Altai-man_ joined
20:12
sena_kun left
20:29
Kaiepi left
21:05
patrickb left
|
|||
Geth_ | rakudo: d984e7c24d | (Elizabeth Mattijsen)++ | 3 files Consistify Rakudo::Iterator.Pairs No functional change |
21:16 | |
22:11
sena_kun joined
22:12
Altai-man_ left
22:26
leont left
22:57
MasterDuke joined
22:59
lichtkind left
|
|||
Geth_ | rakudo: bf01f84545 | (Elizabeth Mattijsen)++ | src/core.c/Rakudo/Iterator.pm6 Introduce Rakudo::Iterator.Truthy Not used yet, but will be used for .split(:skip-empty) functionality and possibly other situations |
23:14 | |
rakudo: da9943a417 | (Elizabeth Mattijsen)++ | src/core.c/Rakudo/Iterator.pm6 Introduce Rakudo::Iterator.MatchCursor Given a regex, a string and a way of moving the cursor (:g, :ov, :ex) create an iterator producing the cursors. Future workhorse of all iterators that are based on regular expressions, such as .split and .comb. Not used yet. |
|||
rakudo: 150af9a2d3 | (Elizabeth Mattijsen)++ | src/core.c/Rakudo/Iterator.pm6 Introduce Rakudo::Iterator.MatchCursorLimit Given a regex, a string, a integer limit and a way of moving the cursor (:g, :ov, :ex) create an iterator producing the cursors. Future workhorse of all iterators that are based on regular expressions with a limit, such as .split and .comb. Not used yet. Also removed the specific push-all for MatchCursor, it will not be needed. |
|||
lizmat | sleep& | 23:22 | |
Geth_ | rakudo/rakuast: e3eb15a56c | (Jonathan Worthington)++ | 2 files Compile some basic prefix/postfix ops to RakuAST Also preparing the way for all the meta-op stuff, although those aren't yet part of the RakuAST model. |
23:39 |