»ö« Welcome to Perl 6! | perl6.org/ | evalbot usage: 'p6: say 3;' or rakudo:, or /msg camelia p6: ... | irclog: irc.perl6.org or colabti.org/irclogger/irclogger_logs/perl6 | UTF-8 is our friend!
Set by moritz on 22 December 2015.
timotimo perlpilot: would you be interested in bringing your changes to synopsebot in line with masak's latest commit that makes it use a big grammar? 00:01
patrickz -> off to bed 00:22
timotimo i wonder what makes synopsebot die ... perhaps the number of processes it's allowed to spawn is still too low? 00:25
Could not spawn thread: errorcode -11
don't really know where to look for that errorcode :\
geekosaur EAGAIN? 00:26
timotimo that'd be the worst. 00:27
dalek kudo-star-daily: e3bda91 | coke++ | log/ (9 files):
today (automated commit)
00:52
timotimo collect.p6c.org/ - rejoice, www.p6c.org is now being collect'd 00:59
llfourn presentation I did for sydney.pm last night for anyone interested: github.com/LLFourn/p6-and-chill/bl...ill-01.org 01:20
it was fun and worked well. p5 people were quite engaged. 01:21
Hotkeys if I have a field "$.port" and want "is required" and a type constraint 01:22
do I put the constraint before or after 'is required'
llfourn Hotkeys: what kind of contraint?
Hotkeys a 'where' 01:23
where 0 <= * <= 65535
llfourn Hotkeys: for a subset? 01:23
no...for a parameter?
Hotkeys it's just a constraint not in a subset
eg
has $.port where 0 <= * <= 65535 (is required)
not sure if the is required should go after the where or before it
llfourn hmm i've never done that b4 01:24
m: class A { has $.a where True is required };
camelia rakudo-moar 5d7f65: OUTPUT«5===SORRY!5===␤Two terms in a row␤at /tmp/_c2zZu7RX7:1␤------> 3class A { has $.a where True7⏏5 is required };␤ expecting any of:␤ constraint␤ infix␤ infix stopper␤ postfix␤ statement end␤…»
llfourn m: class A { has $.a is required where True };
camelia rakudo-moar 5d7f65: OUTPUT«Potential difficulties:␤ Smartmatch against True always matches; if you mean to test the topic for truthiness, use :so or *.so or ?* instead␤ at /tmp/5txN0FMLkJ:1␤ ------> 3class A { has $.a is required where 7⏏5True };␤»
llfourn m: class A { has $.a where True };
camelia rakudo-moar 5d7f65: OUTPUT«Potential difficulties:␤ Smartmatch against True always matches; if you mean to test the topic for truthiness, use :so or *.so or ?* instead␤ at /tmp/c_WgeTYGWj:1␤ ------> 3class A { has $.a where 7⏏5True };␤»
llfourn m: class A { has $.a where "i'm an idiot" };
camelia ( no output )
Hotkeys lol
llfourn m: class A { has $.a is required where "I'm an idiot" }; 01:25
camelia ( no output )
Hotkeys neat
llfourn m: class A { has $.a where "I'm an idiot" is required };
camelia rakudo-moar 5d7f65: OUTPUT«5===SORRY!5=== Error while compiling /tmp/ZpnzcBzFYQ␤Two terms in a row␤at /tmp/ZpnzcBzFYQ:1␤------> 3class A { has $.a where "I'm an idiot"7⏏5 is required };␤ expecting any of:␤ constraint␤ infix␤ infix sto…»
Hotkeys I guess I probably could have just tested it myself
llfourn well now I get to learn something too :)
timotimo llfourn: "perl 6 and chill" is a bit cringe to me :S 01:35
llfourn timotimo: heh. Oh well. I like it. 01:36
timotimo i wonder what makes the average idle percentage only 67% 01:41
on www
but 16.8% is "wait" and 5.4% is system 01:42
and it's very frequent
llfourn what's this in reference to?
timotimo so, some cron job is either running on www for a surprisingly long time each time
collect.p6c.org/
llfourn looks 01:43
timotimo there's also outgoing packets in the same pattern 01:43
llfourn it does look a bit odd 01:45
timotimo crontab -e is only visitors which runs at 00:18 in the morning 01:46
at least i think that's how to read that?
let me look again
m is 18 and h is 0, the rest is *; so that's "once a day", right?
llfourn doesn't remember how to read crontab 01:47
looks like every 5m?
timotimo seems so
llfourn it seesm to last for a while so top?
timotimo could be updatelist.pl for the ecosystem? 01:49
llfourn timotimo: well if that's running on that machine sounds like a good theory 01:50
might not be using cron
timotimo hm, no, looks like froggs rsync task 01:50
for cpandatesters
.tell froggs if you look at the cpu plugin from the www host on collect.p6c.org i *think* the spikes that happen every 5 minutes are from rsync for cpandatesters; can we perhaps make that a bit smarter? 01:52
yoleaux timotimo: I'll pass your message to froggs.
timotimo i think i ought to go sleepysleep soon
Herby__ Evening, everyone! 02:38
Herby__ \o 02:42
AlexDaniel :) 02:43
MadcapJake what do i do with this "Absolute tolerance must be a positive number greater than zero" error when i use «is-approx» 03:44
skids MadcapJake: Hrm. That seems to happen when you don't leave any text for the test. 04:04
orbus m: use Test; is-approx(2.71828, e) 04:05
camelia rakudo-moar 5d7f65: OUTPUT«Absolute tolerance must be a positive number greater than zero␤ in sub is-approx at /home/camelia/rakudo-m-inst-2/share/perl6/sources/C712FE6969F786C9380D643DF17E85D06868219E line 251␤ in block <unit> at /tmp/TB9A0zOVN8 line 1␤␤»
orbus m: use Test; is-approx(2.71828, e, "blah")
camelia rakudo-moar 5d7f65: OUTPUT«ok 1 - blah␤»
orbus well that's interesting
MadcapJake oh you need the message? weird
skids m: use Test; &is-approx.candidates».signature.say 04:06
camelia rakudo-moar 5d7f65: OUTPUT«((Numeric $got, Numeric $expected, $desc = { ... }) (Numeric $got, Numeric $expected, Numeric $tol, $desc = { ... }) (Numeric $got, Numeric $expected, Numeric :$rel_tol = { ... }, Numeric :$abs_tol = { ... }, :$desc = { ... }))␤»
orbus maybe it's defaulting rel_tol to a numeric 04:07
like 0
or actually I guess $tol
MadcapJake is there a way to change how approximate it is? otherwise I can't use it
orbus well based on that signature it looks like you can... 04:08
skids :abs_tol ?
or :rel_tol
MadcapJake ohh weird, that's not mentioned in language/testing
orbus or just tol 04:08
not sure what the differences are
skids well, rel_toll would normalize somehow. 04:09
probably $tol and :$abs_tol are just convenience synonyms. 04:10
MadcapJake sweet! that works swimmingly!
orbus m: use Test; is-approx(.35678,.34,.01)
camelia rakudo-moar 5d7f65: OUTPUT«not ok 1 - ␤␤# Failed test at /tmp/HPYFHenqpR line 1␤# expected: 0.34␤# got: 0.35678␤»
skids wonders why the dispatch does that without the $desc
orbus m: use Test; is-approx(.35678,.34,.1) 04:11
camelia rakudo-moar 5d7f65: OUTPUT«ok 1 - ␤»
orbus yeah, it's interesting
skids O I guess 3 parms + no opt does beat 2 parms + opt 04:12
orbus what does the = { ... } mean in those signatures? 04:17
optional?
gfldex m: my &c = { ... }; say &c.WHAT; 04:18
camelia rakudo-moar 5d7f65: OUTPUT«(Block)␤»
gfldex m: my &c = { ... }; say c();
camelia rakudo-moar 5d7f65: OUTPUT«Stub code executed␤ in block <unit> at /tmp/wJkYgk9ht7 line 1␤␤»
skids optional with a default. 04:18
m: sub a ($a, $b = 4) { }; &a.signature.say 04:19
camelia rakudo-moar 5d7f65: OUTPUT«($a, $b = { ... })␤»
gfldex m: my &c = { ... }; say c(); CATCH { default { .WHAT.say } }
camelia rakudo-moar 5d7f65: OUTPUT«(StubCode)␤»
gfldex m: my sub a ($a, $b = 4) { }; &a.signature.params[1].say; CATCH { default { .WHAT.say } } 04:21
camelia rakudo-moar 5d7f65: OUTPUT«$b = { ... }␤»
gfldex m: my sub a ($a, $b = 4) { }; &a.signature.params[1].WHAT.say; CATCH { default { .WHAT.say } }
camelia rakudo-moar 5d7f65: OUTPUT«(Parameter)␤»
orbus m: multi blah(Numeric $a, Numeric $b, $d) {say $d}; multi blah(Numeric $a, Numeric $b, $c, :$d=5) {say $c; say $d}; blah(1,2,3)
camelia rakudo-moar 5d7f65: OUTPUT«3␤5␤»
skids m: my sub a ($a, $b = 4) { }; &a.signature.params[1].default.WHAT.say; 04:22
camelia rakudo-moar 5d7f65: OUTPUT«(Block)␤»
skids m: my sub a ($a, $b = 4) { }; &a.signature.params[1].default().say;
camelia rakudo-moar 5d7f65: OUTPUT«-> ;; $_? is raw { #`(Block|76760864) ... }␤»
skids m: my sub a ($a, $b = 4) { }; &a.signature.params[1].default()().say;
camelia rakudo-moar 5d7f65: OUTPUT«4␤»
gfldex looks like overgeneralisation to me 04:23
likely a source for rakudoslow 04:24
skids You mean you'd prefer simple constants to appear naked?
gfldex i would prefer good introspection in that case, what would require a friendly 4 to be displayed
skids Yes actually, MMD uses the string of the signature currently, and that probably is slow.
Ben_Goldberg m: sub a ($a, $b = 4) { }; &a.signature.params[1].default.().perl.say 04:26
camelia rakudo-moar 5d7f65: OUTPUT«4␤»
orbus m: multi blah(Numeric $a, Numeric $b, $d=7) {say $d}; multi blah(Numeric $a, Numeric $b, Numeric $c, $d=5) {say $c; say $d}; blah(1,2) 04:32
camelia rakudo-moar 5d7f65: OUTPUT«7␤»
Hotkeys does the documentation mention enums at all?
orbus yeah, I don't get why is-approx is acting that way
Hotkeys I've seen them in action but a quick search for enum gives no results
orbus design.perl6.org/S12.html#Enumerations 04:34
gfldex Hotkeys: they do "mention" enums, see first example of doc.perl6.org/type/IO::Notification
Hotkeys I suppose
I feel like they should have a page of their own
skids When the docs fail, consult the design docs: design.perl6.org/S12.html#Enumerations 04:35
gfldex they should become documented in doc.perl6.org/language/typesystem
enum is a type declarator
Hotkeys skids: thanks
gfldex there where late changes to enums. S?? may be incomplete or missleading. Read roast if you want to be sure. 04:37
skids At some point a week should be picked to "whirlpool" stuff back into the design docs. 04:38
Hotkeys heh
I like the reference here i.imgur.com/q2PD51z.png
sortiz . 05:08
FROGGS .tell timotimo how so? 07:28
yoleaux 01:52Z <timotimo> FROGGS: if you look at the cpu plugin from the www host on collect.p6c.org i *think* the spikes that happen every 5 minutes are from rsync for cpandatesters; can we perhaps make that a bit smarter?
FROGGS: I'll pass your message to timotimo.
[Tux] test 22.463 07:38
test-t 12.043
csv-parser 51.560
[Tux] say I want to count all characters "a" and "b" in a string and get a hash with the counts of each. What is the most perl6'ish way to do that? 07:45
nine classify comes to mind. Also a Hash that just counts how often a key was added exists: doc.perl6.org/type/Bag 07:46
FROGGS m: say 'say I want to count all characters "a" and "b"'.comb.Bag<a b> 07:47
camelia rakudo-moar 5d7f65: OUTPUT«(7 1)␤»
nine There's power in coercers 07:48
[Tux] FROGGS++
[Tux] Than this is a timy bit counterinituative: 07:51
m: my@x=<a b>;say "How many characters does this bag have?".comb.Bag(@x)
camelia rakudo-moar 5d7f65: OUTPUT«Too many positionals passed; expected 1 argument but got 2␤ in block <unit> at /tmp/Ne1pqxS3Rk line 1␤␤»
MadcapJake how would you modify a class' method? Will a role's methods override? Is there another way? 07:52
nine m: my@x=<a b>;say "How many characters does this bag have?".comb.Bag($@x)
camelia rakudo-moar 5d7f65: OUTPUT«Too many positionals passed; expected 1 argument but got 2␤ in block <unit> at /tmp/qoPDhppQkI line 1␤␤»
nine huh?
[Tux] indeed, I was guessing the one-arg rule would apply
nine oh...of course, Bag doesn't have arguments
it _returns_ a Bag which is associative
[Tux] ahhhhhh 07:53
nine m: my@x=<a b>;say "How many characters does this bag have?".comb.Bag{@x}
camelia rakudo-moar 5d7f65: OUTPUT«(5 1)␤»
nine is now quietly waiting for the coffee to kick in
[Tux] sooooooooo nice :)
MadcapJake does «add_method» overwrite methods with the same name? 07:54
FROGGS MadcapJake: no, you'll get an error 07:54
MadcapJake is there a way to add a method of a class outside of the class' body?
FROGGS MadcapJake: I think you can .^mixin a role containing said method
MadcapJake and it will overwrite a method inside the class? 07:55
FROGGS yes, that's our slangs currently work
how our*
I mean, it kinda is a hack, but it works
moritz m: say (42 but role { method sqrt() { 12 } }).sqrt
camelia rakudo-moar 5d7f65: OUTPUT«12␤»
MadcapJake is there any way to replace it in-place? 07:56
[Tux] sorry for being slow, but this way I only get the counts. The "ideal" result in my case would be a Bag that *only* holds the characters in @x 08:00
bioexpress Hello! With Perl 5 I can write `use Module::Name "function";` even if "function" is exported automatically. 08:05
This way I can see in my code immediately where the function comes from.
Why has this possibility been removed in Perl 6?
Ven_ it hasn't
m: use Test <is>; is 1, 3;
camelia rakudo-moar 5d7f65: OUTPUT«5===SORRY!5=== Error while compiling /tmp/3VBGRdh9Vt␤Error while importing from 'Test':␤no EXPORT sub, but you provided positional argument in the 'use' statement␤at /tmp/3VBGRdh9Vt:1␤------> 3use Test <is>7⏏5; is 1, 3;␤»
hippie m: my @x = <a b>; my %y; %y{@x} = 'this that and the other, balloons and bananas'.comb.Bag{@x}; say %y # Tux?
camelia rakudo-moar 5d7f65: OUTPUT«a => 7, b => 2␤»
Ven_ mej 08:05
FROGGS m: my@x=<a b>;say "How many characters does this bag have?".comb.Bag{@x}:kv 08:06
camelia rakudo-moar 5d7f65: OUTPUT«(a 5 b 1)␤»
[Tux] :kv of course
FROGGS m: my@x=<a b>;say "How many characters does this bag have?".comb.Bag{@x}:kv.hash
camelia rakudo-moar 5d7f65: OUTPUT«a => 5, b => 1␤»
[Tux] did too much perl5 lately
FROGGS :o)
[Tux] somehow expected «say %hash.keys» to be shortcutted to «say %hash:k» :P 08:12
Ven_ that'd be an adverb on say 08:13
moritz PSA: due to the glibc security bug, I'll have to reboot hack and its companions Very Soon[tm] 08:18
(unless somebody knows a way to ensure the old glibc isn't kept in memory anymore)
jast kill all processes, Problem Solved (tm) 08:21
[Tux] 73 lines of perl5 compress to 18 lines of perl6 08:26
not completely fair, as perl6 does not need to deal with BOM's, but still
cosimo moritz: REBOOT ALL THE THINGS 08:30
moritz jast: heh, you here. I'm having #git feelings right now :-) 08:30
DrForr There are editors out there that set us up the BOM on UTF-8 files though. 08:42
moritz but doesn't Perl 6 handle those automatically? 08:43
FROGGS it does 08:44
moritz so it's completely fair to include that difference 08:45
allright, I'll reboot the hypervisor and all the VMs (hack, www) now
08:45:55 up 435 days, 20:03, 2 users, load average: 1.45, 0.94, 0.84 08:46
I do feel a bit sorry about ending that update
*uptime
[Tux] m: 'class C { method foo (Str $s, Array @a = < a b >; Bool $flag = False) { 1; }}; say C.new.foo("a") 08:47
camelia rakudo-moar 5d7f65: OUTPUT«5===SORRY!5=== Error while compiling /tmp/xv4FzbpvE3␤Unable to parse expression in single quotes; couldn't find final "'" ␤at /tmp/xv4FzbpvE3:1␤------> 3lag = False) { 1; }}; say C.new.foo("a")7⏏5<EOL>␤ expecting any of:␤ sing…»
[Tux] m: class C { method foo (Str $s, Array @a = < a b >; Bool $flag = False) { 1; }}; say C.new.foo("a")
camelia rakudo-moar 5d7f65: OUTPUT«Type check failed in binding @a; expected Positional[Array] but got List␤ in method foo at /tmp/iMjGE4JxLL line 1␤ in block <unit> at /tmp/iMjGE4JxLL line 1␤␤»
[Tux] s/;/, 08:48
m: class C { method foo (Array @a = < a b >) { 1; }}; say C.new.foo() 08:50
camelia rakudo-moar 5d7f65: OUTPUT«Type check failed in binding @a; expected Positional[Array] but got List␤ in method foo at /tmp/30XnIDTKfU line 1␤ in block <unit> at /tmp/30XnIDTKfU line 1␤␤»
[Tux] m: class C { method foo (Array @a = [< a b >]) { 1; }}; say C.new.foo()
camelia rakudo-moar 5d7f65: OUTPUT«Type check failed in binding @a; expected Positional[Array] but got Array␤ in method foo at /tmp/us1ZPtbb1s line 1␤ in block <unit> at /tmp/us1ZPtbb1s line 1␤␤»
moritz eeks, the hypervisor isn't coming up again 08:51
[Tux] m: class C { method foo (Array $a = [< a b >]) { 1; }}; say C.new.foo()
camelia rakudo-moar 5d7f65: OUTPUT«1␤»
moritz I'll have to trod over to the data center later on :/
jast moritz: "#git feelings" sounds kind of ominous 08:58
and it does seem to have killed your hypervisor. sorry. :( 08:59
MadcapJake i think the p6c server is down 09:04
ahh i see, nevermind me :P 09:05
[Tux] m: class C { method foo (Str $s, Str $fold = "lc") { say $s; say $fold }};C.new.foo("x");C.new.foo("x",fold => "x") 09:25
camelia rakudo-moar 5d7f65: OUTPUT«x␤lc␤x␤lc␤»
[Tux] so, why is $fold "lc" and not "x" on the second invocation? 09:26
ah, : missing 09:27
FROGGS [Tux]: declare it as a named
aye
azawawi hi 09:27
is doc.perl6.org working or not?
i cant seem to access it
DrForr Hypervisor problem apparently. 09:28
azawawi i see 09:28
DrForr: hi :)
DrForr waves. 09:30
azawawi raw.githubusercontent.com/DanBrook...-icons.png # Please let me know your feedback for a suitable perl6 icon 09:34
moritz hack is back up 09:34
... and www too 09:35
I don't know what happend to the hypervisor; the first thing I did when I arrived was setting the reset button
and by the time I had a console wired up, it was running nicely
azawawi cool 09:36
moritz++
moritz on my workstation at home I have a bug that a 'reboot' does the same as 'halt' (that is, halting the OS without powering down the hardware -- whatever that's supposed to be good for)
moritz maybe it's the same on that server 09:36
I guess I never rebooted it before :-)
FROGGS azawawi: camelia is problematic for that icon size? 09:37
stmuk rebooting -- the MSCE fix ;) 09:38
azawawi FROGGS: yup 09:38
FROGGS: too much detail
azawawi FROGGS: pasteboard.co/1uqPo9c8.png 09:39
jast why do none of these stupid sites work without javascript 09:40
[Tux] All tests successful.
Files=28, Tests=22307, 29 wallclock secs ( 2.92 usr 0.18 sys + 82.35 cusr 1.66 csys = 87.11 CPU)
Result: PASS
Text::CSV_XS.header now ported to p6' Text::CSV 09:41
FROGGS azawawi: a butterfly (rotated like the original) might still work... we don't need the P and 6 in the wings... 09:41
azawawi FROGGS: will try an outline then 09:42
azawawi now the next question what icon color represents camelia? :) 09:43
DrForr Bikeshed brown. 09:43
jast anything bright and friendly will do, I guess 09:44
azawawi thanks for the feedback 09:45
azawawi starts working on it
RabidGravy MARNING 10:13
sortiz \o RabidGravy 10:14
azawawi modules.perl6.org/ # 503 error 10:26
moritz gaaaah, we *still* have no service file for starting that mojo app :( 10:27
RabidGravy is anyone looking at the e.g. github.com/perl6/gtk-simple/issues/23 ? (summary something changed in require and broke panda) 10:31
azawawi any chance we could add line number information to the module-not-found message "Could not find Foo::Bar in: <back-trace>"? 10:34
azawawi RabidGravy: our travis CI testing methodology is flawed btw 10:35
RabidGravy: and hi... how are you doing? :)
RabidGravy I'm fabulous!
azawawi RabidGravy: we test `prove -ve t` but not `panda install .` 10:36
azawawi RabidGravy: hence META.info can be wrong, deps can wrong, bad resources, ...etc 10:36
RabidGravy I've got at least one module that *does* do that 10:38
azawawi which one? 10:40
moritz: any chance we could add line number information to the module-not-found message "Could not find Foo::Bar in: <back-trace>"?
azawawi moritz: right now when an error occurs in atom editor / perl 6 tools plugin, it is always on line #1... since there is no line number 10:40
viralbus Hi there! I'm new to Perl6 (but I've used Perl since Perl 4 days). I have a question regarding Unicode strings and regexes: If I have a string defined like this: my $x = "a\c[COMBINING ACUTE ACCENT]" and I want to replace the acute accent with another one, the following doesn't work: $x ~~ s/\c[COMBINING ACUTE ACCENT]/\c[COMBINING DOT ABOVE]/; 10:42
El_Che do I understand correctly that panda will create .precomp files? I am putting a perl6 app in docker on a disposable container (will be reactreated each time it runs)
viralbus I presume that's because the character and the accent have been combined into one, but how to I run a regex on the .NFD form? $x.NFD ~~ s/........ doesn't seem to work, either. 10:44
azawawi El_Che: my understanding is that the rakudo perl6 process creates those folders 10:45
RabidGravy yeah, it gets created in the repo that the module was found when the module is loaded 10:45
viralbus I can't help thinking that the proper way to do this ought to be something like $x ~~ s:nfd/\c[COMBINING ACUTE ACCENT]/\c[COMBINING DOT ABOVE]/ but when I tried that, I got "Adverb nfd not allowed on substitution.". :-( 11:04
Skarsnik hm, you can't new a parameter type? my Pointer[mxml_node_t] $child = Pointer[mxml_node_t].new($i); fail with Type check failed in assignment to $child; expected NativeCall::Types::Pointer[MiniXML::Raw::mxml_node_t] but got NativeCall::Types::Pointer 11:15
I tried with .= new it does not work etheir
arnsholt It's an issue with how the parameterized types are created in NativeCall 11:16
I've worked on fixing it, but haven't had time to complete it
jnthn arnsholt: Using 6pe? 11:17
jnthn (6model parametric extensions) 11:17
Skarsnik damn 11:17
RabidGravy I just can't replicate the way that panda is failing with the redefinition of 'Build' 11:27
sortiz Skarsnik, I working on fixing DBIish, now passing tests. \o/ 11:29
*I'm 11:30
viralbus So to rephrase my question: To replace a Unicode modifier in a string, what's the best alternative to $x ~~ s:nfd/\c[COMBINING ACUTE ACCENT]/\c[COMBINING DOT ABOVE]/ ? Also, is the :nfd adverb going to be implemented at some point (I saw it mentioned on a couple of web pages, but I'm not sure they were authoritative)? 11:33
jnthn viralbus: We plan to support regexes at levels other than graphemes eventually 11:36
(In some future Perl 6 version)
jnthn Someone else may have a better idea, but the first thing that comes to mind is to do something with .NFD.list.map(...) and the map will map the combining chars as needed 11:38
m: samemark 11:39
camelia rakudo-moar 5d7f65: OUTPUT«5===SORRY!5=== Error while compiling /tmp/y9B4GXNLRe␤Calling samemark() will never work with any of these multi signatures:␤ ($s, $pat)␤at /tmp/y9B4GXNLRe:1␤------> 3<BOL>7⏏5samemark␤»
jnthn aha
I think samemark is also useful for this kind of thing
moritz iirc samemark replaces the base character, not the mark 11:39
viralbus jnthn: Thanks, that's useful! 11:41
lokien hey guys, can you help me with some text parsing? 11:45
DrForr Good question. What's the text? In a pastebin, if you please. 11:45
lokien pastebin.com/kS96ZtVC 11:46
I need only packages names, without commas and things in parentheses
moritz lokien: seems straight forward to me. What have you tried so far? 11:48
jnthn m: say 'qml-module-org-kde-kio:amd64 (5.15.0-0ubuntu1, automatic), kde-telepathy-minimal:amd64 (15.04.20ubuntu1, automatic), liboxygenstyle5-5:amd64 (5.4.2-0ubuntu1, automatic)'.comb: /<[\w-]>+ )> ':'\w+ ' ('/
camelia rakudo-moar 5d7f65: OUTPUT«(qml-module-org-kde-kio kde-telepathy-minimal liboxygenstyle5-5)␤»
jnthn hah, got it in one :P
lokien nothing, I'm a noob :^(
jnthn
.oO( why isn't the rest of my code going like that today... )
11:49
moritz m: say 'qml-module-org-kde-kio:amd64 (5.15.0-0ubuntu1, automatic), kde-telepathy-minimal:amd64 (15.04.20ubuntu1, automatic), liboxygenstyle5-5:amd64 (5.4.2-0ubuntu1, automatic), k3b-data:amd64 (2.0.3-0ubuntu3, automatic), kimageformat-plugins:amd64 (5.15.0-0ubuntu1)'.split(/\,\s+).map({ .split(':')[0]})
camelia rakudo-moar 5d7f65: OUTPUT«5===SORRY!5=== Error while compiling /tmp/_Ez76R42C6␤Unable to parse regex; couldn't find final '/'␤at /tmp/_Ez76R42C6:1␤------> 3ns:amd64 (5.15.0-0ubuntu1)'.split(/\,\s+7⏏5).map({ .split(':')[0]})␤ expecting any of:␤ argument…»
moritz m: say 'qml-module-org-kde-kio:amd64 (5.15.0-0ubuntu1, automatic), kde-telepathy-minimal:amd64 (15.04.20ubuntu1, automatic), liboxygenstyle5-5:amd64 (5.4.2-0ubuntu1, automatic), k3b-data:amd64 (2.0.3-0ubuntu3, automatic), kimageformat-plugins:amd64 (5.15.0-0ubuntu1)'.split(/\,\s+/).map({ .split(':')[0]})
camelia rakudo-moar 5d7f65: OUTPUT«(qml-module-org-kde-kio automatic) kde-telepathy-minimal automatic) liboxygenstyle5-5 automatic) k3b-data automatic) kimageformat-plugins)␤»
moritz m: say flat 'qml-module-org-kde-kio:amd64 (5.15.0-0ubuntu1, automatic), kde-telepathy-minimal:amd64 (15.04.20ubuntu1, automatic), liboxygenstyle5-5:amd64 (5.4.2-0ubuntu1, automatic), k3b-data:amd64 (2.0.3-0ubuntu3, automatic), kimageformat-plugins:amd64 (5.15.0-0ubuntu1)'.split(/\,\s+/).map({ .split(':')[0]})
camelia rakudo-moar 5d7f65: OUTPUT«(qml-module-org-kde-kio automatic) kde-telepathy-minimal automatic) liboxygenstyle5-5 automatic) k3b-data automatic) kimageformat-plugins)␤»
moritz ah no, doesn't work that easily 11:50
jnthn :)
jnthn Yeah, that's why I reached for .comb...felt easier to say what I did want 11:50
DrForr lokien: Maybe theperlfisher.blogspot.com/2016/02/...rs-pt.html would help? 11:50
jnthn And by nomming the opening paren you make sure you don't get false positives from stuff inside of them 11:50
lokien DrForr: thank you :) 11:51
DrForr (I do feel a touch awkward about pimping my own tutorials, but if not me, who? 11:52
DrForr s/$/)/ 11:52
lokien if it's good, why not :D DrForr 11:54
moritz it's totally fine 11:56
as long as you don't start off-topic spamming :-)
lokien jnthn: why doesn't perl print the entire thing? :^( 11:56
lokien it's (blah blah blah ...) 11:56
why not (blah blah blah blah blah) :^(
viralbus m: my $x = "a\c[COMBINING ACUTE ACCENT]"; say $x.NFD.list.map({$_ == ord("\c[COMBINING ACUTE ACCENT]")?? ord("\c[COMBINING DOT ABOVE]")!! $_}).chrs; 11:58
camelia rakudo-moar 5d7f65: OUTPUT«ȧ␤»
jnthn lokien: Because you did say, not print? :)
lokien jnthn: oh, right! silly me :D
jnthn lokien: But more idiomatic is to probably .join(', ') or however you want them joined
lokien jnthn: I want them joined by spaces 11:59
jnthn OK, then .join(' ') 11:59
Skarsnik lokien, use .perl and not gist? 11:59
lokien good ol netsplit
Skarsnik these netsplit today 11:59
viralbus So that works -- thanks! However, $x ~~ s:nfd/.../.../ would have been much prettier. :-/ 11:59
lokien jnthn: why would I do that? they're printed with spaces already 11:59
jnthn lokien: Explicitness? :) 12:00
dalek Iish/sortiz-fix_require: 983e4b1 | (Salvador Ortiz)++ | .gitignore:
Update .gitignore
12:00
Iish/sortiz-fix_require: abf4dde | (Salvador Ortiz)++ | lib/DB (2 files):
Fix dinamic drivers loading

Somewho require wasn't working and the instantation of the class failed. With an explicit search in the package works. Also add a cache of loaded drivers.
Iish/sortiz-fix_require: 4047025 | (Salvador Ortiz)++ | lib/DBDish/Pg (3 files):
Optimize modules loading
Iish/sortiz-fix_require: 3ea08b5 | (Salvador Ortiz)++ | lib/DBDish/Pg/Native.pm6:
Move ENV var resolution to runtime
lokien jnthn: oh, oh! it's broken! :D 12:00
jnthn lokien: But yeah, for just spaces you can save some chars 12:00
lokien m: say 'kdepim-runtime:amd64 (15.08.2-0ubuntu1, automatic)'.comb: /<[\w-]>+ )> ':'\w+ ' ('/ 12:01
camelia rakudo-moar 5d7f65: OUTPUT«(kdepim-runtime)␤»
lokien whaaa 12:02
lokien m: say 'libkf5kdelibs4support-data:amd64 (5.15.0-0ubuntu1, automatic)'.comb: /<[\w-]>+ )> ':'\w+ ' ('/ 12:02
camelia rakudo-moar 5d7f65: OUTPUT«(libkf5kdelibs4support-data)␤»
lokien m: say 'libxfreerdp-client1.1:amd64 (1.1.0~git20140921.1.440916e+dfsg1-5ubuntu1, automatic)'.comb: /<[\w-]>+ )> ':'\w+ ' ('/ 12:03
camelia rakudo-moar 5d7f65: OUTPUT«(1)␤»
lokien this one!
FROGGS lokien: you can also privmsg camelia if you wanna try many things
lokien jnthn: broken!! :D
lokien FROGGS: sorry, I was sure it'll work every time. but it didn't. I won't do that again 12:03
FROGGS lokien: np 12:04
FROGGS lokien: if you have questions, you can run an example here and ask for help 12:05
lokien: but if you want to try many things, privmsg with camelia is better
lokien FROGGS: I just wanted to show jnthn his script is broken in some cases :(
moritz you need to relax the \w+ a plus 12:06
moritz you can write ':'\S+\s', automatic' for example 12:06
Skarsnik well it a quick solution, obviously it need more work to handle every case x) 12:06
but dpkg does not give you a better output? 12:07
lokien so I'll try to fix it. hope my pc won't catch fire
lokien Skarsnik: it's a file from my apt history, I want to purge kde 12:07
Skarsnik there was not a meta package for that? 12:08
jnthn lokien: Glancing quickly, that name has a . in it, so you'd need to add . to that first char class
lokien Skarsnik: sadly, no. one has to find and uninstall 10000 packages manually 12:09
jnthn: thanks
Skarsnik I need to use === to compare a Pointer to Pointer (NULL) ? 12:10
FROGGS or +ptr == +ptr 12:13
arnsholt jnthn: Yeah, I think I have a half-done NativeCall with 6pe branch somewhere 12:13
sortiz In branch DBIish/sortiz-fix_require the fix for the issue reported yesterday, I appreciate some review before merge. 12:15
Skarsnik did you fix only the require stuff? 12:16
for me it's a rakudo bug probably x)
sortiz Can be a rakudo bug, but now it works. All tests passed and allows me to work in the array stuff. 12:19
Skarsnik nice you patched the env stuff ^^ 12:20
sortiz I fix also the problem with the env vars captured at compile time, I move it's resolution to runtime.
Skarsnik I don't like this solution because it use NC internals xD
sortiz Yep, and implement a cache of loaded drivers to avoid a double require. :) 12:21
I know that you don't be so happy with it, but need to fix it any way, later can discuss a better way. 12:22
arnsholt Hmm, wait. Looks like that stuff is merged actually 12:23
Skarsnik I am not fan of the changes in the need/use/important, but avoiding the double require is nice 12:24
*import
RabidGravy :-\ 12:25
RabidGravy what is going on with this network today 12:25
Skarsnik hm repeat is supposed to always be executed once? (and the conditio evalued after?) 12:26
arnsholt Skarsnik: I was wrong about the Pointer stuff. That's supposed to work (and mostly does, I think), but the "Pointer.new($address)" constructor is bugged, it seems
Skarsnik it does not return a parametred object? 12:27
arnsholt Looking at the code, I think not 12:27
In the address constructors, try replacing ::?CLASS with self.WHAT
dalek Iish: 983e4b1 | (Salvador Ortiz)++ | .gitignore:
Update .gitignore
12:28
Iish: abf4dde | (Salvador Ortiz)++ | lib/DB (2 files):
Fix dinamic drivers loading

Somewho require wasn't working and the instantation of the class failed. With an explicit search in the package works. Also add a cache of loaded drivers.
Iish: 4047025 | (Salvador Ortiz)++ | lib/DBDish/Pg (3 files):
Optimize modules loading
Iish: 3ea08b5 | (Salvador Ortiz)++ | lib/DBDish/Pg/Native.pm6:
Move ENV var resolution to runtime
Iish: 5f79574 | RabidGravy++ | / (6 files):
Merge pull request #51 from perl6/sortiz-fix_require

Fix for #50
Skarsnik You should do the other driver for the env fix if you are willing ^^ 12:29
sortiz arnsholt, yesterday I was asking about that ::?CLASS, without answers ;) 12:30
arnsholt I wasn't here for that =) 12:32
sortiz Ups! 12:32
Skarsnik I have a weird bug with a repeat { } while loop 12:33
masak Skarsnik: bring it. 12:34
Skarsnik Don't know how to golf it
masak (pref'r'bly golf'd)
masak :) 12:34
don't know *yet* how to golf it
Skarsnik gist.github.com/Skarsnik/cdcfcb15e766913970c8 12:36
if you look at it the =has child= string should always be followed by a 'BUILD-TREE-CHILD'
sortiz I'll fix the others drivers on the env var issue. 12:36
Skarsnik but it get skipped 12:37
Skarsnik The code miss me children of the xml document because of that x) 12:38
Skarsnik Great it's a variant of the { loop() {} } bug that was giving failure after x-mas 12:40
I added a 0; after the loop and it work 12:41
sortiz mysql driver lacks a version number, that cause that the development libraries must be installed for it to work, the issue #47, I will use v18, the one on my system. Comments? 12:45
Skarsnik Nop 12:46
v16-v22 work
I think I have 22 here
lucasb will there be a release this weekend or it will get postponed? 12:47
Skarsnik 14-18, not 22 ><
dalek kudo/nom: 8ab2b85 | lizmat++ | src/core/Str.pm:
Cosmetic fix for better highlighting
12:48
Skarsnik I mean mysqlclient does not have a api version fixed. 18 is probably fine but I am pretty sure DBIish work with 16
lucasb can someone merge this PR? github.com/rakudo/rakudo/pull/710 12:50
sortiz Ok, but we need to think in a way that allows end users to use it without need to install development libraries.
lizmat lucasb: looking at it now 12:51
lucasb lizmat: thank you :) 12:52
sortiz And not need to set the env var unless the have special requirements. 12:52
dalek kudo/nom: 7a8d085 | lizmat++ | src/core/Str.pm:
Move LSM class closer to client

To allow for easier refactoring
12:52
Skarsnik segfault in display is annoying x) 12:55
RabidGravy Okay, in the circumstance that panda gets a module's Build.pm the "Build" gets in the LEXICAL::GLOBALish:: but not in GLOBAL:: and ::("Build") is not finding the symbol, does that mean that ::() needs fixing or is there another way of doing this? 12:56
Skarsnik could be tied to the require ::() stuff? 12:58
RabidGravy but more importantly GLOBAL::<Build>:delete isn't deleting anything hence the redefinition error
almost certainly
lizmat RabidGravy: have you tried GLOBAL::.DELETE-KEy('Build') ? 12:59
*KEY
Skarsnik well :delete should work? 13:00
RabidGravy yeah, I'm curious as to why there would be a difference
lizmat :delete is syntactic sugar allowing for deleting slices and such
I would just want to check whether the sugar is getting in the way somehow
Skarsnik is there a way to remove the Use of uninitialized value of type blabla in String context? 13:01
lizmat Skarsnik: afaik, that warning was put there for a reason
Skarsnik well it's annoying when debugging 13:02
I mean, just replace with '' if it's undef x)
dalek kudo/nom: 5dfdc11 | (Salvador Ortiz)++ | src/core/Exception.pm:
Exception.fail should reliably die if outside of a routine

A straight port of github.com/rakudo/rakudo/commit/31...ff9d239cd8
kudo/nom: f5a712f | lizmat++ | src/core/Exception.pm:
Merge branch 'patch-1' of github.com/salortiz/rakudo into salortiz-patch-1
kudo/nom: bcab502 | lizmat++ | src/core/Exception.pm:
Merge branch 'salortiz-patch-1' into nom
Skarsnik hm look like I have a missized union 13:05
lizmat Skarsnik: without the warning, you might not have found out ? 13:07
Skarsnik na it segfault
lizmat :-(
RabidGravy lizmat, It's not the deleting that is the problem, it's that the symbol isn't in the GLOBAL:: to be deleted at all :-\ 13:09
RabidGravy I can actually reproduce now by running Panda::Build.build twice 13:11
RabidGravy but yeah, the ::() isn't finding the symbol even though I can see it, so It needs to be fixed 13:15
sortiz RabidGravy, In DBIish I had to be very specific to make ::($foo).new() work. 13:21
stmuk "Don't know how to 'no warnings' just yet 13:22
any work around? I am finding the nativecall version nagging annoying
RabidGravy CONTROL { when X::Warni { $_.resume } }; or something like that 13:23
jnthn CX::Warning I think 13:24
Skarsnik it's not a warning x) 13:27
it's a note
jnthn :/ 13:28
stmuk I just used X::Warn to make warnings fatal by mistake so I'm getting there :) 13:29
CX::Warn even
Skarsnik Could be raise to a warning maybe? 13:31
jnthn Sounds like 13:31
Modules really shouldn't note
jnthn (Unless they're expected to do output to stderr as part of their useful function) 13:32
sortiz stmuk, About versions, are you talking about the detail with mysql in DBIish?
stmuk its not DBIish .. it's SDL2::Raw .. but I get the version warnings with most nativecall modules 13:33
jnthn Is the warning worth it? 13:35
Skarsnik well they forget to give a version
flussence I've never seen anyone say a *positive* thing about it...
jnthn Skarsnik: Yes, but should NativeCall be so strongly forcing that on people? 13:35
I'm not convinced it should. 13:36
moritz Skarsnik: or maybe it's just code from before the versioning thing
RabidGravy so yeah it does seem that the ::() isn't looking in the right place for a lexical symbol
Skarsnik os X/BSD/Linux doc about shared lib say it should always give an ABI/API version
flussence and it's a bit hypocritical to demand more out of nativecall users than *the language itself* bothers to give for its compiled libs
RabidGravy right, but a lot of things either ignore that or they got built some way that it doesn't get one 13:37
sortiz The problem is that without a version number, NC can only found the library via then symlink of the development version.
s/then/the 13:38
RabidGravy if it is indeed a symlink
some things just install a .so
sortiz Normally that's the case
Skarsnik lot of distrib chose to provide the .so as a symlink in the devel package, because that what it should be
.so is a devel thing
still according to doc about shared lib
RabidGravy it's not
I have 50+ .so files in /usr/lib64 that aren't symlinks 13:39
jnthn Skarsnik: Is that doc stating how things actually *are*, or an ideal for how they should be?
RabidGravy there's nothing anywhere that enforces it
sortiz Sure, for libs without versionised APIs. 13:40
Skarsnik You can complain it miss something to explicitly tell NC to not bother with version, but in most case the version exist and should be used
Skarsnik I don't think I have raw .so in my debian stable 13:40
sortiz But that way the caller can't be protected of API changes. 13:40
Skarsnik execpt stuff that are plugin and loaded with dlopen 13:41
stmuk neither quietly{} nor CONTROL { when CX::Warn { .resume } } seem to play well with NativeCall since they make further warnings fatal 13:41
sortiz And even dlopen prefer a fully versionised request. 13:42
stmuk maybe I can play tricks with STDERR
flussence that's a good point: even C code compiled with -Wall -pedantic doesn't get this picky about dlopen filenames.
Skarsnik jnthn, www.freebsd.org/doc/en/books/devel...shlib.html www.openbsd.org/faq/ports/specialtopics.html I don't remember where I found for general Unix system 13:43
flussence we have a *worse* user experience than C right now.
sortiz In C, at link time the version is fixed, and we want to jump out that safety net. 13:44
Skarsnik This warning is aimed toward developpers, without it most poeple will write is native('foo') and you will need to install foo-devel on debian/fedora (and probably other)
stmuk see also doc.perl6.org/language/faq#Nativeca....so.1.2%21 13:45
Skarsnik This entry is old ^^ 13:46
RabidGravy ls -l /usr/lib64/*.so | grep -v ^l | wc
89
Skarsnik are they real lib or think loaded by another stuff?
RabidGravy I'm not sure what that means in this context, they're .so files without versions (or infact most have versions in the basename it seems) 13:48
Skarsnik I only have 19 on my debian stable (for /usr/lib)
dalek kudo/nom: 82d8e69 | lizmat++ | src/core/Str.pm:
Make LSM.new take the substitutions

So we can basically inline the creation of the object and returning its result. Also use long option names internally for clarity.
geekosaur *sigh* we're going to end up saying "yes fine use the unversioned .so so you have no clue what ABI you have to speak", right?
flussence $ find /usr/lib -type f -name '*.so' | wc -l
718
Skarsnik is find recursive?
there is a shitton on plugin with KDE stuff
RabidGravy need to exclude the symlinks
moritz just like we're saying "you can write this code without writing unit tests, performance tests, integration tests and acceptance tests for it" 13:49
geekosaur fine, use unversioned .so-s. runtime crashes because of incompatible ABI versions are part of The Experience
find is recursive, yes
arnsholt geekosaur: Unconditionally writing to stderr when the wrapper library doesn't supply a version is kinda shit too though
Skarsnik Lib without versionning should be traited as specific case IMO
flussence among other things, that list includes libreadline.so
RabidGravy or "sorry you can't have a Tk binding because it doesn't install versioned libraries"
geekosaur flussence, tha tells me you have developer libraries installed 13:50
C programs do not use the developer libraries.
ldd will show you .so.N not .so
stmuk or don't deploy nativecode in production without developer libraries
geekosaur there's a REASON for that
sortiz I prefer to force the end user to a certain version that need to debug some unnoticed API change.
flussence oh right, they link to a symlink in /lib, not /usr/lib. 13:51
Skarsnik That why in my register-native-lib stuff I have a explictly :no-version parameter for case without version
jnthn This isn't really a discussion of "is it better to use versioned libraries when available", it's "should we carp in the way we do now when that isn't specified". I think we at the very least should make it a warn, not a note.
FROGGS I'd vote for 'is native("foo", Nil)' or some such to state that one wants to use unversioned libs
RabidGravy yes
flussence oh, that isn't even a binary file it's an ld script. 13:52
FROGGS though we still have the problem that windows has no concept of versions it seems, right?
Skarsnik and?
It's not an issue
jnthn FROGGS: Yeah, you're generally best just shipping the versions you need together with your application.
Skarsnik you can always put the version. on win32 it does not change the DLL name
sortiz I prefer is native("foo", *) :) 13:53
jnthn Yeah, I'd avoid Nil for it
Skarsnik and it does not warn if you put a path to is native
FROGGS k
jnthn * is better
Skarsnik can we write is native('foo', :no-version) ?
stmuk m: warn "foo"
camelia rakudo-moar bcab50: OUTPUT«foo in block <unit> at /tmp/9EfPvXF5kH line 1␤»
FROGGS so, let's turn that note off by passing *?
stmuk m: quietly { warn "foo" }
camelia ( no output )
stmuk m: quietly { note "foo" }
camelia rakudo-moar bcab50: OUTPUT«foo␤»
Skarsnik I did not put warn because it point to the code in NC and not the user 13:54
RabidGravy I've just checked a small sample, the tcl, tk, xerces, smime are all unversioned and the public API
Skarsnik and it's probably confusing 13:54
lizmat afk for a few hours&
FROGGS RabidGravy: but you also have versioned libs for these, no?
RabidGravy no 13:54
Skarsnik opengl has unversionned extension
I think
but it's a weird case 13:55
RabidGravy /usr/lib64/libtk8.6.so
FROGGS that's still versioned, isnt it 13:55
sortiz That the case that the packager don't understand the issue an put the version in the name!
pmurias install Readline and having the version warning appear when using the REPL needs to be fixed
RabidGravy yeah, but you'd actually say native('tk8.6'), get a rude warning and not bother 13:56
dalek c: 486d2bf | (Steve Mynott)++ | doc/Language/5to6-nutshell.pod:
mention quietly block
13:57
sortiz you can avoid the warning with native('tk8.6.so')
Skarsnik RPL does not a provided version with RESSOURCE?
hm, interesting for TK
root@testperl6:~/piko/perl6-MiniXML# apt-file show libtk8.5
libtk8.5: /usr/lib/i386-linux-gnu/libtk8.5.so
libtk8.5: /usr/lib/i386-linux-gnu/libtk8.5.so.0
it's indead not a symlink on the dev package 13:58
but debian provide a 0
RabidGravy Plato must be splitting his sides 13:59
anyway this isn't fixing Panda
sortiz Sure, and that's more important. 14:01
sortiz RabidGravy, the problem with Panda is the ::($foo) case for Build, no? 14:03
RabidGravy yeah
RabidGravy well it is now 14:03
RabidGravy the actual problem as reported was that it was crapping out with "redefinition of 'Build'" because it was doing GLOBAL::<Build>:delete and it wasn't in GLOBAL:: 14:05
but in LEXICAL::GLOBALish
having remedied that it appears that the ::('Build') isn't finding it
because it's in LEXICAL::GLOBALish not GLOBAL 14:06
or something, got me totally confused
jnthn Hm, did require changes of late break global merging perhaps? 14:08
sortiz I suppose that is caused by the recent llforrn change, see github.com/rakudo/rakudo/commit/f5...2a492aR587
RabidGravy possibly, but I couldn't see anything there that would do it 14:09
jnthn CALLER::LEXICAL::GLOBALish::.merge-symbols($GLOBALish); 14:10
That looks dubious
GLOBAL::.merge-symbols($GLOBALish); would feel righter
sortiz Yes, that is what i was talking about.
jnthn Because you're at runtime 14:11
GLOBALish is only something you'd want to target at compile time, and it becomes GLOBAL by runtime
But it's the top level application's one that becomes GLOBAL
So it's possible that this works in simple test cases, but not as soon as you're a module down in the dependency chain and do a require
[Coke] wonders if we can -schedule- reboots of hack rather than have them come up same day. 14:12
RabidGravy yeah, I think that's probably right
moritz [Coke]: if we can get a professional admin team, yes 14:13
[Coke]: if the responsibility remains with me: no
stmuk I'd say certain remote security issues = instant reboot 14:14
RabidGravy I'm not sure if the expectation is that a require in some lexical scope only has lexical effect rather than global
in which case then the ::() should be fixed 14:15
RabidGravy or just GLOBAL::.merge-symbols 14:16
the effect previously was indeed global
jnthn You can't have lexical effects in terms of new symbols
Because the set of symbols in a lexpad is immutable by runtime
jnthn And yeah, things that are global should be subject to global merging 14:17
Jsut as in use
RabidGravy I'm getting confused here, so why is there even a LEXICAL::GLOBALish at all then? 14:19
jnthn I'm not sure there should be in this code
GLOBALish means "what does this module contribute towards GLOBAL"
sortiz In llfourn commit there are an XXX comment, but I don't understand the details.
jnthn But when you require you want to influence The Real Thing 14:20
RabidGravy right, so it should be GLOBAL::.merge-symbols and the problem goes away for panda at least 14:21
[Coke] wonders if people use something other than hack to irc from.
[Coke] also ponders just switching away from an always-on irc.
moritz [Coke]: fwiw I can set up a separate virtual machine for IRC
[Coke]: in fact, I've done so in past, but nobody used it
[Coke] moritz: I don't imagine it will avoid reboots any more than any of the other instances. 14:22
moritz [Coke]: well, it was the first reboot of the hypervisor today; hack is being rebooted *much* more often than other machines
Roamer` hm, am I missing something? Is there a way to compile a regex from a string at runtime? Seems I can't call a Regex constructor, and I can't figure out the syntax for interpolating a variable in /../ as in Perl 5 without \Q..\E 14:24
moritz Roamer`: <$string>
Roamer` moritz, hmm, okay, yes... almost... that seems to need me to keep the variables in scope when evaluating the RE, doesn't it? 14:26
I mean, say $re.perl gives me something that has the variable names in there... 14:27
[Coke] irc--
Roamer` ah, well, not exactly... the regex seems to work even after I leave the block with the variables 14:28
moritz, okay, thanks, I was a bit fooled by the fact that the regex refers to the variables by name, I'll try that
stmuk [Coke]: you look like the sort of person who would like 'slack' ;)
[Coke] stmuk: more of an xmpp guy. 14:29
slack is closed source, you have to use their client, yes?
moritz Roamer`: the fun of closuring :-)
sortiz Skarsnik, should I left mysqlclient unversionized? 14:30
Roamer` moritz, hm, still doesn't quite cut it for me. OK, here's what I'm trying to do: parse a string into components, then turn each component into a different RE fragment, then concatenate the fragments into one big RE 14:34
moritz, but if I do something like for @strings -> $s { if $re.defined { $re = /<$re> <$s> } else { $re = /<$s>/ } }, then the first attempt to match against this seems to go into an infinite loop 14:35
Roamer` and dd $re gives me Regex $re = /<$re> <$s>/ ... which kind of maybe sort of explains the infinite loop :) 14:36
sortiz Well, I'll commit with a reasonable v18, and a runtime var for override. 14:37
dalek Iish: ceb56b4 | (Salvador Ortiz)++ | lib/DBDish/ (2 files):
Move env's vars resolution to runtime
Iish: c4d3ff6 | (Salvador Ortiz)++ | README.pod:
Update copyright
Roamer` moritz, nevermind, I'm dumb. I just figured out that I can concatenate the fragments into one big string and say $re = /<$string>/ and... well, it works. 14:38
thanks :)
jnthn m: my @strings = <a+ b* c>; say 'aaabbcd' ~~ /:my @bits = @strings; [<?{@bits}> <$(@bits.shift)>]+/ 14:39
camelia rakudo-moar 82d8e6: OUTPUT«「aaabbc」␤»
jnthn That's how you could do it if you really "had to", fwiw ;) 14:40
RabidGravy jnthn, regarding this merge-symbols malarkey do you want a PR or can it "just be fixed" ? 14:45
stmuk perlpilot: github.com/perlpilot/benchmark/pull/7 14:46
RabidGravy there are issues against panda and about half the ecosystem as a result of it
jnthn RabidGravy: If somebody can test such a fix helps, I think I'm fine with it going in 14:47
RabidGravy let me see if I can do that 14:49
RabidGravy first add failing test to panda 14:49
sortiz RabidGravy, in the meantime, can be workarounded with the :delete in where you known Build is merged? 14:51
RabidGravy oh yeah, got that part sussed 14:52
and if it really came to it I can find the symbol in the same place
sortiz yep 14:53
Roamer` jnthn, whoah, it'll take me some time to parse what you wrote there :) ... I just found out about :my in S05, now reading the rest of it carefully 14:54
(that is, I found out about it after I saw it in your example) 14:55
Ven I've found out you can read S05 a lot of time and still have most of it fly over your head :P 14:58
perlpilot Still the same old Perl ... there's always something new to learn and you may have to read and re-read and re-read the docs in order to learn some things 15:01
RabidGravy anyway I'm quite relaxed about how long it takes rakudo to build now, I built Ardour from scratch for the first time in ages last night and it took three hours 15:04
tadzik yay, I'm going to gpw \o/ 15:08
RabidGravy harr! 15:09
stmuk me 2 15:11
sortiz Found something! A "my class Foo" results in ::('Foo') fails after required, but an "our class Foo" succeeds! 15:14
FROGGS that is to be expected 15:15
sortiz Ok, so Panda Build, and in general classes to be loaded by require, should be our, never my. 15:16
RabidGravy jnthn, I can confirm that changing that CALLER::LEXICAL::GLOBALish to GLOBAL does indeed fix the problem that panda is experiencing
ugexe why not just launch Build.pm in a separate process, which is proven to work? 15:17
RabidGravy sortiz, but the default is "our" isn't it?
FROGGS RabidGravy: it is
sortiz Yes.
But authors can use my. 15:18
RabidGravy ugexe, it's not just panda that is afflicted by this
RabidGravy it's "if something requires something in a lexical scope then the global symbols aren't available" which may break e.g. require Foo; ::('Foo').new for instance 15:20
sortiz But that depends on what Foo is, require is about module files, and ::('Foo') is about symbols. 15:23
ugexe isn't that how its supposed to be though? i.e. lexical stuff stays in lexical scope?
FROGGS sortiz: Foo is always a symbol 15:24
FROGGS require Foo will load a compilation unit that is meant to contain such symbol 15:24
ugexe although i think i ran into a similar problem now that im thinking about it. by putting it in the applications root namespace it worked as expected, but in a sub-namespace it would no longer work
FROGGS but it can contain other symbols as well, and also perhaps lack the Foo symbol 15:25
RabidGravy right, but as we discussed, in the case of a class it is also "our" scoped so it should become available
sortiz FROGGS, I was talking about require "foo/Bar.pm", nothing assured you that a Bar symbol results.
FROGGS sortiz: still, the Foo in require Foo is about a symbol Foo 15:26
RabidGravy as ::() appears to be clever enough to traverse the GLOBAL:: to find e.g. ::('Foo::Bar::Baz')
FROGGS sortiz: then we go off on load a file (cu), that is listed as "providing symbol Foo"... look at the META6.json file 15:27
there is the symbol => file mapping table
RabidGravy but it traverses the GLOBAL:: and the way that require was doing it means that it was never ending up in GLOBAL so couldn't be found under some circumstances 15:28
nine Isn't the panda problem that loading a second Build.pm by the same process fails, because the symbol is still there? The GLOBAL::<Build>:delete; hack fails. 15:29
sortiz FROGGS, that's clear, but for dynamic requires nothing can be assured, that is my point.
FROGGS nine: it failed because probably somebody declared the Build class as 'my', that's my guess here at least 15:29
sortiz: then we agree 15:30
sortiz: also for use statements
RabidGravy yeah, because it isn't in GLOBAL::, but deleting from LEXICAL::GLOBALish works, however then the ::('Build') doesn't work because it isn't in the GLOBAL after the require
sortiz And if the class was "my" that results in the "Actually thrown at: in any at gen/moar/m-Metamodel.nqp line 3041" case, btw 15:32
RabidGravy FROGGS, nah, it fails for everything ATM
RabidGravy I've made a test that can replicate without a my and fixing the require to do GLOBAL::.merge-symbols makes it pass 15:33
FROGGS ahh, I see 15:34
RabidGravy++
RabidGravy just running spectest
sortiz But that way any require, not only those done in "main" will be _to_ GLOBAL::, is that expected? 15:36
jnthn sortiz: Things that are in GLOBALish *always* want merging into GLOBAL. Same with use, it doesn't matter where the use statement is. That only matters for lexical things. 15:37
sortiz jnthn, Ok, all clear to me now. 15:38
Skarsnik hm, how work Cunion in memory? 15:40
sortiz Skarsnik, like a union in C, no? 15:41
Skarsnik I mean in C
Ven well, it's just memory. the size itself is the size of the biggest union
RabidGravy it allocates enough memory for the largest itm 15:42
nine llfourn: you want to read this ^^^
jnthn And there's no discrimination. \o/
Or, /o\ :)
Skarsnik I try to figure why display a C union segfault sometime x)
sortiz So only one member can be used at a time. 15:43
jnthn Well, if you have something where it could hold a pointer or an int, and you try to access the pointer "view" when it's holding an int, that'll segfault pretty nicely :) 15:43
sortiz I.e you need to know which is valid. 15:44
jnthn Right 15:45
github.com/MoarVM/MoarVM/blob/mast...terp.h#L14 # the MoarVM register union, as a concrete example :) 15:46
Skarsnik maybe gist on repr CUnion should say "nop" instead of sometime working and sometime not ^^ 15:47
skids Or just show pointer values as pointers, don;t try to derefernce them.
Skarsnik It's annoying trying to display a struct that hold a cunion 15:48
arnsholt Yeah, you can't reasonably expect gisting a CUnion to give terribly useful information
skids It can, just it will also display some useless information, too. 15:48
Unless you have knowlege of how to pick a union member based on other fields. 15:49
Skarsnik but the (bad) side effect is randomly making display a cstruct working or not
arnsholt Exactly 15:50
RabidGravy make your own gist method in the CStruct
sortiz btw I suppose that the CUnion REPR should delay the unmarshaling to the access time.
arnsholt RabidGravy: Having .gist on CUnion be broken *unless* you implement something to unbreak it isn't a terribly cool thing to do, though 15:51
sortiz lunch time& 15:52
RabidGravy true
Skarsnik it's tricky because it's a 'normal' class with a special REPR
Skarsnik I am confused. I use $stuff !=== Pointer to check if it's not NULL. It does not always work 15:57
FROGGS Skarsnik: why dont you just check for +$stuff ? 15:58
jnthn Or $stuff.defined
arnsholt Because that's different from everything else in NativeCall?
skids I would expect a "union { u8 a; u16 b; *int p }" where the u16 is set to 0xff11 to be displayed something like "{ union { a = 0x11 # or␤b = 0xff11 # or␤CPointer(0x11ff0000) } }" (supposing the endianness was that way) by default. 15:59
erm 0xff110000
arnsholt jnthn: And .defined wouldn't work I think
Skarsnik Oh I need the full type
arnsholt You can create a definite instance of Pointer that converts to NULL, via Pointer.new(0)
Skarsnik Pointer[mxml_node_t] x)
skids wonders how gdb displays unions. 16:00
jnthn arnsholt: urgh 16:01
Skarsnik I am not sure how NC fill Pointer attributes when they are NULL
arnsholt Probably something like that
Skarsnik Look it does not set the attriute at all
MadcapJake Still UNKNOWN for all Perl FOSDEM videos... video.fosdem.org/2016/h2214/STATUS.TXT 16:02
arnsholt jnthn: I know! I think it's mostly a question of tweaking the relevant constructors to just return the type object if the supplied address is zero, but I never got around to fixing that last time I hacked on NC (theses consume an alarming number of tuits...)
Skarsnik guh this xml lib is driving me crazy 16:03
it lost children x) 16:06
RabidGravy jnthn, it seems that the spectest passes with that s/CALLER::LEXICAL::GLOBALish/GLOBAL/ 16:08
jnthn RabidGravy: OK; any chance of adding a spectest to cover this bustage also? 16:10
RabidGravy yeah, that's doable 16:13
mr_ron m: for $*IN.lines { .say } 16:17
camelia rakudo-moar 82d8e6: OUTPUT«Céad slán ag sléibhte maorga Chontae Dhún na nGall␤Agus dhá chéad slán ag an Eireagal ard ina stua os cionn caor is coll;␤Nuair a ghluais mise thart le Loch Dhún Lúich’ go ciúin sa ghleann ina luí␤I mo dhiaidh bhí gleanntáin ghlas’ G…»
mr_ron m: for $*IN.lines -> $_ is copy { s/(\w+)/{$0 ~ $0}/; .say } 16:18
camelia rakudo-moar 82d8e6: OUTPUT«CéadCéad slán ag sléibhte maorga Chontae Dhún na nGall␤AgusAgus dhá chéad slán ag an Eireagal ard ina stua os cionn caor is coll;␤NuairNuair a ghluais mise thart le Loch Dhún Lúich’ go ciúin sa ghleann ina luí␤II mo dhiaidh bhí gleannt…»
ilmari m: for $*IN.lines -> $_ is copy { s/(\w+)/{$0 ~ $0}/g; .say } 16:19
camelia rakudo-moar 82d8e6: OUTPUT«5===SORRY!5=== Error while compiling /tmp/Bi5iBFF9qR␤Unsupported use of /g; in Perl 6 please use :g␤at /tmp/Bi5iBFF9qR:1␤------> 3ines -> $_ is copy { s/(\w+)/{$0 ~ $0}/g7⏏5; .say }␤»
ilmari m: for $*IN.lines -> $_ is copy { s:g/(\w+)/{$0 ~ $0}/; .say }
camelia rakudo-moar 82d8e6: OUTPUT«CéadCéad slánslán agag sléibhtesléibhte maorgamaorga ChontaeChontae DhúnDhún nana nGallnGall␤AgusAgus dhádhá chéadchéad slánslán agag anan EireagalEireagal ardard inaina stuastua osos cionncionn caorcaor isis collcoll;␤NuairNuair aa ghlua…»
mr_ron m: for $*IN.lines <-> $_ { s/(\w+)/{$0 ~ $0}/; .say }
camelia rakudo-moar 82d8e6: OUTPUT«Parameter '$_' expected a writable container, but got Str value␤ in block <unit> at /tmp/CvavapU4Gs line 1␤␤»
mr_ron I sort of understand why the last case fails but its a common case and think it should be documented someplace ... 16:20
jnthn Perhaps worth documenting with .lines 16:21
(And yes, the behavior is correct.) 16:22
mr_ron thanks - jnthn++
_nadim Hi every one! 16:24
skids o/
rntz does anyone know a good and thorough guide to the semantics of junctions/autothreading? I'm wondering why, for example, (1|2) + (3&4) becomes (4|5)&(5|6) and not (4&5)|(5&6). 16:30
stmuk . o O ( behaviour )
jnthn rntz: Language spec on this covers it, at least: design.perl6.org/S09.html#Junctions 16:34
Around "If two or more arguments are junctive"
isBEKaml Hi, must `take` on a list always be used in the context of a `gather`?
doc.perl6.org/routine/take#class_Mu 16:35
jnthn isBEKaml: Strictly, in the dynamic scope of
rntz jnthn: thanks
jnthn isBEKaml: Though it's common to have all the takes in the static scope, for readability if nothing else :)
isBEKaml jnthn: thanks. Why can't we do something like(not valid): take 5, @array;?
jnthn m: say gather { my @array = 1,2,3; take 5, @array }; 16:37
camelia rakudo-moar 82d8e6: OUTPUT«((5 [1 2 3]))␤»
isBEKaml perl6: my @a = <a b c d e f>; take 5, @a;
camelia rakudo-jvm f99bdb: OUTPUT«take without gather␤ in block <unit> at /tmp/tmpfile:1␤␤»
..rakudo-moar 82d8e6: OUTPUT«take without gather␤ in block <unit> at /tmp/tmpfile line 1␤␤»
jnthn I don't really get what you'd want that to do
isBEKaml jnthn: \o/, now that's clear enough to me :-) 16:38
jnthn I mean, just `push @array, 5` if you want to stick the value in the array
:)
isBEKaml jnthn: no, I have > 5 elements in an array and I just want the first 5
jnthn Oh... 16:38
isBEKaml m: my @a = <a b c d e f>; say gather { take 5, @a }; 16:39
camelia rakudo-moar 82d8e6: OUTPUT«((5 [a b c d e f]))␤»
jnthn m: my @a = <a b c d e f>; say @a.head(5)
camelia rakudo-moar 82d8e6: OUTPUT«(a b c d e)␤»
Skarsnik hm, trying to give a Callback to NC Internal error: Unwound entire stack and missed handler 16:39
:(
ilmari m: my @a = <a b c d e f> say @a[0..5]
camelia rakudo-moar 82d8e6: OUTPUT«5===SORRY!5=== Error while compiling /tmp/kdxlkvvk4B␤Two terms in a row␤at /tmp/kdxlkvvk4B:1␤------> 3my @a = <a b c d e f>7⏏5 say @a[0..5]␤ expecting any of:␤ infix␤ infix stopper␤ postfix␤ statemen…»
ilmari m: my @a = <a b c d e f>; say @a[0..5]
camelia rakudo-moar 82d8e6: OUTPUT«(a b c d e f)␤»
ilmari m: my @a = <a b c d e f>; say @a[^5] 16:39
camelia rakudo-moar 82d8e6: OUTPUT«(a b c d e)␤»
isBEKaml jnthn: Ah, I was thinking too haskell-y, scala-ish :-) 16:40
jnthn Skarsnik: Means your callback threw an exception (yes, we need to tweak the error reporting)
isBEKaml: Yeah, C# uses .Take(n) also for what we have with .head, so it's an easy one to fall in to :)
Though I didn't realize you were doing so for a while...
Skarsnik Probably not that. the function just do : return MXML_TEXT; (it's an enum value) 16:41
maybe it does not like fully typed Callback. I did not see an example on the test 16:42
MadcapJake I've got an example of using Test::Lab with AlexDaniel++'s variations on partitions (gist.github.com/AlexDaniel/1e2d1c5...d37c5d43a) here: github.com/MadcapJake/Test-Lab/blo...splits.pl6 16:46
isBEKaml jnthn++ 16:47
Skarsnik hm, if I give it a native callback it fail differently 16:48
sortiz Skarsnik, Can I see your code? 16:51
Skarsnik gist.github.com/Skarsnik/abea9f36f99c548b147d 16:52
the binding is generated x)
Skarsnik this give me Cannot invoke object with invocation handler in this context 16:53
for the loadstring
jnthn Pretty sure we don't handle passing other native functions in as the callback yet 16:55
Skarsnik I try passing it the dumb_callback that does not work :( 16:57
sortiz Well, for start when the signature of the native (C) function needs, for example, xml_node_t*, you don't need Pointer[xml_node_t], all CStructs in another or in a call pass by reference i,e a pointer. 16:57
Pointer[xml_note_t] results in xml_node_t** 16:58
Now what you want (The API want)
s/Now/Not/ 16:59
skids
.oO(No problem cannot be created by adding an unecessary level of indirection :-)
sortiz In NC, even for native types, a simple "is rw" produce a pointer in a call. 17:00
Skarsnik Pointer work :)
Skarsnik think that the code is generated. I have no way of knowing if a xml_node_t* will be just read or erased (so put rw or not) 17:02
timotimo i wonder if we can specialize the "too many positionals passed" error message to point out whether or not an invocant is included in the count 17:03
yoleaux 07:28Z <FROGGS> timotimo: how so?
sortiz The API give you clues, for returning an allocated pointer in an argument, the API needs ** 17:04
MadcapJake Ruby was a strikingly easy language to translate into Perl 6 17:06
sortiz To pass an already allocated one, the API needs *. So the from the signature you know what you need.
And if you are writing a binding generator, you need to understand those details very well. 17:08
timotimo moritz: i'm ashamed to say, but i *think* i forgot to etckeeper the things in /etc on www.p6c.org after setting up collectd there :( 17:10
Skarsnik Well the main generator is called Dumb ^^
but anyways. why passing this callback does not work (the dumb one) 17:11
Skarsnik I think I will switch to libxml2 x) 17:18
sortiz I was about to question that. I don't see in ecosystem libxml2 bindings! 17:19
Skarsnik I think FROGGS started it 17:20
moritz timotimo: well, just add it now 17:20
sortiz Found two in github, but apparently abandoned. 17:21
sortiz Yep, I found FROGGS's work. 17:25
Skarsnik Ok the lib I want to use is buggy 17:27
the last version x)
timotimo whew, finally caught up with backlog 17:36
Skarsnik sortiz, I think my issue about the struct and Pointer[struct] is that you have the same perl6 translation for 2 differents thing
without that 17:37
timotimo .tell froggs what do you mean "how so"? i looked at htop when your cron job is running and it showed quite high cpu usage. maybe we can make it only fire when something actually needs changing on cpandatesters, perhaps by pushing from hack instead of pulling from www ...
yoleaux timotimo: I'll pass your message to froggs.
arnsholt Skarsnik: Given "class MyStruct is repr('CStruct') { ... }" MyStruct and Pointer[MyStruct] are *not* the same 17:38
arnsholt Bare MyStruct is a my_struct_t* whereas Pointer[MyStruct] is a my_struct_t** 17:39
timotimo moritz: there's currently some changes queued up for etckeeper; changes to sshd_config (max auth tries) and testers.perl6.org.service (limit nprox) 17:40
timotimo and also some additions to group and passwd are in there which i believe "etckeeper commit" would pick up automatically 17:40
sortiz Skarsnik, Indeed, the REPRs of all those, to the C side, give just a pointer (Unless you use HAS for inline them) 17:41
timotimo i'll be AFK for a bit, but after that, i might turn those into a bunch of commits
Skarsnik arnsholt, I mean having void foo(struct piko bar) and void foo(struct piko bar *) translating both into sub foo(piko) is weird 17:42
skids Maybe the first should be sub foo(piko) and the latter sub foo(piko is rw) 17:44
RabidGravy jnthn, shall I just push the new test for the GLOBAL:: thing to roast? it took a bit longer than I thought because I realised I need to test that it failed without the change
Skarsnik and you can always do a pr in github.com/Skarsnik/gptrixie x) 17:45
arnsholt Skarsnik: NativeCall isn't able to handle non-pointer structs as arguments to functions yet
sortiz Skarsnik, But very few API pass structures by value, most of them are by reference, so by a pointer, i.e. piko* 17:46
timotimo how do structs get passed as arguments to functions at all? without "by reference"? 17:46
skids On the stack.
(or registers, unpacked)
sortiz skids, seems to me that only natives support the 'is rw' trick. 17:47
timotimo ah
geekosaur haskell's ffi still doesn't handle either passing or returning struct-s (as opposed to struct pointers)
...and I've seen maybe *one* request for that functionality in 10 years 17:48
alpha123 like no APIs do that ever
skids Well, perl's "is rw" is more like thing** really and "is ro" is more like thing* since the ro only applies to the container. 17:49
skids There are some "const" incantations of course. 17:50
skids
.oO(maybe a NC-only "is const" thing for introspective purposes, but IIRC there are not many bits left in the parameter trait mask)
17:53
sortiz btw, for MoarVM memory managed things, there are some problems when the memory ownership should be transferred to C land.
arnsholt geekosaur: Yeah, that perhaps the missing NativeCall feature I'm the least worried about
sortiz I agree arnsholt. 17:54
arnsholt Tracking of ownership of memory is a much more pressing concern, as well as a way of handling strings that can't be marshalled and freed immediately before and after a call that isn't explicitly-manage() and doesn't piss you off when you have to use it 17:56
sortiz That's an issue. 17:59
RabidGravy gah, warnocked
arnsholt sortiz: I have ideas for the former problem, but no tuits sadly 17:59
RabidGravy shall I just push this test to roast (it will fail before the associated PR to rakudo) or PR it? 18:00
arnsholt My only concrete point of action for the latter is that explicitly-manage needs to be nuked from orbit, but sadly don't really have any good replacements yet
sortiz arnsholt, I have tuits, but yet a lack of MoarVM fu.
arnsholt Except maybe a utility function that takes a Str and does all the legwork of copying it into a CArray
Which might be what we need, TBH 18:01
sortiz arnsholt, see my github.com/salortiz/NativeHelpers-Blob module. 18:01
arnsholt sortiz: It's not too hard, TBH. Assuming you're comfortable with C, of course. But if you're dealing with NativeCall, you pretty much have to be (or you're gonna have a bad time)
dalek ast/require-globals: 91f9a91 | RabidGravy++ | S11-modules/ (3 files):
This tests for the problem fixed in

  github.com/rakudo/rakudo/pull/714
That is, if a module is required in an inner scope then the global symbols aren't available by indirect lookup.
18:02
arnsholt Yeah, something along those lines, most likely
sortiz I'm comfortable with C, but need to study first the source to understand the details, the style, etc. And it is a large code base! 18:03
dalek kudo/nom: 93e4cd6 | RabidGravy++ | src/core/operators.pm:
Fix the behaviour of require WRT to global symbols
18:05
kudo/nom: 6159b5e | jnthn++ | src/core/operators.pm:
Merge pull request #714 from jonathanstowe/nom

Fix the behaviour of require WRT to global symbols
jnthn RabidGravy: If you didn't already push the roast test, go ahead :) 18:06
oh, I see you did
arnsholt sortiz: Yeah, it's a big chunk of code. But you don't have to grok all of it at once. The relevant bits are src/6model/reprs/{CArray,CStruct}.{c,h} and friends
jnthn But didn't merge it
arnsholt And the C API is really good, thanks to jnthn++'s excellent design work
dalek ast: 91f9a91 | RabidGravy++ | S11-modules/ (3 files):
This tests for the problem fixed in

  github.com/rakudo/rakudo/pull/714
That is, if a module is required in an inner scope then the global symbols aren't available by indirect lookup.
RabidGravy in master now :) 18:07
jnthn RabidGravy++
sortiz arnsholt, my module above is a prof of concept about my plan to integrate Blobs to CStruct, CArray, etc. 18:09
sortiz *proof 18:12
dalek ast: b36e721 | RabidGravy++ | S11-modules/require.t:
It helps if I get the plan right
18:19
Skarsnik arnsholt, the thing I would with NC is a c-string type that act as a string but unencoded x) 18:23
and example is mysql that return a char * that can be raw data (but ending with 0) or text that you know the encoding via other function 18:24
sortiz Skarsnik, Then a CArray[uint8] can do the work, no? 18:26
Skarsnik I think it does not work 18:27
I think you don't get the size
well not every time
or because you can't have a CArray as a return type? 18:28
timotimo CArray is for when you know the size "separately"
Skarsnik but etheir way it's just a c string
sortiz Obviously the size of unmanaged ones must be determined by other means. 18:29
Skarsnik I mean it's a case or having a real c string (data ending with 0) type will more interesting 18:30
sortiz You can search the \0, or get from another member of the struct. 18:31
arnsholt My philosophy is that NativeCall types should map as closely as possible to C semantics, with little to no magic on top
Skarsnik I think you can't have sub foo return CArray
sortiz I agree arnsholt. 18:32
arnsholt C is sufficiently weird, and the consequences of slipups sufficiently severe, that potentially leaky abstractions with correspondingly surprising side-effects are gonna be a terrible idea
timotimo at least coercing Pointer to CArray is easy/possible/doable
Skarsnik Na it's fine for most case to have char * as Str
sortiz Done timotimo.
timotimo and i could imagine a helper function that turns Pointer into Buf or Str based on "null terminated"
timotimo sortiz: sorry, done what? 18:33
arnsholt NativeCall is C in Perl 6 clothing, basically
sortiz timotimo, see my github.com/salortiz/NativeHelpers-Blob
timotimo ah, neat. 18:34
um, how is "sub Pointer" not a terrible idea? :)
sortiz Is a cast to Pointer. 18:35
timotimo hm
well, i guess namespacing makes that unproblematic
Juerd char* as Str is a weird abstraction. 18:37
sortiz And all can be wrapped in a class, if decided. It's a proof of concept ;) 18:38
Juerd But I guess there are no real solutions here
Skarsnik ?
timotimo right, you cannot have a Str from C data without a copy
Skarsnik it's fine for lot of case since there is an is encoded trait
oh that
yeah, it's kind of bad x)
timotimo unavoidable is what it is
though of course we could build a CString class that gives you an API to work with C strings like p6 strings while keeping the underlying buffer around 18:39
but as soon as resizing happens, you're absolutely screwed.
skids still votes for calling zero terminated strings "Ztr"
timotimo not bad
Skarsnik xD
Juerd timotimo: I was hoping that at some point, we could have CStr, which is basically subset CStr of Str where !/\0/, mostly for security reasons (hostnames, paths, and other stuff that eventually ends up in system calls should be limited to CStr, not Str), so could you pick another name? ;) 18:40
skids: Way too cute. I like it :)
timotimo m: say "foo\0"
camelia rakudo-moar 6159b5: OUTPUT«foo␀␤»
timotimo hm.
BBIAB
RabidGravy re-tests all of his modules again 18:44
rntz how is ($a, $b) different from [$a, $b]? 19:01
nine rntz: List vs. Array
rntz aha, ok
rntz sprunge.us/DfQc?perl junctions have some funny behavior sometimes 19:04
timotimo m: say all() < none(any()) 19:08
camelia rakudo-moar 6159b5: OUTPUT«all()␤»
timotimo m: say none(any()) < all()
camelia rakudo-moar 6159b5: OUTPUT«none(all())␤»
timotimo FROGGS: any comment about the rsync thing? maybe we could have the thing that receives reports write a "version" file that we compare against before rsyncing? 19:10
FROGGS timotimo: would be better to rsync smaller portions maybe... in case we could partition the files 19:12
yoleaux 17:37Z <timotimo> FROGGS: what do you mean "how so"? i looked at htop when your cron job is running and it showed quite high cpu usage. maybe we can make it only fire when something actually needs changing on cpandatesters, perhaps by pushing from hack instead of pulling from www ...
rntz timotimo: hm, no, it's not that what's on the lhs vs. rhs of the < is different
rntz it's [$x,$y] versus swap($y,$x), which both produce [$x,$y] 19:13
rntz but when swap($y,$x) gets autothreaded, it behaves differently than [$x,$y] 19:13
FROGGS timotimo: or we push into a queue.... hmmm
timotimo oh
autothreading
FROGGS: partitioning sounds like a thing worth trying
rntz m: say (all() < none(any())).so 19:14
camelia rakudo-moar 6159b5: OUTPUT«True␤»
rntz m: say (none(any()) < all()).so
camelia rakudo-moar 6159b5: OUTPUT«False␤»
rntz ok, at least *that* behaves as expected
timotimo there's a reason we advocate "don't give people junctions if they're not expecting them" 19:15
like, don't let junctions leak out of your API
rntz ah, ok.
I am a total newcomer and do not know anything about these guidelines
timotimo ah
rntz I was just looking at junctions and thought they looked interesting
timotimo i think we ought to point that out a bit more visibly 19:15
rntz and then I realized they're probably a law-disobeying applicative instance
(in haskell-speak) 19:16
timotimo i didn't do enough haskell to understand that
ugexe nickl@li685-90:~/perl6$ perl6 -e 'require IO::Socket::SSL; say 42; say (require IO::Socket::SSL);'
42
No such symbol 'IO::Socket::SSL'
rntz roughly, it means [$x,$y] and swap($y,$x) don't always behave the same :P 19:17
timotimo i expect [ ] doesn't autothread 19:17
rntz it doesn't matter whther you make it autothread, it still has the behavior
timotimo you can control whether or not something autothreads by accepting "Mu" instead of "Any"
rntz my original version had "sub pair($x, $y) { [$x,$y] }"
rntz or rather, it doesn't matter whather you use [] or a subroutine 19:18
timotimo m: sub pair($x, $y) { say "beep boop"; [$x, $y] }; pair(none(all), all())
camelia rakudo-moar 6159b5: OUTPUT«5===SORRY!5=== Error while compiling /tmp/YYClhDhOvB␤Function "all" may not be called without arguments (please use () or whitespace to denote arguments, or &all to refer to the function as a noun)␤at /tmp/YYClhDhOvB:1␤------> 3y "beep boop"; [$…»
rntz autothreading is definitely what makes it have that behavior :)
timotimo m: sub pair($x, $y) { say "beep boop"; [$x, $y] }; pair(none(all()), all())
camelia ( no output )
timotimo m: sub pair(Mu $x, Mu $y) { say "beep boop"; [$x, $y] }; pair(none(all()), all())
camelia rakudo-moar 6159b5: OUTPUT«beep boop␤»
timotimo ^- it's not about whether or not you use [ ] inside, it's about the call to pair() 19:19
rntz hm? I'm not sure we're talking about the same thing anymore
timotimo maybe not 19:19
rntz definitely using Mu can let you control this behavior
timotimo but you ca nsee that in the one case, pair isn't even called at all 19:20
rntz hm, that's interesting. why is that?
timotimo because if you have no values at all in your junctions, what would the function be called on? 19:21
rntz ah, I see. 19:21
lizmat hmmm.... in nqp, what's the easiest way to push a list to another list ? 19:22
timotimo splice, i'd say 19:23
lizmat hmmm... :-) 19:23
rntz here's the version with a `pair' function, which still has the funny behavior: sprunge.us/WXLT
rntz I think it's even funnier now that I know pair/swap are never being called! 19:24
timotimo well, they aren't called, but you still get a return value
rntz yup
timotimo you should inspect that return value so you can understand what's going on
rntz the value is being determined by the order in which autothreading iterates over things 19:25
which is determined by the argument order
timotimo yeah
it does all() first adn then any(), or the other way around
i think that way
rntz design.perl6.org/S09.html#Junctions says all()/none() then any()/one()
timotimo right
rntz (and left-to-right within those)
timotimo which makes sense to me
also, i was the one who actually implemented that distinction 19:26
rntz oh, neat
timotimo it was rather easy :)
timotimo so, uh, what exactly are we discussing right now? 19:28
RabidGravy stuff
rntz I dunno, I don't think anything in particular?
junctions have weird behavior, but I understand why now
RabidGravy anyway all my modules pass (again) 19:29
timotimo good good
FROGGS hmmmm, how do I re-export stuff? 19:35
timotimo you use Foo::Bar :EXPORT?
something like that? 19:36
FROGGS in Foo.pm? and then the user of Foo will see what Foo::Bar exports?
RabidGravy I was actually looking at the tests for that earlier
timotimo i don't really know, i've never had to do that :|
worst case, you could always build an EXPORT sub
RabidGravy use OuterModule :ALL; 19:37
apparently
FROGGS hmm, but that will only import stuff into Foo 19:38
that wont export anything from Foo
RabidGravy Foo has "use Foo::Bar :ALL" 19:40
FROGGS yes
does not work here
RabidGravy user code has "use Foo :ALL"
sortiz The :EXPORT tag work well with NativeCall. 19:41
FROGGS to import certain things yet, but not to re-export
yes*
timotimo moritz: do we want to enable the "apache" plugin for collectd on www? collectd.org/wiki/index.php/Apache 19:42
RabidGravy or, alternatively for the total over-kill
then in Foo mainline "sub EXPORT { %(Foo::Bar::EXPORT::DEFAULT::) }" 19:43
FROGGS I guess I lack a unit module declaration
RabidGravy or some variant thereof
timotimo i think the only thing important is that the sub EXPORT is in the unit scope 19:44
if you have a unit module, you are allowed to put it into the module. otherwise it has to be outside the module
FROGGS I have a class with a block, and the subs I want to (re-)export are outside of it 19:45
timotimo moritz: something must have gone wrong on www; etckeeper got uninstalled somehow 19:47
RabidGravy I've got something that does "sub EXPORT { return %( '&trait_mod:<is>' => &trait_mod:<is>) }" which is an alternative for named things
timotimo moritz: shall i just re-install it?
moritz timotimo: +1 to apache collectd plogin 19:48
timotimo: re etckeeper, I think www just has a regular git repo in /etc/ 19:49
timotimo it doesn't; i tried to git commit something and there was a git hook that couldn't run because it tried to run etckeeper
if we want to run www without etckeeper, i can deactivate anything etckeeper related in the hooks to turn the git repo into a true regular git repo 19:50
on the other hand, the apt log shows someone installed and then purged etckeeper. so it's probably meant to be a regular git repository in there
llfourn RabidGravy++ thanks for fixing my mistake. 19:54
and writing nice tests :)
nine: thanks for poking me about the discussion 19:55
FROGGS: there is meant to be use Foo :EXPORT; to re-export but it's NYI. 19:56
FROGGS: take a look at github.com/LLFourn/p6-CompUnit-Util#re-export
RabidGravy llfourn, it took me a while to locate the actual thing from what was manifesting
llfourn RabidGravy: I'm sorry about that :(. I'm justing looking into it now. 19:57
RabidGravy nah, not really your fault, you just unearthed it :) 19:58
llfourn RabidGravy: it looks like panda is using a require-at-a-distance feature that I unkowningly got rid of
llfourn I thought that each compunit was meant to have its own view of GLOBAL:: which is what I thought UNIT::GLOBALish was 19:59
RabidGravy it should all be fixed now anyway, but see ugexe's comment on github.com/rakudo/rakudo/pull/714#...-185370730
lizmat seems t/spec/S11-modules/require.t is failing for me with "Undeclared routine: ok" 20:00
RabidGravy which is somewhat of a mystery, I can only guess it is now skipping the symbol lookup
er
llfourn oh that is my mistake I know what's wrong there
I think
dalek ast: ef4425d | RabidGravy++ | S11-modules/require.t:
missed import of ok
20:01
RabidGravy yep, fixed now :)
lizmat RabidGravy++
RabidGravy (I tested what I was testing in another file for convenience ;)
FROGGS thanks guys 20:03
sortiz RabidGravy, BTW, your fix allows me to simplify DBIish removing the introduced workaround. I'm testing it. 20:08
timotimo i has a cat on my lap <3
system administration will be delayed by a couple minutes or maybe an hour 20:09
lizmat wonders who said that
timotimo a line or two of chat is acceptable, but system administration stuff will not be accepted by the cat :) 20:10
Skarsnik huhu
cat is the root of root
llfourn confirmed the require IO::Socket::SSL thing 20:12
llfourn require IO::Socket::SSL; say ::("IO::Socket::SSL") works so the solution is to probably just use GLOBAL:: to figure out what to return from require 20:15
RabidGravy almost certainly
llfourn though that's what INDIRECT_NAME_LOOKUP should be doing
timotimo t.h8.lv/andshare/IMG_20160217_211308~2.jpg.jpg
llfourn awww. I can see your screen in the neko's eyes. 20:16
timotimo it's the phone screen, i'd expect
llfourn I'll make a PR to revert back to the old way it used to find the return value from require while I figure this out 20:23
returning GLOBAL::{$pkg} confirmed not working 20:24
RabidGravy as far as I can tell that behaviour isn't tested 20:25
timotimo moritz: etckeeper's pre-commit hook makes sure to store metadata properly when it comes to owners and other things; maybe we do actually want etckeeper?
RabidGravy llfourn, is it actually hitting REQUIRE_IMPORT the second time? If the module is already loaded and no exports it doesn't need to 20:28
llfourn RabidGravy: it's meant to yeah
I mean I haven't changed that I don't think
sortiz Then I'll wait for this matter settled before another round with DBDish 20:35
MadcapJake AlexDaniel, I used your splits gist as an example for Test::Lab github.com/MadcapJake/Test-Lab/blo...splits.pl6 20:41
AlexDaniel MadcapJake: great 20:42
llfourn ok I got something passing tests and say (require IO::Socket::SSL) works 20:42
MadcapJake c turned out to be the fastest
RabidGravy llfourn, the actual case is something weird about IO::Socket::SSL 20:43
RabidGravy it doesn't do it with other modules 20:43
require IO::Socket::SSL; say 42; say (try require IO::Socket::SSL); 20:44
42
Nil
llfourn RabidGravy: it might be unit IO::Socket::SSL + the fact it has :: in the name
but that's a wild guess
RabidGravy perl6 -e 'require HTTP::UserAgent; say 42; say (try require HTTP::UserAgent);'
42
(UserAgent)
MadcapJake i could probably take the assignment logic out and place the entire lab inside a sub that returns the list contents.
RabidGravy well more than one :: 20:45
llfourn RabidGravy: but actually I think you're right
AlexDaniel MadcapJake: interesting!
llfourn it's nothing to do with thtat
RabidGravy nope another module with two :: in the name works fine 20:47
sortiz hm.. 20:47
RabidGravy so IO::Socket::SSL is doing something odd
sortiz RabidGravy, Which other module? 20:48
AlexDaniel MadcapJake: I'm surprised to see a significant difference between b and d. By the way, how many times does it run each of them? 20:49
sortiz Asking 'cus in the IO::Socket:SSL case IO::Socket isn't a stub 20:50
RabidGravy Audio::Taglib::Simple and Test::Util::ServerPort I've tried
MadcapJake I only did one run, but it's trivial to wrap and then aggregate the results. i'll give it a go now
llfourn github.com/rakudo/rakudo/pull/715 # fix is here
MadcapJake (the module is designed to be used in production, btw, so it's intended to gather true load performance and data anomalies) 20:51
lizmat llfourn: you're sure that's spectest clean ? 20:52
llfourn lizmat: it's require.t clean
lizmat llfourn: ok, I'll try to spectest in a mo then 20:53
llfourn lizmat: ok me too :)
ugexe m: class Bar { has Str:D $.id = self.id; method id { "1" }; }; class Foo is Bar { has Str:D $.id is required; }; Foo.new.say
camelia rakudo-moar 6159b5: OUTPUT«Type check failed in assignment to $!id; expected Str:D but got Str:D␤ in block <unit> at /tmp/S157w_QnqF line 1␤␤»
RabidGravy llfourn, that returns Nil always? 20:54
llfourn RabidGravy: you're refering to REQUIRE_IMPORT? 20:55
RabidGravy: it used to not to that's why we got those annoying sink errors
RabidGravy oh I see, it returns the lookup from require 20:56
sortiz llfourn, with $longname defined $target_package can be $target_package := $longname.name_past, no?
llfourn well that's how I just had it
sortiz: yep good catch
it's a temp fix so $longname is going away again hopefully
llfourn I just put it back so I could restore previous behaviour 20:57
sortiz Understood. 20:58
RabidGravy confused again
llfourn RabidGravy: I *wanted* REQUIRE_IMPORT to return the value for require and that's what my previous patch did. But I couldn't get IO::Socket::SSL to return from it so I restored the original Actions.nqp lookup thing and made it return Nil. 20:59
RabidGravy right, that's what I thought 21:00
llfourn once these spectests pass I'll try and figure out why the declaration unit class IO::Socket::SSL doesn't show up in the the IO::Socket::SSL's GLOBALish. 21:01
RabidGravy all good 21:02
llfourn lizmat: it's spectest clean 21:03
dalek kudo/nom: 6e47e54 | LLFourn++ | src/ (2 files):
Temp fix for say (require IO::Socket::SSL)

restoring how require's return value used to be calculated before f565f80a4 while investigating.
21:03
kudo/nom: bb9ca8c | lizmat++ | src/ (2 files):
Merge pull request #715 from LLFourn/nom

Temp fix for say (require IO::Socket::SSL)
RabidGravy re-tests the modules with that 21:08
I'm doing a fair bit of on-demand loading of modules in a couple of thongs 21:09
er things
MadcapJake AlexDaniel, here's a 100 sample result github.com/MadcapJake/Test-Lab/blo...splits.pl6 (i think the sort is a bit off for some reason...)
llfourn ./perl6-m -Ilib -e 'use CompUnit::Util :load; say load("IO::Socket::SSL").handle.globalish-package.WHO.keys;' 21:11
(NQPMatch NQPCursorRole OpenSSL NativeCall HLL QRegex QAST NQPCursor NQPRegexMethod Find NQPRegex)
so yeah it never gets into GLOBALish 21:12
something to do with native call?
Skarsnik well ssl use NC probablty 21:13
RabidGravy more likely that IO::Socket is already in the setting
llfourn RabidGravy: that's it!!!
now the question...is that a bug?
I think it is. Everything the module intends to merge should be in globalish right? 21:14
RabidGravy I'd say that would be the expectation
llfourn but how does use IO::Socket::SSL even work if it's not in GLOBALish -- use uses GLOBALish.
llfourn perl6 -e 'use IO::Socket::SSL; say IO::Socket::SSL' works so that's odd 21:15
RabidGravy is it because it looks up the antecedent IO::Socket and it adds it to that rather than a local stash? 21:17
sortiz I think that.
dalek kudo/nom: ec96785 | lizmat++ | src/core/Buf.pm:
Streamline Buf.push|append

  - fix error message for lazy lists (mentioned 'push' instead of 'append')
  - make .push|append(4,5) about 1.5x faster
  - make .push|append(@a) about 7x faster
  - make .append(4) about 90x faster
This should also make pack quite a bit faster
RabidGravy lizmat++, that should help something I was playing with 21:18
llfourn RabidGravy: but wouldn't IO::Socket::SSL add itself to IO::Socket:: at its own compile time so how did it stick around... 21:18
llfourn if it's precomped that shouldn't work I would have thought but it seems to 21:19
lizmat m: dd Buf.new.append(2) 21:20
camelia rakudo-moar bb9ca8: OUTPUT«Buf.new(2)␤»
lizmat hmmm... maybe i broke that 21:21
Skarsnik if you broke something blame spect test for allowing you to break it! 21:23
jnthn m: my @a; dd @a.append(2) 21:24
camelia rakudo-moar bb9ca8: OUTPUT«Array @a = [2]␤»
jnthn append/push return the thing pushed onto 21:24
lizmat spectested clean though :-( 21:25
fixing now
jnthn Yeah
And let's add tests
lizmat m: dd Buf.new.push(1)
camelia rakudo-moar bb9ca8: OUTPUT«1␤»
jnthn We should really look a bit further into coverage analysis...
lizmat jnthn: that's also wrong, eh ? 21:26
jnthn Yeah
Probably should check native arrays too
lizmat ok, that will slow down stuff a bit :-(
yeah, next on my list
jnthn Don't worry
I'd hope these will be good inlining candidates 21:27
lizmat yeah, they're small
jnthn And then it'll fall to dead code elimination
Which needs moving *after* inlining
Somebody should do some work on spesh... :-)
sortiz
.oO( I don't even known what "spesh" is )
21:29
llfourn sortiz: My understanding is that it's a thing that inlines stuff at runtime in MVM. jnthn++'s creation. 21:31
RabidGravy It's the magic thing the optimisation fairies do
llfourn though my understanding is often not reality as today has shown :D
sortiz Lol
jnthn It's from the word "specialization", but I didn't want to write that all the time, and if I called it "spec" it'd be confusing. :) 21:32
Largely because the big picture of MoarVM's optimization approach is that it looks for the static behaviors in your dynamic code, and generates specialized code that ploughs through those static things with a load less checking. 21:33
sortiz For inlineing(sp?) something we need to know if the methods called are pure and the args constants, I suppose, no?
jnthn sortiz: No, we can do quite a lot better than that. 21:34
sortiz: Though for some of the "better than that" cases we can only do them because we can uninline too.
(That is, if we learn that one of the things the inlining was based on just changed underneath us, we can rewrite the call stack to look like it would have done if we didn't inline, and continue on safely) 21:35
That's one case of the more general deoptimization principle. 21:36
dalek kudo/nom: 0054aa7 | lizmat++ | src/core/Buf.pm:
Make sure we return self for Buf.push|append
jnthn Which means we can enter into specialized code, and cope with discovering half way through that its assumptions got invalidated and drop back to the slow path again. 21:37
llfourn jnthn: interesting. What's a common de-optimization scenario? 21:37
sortiz Ok, I need to study that area in detail, some literature that you recommends?
jnthn llfourn: Mixins (does/but) always result in it at the moment, because they can cause objects to change type "at a distance" 21:38
llfourn cool thanks. 21:40
jnthn llfourn: Another example would be that we have code doing divisions on Rats and we see the result is nearly always Rat. We might then generate code that assumes Rat, and speculatively inlines stuff based on that. But if there's a big value and we fall back to Num, then we'd trigger deopt there too. 21:41
Though those two differ. In MoarVM we call the first global deopt 'cus it affects potentially all optimized callframes on the stack, whereas the latter is local deopt, because we know it only affects the current callframe.
llfourn hmm that is very clever. once it de-opts, does it try to optimize again from there? 21:42
or just backs away for the rest of execution
lizmat jnthn: I'm surprised by the difference in behaviour between native arrays and non-native arrays: 21:44
m: my @a; @a.append([1,2,3],[4,5,6]); dd @a
camelia rakudo-moar ec9678: OUTPUT«Array @a = [[1, 2, 3], [4, 5, 6]]␤»
lizmat m: my int @a; @a.append([1,2,3],[4,5,6]); dd @a
camelia rakudo-moar ec9678: OUTPUT«array[int].new(1, 2, 3, 4, 5, 6)␤»
lizmat jnthn: aka, the native case is flattening 21:45
jnthn sortiz: Quite a few papers out there, of note those on JIT compilation by Craig Chambers et al are quite interesting. 21:46
AlexDaniel lizmat: O_O 21:47
skids Well, it would be kind of hard for a native array to store the non-flattened result :-)
jnthn lizmat: I suspect "didn't get tweaked in the GLR"...
lizmat ok, lemme see if I get spectest fails if I remove the flattening 21:48
jnthn sortiz: The spesh codebase in Moar isn't too terribly inaccessible
sortiz jnthn, Tnks, annotated.
jnthn sortiz: graph.h is the place to start reading
AlexDaniel skids: it does not mean that it should silently flatten it 21:49
skids Oh I know.
jnthn llfourn: For the rest of the callframe it tends to back away
llfourn: It'll try the specialized code again on future calls though 21:50
lizmat plugs the P6W again, just in case: p6weekly.wordpress.com/2016/02/15/...ersioning/
llfourn jnthn: ah nice. I will consult sauce for future investigations. Thanks.
sortiz The native case is using VMArray. 21:51
lizmat seems github is down 21:52
llfourn sees github working
sortiz too 21:53
pmurias LLVM now has a JVM backend: github.com/graalvm/sulong ;)
lizmat status.github.com has some interesting graphs
geekosaur again? 21:56
lizmat "We're working to mitigate a DDoS attack affecting github.com performance." 22:00
hoelzro too many people using the new issue templates =P 22:04
lizmat m: my int @a = ^Inf # LTA error message 22:05
camelia rakudo-moar ec9678: OUTPUT«This type cannot unbox to a native integer␤ in block <unit> at /tmp/OuG0Nuu8m3 line 1␤␤»
hoelzro is it because it's too large for a native int?
lizmat well, array.STORE has special handling for Ranges, but does not check on the bounds being ints 22:06
sortiz m: my int @n; say @n.REPR; my @a; say @a.REPR
camelia rakudo-moar ec9678: OUTPUT«VMArray␤P6opaque␤»
sortiz lizmat, VMArrays slots are flat. 22:07
lizmat yes, I know :)
it's about the error message
RabidGravy all modules pass (again again) 22:08
lizmat RabidGravy++ # checking!
will look at native array issues tomorrow
sortiz No, I thinking about how to remove the flattening...
sortiz .oO ( A p6opaque of VMArrays? Upgraded as soon as it has inner array... ) 22:13
sortiz m: my @a = Array[array[int]].new(array[int].new(1, 2, 3), array[int].new(1, 2, 3)); say @a; dd @a # Seems flat but isn't 22:23
camelia rakudo-moar 0054aa: OUTPUT«[1 2 3 1 2 3]␤Array @a = [array[int].new(1, 2, 3), array[int].new(1, 2, 3)]␤»
sortiz needs some coffe 22:24
lizmat jnthn: what is our standpoint on adding another Exception class to 6.c ? 22:29
Hotkeys in regex does « and » function the same as << and >>? 22:33
as word boundaries
lizmat jnthn: I'm thinking of adding a X::CannotCoerceToNativeInt exception class, to change "This type cannot unbox to a native integer" to a more meaningful error
llfourn guesses that that's fine with tests for X::CannotCoerceToNativeInt going into 6.c.1 spec 22:35
hoelzro lizmat++ # better errors
atweiden m: sub mkpositional(Positional $container is rw, :$value) returns Any { $container = $value; $container; }; my Positional $a; my @b = mkpositional($a, :value('zero', 'one', 'two')); @b.perl;
camelia ( no output )
atweiden m: sub mkpositional(Positional $container is rw, :$value) returns Any { $container = $value; $container; }; my Positional $a; my @b = mkpositional($a, :value('zero', 'one', 'two')); say @b.perl;
camelia rakudo-moar 0054aa: OUTPUT«[("zero", "one", "two"),]␤»
atweiden anyone know why @b isn't qw<zero one two>?
llfourn atweiden: it looks like it is? 22:36
lizmat atweiden: named parameters are always containerised ?
llfourn oh you mean just a list
atweiden: return |$container 22:37
moritz m: sub f(:\a) { }
camelia rakudo-moar 0054aa: OUTPUT«5===SORRY!5=== Error while compiling /tmp/Zfjowh3kRQ␤Missing block␤at /tmp/Zfjowh3kRQ:1␤------> 3sub f(:7⏏5\a) { }␤»
llfourn or make it @container
dalek kudo/nom: e3b1dd3 | lizmat++ | src/core/Buf.pm:
Oops, forgot to remove one --> Nil
22:43
lizmat is too tired 22:44
good night, #perl6!
sortiz 'night lizmat
llfourn o/ 22:44
atweiden llfourn: thanks for the |$container tip 22:53
jnthn lizmat: How is that "adding it to 6.c"? 22:55
Does changing it regress a spectest that passed in 6.c?
Ah, too late, you went for rest :)
llfourn atweiden: Nw. Yes, if you return a list in a $ variable and assign the result to an array you will get an array with one element containing that value (the list). 22:56
jnthn Maybe the question is "is it OK to put the exception type into CORE.setting, not CORE.6.d.setting"...
I think pragmatically "yes" because it needs to be visible by methods, and those evolve in-place. 22:57
General exception policy is that untyped is allowed to go to typed (I tried to prepare for that by removing tests against X::AdHoc from roast)
Maybe we should call CORE.setting "the base setting" or "the unversioned setting" or so, because every time I hear it referred to as 6.c it confuses me. ;-) 22:58
Hotkeys can I capture the number of times a general quantifier is done in a regex?
like / a ** 2..* /
llfourn atweiden: putting a | in front turns the value into a Slip, which will faltten the $ variable out so the expression will return many values (the contents of the list) 22:59
Hotkeys is there an easy way rather
jnthn Hotkeys: Do you have a strong reason not to capture and then just numify the list of captures?
Hotkeys oh
I suppose I could
jnthn m: 'aaaa' ~~ / (a) ** 2..* /; say +$0
camelia rakudo-moar e3b1dd: OUTPUT«4␤»
Hotkeys slap forehead
jnthn Well, it's kinda a reasonable question if you were in a tight performance/memory situation and didn't want to capture, but... :-) 23:00
(As in, it's reasonable to be looking for soemthing *other* than the capture approach in that case...)
Hotkeys is there another good option in that case? 23:01
jnthn Sorta 23:02
m: 'aaaa' ~~ / :my $i = 0; [ a { $i++ } ] ** 2..* { make $i } /; say $/.made # one variant on the theme 23:04
camelia rakudo-moar e3b1dd: OUTPUT«4␤»
Hotkeys neat 23:05
I never think about mixing code in regexes
jnthn Yeah, it's powerful *but* make sure you consider backtracking.
jnthn REST time; PUT /bed :-) 23:14
sortiz 'night jnthn
llfourn 'night
llfourn RabidGravy, sortiz you're both right. Interestingly when you load IO::Socket::SSL (even before globalish has been merged) you get SSL under CORE::IO::Socket::SSL. 23:36
sortiz llfourn, Good to know. In fact that is more efficient IMO 23:40
llfourn sortiz: though it means you can't introspect the compunit for what it is merging into globalish. 23:41
it just "happens" when you compunit is loaded.
RabidGravy I'm sure it's not going to be the only thing that hooks under an existing package like that 23:42
sortiz llfourn, But can be tested, if the parent are not a stub, just search for in it. 23:43
llfourn RabidGravy, sortiz elaborate on both those statementsif you can :) 23:44
RabidGravy well, I made IO::Path::Mode which the same happens to, the is an IO::Path::More too, and I can foresee IO::Socket::* stuff 23:45
llfourn RabidGravy: oh right yep my CompUnit::Util does the same thing now that you mention it. 23:47
skids has X::Protocol
llfourn I'm wondering if I can dream up a patch that lets us have our cake and eat it too. Have the stuff you load go into the Core::Whatver::Thing package but also be in globalish for introspection purposes. 23:49
RabidGravy presumably there is a point in the process where it checks to see if there is an antecedent stash to use and if so just sticks it there otherwise icreate the packages 23:51
so if what we think is happening then it probably happens for any Foo::Bar where a Foo exists 23:53
not just for core 23:54
llfourn yep exactly I have found that bit (I think). It does a normal $*W.find_symbol() and attaches it. 23:55
it calls $*W.install_package where I think is where that happens. 23:56
food &
RabidGravy sleep
toodles
llfourn night
sortiz night llfourn 23:57
llfourn I'm in australia it's 11am for me :D
was saying night to rabid.
but good night sortiz if you are going to bed :)
sortiz No yet, but thanks, I'm in méxico 23:59