🦋 Welcome to the IRC channel of the core developers of the Raku Programming Language (raku.org #rakulang). This channel is logged for the purpose of history keeping about its development | evalbot usage: 'm: say 3;' or /msg camelia m: ... | Logs available at irclogs.raku.org/raku-dev/live.html | For MoarVM see #moarvm Set by lizmat on 8 June 2022. |
|||
00:00
reportable6 left
00:02
reportable6 joined
|
|||
Nemokosch | t/spec/S09-multidim/XX-POS-on-dimensioned.t | 00:36 | |
the special relevance of this test file is that apparently this is the one test that passed after my butchering of containers | 00:37 | ||
this is the one win | |||
it would be a bit longer to list the tests that broke, though | |||
but even this seems like a test that failed on the TAP somehow, and otherwise it would already work | 00:42 | ||
01:24
epony joined
03:36
linkable6 left,
evalable6 left,
evalable6 joined
03:38
linkable6 joined
06:00
reportable6 left
06:01
reportable6 joined
|
|||
Geth | rakudo/main: 67ba2dfcc8 | (Christian Bartolomäus)++ | tools/templates/jvm/Makefile.in [JVM] Set Xmx4G for building Rakudo As explained in github.com/rakudo/rakudo/issues/5186 the compilation of blib/Perl6/BOOTSTRAP/v6c.jar failed with java.lang.OutOfMemoryError: Java heap space otherwise. Hopefully we'll find a way to reduce the memory usage for that step, because 4 GB is quite an amount of memory. (And for instance, I could imagine, that we won't have that much memory for the CI builds.) |
06:20 | |
09:07
epony left
|
|||
Nemokosch | eventually, I got back to getting errors... but this time it's an error actually related to the modification at least 🥺 | 09:37 | |
cannot do resolution on NQPMu | 09:38 | ||
09:39
codesections left
|
|||
lizmat | that indicates something is not getting initialized :-) | 09:44 | |
Nemokosch | so does that imply that the element exists at least? or could be that it's just downright missing? | 09:46 | |
what I changed here is that I prepended an element for lookup, and consequently changed the indices by one | 09:47 | ||
lizmat | ah, so the array of things to resolve may have had a "hole" | 09:48 | |
? | |||
if so, then that's what it's choking on, it currently doesn't support holes | |||
Nemokosch | hmm, I don't know how if would have a hole. Everything is either pushed or not pushed | 09:50 | |
so that's the one form of index mess-ups that shouldn't happen 🙂 | |||
actually I'm gonna push this and make a draft PR so that it's easier to talk about it | 09:51 | ||
lizmat | €oki | 09:53 | |
*oki | |||
09:55
ab5tract joined
|
|||
Geth | rakudo: 2colours++ created pull request #5196: Make & sigil defaults and types correct |
10:04 | |
Nemokosch | so yes, the state of, khm khm, "art" | ||
10:18
ab5tract left
|
|||
> is (42)[*/2], 42, 'Indexing half way into one element list'; | 10:31 | ||
by the way, I don't like this test case | |||
it doesn't (only) test what it says | |||
(42) is not a "one element list", is it | |||
10:31
sena_kun joined
10:32
sena_kun joined
|
|||
so it implicitly tests whether it successfully turns into one | 10:32 | ||
lizmat | agree | 10:36 | |
test probably preceded the GLR | |||
there was a time in Raku where (42) *was* a list | |||
I guess about 15+ years ago :-) | |||
10:37
sena_kun left
|
|||
Nemokosch | what is really crippling about the problem is that I can just keep running tests without modifying anything about Rakudo itself - and the output changes | 10:39 | |
lizmat | ? | 10:41 | |
Nemokosch | I'm running tests with the modifications I made | 10:42 | |
and I can't even purposefully get the same output with the same executable on the same script that I got 30 minutes ago | |||
deleted .precomp folders, doesn't even seem to change anything | 10:43 | ||
the same thing works now, previously it didn't for the exact same amount of time | |||
lizmat | hmmm.. yeah, there's still some gremlins with precomp and dependency checking atm | ||
I routinely do a "make clean" before rebuilding | 10:44 | ||
and when I go back to a previous compilation-id, I make sure I run 'cleanup-precomp' first | |||
nine | Nemokosch, RakuAST::VarDeclaration::Simple is not the only ContainerCreator | 10:46 | |
Oh, but Signature doesn't do any lookups. | 10:47 | ||
Nemokosch | That's a good point regardless | 10:49 | |
At this point I'm happy for any idea that doesn't involve chasing a heisenbug | |||
11:11
ab5tract joined
|
|||
ab5tract | nine: nope, it doesn't seem to be related to the $whatevercode_arg being a contvar | 11:19 | |
this is so ... annoying in a way that catches my attention lol | 11:20 | ||
12:00
reportable6 left
12:03
reportable6 joined
|
|||
Geth | rakudo/main: e67941e9f1 | (Elizabeth Mattijsen)++ | src/Raku/ast/variable-declaration.rakumod Lose an unneeded level of indentation No functional changes, just something found while checking out stuff |
12:03 | |
rakudo/main: d8d34a12dc | (Elizabeth Mattijsen)++ | src/Raku/ast/variable-declaration.rakumod Remove some dead code And rearrange some other to make it more DRY |
12:12 | ||
12:46
ab5tract left
14:27
ab5tract joined
|
|||
ab5tract | nine: when you have some tuits, I'd really appreciate your eyes on this QAST again: gist.github.com/ab5tract/144c33cb3...638f66a6a5 | 14:33 | |
Other than 'contvar' versus 'var', I can't tell any difference. Though we've established that I'm not the most qualified one to make that claim ;) | 14:35 | ||
nine | If the generated code is ok, then the difference is likely in the meta object | 14:44 | |
Nemokosch | the hard lesson | 14:45 | |
QAST is still indeed "abstract", the semantics seems to come from the metamodel quite often | 14:46 | ||
used to think QAST was "everything" | |||
14:51
ab5tract left
|
|||
Geth | rakudo/main: d20bea564b | (Stefan Seifert)++ | src/Raku/ast/signature.rakumod RakuAST: fix using curried expressions as where clauses on parameters Curried expressions are not Code objects but they actually code-gen to blocks, so there's no need to wrap them in blocks again. ab5tract++ for discovering |
15:03 | |
nine | ab5tract: ^^^ will be useful in your tests | 15:04 | |
tellable6 | nine, I'll pass your message to ab5tract | ||
15:05
ab5tract joined
|
|||
lizmat | QAST *could* be everything, but that's simply not very practical | 15:08 | |
Geth | rakudo/main: 46fc663eed | (Elizabeth Mattijsen)++ | 2 files Properly initialize our variables without initialization Transfer all of the complicated logic for this to a new Stash.VIVIFY-KEY implementation-detail method. |
||
lizmat | sadly, no new tests passing | 15:09 | |
nine | My commit fixed 2 tests. Did you notice that more than half of the spectests now pass? :) | 15:10 | |
[Coke] | woot | 15:14 | |
japhb | \o/ | 15:15 | |
15:15
ab5tract left
|
|||
nine | Oh wait...half is at 677, we're at 672. But I guess it's just one more weekend. | 15:36 | |
Nemokosch | I can't wait for the weekend to begin 🎶 | 15:49 | |
shmup | i just learned about en.wikipedia.org/wiki/POETS_day | 15:56 | |
16:01
ab5tract joined
|
|||
ab5tract | I guess I don't understand how the problem could be "in the metaobject" .. to which I assume is meant "in SubsetHOW" | 16:13 | |
tellable6 | 2023-02-10T15:04:13Z #raku-dev <nine> ab5tract: ^^^ will be useful in your tests | ||
lizmat | nine: the order in which declarations are codegenned seems wrong | 16:16 | |
causing $?PACKAGE not to be set until *after* it is needed to initialize any "our" variables | |||
so it's taking the wrong one in the case of: | |||
our $a; package M { our $a } # <-- still referring to the outer one | |||
ab5tract | lizmat: Interesting. I wonder if this is also the cause of my issue with 'my' scoped subsets still being visible outside of the module they are declared in | 16:26 | |
though it's kind of the reverse of your problem | 16:30 | ||
lizmat | well, I can't seem to find where the declarations of a block are being codegenned | 16:31 | |
ab5tract | maybe via signature.rakumod? | 16:51 | |
well, that's where some of the block's declarations come from at least | 16:52 | ||
[Coke] | Any thoughts on github's new "merge queue" functionality? github.blog/changelog/2023-02-08-p...blic-beta/ | 17:04 | |
lizmat | sounds pretty interesting | 17:19 | |
17:33
melezhik joined
17:42
melezhik left
18:00
reportable6 left
18:01
reportable6 joined
18:11
sena_kun joined
|
|||
lizmat just realized that all $?PACKAGE lookups should be run-time, rather than compile time | 19:10 | ||
*especially* if the RakuAST is built by hand | |||
[Coke] | is it true that $*W is going away once AST is complete? | 19:24 | |
lizmat | yes | ||
[Coke] | ok. Updating github.com/Raku/doc/issues/3050 | ||
lizmat | $*W is the Perl6::World object, and there is no Raku::World | 19:25 | |
19:35
epony joined
|
|||
nine | [Coke]: I don't think our repo is busy enough to warrant that feature | 20:42 | |
[Coke]: $*W was never meant to be a public API. Documenting it would have been a disservice | 20:43 | ||
ab5tract: don't you mean $!where.IMPL-CURRIED.meta-object? | 20:50 | ||
in line 542 | |||
Nemokosch | the world is going away... | 20:52 | |
🙀 | |||
nine | I am SO gonna play The Day The World Went Away when we remove the old compiler frontend | 21:05 | |
Nemokosch | I'd rather stay away from this Supply semantics issue on GH, but the question seems appropriate... | 21:07 | |
so, what happens if it turns out that roast was basically wrong? | |||
it sounded kinda like there was a test for an implementation detail and therefore something that should be just okay is a "breaking change" all of a sudden | 21:08 | ||
ab5tract | nine: That does seem to make the guard work! | 21:11 | |
Unfortunately, now there's breakage for all of the clauses that _do_ get wrapped | 21:12 | ||
I gues because ApplyPostfix *also* curries | |||
nine | Nemokosch, roast has been wrong often before. We fix the bug in the test and that's that. Probably add a ChangeLog entry. After all the official branch for current 6.d is 6.d-errata | 21:14 | |
ab5tract: but that shouldn't matter? If it's curried, we need that block and will get it from IMPL-CURRIED. | 21:15 | ||
It should probably be $!where.IMPL-CURRIED ?? $!where.IMPL-CURRIED.meta-object !! $!where.compile-time-value | 21:16 | ||
Otherwise you'll get a "unknown method meta-object on object of type Bool" | |||
ab5tract | yeah, was getting that but understood it for the wrong reason | 21:24 | |
nine: well, that last change is it! | 21:25 | ||
everything is passing except for 'module M { my subset F where 5 }; my M::F $f = 5' | |||
^ that one still succeeds, where it should fail | 21:26 | ||
tried all I could thin of over the week to fix it but couldn't find a fix so far | 21:29 | ||
nine | Before you think of fixes, why does it even fail? | ||
or unexpectedly succeed in this case | |||
ab5tract | IIUC, it fails because the grammar calls resolve-name to determine if a type is defined. that somehow finds F, even though that F is my scoped | 21:31 | |
[Coke] | nine: the only documentation I was considering was marking it as an implementation detail somewhere. Probably on the rakudo wiki, not the raku/docs | ||
nine | But why does it find it? | ||
ab5tract | *my scoped inside of a module | ||
[Coke] | but maybe add to raku/docs something more explicit about implementation details and why you should check to see if something's official if you're not sure. | 21:32 | |
ab5tract | because it is installed lexically inside the module? | 21:33 | |
nine | Btw. keep in mind that for subset the timing of the BEGIN handler will be different than for packages which you share that declaration code with | ||
If it's installed lexically inside the module, the resolver won't find it outside the module. There are few things you can rely on, but that the resolver keeps the boundaries of lexical scopes is one of them. | 21:34 | ||
If it's visible outside that scope, it's because it's declared outside that scope. | |||
ab5tract | hmmm... in the QAST output I see that for the default 'our' scoped subset in a module, the lexical declaration is only inside that module. | 21:36 | |
but the output looks the same to me vs a 'my' subset | 21:39 | ||
(this is in the QAST from the old frontend) | 21:40 | ||
Honestly, I have no idea why it finds it. As you say, it shouldn't be found given that the resolver shouldn't find it from outside the module | 21:46 | ||
21:47
sena_kun left
|
|||
nine | Probably useful to know: there are 2 different declarations made for lexicals. One is via the resolver's declare-lexical method, this is just to let the compiler know about this lexical. The other is the RakuAST::Declaration node, this is responsible for generating the QAST. | 21:50 | |
nqp::gethllsym('nqp', 'note')($resolver.current-scope.HOW.name($resolver.current-scope.dump); in IMPL-INSTALL-SUBSET might shine a light on what's going on | 21:53 | ||
Err... nqp::gethllsym('nqp', 'note')($resolver.current-scope.dump); | 21:54 | ||
ab5tract | ah... so should I also be saving the current scope at attach time? | ||
let me actually run what you've suggested | 21:55 | ||
'lang-call cannot invoke object of type 'VMNull' belonging to no language' | 21:58 | ||
nine | Have you not added nqp::bindhllsym('nqp', 'note', ¬e); to nqp/src/core/IO.nqp? | 21:59 | |
ab5tract | I just did, but somethings is still wrong. I did a 'make clean' in between but that change still wasn't picked up. What's the difference between this nqp note and nqp say? | 22:06 | |
the Raku ones only differ in whether the output goes to STDOUT vs STDERR | 22:07 | ||
nine | The differerence is that in bootstrap NQP's setting is not available and this thing is the most reliable way I've found to just print a darn thing regardless of where I'm adding it | 22:08 | |
ab5tract | with nqp::say($resolver.current-scope.dump) I get 'Block\n\tBlockoid\n\t\tStatmentList' | ||
I wish I couild say that this cleared it up for me but ... | 22:09 | ||
that could be any Block | 22:11 | ||
including the one in the module M where the QAST of my lexical declaration lives | |||
nine | There aren't that many blocks in that program when you look at the --target=ast output. Actually I think it's the module's body block. Why is it empty though you might ask. The answer would be $package.replace-body: $body; in method package_def, i.e. we first assemble the whole body and then replace the default empty body on a package. | 22:13 | |
An equally good answer would be that that block doesn't actually contain anything yet because your example program would only add that subset and the BEGIN handler is called before we attach that Subset node to the StatementList | 22:16 | ||
In any case, sprinkling everything with tons of debug output is my usual approach for this :D | 22:18 | ||
ab5tract | lol | ||
been there earlier in the week | |||
nine | entering package scope for M | ||
RakuAST::Block Block | |||
So yes, we should be inside the package | |||
ab5tract | I mean, everything looks gravy to me. The QAST output resembles the old frontend output | 22:20 | |
The old frontend QAST looks exactly the same whether you do a 'my' or an 'our' subset | |||
nine | I think the QAST is fine. It's the resolver that's got wrong information | ||
ab5tract | which was what made me suspect s bug in the resolver | ||
nine | Not a but in the resolver. Nine's debugging lemma #1: the bug is always in your own code | ||
Oh, wait a minute. my M::F $f = 5, that's not a lexical lookup, it's looking in the package | 22:22 | ||
ab5tract | m: module M { my subset F where 5 }; my M::F $f = 5 | 22:23 | |
camelia | ===SORRY!=== Type 'M::F' is not declared at <tmp>:1 ------> odule M { my subset F where 5 }; my M::F⏏ $f = 5 Malformed my at <tmp>:1 ------> module M { my subset F where 5 }; my M::⏏F $f = 5 |
||
ab5tract | nine: Right, I should have answered your original question differently.. It looks through the package and finds the subset in the package stash | 22:24 | |
where I don't see how it does any distinction of whether what the resolver finds something that should actually be "visible" to the scope or not | 22:26 | ||
nine | The subset shouldn't _be_ in the package stash in the first place. After all it's lexically scoped | ||
ab5tract | erm, that sentence is a bit broken, please let me know if you'd like clarification | ||
but it is package-like | 22:28 | ||
it has to steal the .WHO of a stubbed package | |||
nine | We enter the if $scope eq 'our' at the end of IMPL-INSTALL-SUBSET! | ||
Err....I don't think the actions ever tell the subset how it's scoped, so it'll fall back to the default which is our | 22:30 | ||
ab5tract | now that is an excellent point | 22:32 | |
is that always available in $*SCOPE? | 22:34 | ||
nine | Actually I think it is told, but that's too late for your BEGIN handler | 22:37 | |
Yes, $*SCOPE should be it | |||
Ah, no it's not told. Blocks have special handling for that and packages. You're gonna need that, too | 22:38 | ||
ab5tract | ... I can't believe that that was it, the whole time | 22:50 | |
All my test cases are currently passing. | 22:51 | ||
Time to run against spectest and see if I solved anything there. what count are we at,currently? | |||
from the regular tests, I made exactly one subtest pass.. hooray! | 22:52 | ||
The exception doesn't 100% match. My output now doesn't mention "Type M::F is not declared", it just jumps straight to 'malformed my | 22:58 | ||
'but other than that one discrepancy, we seem to eqiual the base behavior \o/ | 22:59 | ||
anyway, my run says 696 passing spectest files | 23:05 | ||
sleep& | 23:08 | ||
nine++ for helping me through the last two hurdles. | 23:10 | ||
much less complicated than I was making them in my investigations |