🦋 Welcome to the MAIN() IRC channel of the Raku Programming Language (raku.org). Log available at irclogs.raku.org/raku/live.html . If you're a beginner, you can also check out the #raku-beginner channel! Set by lizmat on 6 September 2022. |
|||
00:00
reportable6 left,
reportable6 joined
00:05
eroux left
00:07
eroux joined
00:12
eroux left
00:22
eroux joined
00:43
jpn left
00:46
jpn joined
00:51
jpn left
01:04
eroux left
01:11
rf joined
01:13
razetime joined
01:31
eroux joined
02:19
jpn joined
02:24
jpn left
02:26
rf left
|
|||
antononcube | @Coke Did you present at the The Perl and Raku conference two weeks ago? | 02:41 | |
[Coke] | Nope, I didn't attend | 02:42 | |
antononcube | Ah, for some reason I though you were going to... | 02:43 | |
02:51
Xliff left
02:58
andydude joined
03:58
unicodable6 left,
nativecallable6 left,
bisectable6 left,
quotable6 left,
reportable6 left,
greppable6 left,
statisfiable6 left,
releasable6 left,
sourceable6 left,
notable6 left,
shareable6 left,
squashable6 left,
tellable6 left,
benchable6 left,
evalable6 left,
bloatable6 left,
coverable6 left,
linkable6 left,
committable6 left,
benchable6 joined,
quotable6 joined,
linkable6 joined,
evalable6 joined
03:59
bisectable6 joined,
bloatable6 joined,
releasable6 joined,
nativecallable6 joined,
squashable6 joined,
sourceable6 joined,
tellable6 joined
04:00
statisfiable6 joined,
notable6 joined,
shareable6 joined,
coverable6 joined,
reportable6 joined
04:01
unicodable6 joined,
committable6 joined,
greppable6 joined
04:07
jpn joined
04:12
jpn left
04:16
razetime left
|
|||
guifa__ | m: subset X of Str() where *.so; class A { method a (X $x) { $x.say }; }; my A $a .= new; (1..10).hyper(:batch(1), :degree(2)).map({ $a.a($_); }); | 04:18 | |
camelia | 1 2 3 4 5 6 7 8 9 10 |
||
guifa__ | xinming: you can also make it a coercing type, to handle the conversion from int to string automatically if it´s not a string | 04:19 | |
04:41
teatwo joined
|
|||
[Coke] | ended up going to CT and getting covid instead, not an upgrade | 04:42 | |
04:42
teatwo left
04:43
teatwo joined
04:44
teatime left
04:56
razetime joined
05:02
jpn joined
05:06
jpn left
05:27
jpn joined
06:00
reportable6 left
06:02
reportable6 joined
|
|||
xinming | guifa__: So there is diff between subset X of Str and subset X of Str() | 06:22 | |
What are the subtle diff between them? | |||
This worked, But It's quite confusing then, Why will `subset X of Str where ..` worked without hyper | 06:23 | ||
m: my %m = ("a" => 1, "b" => 2, "c" => 3); subset X of Str() where * (elem) %m.keys.Set; sub a (X $x) { $x.say }; ("a" .. "c").hyper(:batch(1), :degree(2)).map({ a($_); }); | 06:26 | ||
camelia | A worker in a parallel iteration (hyper or race) initiated here: in block <unit> at <tmp> line 1 Died at: Type check failed in binding to parameter '$x'; expected X but got Str ("a") in sub a at <tmp> line 1 in block at… |
||
xinming | guifa__: with coercing type, it still fails. | ||
I believe this is a bug | |||
07:03
linkable6_ joined,
evalable6_ joined
07:11
jpn left,
andydude left,
eroux left,
Sgeo left,
tejr left,
m_athias left,
nine_ left,
reportable6 left,
committable6 left,
unicodable6 left,
coverable6 left,
shareable6 left,
notable6 left,
tellable6 left,
squashable6 left,
nativecallable6 left,
releasable6 left,
bisectable6 left,
evalable6 left,
linkable6 left,
benchable6 left,
PipStuart left,
andinus left,
kjp left,
ProperN[out] left,
daxim left,
summerisle left,
perlmaros left,
guifa__ left,
mjgardner left,
SmokeMachine left,
gabiruh left,
samcv left,
jetchisel left,
tobs left,
patrickb left,
atweedie left,
corwin left,
ugexe left,
zostay left,
slu left,
hexology left,
Ekho left,
hellwolf left,
discord-raku-bot left,
Util left,
greppable6 left,
statisfiable6 left,
sourceable6 left,
bloatable6 left,
quotable6 left,
Scotteh_ left,
human-blip left,
RonaldR34g4m left,
samebchase left,
jast left,
ilogger2 left,
polettix left,
uzl[m] left,
tbrowder_ left,
xkr47 left,
tailgate left,
rypervenche left,
justache left,
mark22k left,
Sevalecan left,
amenonsen left,
DarthGandalf left,
oodani left,
perryprog left,
mtj left,
PotatoGim left,
askmeaboutloom left,
cm left,
GreaseMonkey left,
Altreus left,
clarkema left,
xinming left,
kst left,
jgaz left,
jrjsmrtn left,
gfldex left,
elcaro left,
Voldenet left,
dg left,
Aedil left,
simcop2387 left,
avuserow left,
tinita left,
timo left,
charsbar left,
dutchie left,
donpdonp|z_ left,
nicole left,
vrurg left,
tonyo left,
zups left,
silug left,
thowe left,
esh left,
kawaii left,
Matthew|m left,
MitarashiDango[m left,
Orbstheorem left,
moritz left
07:12
jpn left,
Vyrus joined,
clarkema joined,
atweedie joined,
patrickb joined
07:17
tobs joined,
jetchisel joined,
samcv joined,
gabiruh joined,
SmokeMachine joined,
mjgardner joined,
samebchase joined,
human-blip joined,
Scotteh_ joined,
quotable6 joined,
bloatable6 joined,
sourceable6 joined,
statisfiable6 joined,
greppable6 joined,
rypervenche joined,
tailgate joined,
xkr47 joined,
tbrowder_ joined,
nicole joined,
donpdonp|z_ joined,
dutchie joined,
charsbar joined,
timo joined,
tinita joined,
avuserow joined,
simcop2387 joined,
Aedil joined,
dg joined,
Voldenet joined,
elcaro joined,
gfldex joined,
jrjsmrtn joined,
jgaz joined,
kst joined,
xinming joined,
moritz joined,
Util joined,
discord-raku-bot joined,
hellwolf joined,
kawaii joined,
esh joined,
thowe joined,
silug joined,
zups joined,
tonyo joined,
vrurg joined,
nine_ joined,
m_athias joined,
tejr joined,
Sgeo joined,
andydude joined,
jpn joined,
corwin joined,
ugexe joined,
zostay joined,
slu joined,
hexology joined
07:18
reportable6 joined,
committable6 joined,
unicodable6 joined,
coverable6 joined,
shareable6 joined,
notable6 joined,
tellable6 joined,
squashable6 joined,
nativecallable6 joined,
releasable6 joined,
bisectable6 joined,
benchable6 joined,
PipStuart joined,
andinus joined,
kjp joined,
ProperN[out] joined,
daxim joined,
summerisle joined,
perlmaros joined,
guifa__ joined
07:19
tib is now known as 020AAC0DL,
guifa__ joined,
perlmaros joined,
summerisle joined,
daxim joined,
ProperN[out] joined,
kjp joined,
andinus joined,
PipStuart joined,
benchable6 joined,
bisectable6 joined,
releasable6 joined,
nativecallable6 joined,
squashable6 joined,
tellable6 joined,
notable6 joined,
shareable6 joined,
coverable6 joined,
unicodable6 joined,
committable6 joined,
reportable6 joined,
hexology joined,
slu joined,
zostay joined,
ugexe joined,
corwin joined,
polettix joined,
ilogger2 joined,
jast joined,
tobs joined,
jetchisel joined,
samcv joined,
gabiruh joined,
SmokeMachine joined,
mjgardner joined,
samebchase joined,
human-blip joined,
Scotteh_ joined,
quotable6 joined,
bloatable6 joined,
sourceable6 joined,
statisfiable6 joined,
greppable6 joined,
rypervenche joined,
tailgate joined,
xkr47 joined,
tbrowder_ joined,
nicole joined,
donpdonp|z_ joined,
dutchie joined,
charsbar joined,
timo joined,
tinita joined,
avuserow joined,
simcop2387 joined,
Aedil joined,
dg joined,
Voldenet joined,
elcaro joined,
gfldex joined,
jrjsmrtn joined,
jgaz joined,
kst joined,
xinming joined,
moritz joined,
Util joined,
discord-raku-bot joined,
hellwolf joined,
kawaii joined,
esh joined,
thowe joined,
silug joined,
zups joined,
tonyo joined,
vrurg joined,
nine_ joined,
m_athias joined,
tejr joined,
Sgeo joined,
andydude joined,
jpn joined,
dustinm` left,
jmcgnh left
|
|||
xinming | my %m = ("a" => 1, "b" => 2, "c" => 3); subset X of Str() where * (elem) %m; sub a (X $x) { $x.say }; ("a" .. "c").hyper(:batch(1), :degree(2)).map({ a($_); }); | 07:20 | |
m: my %m = ("a" => 1, "b" => 2, "c" => 3); subset X of Str() where * (elem) %m; sub a (X $x) { $x.say }; ("a" .. "c").hyper(:batch(1), :degree(2)).map({ a($_); }); | |||
camelia | A worker in a parallel iteration (hyper or race) initiated here: in block <unit> at <tmp> line 1 Died at: Type check failed in binding to parameter '$x'; expected X but got Str ("a") in sub a at <tmp> line 1 in block at… |
||
07:20
dustinm` joined
07:21
Altreus joined,
GreaseMonkey joined,
cm joined,
mtj joined,
PotatoGim joined,
perryprog joined,
askmeaboutloom joined,
oodani joined,
DarthGandalf joined,
amenonsen joined,
Sevalecan joined,
mark22k joined,
justache joined
07:24
sivoais left,
Orbstheorem joined
07:25
sivoais joined
07:27
eroux joined
07:31
jpn left,
jmcgnh joined
07:34
squashable6 left
07:35
Ekho joined
07:37
squashable6 joined
08:09
dakkar joined
08:10
sena_kun joined,
andydude left
|
|||
xinming | I think I found where the bug is | 08:14 | |
08:14
Matthew|m joined
|
|||
xinming | m: my %m = ("a" => 1, "b" => 2, "c" => 3); subset X of Str() where { $_ (elem) %m }; sub a (X $x) { $x.say }; ("a" .. "c").hyper(:batch(1), :degree(2)).map({ a($_); }); | 08:14 | |
camelia | a b c |
||
08:15
MitarashiDango[m joined
|
|||
xinming | m: my %m = ("a" => 1, "b" => 2, "c" => 3); subset X of Str() where * (elem) %m; sub a (X $x) { $x.say }; ("a" .. "c").hyper(:batch(1), :degree(2)).map({ a($_); }); | 08:15 | |
camelia | A worker in a parallel iteration (hyper or race) initiated here: in block <unit> at <tmp> line 1 Died at: Type check failed in binding to parameter '$x'; expected X but got Str ("a") in sub a at <tmp> line 1 in block at… |
||
08:15
uzl[m] joined
|
|||
xinming | `where * (elem) %m` will raise error, But `where { $_ (elem) %m }` will work | 08:15 | |
So anyone here could explaiin this please? :-) | 08:16 | ||
I feel this bug is greater than I thought, on my program, It still raises error with `where { $_ (elem) %m }` version, But the test oneliner works | 08:22 | ||
08:22
razetime left
08:25
Sgeo left
09:07
razetime joined
09:14
razetime left
09:26
jpn joined
09:31
jpn left,
jpn joined
|
|||
SmokeMachine | m: my %m = ("a" => 1, "b" => 2, "c" => 3); subset X of Str() where * (elem) %m; sub a (X $x) { $x.say }; ("a" .. "c").map({ a($_); }); | 09:47 | |
camelia | a b c |
||
SmokeMachine | m: my %m = ("a" => 1, "b" => 2, "c" => 3); subset X of Str() where * (elem) %m; sub a (X $x) { $x.say }; for "a" .. "c" { start say a($_) } | 09:49 | |
camelia | ( no output ) | ||
SmokeMachine | m: my %m = ("a" => 1, "b" => 2, "c" => 3); subset X of Str() where * (elem) %m; sub a (X $x) { $x.say }; await do for "a" .. "c" { start say a($_) } | 09:50 | |
camelia | An operation first awaited: in block <unit> at <tmp> line 1 Died with the exception: Type check failed in binding to parameter '$x'; expected X but got Str ("a") in sub a at <tmp> line 1 in code at <tmp> line 1 |
||
09:50
razetime joined
|
|||
SmokeMachine | m: my %m = ("a" => 1, "b" => 2, "c" => 3); subset X of Str() where { $_ (elem) %m }; sub a (X $x) { $x.say }; await do for "a" .. "c" { start say a($_) } | 09:50 | |
camelia | a True b True c True |
||
SmokeMachine | m: my %m = ("a" => 1, "b" => 2, "c" => 3); subset X of Str() where * (elem) %m; sub a (X $x) { $x.say }; await (start({ a(“a”) }), start { a “b” }) | 09:52 | |
camelia | ===SORRY!=== Error while compiling <tmp> Undeclared routine: start used at line 1. Did you mean 'spurt', 'sqrt', 'sort'? |
||
SmokeMachine | 10:52 <SmokeMachine> m: my %m = ("a" => 1, "b" => 2, "c" => 3); subset X of Str() where * (elem) %m; sub a (X $x) { $x.say }; await (start { a(“a”) }, start { a “b” }) | 09:53 | |
m: my %m = ("a" => 1, "b" => 2, "c" => 3); subset X of Str() where * (elem) %m; sub a (X $x) { $x.say }; await (start { a(“a”) }, start { a “b” }) | |||
camelia | An operation first awaited: in block <unit> at <tmp> line 1 Died with the exception: Type check failed in binding to parameter '$x'; expected X but got Str ("a") in sub a at <tmp> line 1 in block at <tmp> line 1 |
||
SmokeMachine | xinming: I agree… that looks like a bug… | 09:54 | |
09:57
guifa__ left
09:58
guifa joined
|
|||
SmokeMachine | m: my %m = ("a" => 1, "b" => 2, "c" => 3); subset X of Str() where { $_ (elem) %m }; sub a (X $x) { $x.say }; await (start { a(“a”) }, start { a “b” }) | 10:02 | |
camelia | a b |
||
xinming | there is a small diff between `where { $_ (elem) %m }` and `where * (elem) %m` | 10:26 | |
without .hyper it works fine, with hyper, we can see the differences. | 10:27 | ||
nemokosch | not even surprised | 10:35 | |
not gonna lie, I have high hopes for RakuAST to eliminate WhateverCode weirdnesses | 10:42 | ||
10:44
NemokoschKiwi joined
|
|||
xinming | nemokosch, When will RakuAst merged then? | 10:49 | |
lizmat | xinming: there's two things here: | 10:50 | |
the RakuAST classes for building ASTs: these are available now when doing either "use experimental :rakuast" or "use v6.e.PREVIEW" | |||
the new Raku grammar that uses RakuAST classes to build AST from code: this can be activated with RAKUDO_RAKUAST=1 | 10:51 | ||
nemokosch | I'm thinking of the RakuAST based grammar, for that matter | 10:52 | |
lizmat | this will be ready when it can a: pass all spectests, and b: can build the setting | 10:54 | |
that's when we can start thinking about releasing a 6.e language level | |||
xinming | lizmat: just tried with `use experimental :rakuast`, that bug is gone. | ||
lizmat: when is it possible to happen according to your guess? | 10:55 | ||
lizmat | *that* shouldn't have made any difference with that bug | ||
10:55
jpn_ joined
|
|||
nemokosch | yeah sounds weird | 10:56 | |
also, I noticed that the RakuAST representation is not what I assumed it to become | |||
I checked on that pick xx 5 situation | 10:57 | ||
and the AST representation downright contained a thunk wrapper on the left handside | |||
xinming | lizmat: Yea, My mistake, I tested on the wrong example. | ||
lizmat | nemokosch some bugs may have been ported :-) | ||
10:58
jpn left
|
|||
nemokosch | hm, I'm not sure | 10:58 | |
my point is that apparently the parsing process examined the operator semantically | |||
and I would have assumed that was not the task of it, quite the contrary | |||
11:00
jpn joined
11:01
jpn_ left
|
|||
I'd have expected (^10).pick + 5 and (^10).pick xx 5 to look the same, except for the one node of the operator on top | 11:01 | ||
lizmat | if the left side there wouldn't get thunked, you would get 5x the same random value | 11:02 | |
so xx does need special grammar handling] | |||
nemokosch | I'm not sure if it needs special grammar handling with RakuAST - and more importantly, thunking doesn't affect the syntax so it would be weird to call something an AST that already investigates the behavior of certain operators | 11:04 | |
anyway, when you evaluate the node of operator xx, you still have access to the expressions constructed as its operands, so why couldn't thunking only happen then? | 11:05 | ||
xinming | lizmat: BTW, is the bug `where * (elem) ..` vs `where { $_ (elem) .. }` easy to fix? | 11:06 | |
lizmat | so I guess you'd be ok with needing to specify | ||
{ (^10).pick } xx 5 | |||
then? | |||
xinming: I have *no* idea | |||
I would have to dive into that part of the grammar, and that is currently not on my shortlist of things to do | 11:07 | ||
I suggest you make an issue for it so that it doesn't fall through the cracks | |||
nemokosch | I think that shouldn't be needed with proper RakuAST evalling at all, quite the opposite | ||
I think by now it should be possible to let users define thunkiness for operators, instead of compiler hacking | |||
if a RakuAST expression is evaluated starting from the root node, there seems to be no problem to decide if a subtree needs to be thunked or not | 11:09 | ||
lizmat | I think by now more people should be involved in making RakuAST work | ||
so: well volunteered :-) | |||
xinming | lizmat: Ok, Will fire a bug so this can be fixed. | 11:10 | |
lizmat | xinming: thanks, and please a nice, short golf :-) | ||
nemokosch | I think it's hard to expect people to work on something that is nowhere explained or written down | 11:11 | |
11:11
jpn left
|
|||
lizmat | nemokosch that goes for all involved | 11:11 | |
nemokosch | and frankly, Jonathan Worthington has responsibility | ||
lizmat | well, technically, the RSC has responsibility nowadays | 11:12 | |
nemokosch | that's why it was so weird when he summarized it as "oh it's so nice that people found my work worthy of continuing" | ||
duh, like that was meant to be "the big thing" | |||
lizmat | that goes for all open source projects | 11:13 | |
nemokosch | I don't think it goes for all open source projects that somebody initiates a monstrous task that is meant to be "the next big thing" | ||
completes it to 20% and then leaves it behind with little to no resource about it | 11:14 | ||
it's not just whether you are personally okay with it; it's just this mindset is overwhelmingly prone to failure | |||
and of course if the one who invented the whole thing won't leave anything technical behind, how could one expect the poor others who just try to figure something out on their own and make it happen "whatever it takes" | 11:15 | ||
this goes for basically all of Rakudo - you need have enough fanatism to compensate for your lack of knowledge, and the less you know, the more fanatism you need | 11:17 | ||
lizmat | github.com/rakudo/rakudo/blob/main.../README.md | 11:18 | |
nemokosch | Yes, I said it aware of this file | 11:24 | |
take one example: what about the gazillion of FULL-UPPERCASE-MAGIC-METHODS? | 11:25 | ||
the architecture is strongly based on this assumption that you are going to inherit/mix in stuff that provides a service, and some services inherit even from each other | 11:27 | ||
jast | I don't see how this could be done better in the early phases of something highly speculative | 11:28 | |
nemokosch | outlining the speculations would also help | ||
jast | you can't start making something without assumptions and you usually for some time won't know which assumptions are the right ones | ||
nemokosch | anyway, if you are a design architect, this is not the kind of documentations you should provide for the people who will do the work | 11:29 | |
if you only compare it to vrurg's presentations on Rakudo, you can already see the layers of difference | |||
jast | I mean... you don't really know ahead of time how a project like this will develop, right? | ||
I mean... you don't really know ahead of time how a project like this will develop, right? | 11:30 | ||
nemokosch | by the way, it's really said there was no continuation of that | ||
jast | I'm not saying that this was done optimally, but I understand how it came to be this way | ||
nemokosch | I do think it's a problem that we have a bunch of friends, or comrades at least, who will just stand for each other, whether some serious mistake has been made objectively, or not | 11:31 | |
nobody dares to say that the way RakuAST was left behind for the rest was unmanageable | |||
and therefore there is no urge to improve on the situation, the mistakes are simply denied | 11:32 | ||
jast | I don't know jnthn at all | ||
nemokosch | if you are not fanatic enough, you are out, basically | ||
or you are useless at least | |||
jast | well I think we exchanged about two lines in IRC once | 11:33 | |
mainly I just don't see how blaming someone will change anything | 11:34 | ||
nemokosch | It's rather the other way around imo | ||
if you can't even agree that some action, or lack of action, is harmful for the project, how can you be dedicated to do it right? | 11:35 | ||
jast | "harmful" is a big word | ||
nemokosch | not too big in this case, I don't thinkso | ||
and here in this situation, the problem is pretty much that nobody is willing to claim to know RakuAST enough to teach others | |||
teach as in, post some documents about the architecture or make a couple of hours presentation | 11:36 | ||
jast | clearly this project didn't turn out so well if it's been in "early design phase" for over a year | 11:38 | |
but the time we're spending in this discussion you could have spent digging into it instead if it matters this much to you :) | |||
nemokosch | Yeah this is a common one | 11:39 | |
jast | well, you seem to be saying jnthn has an obligation to put in his spare time... and you don't | ||
nemokosch | the sad truth is, I still have higher hopes that one day the project gets better managed, than that I will single-handedly solve the RakuAST issue | ||
well, if a so called "language in production" depended on solely my judgement, I would probably be more careful | 11:40 | ||
especially if this situation emerged mostly my lack of knowledge-sharing | |||
because of* | |||
jast | well, nobody is perfect | 11:41 | |
nemokosch | and really, I'm not saying that jnthn should keep doing XYZ stuff | 11:42 | |
I'm saying that if you leave a project for a larger amount of time that depends so much on your knowledge, at least do take the effort to share it so someone else can pick up | |||
that's a one-time effort | |||
and this is something people would expect from you, and you would expect from others, for any non-toy project | 11:43 | ||
jast | I don't really know his circumstances, but it's quite possible that things simply happened in such a way that that didn't work out so well | ||
lizmat feels like this discussion has been had many times already and will now recuse herself | 11:44 | ||
jast | but we could turn this around just as well: nobody else stepped up to get involved just as deeply | ||
nemokosch | also, I don't know how it is for you but now that we are at it, I did bother to fix a couple of Rakudo bugs, to trace others' problems back in the core, to explain how things work, I did watch the Rakudo-related presentations in the last couple of years, and so on | 11:46 | |
jast | I'd like to think I could do a great job of documenting things if I had been in a similar position, but I can't be certain really | ||
nemokosch | so fair enough, I'm not up there with lizmat and the likes but I do think I did more than an average potential contributor would | 11:47 | |
jast | which is great but entirely irrelevant to this topic | ||
nemokosch | not if you are framing it as "duh you are just lazy to do it yourself" | 11:48 | |
jast | that's not what I'm saying | ||
nemokosch | then I really see no point in beating the dead horse with this "if this matters so much for you..." sentiment | ||
and this seems to be the big difference between what I think would be healthy and what the very few knowledgeable and influential people are doing in this community | 11:50 | ||
jast | I'm saying that well, jnthn didn't do everything, and nobody else filled the gap (to your satisfaction). you seem to be putting the responsibility entirely on him. I see it as the collective responsibility of everyone who cares about the project. if nobody cares "enough", that still doesn't make it their fault... it just means the project has an issue that is not exclusively one person, but the sum of what ever | 11:51 | |
yone is doing | |||
(or not doing) | |||
I'm not blaming you, either. I'm blaming no single person. | |||
nor a specific group of people | |||
nemokosch | they seem to think that it all boils down to fanatism. If you have enough fanatism, you can lift mountains. But what if you can't have enough fanatism to start working without a direction, without any knowledge or substantial help? | 11:52 | |
well, then you will stay an outsider, and the few fanatics will always just say "cheer up and get to work" | 11:53 | ||
11:54
jpn joined
|
|||
jast | so, the community is lacking someone who can do extensive mentoring. which is a shame, but whose fault is that? no one's if you ask me | 11:55 | |
nemokosch | I do think that in the particular situation with RakuAST (and probably the lack of contributors to MoarVM for example), predominantly Jonathan Worthington is at fault (which is a big taboo in itself) - however, that is not the "systemic" problem | 11:57 | |
the real problem is this need to always put the blame on the people for not contributing enough, and never thinking about providing better circumstances for the contributors | 11:58 | ||
jast | creating those circumstances is a lot of work | 11:59 | |
12:00
reportable6 left
|
|||
jast | nobody is putting in the work to dive in by themselves, understandable | 12:00 | |
well, "nobody" is a bit strong a word maybe, simply used for illustration purposes | |||
nemokosch | then it is just as understandable for people to not rush to work on an underdocumented, obscure system | ||
jast | OTOH nobody is putting in the work to make it substantially easier to become a strong contributor | 12:01 | |
both are understandable IMO | |||
which is also why I'm not blaming *anyone* | |||
12:01
reportable6 joined,
jpn left
|
|||
jast | it's possible that some existing contributors feel like the barrier to entry is much smaller than it is. I wouldn't know, I haven't been very involved in this topic (or anything really) | 12:02 | |
if that's the case and you're criticizing that, fine by me. I just wouldn't go as far as blaming people for not putting the type of effort that you wanted them to put in, if that makes sense | 12:04 | ||
nemokosch | For what it's worth, I think the entry point for the core library is not particularly high, and that's why I start to show CoreHackers::Sourcery around, or the usefulness ot the --target flag. I don't know how much it helps in and of itself | 12:05 | |
Anyway, I don't think I will ever empathize with this... well, downplaying that you also seem to present here. Like no, if you have a sufficiently large and important project, it's common sense to leave it in a state that willing others can continue. It's not something "I want XY to put in" | 12:07 | ||
jast | well, I have no idea why jnthn stopped being so active. maybe other things got in the way unexpectedly. | 12:11 | |
nemokosch | And I have this bitter feeling that if one drew a metaphor or just hid the name, suddenly everybody would agree that it's common sense... | 12:12 | |
jast | I can empathize | ||
12:12
jpn joined
|
|||
nemokosch | and like this is the thing. In an ideal world, a lot of situations would never arise. However, when they do arise in reality, there needs to be some sort of relation or response to it. The "blaming" is not the important part - and frankly, it wouldn't be necessary in the first place if somebody just acknowledged the mistake or provided an explanation, instead of this weird "oh I'm so happy they picked up on my | 12:19 | |
little nuance I made in my freetime" lol | |||
The important part would be to simply conclude that "if we don't provide some introduction or assistance to potential contributors, they will never be of help" | |||
and this is an actionable thought | 12:20 | ||
lizmat | nemokosch how about this for an actionable thought: | 12:25 | |
RAKUDO_RAKUAST=1 raku t/spec/S02-names/is_default.rakudo.moar | |||
has 1 failing test. | |||
How about you try to figure out why that is failing, and I'll be around to answer any questions you might have | 12:26 | ||
nemokosch | as you wish | 12:30 | |
12:30
NemokoschKiwi left
|
|||
xinming | m: (1..3).map({ last if $_ > 2; .raku.say; }) | 12:36 | |
camelia | 1 2 |
||
xinming | I'm a bit confused, is that internally, .map is treated as a for loop internally? | 12:37 | |
lizmat | xinming: no, it's actually the other way around. | ||
a for is internally a .map that does a .sink-all on the iterator | 12:38 | ||
xinming | when I try to convert for into .hyper.map, I forgot to comment the last statement, and suprisingly, It works. | ||
lizmat: thanks, got it. | |||
lizmat | now, the semantics "next" and "last" and "redo" within a hyper are really undefined at the moment | 12:39 | |
*of | |||
xinming | I think we need to implement "leave" statement. | ||
jast | what would that do? | 12:40 | |
lizmat | it's like return for blocks | ||
thought has gone into that | |||
but the workaround atm is so simple that it was deemed not necessary to implement "leave" | |||
nemokosch | what is the workaround? | 12:41 | |
lizmat | instead of a block, use a nameless sub | ||
xinming | nameless sub will add another indention to the code. | ||
lizmat | so "sub { }" instead of { } | ||
xinming | lizmat: Is there performance difference between block and sub? | 12:42 | |
lizmat | xinming: that's only if you have an IDE maybe, that's not a parser requirement ? | ||
nemokosch | so I guess make spectest will create the spec folder | 12:43 | |
lizmat | nemokosch indeed | ||
m: my $a = sub { Nil }; $a() for ^1000000; say now - INIT now | 12:44 | ||
camelia | 0.01582713 | ||
lizmat | m: my $a = { Nil }; $a() for ^1000000; say now - INIT now | ||
camelia | 0.015122427 | ||
lizmat | I'd say: marginally so | ||
xinming ^^ | |||
not something I think you'd need to worry about | |||
xinming: also, part of the overhead is setting up a return point for the "return" statement | 12:45 | ||
xinming | lizmat: Yea, That's why I think why do we have block then. :-) | ||
lizmat | if we would implement "leave", this would need to be done for each block | ||
xinming | So, probably in the future, leave statement will be removed I guess | 12:46 | |
lizmat | well, the design documents are frozen, so "leave" will continue to be mentioned in there | ||
nemokosch | okay, perhaps I don't want to wait for all tests to complete :DD | 12:47 | |
lizmat | but at some point I guess we will remove the TODOd tests from roast | ||
nemokosch | anyway, it claims that there was 1 failing test but even without counting subtests I see like 5 | 12:49 | |
lizmat | maybe some of them are TODOd ? | 12:50 | |
nemokosch | true but why do comments matter for this? | ||
lizmat | ? | 12:52 | |
in any case: in that test, the failing subtests all have the same error: lang-call cannot invoke object of type 'VMNull' belonging to no language | 12:53 | ||
which points to something being Mu when it shouldn't | |||
12:53
eroux left
13:10
eroux joined
|
|||
nemokosch | is there anything wrt variable declarations with the of trait that works? | 13:14 | |
lizmat | I'm not sure, you'd have to try | 13:20 | |
you know of the .AST method on strings, right? | |||
nemokosch | not really but I know --target=ast | 13:24 | |
however, for something as mundane as my $foo of Int, even --target=parse explodes (which is weird, like why would parse care about the underlying semantic problem) | |||
lizmat | m: say Q|my $foo of Int|.AST | 13:25 | |
camelia | ===SORRY!=== lang-call cannot invoke object of type 'VMNull' belonging to no language |
||
lizmat | ok, so it goes wrong there already | ||
m: say Q|my Int $foo|.AST | |||
camelia | RakuAST::StatementList.new( RakuAST::Statement::Expression.new( expression => RakuAST::VarDeclaration::Simple.new( type => RakuAST::Type::Simple.new( RakuAST::Name.from-identifier("Int") ), sigil … |
||
lizmat | so, the other syntax already appears to work | 13:26 | |
m: say Q|my Int $foo; $foo = "bar"|.AST.EVAL | |||
camelia | Type check failed in assignment to $foo; expected Int but got Str ("bar") in block <unit> at <tmp> line 1 |
||
lizmat | so you'd need to find the "of" handling of variable definition in the grammar, and hook that up correctly | 13:27 | |
in the associated action | |||
nemokosch | the thing is, variable-declarator describes a declaration like that, and that already accounts for traits, and of already has the same rule as in the old grammar | 13:29 | |
github.com/rakudo/rakudo/blob/52f4....nqp#L1860 then there is this part but I have no clue what $decl actually contains | 13:30 | ||
well, probably the type attribute is not set on the trait, that's what the error message implies | 13:34 | ||
13:41
xinming left
|
|||
lizmat | he... it looks like some debugging code is causing the error | 13:42 | |
nqp::gethllsym('nqp', 'note')($_.type.dump); | |||
13:43
xinming joined
|
|||
lizmat | and the test in question now passes! | 13:43 | |
nemokosch | okkay but... | 13:44 | |
how was the debugging code wrong? xD | |||
lizmat | I'd say that the nqp::gethllsym('nqp', 'note') yielded VMNull | 13:45 | |
nemokosch | oof | 13:46 | |
anyway, why wasn't it just nqp::note? | |||
lizmat | yeah, no idea why that was written that way | 13:48 | |
anyways, +3 spectest files, so I'd call that a win :-) | |||
nemokosch so I'd run the spectest again, and select a file that has only 1 or just a few failing tests | 13:50 | ||
and look at that then | |||
nemokosch | I know that but truth be told, I also have preferences, it's much more interesting to fix something that is an improvement over the current grammar than to just catch up to it. This is why I wanted to fix the &-sigil declaration | 13:52 | |
Now I see that it works the same way as the old grammar but I have no idea what the modification was | |||
and the way it works in the old grammar is still kind of wrong, it doesn't account for typing with the default value | 13:53 | ||
so my Int &foo will have the value (Callable), even though it could (and should) be (Callable[Int]) | |||
lizmat | well... the legacy grammar is a source of inspiration in almost all cases | 13:54 | |
so some bugs *will* have been ported that way as well | 13:55 | ||
now, if you can fix the Int &foo case in RakuAST, that would be a good thing | |||
so if you feel you'd want to sink your teeth in that, by all means! | |||
13:56
razetime left
|
|||
nemokosch | oh, my mistake, & declarations still don't work well | 13:56 | |
well, then I guess I can't ask how you nailed the resolution of Callable | 13:57 | ||
or this other thing. I know it's not measurable progress but I think it's a pretty essential question whether RakuAST incorporates semantic elements or not, back to thunkiness | 13:59 | ||
thunkiness is not visible syntax and it would be good to make it transparent so that users can define things like that on their own; after all, that's almost literally a kind of macro | 14:00 | ||
lizmat | well, e.g. "a","b" is handled as a an infix in the grammar | ||
well, thinking on that, the problem is that we don't have syntax for indicating that an argument should be evaluated *before* other arguments | 14:02 | ||
that's why we don't have an "infix:<||>" or "infix:<??>" with the correct short-cicuiting syntax | |||
I wonder if we could introduce a trait "is shortcut" | 14:03 | ||
nemokosch | yes, that's true. But then it could be that I don't know what RakuAST is meant to serve as. I thought it was meant to be an AST, both in the sense that it's only based on parsing syntax, and in the sense that it will be used for generating the actual bytecode | ||
given such an AST, I would think that the nodes are traversed (at least hit) from root to leaves and when you visit a root node, you could investigate how the subtrees need to be handled | 14:04 | ||
and therefore it wouldn't be late to thunkify one subtree | |||
lizmat | sub infix:<&&>($a is shortcut({ return False unless $a }), $b) { $b } | 14:05 | |
sub infix:<&&>($a is shortcut({ return $a unless $a }), $b) { $b } | 14:06 | ||
*shortcircuit | |||
nemokosch | this is also a part of the complexity. There are several compiler phases that do several steps, it's not the kind of topic you just read a couple of pages about - and there is quite little substance on it anyway | 14:07 | |
lizmat | well, in a lot of ways we're bleeding edge in compiler development, using a grammar to create a compiler to run the grammar to compile code | 14:09 | |
nemokosch | or another thing with a high-level AST. Once you have such a thing and start to investigate the semantics of the nodes, you can do immense amounts of optimization, relatively easily. A lot of dead-code removal possibilities there. However, if you always do that at runtime, it will hit back heavily, so it would be good to move more towards the compiled nature, and have some more stable ABI for precompiled stuff | 14:10 | |
lizmat | "the semantics of the nodes, you can do immense amounts of optimization, relatively easily" that was one of the reasons for RakuAST in the first place | ||
it's the intent that static optimization will happen at CHECK time, or in a dedicated phaser | 14:11 | ||
constant folding should be done with the .literalize method | 14:12 | ||
*could | |||
nemokosch | I imagine it as something similar to the gcc -O flag. Some optimizations might take some time to catch, like you need to traverse the tree deep, multiple times. If the only/predominant use-case is that "CHECK time" happens "when I want to run the program", that may not be worth it. However, if you can do it once and then run the optimized program as many times as you wish, that's a much better investment | 14:16 | |
lizmat | that's why we haz precompilation :-) | 14:17 | |
nemokosch | well, better than nothing at all but a lot of things need to click for it to work as things stand. It's not really persistent or portable, doesn't work for standalone scripts, doesn't work with use lib ... | 14:19 | |
it's not really what I would think of when I hear about this option, and maybe I'm not alone with that... | 14:20 | ||
the common theme is that these ambitious and motivating goals require a lot of planning and collaboration is inevitable because it won't just affect a couple of people | 14:22 | ||
anyways, let's be less vague; I'm going to look up this operator thunkiness situation | 14:24 | ||
lizmat | please :-) | ||
nemokosch | so that I can at least ask a technical question about it :DD | ||
lizmat | :-) | 14:29 | |
14:39
jpn left
14:47
jpn joined
14:54
razetime joined
15:26
Sgeo joined
|
|||
nemokosch | damn, there are just so many IMPL-THIS-AND-THAT methods... | 15:37 | |
anyway, the infix does something similar to what I'm thinking of, except not with the output bytecode but with the RakuAST structure... | 15:38 | ||
by the way, what's the apparent infix with and without operator? | 15:40 | ||
cue github.com/rakudo/rakudo/blob/66d5...kumod#L202 | |||
lizmat | feels more like condition-modifier handling ? | 15:47 | |
nemokosch | can be but what is it doing among infix operators? | 15:48 | |
lizmat | I haz no idea | ||
nemokosch | nine did this bit | 15:51 | |
lizmat | that doesn't necessarily mean much if the legacy grammar / actions did the same | ||
nemokosch | "with and without will probably need special handling, along with metaoperators" | ||
what does PERFORM-BEGIN produce? | 15:52 | ||
lizmat | an object that does the RakuAST::BeginTime role needs to supply a PERFORM-BEGIN method | 16:00 | |
16:00
jpn left
|
|||
nemokosch | well, this is an example for what I miss... For the RakuAST grammar, PERFORM-BEGIN seems to be a very important method. I must assume it still produces some RakuAST structure but it would really make a difference to have some documentation that you can at least grep | 16:00 | |
lizmat | it doesn't produce anything | ||
it needs to do whatever is necessary for that object at BEGIN time | 16:01 | ||
basically, if a class does RakuAST::BeginTime | |||
it means that it needs to do something at BEGIN time | |||
all of the PERFORM-xxx methods are basically callbacks being called at some point during compilation | 16:02 | ||
e.g. PERFORM-CHECK methods are being called during the CHECK phaser phase | |||
*at CHECK time | |||
nemokosch | well, then this thunking of expressions within an infix operator happens at BEGIN time, in such a callback | 16:09 | |
that's quite a heavyweight unstructured intervention | |||
lizmat | anything that needs special grammar handling, is probably pretty unstructured | 16:11 | |
and ad-hoc | |||
because there is currently no way to indicate thunkiness in args | |||
nemokosch | what is the phase when the RakuAST structure is ready and QAST emission may start? | ||
lizmat | after the CHECK phase | 16:12 | |
when method RakuAST::CompUnit.IMPL-TO-QAST-COMP-UNIT is called | 16:14 | ||
I think :-) | |||
nemokosch | so yeah... if it was up to me, I would rather push that whole IMPL-THUNK-XXX macroverse into the corresponding IMPL-QAST-XXX method | 16:16 | |
lizmat | nine | 16:17 | |
sadly nine is on holiday atm... he'd probably lecture us about the timing of actions :-) | 16:18 | ||
nemokosch | there is also IMPL-CHECK | ||
PERFORM-BEGIN on one node can fire off IMPL-CHECK on another | |||
I mean, apparently | |||
lizmat | I think the IMPL-CHECK method is the actual CHECK phaser handling ? | 16:20 | |
that's the whole thing about phasers: | |||
m: INIT { say "running"; CHECK { BEGIN say "compiling"; say "checking" } | 16:21 | ||
camelia | compiling ===SORRY!=== Error while compiling <tmp> Missing block at <tmp>:1 ------> BEGIN say "compiling"; say "checking" }⏏<EOL> expecting any of: postfix statement end |
||
lizmat | m: INIT { say "running"; CHECK { BEGIN say "compiling"; say "checking" } } | ||
camelia | compiling checking running |
||
lizmat | m: INIT { say "running"; CHECK { BEGIN { say "compiling"; END say "the end" } say "checking" } } | 16:22 | |
camelia | compiling ===SORRY!=== Error while compiling <tmp> Strange text after block (missing semicolon or comma?) at <tmp>:1 ------> N { say "compiling"; END say "the end" }⏏ say "checking" } } expecting any of: infix … |
||
lizmat | m: INIT { say "running"; CHECK { BEGIN { say "compiling"; END say "the end" }; say "checking" } } | ||
camelia | compiling checking running the end |
||
lizmat | note the END phaser inside the BEGIN phaser ? | ||
anyways, it feels this is getting rather too technical for #raku, maybe move this to #raku-dev ? | 16:23 | ||
nemokosch | sure | 16:24 | |
[Coke] | can someone construct a bisectable to get github.com/jonathanstowe/META6/issues/30 ? | 16:33 | |
lizmat | I thought we already had a bisect on that | 16:34 | |
? | |||
[Coke] | wasnt that the unmarshal bug? | ||
there was no ticket on META6 repo until I just opened one yesterday, failure I got after the unmarshal fix was merged. | |||
lizmat | vrurg ? | 16:35 | |
[Coke] | (I'm trying to stay on bleed, building with rakudobrew, this was the latest failure when trying to install my repo's deps) | ||
m: my $v = Version.new("6.*"); say Version.new($v.parts.join(".")).Str | 16:36 | ||
camelia | 6.e.PREVIEW | ||
[Coke] | Apparently that used to return just 6.* | ||
lizmat | he,,, well, that would have been incorrect | 16:37 | |
[Coke] | m: my $v = Version.new("6.c"); say Version.new($v.parts.join(".")).Str | ||
camelia | 6.c | ||
lizmat | confirmed it isn't installable | ||
[Coke] | so if that's a bug in META6, need a new release on that before the next rakudo release, at least (sooner the better) | 16:38 | |
lizmat | my understanding was that some module would need an update, | ||
not sure which one, only that Jonathan Stowe would do it ? | |||
16:41
tea3po joined
|
|||
[Coke] | Again, I thought that was relating to the previous bug, and he seemed surprised by this report. | 16:42 | |
16:45
teatwo left
|
|||
lizmat | it wasn't 73d07b4b58c804d1bbd161b | 16:48 | |
hmmm... maybe 4f07e0e1a9280595c9a7 | 16:49 | ||
16:50
linkable6_ left
16:53
linkable6 joined
|
|||
lizmat | [Coke]: testing a fix now | 16:53 | |
[Coke]: github.com/rakudo/rakudo/commit/8e394fad08 | 17:01 | ||
dinner& | |||
17:03
dakkar left
17:08
rf joined,
razetime left
17:15
eroux left
|
|||
[Coke] | lizmat: that did it, thanks! | 17:21 | |
unfortunately, I now have github.com/jonathanstowe/Test-META/issues/43 | 17:25 | ||
17:26
jpn joined
17:31
hellwolf left
17:36
jpn left
17:37
jpn joined
17:43
jpn left
17:45
elcaro left,
elcaro joined
|
|||
lizmat | meh, the name of the failing test does not spell well | 17:53 | |
17:59
dutchie_ joined,
dutchie left
18:00
reportable6 left
18:01
bigdata joined
18:02
reportable6 joined
18:20
dutchie_ is now known as dutchie
18:27
rf left
|
|||
SmokeMachine | Having a way to implemente alternatives to && and || would be great!!! :) | 18:43 | |
18:49
jpn joined
18:54
jpn left
|
|||
antononcube | @SmokeMachine Do you have any alternatives (I assume tokens) in mind? | 20:03 | |
20:27
jpn joined,
jjido joined
21:02
rf joined
21:24
bigdata left
21:26
sena_kun left
21:52
swaggboi left
21:53
jpn left
22:18
jjido left
22:34
jjido joined
23:08
jjido left
23:36
swaggboi joined
|