🦋 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.
guifa SmokeMachine I saw it. Still trying to work out some of the details. I'm trying to get it to be as tightly integrated as Regex is, and if I can nail the syntax right for calling a logical rule/fact and a logical variable (while still allowing for other random variables) it'll be great 00:22
SmokeMachine guifa: on my suggestion I tried to make it closer to grammars... 00:24
guifa okay I get why this happens but it feels LTA 00:36
m: say so True cmp False; say so False cmp True; say so False cmp False 00:37
camelia True
True
False
coleman Warning: docs.raku.org will be rebooted. Expect a minute or two of downtime. 00:38
Coming back up... 00:40
Should be back. Enjoy kernel 5.14, docs site. 00:41
guifa I totally forget 01:33
how do I pass a literal whatever?
so I can do foo(2,*)
guifa huh it's suddenly working now 01:36
SmokeMachine m: my @a = <Bla>; require ::($_) for @a # should this be breaking on compile time? 01:37
camelia ===SORRY!===
lang-call cannot invoke object of type 'VMNull' belonging to no language
Voldenet m: my @a = <Bla>; for @a { require ::($_) } # probably not 01:41
camelia Could not find Bla in:
/home/camelia/.raku
/home/camelia/rakudo-m-inst-1/share/perl6/site
/home/camelia/rakudo-m-inst-1/share/perl6/vendor
/home/camelia/rakudo-m-inst-1/share/perl6/core
CompUnit::Repository::AbsolutePath<…
guifa m: my @a = ['a',*,'c']; my @b = [1,2,3]; .say for @a Z @b; 01:52
camelia (a 1)
(a 2)
(c 3)
guifa ^^ something seems to be going on with the zip operator 01:53
cross operator works fine
m: my @a = ['a',*,'c']; my @b = [1,2,3]; .say for @a X @b;
camelia (a 1)
(a 2)
(a 3)
(* 1)
(* 2)
(* 3)
(c 1)
(c 2)
(c 3)
guifa m: say $*COMPILER 02:10
camelia Dynamic variable $*COMPILER not found
in block <unit> at <tmp> line 1
guifa m: say $*RAKU.compiler.version 02:11
camelia v2024.02.110.g.18.abe.8.c.32
Voldenet * on the end repeats previous element in zip op 02:11
but I'm surprised it returns `c 3`
Voldenet m: my @a = ['a', *, |('c'..'g')]; my @b = 1..10; .say for @a Z @b 02:12
camelia (a 1)
(a 2)
(c 3)
(d 4)
(e 5)
(f 6)
(g 7)
Voldenet m: my @a = ['a', |('b'..'g'), *]; my @b = 1..10; .say for @a Z @b
camelia (a 1)
(b 2)
(c 3)
(d 4)
(e 5)
(f 6)
(g 7)
(g 8)
(g 9)
(g 10)
02:13
Voldenet interesting
guifa The thing is that Z and X are behaving differently with respect to it 02:17
Voldenet it's obvious why: X doesn't need to treat * differently, Z does 02:19
m: my @a = ['a', *]; my @b = 1..10; .say for @a Z @b 02:20
camelia (a 1)
(a 2)
(a 3)
(a 4)
(a 5)
(a 6)
(a 7)
(a 8)
(a 9)
(a 10)
Voldenet this makes sense
m: my @a = ['a', *, |('c'..'g')]; my @b = 1..10; .say for @a Z @b # this should behave the same as the above IMO
camelia (a 1)
(a 2)
(c 3)
(d 4)
(e 5)
(f 6)
(g 7)
Voldenet I'm betting it has to do something with how zip iterator is implemented 02:22
it doesn't expect to have * in the middle of the list at all
guifa So the *-as-last-element is only documented for the metaoperator 02:25
But not the operator
The Zip operator interleaves the lists passed to Z like a zipper, taking index-corresponding elements from each operand. The returned Seq contains nested lists, each with a value from every operand in the chain. If one of the operands runs out of elements prematurely, the zip operator will stop.
behavior is distinct: 02:26
The Z operator also exists as a metaoperator, in which case the inner lists are replaced by the value from applying the operator to the list:
Voldenet m: say ["a", [*], |("c".."g")] Z 1..20 02:31
camelia ((a 1) (1 2) (c 3) (d 4) (e 5) (f 6) (g 7))
Voldenet …what?
m: say ["a", ["b"], |("c".."g")] Z 1..20 02:32
camelia ((a 1) ([b] 2) (c 3) (d 4) (e 5) (f 6) (g 7))
Voldenet Something's definitely not right
However 02:33
m: say ["a", [*, *], |("c".."g")] Z 1..20
camelia ((a 1) ([* *] 2) (c 3) (d 4) (e 5) (f 6) (g 7))
guifa for now I'm just doing a manually loop with $i but meh lol 02:39
guifa Is there any way to clone entangled bindings in a hash? 04:29
m: my %x; %x<a> := %x<b>; %x<a> = 1; say %x; %x<b> = 2; say %x; my %y = %x; %y<a> = 3; say %y; my %z = %x.clone; %z<a> = 4; say %z; 04:33
camelia {a => 1, b => 1}
{a => 2, b => 2}
{a => 3, b => 2}
{a => 4, b => 2}
Xliff Getting this when attempting to build a fresh Raku: make: *** No rule to make target '/home/cbwood/.rakubrew/versions/moar-blead/nqp/nqp-m', needed by 'NQPP5QRegex.moarvm'. Stop. 05:32
Xliff Still getting -- make: *** No rule to make target '/home/cbwood/.rakubrew/versions/moar-blead/nqp/nqp-m', needed by 'NQPP5QRegex.moarvm'. Stop. 07:24
I've even nuked my entire rakudo setup and still cannot rebuild
Geth raku.org: andinus++ created pull request #221:
Mowyw replacement
08:49
lizmat Xliff: I just did the same, but don't have an issue ? 10:04
Xliff lizmat: gist.github.com/Xliff/467fd94ab0ee...ae1c358836 10:10
lizmat Xliff: in my case, no rakubrew is involved. In you case it seems it is? 10:11
xinming when I used rakubrew, How can we make the raku scripts in crontab please? 10:13
I mean for best practises. 10:14
How do you handle raku scripts using rakubrew
lizmat how would that be different from another Raku installation ?
ab5tract my guess is because rakubrew installs into a user directory. I don't think it has a mechanism to install system-wide 10:25
xinming lizmat: I think it's because the raku PATH is not initliazed in crontab 10:36
We have eval $(/home/xm/.rakubrew/bin/rakubrew init Bash) in .bashrc
What I'm curious is, do we have a transparent way to init the PATH in crontab 10:37
Xliff lizmat: It's either an issue in the repository or with how rakubrew set them up.
The following command fails when I build from the versions/moar-blead directory: /usr/bin/perl Configure.pl --backends=moar --gen-moar=main --gen-nqp=main --make-install --gen-moar --force-rebuild --moar-option="--debug" --git-cache-dir="/home/cbwood/.rakubrew/git_reference" 10:38
lizmat I know MasterDuke changed something wrt to bulding, perhaps a "reboot" of rakubrew is needed? 10:39
Xliff I can nuke the moar-blead directory and restart the build and still it errors out.
My reboot being "rm -rf .rakubrew" and reinstalling from scratch. Same problem. 10:40
lizmat Xliff: weird :-(
still feels related to MasterDuke's work, so maybe they have an idea of what's going on 10:41
Xliff OK. I'm on 2024.02 until then. 10:43
I'm usually on weekly builds, so this is a first in a while.
ab5tract xinming: does this help? stackoverflow.com/questions/847569...run-script 11:02
tl;dr -- `crontab -e` should create/edit a user-specific crontab. I'm not sure how deep the environment setup is, but you should be able setup the environment if you schedule a shell script that does the setup and then calls the raku script 11:05
antononcube I have to revisit the package / module naming question from yesterday. 12:51
I created, submitted, and deleted the package “Data::Slurps” — I think that name sounds “wrong”. 12:52
I consider resubmitting it with the name “Data::Slurpers” or “Data::Importers”.
Although, the function slurp is being overloaded in that package, I find “Data::Importers” more “findable” or “intuitive”. 12:55
Xliff cd 13:08
xinming ab5tract: definitely not. 13:12
I just now find that the bash init output contains the path. 13:13
I just manullay hard code the PATH in crontab
ab5tract ah, I'm surprised that the system crontab would be allowed to access the contents of a user's home folder 13:14
but I'm glad you've got it working
Xliff Still getting this while attempting to build nqp in main: make: *** No rule to make target '/home/cbwood/.rakubrew/versions/moar-blead/nqp/nqp-m', needed by 'NQPP5QRegex.moarvm'. Stop. 13:15
Xliff This isn't even a rakubrew issue anymore. It may be a git one. 13:15
Xliff I'm usibng the following in the nqp directory: /usr/bin/perl Configure.pl --prefix=/home/cbwood/.rakubrew/versions/moar-blead/install --make-install --git-protocol=https --no-relocatable --no-ignore-errors --silent-build --force-rebuild 13:16
Xliff OK, building from my local repository worked, but it took a couple of tries. 13:27
Any ideas? I kinda need the rakubrew setup to keep up with my weekly compiles... 13:28
ugexe fwiw `rakubrew build moar-blead` worked on my system 14:15
Xliff Weird. I created a new account and it worked there, too. 14:25
xinming releasable6: status 14:26
releasable6 xinming, Next release in ≈4 days and ≈4 hours. There are no known blockers. Changelog for this release was not started yet
xinming, Details: gist.github.com/24ab632fc60538217f...f716b62e93
Xliff But if I do it from this account, even removing the .rakubrew directory and reinstalling rakubrew from scratch, I still get the same error.
.tell nine Could use a bit of your time. I'm having trouble with NativeCall crashes. #5534 could use your attention and also, what's the best way from converting a Str to a gpointer and NOT having it freed by C? 14:27
tellable6 Xliff, I'll pass your message to nine
guifa how is the `is copy` handled? it's not calling .clone or .copy or anything 16:04
SmokeMachine aruniecrisps, Voldenet: if interested, I’ve added some more prototype code on github.com/FCO/Red/issues/15 16:07
eseyman x 16:20
SmokeMachine m: class Bla { method FALLBACK($name, |) { say $name }; sub bla($bla is copy) { say $bla }; bla Bla.new 16:28
camelia ===SORRY!=== Error while compiling <tmp>
Missing block
at <tmp>:1
------> ($bla is copy) { say $bla }; bla Bla.new⏏<EOL>
expecting any of:
postfix
statement end
statement modifier
stat…
SmokeMachine m: class Bla { method FALLBACK($name, |) { say $name } }; sub bla($bla is copy) { say $bla }; bla Bla.new 16:29
camelia Bla.new
SmokeMachine m: class Bla { method FALLBACK($name, |) { say $name } }; bla Bla.new.some-method 16:31
camelia ===SORRY!=== Error while compiling <tmp>
Undeclared routine:
bla used at line 1
SmokeMachine m: class Bla { method FALLBACK($name, |) { say $name } }; Bla.new.some-method 16:46
camelia some-method
SmokeMachine m: class Bla { method FALLBACK($name, |) { say $name } }; sub bla($a is copy) { say $a }; bla Bla.new 16:47
camelia Bla.new
SmokeMachine it seems its calling no methods...
ab5tract m: class Bla { method FALLBACK($name, |) { say $name } }; sub bla($a is copy) { $a.some-method }; bla Bla.new 16:52
camelia some-method
ab5tract ah, I see what you mean
SmokeMachine unless it's calling a parent method, I suppose... 16:53
ab5tract It appears to be calling `Parameter.copy` 16:55
SmokeMachine hum! Parameter! makes sense 16:56
ab5tract ah, no that's not right either!
SmokeMachine m: say Parameter.new(:name<$!bla>, :package(Mu)).copy 16:57
camelia False
ab5tract yeah, `Parameter.copy` just returns whether the copy flag was set 16:58
m: say Parameter.new(:name<$!bla>, :package(Mu), :copy).copy 16:59
camelia False
SmokeMachine m: my $p = Parameter.new(:name<$!bla>, :package(Mu)); say $p.copy; trait_mod:<is>($p, :copy); say $p.copy
camelia False
True
ab5tract m: use nqp; Parameter.new(:name<foo>, :package<Mu>, :flags(nqp::const::SIG_ELEM_IS_COPY)).copy.say 17:01
camelia True
ab5tract SmokeMachine: so I guess the shallow answer is that no class-defined methods are called for `is copy` 17:05
lizmat I think it's much simpler 17:25
a scalar value parameter is put into a scalar ro container ordinarily 17:26
m: sub a($a) { $a = 42 }; a
camelia ===SORRY!=== Error while compiling <tmp>
Calling a() will never work with declared signature ($a)
at <tmp>:1
------> sub a($a) { $a = 42 }; ⏏a
lizmat m: sub a($a) { $a = 42 }; a(666)
camelia Cannot assign to a readonly variable or a value
in sub a at <tmp> line 1
in block <unit> at <tmp> line 1
lizmat m: sub a($a) { use nqp; dd nqp::iscont($a) }; a(666) 17:27
camelia 1
lizmat the only thing "is copy" does on a scalar argument, is to make the container writeable
m: sub a($a) { use nqp; dd $a.VAR.^name }; a(666)
camelia "Scalar"
lizmat m: sub a($a is copy) { use nqp; dd $a.VAR.^name }; a(666)
camelia "Scalar" 17:28
lizmat m: sub a($a is copy) { use nqp; dd nqp::iscont($a) }; a(666)
camelia 1
Xliff m: sub a ($b is copy) { $b = 42 }; my $B = 0; a($B) 19:08
camelia ( no output )
Xliff Note that $B is not $b. They are two different containers. 19:09
if you use "is rw" ONLY THEN is $B =:= $b
lizmat indeed 19:10
antononcube @lizmat There is a keyword export , but there is no keyword import , right? 19:25
Anyone else can confirm my conjecture too. 🙂 19:27
ab5tract m: export 19:28
camelia ===SORRY!=== Error while compiling <tmp>
Undeclared routine:
export used at line 1
ab5tract m: import
camelia ===SORRY!=== Error while compiling <tmp>
Undeclared routine:
import used at line 1
antononcube @ab5tract Thanks. I searched docs.raku.org and here: raku-musings.com/keywords.html 19:29
ab5tract I’m not sure why ‘import’ failed 19:38
in that way
import is useful when you require a module instead of use it 19:39
m: module M { sub m is export { say “m” }}; import M; m() 19:40
camelia m
guifa lizmat: ah. I'm doing something where I need to clone, and was debating whether to do clone before calling or in my method, and was thinking it would nice if I could do it upon calling
oooh.....that could be a cool trait. is clone
antononcube @ab5tract Thanks -- this was not clear to me from perusing of docs.raku.org. 19:41
But, since I had some doubts about using import as function I held up the Zef ecosystem submission of "Data::Importers" : github.com/antononcube/Raku-Data-Importers 19:42
ab5tract antononcube: I wonder if this can provide some inspiration.. 5ab5traction5.bearblog.dev/i-raku-...structors/ 19:46
That’s the most elaborate export-ery that I’ve personally done 19:48
antononcube @ab5tract Yes, it inspirational to those MS DOS and Windows.
ab5tract The post content, not the trappings :P
antononcube Agh, ok -- thanks for clarifying !!! 19:49
Voldenet SmokeMachine: Schema introspection in sql may be not always possible (e.g. where you don't even have sql installed on dev system), it might be worth using model from previous migration as a source 19:55
with specific sql scripts target 19:56
SmokeMachine Voldenet: in that case you wouldn’t use update, but prepare —to-model (I just thought of that) 19:58
—from-model, sorry
Voldenet makes sense 19:59
SmokeMachine Sorry, I was right… —to-model… it will compare the old model (as originally) with the new model 20:01
Voldenet they both make some sense if you want to generate migration scrips for other sql flavors retrospectively… 20:04
but it's a rare use case
> -from-model=3 -to-model=5 –driver=SQLite 20:06
SmokeMachine :+1
👍
but I think it is a good default (if nothing else was asqued) to get the diff from last/current model's version to current local DB 20:10
and to update your local DB, you edit your model and run `update`, make sense?
Voldenet I usually make changes in the code first 21:07
so, models -> logic -> migration
migration can be arbitrarily complex
but I don't worry about it when designing the code 21:08
sometimes I even start with logic, so I use the db how I'd like 21:09
then refactor model/schema to what I need
and craft the migration
Geth docker: m-dango++ created pull request #58:
Bump to 2024.02
21:14
SmokeMachine Voldenet: so change models > run `update` (it will update you local DB) > write your logic > run `prepare` to write your migrations (SQL)... 21:18
Voldenet: or, if you do not have a local DB: change models > do NOT run `update` > write your logic > run `prepare --from-model-version 42` to write your migrations (SQL)... 21:20
Voldenet updating local db requires migrating it 21:20
it's tougher than it sounds
so yeah 21:21
`prepare from-model-version` sounds about right
hm, I wonder whether inspecting the schema makes sense at this point 21:26
antononcube Alsways inspect the schema!
greenfork I wonder how does this de-sugar? 21:27
m: (1,2,3).&[+]
camelia ( no output )
greenfork Outputs 3
Voldenet m: say (1,1,1).&infix:<+> 21:30
camelia 3
Voldenet m: say (1,1,1).Int 21:31
camelia 3
Voldenet that's why it becomes "3" 21:32
I'm not sure what'd be the syntax for [+], `postcircumfix:<[ ]>(infix:<+>)` perhaps
but I'm guessing 21:33
greenfork What about this one
m: say (1,1,1).&infix:</>
camelia 3
greenfork m: say infix:</>(1,1,1)
camelia ===SORRY!=== Error while compiling <tmp>
Calling infix:</>(Int, Int, Int) will never work with signature of the proto ($?, $?, *%)
at <tmp>:1
------> say ⏏infix:</>(1,1,1)
greenfork Shouldn't it be equivalent here?
Voldenet nope 21:36
m: say infix:</>((1,1,1))
camelia 3
Voldenet note the additional ()
you pass the list as first argument
greenfork Oh I see, thank you! 21:37
Voldenet m: say (1,2,3).&prefix:<[+]> 21:51
camelia 6
Voldenet greenfork: ^
greenfork Prefix makes sense, thank you 21:52