releasable6 Next release in ≈6 days and ≈15 hours. 1 blocker. Please log your changes in the ChangeLog: github.com/rakudo/rakudo/wiki/ChangeLog-Draft 03:00
Xliff m: class A { submethod BUILD (:$o) { say "A O: $o" }; }; class B isA { submethod BUILD { say "B" }; }; class C is B { submethod BUILD (:$o) { say "C O: $o"; }; C.new(o => 42) 10:55
camelia 5===SORRY!5=== Error while compiling <tmp>
Unable to parse class definition
at <tmp>:1
------> 3D (:$o) { say "A O: $o" }; }; class B is7⏏5A { submethod BUILD { say "B" }; }; clas
expecting any of:
whitespace
tellable6 2021-01-15T10:38:51Z #moarvm <jnthn> Xliff I assume you're talking about Cro::WebApp? In which case a) no, b) there's a #cro that's good for such questions :)
Xliff m: class A { submethod BUILD (:$o) { say "A O: $o" }; }; class B is A { submethod BUILD { say "B" }; }; class C is B { submethod BUILD (:$o) { say "C O: $o"; }; C.new(o => 42) 10:56
camelia 5===SORRY!5=== Error while compiling <tmp>
Missing block
at <tmp>:1
------> 3(:$o) { say "C O: $o"; }; C.new(o => 42)7⏏5<EOL>
expecting any of:
statement end
statement modifier
statement modifier loo…
Xliff m: class A { submethod BUILD (:$o) { say "A O: $o" }; }; class B is A { submethod BUILD { say "B" }; }; class C is B { submethod BUILD (:$o) { say "C O: $o"; }; }; C.new(o => 42)
camelia A O: 42
B
C O: 42
Xliff m: role A { submethod BUILD (:$o) { say "A O: $o" }; }; class B does A { submethod BUILD { say "B" }; }; class C is B { submethod BUILD (:$o) { say "C O: $o"; }; }; C.new(o => 42) 10:57
camelia B
C O: 42
Xliff m: role A { submethod BUILD (:$o) { say "A O: $o" }; }; class B does A { submethod BUILD (:$o) { say "B O: $o" }; }; class C is B { submethod BUILD { say }; }; C.new(o => 42)
camelia 5===SORRY!5=== Error while compiling <tmp>
Unsupported use of bare "say". In Raku please use: .say if you meant
to call it as a method on $_, or use an explicit invocant or argument,
or use &say to refer to the function as a noun.
at <tmp…
Xliff m: role A { submethod BUILD (:$o) { say "A O: $o" }; }; class B does A { submethod BUILD (:$o) { say "B O: $o" }; }; class C is B { submethod BUILD {}; }; C.new(o => 42) 10:58
camelia B O: 42
Xliff .tell jnthn a) Thanks and b) I know, I've joined it and is sending that .tell from #moarvm really a good way to get that message across? :) 11:03
tellable6 Xliff, I'll pass your message to jnthn
lizmat Files=1346, Tests=117149, 226 wallclock secs (30.46 usr 8.95 sys + 3160.49 cusr 306.56 csys = 3506.46 CPU) 11:06
Xliff m: role A { submethod BUILD (:$o) { say "A O: $o" }; multi method new ($o, :$o is required) { self.bless( :$o ); }; }; class B does A { submethod BUILD (:$o) { say "B O: $o" }; }; class C is B { submethod BUILD {}; }; C.new(o => 42); C.new(42, :o) 11:07
camelia 5===SORRY!5=== Error while compiling <tmp>
Redeclaration of symbol '$o'.
at <tmp>:1
------> 3y "A O: $o" }; multi method new ($o, :$o7⏏5 is required) { self.bless( :$o ); }; };
expecting any of:
shape declaration
Xliff m: role A { submethod BUILD (:$o) { say "A O: $o" }; multi method new ($o, :$o) is required) { self.bless( :$o ); }; }; class B does A { submethod BUILD (:$o) { say "B O: $o" }; }; class C is B { submethod BUILD {}; }; C.new(o => 42); C.new(42, :o)
camelia 5===SORRY!5=== Error while compiling <tmp>
Redeclaration of symbol '$o'.
at <tmp>:1
------> 3y "A O: $o" }; multi method new ($o, :$o7⏏5) is required) { self.bless( :$o ); }; }
expecting any of:
shape declaration
Xliff m: role A { submethod BUILD (:$o) { say "A O: $o" }; multi method new ($o, :$obj) is required) { self.bless( o => $obj ); }; }; class B does A { submethod BUILD (:$o) { say "B O: $o" }; }; class C is B { submethod BUILD {}; }; C.new(o => 42); C.new(42, :obj) 11:08
camelia 5===SORRY!5=== Error while compiling <tmp>
Missing block
at <tmp>:1
------> 3multi method new ($o, :$obj) is required7⏏5) { self.bless( o => $obj ); }; }; class
Xliff m: role A { submethod BUILD (:$o) { say "A O: $o" }; multi method new ($o, :$obj is required) { self.bless( o => $obj ); }; }; class B does A { submethod BUILD (:$o) { say "B O: $o" }; }; class C is B { submethod BUILD {}; }; C.new(o => 42); C.new(42, :obj)
camelia B O: 42
B O: True
Xliff m: role A { submethod BUILD (:$o) { say "A O: $o" }; multi method new ($o, :$obj is required) { self.bless( :$o ); }; }; class B does A { submethod BUILD (:$o) { say "B O: $o" }; }; class C is B { submethod BUILD {}; }; C.new(o => 42); C.new(42, :obj) 11:09
camelia B O: 42
B O: 42
Xliff OK, so what am I missing. This doesn't work in the original code! 11:10
Geth rakudo/faster-ASSIGN-POS: 779379de44 | (Elizabeth Mattijsen)++ | src/core.c/Array.pm6
Make Array.ASSIGN-POS about 15% faster

By reducing the actual fast path to a single nqp::assign, and reworking the tests into ternaries. Also returns the actual container now rather than a deconted value (just like Hash::ASSIGN-KEY does).
Eliminates the FAST-PATH private method. Removes the index < 0 check from the SLOW-PATH as that is now being checked in the actual ASSIGN-POS method (but not really acted upon, just used as a flag to take the slow path).
13:26
rakudo: lizmat++ created pull request #4170:
Make Array.ASSIGN-POS about 15% faster
lizmat www.reddit.com/r/rakulang/comments...eged_user/ # any takers? 16:28
nine lizmat: looks bad. 16:32
CompUnit::Repository::Installation::candidates needs to return Empty unless $prefix.add('short').e; before calling self!short-dir
as the latter will try to create the directory 16:33
lizmat so this would need a core change to fix ? 16:34
nine yes
As a workaround he may set $HOME to some directory where that user has write privileges 16:35
lizmat perhaps they could first run it as a normal user, and then move the .precomped files to the expected location? 16:37
ugexe i dont think adding that change to .candidates will really fix it, there are other places that assume self!short-dir exists and do things like my $lookup = self!short-dir.add($id) andthen { .mkdir unless .e } 17:02
i.e. installation 17:03
although maybe install time is ok for that since thats when the priv user is running it
lizmat feels to me this is an X/Y solution anyway 17:10
Feels to me the op needs a way to have a pre-comp files only version
ugexe im pretty sure they just want CURI to be able to load modules without a writeable home directory 17:13
one (non-existing option) would be to add a way to define which repos are (or are not) included when using raku. as it is now there is always the default repos including $HOME/.raku 17:19
something like the inverse of -I
lizmat ah... so simply removing $HOME/.raku from the list should work ? 17:20
ugexe i believe so
although there isnt a way to do that 17:21
lizmat looks like undeffing $HOME should just do that? 17:23
and HOMEDRIVE and HOMEPATH when on Win
ugexe without looking i would expect that only changes the directory to $empty_string/.raku 17:26
so now the problem is -- is the cwd writable?
lizmat $ raku -Mfoo -e '' 17:28
===SORRY!=== Error while compiling -e
Could not find foo in:
inst#/Users/liz/.raku
$ HOME= raku -Mfoo -e ''
===SORRY!=== Error while compiling -e
Could not find foo in:
inst#/Users/liz/Github/rakudo.moar/install/share/perl6/site
so that appears to work
euantorano hi all, I'm the author of the aforementioned reddit post 17:29
lizmat euantorano o/
euantorano Thought I'd drop in, and explain what my current solution is: I changed the unprivileged user's path to the root path of the project that is running
After restarting the service, a new `.raku/short` directory appeared and all is well 17:30
ugexe ➜ moar-blead git:(f89863249) pwd
/Users/ugexe/.rakubrew/versions/moar-blead
➜ moar-blead git:(f89863249) HOME=123 raku -M foo -e ''
===SORRY!=== Error while compiling -e
Could not find foo in:
inst#/Users/ugexe/.rakubrew/versions/moar-blead/123/.raku
so yeah setting it to blank seems to work
setting it to anything else does what i thought blank string would do 17:31
lizmat euantorano: could you try the HOME= fix and see if that prevents the dir from being created ? 17:32
just OOC to make sure that that's also a possible solution for such a situation
euantorano lizmat: sure, will give it a go and see what happens 17:33
Yep, that seems to work - no `.raku` directory is created and no warnings are printed 17:34
lizmat cool
thanks for trying! 17:35
afk for a few hours&
ugexe i wonder though how removing a repo affects the precomp systems, since removing a repo would change the repo-id of the repositories that come after it 17:36
github.com/rakudo/rakudo/blob/927f...n.pm6#L599 here specifically
a wild guess is it might no longer be able to take the fast path for lookups 17:37
nine ugexe: shouldn't matter. When we install a module, we only consider the rest of the repo chain for the id. That's what this line is for: PROCESS::<$REPO> := self; # Precomp files should only depend on downstream repos 17:59
Well, ok. You're right, we still have to re-resolve loaded modules, so lose a bit of the optimization 18:00
So the best solution is just to fix Rakudo :)
ugexe well it would still be nice to be able to pick which specific repositories to use. for instance if i install all dependencies into a specific location and want only that location to be used for module loading 18:01
even if doing so requires some convoluted parameters etc
nine certainly 18:02
So, something like raku --no-standard-repositories -Iinst#/your/repo
ugexe yeah 18:03
i suppose the `core` repo complicates things with that approach, but yeah thats the general idea 18:04
nine how so?
ugexe how to handle NativeCall ? 18:05
nine either just install it to your special repo, or add the core repo to your command line as well
ugexe well NativeCall isnt versioned
i wonder if there is a way for us to version the core distribution that makes sense 18:08
nine How about just using Rakudo's version? 18:09
ugexe that was my first thought too, but that does assume rakudo is the decider of NativeCall version and not any other implementation
i can also see people (read: me) abusing it to depend on a specific rakudo version lol 18:10
nine It really comes down to the question of whether these libraries are part of Raku or Rakudo 18:11
ugexe it would be odd for NativeCall to not be part of raku, even if not this specific implementation 18:14
the pain of dual-life distributions grows ever closer 18:15
nine I guess the API is part of Raku, the implementation part of Rakudo. Anyway why is the version that important for the described scenario? 18:19
ugexe because managing dependencies that don't update their versions is a huge pain 18:21
once they are out of core it has to be managed
otherwise i can have some old NativeCall installed that brakes something, and no way to install over it because the version never changes so e.g. zef never sees any reason to update it 18:22
nine Ah, yes, when updating rakudo 18:23
releasable6 Next release in ≈5 days and ≈19 hours. 1 blocker. Please log your changes in the ChangeLog: github.com/rakudo/rakudo/wiki/ChangeLog-Draft 23:00