🦋 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.
Nemokosch I wish it ran that fast, haha 00:22
didn't know this TEST_JOBS env though 00:23
can I get a commit bit to rakudo?
Geth rakudo: 2colours++ created pull request #5169:
Fix for storing parameterised hashes as items
00:56
Nemokosch bisectable6: say Dateish ~~ Cool 08:22
bisectable6 Nemokosch, Will bisect the whole range automagically because no endpoints were provided, hang tight
Nemokosch, ¦6c (66 commits): «True␤» 08:23
Nemokosch, Nothing to bisect!
Nemokosch why are (apparently) all roles Cool? xD 08:24
Nemokosch let's do one more 08:28
Nemokosch bisectable6: say PositionalBindFailover ~~ Cool 08:28
bisectable6 Nemokosch, Will bisect the whole range automagically because no endpoints were provided, hang tight
Nemokosch, ¦6c (66 commits): «True␤»
Nemokosch, Nothing to bisect!
nine Bootstrap says: Perl6::Metamodel::ParametricRoleHOW.pretend_to_be([Cool, Any, Mu]); 08:30
Nemokosch hm, you are right. Do you know what purpose that serves? Why do all roles need to pretend to be Cool for type checking? 08:34
nine The commit message that introduced this says "Roles should be narrower than Cool/Any/Mu." and it fixed "multis don't distinguish Positional" 08:37
Nemokosch gotcha github.com/rakudo/rakudo/commit/00...070b30077f 08:42
but this doesn't give a lot of insights about Cool in particular
lizmat nine: looking at the implementation of PRE / POST phasers, and they get a lot of QAST inserted into their bodies 10:42
so rather than inserting the qast with all its complications, I'm considering adapting the RakuAST blorst instead 10:43
which would make it much more high level, and potentially more flexible
opinions ?
specifically translating World line 4460 and following 10:47
lizmat nine: Cannot find method 'apply-sink' on object of type NQPMu does that ring a bell ? 12:29
nine not in general 12:31
lizmat too bad :-) 12:33
lizmat nine: do you see something inherently wrong in gist.github.com/lizmat/136cee1a104...f528ac95c6 ? 12:36
it basically turns the blorst into X::Phaser::PrePost.new(:phaser<PRE>, :condition($blorst.DEPARSE)).throw 12:37
X::Phaser::PrePost.new(:phaser<PRE>, :condition($blorst.DEPARSE)).throw unless $blorst 12:38
Geth nqp/main: d7e8161577 | (Christian Bartolomäus)++ (committed using GitHub Web editor) | src/vm/jvm/QAST/Compiler.nqp
[JVM] Add some constants DISP_* (#794)

At least DISP_ONLYSTAR is referenced by Rakudo, so it makes sense to define them similarly to src/vm/moar/QAST/QASTOperationsMAST.nqp.
12:44
nine lizmat: well I don't understand what PRE and POST phasers are even supposed to do. 12:49
lizmat m: { PRE say "foo" }()'
camelia ===SORRY!=== Error while compiling <tmp>
Two terms in a row
at <tmp>:1
------> { PRE say "foo" }()⏏'
expecting any of:
infix
infix stopper
statement end
statement modifier
st…
lizmat m: { PRE say "foo" }()
camelia foo
lizmat m: { PRE !say "foo" }()
camelia foo
Precondition '!say "foo"' failed
in block at <tmp> line 1
in block <unit> at <tmp> line 1
lizmat PRE phaser is supposed to throw if it returns something falsy 12:50
it is called before any other block phaser in a block
rather than messing with QAST, I thought RakuAST would provide a more HLLy approach 12:51
nine Looks ok then 12:52
lizmat could it be that the NQPMu is caused by something not being serialized ?
aahhh... ok, looks like a missing "postfix" 12:54
nine nine's debug lemma #1: the bug is _always_ in your own code. 12:56
lizmat Oh, I had no doubt about that :-)
Nemokosch Especially when your own code is a runtime 13:04
lizmat :-)
lizmat some progress, another weird error now: 14:21
No such method 'IMPL-WRAP-QAST' for invocant of type
'RakuAST::Statement::Expression'
nine: ring a bell ?
nine You have an expression somewhere where there should be a statement modifier 14:22
lizmat aaahhh ok 14:26
lizmat meh... looks like NQPMu is truthy in Raku land :-( 14:47
nine Always better to be explicit 14:57
Nemokosch As a type object? 15:01
lizmat ok, got the PRE phaser passing now, if the condition is true 15:32
if it is false, then it show a specific error, not: No exception handler located for catch
so I guess there's still something going wrong when throwing the exception 15:33
vrurg Is "no exception handler" specced??? 15:38
lizmat ir's one of those "this shouldn't happen" things 15:41
vrurg That's what I mean. Hopefully, it not a part of the specs. :)
lizmat it's not 15:44
nine waaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaah 17:02
lizmat my feelings entirely 17:04
is something a lot simpler all of a sudden? or a lot more difficult ? 17:05
please don't keep us in suspense! :-) 17:06
nine It seems to never end... Trying to get whatever currying fully implemented. 17:07
lizmat aah... yeah, that: another piece of magic :-(
nine I got it down to generating perfectly working code. Except...that the meta object is wrong. It gets created too early, so it thinks the WhateverCode would have only one parameter.
lizmat so I guess the parameter info needs to be cached first :-( 17:11
nine Problem is that there is no way to know when exactly it would be ok to run IMPL-CHECK on the thunk (thereby creating the meta object), because a node only knows its descendants. But a parent may also be an ApplyInfix and steal our curry.
lizmat and you don't know the parent anyway, right ? 17:12
nine I don't
lizmat in better news: I got the PRE phaser working :-) 17:13
nine lizmat++ 17:16
Geth rakudo/main: bc7189cc82 | (Elizabeth Mattijsen)++ | 6 files
Add complete support for PRE phasers

  - Grammar / Actions added
  - RakuAST::StatementPrefix::Phaser::Pre classes added
  - Deparsing added
  - Tests added
This one turned out to be a bit more difficult, but in the end simpler because the QAST-twiddling in World from before, has been replaced by generating code using RakuAST classes. Only tricky bit was to hide this extra code from deparsing, to allow roundtripping.
17:36
lizmat onto POST!
Geth rakudo/main: 73839db27f | (Stefan Seifert)++ | 2 files
RakuAST: fix "lexical already declared" when placeholder is used multiple times
18:00
rakudo/main: 28cb8cc2d0 | (Stefan Seifert)++ | 3 files
RakuAST: fully implement whatever currying of infixes

With this * * * + * * * results in a callable taking 4 args and returning the sum of two products.
The difficulty here is that each tree node only knows its children but not its parent. Thus a node cannot know whether there is a parent infix ... (6 more lines)
nine 109 and 641!
NemokoschKiwi do `is` calls all count as tests with regards to the argument of `plan`? 23:50
i.e if I write a block in roast with two is'es, does that increment that number by two? 23:51