🦋 Welcome to Raku! raku.org/ | evalbot usage: 'p6: say 3;' or /msg camelia p6: ... | irclog: colabti.org/irclogger/irclogger_log/raku
Set by ChanServ on 14 October 2019.
00:07 caterfxo joined 00:15 caterfxo is now known as mrwisdom 00:27 xelxebar joined 00:37 pilne_ joined 00:39 pilne left 00:40 mrwisdom is now known as caterfxo 00:59 upupbb-user3 joined 01:01 hungrydonkey joined 01:20 markong left 01:39 molaf left 01:42 ryn1x joined
ryn1x p6: sub foo ( --> (Bool, Str) ) { return (True, "Success") } 01:43
camelia 5===SORRY!5=== Error while compiling <tmp>
Malformed return value
at <tmp>:1
------> 3sub foo ( -->7⏏5 (Bool, Str) ) { return (True, "Success"
ryn1x Can I do a type signature like this in someway? I want to return a typed 2 tuple (list?) 01:44
01:52 molaf joined 02:00 PacoLinux joined
uzl[m] m: subset Type where { $_[0] ~~ Bool && $_[1] ~~ Str }; sub foo ( --> Type ) { return (True, "Success") } 02:09
camelia ( no output )
uzl[m] m: subset Type where { $_[0] ~~ Bool && $_[1] ~~ Str }; sub foo ( --> Type ) { return (True, "Success") }; say foo() ~~ Type;
camelia True
uzl[m] ryn1x: ^ Probably like this? 02:10
ryn1x cool thx
Is this how I would type against a Class that does a Role? sub foo($x where {$x does SomeRole}) 02:11
sjn m: sub a (--> Pair) { return True => "yes" }; say a.perl 02:13
camelia :True("yes")
sjn no support for parameterized Pair though 02:14
ryn1x hmm... but can I assign the pair like I can a list...
uzl[m] m; role A {}; class B does A {}; sub f( $x where {$_.does(A)} ) {}; f B 02:15
ryn1x p6: my $a; my $b; ($a, $b) = sub a (--> Pair) { return True => "yes" };
camelia ( no output )
uzl[m] m: role A {}; class B does A {}; sub f( $x where {$_.does(A)} ) {}; f B
camelia ( no output )
ryn1x p6: my $a; my $b; ($a, $b) = sub a (--> Pair) { return True => "yes" }; say $a, $b
camelia &a(Any)
uzl[m] m; role A {}; class B {}; sub f( $x where {$_.does(A)} ) {}; f B
m: role A {}; class B {}; sub f( $x where {$_.does(A)} ) {}; f B
camelia Constraint type check failed in binding to parameter '$x'; expected anonymous constraint to be met but got B (B)
in sub f at <tmp> line 1
in block <unit> at <tmp> line 1
ryn1x m: role A {}; class B does A {}; sub f( $x where {$_.does(A)} ) {}; f B 02:17
camelia ( no output )
ryn1x m: role A {}; class B does A {}; sub f( $x where {$_.does(A)} ) { say "worked" }; f B
camelia worked
uzl[m] m: role A {}; class B {} does A; sub f( $x where { $_ ~~ A} ) {}; f B
camelia Cannot use 'does' operator on a type object B.
in block <unit> at <tmp> line 1
uzl[m] m: role A {}; class B does A {}; sub f( $x where {$_ ~~ A} ) {}; f B 02:18
camelia ( no output )
uzl[m] role A {}; class B; sub f( $x where {$_ ~~ A} ) {}; f B
ryn1x m: role A {}; class B does A {}; class C; sub f( $x where {$_.does(A)} ) { say "worked" }; f C
camelia 5===SORRY!5=== Error while compiling <tmp>
Too late for unit-scoped class definition;
Please use the block form.
at <tmp>:1
------> 3role A {}; class B does A {}; class C;7⏏5 sub f( $x where {$_.does(A)} ) { say "w
uzl[m] m: role A {}; class B {} sub f( $x where {$_ ~~ A} ) {}; f B 02:19
camelia 5===SORRY!5=== Error while compiling <tmp>
Strange text after block (missing semicolon or comma?)
at <tmp>:1
------> 3role A {}; class B {}7⏏5 sub f( $x where {$_ ~~ A} ) {}; f B
expecting any of:
infix …
02:19 k-man joined
ryn1x m: role A {}; class B does A {}; class C {}; sub f( $x where {$_.does(A)} ) { say "worked" }; f C 02:19
camelia Constraint type check failed in binding to parameter '$x'; expected anonymous constraint to be met but got C (C)
in sub f at <tmp> line 1
in block <unit> at <tmp> line 1
ryn1x yeah $x where {$_.does(A)} seems to work
uzl[m] m: role A {}; class B {}; sub f( $x where {$_ ~~ A} ) {}; f B
camelia Constraint type check failed in binding to parameter '$x'; expected anonymous constraint to be met but got B (B)
in sub f at <tmp> line 1
in block <unit> at <tmp> line 1
ryn1x that one is missing class B does A {} 02:20
uzl[m] Yeah, I was testing a class that doesn't implement the role and it fails as expected. 02:21
ryn1x ahh ok. cool.
uzl[m] ^ It seems you could use smartmatching too but .does looks clearer to me. 02:22
ryn1x so does or ~~...
ok yeah... thats what I was thinking
02:33 upupbb-user3 left 02:46 Geth_ joined, Geth left 02:58 hungrydonkey left
ryn1x should I use "is rw" or "ir raw" to pass by reference to a sub? 03:01
m: my class Foo {our $.x}; my $foo = Foo.new; $foo.x = 42; sub replace($foo is rw) {$foo = Foo.new; $foo.x = 99}; replace $foo; say $foo.x;
camelia 99
ryn1x m: my class Foo {our $.x}; my $foo = Foo.new; $foo.x = 42; sub replace($foo is raw) {$foo = Foo.new; $foo.x = 99}; replace $foo; say $foo.x;
camelia 99
03:03 hungrydonkey joined 03:08 hungrydonkey left
irced "Raw parameters bind either a variable or a value passed to it, with no decontainerization taking place. That means that if a variable was passed to it, you can assign to the parameter. This is different from rw-parameter which can only bind to variables, never to values." 03:21
irced parses.
m: my class Foo {our $.x}; my $foo = Foo.new; $foo.x = 24; sub replace($foo is raw) { $foo = Foo.new; $foo.x = 99}; replace 42; say $foo.x; 03:23
camelia Cannot assign to an immutable value
in sub replace at <tmp> line 1
in block <unit> at <tmp> line 1
03:25 ryn1x left
irced m: my class Foo {our $.x}; my $foo = Foo.new; $foo.x = 24; sub replace($foo is rw, $blah is raw) { $foo = Foo.new; $foo.x = 99}; replace $foo 42; say $foo.x; 03:26
camelia 5===SORRY!5=== Error while compiling <tmp>
Two terms in a row
at <tmp>:1
------> 3oo = Foo.new; $foo.x = 99}; replace $foo7⏏5 42; say $foo.x;
expecting any of:
infix stopper
irced m: my class Foo {our $.x}; my $foo = Foo.new; $foo.x = 24; sub replace($foo is rw, $blah is raw) { $foo = Foo.new; $foo.x = 99}; replace ($foo 42); say $foo.x; 03:27
camelia 5===SORRY!5=== Error while compiling <tmp>
Two terms in a row
at <tmp>:1
------> 3o = Foo.new; $foo.x = 99}; replace ($foo7⏏5 42); say $foo.x;
expecting any of:
infix stopper
statement end
irced m: my class Foo {our $.x}; my $foo = Foo.new; $foo.x = 24; sub replace($foo is rw, $blah is raw) { $foo = Foo.new; $foo.x = 99}; replace ($foo, 42); say $foo.x;
camelia Too few positionals passed; expected 2 arguments but got 1
in sub replace at <tmp> line 1
in block <unit> at <tmp> line 1
irced m: my class Foo {our $.x}; my $foo = Foo.new; $foo.x = 24; sub replace($foo is rw, $blah is raw) { $foo = Foo.new; $foo.x = $blah}; replace($foo, 42); say $foo.x;
camelia 42
irced m: my class Foo {our $.x}; my $foo = Foo.new; $foo.x = 24; sub replace($foo is rw, $blah is rw) { $foo = Foo.new; $foo.x = $blah}; replace($foo, 42); say $foo.x; 03:28
camelia Parameter '$blah' expected a writable container, but got Int value
in sub replace at <tmp> line 1
in block <unit> at <tmp> line 1
irced that sums it up. ryn1x ah crap
irced uses raku code to decrypt satellite communications, intercept an authorization, reproduce it, submits an images of ryn1x's face and body posture, triangulate ryn1x's current geolocation based on facial recognition and cell phone location (with history), deploys a drone to deliver a hand written note that reads BANG. 03:32
03:33 hungrydonkey joined 03:38 Doc_Holliwould left
[Coke] wonders how to setup a main so he can have a fixed string, then -x args, then normal args 03:38
MAIN("combo", $stuff, :$nonsense) wants to be invoked as ./exe -nonsense combo stuff 03:40
irced It's possible to alter how arguments are processed before they're passed to sub MAIN {} by setting options in the %*SUB-MAIN-OPTS hash. Due to the nature of dynamic variables, it is required to set up the %*SUB-MAIN-OPTS hash and fill it with the appropriate settings. 03:43
"For example....raku example.raku 1 --c=2 3 --d=4" 03:44
[Coke] does that get a cigar?
irced fiddles happily with his thumb err cigar cutter, making a steel slicing sound repeatedly. 03:45
[Coke] checking...
irced docs.raku.org/language/create-cli#...-MAIN-OPTS
irced draws a pocket blow torch and a bag of thermite from a satchel, to ensure the cigar burns of course. 03:47
[Coke] irced++ 03:49
irced cool, i had hoped it was close enuf
irced puts on light shielding goggles and lights the torch. Cigar time. 03:50
03:51 roguelazer left 03:53 roguelazer joined 03:55 pilne_ left 04:04 PacoLinux left 04:19 discord6 joined, discord6 left, discord6 joined, cpan-raku left 04:20 cpan-raku joined, cpan-raku left, cpan-raku joined 04:21 discord6 left 04:22 discord6 joined, discord6 left, discord6 joined, cpan-raku_ joined, cpan-raku_ left, cpan-raku_ joined, cpan-raku left, irced left 04:33 holyghost left 04:56 upupbb-user3 joined 05:27 upupbb-user3 left 05:37 rindolf joined 05:43 helit left 05:47 wamba joined, helit joined 05:51 sjm_uk joined 06:13 Doc_Holliwould joined 06:19 PacoLinux joined 06:21 kensanata joined 06:53 tadzik left 06:54 SQuoll left, b2gills left, wamba left, SQuoll joined 07:00 tadzik joined 07:01 wamba joined 07:02 b2gills joined, upupbb-user3 joined 07:05 xelxebar left, abraxxa joined, xelxebar joined 07:06 abraxxa left 07:09 abraxxa joined, Sgeo__ joined
SmokeMachine m: role A {}; class B does A {}; sub f( A $x ) {}; f B 07:11
camelia ( no output )
07:13 Sgeo_ left, abraxxa left
SmokeMachine :( 07:13
m: role A {}; class B {}; sub f( A $x ) {}; f B
camelia 5===SORRY!5=== Error while compiling <tmp>
Calling f(B) will never work with declared signature (A $x)
at <tmp>:1
------> 3ole A {}; class B {}; sub f( A $x ) {}; 7⏏5f B
SmokeMachine :) 07:14
07:14 abraxxa joined 07:15 stoned75 joined 07:41 dakkar joined 07:52 pecastro joined 07:58 sena_kun joined 07:59 AlexDaniel joined 08:00 AlexDaniel left, AlexDaniel joined, PacoLinux left, wamba left 08:06 Altai-man_ joined 08:08 sena_kun left 08:09 natrys joined 08:22 PacoLinux joined 08:27 Geth joined 08:28 Geth_ left 08:35 AlexDaniel left 08:36 hungrydonkey left, angelds joined 08:37 hungrydonkey joined 08:40 Doc_Holliwould left 08:44 lichtkind left
Altreus No matter what I do I cannot seem to get this client to reconnect if the heartbeat is not acknowledged. github.com/shuppet/p6-api-discord/...n.pm6#L193 08:45
It just ... stops
It appears to print out a whole bunch of spaces on STDERR but I have no idea how that's even possible
Line 203 just never appears to be reached 08:46
08:50 angelds left 08:59 eythian joined, eythian left, eythian joined 09:00 eythian left 09:28 ufobat joined 09:52 Black_Ribbon left 10:07 sena_kun joined
tbrowder m: class f { has $.f; method f {} }; my $o = f.new 10:07
camelia ( no output )
10:09 Altai-man_ left
tbrowder m: class f { has $.f; method f { say 'foo'}}; my $f = f.new; $f.f 10:10
camelia foo
10:11 wamba joined
tbrowder m: class f { has $.f is rw = 'f'; method f {say self.f}}; my $f.new; $f.f; $f.f = 'a'; $f.f 10:14
camelia No such method 'f' for invocant of type 'Any'
in block <unit> at <tmp> line 1
10:18 AlexDaniel joined, AlexDaniel left, AlexDaniel joined 10:21 MasterDuke left
lizmat my $f.new ?? 10:29
tbrowder 10:30
what are you trying to achieve ?
tbrowder experimenting with identical names for methods and attrs. finished offline to my satisfaction. 10:31
we can if needed--very cool! 10:32
lizmat: is it safe to say in general that i can change perl's value of "undef" to "Nil" in raku for assignments? 10:35
lizmat yes
tbrowder that helps. do you know why Nil was chosen over undef for raku? 10:36
lizmat because every type object is basically undef 10:37
tbrowder ?
lizmat in Perl undef is many things
it's a function and it's a value and it's a state
in Raku these are split up really 10:38
there's an undefine() function still, but that's deprecated
because it has different semantics for scalar / arrays / hashes
every type object is a typed undefined value :-) 10:39
and Nil is the "untyped" undefined value
assigning Nil to a scalar will return that scalar to its default state
tbrowder erg, no wonder i never tried to get into perl guts...
lizmat m: my $a is default(42) = 666; say $a; $a = Nil; say $a 10:40
camelia 666
tbrowder !! 10:43
cool if needed. my pea brain can't think of a practical use offhand... 10:44
lizmat it could be handy for arrays 10:45
m: my @a is default(1); say @a[1000]
camelia 1
lizmat or hashes 10:46
m: my %h is default(1); say %h<foobar>
camelia 1
tbrowder oh, so an automatically full defined infinite array?
lizmat well, conceptually, yes
m: my %h is default(1); say %h<foobar>; say %h.elems 10:47
camelia 1
lizmat in reality, no :-)
tbrowder hm, raku is indeed wondrous! 10:48
thnx for the interesting trip 10:49
lizmat yw 10:50
11:00 upupbb-user3 left 11:05 aborazmeh joined, aborazmeh left, aborazmeh joined 11:10 chloekek joined 11:12 ufobat left, ufobat joined 11:18 epony left 11:19 epony joined 11:23 MasterDuke joined
Altreus any grown-ups able to help with my problem? :S 11:34
I'm at a total loss ;_;
lizmat Altreus: I have no idea either :-(
Altreus wait! I have output! 11:35
« ♥💔! 🔌…Closing connection
It just doesn't reconnect :z
I'm pretty sure all I changed was the string but ok
chloekek I want something like state but that makes it a property of self instead of the block. Does that exist? 11:41
There is has but its name must be unique across all methods.
Geth doc: Kaiepi++ created pull request #3300:
Document sigiled method calls
discord6 <tmtvl> Oh hey, the IRC bridge works again. Hello everyone!
11:42 markong joined
chloekek I want to make prepared statements persist throughout my instance, but I would really like to just call all of them $sth, for brevity. 11:42
cpan-raku_ New module released to CPAN! DBIish::Transaction (1.0.1) by 03RBT
chloekek Like this: glot.io/snippets/fm3jkrnrf7 11:44
MasterDuke m: class F { my $sth = "select"; method get-sth() { $sth }; method set-sth($a) { $sth = $a } }; my $f = F.new; say $f.get-sth; my $g = F.new; $g.set-sth("update"); say $f.get-sth # or this? 11:46
camelia select
chloekek I specifically want them per instance, not global. 11:47
At runtime like has, but syntactically like my.
The storage of has but scoped per lexical scope, not for the entire class. 11:48
MasterDuke you could probably make some sort of Proxy object that stores in a hash keyed on the calling method's name 11:49
chloekek I can make a hash that maps SQL to prepared statements. 11:50
has DBDish::SQLite::StatementHandle %!sths; 11:52
method !sth(::?CLASS:D: Str:D $sql) { %!sths{$sql} //= $!dbh.prepare($sql); }
That should do the trick.
11:53 NODE left
chloekek Example use: my $sth := self!sth(q:to/SQL/); ☺ 11:54
11:55 NODE joined 11:58 vike joined 12:00 markoong joined 12:03 markong left 12:04 xelxebar left 12:06 Altai-man_ joined 12:08 sena_kun left 12:11 markong joined, aborazmeh left 12:12 xelxebar joined, |oLa| joined 12:15 markoong left 12:26 markoong joined 12:29 |oLa| left 12:30 markong left 12:31 markoong left, markong joined 12:37 hungrydonkey left 12:39 Doc_Holliwould joined
Geth doc: 7a4f43b118 | (Ben Davies)++ | doc/Language/objects.pod6
Document sigiled method calls
doc: 9cd4c4d35b | (Ben Davies)++ | xt/words.pws
Learn the enqueue and dequeue words
doc: 795dc6c896 | (Juan Julián Merelo Guervós)++ (committed using GitHub Web editor) | 2 files
Merge pull request #3300 from Kaiepi/sigiled-methods

Document sigiled method calls
linkable6 Link: docs.raku.org/language/objects
12:54 daxim left 12:57 Kaeipi is now known as Kaiepi, xelxebar left 12:59 daxim joined 13:01 xelxebar joined 13:05 |oLa| joined 13:11 |oLa| left
Geth doc: 4d7c12fb7d | (Ben Davies)++ | doc/Language/objects.pod6
Add missing quote in sigiled method call example
linkable6 Link: docs.raku.org/language/objects
13:16 Doc_Holliwould left 13:40 NODE left 13:47 NODE joined
cpan-raku_ New module released to CPAN! DBIish::Transaction (1.0.2) by 03RBT 13:50
13:54 vrurg_ joined 13:58 vrurg joined
chloekek When writing actions for grammars, how do you know what $/ will be like, when the grammar uses repetition? 13:58
In my grammar I have token TOP { <option>* %% \n } so I would expect $<option> to be a list of matches. 13:59
lizmat moritz jnthn ^^
jnthn I'd epxect so too :)
chloekek For some reason I get a Nil here: glot.io/snippets/fm3nbm4non 14:00
I inspected the match objects but it was not clear how I would get the option ASTs out.
14:01 vrurg_ left
chloekek $<option>».made just evaluates to [Nil, Nil] 14:02
jnthn You forgot to write `make` in the action methods
chloekek Ah
jnthn wonders if that's a common enough mistake to deserve a weak warning in Comma... 14:03
chloekek Thanks, now it works great. :)
Raku::Critic 14:04
14:07 sena_kun joined 14:08 Altai-man_ left 14:14 Tirifto joined 14:26 aluaces left 14:27 lucasb joined 14:28 molaf left 14:35 Doc_Holliwould joined
cpan-raku_ New module released to CPAN! Data::Record (0.1.2) by 03KAIEPI 14:38
14:44 rindolf left
uzl[m] m: my @a := (1, 2); say @a.VAR.^name; say @a[0].VAR.^name; 14:46
camelia List
uzl[m] m: my @a := (1, 2); say @a.VAR.^name; say @a[0].VAR.^name; @a[0] = 1;
camelia List
Cannot modify an immutable List ((1 2))
in block <unit> at <tmp> line 1

uzl[m] m: my %a := Map.new('a', 1, 'b', 2); say %a.VAR.^name; say %a<a>.VAR.^name; 14:47
camelia Map
uzl[m] m: my %a := Map.new('a', 1, 'b', 2); say %a.VAR.^name; say %a<a>.VAR.^name; %a<a> = 'Hi'; say %a
camelia Map
Map.new((a => 1, b => 2))
14:50 rindolf joined
uzl[m] ^ Is there any reason why trying to mutate a Map bound to a %-sigiled variable doesn't throw an error the same way a List bound to a @-sigiled variable does? 14:51
14:52 kanliot joined, kanliot left, kanliot joined
kanliot i was reading cr.openjdk.java.net/~rpressler/loo...posal.html and I think i read that raku supports coroutine semantics, but not actual coroutines. is this true? I think raku would be more interesting if it had real coroutines with the existing semantics which seem very good in raku! 14:54
jnthn Raku has multiple constructs that are coroutine-powerful (gather/take, and await); the actual impl of them is done in terms of continuations rather than coroutines, though that's an implementation detail. 14:58
15:05 ufobat left, ufobat joined
kanliot hmm. does golang use multithreaded goroutines by default? 15:12
and thanks for the reply sir
15:14 rindolf left
chloekek At any one time a goroutine runs on at most one thread. 15:19
The number of threads that can be running different goroutines is given by GOMAXPROCS, which defaults to the number of cores. 15:20
15:20 ufobat left 15:21 ufobat joined
chloekek A goroutine may run on different threads along its lifetime. 15:22
15:22 molaf joined 15:23 rindolf joined, ufobat_ joined
kanliot thanks chloekek, I guess you looked that up. 15:25
I'm having trouble learning perl OOP. is raku OOP easier somehow... Im reading raku.guide/#_classes_objects 15:26
mainly the problem is i'm just not smart enough or something
chloekek I looked up the default to GOMAXPROCS. :P
15:27 ufobat left
Altreus jnthn: help me jnthn-kenobi, you're my only hope :( 15:31
github.com/shuppet/p6-api-discord/...n.pm6#L193 I've got this far. It notices the exception and disconnects, but never seems to try to reconnect
I don't know what debugging to add to help figure out why 15:32
15:32 Kaiepi left, NODE left 15:34 Kaiepi joined, NODE joined 15:35 mowcat joined, k-man left
chloekek p6: sprintf("%4s", ‘楽’).chars; 15:37
camelia ( no output )
chloekek p6: say sprintf("%4s", ‘楽’).chars;
camelia 4
AlexDaniel what 15:38
m: say sprintf("%4s", ‘楽’);
AlexDaniel ah
15:38 hungrydonkey joined
chloekek But 楽 is twice as wide as Latin characters. :( 15:38
AlexDaniel chloekek: so? The width of some characters is unknown even 15:39
unidump: 楽
unicodable6 AlexDaniel, gist.github.com/673a178a454e675d1e...0fde87faf0
uzl[m] kanliot: I'd dare to say that Raku's OOP is one of the cleaniest and most straightforward OOP implementations I've seen in a programming language. I'm bit biased though ;-).
AlexDaniel chloekek: check East_Asian_Width property
chloekek Would be great to have support for that in s?printf. 15:40
Maybe it’s already there, I’d have to check.
AlexDaniel I doubt it
you're asking for something that is generally not possible
at least as far as I know
maybe there's a unicode doc somewhere saying how to do it 15:41
chloekek UAX #14 mentions it.
AlexDaniel UAX #14 is talking about where to break lines, I don't think it's helpful for font-related width 15:44
UAX #11 is probably more useful
chloekek There are also characters that take up no space such as the zero-width joiner. 15:45
AlexDaniel well, zero-width joiner normally appears in the middle of things that form a single grapheme anyway
chloekek Right. 15:46
kanliot thx uzl[m] raku.guide/#_classes_objects this web page seems well written as well. I stopped reading the page since I had to google how to distribute raku programs. I didn't like what i saw there
AlexDaniel chloekek: it's an interesting issue, maybe file a ticket about it? github.com/perl6/problem-solving/ 15:47
chloekek I’ll have to do some more research firts.
I found a Perl 5 module called Unicode::GCString that has a columns function for terminal printing. Let’s see what that has to say. 15:48
AlexDaniel chloekek: once there's a ticket I believe samcv will take a look at it, and she knows a lot more :)
15:49 NODE left
chloekek Ok. 15:49
15:51 NODE joined
AlexDaniel “In "NONEASTASIAN" context, characters with East_Asian_Width property ambiguous (A) are treated as "narrow" and with Line Breaking Class AI as alphabetic (AL).” 15:53
thing is, your terminal probably has no idea
so my understanding is that you can guesstimate the number of fixed-pitch columns, but it doesn't mean much once you start printing them somewhere 15:54
Geth ¦ problem-solving: chloekek assigned to samcv Issue printf padding and wide East Asian characters github.com/Raku/problem-solving/issues/171 16:02
uzl[m] kanliot: I think raku.guide is meant to give you an overview of the language. For more in-depth treatment of a particular subject, always refer to the documentation. If you feel something isn't clear on there, you can ask here and/or submit an issue to github.com/Raku/doc/issues. 16:05
16:06 Altai-man_ joined
kanliot uzl[m], ok thanks. i see the documentation is linked at the top of raku.guide 16:06
uzl[m] kanliot: By distributing a Raku program, do you mean how to "modularize" it and then make it available in the ecosystem?
kanliot uzl[m], no I mean make it accessible to uh non-experts like me who google stuff and occassionally get a google result from github. 16:08
16:09 sena_kun left
kanliot so you could zip up your raku module, but the user still needs to know how to install it on his/her OS 16:09
so it's a nonstarter for most people 16:10
uzl[m] hmm... if a module has its META6.json, installing it is quite easy since zef takes care of everything for you. docs.raku.org/language/modules#Loo...g_modules. 16:13
kanliot: BTW, do you mind sharing what you didn't like on raku.guide? You could submit an issue to github.com/hankache/rakuguide. 16:15
kanliot you remove the appeal of simplicity if it requires expertise. anyhow I can't lecture you
i love raku.guide. i have a problem with "modern perl fourth edition" which gives me a headache 16:16
sorry if i was unclear
uzl[m] Np! 16:20
16:22 Kaiepi left 16:30 Kaiepi joined 16:52 dakkar left 17:09 daxim left 17:20 NODE left 17:22 dakkar joined, kensanata left, NODE joined
samcv AlexDaniel, i have looked at it now chloekek 17:24
17:33 daxim joined 17:41 NODE left 17:43 NODE joined
AlexDaniel samcv: but it's not just different unicode versions 17:49
samcv: people want to use it to render tui stuff in terminals
which will probably work in 99% of cases but this 1% will drown us with unfixable bug reports 17:50
if they want to know if something fits in the terminal then why don't they ask their terminal? :) 17:51
cpan-raku_ New module released to CPAN! DBIish::Transaction (1.0.3) by 03RBT 17:54
lizmat printf is grapheme based, and I think it should stay that way 18:01
which is already much better than printf's in other languages 18:02
18:02 hungrydonkey left
Grinnz if you want to know how something will physically fit in terminal columns, you need something smarter than printf 18:03
AlexDaniel lizmat: is it? when somebody writes “%3s” what do they even mean?
why would you even want exactly three graphemes 18:04
Grinnz consider full width characters also
lizmat I'm not saying having a better capability for something like that wouldn't be nice
Grinnz ah, i see that's what the conversation was about :)
lizmat but printf has a POSIX background, and in earlier discussions about adding features to it 18:05
18:05 aluaces joined
Grinnz yes, in Perl we use Unicode::GCString's "columns" method 18:05
lizmat it was decided to keep to the POSIX meaning of it
Grinnz (for terminal columns)
chloekek I think A good compromise would be to mention a module that implements terminal-aware spacing, once such a module exists.
Grinnz i don't think it would work well as a printf extension, because what do you do when someone tries to print two full-width characters and specifies a width of 3 columns 18:06
lizmat thing is, even something like the "columns" method, assumes a fixed width font
18:07 sena_kun joined
lizmat anybody creating a nice GUI would *not* use a fixed with font if they can help it 18:07
Grinnz of course, if you have to know about the particular font widths everything goes out the window
lizmat so feels to me, that the GUI system of choice, should figure out how much space a string needs
Grinnz yes, much like when dealing with CSS 18:08
chloekek What good is space padding with a proportional font?
AlexDaniel fixed-width or not, you just can't know how it's going to render
18:09 Altai-man_ left
Grinnz space padding would not be the appropriate approach in such cases 18:09
instead you'd need to align it to other components of the display
AlexDaniel: you can't know, but you can assume what will happen if it's properly displayed in fixed width 18:10
this would be essential for any TUI app
AlexDaniel “essential” 18:12
here lynx renders stuff in a fake window: github.com/ThomasDickey/lynx-snaps...es.c#L2240 18:13
18:14 vike1 joined 18:15 vike left 18:18 vike1 left 18:19 vike joined 18:24 dakkar left
samcv AlexDaniel, TUI? 18:24
AlexDaniel samcv: text-based/terminal user interface 18:25
samcv Ah terminal user interfaces. Well. We go by what unicode says. The end. If they make a bug report, we close it since we go with unicode spec on this, otherwise it needs to go in a module
it's not going to be guaranteed to be accurate. but only based on the unicode data. I think if we make that clear then that should be okay
18:29 sauvin left
samcv lizmat, yes it *is* the gui's job. unicode makes that clear. but also they understand that this is a useful use-case. previously they didn't want to change any of the width properties, but at least as far as I know, they changed their stance to allow changing tho east asian width for non-asian characters to accomodate it. So they don't guarantee it is perfect or even correct information, but just "better" than not having that information. 18:29
though. it can just be kicked to a module, regardless, so i guess the question is if it should exist in sprintf or not 18:32
and also, if it will add value to the language itself 18:33
lizmat you can use sprintf to convert any numerical value to a Str, then have another module take care of twiddling grapheme widths
AlexDaniel anything can add value, doesn't mean that everything should be in the language itself
samcv yep. that is true. 18:34
AlexDaniel also I'm a fan of naming things for what they actually do. %10w makes it look like it does something proper while :guess-rendered-length is a bit more transparent and better :) 18:36
vrurg I would say 'printf ..., :wide;' should be cheap enough to be considered.
AlexDaniel: no guessing. Only clear "use" or "don't". Things must be predictable. 18:37
samcv in addition, what are the pros and cons of letting a module do this. If them reimplementing sprintf is not really feasible. the options are to implement it or have some way people can plug into sprintf or something (just spitballing here, I haven't thought hard enough about all of this)
AlexDaniel vrurg: yeah, exactly why a feature like this should be called this way :P 18:38
vrurg AlexDaniel: perhaps because the feature should be "use 2 char if I ask you for this", not "try guessing if 2char should be used". 18:39
¯\_(ツ)_/¯ 18:40
AlexDaniel vrurg: “Some characters behave differently in an East Asian context than in a non-East Asian context” 18:41
vrurg: how do you define context without guessing?
vrurg If "context" is defined by surrounding symbols – it's not guessing, it's knowing. If it's defined by the purpose and destination of a string – then it's up to the user to determine the context. A 3rd party module can help him in this task. 18:43
But it's Raku job to do it.
samcv AlexDaniel, example? 18:44
vrurg Or I don't understand what 'context' means in this context. :)
AlexDaniel “Ambiguous characters behave like wide or narrow characters depending on the context (language tag, script identification, associated font, source of data, or explicit markup; all can provide the context). If the context cannot be established reliably, they should be treated as narrow characters by default.” 18:45
for terminals it seems to depend on the locale 18:46
samcv AlexDaniel, oh. well. unicode gives us values for all(not actually all but, some) characters. so go on that, and let that be it? i think you are talking about how unicode decides if something is wide or not?
vrurg AlexDaniel: and on a font used. I use DejaVu Mono because it fits most if not all wide-chars (like arrows) into a single position.
samcv though i need to read that document
vrurg Shoud Raku take care finding out what font am I using? 18:47
samcv vrurg, never
vrurg samcv: this is my point too.
AlexDaniel samcv: I'm talking about characters that unicode defines as East Asian Ambiguous
samcv ah yeah. fair enough 18:48
" If they are not used in context of the specific legacy encoding they belong to, their width resolves to narrow" hmm
so. that leads me to believe. that it is usually only wide if it's using a two byte encoding (DBCS) 18:49
and that is a bit out of our scope. so if I am right then those are just narrow, except if you're converting from some dual byte encoding (which we aren't since it's just a NFG unicode string) 18:50
vrurg Iterm2 has a configuration option "Ambiguous characters are double-width". So, this would most likely affect things too. 18:51
samcv vrurg, well. that is out of scope. we can't control what anybody else does with the data
AlexDaniel interesting bug report bugs.debian.org/cgi-bin/bugreport....bug=471021
19:08 pilne joined 19:09 abraxxa left 19:12 abraxxa joined 19:14 daxim left
chloekek Finally got around to writing a dark style sheet for docs.raku.org. 19:17
19:19 daxim joined
chloekek Even inverting the type graphs. :) 19:19
19:21 sjm_uk left 19:29 sjm_uk joined, upupbb-user1 joined 19:33 sjm_uk left 19:36 dustinm` left 19:39 Black_Ribbon joined, daxim left 19:40 dustinm` joined 19:45 daxim joined 20:00 upupbb-user1 left, veesh left, MasterDuke left 20:02 veesh joined 20:05 daxim left, rindolf left 20:06 Altai-man_ joined 20:07 MasterDuke joined 20:09 sena_kun left
lizmat just noticed that en.wikipedia.org/wiki/Raku_(progra..._language) has nothing about supplies,. channels, react / whenever 20:10
20:11 daxim joined
AlexDaniel lizmat: yes, but even our own docs don't talk enough about react/whenever :( 20:14
lizmat :-( 20:15
20:15 pilne left, pilne joined
chloekek p6: my (IO() $x) = "foo"; say $x 20:16
camelia foo
chloekek p6: my (IO() $x is copy) = "foo"; say $x
camelia foo
chloekek p6: my (:$x) = |{x => 1}; say $x; 20:17
camelia x => 1
AlexDaniel chloekek: how is this legal :D
chloekek > Signatures appear … as the input to variable declarators like my 20:18
p6: my (*@xs) = (1, 2, (3, 4), 5); say @xs
camelia [1 2 (3 4) 5]
chloekek p6: my (**@xs) = (1, 2, (3, 4), 5); say @xs
camelia [1 2 (3 4) 5]
AlexDaniel m: my ($x is wtf); $x = 42; say $x 20:19
camelia 42
lizmat feels to me it's parsing as a signature, but losing all of the extra info
chloekek p6: my ($x --> Str) = 1; say $x; 20:20
camelia 1
AlexDaniel m: my ($x returns Int) # not sure why this parses 20:22
camelia ( no output )
AlexDaniel but yeah you can do --> 42 and everything else and it is simply ignored
jnthn It *is* parsed as a signature
That's why you can write my ($x, :$y) := ...; to do destructuring 20:23
AlexDaniel jnthn: yeah but returns can't really be inside a signature, right? :)
20:23 caterfxo left
jnthn Sure, syntactically it's just a trait 20:23
The problem is that when we see it's just an assignment, we reduce it to a variable list and discard everything else
We never apply the trait
It should really be much stricter there 20:24
Though probably at a language version break so we don't turn ignored into boom.
AlexDaniel 6c: my (IO() $x) = "foo"; say $x # just in case
committable6 AlexDaniel, ¦6c (42 commits): «foo␤»
chloekek p6: my (IO() $x) = ‘foo’; say $x.raku
camelia "foo"
AlexDaniel 6c: my (IO() $x return 42) = "foo"; say $x # just in case
6c: my (IO() $x return Int) = "foo"; say $x # just in case
6c: my (IO() $x returns Int) = "foo"; say $x # just in case 20:25
committable6 AlexDaniel,