»ö« Welcome to Perl 6! | perl6.org/ | evalbot usage: 'p6: say 3;' or /msg camelia p6: ... | irclog: irc.perl6.org or colabti.org/irclogger/irclogger_log/perl6 | UTF-8 is our friend! 🦋 Set by Zoffix on 25 July 2018. |
|||
00:00
cpan-p6 joined
00:08
theangryepicbana joined
00:12
theangryepicbana left
00:18
cpan-p6 left
00:19
Ven`````` left
00:22
rindolf left,
cpan-p6 joined
00:27
cusion left
00:28
zachk left
00:38
sftp left,
sftp joined
00:39
cjkinni joined
00:41
cpan-p6 left
00:43
cpan-p6 joined
00:48
MasterDuke joined
00:49
w_richard_w joined,
MasterDuke left,
MasterDuke joined
01:06
dr_df0 left,
cpan-p6 left
01:08
cpan-p6 joined
01:22
cpan-p6 left,
cpan-p6 joined
01:24
zacts joined
01:25
leont left
01:28
zakharyas joined
01:36
cpan-p6 left,
cpan-p6 joined
01:54
cpan-p6 left,
cpan-p6 joined
02:08
cpan-p6 left
|
|||
ugexe | zef install . --deps-only --to=inst#local --/test --debug --contained # install *all* depends into local/ | 02:10 | |
zef list --installed inst#local # list exact versions of all depends for current app | |||
perl6 -I inst#local -e '...' # use self contained local lib to run app | |||
so i was thinking about how to do e.g. cpanfile.snapshot type functionality in zef. its mostly there | 02:11 | ||
just need to add a way to read the output of the file generated from `zef list --installed inst#local` | |||
maybe add an option for an argument of `-` that means read stdin line-by-line (reading a list of modules) | 02:12 | ||
lucs | How can I do something like: use Inline::Perl5; use lib 「path to Perl5 Foo module」; use Foo:from<Perl5> # That 'use lib …' doesn't reach Perl5, eh. | 02:20 | |
( use lib:from<Perl5>… something? ) | |||
ugexe | yes use lib:from<Perl5> 'something' | ||
lucs | Oh, that simple eh :) Trying... | ||
I think it's working (but getting some other kind of error, my mistakes probably). | 02:22 | ||
02:23
GaborSzabo joined
|
|||
GaborSzabo | H | 02:23 | |
lucs | H to you too ;) | ||
discord6 | <Rogue> I agree. H. | 02:24 | |
GaborSzabo | Im f | ||
And a | |||
U guys pro? | 02:25 | ||
02:25
zacts left
|
|||
lucs | GaborSzabo: Um, you're a bit hard to follow... | 02:25 | |
02:34
cpan-p6 joined
02:36
GaborSzabo left
02:40
zacts joined
02:49
cpan-p6 left
02:50
cpan-p6 joined
03:01
Sgeo_ joined
03:04
Sgeo left
03:06
cpan-p6 left,
cpan-p6 joined
03:19
cpan-p6 left,
cpan-p6 joined
03:23
zacts left
03:37
cpan-p6 left
03:42
zacts joined
03:43
squashable6 left
03:45
squashable6 joined,
ChanServ sets mode: +v squashable6
03:50
abe_ joined
04:00
abe_ left
04:13
sauvin joined
04:20
MidCheck left
04:54
reach_satori left
05:00
cpan-p6 joined
05:03
Sgeo joined
05:05
Sgeo_ left
05:13
discord61 joined
05:14
cpan-p6 left,
discord6 left,
discord61 is now known as discord6,
cpan-p6 joined
05:20
discord62 joined,
cpan-p6 left
05:21
discord6 left,
cpan-p6 joined,
discord62 is now known as discord6
05:27
cpan-p6 left
05:29
Actualeyes joined
05:31
cpan-p6 joined
05:48
cpan-p6 left
05:49
curan joined
06:07
cpan-p6 joined
06:09
jmerelo joined
06:16
robertle left
06:21
cpan-p6 left,
molaf joined,
cpan-p6 joined
|
|||
xinming | m: class T is Hash { has $.abc is required; submethod (:$!abc) { } }; my %x is T = (:a<b>, :c<d>); %x.perl.say; %x.abc.perl.say; | 06:23 | |
camelia | {:a("b"), :c("d")} Any |
||
xinming | In this case, the abc is *required*, But doesn't fail, Is this correct behaivor? | ||
And also, How do we init the $!abc in this case? | |||
m: role T { has $.xxx is required; }; my %x = (:a<b>, :c<d>) does T(123); %x.xxx.perl.say; | 06:25 | ||
camelia | No such method 'xxx' for invocant of type 'Hash' in block <unit> at <tmp> line 1 |
||
06:25
w_richard_w left
|
|||
xinming | And for the later one, Where I did wrong? | 06:26 | |
m: role T { has $.xxx is required; }; my %x = (:a<b>, :c<d>); %x does T(123) ; %x.xxx.perl.say; | 06:27 | ||
camelia | 123 | ||
xinming | m: role T { has $.xxx is required; }; (my %x = (:a<b>, :c<d>)) does T(123) ; %x.xxx.perl.say; | ||
camelia | 123 | ||
xinming | So, later one get fixed. :-) | ||
06:28
domidumont joined
|
|||
Geth | doc: ab74b86a9f | (JJ Merelo)++ | doc/Type/Code.pod6 Corrections and prefixed method, refs #2683 |
06:44 | |
doc: 62c7f85638 | (JJ Merelo)++ | doc/Type/Slip.pod6 Revised Slip Adds definitions, reflows. Actually, no need to prefix anything with sub, so this closes #2683 |
|||
06:58
domidumont left
|
|||
Geth | doc: 33dafa9600 | (JJ Merelo)++ | doc/Language/traps.pod6 Reflows while revising for #1265 |
07:02 | |
jmerelo | xinming: above, submethod should have a name, right? | 07:03 | |
xinming: you're probably past that, but anyway. Surprised it didn't complain. | |||
07:08
zakharyas left
07:10
daemon is now known as cortana,
cortana is now known as daemon
07:11
daemon is now known as cortana
07:19
jmerelo left
07:28
pistacchio left,
pistacchio joined
07:32
w_richard_w joined
07:38
domidumont joined
07:40
guifa left
|
|||
xinming | m: sub test () { return %(:a, :b) }; sub wrap-test { my $res = test; $res; }; my %t = test; %t.perl.say; my %x = wrap-test; %x.perl.say; | 07:41 | |
camelia | {:a, :b} {:a, :b} |
||
xinming | Anyone here would clarify why will $res auto unbox to %hash successfully? What is the reasoning behind it? | ||
07:42
domidumont left
07:43
domidumont joined,
domidumont left
|
|||
lookatme_q | m: my %x = ${:A, :C}; say %x | 07:44 | |
camelia | {A => True, C => True} | ||
lookatme_q | m: my %x = ${:A, :C}; dd %x | ||
camelia | Hash %x = {:A, :C} | ||
moritz | xinming: docs.perl6.org/syntax/Single%20Argument%20Rule | ||
xinming | moritz: Thanks | ||
07:45
domidumont joined
08:05
ravenousmoose left
08:06
ravenousmoose joined,
rindolf joined
08:08
zakharyas joined
08:23
patrickb joined
08:29
molaf left
|
|||
lizmat | hmmm looks like docs.perl6.org is stuck at 88383891 ? | 08:58 | |
09:01
dakkar joined
|
|||
masak | that's a suspiciously decimal hex prefix. | 09:03 | |
09:05
Actualeyes left
|
|||
masak | m: my $prob = (10/16) ** 8; say "Things like that happen with a probability of {($prob * 100).fmt("%.1f")}%" | 09:05 | |
camelia | Things like that happen with a probability of 2.3% | ||
09:06
w_richard_w left
|
|||
masak | m: my $prob = (10/16) ** 8; say "There's a one in {ceiling 1 / $prob} chance of it happening" | 09:06 | |
camelia | There's a one in 43 chance of it happening | 09:07 | |
lizmat | masak: with the number of commits we're doing on doc, that will happen like once every few weeks ? | 09:08 | |
masak | if you know the approximate rate of commits, a Poisson distribution will tell you how often | 09:13 | |
m: my $prob = (10/16) ** 8; my $n = 100; say "Among {$n} commits, there's a {((1 - (1 - $prob) ** $n) * 100).fmt("%.2f")}% chance of at least one decimal prefix" | 09:15 | ||
camelia | Among 100 commits, there's a 90.52% chance of at least one decimal prefix | ||
masak | so, yeah. not rare :) | 09:16 | |
09:16
zakharyas left
09:17
pmurias joined
|
|||
masak | I'm trying to come to grips with what the spec means by 'listop' exactly | 09:17 | |
pmurias | ugexe: re nqp::cpucores pull request is nqp::cpucores supposed to return the number of CPUs in the machine or the ones that the process can make use of? | 09:18 | |
lizmat | pmurias: that the process can make use of, I'd say... it's intended to be used as a way to determine how many workers to allow | 09:19 | |
masak | is this a correct understanding, you think? "an operator from the 'List prefix' category, which, because it's looser than commas, tends to consume the rest of the expression up until the next surrounding terminator" | ||
lizmat | and that wouldn't make any sense if thee CPU's are there and not usable :-) | ||
pmurias | hmm, v8 has worker threads (which don't share memory) | 09:22 | |
but is single threaded in terms of Perl 6 threads | 09:23 | ||
lizmat | hmmm... not sure how to handle that then | 09:24 | |
09:25
molaf joined
|
|||
SmokeMachine | m: sub infix:<< £ >>(Int $a; Int $b; Int $c) is assoc<list> { "$b is between $a, $c" }; say 1 £ 2 £ 3 | 09:57 | |
camelia | 2 is between 1, 3 | ||
SmokeMachine | m: sub infix:<< < >>(Int $a; Int $b; Int $c) is assoc<list> { "$b is between $a, $c" }; say 1 < 2 < 3 | ||
camelia | Too few positionals passed; expected 3 arguments but got 2 in sub infix:«<» at <tmp> line 1 in block <unit> at <tmp> line 1 |
||
SmokeMachine | why it doesn't work with <? | 09:58 | |
10:01
robertle joined
|
|||
moritz | SmokeMachine: I don't think you can change the associativity of an existing operator | 10:05 | |
SmokeMachine | moritz: shouldn't it be possible? | 10:06 | |
jnthn | Well, the other thing is that all the chaining operators receive special compilation anyway | 10:07 | |
yoleaux | 20 Mar 2019 20:22Z <DrForr> jnthn: No worries at all, it's by no means crucial and I might even be able to provide you a patch when I've got some spare tuits myself. | ||
10:07
dr_df0 joined
|
|||
jnthn | They're not compiled into simple sub calls, because they need to ensure they only compile each operand once | 10:07 | |
SmokeMachine | jnthn: same problem as && and || right? | 10:08 | |
jnthn | SmokeMachine: Well, "problem", but yeah, those also cannot be straight sub calls and receive special compilation as a result | ||
(Becuase we shouldn't evaluate the RHS always) | 10:09 | ||
SmokeMachine | I'd love if it would be possible to override &&, ||, >, <, >=, <= to use it on Red... | ||
github.com/FCO/Red/issues?q=is%3Ai...t+looks%22 | 10:10 | ||
jnthn: isn't it an issue? I mean, should this be "fixed"? | 10:15 | ||
10:15
MidCheck joined
10:16
Black_Ribbon left
10:21
dr_df0 left
|
|||
jnthn | SmokeMachine: Which one? | 10:21 | |
SmokeMachine | jnthn: &&, ||, >, >=, < and <= | 10:22 | |
jnthn: all of them | |||
jnthn | Well, question is how would be fix it? | 10:23 | |
*we | 10:24 | ||
SmokeMachine | jnthn: is it possible to change the behaviour only if the operator was overwritten? | 10:25 | |
jnthn: maybe set a $*AND_WAS_OVERWITTEN = True | 10:26 | ||
jnthn | SmokeMachine: But even then, what would be be compiling it in to? | ||
&& and || don't compile into a sub call | 10:27 | ||
SmokeMachine | couldn't it be compiled to a subcall receiving 2 blocks? | ||
jnthn | In theory, yes | 10:28 | |
Though perhaps this is more of a job for macros | |||
SmokeMachine | m: use experimental :macros; macro infix:<&&>($a, $b) { quasi { say "OK" } }; say 1 && 2 | 10:31 | |
camelia | WARNINGS for <tmp>: OK True Useless use of constant integer 2 in sink context (line 1) Useless use of constant integer 1 in sink context (line 1) |
||
SmokeMachine | jnthn: maybe something like this could work? | ||
10:32
cortana is now known as daemon
|
|||
SmokeMachine | jnthn: but how could I test if any of its arguments is a Red::AST? | 10:33 | |
$a and $b are AST... (not Red::AST...) | |||
jnthn | It's compile time so you don't know? | ||
SmokeMachine | jnthn: back to the same problem? | 10:34 | |
10:35
Ven`` joined
|
|||
SmokeMachine | jnthn: AST has an annotation field, hasn't it? | 10:35 | |
jnthn | SmokeMachine: Well, hash, which putting arbitrary annotations on it, yes | 10:39 | |
SmokeMachine | jnthn: would it be possible to annotate my AST... never mind... | 10:40 | |
jnthn | SmokeMachine: Dunno...maybe if you can always tell at compile time that's what it is, though you're certainly in slang territory (and using non-specified API that could change) by this point. | 10:43 | |
SmokeMachine | jnthn: maybe I should run the left part and see he type of what it returns... and decided based on that... | ||
but my && would only work if starting with a Red::AST... | 10:44 | ||
jnthn | Yeah, that's why I was curious what you were going to do with it :) | 10:45 | |
SmokeMachine | jnthn: if the first part isn't a Red::AST, but is true, I run the second one if it returns a Red::AST I create my return, else I just return it... | 10:49 | |
Im luck cause if the first part is false, my version of && should return False anyway... :) | 10:50 | ||
masak | nit pick: `&&` et al are not "chaining", they're "list-associative" | 10:56 | |
I only recently learned of this distinction | 10:57 | ||
"chaining" is for the comparison ops, that tend to result in a truthiness value | |||
"list associative" is for infix ops that conceptually take N operands, not 2 | |||
SmokeMachine | masak: like <, >, <=, >=, == right? | ||
masak | N ~~ 0..* | ||
those are the chaining ones, yes | 10:58 | ||
SmokeMachine | yes... | ||
masak | SmokeMachine: if your question is "how to override", I think you'll have to wait until we have macros for that | ||
in current Rakudo, they're just "special-cased" | |||
from the point of 007, they're macros | |||
10:59
k-man left
|
|||
SmokeMachine | masak: but when we can overwride (or in 007), how do we know if we should use the override on or the core one? | 11:00 | |
masak | that is all resolved with normal lexical lookup | 11:01 | |
the override is used whenever its definition is still visible | |||
SmokeMachine | masak: I mean: if its operands are Red::AST I'd like to use my &&, and the core's one other wise... | 11:02 | |
masak | m: use experimental :macros; macro infix:<und>($l, $r) { quasi { if my $t = {{{$l}}} { $t = {{{$r}}} }; $t } }; say(5 und 7) | 11:03 | |
camelia | WARNINGS for <tmp>: Useless use of constant integer 7 in sink context (line 1) Useless use of constant integer 5 in sink context (line 1) Cannot assign to an immutable value in any at <tmp> line 1 in block <unit> at <tmp> line 1 |
||
masak | (not really sure why I get those warnings) | ||
(or that error) | |||
SmokeMachine: I think you'd like a thing that I wrote recently-ish | |||
hold on, gonna dig it up | |||
11:04
k-man joined
|
|||
masak | SmokeMachine: github.com/masak/007/issues/294#is...-392330477 | 11:04 | |
11:05
leont joined
|
|||
masak | speaking of "list associative" ops, it's quite funny, I realized. infix:<&&> and infix:<||> don't actually _need_ to be list-associative, because they'd work the same (as macros) even if they were left-associative | 11:06 | |
but the operator that really, _really_ needs to be list-associative is infix:<^^> :D | |||
see github.com/masak/007/issues/464 for details | |||
11:14
antoniogamiz joined
|
|||
antoniogamiz | o/ | 11:14 | |
11:15
sena_kun joined
|
|||
masak | \o | 11:29 | |
kawaii | I have a module I'm working on which asks an API for some values, and then I'd like to be able to pull those values out and display them nicely for clarity. `say $result<attributeScores><{@models}>.map: *<summaryScore><value>;` I was hoping this would iterate over anything in my @models array but I just get an `((Any))` back in return, ideas? | 11:32 | |
`my MODEL @models = TOXICITY, SPAM;`, this is what my array looks like | |||
jnthn | I bet <{@models}> should just be {@models} | 11:33 | |
Otherwise you're looking up a literal string key '<{@modules}>' | |||
*models | |||
kawaii | jnthn: `(0.017453287 0.4579174)` you're right! | 11:34 | |
is there a way I can prefix each value with the name of the model in the array? | |||
jnthn | say @models Z~ ... | 11:35 | |
Though you maybe want it formatted nicely too :) | 11:36 | ||
I guess you can :p after {@models} and you'll get Pairs out where .key is the thing for @models and the .value is what you are getting now | 11:37 | ||
masak | SmokeMachine: anyway, with current Rakudo, I'm afraid infix:<&&> are too special-cased to override. :( from my macro-infused perspective, that's because we haven't defined them in core as (overridable) macros. | 11:38 | |
SmokeMachine | masak: what about it? | 11:39 | |
m: use experimental :macros; macro infix:<&&>($a, $b) { quasi { say "OK" } }; say 1 && 2 | |||
camelia | WARNINGS for <tmp>: OK True Useless use of constant integer 1 in sink context (line 1) Useless use of constant integer 2 in sink context (line 1) |
||
SmokeMachine | it was overrides, no? | ||
masak | hm, so it seems | ||
kawaii | jnthn: worked nicely, thanks :) | ||
masak | then that's slightly better news than I thought :) | ||
pmurias | in regards to using Perl 6 to generate queries from isn't that something that should be done more with code inspection rather then overriding operators | 11:40 | |
? | |||
SmokeMachine | masak: I was thinking to use something like that... | ||
antoniogamiz | what module would you use for scraping with perl6? | 11:42 | |
11:42
leont left
11:43
[particle] joined
|
|||
kawaii | antoniogamiz: scraping HTML or? | 11:43 | |
pmurias | as it seems like we really want to just compile a subset of Perl 6 to a SQL/some query structure | ||
11:43
[particle]1 left
|
|||
antoniogamiz | kawaii: yep html | 11:44 | |
kawaii | I'd probably use Cro::HTTP::Client for something like that | 11:45 | |
SmokeMachine | masak: now Im trying something like this (but its not working...) | ||
m: use experimental :macros; macro infix:<&&>($a, $b) { quasi { $a ~~ Int ?? "MyOwnObject" !! (so $a ?? ($b ~~ Int ?? "MyOwnObject" !! $b) !! False) } }; say 1 && 2 | |||
camelia | WARNINGS for <tmp>: True Useless use of constant integer 2 in sink context (line 1) Useless use of constant integer 1 in sink context (line 1) |
||
antoniogamiz | I've been looking Gumbo and LWP::Simple | ||
I'll take a look at Cro::HTTP | 11:46 | ||
::Client* | |||
SmokeMachine | masak: something that would be converted to something like this: | 11:47 | |
m: my $a = 1; my $b = 2; say $a ~~ Int ?? "MyOwnObject" !! (so $a ?? ($b ~~ Int ?? "MyOwnObject" !! $b) !! False) | |||
camelia | MyOwnObject | ||
sena_kun | antoniogamiz, you _may_ look at `deredere` module which uses Gumbo for parsing and HTTP::UserAgent. Though keep in mind that it is super-basic and for any non-trivial case you have to either extend it or rewrite things, maybe stealing some approach. | ||
11:48
kensanata joined
|
|||
antoniogamiz | sena_kun: I will use for something a bit complex so I'm going to choose cro instead, but thanks for the info :) | 11:49 | |
sena_kun | antoniogamiz, we always can upgrade this module to use Cro. ;) But sure, use whatever is more suitable for the job. | 11:51 | |
antoniogamiz | tbrowder: I've reading the discussion about #2529 | 11:58 | |
kawaii | jnthn: Z=> turned out to be a better operator for clarity by the way :) | ||
antoniogamiz | tbrowder: and I've though that maybe the minidocs should be "dockerized" (I dont know if that work exists) | ||
tbrowder: what do you think? | 11:59 | ||
12:00
guifa joined
|
|||
sena_kun | antoniogamiz, there is a minimal Docker container with Perl 6 installation, manual repo clone && some building may be needed though. | 12:01 | |
tbrowder | antoniogamiz: i don't know much about docker, but let me look at that issue... | 12:04 | |
antoniogamiz | sena_kun: yeah I know, but that dockerfile is used for the entire doc | ||
sena_kun: the issue I've sent (#2529) says that a minidoc repository would be helpful | 12:06 | ||
in order to test of the tooling with a self-contained subset of the current doc | |||
tbrowder | antoniogamiz: that looks like a good one to me. i see my comment there. i would start filling out more details to address that after checking with jj | 12:09 | |
antoniogamiz | tbrowder: ok :) I'm telling you this because I've had a meeting this morning with him and we have been discussing the new proposal | ||
tbrowder | ok, he's more on top of that, and you're in good hands with him | 12:11 | |
antoniogamiz | tbrowder: thanks :) | 12:12 | |
tbrowder | any progress on doc tooling is a giant plus | ||
antoniogamiz | well, are you going to participate in the perl weekly challenge? :D | ||
12:16
MidCheck left
|
|||
sena_kun | is there any explanation on rules and stuff like that? | 12:18 | |
masak | SmokeMachine: I'm sorry, I don't follow :/ | 12:19 | |
12:23
mowcat joined
12:24
mowotter joined
12:25
mowotter left
12:38
Ven``` joined
12:40
Ven`` left
12:42
squashable6 left
12:43
squashable6 joined
12:48
pistacchio left,
pistacchio joined
13:05
pistacchio left
13:06
pistacchio joined
13:14
antoniogamiz left
|
|||
xinming | In class declaration, Is it possible to apply role after the after class definition? | 13:15 | |
sena_kun | only using MOP | 13:17 | |
FooClass.^add_role(FooRole); FooClass.^compose; | |||
xinming | m: role R { method test () { "before".say; callsame; "after".say; }; }; class T does R { method test () { "class method".say; } }; T.new.test; | ||
camelia | class method | ||
xinming | sena_kun: Ok, Thanks, that's what I want. | ||
sena_kun: I'd wish we can have something like, later-does R | 13:18 | ||
role R { method test () { "before".say; callsame; "after".say; }; }; class T last-does R { method test () { "class method".say; } }; T.new.test; | |||
maybe last-does or later-does | 13:19 | ||
sena_kun | xinming, you can create a custom trait. | ||
xinming | or deferred-does | ||
sena_kun | but traits are applied at compile time anyway. | ||
xinming | Will learn that, Just thought though | ||
sena_kun: Can we use ::?ClASS.^add_role(FooRole); within class definition to achieve the same thing? | 13:20 | ||
sena_kun | both does and a possible custom `does-later` will be executed at compile time, so not so much difference. | ||
maybe if we knew your initial intention, something better could be proposed. | 13:21 | ||
xinming | m: role R { method test () { "before".say; callsame; "after".say; }; }; class T { method test () { "class method".say; } }; T.^add_role(R); T.^compose; T.new.test; | ||
camelia | class method | ||
13:22
kurahaupo left
|
|||
sena_kun | m: role A { method test {1.say} }; class C { method a { ::?CLASS.^add_role(A); ::?CLASS.^compose; } } | 13:22 | |
camelia | ( no output ) | ||
sena_kun | m: role A { method test {1.say} }; class C { method a { ::?CLASS.^add_role(A); ::?CLASS.^compose; } }; C.test; | ||
camelia | No such method 'test' for invocant of type 'C'. Did you mean any of these? List Set gist list in block <unit> at <tmp> line 1 |
||
sena_kun | m: role A { method test {1.say} }; class C { method a { ::?CLASS.^add_role(A); ::?CLASS.^compose; } }; C.a; C.test; | ||
camelia | 1 | ||
xinming | sena_kun: I had a role, Which will wrap some methods for a class, that class will provide the method to for role to wrap; | ||
sena_kun | xinming, ^ | 13:23 | |
13:23
ChoHag_ joined,
ChoHag left
|
|||
xinming | m: role R { method test () { "before".say; callsame; "after".say; }; }; class T { method test () { "class method".say; } }; T.^add_role(R); T.^compose; T.new.test; | 13:24 | |
camelia | class method | ||
xinming | sena_kun: Why won't my example work? | ||
I called T.^add_role(R); and T.^compose; | 13:25 | ||
sena_kun | well, your class method overrides one from role. | ||
so it is getting called. | 13:26 | ||
m: role R { method test () { "before".say; callsame; "after".say; }; }; class T { }; T.^add_role(R); T.^compose; T.new.test | |||
camelia | before after |
||
xinming | sena_kun: Actually, In my example, what I want to do is that method test in R will wrap the method test in T class. | ||
is it possible to do? | |||
jnthn | Composition is flattening, so only one method wins, and that'll be the one in the class | 13:27 | |
It looks more like you want to do a runtime mixin of the role, though that'd not affect the original class, but that's probably a good thing anyway :) | |||
xinming | jnthn: I want to affect the original class. | ||
jnthn | (Doing runtime role addition to an existing class like that will probably win you precomp conflicts) | ||
xinming | Ok, so, Seems, I need to consider other approach. | 13:28 | |
jnthn | xinming: Yes, that sounds wise | ||
xinming | m: role R { method test () { "before".say; callsame; "after".say; }; }; class T { method test () { "class method".say; } }; my $x = T.new; $x does R; $x.test; | 13:30 | |
camelia | before class method after |
||
xinming | jnthn: how to mix the role to the T class at compile time in this case? | 13:31 | |
sena_kun | m: role R { method test () { "before".say; callsame; "after".say; }; }; class T { method test () { "class method".say; } }; my $x = T.new; infix:<does>($x, R); $x.test; | 13:32 | |
camelia | before class method after |
||
sena_kun | probably | ||
m: role R { method test () { "before".say; callsame; "after".say; }; }; class T { method test () { "class method".say; } }; sub ap($x, $role) { infix:<does>($x, R); }; my $x = T.new; $x.test; | 13:33 | ||
camelia | class method | ||
sena_kun | m: role R { method test () { "before".say; callsame; "after".say; }; }; class T { method test () { "class method".say; } }; sub ap($x, $role) { infix:<does>($x, R); }; my $x = T.new; ap($x, R); $x.test | ||
camelia | before class method after |
||
jnthn | xinming: Maybe something like my constant T = anon class T { ... } does role R { ... }; | 13:34 | |
uh, *but role R | |||
xinming | let me try. | ||
jnthn | I don't actually know what you're overall trying to achieve though, so there may be a much cleaner solution to the original problem :) | ||
xinming | jnthn: I have classes only do computation, and I have a role will save to keep the results of the computation when condition meets. | 13:37 | |
sena_kun | maybe a dynamic variable will help? if it is a logger-like kind of thing | 13:38 | |
xinming | in this case, the class T will be the class do computation, And R will save the results somewhere. So if I want the computation class to keep history, I can give it "does R" to keep the history. | ||
sena_kun: Not logger-like, It's per-class, Not per object. | |||
m: role R { method test () { "before".say; callsame; "after".say; }; }; my constant T = anon class T { method test () { "class method".say; } } does R; my $x = T.new; $x.test; | 13:39 | ||
camelia | 5===SORRY!5=== Error while compiling <tmp> An exception occurred while evaluating a constant at <tmp>:1 Exception details: Cannot use 'does' operator on a type object T. in block at <tmp> line 1 |
||
xinming | m: role R { method test () { "before".say; callsame; "after".say; }; }; my constant T = class T { method test () { "class method".say; } } does R; my $x = T.new; $x.test; | ||
camelia | 5===SORRY!5=== Error while compiling <tmp> An exception occurred while evaluating a constant at <tmp>:1 Exception details: Cannot use 'does' operator on a type object T. in block at <tmp> line 1 |
||
xinming | jnthn: Will this be a bug? :-) | 13:40 | |
vrurg | xinming: why inheritance doesn't work for you? | ||
sena_kun | m: my $*SAVE = class anon { method save { say 'saved' }; method is-good { True } }; class A { method test { $*SAVE.save if $*SAVE.is-good } }; A.test | ||
camelia | saved | ||
xinming | vrurg: Because the class T will provide the calcuation method | ||
jnthn | xinming: I corrected it to `but` | 13:41 | |
sena_kun | (but the dynamic variable thing is a rough emulation for inheritance that is full of design flaws though) | ||
vrurg | xinming: And? If your other code relies on class T – can't that code get particular class through some kind of a function/method which would return the right class for them? | 13:42 | |
xinming | m: role R { method test () { "before".say; callsame; "after".say; }; }; my constant T = anon class T { method test () { "method".say; } } but R; my $x = T.new; $x.test; | ||
camelia | before method after |
||
xinming | This worked. :-) | ||
vrurg: The T class is not base class, they are the class provide calculation implementation. | 13:43 | ||
vrurg: It can be done via per-object bias to determine which object to keep history, and which object doesn't. I just try to make it for class instead of per object. | 13:45 | ||
sena_kun | xinming, I think the idea is to have "Saver" class/role with a defined interface, so `class Calc does Saver { method calc { call-saver-method; } }` | ||
13:45
mowcat left
|
|||
masak | m: say 1 || 2 // 3 | 13:45 | |
camelia | 1 | ||
vrurg | xinming: It doesn't make sense for me. Any class can be a base class. But as I don't have the full picture I can't judge. | ||
masak | according to S03, this should parsefail ^^ | ||
(because different list-associative operators on the same precedence level need to be disambiguated with parentheses) | 13:46 | ||
jnthn: thoughts? | |||
TimToady: if you're there, thoughts? :) | |||
S03:79, fwiw | |||
I can easily believe that S03 shouldn't be implemented as it stands -- but in that case, we need to put down a new rule _somewhere_ | 13:47 | ||
xinming | sena_kun: This is what I thought first. But later, i realized that subclass don't need to call the call-saver-method at all. | ||
sena_kun | xinming, why it doesn't? because you want to make it work using role/callsame magic? | 13:48 | |
masak | something like "sequences of list-associative operators of the same precedence implicitly group by exact operator, and the groups associate to the left" | ||
xinming | sena_kun: My first implementation does something like, self.keep-history(%result); in each method in subclasses. But later, I try to make this process "transpernt" | ||
masak | that is, `1 || 2 // 3` means `(1 || 2) // 3` | ||
jnthn | masak: Those are left associative, not list associative | 13:49 | |
kawaii | So I've seen some people use inline pod on their modules, and others put all the pod at the end of the module, is there some consensus on what users prefer for documentation? | ||
masak | jnthn: again, not according to S03 | ||
xinming | m: role Saver { method calc () { my $res = callsame; "save-result-here".say; }; }; my constant T = anon class T { method calc () { "do-calculation".say; } } but R; my $x = T.new; $x.test; | ||
camelia | 5===SORRY!5=== Error while compiling <tmp> Undeclared name: R used at line 1 |
||
xinming | m: role Saver { method calc () { my $res = callsame; "save-result-here".say; }; }; my constant T = anon class T { method calc () { "do-calculation".say; } } but Saver; my $x = T.new; $x.test; | 13:50 | |
camelia | No such method 'test' for invocant of type 'T+{Saver}'. Did you mean any of these? List Set gist list in block <unit> at <tmp> line 1 |
||
sena_kun | xinming, not sure if applicable, but I would not hide the call at all. | ||
jnthn | masak: S* are more of historical interest now; it's the spectest suite that defines how things should be | ||
masak | jnthn: I had a feeling you would say that; I find that answer... somewhat unsatisfactory. was there a decision in-between S03 and the spectest suite to make those operators left-associative? | ||
xinming | m: role Saver { method calc () { my $res = callsame; "save-result-here".say; }; }; my constant T = anon class T { method calc () { "do-calculation".say; } } but Saver; my $x = T.new; $x.calc; | ||
camelia | do-calculation save-result-here |
||
masak | if not, why were they made left-associative? | 13:51 | |
xinming | sena_kun: This what I mean :-) | ||
I know I can do run time mix-in for single objects. | |||
jnthn | masak: Quite possibly, but I don't have time to do the digging. | ||
masak: It's also, of course, possible that it was just implemented that way because it would have been a pain to do different from a code-gen point of view, and nobody noticed | 13:53 | ||
(until now) | |||
masak | jnthn: in the Perl 6 grammar, `|| ^^ //` all have prec %tight_or, which is list-associative | 13:54 | |
so I don't think they are left-associative | |||
(notice, again, that for `|| //`, there's no noticeable difference in semantics) | |||
jnthn | Which Perl 6 grammar are you looking at? | 13:55 | |
Rakudo's has: | |||
token infix:sym<||> { <sym> <O(|%tight_or, :iffy(1), :assoc<left>, :pasttype<unless>)> } | |||
token infix:sym<^^> { <sym> <O(|%tight_or, :iffy(1), :pasttype<xor>, :thunky<..t>)> } | |||
token infix:sym<//> { <sym> <O(|%tight_or, :assoc<left>, :pasttype<defor>)> } | |||
See the :assoc<left> | |||
masak | I was looking at those lines, yes. but apparently reading them wrong :) | 13:56 | |
jnthn | ah :) | ||
masak | oh, so the operators pick first a precedence, and then _override_ the associativity. fun. | ||
this... messes with my mental model of precedence and associativity a bit | |||
ok, but that answers my question. thank you, jnthn. | 13:57 | ||
13:57
robertle left
|
|||
jnthn | Not really, O just receives a set of named args | 13:57 | |
And so the "override" is just arg passing semantics | |||
And the O that handles precedence never knows the difference | 13:58 | ||
masak | yes yes | ||
xinming | sena_kun: What will you do to solve my problem? The Saver thing. | ||
masak | it's just that... to me, associativity is something that a _precedence level_ has. that's in fact quite clear from the (S03) precedence table | ||
13:58
robertle joined
|
|||
masak | and so if operators devidate from their level's precedence, then that's... an interesting form of anarchy, model-wise | 13:59 | |
deviate* | |||
sena_kun | xinming, what is the problem? a boilerplate method call in every calculation method? | ||
I wouldn't consider it as an issue in the first place, I think, unless it is some disaster type of thing. | 14:00 | ||
masak | jnthn: I come at this as someone who has spent a *lot* of the past 4-5 years thinking really hard about custom operators. doesn't mean I'm right, of course, but... getting an associativity that's separate from the one from your precedence level is a thing that Worries Me. | ||
jnthn | masak: Hm, but the concept of predence level doesn't really exist so far as the Perl 6 OPP goes | 14:01 | |
It's a model concept of the language user, perhaps, but it ain't really one of the parser | |||
masak | it's about how the optable parser is meant to build the tree. first it tiebreaks by precedence, and then it tiebreaks by (that precedence level's) associativity | 14:02 | |
but if the two ops in question each have an associativity, the second tiebreak may be inconclusive | |||
xinming | sena_kun: I don't like boilerplate method call for each of the subclass. But just now, I thought through about what you said, each class should be considered inheritable. Then my sollution makes these class not suitable for inheritance. | 14:04 | |
masak | what if you do `a X b Y c`, and X says to associate to the right but Y says to be non-associative? | ||
14:05
lizmat left
|
|||
masak | (X and Y being of equal precedence) | 14:05 | |
SmokeMachine | m: class R { method test () { "before".say; callsame; "after".say; }; }; class T last-does R { method test () { "class method".say; } }; T.^add_parent: R; T.new.test; | ||
camelia | 5===SORRY!5=== Error while compiling <tmp> Unable to parse class definition at <tmp>:1 ------> 3y; callsame; "after".say; }; }; class T7⏏5 last-does R { method test () { "class m expecting any of: generic role |
||
14:05
lizmat joined
|
|||
SmokeMachine | m: class R { method test () { "before".say; callsame; "after".say; }; }; class T { method test () { "class method".say; } }; T.^add_parent: R; T.new.test; | 14:05 | |
camelia | Parents cannot be added to class 'T'after it has been composed in block <unit> at <tmp> line 1 |
||
SmokeMachine | m: class R { method test () { "before".say; callsame; "after".say; }; }; class T is R { method test () { "class method".say; } }; T.new.test; | 14:06 | |
camelia | class method | ||
xinming | SmokeMachine: Because the method in T wins. | ||
the my constant T = anon class T { .. } but xx version works | |||
masak | in a way, associativity is _meant_ to be "when precedence is not enough, we at least build the tree in this unambiguous way". if associativity comes back with conflicting results, we're in trouble. | 14:07 | |
sena_kun | xinming, what's the issue with inheritance here? you want different savers for different children classes? | ||
xinming | Nothing wrong with inheritance, just want to make the Saver transparent. :-) | 14:08 | |
ignore me though, I'll go with inheritance, But good to know how to achieve something I want in perl6. :-) | 14:09 | ||
sena_kun | xinming, well, I am at no use here then, sorry. I'd consider it a bad design solution, to be honest. I mean, you are intentionally hiding execution parts from the user. It becomes harder to understand, debug and change. | ||
SmokeMachine | xinming: why don't you transform the computation class into roles and the saves into classes? | 14:10 | |
14:10
lizmat_ joined,
lizmat left,
lizmat__ joined
|
|||
sena_kun | a method call approach is surely more boilerplate (which is not bad considering the code piece is sensible), but instead it can be easily disabled for a particular case, overloaded and so on. while "One Rule Them All" solution is less customize-able. | 14:12 | |
but that's just me. :) | |||
xinming | SmokeMachine: I thought calculation is the important part, and keep results is a "feature". But now, I think in each calc method, explictly keep-result may not be that bad. | 14:14 | |
14:14
lizmat_ left
|
|||
SmokeMachine | xinming: if you are saving it on the database, you could do it with a Red model... :) | 14:15 | |
14:20
lizmat__ left
14:29
lizmat joined
14:33
isomorphismes joined
|
|||
masak | m: sub infix:<po>(*@v) is assoc<list> { @v.join(" po ") }; sub infix:<fi>(*@v) is equiv(&infix:<po>) is assoc("list") { @v.join(" fi ") }; say 1 po 2 po 3 fi 4 fi 5 | 14:33 | |
camelia | 5===SORRY!5=== Error while compiling <tmp> Only identical operators may be list associative; since 'po' and 'fi' differ, they are non-associative and you need to clarify with parentheses at <tmp>:1 ------> 3t") { @v.join(" fi ") }; say 1 po… |
||
masak | good news: we do have a warning in place \o/ | ||
s/warning/error/ | 14:34 | ||
xinming | SmokeMachine: No need to advertise, My next project will try Red. I've used Xoo, It works, But Still lacks many features I want. At least not to the level DBIC can offer | 14:35 | |
14:38
woolfy left
14:39
squashable6 left
|
|||
masak | my first foray into the spectest suite indicates that it's non-committal over the associativity of infix:<||> and infix:<&&>. I will mess around with building Rakudo in various ways to try to confirm this | 14:41 | |
for the record, I skimmed through S03-operators/precedence.t and S03-operators/short-circuit.t, both of which looked promising | 14:42 | ||
14:42
squashable6 joined,
isomorphismes left
14:43
Khisanth left
14:44
kensanata left
14:50
squashable6 left
14:52
Cabanossi left,
lizmat left
14:55
Cabanossi joined
14:56
squashable6 joined,
ChanServ sets mode: +v squashable6
14:57
MidCheck joined,
Khisanth joined
|
|||
ugexe | pmurias: i looked at node ( github.com/nodejs/node/blob/f2064d...os.cc#L114 ) and moarvm source (github.com/MoarVM/MoarVM/blob/d159...m/sys.c#L9 ) for uv_cpu_info -- so that pr will give the same result as moarvm. what exactly that result represents is not immediately clear to me from the documentation ( | 15:06 | |
docs.libuv.org/en/v1.x/misc.html#c.uv_cpu_info_t ) | |||
15:10
isomorphismes joined
15:13
zacts left
15:15
Actualeyes joined,
pistacchio left
15:19
isomorphismes left
15:22
ExtraCrispy joined
15:33
pmurias left
15:35
robertle left
15:39
pmurias joined
15:41
molaf left
|
|||
patrickb | Is there an easy way to look at the installed sources of a module? | 15:47 | |
tobs | patrickb: `zef look` will take you there | 15:53 | |
sena_kun | patrickb, just keep in mind that they are not meant to be edited by hands. | 15:54 | |
15:55
lookatme_q left
|
|||
patrickb | tobs: does `zef look` display installed modules or the ones from the repo? | 15:55 | |
timotimo | i think it checks out the repo for you | ||
patrickb | :-( | ||
15:56
lookatme_q joined
|
|||
ugexe | zef locate ... | 16:02 | |
editing those sources won’t do what you want though. But that’s how you locate installed sources to view | 16:03 | ||
xinming | m: role T { method t () { "method".say; } }; sub x (%t is copy) { %t.WHAT.say; }; my @a; my %h= (:a, :b); %h does T; @a.push: %h; x(%h); | 16:05 | |
camelia | (Hash) | ||
xinming | In this case, How can I also copy the "role"? | ||
with is-copy, role info are dropped. | 16:06 | ||
ugexe | m: my $test-dist = $*REPO.repo-chain.grep(CompUnit::Repository::Installable).map(*.candidates("NativeCall")).first.head; say $test-dist.content("lib/Test.pm6").slurp | 16:07 | |
camelia | use MONKEY-GUTS; # Allow NQP ops. unit module Test; # Copyright (C) 2007 - 2018 The Perl Foundation. # settable from outside my int $perl6_test_times = ?%*ENV<PERL6_TEST_TIMES>; my int $die_on_fail = ?%*ENV<PERL6_TEST_DIE… |
||
ugexe | you can query for a dist that contains some short-name, then ask for the content of a file in that distribution as shown above | 16:08 | |
patrickb | ugexe: Great! I don't want to edit them. It's helpful to look at installed stuff during error hunting. | 16:10 | |
16:11
domidumont left
16:12
pmurias left
16:16
epony left
16:28
[Sno] left,
jmerelo joined
16:30
epony joined,
zacts joined
16:32
cpan-p6_ joined,
cpan-p6 left
16:34
leont joined
16:35
choiboi left
16:36
choiboi joined
16:43
genese joined
16:46
cpan-p6_ left,
cpan-p6 joined
16:51
TimToady left
16:52
TimToady joined,
molaf joined
|
|||
tyil | rakudo.org is down | 16:56 | |
or not | |||
my internet is dodgy | |||
xinming | Another suggestion, Can we have a warning in if $x => 1 == ablabla { } ?? | 16:57 | |
Today, I got typo with if $x => 1 takes a while to find the problem. | |||
17:00
cpan-p6 left,
cpan-p6 joined
17:05
MidCheck left
17:09
Ven```` joined
17:10
Ven``` left
17:16
sauvin left
|
|||
moritz | what were you trying to write? | 17:20 | |
timotimo | like "numerical equivalence of pairs is useless, did you mean >= instead of =>?" | 17:21 | |
17:28
dakkar left
|
|||
moritz | m: say (a => 1) == (b => 1) | 17:30 | |
camelia | Cannot resolve caller Numeric(Pair:D: ); none of these signatures match: (Mu:U \v: *%_) in block <unit> at <tmp> line 1 |
||
moritz | seems like an error message that doesn't trigger a minute-long search | 17:31 | |
though "Cannot coerce Pair to Numeric" would be a better message | |||
xinming | timotimo: Yes, something like that. | 17:32 | |
Just now, I have something like if $idx => @history-reversed.elems - 1; | 17:33 | ||
Which I actually should write if $idx >= @history-reversed.elems -1 | |||
So, if there is warning here, can save a lot of time for people | 17:34 | ||
17:35
cpan-p6 left,
cpan-p6 joined
17:36
mowcat joined
17:37
lucasb joined,
mowotter joined
17:43
reach_satori joined
17:46
robertle joined
17:47
lizmat joined
17:48
domidumont joined,
lizmat left,
profan left,
lizmat joined,
cpan-p6 left
17:49
cpan-p6 joined,
patrickb left
17:50
profan joined
|
|||
timotimo | decentraleyes.org/ - awesome!! | 17:52 | |
tadzik | "download an install to learn more" rubs me the wrong way | 17:55 | |
but there's a readme in the gitlab link :) | |||
it is very cool though :) | 17:56 | ||
timotimo | it's so obvious | 17:58 | |
tadzik | at the same time, I think that's something that caching is supposed to solve | 18:00 | |
timotimo | it should, but there's still the original request | ||
tadzik | true. But with this extension, you don't know if the content you get is authentic, do you? | 18:01 | |
websites use this checksum mechanism for validating external resources, except when they don't | 18:02 | ||
18:02
cpan-p6 left
|
|||
timotimo | ha | 18:03 | |
18:03
cpan-p6 joined
|
|||
timotimo | for that you'd have to trust the extension does the right thing | 18:03 | |
these checksums are in use on many sites, and of course should be used on every one of them | |||
then again, who says that you're getting the authentic thing from whatever cdn the site is using | |||
18:14
zacts left
18:15
lizmat left
18:16
cpan-p6 left
18:17
cpan-p6 joined
18:21
lizmat joined
18:22
ab6tract joined
|
|||
ab6tract | .tell japhb sent a followup email :) | 18:22 | |
yoleaux | 14 Mar 2019 21:59Z <japhb> ab6tract: No, I hadn't noticed that, though it's been a while since I checked all my mail accounts and folders. I'll see if I can find it. | ||
ab6tract: I'll pass your message to japhb. | |||
18:30
cpan-p6 left
18:31
cpan-p6 joined
18:44
netrino joined,
cpan-p6 left,
molaf left
18:45
cpan-p6 joined
18:53
patrickb joined
18:55
netrino_ joined
18:56
netrino left
19:15
patrickb left
19:21
cpan-p6 left
19:22
cpan-p6 joined
19:24
kurahaupo joined
19:25
mowotter left,
mowcat left
19:34
lizmat left
19:35
cpan-p6 left,
cpan-p6 joined
19:36
lizmat joined
19:40
domidumont left
19:49
cpan-p6 left,
cpan-p6 joined
19:50
reach_satori left,
reach_satori joined
19:56
reach_satori left
19:57
MasterDuke left
20:03
jmerelo left,
cpan-p6 left,
cpan-p6 joined
20:05
reach_satori joined
20:14
Ven````` joined
20:15
Ven```` left
20:17
cpan-p6 left,
cpan-p6 joined
20:20
lizmat left
20:25
lizmat joined
20:30
lizmat left
20:31
cpan-p6 left,
cpan-p6 joined
20:38
reach_satori left
20:40
zacts joined
20:46
cpan-p6 left,
cpan-p6 joined
20:56
mowcat joined
20:57
mowotter joined
20:58
cpup left,
cpup joined
21:02
Skarsnik joined
21:05
ufobat joined
|
|||
Skarsnik | Hello there. I rerun my gumbo benchmark, and I admit I am kinda disapointed to be only 4x faster since rakudo 2016.01 x) gist.github.com/Skarsnik/2161a360c...8c8fc6d9d8 | 21:07 | |
timotimo | could you perhaps do a "perf record" and "perf report --stdio" of that benchmark? and perhaps another with the jit turned off? | ||
ufobat | mhm 2019.03.1 segfaulted on the first attempt of compiling it | 21:08 | |
timotimo | core dump please? :3 | ||
Skarsnik | what does that do? x) | ||
timotimo | perhaps "coredumpctl"? | ||
Skarsnik: it's a profiler that'll sample what function it hits (actually which exact instruction) a few thousand times per second (adjustable frequency) | 21:09 | ||
Skarsnik | Hoo you mean as rakudo option | ||
timotimo | just "perf record perl6 blah" | ||
it'll also tell us what parts of gumbo take how much time | 21:10 | ||
Skarsnik | the call to the lib C (gumbo parse html function) take like 0.01 x) | ||
ufobat tries to make a coredump | |||
timotimo | ufobat: maybe coredumpctl has one for you already? | 21:11 | |
Skarsnik: damn :D | |||
ufobat | coredumpctl is not installed | ||
timotimo | OK | ||
21:11
sena_kun left
|
|||
Skarsnik | hm 0.02 sec | 21:12 | |
timotimo | i mean, that's still like 10% :) :) | 21:13 | |
21:13
molaf joined,
cpan-p6 left
|
|||
Skarsnik | so basicly it take 10 time to time to parse the html5 to just transform the C struct to Perl 6 object | 21:13 | |
timotimo | mhm | ||
21:14
cpan-p6 joined
|
|||
Skarsnik | does 2019.03.1 is up2date for your profiler? x) | 21:14 | |
timotimo | yeah, i believe so | ||
Skarsnik | still no dock image or stuff to easily install it? x) | 21:16 | |
timotimo | nope, but now... now we have relocateable perl6 launchers! | 21:17 | |
it can become an appimage!! | |||
Skarsnik | I guess I just have to send the profile file xD | 21:18 | |
ufobat | it doesnt segfault anymore, i tried it 5 times | ||
Skarsnik | this is weird, I had no issue compiling 2019.03.1 | ||
timotimo | i feel like i already started on a Dockerfile, but i can't find it any more :| | 21:19 | |
Skarsnik | I saved a lot of time patching XML and removing some NCast call between the 2 runs of my benchmark. rakudo-2018.09, gumboxml.p6, 0.52847010577 vs rakudo-2018.09, gumboxml.p6, 0.3243064942 | 21:21 | |
timotimo | impressive | ||
Skarsnik | I run the test 50 times for each release and do an average, it's not a single run | 21:22 | |
21:23
domidumont joined,
sena_kun joined
|
|||
Skarsnik | ./rakudo-2016.01.1/install/bin/perl6 --profile --profile-filename testgumbo.json to get a profile? | 21:23 | |
ufobat | is there a rakudo brew clean command? | 21:24 | |
it just dont segfault anymore | |||
21:25
zacts left
|
|||
Skarsnik | you could cd rakudo and make distclean I guess? | 21:25 | |
21:27
domidumont left,
cpan-p6 left,
cpan-p6 joined
21:30
Black_Ribbon joined
21:32
pecastro joined
|
|||
timotimo | nah, you'll have to use .sql for the filename | 21:33 | |
ufobat: "nuke" is the one, it hink | |||
ufobat | jup.. | 21:34 | |
last try | |||
Skarsnik | the sql file is html lol | 21:35 | |
timotimo | in that case the filename didn't take? somehow? | 21:37 | |
oh | |||
you're in 2016.01 | |||
Skarsnik | I ran the wrong rakudo yes lol | ||
gist.github.com/Skarsnik/47cbaa402...082ffac864 | 21:38 | ||
timotimo | crap, my hard drive is *super* filled up to the brim | 21:39 | |
need to do some emergency cleaning | |||
Skarsnik | I have too many hard drive xD | 21:40 | |
21:41
cpan-p6 left,
cpan-p6 joined
21:42
sno joined
|
|||
Skarsnik | C: 233G 138G 95G 60% /mnt/c | 21:48 | |
F: 1.9T 1.3T 619G 67% /mnt/f | |||
G: 1.9T 344M 1.9T 1% /mnt/g | |||
K: 448G 70G 378G 16% /mnt/k | |||
El_Che | /mnt and disk as drive letters | 21:50 | |
a little schizzo :) | |||
Skarsnik | it's WPL | 21:51 | |
El_Che | WSL? | ||
Skarsnik | yes? the win 10 stuff to have a linux env ^^ | 21:52 | |
very handy | |||
21:55
curan left,
cpan-p6 left,
cpan-p6 joined
21:59
sena_kun left
22:00
ab6tract left
22:04
ravenousmoose_ joined,
ravenousmoose left
22:05
john_parr left
22:06
john_parr joined
22:09
zacts joined,
cpan-p6 left,
cpan-p6 joined
|
|||
Xliff | m: class A { method a { say ::?CLASS.name }; }; class B is A { }; A.new.a.say; B.new.a.say | 22:14 | |
yoleaux | 20 Mar 2019 09:16Z <SmokeMachine> Xliff: github.com/FCO/Red/issues/15#issue...-474745855 | ||
camelia | No such method 'name' for invocant of type 'A'. Did you mean any of these? none note take in method a at <tmp> line 1 in block <unit> at <tmp> line 1 |
||
Xliff | m: class A { method a { say ::?CLASS.^name }; }; class B is A { }; A.new.a.say; B.new.a.say | ||
camelia | A True A True |
||
Xliff | Is there any way to get the second "A" to say "B"? | 22:18 | |
Skarsnik | self::?CLASS.^name? | ||
jnthn | Xliff: self.^name | 22:19 | |
guifa | Are there any rough style guideliness for when to pass named args in or out of the parenthetical main args? | 22:22 | |
22:23
cpan-p6 left,
cpan-p6 joined
|
|||
guifa | By that I mean, foo(5, :$bar) is the same as foo(5) :$bar … or is it? | 22:23 | |
Xliff | m: class A { method a { say self.^name }; }; class B is A { }; A.new.a.say; B.new.a.say | 22:24 | |
camelia | A True B True |
||
Skarsnik | hm | 22:26 | |
m: class A { method a { say self.^name }; }; class B does A { }; A.new.a.say; B.new.a.say | |||
camelia | 5===SORRY!5=== Error while compiling <tmp> A is not composable, so B cannot compose it at <tmp>:1 |
||
ugexe | why are you "does"ing a class? | 22:28 | |
Skarsnik | dunno | ||
timotimo | that code has too high a doesage | ||
22:32
lizmat joined
|
|||
Xliff | jnthn++ | 22:32 | |
Skarsnik | I think Perl 6 class and heritance is always super confusing x) | ||
moritz | Skarsnik: why? it works exactly like in any other language | 22:34 | |
Skarsnik | m: class A { method foo(){say "foo"} }; class B is A { method foo(Int $a) { say "foo Int"}}; B.new.foo(42); | 22:36 | |
camelia | foo Int | ||
Skarsnik | Hoo this work now | ||
m: role A { method foo(){say "foo"} }; class B does A { method foo(Int $a) { say "foo Int"}}; B.new.foo(42); | 22:38 | ||
camelia | foo Int | ||
22:46
woolfy joined
22:49
pecastro left
22:50
cpan-p6 left
22:51
cpan-p6 joined
22:54
molaf left
|
|||
lizmat | weekly: brrt-to-the-future.blogspot.com/20...on-is.html | 22:57 | |
notable6 | lizmat, Noted! | ||
23:01
woolfy left
23:02
woolfy joined
23:03
cpan-p6 left,
cpan-p6 joined
23:04
rindolf left
|
|||
guifa | is there any syntactical sugar for converting a scalar into an array in a method signature, or should I just keep going with multi’s for that? (where I assume a list will be passed but want to accept a scalar rather than make someone create a single item list) | 23:05 | |
discord6 | <Vendethiel> *@ or **@ or +@? | 23:07 | |
lizmat | m: sub a(*@a) { dd @a }; a 42 | ||
camelia | Array element = [42] | ||
guifa | That’ll work great in this case, actually. (although if it were the first of several positionals, I guess it wouldn’t) | 23:09 | |
Vandethiel++ lizmat++ | |||
lizmat | sleep& | ||
discord6 | <Vendethiel> Perl 6 alas doesn’t treat end of lists as much like first citizens as beginning of lists (because of fear of the laziness abyss) | ||
23:09
Geth left
23:18
cpan-p6 left,
cpan-p6 joined
23:19
Ven`````` joined
23:20
Ven````` left
23:24
MasterDuke joined,
MasterDuke left,
MasterDuke joined
23:29
zacts left
23:32
cpan-p6 left,
cpan-p6 joined
|
|||
guifa | Interesting. The docs say that %?RESOURCES<foo> returns an IO::Path object, but it’s actually a Distribution::Resource one that holds an IO::Path inside, so it fails type checks | 23:34 | |
timotimo | i think IO::Path used to be what it did and then it was changed but not updated in the docs? perhaps? | 23:42 | |
23:42
mowotter left
|
|||
guifa | That sounds likely. There’s zero documentation for Distribution::Resource | 23:43 | |
23:43
mowcat left,
mowcat joined,
mowcat left
23:44
mowcat joined
|
|||
discord6 | <Vale> Hey I have a general question | 23:44 | |
23:44
mowcat left
|
|||
discord6 | <Vale> How can I compare 2 strings char by char with a loop? | 23:44 | |
23:44
mowcat joined
|
|||
discord6 | <Vale> my ($first, $second) = @_; foreach my $charA, $charB ($first, $second){ #compare $charA with $charB } | 23:45 | |
<Vale> Let $first and $second be strings | |||
<Vale> is this even possible like this? | |||
timotimo | you can get a list of characters with .comb and you can get a matching one from each with the Z metaop | ||
m: my ($first, $second) = ("hello", "goodbye")>>.comb; for $first Z $second -> $a, $b { say "$a-$b" } | 23:46 | ||
camelia | Too few positionals passed; expected 2 arguments but got 1 in block <unit> at <tmp> line 1 |
||
timotimo | m: my ($first, $second) = ("hello", "goodbye")>>.comb; for $first Z $second -> ($a, $b) { say "$a-$b" } | ||
camelia | h e l l o-g o o d b y e | ||
timotimo | nope | ||
m: my ($first, $second) = ("hello", "goodbye")>>.comb; for @$first Z @$second -> ($a, $b) { say "$a-$b" } | |||
camelia | h-g e-o l-o l-d o-b |
||
timotimo | see how it ends when the shorter string ends | ||
that's a thing that Z does that you have to be aware of | |||
m: my ($first, $second) = ("hello", "goodbye")>>.comb; for @$first »,« @$second -> ($a, $b) { say "$a-$b" } # if you want it to throw an exception when the lists aren't the same length use »,« | 23:48 | ||
camelia | Lists on either side of non-dwimmy hyperop of infix:<,> are not of the same length while recursing left: 5 elements, right: 7 elements in block <unit> at <tmp> line 1 |
||
timotimo | m: my ($first, $second) = ("hello", "goodbye")>>.comb; for @$first «,» @$second -> ($a, $b) { say "$a-$b" } # if you want it to repeat the shorter one until the longer one is exhausted, use «,» | 23:49 | |
camelia | h-g e-o l-o l-d o-b h-y e-e |
||
discord6 | <Vale> hmm | ||
23:50
netrino_ left
|
|||
timotimo | `Z` is equivalent to `Z,` but you can also use other operators there | 23:50 | |
discord6 | <Vale> Alright thanks | ||
<Vale> This is helpful | 23:51 | ||
timotimo | m: .perl.say for (<a b c d e> Z=> <1 2 3 4 5>) | ||
discord6 | <Vale> 😃 | ||
camelia | :a(IntStr.new(1, "1")) :b(IntStr.new(2, "2")) :c(IntStr.new(3, "3")) :d(IntStr.new(4, "4")) :e(IntStr.new(5, "5")) |
||
timotimo | ha, that's not such helpful output actually | ||
m: .perl.say for ("a b c d e".words Z=> "1 2 3 4 5".words) | |||
camelia | :a("1") :b("2") :c("3") :d("4") :e("5") |
||
23:54
Skarsnik left
|