🦋 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:03 reportable6 joined 01:13 japhb left 01:34 japhb joined 01:42 melezhik joined 01:51 melezhik left 02:23 melezhik joined 02:26 melezhik left 04:29 linkable6 left, evalable6 left 04:30 evalable6 joined 04:31 linkable6 joined 06:00 reportable6 left 06:03 reportable6 joined 07:03 bloatable6 left, notable6 left, sourceable6 left, greppable6 left, committable6 left, benchable6 left, bisectable6 left, shareable6 left, unicodable6 left, squashable6 left, quotable6 left, coverable6 left, reportable6 left, releasable6 left, nativecallable6 left, statisfiable6 left, evalable6 left, tellable6 left, linkable6 left, coverable6 joined, evalable6 joined, sourceable6 joined 07:04 statisfiable6 joined, releasable6 joined, reportable6 joined, tellable6 joined, notable6 joined, bisectable6 joined, nativecallable6 joined, committable6 joined, linkable6 joined, benchable6 joined 07:05 greppable6 joined, shareable6 joined, unicodable6 joined, quotable6 joined 07:06 bloatable6 joined, squashable6 joined 07:38 sena_kun joined 08:25 djinni` left 08:40 djinni` joined
Nemokosch I'm still thinking if I'm making some obvious mistake 08:56
but it seems that Callable isn't fully available at the time it would be needed for a &var 08:57
unlike Hash and Array - although part of the story is that those are classes while Callable is a role 08:59
this happens when I try to parameterize Callable: "Cannot find method 'parameterize' on object of type NQPClassHOW" 09:05
the old compiler basically performed a core lookup in World.nqp, as much as I understand 09:06
How to go about it these days?
nine Look at ImplicitLookups 09:08
Nemokosch 👍 09:10
I don't know... it seems that everything tries to look up itself, and then automagically knows what position of the lookup will be sufficient... 09:25
this seems to be the underlying magic in the Routine node: > RakuAST::Type::Setting.new(RakuAST::Name.from-identifier('Callable')) 09:27
may I just call this directly to obtain Callable?
ooor... should this be added to the get-implicit-lookups of the suitable variable declaration node? 09:29
nine It needs to be added to the list of implicit lookups. IMPL-CHECK will then resolve it. 09:31
RakuAST::Type::Setting.new(RakuAST::Name.from-identifier('Callable')) by itself just means "I'm interested in the Callable symbol from the setting", but that alone doesn't give you the actual object. 09:32
09:37 ab5tract joined
ab5tract I know I've been asking a lot of questions but this exercise of adding subsets has struck a cord in my hyperfocus matrix. Thank you all for your patience and your help! 10:27
nine Thanks for taking this on :) 10:28
ab5tract I'd be much obliged if someone could point out any fatal differences between the QAST for base and for my branch: gist.github.com/ab5tract/144c33cb3...638f66a6a5
nine: For the most part, it has been my pleasure :)
10:30 sena_kun left
ab5tract or, alternatively, what could be preventing nearly identical QAST from having the same effect between base and rakuast? 11:00
lizmat to my knowledge, nothing ? 11:02
at QAST level there is no difference between base and RakuAST ?
Nemokosch I used to think QAST is more complex than it really is 11:03
apparently the runtime relies a lot on the metamodel 11:04
ab5tract lizmat: functionally, yes. The only difference is a named lexical binding instead of '$_' 11:05
if you have any tuits for it, its all in that gist I linked
nine lizmat: he's talking about gist.github.com/ab5tract/144c33cb3...638f66a6a5 specifically 11:09
lizmat yeah, I got that :-)
nine ab5tract: could be that your expectations are actually wrong there: 11:14
m: my $a = * && "yes"; dd $a
camelia Str $a = "yes"
nine So * && ... does not curry, i.e. you don't get a WhateverCode 11:15
You also see that in the base qast. It literally translates to nqp::if(Whatever, 5)
Nemokosch what does the order of items in PRODUCE-IMPLICIT-LOOKUPS determine? 11:17
nine It's the same order you get these things out of get-implicit-lookups
ab5tract nine: Oh, strange.. * ~~ 5 does generate a WhateverCode in my branch 11:18
nine ~~ is not && 11:19
ab5tract And still doesn't work is not a constraint
Nemokosch I mean, if I add a new item, I'm probably breaking the "interface" of it, right?
ab5tract I see the code where '&&' is optimized into a direct nqp op 11:20
nine Maybe you're just picking the hardest examples all the time :D I'd not try ~~ as that's smartmatch and that's a lot of black magic
lizmat Nemokosch if you add at the end, there shouldn't be any problem 11:21
ab5tract Okay, then I guess subset is "done"
nine Nemokosch: appending is ok
tellable6 nine, I'll pass your message to Nemokosch
nine Can someone teach this bot to not pass messages to people who are right here?
lizmat they're not, as far as the bot is concerned... and I'm not sure where tellable lives 11:22
ab5tract nine: I was using '&&' specifically because it wasn't a smartmatch, btw :)
lizmat: presumably it could get learn how to connect to discord from 'discord-raku-bot' 11:23
That doesn't answer the question of where the thing actually is, of course :)
lizmat I think it's simpler than that: if the nick is <discord-raku-bot>, then look for the <real-nick> at the start of the line 11:24
ab5tract True, there's no point queueing IRC messages for discord nicks
Nemokosch so essentially scan the messages, then?
anyway, back to implicit lookups 11:25
my worry is that what it gives it not fixed-length
so if I append, well, counting from backwards can help if that's available?
feels awkward
lizmat implicit lookups just sets up info for the get-implicit-lookups to fetch... it's all up to you what it means 11:27
Nemokosch Yeah well, that's exactly my worry. If anything is modified, potentially all occasions of get-implicit-lookups need to be also modified 11:29
lizmat nope, only the one from that class
generally the implicit-lookups / get-implicit-lookups only work *within* a certain class, or maybe its subclasses 11:30
Nemokosch I mean that. It's going to be a third entry within that class.
and it's also getting variadic (which seems kinda like premature optimization to me?) 11:31
variadic my ass, variant, that's the important thing
depending on certain conditions, the entries may mean different things
AND their overall number can also differ 11:32
lizmat I'm not sure what you're getting at, it feels to me you're overcomplicating things
Nemokosch this isn't even what I wrote
lizmat it's just a tool to work around one of the bootstrapping issues of RakuAST
Nemokosch github.com/rakudo/rakudo/blob/156f...kumod#L423 11:33
nine IMHO the concerns are actually well founded. It just may still turn out to be worth the hassle.
Nemokosch so as it stands, it can have 1 entry or 2, and the first entry can be the package or the type 11:34
lizmat ah, in *that* particular case
nine One does have to be careful to get the conditions right.
lizmat well, I think that can be easily fixed by using fixed indices ?
instead of @lookups.push(foo) do @lookups[0] := foo ? 11:35
Nemokosch yes, the question would be: couldn't the whole thing just be a good-old fixed-sized array basically?
rather than something link-y
list*
lizmat well, in nqp there's no notion of lists, only arrays 11:36
there's also no assigning, only binding
Nemokosch yeah no I mean, this shouldn't have list semantics in the first place imo 11:37
just plain old static array/buffer semantics 11:38
"first position: either filled with the package or empty"
"second position: either filled with the type or empty"
etc.
which sounds like more or less the same thing you said, for what it's worth 11:39
nine These could as well be just properties on the node object. has RakuAST::Type::Setting $!Callable; The reason we have lists there at all is that the resolver goes through the list and resolves each item. But that list may then just be [$!Callable] 11:41
Nemokosch I don't know what the takeaway of this is. 11:47
How do I get Callable resolved, without relying on the positions in this implicit lookups list? 11:48
nine By doing just that: add a has RakuAST::Type::Setting $!Callable; to the node, initialize it in the node's constructor to the RakuAST::Type::Setting object with the proper name, then append $!Callable to the list in PRODUCE-IMPLICIT-LOOKUPS. Then, where you need Callable, access $!Callable.resolved.compile-time-value 11:54
ab5tract nine: If '* && 5' is not curried in the original, I guess I'm confused as to why ApplyInfix is the way it is 11:58
Nemokosch oh okay... so the list itself is returned but more importantly cached 11:59
12:00 reportable6 left, reportable6 joined
lizmat hmmm... looks like "resolve-implicit-lookups-with 12:09
doesn't like holes in the list 12:10
which would explain the approach taken
nine ab5tract: the answer is always: no test has shown the current ApplyInfix wrong. Same as at the time, no test had shown my original implementation (which looked like the current one in ApplyPostfix) wrong. 12:11
I actually tried to figure out from reading Perl6/Actions.nqp whether && is supposed to curry and I've failed so far. According to my reading it should, but it clearly doesn't. Which goes to show that the old code is just very complicated and it's easy to miss things. 12:12
lizmat m: dd (* && 1).^name # doesn't that say it all 12:13
camelia "Int"
Nemokosch the situation is worse than I thought
lizmat m: dd (* || 1).^name # that seems to curry
camelia "Whatever"
nine Huh....that's unexpected 12:14
lizmat ah, not, that's Whatever, not WhateverCoce
so that doesn't curry either
nine oh, right!
Nemokosch the class that needs to know Callable, RakuAST::ContainerCreator, doesn't inherit or mixin anything
can I just inherit from RakuAST::ImplicitLookups? 12:15
lizmat yes, just add "is RakuAST::ImplicitLookups"
Nemokosch okay, thanks 12:16
www.youtube.com/watch?v=ci1o288RB04 mood
lizmat note: it only *looks* like Raku code, but it is in fact code that feeds a pre-processor that produces NQP bootstrap code
ab5tract Even though it's a Whatever instead of a WhateverCode, its confusing why one is an Int and one is a Whatever 12:17
nine Oh...that's...bad. I have actually added array to the bootstrap because I needed it in ContainerCreator and as you've discovered, it's really bothersome to make it available there
lizmat m: dd * 12:18
camelia *
lizmat m: dd *.DEFINITE
camelia Bool::True
nine ab5tract: no, it's not confusing because Whatever is trueish. So * && 1 is like True & 1 which is 1 while * || 1 is True || 1 which is True 12:19
lizmat indeed
nine err which is Whatever
ab5tract ah, got it
Nemokosch nine: do you think it can be added with ImplicitLookups or will that create some paradoxical situation?
ab5tract so IIUC, I should change the behavior of ApplyInfix to *not* curry 12:20
nine ab5tract: not ApplyInfix, but Infix::IMPL-CURRIES needs to give a more accurate answer
Compare with the start of method whatever_curry in Perl6/Actions.nqp. That contains a lot of obscure logic 12:21
ab5tract ok, thanks! 12:23
omg... 12:27
that seems to have been the fix this whole time :O 12:28
Nemokosch well done 💪 12:29
ab5tract Thanks 12:30
Though it reproduces this bug now, lol
m: subset F where * && 5; my F $f = True
camelia Type check failed in assignment to $f; expected F but got Bool (Bool::True)
in block <unit> at <tmp> line 1
Nemokosch > Could not build C3 linearization: ambiguous hierarchy 12:31
I guess that answers my question about inheriting from ImplicitLookups...
ab5tract Nemokosch: There's the answer of whether you can actually descend from it or not
tellable6 ab5tract, I'll pass your message to Nemokosch
ab5tract m: subset F where * || False; my F $f = True
camelia ( no output )
ab5tract m: subset F where * || False; my F $f = False 12:32
camelia ( no output )
nine Nemokosch, you need to remove that inheritance from the classes that inherit from ContainerCreator. But then you're still left with the issue of combining their lists of names to resolve with your list
lizmat nine: maybe reform this from a list to a hash format ? 12:33
this probably won't be the last time this will occur...
nine I would still try to avoid that for performance reasons. In this particular case I'd introduce a callback to ContainerCreator which the inheriting classes can call in their PRODUCE-IMPLICIT-LOOKUPS 12:34
lizmat if we're talking performance, why all the WRAP / UNWRAP stuff then ?
Nemokosch so they wouldn't inherit from ImplicitLookups again, just override the method in a way that takes ContainerCreator into account? 12:35
nine I think the hope there is that we can optimize them away
yes
Nemokosch okay, that sounds fairly doable
lizmat nine: I get that, but why are they there in the first place?
as they'r only called inside nqp ?
or are they not ? 12:36
nine Not if it's Raku code creating the ASTs
and manipulating ASTs
lizmat ah, and they wouldn't get auto-hllized 12:37
gotcha
Nemokosch so the only thing to watch out for is the offset of the list of implicit lookups; the first position will be occupied by the inherited lookup 12:38
ab5tract damnit, I celebrated too soon :( 12:39
Nemokosch by the way - is ContainerCreator not a kind of abstract class? 12:48
nine No, it's a role 12:49
Nemokosch hm, anyway, where I'm getting at is that it might not even need to implement PRODUCE-IMPLICIT-LOOKUPS for anything but documentational purposes 12:52
or well, providing a default
nine true
Nemokosch first occasion in a long time that the generated bootstrapping code was syntactically correct 😄 12:57
what is the language of these bootstrapped rakumod files? Is this what "desugar'd Raku" looks like? 12:59
nine No, the routine bodies are just plain old NQP 13:00
Nemokosch or is this a syntactic skeleton over NQP? or are these the same thing? 🙂
lizmat I guess you could have a look at gen/moar/ast.nqp and tools/build/raku-ast-compiler.nqp 13:02
Nemokosch just out of curiousity, where it fits the bigger picture 13:03
like, is this a language written specifically for this purpose?
or is this just NQP with a rakumod extension? 13:04
I can't believe my eyes 🥹 13:05
cdn.discordapp.com/attachments/633.../image.png
lizmat it makes it easier to write the Raku bootstrap, which is what we otherwise we would have to do manually to get gen/moar/ast.nqp
Nemokosch is the number of passing tests and spectests tracked somewhere? 13:09
el gatito (** advocate) no one commented on my issue lmao
for 2 hours
Nemokosch 🤣 I mean, I get your point... 13:10
I have issues that have no comments after months
again, not saying that it's perfectly okay
but for the time being, I can't see the situation change radically 13:11
what you can do is to adopt the mindset that "this issue might wait for several months until somebody picks it up"
so 1. don't put heaps of effort into writing an issue 2. on the other hand, be concise and clear, otherwise the whole issue will go down in the garbage collector of time 13:12
should have run the test with and without separately 13:15
anyway, I'm gonna save the output with, and then revert and see without 13:16
nine el gatito (** advocate): see rootprompt.at for commercial options. I'm sure we could come up with a contract that guarantees response times. 13:24
lizmat :-)
14:34 ab5tract left
Nemokosch um... something seemed off with the tests... 14:37
14:37 epony left
anyway, now I'm gonna run the same thing without, to see if the testing is off or the results simply got ruined 14:37
14:44 epony joined
Geth rakudo/main: db7ca2dd03 | (Elizabeth Mattijsen)++ | 9 files
Add Unicode class to 6.c

Providing:
  - .version: the Unicode version supported
  - .NFG: Bool whether NFG supported
Removes the $?UNICODE-VERSION, which is now accessible as Unicode.version
14:50
rakudo/main: e3b9c66363 | (Elizabeth Mattijsen)++ | src/Raku/Grammar.nqp
Make undefined variables complain properly

Also attempt to auto-declare variables when "no strict" is active. But that sadly still fails. More research needed.
15:51
lizmat which brings us to 670 / 1355 :-) 15:53
nine: could you explain why RakuAST::VarDeclaration::Simple.new(scope => 'our', name => $name).resolve-with($*R)
would error out with: Cannot find method 'resolve-with' on object of type NQPMu 15:54
and not with: Cannot find method 'new' on object of type NQPMu
ah. of course, it instantiated NQPMu.new first 15:55
Nemokosch I'm jealous of the tests actually working :c 16:11
17:22 codesections joined 17:42 melezhik joined 17:43 melezhik left 18:00 reportable6 left 18:01 reportable6 joined
okay... it doesn't actually compile! that explains a lot 18:32
worked from the REPL, lol
18:36 sena_kun joined
> This element has not been resolved. Type: RakuAST::Type::Setting 18:44
18:48 ab5tract joined
I'm back to clueless 😞 I can't see how it's different from how RakuAST::TraitTarget::Variable works 18:48
lizmat yeah, bootstrapping is hard :-( 18:52
Nemokosch and somehow it did the right thing in the REPL 18:55
so something must be with the compilation step 18:56
lizmat are you sure the Raku grammar was used in the REPL ? 18:57
Nemokosch yes - the funny thing is, I wasn't going for the current stable behavior so it gives it away quickly 18:59
my Int &foo would be Callable now and I made it become Callable[Int]
(the previous RakuAST behavior was simply a $-like Scalar, hence Int) 19:00
lizmat ack
Nemokosch say, I implement PRODUCE-IMPLICIT-LOOKUPS for a class that descends from ImplicitLookups. What performs the actual resolution? 19:02
lizmat the resolver 19:15
dinner&
20:17 bisectable6 left, bloatable6 left, notable6 left, nativecallable6 left, committable6 left, statisfiable6 left, tellable6 left, sourceable6 left, shareable6 left, unicodable6 left, releasable6 left, benchable6 left, greppable6 left, reportable6 left, evalable6 left, squashable6 left, coverable6 left, linkable6 left 20:18 squashable6 joined, sourceable6 joined, greppable6 joined, reportable6 joined, bisectable6 joined, evalable6 joined, releasable6 joined, bloatable6 joined 20:19 benchable6 joined, unicodable6 joined, coverable6 joined, notable6 joined, shareable6 joined, linkable6 joined, tellable6 joined, committable6 joined 20:20 nativecallable6 joined, statisfiable6 joined
Nemokosch yes, makes sense... however, I haven't seen the involvement of the resolver, like where does it kick in? 20:24
nine Look at src/Raku/ast/base.rakumod 21:15
IMPL-CHECK
22:09 sena_kun left
Nemokosch is there something that can give a stack trace for compile-time errors? 22:17
it feels hopeless without that 22:40
no idea what changed but all of a sudden, tests started passing 23:13
some tests, at least...
but previously it looked like it was all graveyard
it would be good to see a list of passing and failing tests 23:46