»ö« 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 Zoffix on 25 May 2018. |
|||
jnthn | This is the way that HyperSeq and RaceSeq work | 00:00 | |
SmokeMachine | yes | ||
hum... | |||
b2gills | have it so each method returns a new instance that knows about the previous instance | ||
jnthn | They interpret the operations they knwo how to parallelize in their own way, and then fall back on being normally iterable once you do an operation outside of that set. | ||
Much as in this case you want to stack up operations while in the while/ignore filtering language, and then iterate the result once an operation like .map is appended | 00:01 | ||
SmokeMachine | jnthn: Thanks! Ill try that! | 00:02 | |
jnthn | :) | 00:03 | |
SmokeMachine++ | |||
timotimo | i think we'll really want a good ordered hash in the ecosystem at some point; the question keeps coming up | ||
(i can barely keep up with my one module …) | 00:04 | ||
MasterDuke | timotimo: isn't that what ArrayHash does? | 00:07 | |
timotimo | oh, is it? | ||
cool. | 00:08 | ||
MasterDuke | TimToady: locally i get results consistent with that for more iterations, but benchable would time out.... | ||
eco: ArrayHash | |||
buggable | MasterDuke, ArrayHash 'An array in a hash in an array... like a turducken': git://github.com/zostay/perl6-ArrayHash.git 1 other matching results: modules.perl6.org/s/ArrayHash | ||
SmokeMachine | eco: OrderedHash | 00:17 | |
buggable | SmokeMachine, OrderedHash 'blah blah blah': modules.perl6.org/dist/OrderedHash:...20Oliveira | ||
00:18
wonner joined
|
|||
jnthn | Nice description :P | 00:19 | |
timotimo | "Write Me!" | ||
SmokeMachine | :( | ||
00:27
wonner left
|
|||
fake_space_whale | If I am naming a module with the intent of possible uploading the package to Perl 6 CPAN, what is the proper way to choose a prefix like how other modules have names like JSON::tiny? | 00:36 | |
s/possible/possibly/ | 00:37 | ||
00:39
markoong left
|
|||
timotimo | i don't have a good suggestion. only that we tend to have App:: for things that we expect users to directly invoke like ... like an application i guess | 00:42 | |
fake_space_whale | so the norm would be look at existing modules and sorta back solve for a good prefix from similar modules? | 00:50 | |
timotimo | that's what I'd do (but i don't have many modules at all) | ||
MasterDuke | you also have a lot more freedom to re-use names since they can be distinguished by author (when 'use'ing them) | 00:53 | |
timotimo | right | ||
01:04
jameslenz joined
01:07
fascinum joined
01:08
Zoffix joined,
jameslenz left
|
|||
Zoffix | Weird: "dd ['ZZZZ', achar, .<condition>, achar ~~ .<condition>];" gives me ["ZZZZ", "A", /<[A..Za..z\d+-]>/, Bool::False] | 01:09 | |
m: say "A" ~~ /<[A..Za..z\d+-]>/ | |||
camelia | 「A」 | ||
Zoffix | why is it false there :S | ||
oh, the $_ var | 01:10 | ||
m: $_ := {:cond(/<[A..Za..z\d+-]>/)}; my \achar = 'A'; dd ['ZZZZ', achar, .<condition>, achar ~~ .<condition>]; | |||
camelia | ["ZZZZ", "A", Any, Bool::False] | ||
Zoffix | m: $_ := {:cond(/<[A..Za..z\d+-]>/)}; my \achar = 'A'; dd ['ZZZZ', achar, .<condition>, .<condition>.ACCEPTS: achar]; | ||
camelia | ["ZZZZ", "A", Any, Bool::True] | ||
Zoffix | k | ||
01:11
Zoffix left
|
|||
lookatme | evalable6: say "I am working"; | 01:13 | |
evalable6 | I am working | ||
lookatme | How to add command line argument to robot evalable6 ? | ||
MasterDuke | evalable6: source | 01:16 | |
evalable6 | MasterDuke, github.com/perl6/whateverable | ||
MasterDuke | lookatme: github.com/perl6/whateverable/blob...valable.p6 | 01:17 | |
lookatme | evalable6: pastebin.com/4hqBMvzP -w -a -b | 01:19 | |
evalable6 | lookatme, It looks like a URL, but mime type is ‘text/html; charset=utf-8’ while I was expecting something with ‘text/plain’ or ‘perl’ in it. I can only understand raw links, sorry. | ||
lookatme | evalable6: pastebin.com/raw/4hqBMvzP -w -a b | ||
evalable6 | lookatme, Successfully fetched the code from the provided URL | ||
done the supplier | |||
MasterDuke | lookatme: i think the '-w -a b' will just get ignored | 01:23 | |
lookatme | yes, MasterDuke | 01:24 | |
I am now review the code find something can set command line arguments :) | |||
timotimo | you can perhaps overwrite/mutate @*ARGS from user code at the earliest stage, like with a BEGIN block | 01:25 | |
lookatme | oh, right :) | 01:26 | |
evalable6: pastebin.com/raw/sAJjAmzD | 01:28 | ||
evalable6 | lookatme, Successfully fetched the code from the provided URL | ||
In Parser: Emit the option -w In MAIN: GOT MESSAGE: The -w matched ? FAILED In MAIN: GOT M… |
|||
lookatme, Full output: gist.github.com/88d6984b67b5bba78e...2644ddd38d | |||
01:32
reu left
|
|||
AlexDaniel | e: chdir ‘sandbox’; run ‘wget’, ‘pastebin.com/raw/sAJjAmzD’ | 01:32 | |
evalable6 | --2018-07-18 03:32:44-- pastebin.com/raw/sAJjAmzD Resolving pastebin.com (pastebi… |
||
AlexDaniel, Full output: gist.github.com/01acf9a0226554b7aa...cb63c1ba38 | |||
AlexDaniel | e: run ‘sandbox/sAJjAmzD’, 42 | 01:33 | |
evalable6 | (exit code 1) The spawned command 'sandbox/sAJjAmzD' exited unsuccessfully (exit code: 1) in block <unit> at /tmp/jCd2ivmJRt line 1 |
||
AlexDaniel | e: run <perl6 sandbox/sAJjAmzD>, 42 | ||
evalable6 | In Parser: Emit the option -w In MAIN: GOT MESSAGE: The -w matched ? FAILED In MAIN: GOT M… |
||
AlexDaniel, Full output: gist.github.com/8b7b49309bed9dd236...d9707386c4 | |||
AlexDaniel | I mean, that's how you can do it ↑ | ||
well, that's one way | 01:34 | ||
there's a better one | |||
e: gist.github.com/AlexDaniel/f501ce8...f900c87e24 | 01:35 | ||
evalable6 | AlexDaniel, Using file “run.p6” as a main file, other files are placed in “sandbox/” | ||
In Parser: Emit the option -w In MAIN: GOT MESSAGE: The -w matched ? FAILED In MAIN: GOT M… |
|||
AlexDaniel, Full output: gist.github.com/e3049b93ddff0ce345...0784d32c3c | |||
AlexDaniel | lookatme: ↑ | ||
that probably makes more sense :) | |||
lookatme | :( Can not access gist | 01:36 | |
AlexDaniel | what do you mean? | ||
lookatme | Stupid Firewall | ||
China | |||
01:37
MasterDuke left
|
|||
AlexDaniel | oooh | 01:37 | |
well, that's unfortunate… | |||
whateverable doesn't support multifile thingies anywhere else besides github | |||
but you can still `wget` whatever you need :) | 01:38 | ||
lookatme | yeah, I just want ask is this good practice, emit something (like $mc) to a supply, and get if it is done well through the interface of the $mc | ||
like .available | |||
AlexDaniel | e: spurt ‘sandbox/foo’, ‘sub MAIN($x) { say ‘hello=’, $x }; run <perl6 sandbox/foo>, 42; | 01:39 | |
evalable6 | (exit code 1) 04===SORRY!04=== Error while compiling /tmp/kK2SUl2gwQ Unable … |
||
AlexDaniel, Full output: gist.github.com/df427a33956d4bd34c...48e834fee1 | |||
AlexDaniel | e: spurt ‘sandbox/foo’, 「「「sub MAIN($x) { say ‘hello=’, $x }」」」; run <perl6 sandbox/foo>, 42; | ||
evalable6 | (exit code 1) 'sandbox/foo' is a directory, cannot do '.open' on a directory in block <unit> at /tmp/yzMPwJJaOp line 1 |
||
AlexDaniel | e: spurt ‘sandbox/baz’, 「「「sub MAIN($x) { say ‘hello=’, $x }」」」; run <perl6 sandbox/baz>, 42; | ||
evalable6 | WARNINGS for /home/bisectable/git/whateverable/sandbox/baz: Useless use of "「sub MAIN($x) { say ‘hello=’, $x }」" in expression "「sub MAIN($x) { say ‘hello=’, $x }」" in sink context (line 1) |
||
AlexDaniel | e: spurt ‘sandbox/baz’, 「sub MAIN($x) { say ‘hello=’, $x }」; run <perl6 sandbox/baz>, 42; | 01:40 | |
evalable6 | hello=42 | ||
AlexDaniel | yay \o/ | ||
lookatme | oh, I see | 01:41 | |
AlexDaniel | lookatme: can't answer your question unfortunately, my brain is shutting down :) | ||
AlexDaniel 💤 | |||
lookatme | oh .. :) | ||
haha | 01:42 | ||
e: run < ls sandbox >; | |||
evalable6 | 040-request.t 0.806238500539699.lock answer aws-s3-perl6 basic.t baz bombz can data DBIish… |
||
lookatme, Full output: gist.github.com/cc269f232c3902bbd6...a228c1f96b | |||
lookatme | thanks AlexDaniel | 01:43 | |
01:44
mephinet joined
01:52
reu joined
02:03
molaf left
02:16
molaf joined
02:27
aborazmeh joined,
aborazmeh left,
aborazmeh joined
|
|||
Geth | doc: 7b0b78450f | Coke++ | doc/Type/IO/Handle.pod6 This example can't work without modules installed |
02:32 | |
synopsebot | Link: doc.perl6.org/type/IO::Handle | ||
02:47
fbynite joined
|
|||
fbynite | is there a p6 module equivalent to p5's Math::Round? | 02:48 | |
lookatme | m: 2.333.round.say; # ? | 02:51 | |
camelia | 2 | ||
lookatme | what that Math::Round do ? | ||
s/what/what's/ | 02:52 | ||
fbynite, is this helpful ? | 02:53 | ||
^^ | |||
fbynite | slightly, except that I want to round to the nearest tenth | 02:55 | |
lookatme | fbynite, they are many other method : docs.perl6.org/type/Int#(Real)_method_round | 02:56 | |
oh, I see the module example | 02:58 | ||
you need a `nearest` ? | 02:59 | ||
fbynite | yep, exactly - I'm reading the link you sent | 03:00 | |
looks like I need to set the scale | |||
lookatme | m: 2.333.round(10).say; # ? | 03:01 | |
camelia | 0 | ||
lookatme | m: 15.round(10).say; # ? | ||
camelia | 20 | ||
lookatme | m: 5.round(10).say; # ? | ||
camelia | 10 | ||
fbynite | 2.333.round(0.1).say | ||
evalable6 | 2.3 | ||
lookatme | m: 14.999.round(10).say; # ? | 03:02 | |
camelia | 10 | ||
fbynite | 14.999.round(0.1).say | ||
evalable6 | 15 | ||
fbynite | lookatme: thanks! | 03:03 | |
03:03
ruoso left
|
|||
lookatme | welcome | 03:03 | |
m: (-45).round(10).say | 03:04 | ||
camelia | -40 | ||
03:04
jameslenz joined
|
|||
lookatme | fbynite, but notice the negative number, it have different result with that nearest in Math::Round | 03:05 | |
fbynite | -45.round(10).say | 03:07 | |
evalable6 | WARNINGS for /tmp/CeGRYBCS83: 50 Useless use of "-" in expression "-45.round(10).say" in sink context (line 1) |
||
03:08
jameslenz left
|
|||
fbynite | using the REPL, I got 50 | 03:08 | |
lookatme | you should parentheses the -45 | 03:09 | |
say (-45).round(10) | |||
evalable6 | -40 | ||
lookatme | say -45.round(10) | ||
evalable6 | -50 | ||
03:11
MasterDuke joined
03:15
fake_space_whale left,
MasterDuke_ joined
03:18
MasterDuke left,
MasterDuke_ is now known as MasterDuke
03:21
fbynite left
03:30
fbynite joined
03:37
aborazmeh left
03:38
fascinum left
|
|||
warriors | cool | 03:52 | |
i think -45.round(10) is treated as -(45.round(10)) | 03:53 | ||
03:59
sauvin joined,
wamba joined
04:04
sauvin left
04:09
sauvin joined
04:23
Kaiepi joined
|
|||
Kaiepi | i won't be able to contribute for a while since i'll be in the mental hospital starting tomorrow | 04:24 | |
sorry | 04:25 | ||
benjikun | Kaiepi: I hope everything turns out okay bud | 04:34 | |
04:42
brrt joined
|
|||
Kaiepi | thanks | 04:42 | |
04:53
curan joined
|
|||
kjk | MasterDuke: so ,= is a lot faster than <<=<< ? Am I interpreting the benchmark result right? | 05:04 | |
05:04
jameslenz joined
05:06
wamba left
05:08
jameslenz left
05:09
speedChi- joined
05:10
zoosha_ joined
05:11
cibs_ joined,
avarab joined,
avarab left,
avarab joined,
nopl_ joined
05:13
wamba joined
05:16
buggable left,
eliasr left,
SmokeMachine left,
BuildTheRobots left
05:23
felher joined,
spider-mario joined
05:25
shadowpaste joined
05:27
molaf left
05:35
buggable joined,
leah2 joined,
kent\n joined,
casdr joined,
zostay joined,
xi- joined,
SmokeMachine joined,
BuildTheRobots joined,
timeless joined,
rodarmor joined,
skaji joined,
olinkl joined,
chansen_ joined,
Spot_ joined,
PotatoGim joined,
huggable joined,
Failure joined,
joy_ joined,
rajaniemi.freenode.net sets mode: +vv buggable huggable
05:38
diegok joined
06:07
xtreak joined
06:08
wamba left
06:16
bisectable6 joined,
greppable6 joined,
nativecallable6 joined,
statisfiable6 joined
06:29
rindolf joined
06:32
kerframil left
06:34
rindolf left
06:41
konsolebox joined
06:45
wamba joined
06:50
robertle joined,
rindolf joined
06:52
domidumont joined
06:58
domidumont left,
domidumont joined
07:04
jameslenz joined
07:09
jameslenz left
07:14
lookatme joined
07:29
brrt left
07:35
troys left
07:48
domidumont left
07:49
domidumont joined
07:50
psychoslave joined
07:55
sarna joined
07:56
xinming_ joined
07:57
zakharyas joined
|
|||
sarna | hey, how to call a method from another method? | 07:57 | |
self.method()? | 07:58 | ||
07:58
psychoslave left
08:02
dakkar joined
|
|||
lookatme | sarna, yes, right | 08:05 | |
m: class Foo { method bar() { self.foo(); }; method foo() { "CALL ME".say; }; }; Foo.new.bar; | 08:06 | ||
camelia | CALL ME | ||
sarna | ok :) thought maybe there was another way | ||
08:06
brrt joined
|
|||
lookatme | sarna, another way ? | 08:06 | |
sarna | lookatme: dunno really. it doesn't matter :D | 08:07 | |
lookatme | this is the official way :) | ||
geekosaur | aside from foo(self:) | ||
lookatme | if you want another way, it maybe ^^ | ||
geekosaur | which is just a different way to say self.foo() | ||
lookatme | yeah, like geekosaur said | ||
foo(self, ...) | |||
geekosaur | no, it has to be a colon so it's the invocant rather than a parameter | 08:08 | |
08:08
zakharyas left
|
|||
geekosaur | you do find some things that work that way, but that's because there are both method and sub forms defined for them | 08:08 | |
sarna | cool beans | ||
lookatme | maybe foo(self: ...) ? | ||
geekosaur | right, foo(self: other parms here) | ||
lookatme | m: class Foo { method bar() { $?CLASS.^lookup("foo").(self); }; method foo() { "CALL ME".say; }; }; Foo.new.bar; | 08:09 | |
camelia | CALL ME | ||
lookatme | m: class Foo { method bar() { $?CLASS.^lookup("foo").(self, 4); }; method foo($a) { "CALL ME $a".say; }; }; Foo.new.bar; | 08:10 | |
camelia | CALL ME 4 | ||
lookatme | m: class Foo { method bar() { $?CLASS.^lookup("foo").(self: 4); }; method foo($a) { "CALL ME $a".say; }; }; Foo.new.bar; | ||
camelia | 5===SORRY!5=== Error while compiling <tmp> Unable to parse expression in argument list; couldn't find final ')' (corresponding starter was at line 1) at <tmp>:1 ------> 3od bar() { $?CLASS.^lookup("foo").(self:7⏏5 4); }; method foo($a) … |
||
lookatme | It's not working, the colon | ||
sarna | btw, can I declare a method inside a method? like with subs | 08:12 | |
lookatme | yes sarna | ||
08:12
fbynite left
|
|||
lookatme | `my method` would works fine | 08:12 | |
sarna | my method inside that other method? | 08:13 | |
I don't want it to be visible from the outside, because, well, it wouldn't make sense from the outside | |||
lookatme | m: my method outside(self: $a) { say self, $a; }; say outside(42, "."); | ||
camelia | 5===SORRY!5=== Error while compiling <tmp> Invalid typename 'self' in parameter declaration. at <tmp>:1 ------> 3my method outside(self7⏏5: $a) { say self, $a; }; say outside(42, |
||
lookatme | m: my method outside($a) { say self, $a; }; say outside(42, "."); | 08:14 | |
camelia | 42. True |
||
lookatme | sarna, if you want private method, you can add ! before the method name | 08:15 | |
m: class Foo { method !foo($a) { "CALL ME $a".say; }; }; Foo.new.foo: 4; | |||
camelia | No such method 'foo' for invocant of type 'Foo'. Did you mean '!foo'? in block <unit> at <tmp> line 1 |
||
sarna | hmm I don't know if I explained correctly | 08:16 | |
lookatme | I recommend you read the documents about Class docs.perl6.org/language/classtut#i...methods%29 | ||
sarna, you can use private method in other method ,but not outside | 08:17 | ||
that's what I said | |||
sarna | what I'm trying to accomplish: | 08:21 | |
m: sub foo() { sub bar() { say 'hi'; }; bar(); }; foo(); | |||
camelia | hi | ||
sarna | m: sub foo() { sub bar() { say 'hi'; }; bar(); }; foo(); bar(); | ||
camelia | 5===SORRY!5=== Error while compiling <tmp> Undeclared routine: bar used at line 1. Did you mean 'bag', 'VAR'? |
||
sarna | with 'my method bar()' I get an error | 08:22 | |
Too few positionals passed; expected 1 argument but got 0 | |||
I guess self isn't passed to bar or something | 08:23 | ||
lookatme | why do you want a method ? | ||
m: sub foo() { my method bar() { say self; }; bar(42); }; foo(); | |||
camelia | 42 | ||
lookatme | you should pass self to bar manually | 08:24 | |
sarna | I guess self isn't passed to bar or something | ||
sorry | |||
lookatme | hmm ? | ||
sarna | alt-tabbed to a wrong thing :) I'll check if your code works for me, a sec | ||
lookatme | okay | ||
sarna | okay, it works! thank you :D | 08:26 | |
and sorry for not explaining myself better | |||
08:27
sarna left
08:31
zakharyas joined
08:41
Ven` joined,
xtreak left
08:50
domidumont left,
domidumont joined
08:51
domidumont left
08:52
domidumont joined
08:58
brrt left
09:01
xinming_ left
09:03
xinming joined
09:05
psychoslave joined,
jameslenz joined,
psychoslave left
09:06
psychoslave joined
09:07
dogbert2 joined
09:08
xtreak joined
09:09
sena_kun joined,
xinming left
09:10
jameslenz left,
xinming joined
09:11
brrt joined
09:16
domidumont left
09:17
domidumont joined
09:27
brrt left
09:28
lizmat joined
09:30
cibs_ is now known as cibs
09:31
domidumont left
09:32
domidumont joined
09:44
scimon joined
09:45
aindilis joined
09:46
psychoslave left,
psychoslave joined
10:00
SCHAPiE joined
10:04
zakharyas left
10:05
zakharyas joined
10:08
andrewalker joined
10:10
psychoslave left
10:13
pmurias joined
10:26
Ven` left
10:30
SCHAPiE left
10:33
xtreak left
|
|||
buggable | New CPAN upload: Archive-Libarchive-Raw-0.0.6.tar.gz by FRITH modules.perl6.org/dist/Archive::Lib...cpan:FRITH | 10:36 | |
10:38
markoong joined
10:40
Zoffix joined
|
|||
Zoffix | I love how much easier it is to make custom IO handles in 6.d: raw.githubusercontent.com/perl6/ma...801752.pdf | 10:50 | |
m: -45 .round: 10 # another way to specify precedence of prefix before method call here, is to add a space instead of parens | 10:58 | ||
camelia | ( no output ) | ||
Zoffix | m: say -45 .round: 10 # another way to specify precedence of prefix before method call here, is to add a space instead of parens | ||
camelia | -40 | ||
11:00
Zoffix left
11:01
buggable left,
buggable joined,
ChanServ sets mode: +v buggable
11:02
robertle left
11:03
SCHAPiE joined
11:05
jameslenz joined
11:06
xtreak joined
11:10
jameslenz left
11:12
Schepeers joined,
zakharyas left
11:13
xinming left
11:24
xinming joined
11:26
Ven` joined
11:33
HaraldJoerg joined
11:47
psychoslave joined
11:50
psychoslave left,
psychoslave_ joined,
psychoslave_ is now known as psychoslave
11:51
raschipi joined
11:56
robertle joined
12:08
psychoslave left
12:16
scimon left
12:23
fake_space_whale joined
12:24
veesh joined
|
|||
veesh | what's a good font to use in my terminal for the perl6 repl? | 12:25 | |
i get weird overlaps with my default | |||
12:25
itaipu joined
12:28
zakharyas joined
|
|||
lizmat | veesh: that's very much dependent on the OS / terminal program that you're using | 12:28 | |
12:30
vike joined,
MasterDuke left
|
|||
timotimo | i tend to be anti-REPL anyway :S | 12:30 | |
not against REPL in general, just against *our* repl :\ | 12:36 | ||
Geth | ¦ doc: tbrowder self-assigned new manage-page-order.p6 script github.com/perl6/doc/issues/2185 | 12:37 | |
12:40
nooninm joined,
domidumont left
|
|||
nooninm | I am going to enter a short test script to show that sub MAIN is executing last instead of first. | 12:40 | |
12:40
domidumont joined
|
|||
nooninm | sub execute_after_main(Str $string) { say "\tDid this $string print out after MAIN was done?"; } execute_after_main("1"); sub MAIN() { say "\tThis is main so this should print first"; } execute_after_main("2"); #Result: # Did this 1 print out after MAIN was done? # Did this 2 print out after MAIN was done? # This is main so this should print first | 12:41 | |
How does one enter line breaks in irc? | |||
Let me try again, one line at a time | |||
tbrowder_ | hi #perl6 | ||
nooninm | sub execute_after_main(Str $string) { | ||
say "\tDid this $string print out after MAIN was done?"; | |||
} | 12:42 | ||
timotimo | you're right, MAIN gets executed after the script has finished running | ||
jnthn | MAIN executes after the mainline of the script | ||
timotimo | you may be interested in a phaser | ||
jnthn | In part so that it can fiddle with @*ARGS if needed | ||
nooninm | # Yes, it is supposed to. My script will show that it is not. | ||
tbrowder_ | AlexDaniel: ref Lang page: do you want subpages for groups or drop down lists? please enter as issue and assign me u;less someone else has raised a hand. | 12:43 | |
nooninm | What do mean "after the main line" | ||
AlexDaniel | tbrowder_: just separate tables will do | ||
nooninm | Do you mean after all other code has executed? | ||
timotimo | yes | ||
tbrowder_ | ok | ||
12:43
itaipu left
|
|||
nooninm | Perl page 62 of Think Perl 6, a program that has a defined MAIN subroutine will usually start its execution with that subroutine. | 12:44 | |
12:44
itaipu joined
|
|||
nooninm | But if as you say it executes sub MAIN last, the book is in error, correct? | 12:44 | |
Altreus | can I slice an object to fetch multiple properties at once? | ||
jnthn | nooninm: Seems so, yes. It's behaved in the current way for as long as I can remember. | 12:45 | |
Altreus: Destructure it | |||
timotimo | do i have the wrong page? | ||
this is in chapter 4: loops, conditionals, and recursion | |||
it has "nested conditionals" on 62 and "if conditionals as statement modifiers" and "unless conditional statement" on 63 | |||
nooninm | Okay, I'll try to write the author. We have two topics going on here so I'll leave. Thanks | ||
Altreus | I put destructure into google and got results! | 12:46 | |
nooninm | Bye | ||
timotimo | no need to leave | ||
there's a ticket tracker on github if you have an account | |||
for think perl 6 the book | |||
lizmat | nooninm: page 62 in my copy doesn't say anything about MAIN ? | ||
jnthn | m: my (:$numerator, :$denominator) := 4.5; say $numerator; say $dominator; | ||
camelia | 5===SORRY!5=== Error while compiling <tmp> Variable '$dominator' is not declared. Did you mean '$denominator'? at <tmp>:1 ------> 3enominator) := 4.5; say $numerator; say 7⏏5$dominator; |
||
jnthn | m: my (:$numerator, :$denominator) := 4.5; say $numerator; say $denominator; | 12:47 | |
camelia | 9 2 |
||
jnthn | Altreus: ^^ | ||
.oO( Guess what I'm been doing too much of... ) |
|||
nooninm | This is the title on page 62: "4.15 Program Arguments and the MAIN Subroutine" | ||
lizmat | nooninm: it's page 69 in my hardcopy | 12:48 | |
Geth | ¦ doc: tbrowder self-assigned divide Language page groups into separate pages github.com/perl6/doc/issues/2186 | ||
nooninm | Okay. I have 1st Edition, Version 0.5.0 May 2017 | ||
lizmat | but you're right, the phrasing could have been better | ||
nooninm: as do I, but in hardcopy. I assume you have en ebook version ? | 12:49 | ||
nooninm | Good enough. I'll leave you guys. And thanks! | ||
bye | |||
lizmat | bye nooninm | ||
12:50
xtreak left
12:54
nooninm left,
itaipu left,
itaipu joined
12:59
itaipu left,
itaipu joined
13:01
scimon joined
13:03
ruoso joined,
curan left
13:04
itaipu left
13:05
zakharyas left,
itaipu joined,
zakharyas joined,
jameslenz joined
13:08
araraloren joined,
psychoslave joined
13:09
itaipu left,
aindilis left
13:10
jameslenz left,
itaipu joined,
psychoslave_ joined
13:13
psychoslave left,
psychoslave_ is now known as psychoslave
13:14
domidumont left,
domidumont joined,
domidumont left
13:15
domidumont joined,
lalitmee joined
13:19
Zoffix joined,
aindilis joined
|
|||
Zoffix | m: .say for (Date.today…∞).grep(1 ≤ *.day-of-week ≤ 5)[^10] # the … also dwims without needing * + 1 in there | 13:19 | |
camelia | 2018-07-18 2018-07-19 2018-07-20 2018-07-23 2018-07-24 2018-07-25 2018-07-26 2018-07-27 2018-07-30 2018-07-31 |
||
13:20
wamba left
|
|||
Zoffix | oops, wc | 13:20 | |
13:20
Zoffix left
|
|||
raschipi | Yuck, days of the week starting at Monday. | 13:22 | |
timotimo | that's the only way it makes sense | ||
the weekend goes at the end, not "at both ends" | 13:23 | ||
raschipi | That just means it's not the "weekend". | 13:24 | |
timotimo | why would saturday and sunday not be the weekend? | 13:25 | |
raschipi | Saturday is the weekend and Sunday is the weekstart. | 13:26 | |
Ven` | first day of the week being monday is obvious to everyone but americans I think :). | ||
timotimo | that is super weird to me | ||
jnthn | I think you're the first person I've ever heard use the word weekstart :) | ||
.oO( It's making a weak start on its adoption... ) |
|||
raschipi | I just made it up. | ||
timotimo | we call that "cognitive dissonance" :D | 13:27 | |
raschipi | Ven`: I'm not American. | ||
Ven` | > According to the International Organization for Standardization ISO 8601, Sunday is the seventh day of the week | ||
whatever that is worth, though. | |||
raschipi | Just means they are wrong. | ||
Ven` | Not sure about that :-). | 13:28 | |
timotimo | i'm not sure if you're serious or not, raschipi | ||
raschipi | If you just assume standards organizations are always right, you're gonna have a bad time. | ||
Ven` | so it's goodI did no such thing. | ||
timotimo: it depends between countries | 13:29 | ||
raschipi | It's all just a question of culture, habits and preferences, of course. | ||
Yet, yuck. | |||
araraloren | evalable6: gist.githubusercontent.com/araralo...ab15/po.p6 | ||
evalable6 | araraloren, Successfully fetched the code from the provided URL | ||
In Parser: Emit the option -w In MAIN: GOT MESSAGE: The -w matched ? FAILED In MAIN: GOT M… |
|||
araraloren, Full output: gist.github.com/47e7d3e446eb9aebb3...7e7a4a751d | |||
13:30
Grrrr joined
|
|||
jnthn | If we did modulo math then it could be the 0th and 7th day :P | 13:30 | |
araraloren | jnthn Is this good pratice, emit something (like $mc) to a supply, and get if it is done well through the interface of $mc ? | 13:31 | |
13:32
itaipu left
13:33
itaipu joined
13:34
itaipu left
13:38
itaipu joined
13:39
itaipu left
|
|||
buggable | New CPAN upload: Archive-Libarchive-Raw-0.0.7.tar.gz by FRITH modules.perl6.org/dist/Archive::Lib...cpan:FRITH | 13:41 | |
13:43
itaipu joined
13:45
itaipu left
13:47
ambs joined
13:48
itaipu joined
13:49
lalitmee left
13:52
itaipu left,
subroot joined
13:53
itaipu joined
13:56
itaipu left
13:58
itaipu joined
13:59
SHODAN joined
|
|||
tbrowder_ | [Coke]: is htmlify to be moved to util/ in your proposal? (issue 2185) | 14:01 | |
14:02
itaipu left,
skids joined
14:03
itaipu joined,
zakharyas left
14:04
zakharyas joined
14:07
itaipu left
14:08
SHODAN left,
itaipu joined
14:12
itaipu left
14:13
SHODAN joined
14:14
itaipu joined
14:16
itaipu left
14:19
itaipu joined
|
|||
[Coke] | I'm slowly decomposing that into build steps in my branch. | 14:20 | |
but no, in master, I was suggesting moving the new thing. | |||
Esp. in light of the recent discussion (which I thought you were part of but am not sure) about having too many things top level. | 14:21 | ||
14:21
psychoslave left
14:22
wamba joined,
psychoslave joined
14:23
itaipu left,
psychoslave left
|
|||
tbrowder_ | ok, i’m starting that now if that’s ok. | 14:23 | |
14:23
psychoslave joined
14:24
itaipu joined
|
|||
[Coke] | Sure, thanks! | 14:24 | |
I am still working on cleaning up htmlify/Makefile stuff in the coke/build branch, but tuits are spare these days. | |||
tbrowder_ | i made a new top-level dir called build-prods but build may be better. it should be able to be deleted with a make distclean or other target. | 14:26 | |
14:27
itaipu left
|
|||
tbrowder_ | i and jmerelo were two of folks in discussion of doc reorg or cleanup | 14:28 | |
14:28
psychoslave left
14:29
itaipu joined
14:31
ThoSvePa joined
|
|||
ThoSvePa | Hi there! | 14:31 | |
14:32
itaipu left
|
|||
ThoSvePa | I'm trying to install rakudo on CentOS 7 and have an error while executing 'perl Configure.pl --backend=moar --gen-moar' | 14:32 | |
araraloren | ThoSvePa what error ? | 14:33 | |
ThoSvePa | It is 'Can't locate Digest/SHA.pm in @INC' | ||
araraloren | oh, maybe you should install that Perl 5 module | ||
using cpan/cpanm | |||
ThoSvePa | That's all? Thank you very much. | 14:34 | |
14:34
itaipu joined
|
|||
araraloren | yeah, maybe this helpful : `sudo dnf install perl-Digest-SHA` | 14:35 | |
I don't know the actual package name | |||
ThoSvePa | Ok, I'm searching on myself how to install the package. Think I have to install cpan or cpanm first. | 14:36 | |
ilmari | Digest::SHA is core, but centos/redhat/fedora have broken the packaging | ||
araraloren | oh | ||
ilmari | you need to install the 'perl-core' package to get a complete perl instlalation | ||
they've finally fixed it in fedora 28 and the upcoming rhel/centos 8 | 14:37 | ||
14:38
itaipu left
|
|||
ThoSvePa | Thanks a lot again. It's great to get help so fast. | 14:38 | |
Altreus | jnthn: cool, that's exactly what I got from the docs and blogs I found :) | 14:41 | |
that means those things are actually sufficient learning tools :o | 14:42 | ||
m: my %h = %(:numerator, :denominator) = 4.5; # something like this might work? | 14:43 | ||
camelia | Odd number of elements found where hash initializer expected: Only saw: 4.5 in block <unit> at <tmp> line 1 |
||
Altreus | m: my %h = %(:numerator, :denominator) := 4.5; # something like this might work? | ||
camelia | 5===SORRY!5=== Error while compiling <tmp> Cannot use bind operator with this left-hand side at <tmp>:1 ------> 3 %h = %(:numerator, :denominator) := 4.57⏏5; # something like this might work? |
||
Altreus | I know I'm guessing but I hoped I would guess right xD | 14:44 | |
Can I unpack the object into a hash in one go like this? | |||
m: my %h(:numerator, :denominator) := 4.5; # something like this might work? | |||
camelia | 5===SORRY!5=== Error while compiling <tmp> Cannot use bind operator with this left-hand side at <tmp>:1 ------> 3my %h(:numerator, :denominator) := 4.57⏏5; # something like this might work? |
||
14:45
Zoffix joined
|
|||
Zoffix | m: my %h = 4.5.Capture; say %h | 14:45 | |
camelia | {} | ||
Zoffix | m: my %h = 4.5.Capture.hash; say %h | ||
camelia | {denominator => 2, numerator => 9} | ||
lizmat | m: my %h = numerator => 4, denominator => 5; dd %h | ||
camelia | Hash %h = {:denominator(5), :numerator(4)} | ||
Altreus | m: my %h = 4.5.Capture<numerator>:kv; dd %h; | 14:46 | |
camelia | Hash %h = {:numerator(9)} | ||
14:46
ThoSvePa left
|
|||
Altreus | that's the job | 14:46 | |
lizmat | m: my %h = :4numerator, :5denominator; dd %h # more cryptic | ||
camelia | Hash %h = {:denominator(5), :numerator(4)} | ||
Zoffix | Altreus: `my (...) :=` is a special syntax that treats the bit inside `(...)` as a signature and on the RHS you give it a Capture (or it's automatically obtained by calling .Capture) | 14:47 | |
So outside that special syntax you have to poke at .Capture manually | |||
Altreus | at least it's there :D | ||
Zoffix | Captures can provide both named and positional args, so the .hash bit steals the named portion | ||
m: dd 4.5.Capture | |||
camelia | \(:denominator(2), :numerator(9)) | ||
Zoffix | And you can't Capture some objeccts | 14:48 | |
m: dd 4.Capture | |||
camelia | Cannot unpack or Capture `4`. To create a Capture, add parentheses: \(...) If unpacking in a signature, perhaps you needlessly used parentheses? -> ($x) {} vs. -> $x {} or missed `:` in signature unpacking? -> &c:(Int) {} in block <unit> at … |
||
lizmat | ah, now I understand the question, sorry for the noise :-) | ||
Zoffix | :) | ||
Altreus | speaking of lizmat's noise, is :4numerator an accident or is there rationale behind that? | ||
14:48
wamba left
|
|||
lizmat | :2nd, :3rd, :4th | 14:49 | |
14:49
ChoHag left
|
|||
Zoffix | Altreus: it's syntax driving stuff like `s:2nd/.../.../`... The :4numerator is the abuse… err extension… of that syntax | 14:49 | |
lizmat | was the original intent | ||
Altreus | this is why there's a rolling eyes emoji! | ||
Zoffix | :) | ||
More colonpair shortcuts: rakudo.party/post/Perl-6-Colonpairoscopy | |||
(the :$<foo> shortcut is missing from the article tho) | 14:50 | ||
Altreus | I'm glad the time between my questions is increasing :P | ||
14:50
ChoHag joined
|
|||
Altreus | means I can start understanding these articles | 14:50 | |
Zoffix | m: "foobar" ~~ /$<foo>=.**3/; say [:$<foo>] | ||
camelia | [foo => 「foo」] | ||
Zoffix | :) | ||
14:51
lalitmee joined
|
|||
Zoffix | How come this is an empty Hash? | 14:52 | |
m: my %h = 4.5.Capture; say %h | |||
camelia | {} | ||
Zoffix | I would've accepted an "Odd number of blah blah" error, but empty? | 14:53 | |
Altreus | m: 4.5.Capture.PERL.say | 14:54 | |
camelia | No such method 'PERL' for invocant of type 'Capture' in block <unit> at <tmp> line 1 |
||
Altreus | o | ||
Zoffix | .perl | ||
Altreus | m: 4.5.Capture.perl.say | ||
camelia | \(:denominator(2), :numerator(9)) | ||
Altreus | oh you already did that, I see now | 14:55 | |
[Coke] | m: 4.5.Capture.elems.say | ||
camelia | 0 | ||
Zoffix | Ah, it's going by what .iterator gives it and that iterates through positionals | ||
14:56
psychoslave joined
|
|||
Zoffix | m: my %h = \('foo', 'bar', :42meows); dd %h | 14:56 | |
camelia | Hash %h = {:foo("bar")} | ||
tbrowder_ | Zoffix: nice party article, thanks! | 14:57 | |
15:03
zakharyas left
|
|||
Altreus | is it possible to create a strict hash, one that complains if you look up a missing key? | 15:04 | |
Often it is useful to throw an error if there is missing config, for example | |||
15:04
zakharyas joined
|
|||
Altreus | but it is tedious to repeat yourself, once in the hash lookup, and again in the error message | 15:04 | |
lizmat | m: my %restricted is Map = ....; # this at least is immutable | ||
camelia | 5===SORRY!5=== Error while compiling <tmp> Malformed postfix call at <tmp>:1 ------> 3my %restricted is Map = ....7⏏5; # this at least is immutable |
||
15:05
x[LGWs4x4i]uG2N0 joined
|
|||
Altreus | m: my %restricted is Map = :config<value>; %restricted<missing>; | 15:05 | |
camelia | ( no output ) | ||
Altreus | ^ this would be the time to throw | ||
15:05
jameslenz joined
|
|||
Altreus | otherwise it's die "Missing config value: missing" unless %restricted<missing>:exists | 15:06 | |
and *then* you have to repeat yourself again later when you actually make use of that value (because exists can't return the value for assignment) | |||
15:07
molaf joined
|
|||
lizmat | Altreus: ok, so you want to specify a list of allowable keys at initialization ? | 15:07 | |
Altreus | There's options, but my assumption would be that you could do something like my $value = %config<value>:s | 15:08 | |
where s means strict, or some such adverb | |||
lizmat | Altreus: perhaps modules.perl6.org/dist/Hash::Util is something for you ? | ||
Altreus | hmm | 15:10 | |
lizmat | Would something like: | ||
15:10
jameslenz left
|
|||
lizmat | my %config is restricted-to<foo bar baz> = init | 15:10 | |
work for you ? | 15:11 | ||
Altreus | If you've ever used python you might know it's useful that it complains if you look up a nonexistent item, but also that it gives you a way around it that just returns nil | ||
I think we're thinking from opposite directions | |||
lizmat | that would complain at initialization ? | ||
Altreus | I don't mind what extra keys exist, I just want to auto-die if I try to access a key the user hasn't provided | ||
jnthn | araraloren: Supplies don't introduce concurrency, so it's safe in that sense. | ||
lizmat | Altreus: perhaps | ||
Altreus | you know what, I bet I can do that in the signature | ||
lizmat | Altreus: named parameters can be obligatory by adding a ! | 15:12 | |
sub a (:$foo!) | |||
15:12
veesh left
|
|||
lizmat | m: sub a (:$foo!) { }; a 42 | 15:12 | |
camelia | Too many positionals passed; expected 0 arguments but got 1 in sub a at <tmp> line 1 in block <unit> at <tmp> line 1 |
||
lizmat | m: sub a (:$foo!) { }; a :bar | ||
camelia | Required named parameter 'foo' not passed in sub a at <tmp> line 1 in block <unit> at <tmp> line 1 |
||
araraloren | jnthn thanks the advices :) | 15:13 | |
Altreus | m: sub a ( %(:required) ) {} a { :optional }; | ||
camelia | 5===SORRY!5=== Shape declaration with () is reserved; please use whitespace if you meant a subsignature for unpacking, or use the :() form if you meant to add signature info to the function's type at <tmp>:1 ------> 3sub a ( %7⏏… |
||
Altreus | m: sub a ( %( :required ) ) {} a { :optional }; | ||
camelia | 5===SORRY!5=== Shape declaration with () is reserved; please use whitespace if you meant a subsignature for unpacking, or use the :() form if you meant to add signature info to the function's type at <tmp>:1 ------> 3sub a ( %7⏏… |
||
Altreus | um | ||
Zoffix | "...please use whitespace if you meant a subsignature.." | ||
oh | 15:14 | ||
m: sub a ( % (:required) ) {} a { :optional }; | |||
camelia | 5===SORRY!5=== Error while compiling <tmp> Malformed parameter at <tmp>:1 ------> 3sub a ( % (:7⏏5required) ) {} a { :optional }; |
||
Zoffix | m: sub a ( % (:$required) ) {} a { :optional }; | ||
camelia | 5===SORRY!5=== Error while compiling <tmp> Strange text after block (missing semicolon or comma?) at <tmp>:1 ------> 3sub a ( % (:$required) ) {}7⏏5 a { :optional }; expecting any of: infix infix stopper … |
||
Altreus | anyway the idea is that we don't have to keep saying "You didn't configure xyz" unless %config<xyz> | ||
Zoffix | m: sub a ( % (:$required) ) {}; a { :optional }; | ||
camelia | Unexpected named argument 'optional' passed in sub-signature in sub a at <tmp> line 1 in block <unit> at <tmp> line 1 |
||
Altreus | It should just die when we access %config<xyz> | ||
a lexical pragma might work, or an adjective on the lookup | |||
Zoffix | .oO( or a module ) |
||
Altreus | where pragma may mean module :) | ||
use Strict::Hashes; | 15:15 | ||
that way, the config hash can contain whatever it wants to, as long as what *we* are looking for is in there | |||
lizmat | Altreus: ok, I'll bite | ||
I was thinking of a trait | |||
Altreus | sub a (%config is strict) | 15:16 | |
Zoffix | is default({die}) | ||
lizmat | Zoffix++ | ||
that would actually work :-) | |||
Zoffix | IIRC there's a ticket for Callables in `is default` to do something more interesting that just be normal values | ||
Altreus | wait, is default on a hash is the default value for lookups? | ||
I could have used quotes better in that message | 15:17 | ||
Zoffix | default value for containers of values | ||
lizmat | it's the default for the container that gets returned | ||
Zoffix | m: my %h is default(Failure.new); say %h<foo> | ||
camelia | ===SORRY!=== Failed |
||
lizmat | Zoffix: but the failure only gets thrown when the value is actually used, not when it is fetched | ||
Altreus | m: my %h is default(Failure.new) = :foo; say %h<foo> | ||
camelia | True | ||
Zoffix | yeah | ||
It also lacks location info | |||
Altreus | whaaaaaaaaat | ||
yeah if that could output better that would be perfect | 15:18 | ||
i.e. if it could be parameterised | |||
eh | |||
lizmat will think about that after some time away from the keyboard | |||
Altreus | lizmat: actually that's kind of OK | ||
With the perl6 hot-potato sort of Failure, if I accidentally look up a config setting I never use, the user never gets told off | |||
Zoffix | lizmat: RT#131599 is the ticket | 15:19 | |
synopsebot | RT#131599 [open]: rt.perl.org/Ticket/Display.html?id=131599 [RFC] Allow a Callable for `is default` that will generate default values | ||
Zoffix | uhh... or maybe it's just a title of a renamed ticket :) the content itself seems to be about [] in defaults :P | 15:20 | |
15:20
robertle left,
araraloren left
|
|||
Zoffix | Ah, you'd use {[]} to ensure it's a new container each time. OK | 15:20 | |
15:22
Zoffix left
|
|||
moritz | m: sub f($s = []) { $s }; say f() === f() | 15:24 | |
camelia | False | ||
Altreus | I will weigh in on this rt | 15:25 | |
m: my %h is default(Failure.new); CATCH { $_.say } say %h<foo>; say %h<bar>; | 15:28 | ||
camelia | 5===SORRY!5=== Error while compiling <tmp> Strange text after block (missing semicolon or comma?) at <tmp>:1 ------> 3s default(Failure.new); CATCH { $_.say }7⏏5 say %h<foo>; say %h<bar>; |
||
Altreus | m: my %h is default(Failure.new); CATCH { $_.say }; say %h<foo>; say %h<bar>; | 15:29 | |
camelia | Failed in any trait_mod at /home/camelia/rakudo-m-inst-1/share/nqp/lib/Perl6/Grammar.moarvm line 1 in any trait at /home/camelia/rakudo-m-inst-1/share/nqp/lib/Perl6/Grammar.moarvm line 1 in any scope_declarator:sym<my> at /home/camelia/rak… |
||
Altreus | I suppose it does explode each time | ||
raschipi | m: my %h is default(Failure.new("Strict Hash")); CATCH { $_.say }; say %h<foo>; say %h<bar>; | 15:35 | |
camelia | Strict Hash in any trait_mod at /home/camelia/rakudo-m-inst-1/share/nqp/lib/Perl6/Grammar.moarvm line 1 in any trait at /home/camelia/rakudo-m-inst-1/share/nqp/lib/Perl6/Grammar.moarvm line 1 in any scope_declarator:sym<my> at /home/cameli… |
||
15:42
[particle] joined
15:50
Zoffix joined
|
|||
Zoffix | Altreus: nah, it has the same issue as the `is default([])`. You keep getting the same object in the defaults. If one piece of code handles that failure, another failed lookup will return a now-handled failure | 15:50 | |
m: my %h is default(Failure.new); %h<foo>.so; %h<bar>.self; | 15:51 | ||
camelia | ( no output ) | ||
Zoffix | m: my %h is default(Failure.new); %h<bar>.self; | ||
camelia | ===SORRY!=== Failed |
||
Zoffix | "action at a distance" basically | ||
15:52
lalitmee left
|
|||
b2gills | Create a class named Strict::Hash then `my %h is Strict::Hash = …` | 15:53 | |
have `.AT-KEY` return a Failure if the key isn't already there. Then you can do `%h<nonexistent> // 0` | 15:54 | ||
Altreus | yeah, I figured I could just override it | 15:56 | |
Zoffix | m: class Bomb is Mu { BEGIN ::?CLASS.^add_method: .name, -> | {die "Boom" } for ::?CLASS.^methods: :all; method FALLBACK(|) { die "Boom" } }; my %h is default(Bomb); try say %h<foo>; say %h<bar> | ||
camelia | Boom in block at <tmp> line 1 in block <unit> at <tmp> line 1 |
||
Zoffix | m: class Bomb is Mu { BEGIN ::?CLASS.^add_method: .name, -> | {die "Boom" } for ::?CLASS.^methods: :all; method FALLBACK(|) { die "Boom" } }; my %h is default(Bomb); %h<bar> | ||
camelia | ( no output ) | ||
Zoffix | boo | 15:57 | |
15:57
robertle joined
15:59
zakharyas left
|
|||
Zoffix | m: (my %h = :42foo) does role { method AT-KEY (\v, |c) { self{v}:exists ?? nextsame() !! die "Boom"} }; %h<foos>:v | 15:59 | |
camelia | ( no output ) | ||
Zoffix | looks like more than just AT-KEY needs to be modded | ||
m: (my %h = :42foo) does role { method AT-KEY (\v, |c) { self{v}:exists ?? nextsame() !! die "Boom"} }; %h{*} | |||
camelia | ( no output ) | ||
15:59
Zoffix left
16:00
domidumont left
16:15
DarthGandalf left
|
|||
SmokeMachine | m: use MONKEY-TYPING; augment class Seq { has $!a = 42; method b { say $!a } }; Seq.new(class :: does Iterator {method pull-one{1}}.new).b | 16:20 | |
camelia | P6opaque: no such attribute '$!a' on type Seq in a Seq when trying to get a value in method b at <tmp> line 1 in block <unit> at <tmp> line 1 |
||
SmokeMachine | why this isn't working? | 16:21 | |
jnthn | Because you can't augment in extra attributes | 16:22 | |
SmokeMachine | jnthn: how can I do something like that? | 16:24 | |
jnthn | Mix in to it using does | ||
16:26
fake_space_whale left
16:32
scimon left,
geekosaur joined,
geekosaur left
16:34
geekosaur joined
|
|||
SmokeMachine | insta working... :( | 16:39 | |
jnthn: gist.github.com/FCO/88f9773eb3a4ea...2362541186 | 16:40 | ||
buggable | New CPAN upload: Sparrowdo-VSTS-YAML-Build-0.0.4.tar.gz by MELEZHIK modules.perl6.org/dist/Sparrowdo::V...n:MELEZHIK | 16:41 | |
16:46
dakkar left
|
|||
SmokeMachine | m: use MONKEY-TYPING; role Bla { has $!a = 42; method b { say $!a } }; augment class Seq does Bla {}; Seq.new(class :: does Iterator {method pull-one{1}}.new).b | 16:47 | |
camelia | P6opaque: no such attribute '$!a' on type Seq in a Seq when trying to get a value in method b at <tmp> line 1 in block <unit> at <tmp> line 1 |
||
SmokeMachine | m: role Bla { has $!a = 42; method b { say $!a } }; Seq does Bla; Seq.new(class :: does Iterator {method pull-one{1}}.new).b | 16:48 | |
camelia | Cannot use 'does' operator on a type object Seq. in block <unit> at <tmp> line 1 |
||
16:48
fbynite joined
|
|||
SmokeMachine | m: role Bla { has $!a = 42; method b { say $!a } }; (Seq.new(class :: does Iterator {method pull-one{1}}.new) but Bla).b | 16:49 | |
camelia | 42 | ||
SmokeMachine | :) | ||
16:55
fbynite left
|
|||
robertle | does anyone have experience with composing Cro routes at runtime rather than compile time? | 16:56 | |
I have a url scheme like /foo/<id>/<stuff> where depending on the <id> objects of different types are responsible to handle <stuff> | 16:57 | ||
16:57
psychoslave left
|
|||
sena_kun | robertle, you can actually do that using `.compose` method from Cro::Core. | 16:58 | |
robertle | with plan request/response handling I can of course look up the handler object from some structure and then delegate to a method call on the object. but <stuff> within the object can have many endpoints and quite some logic, so it would be cool to use a route there as well | ||
sena_kun | I believe that every provided shortcut class like Server or Client can be as well constructed from client side of things. | 16:59 | |
robertle | sena_kun: I am not sure I understand. I was looking at that, but don't see how I can make it do what I want... | ||
jnthn | subset SomeObjectType of Int where ...determine what it is...; get -> 'foo', SomeObjectType $id, $stuff { } perhaps? | ||
17:00
DarthGandalf joined
|
|||
sena_kun | robertle, I am not fully sure what your usecase is, but the answer is "Yes, it can be". Did you read cro.services/docs/approach ? | 17:00 | |
jnthn | sena_kun: I think this is about the router rather than pipeline composition. | 17:01 | |
robertle | regarding teh .compose: I can use it to do sequential pipelines, but I need a fork in my pipeline, and I don't get how to realise that | ||
sena_kun | ooh, indeed. | ||
maybe Conditional can help? | 17:02 | ||
hmmm. | |||
robertle | and regarding the subset idea: it's not only about the types, also about state that these objects could hold. so I really need/want to switch to an instanced, not a type. | ||
an alternative view would be: given a route and a request object, how can I pass the request to the | 17:03 | ||
route and yield a response? | |||
jkramer | Can somebody help me out? bpaste.net/show/23e41b4bd43a | ||
What's wrong here? Why does the Z- give me only one value in return? | 17:04 | ||
Also where is the value coming from? :D 0 - 5 should be -5, 5 - 10 too. | 17:05 | ||
17:05
lizmat left,
Zoffix joined,
DarthGandalf left
|
|||
Zoffix | jkramer: you're storring stuff in an Array, which automatically places stuff into Scalar containers. You need to decont stuff | 17:06 | |
huggable: decont | |||
17:06
eliasr joined
|
|||
huggable | Zoffix, Article on containers and decont: perl6advent.wordpress.com/2017/12/...oneandonly | 17:06 | |
17:06
jameslenz joined,
DarthGandalf joined
|
|||
jnthn | robertle: Ah, then probably the best way is to write something that does the Cro::Transform role, looks at the incoming request object, and then does the onwards delegation | 17:07 | |
Zoffix | m: my @words = <foo bar baz lol 123 foo baz quux 123 lol foo trolololol lol asd>.pairs; my %positions .= classify-list: *.value, @words, :as(*.key); say .key, ': ', (.value<> Z- .value.skip) for %positions.grep(+*.value > 2) | ||
camelia | lol: (-6 -3) foo: (-5 -5) |
||
jkramer | Oh ok. I tried .value.flat earlier, shouldn't that work the same in this case? | ||
jnthn | robertle: You can get a route block to process a request by something a bit like `whenever $that-route-block.transformer(emit $request) -> $response { emit $response }` | 17:08 | |
Zoffix | jkramer: .flat doesn't flatten conted stuff | ||
jnthn | ah, sorry, `supply emit $request` there | ||
Zoffix | m: dd falt (1, (2, (3, (4,))) | 17:09 | |
camelia | 5===SORRY!5=== Error while compiling <tmp> Unable to parse expression in parenthesized expression; couldn't find final ')' (corresponding starter was at line 1) at <tmp>:1 ------> 3dd falt (1, (2, (3, (4,)))7⏏5<EOL> expecting any… |
||
Zoffix | m: dd falt (1, (2, (3, (4,)))) | ||
camelia | 5===SORRY!5=== Error while compiling <tmp> Undeclared routine: falt used at line 1. Did you mean 'flat'? |
||
Zoffix | m: dd flat (1, (2, (3, (4,)))) | ||
camelia | (1, 2, 3, 4).Seq | ||
Zoffix | m: dd flat (1, (2, $(3, (4,)))) | ||
camelia | (1, 2, $(3, (4,))).Seq | ||
17:09
chrom joined
|
|||
Zoffix | m: dd flat $(1, (2, $(3, (4,)))) | 17:09 | |
camelia | (1, 2, $(3, (4,))).Seq | ||
chrom | heyho | ||
Zoffix | \o | ||
jkramer: though it'd work to decont the iterable it's called on. Were you calling it in place of `<>` in my eval above? | 17:10 | ||
17:10
jameslenz left
|
|||
Zoffix | m: my @words = <foo bar baz lol 123 foo baz quux 123 lol foo trolololol lol asd>.pairs; my %positions .= classify-list: *.value, @words, :as(*.key); say .key, ': ', (.value.flat Z- .value.skip) for %positions.grep(+*.value > 2) | 17:10 | |
camelia | lol: (-6 -3) foo: (-5 -5) |
||
Zoffix | m: my @words = <foo bar baz lol 123 foo baz quux 123 lol foo trolololol lol asd>.pairs; my %positions .= classify-list: *.value, @words, :as(*.key); say .key, ': ', (.value.self Z- .value.skip) for %positions.grep(+*.value > 2) | ||
camelia | foo: (-5 -5) lol: (-6 -3) |
||
jkramer | Zoffix: Yes | 17:11 | |
Zoffix | seems to work above | ||
17:13
Zoffix left
|
|||
SmokeMachine | jnthn: what do you think? www.irccloud.com/pastebin/QHM6KSZN/ | 17:15 | |
jkramer | Weird, don't know what I did there. | ||
SmokeMachine | gist.github.com/FCO/5e4dffcc2f47d4...a4ce74e2c2 | 17:16 | |
17:18
sauvin left
|
|||
robertle | jnthn: that sounds fab, I'll try and build my own transform | 17:18 | |
17:22
domidumont joined
17:32
chrom left
17:38
fbynite joined
|
|||
fbynite | I've got the following p5 code: my ($var1, $var2, $var3) = /some-regex/;. In p6m should I use grammars, named captures or ...? | 17:41 | |
El_Che | you can get an array of matches, I think | ||
timotimo | if you're only interested in the strings that matched anyway, maybe comb is the right thing for you | 17:42 | |
17:45
kaiser_ joined
17:48
donpdonp joined
|
|||
donpdonp | what am I missing when the perl6 cli does not have readline support? | 17:48 | |
El_Che | donpdonp: it shoud tell you | ||
Linenoise or Readline | 17:49 | ||
donpdonp | it doesnt say anything, i just dont get up-arrow | ||
i'll try linenoise, thx. | |||
17:53
Zoffix joined
|
|||
Zoffix | RE: 6.d: someone's asking "Is there a reason why y’all are putting letters in the versions?" twitter.com/genio_cw/status/1019627279830351872 | 17:54 | |
17:54
molaf left
|
|||
Zoffix | Skimming the logs, doesn't look like there were some grand plans for versioning and it just all carried on from 6.b => beta/Birthday, 6.c => Christmas, 6.d … 6.za, but if someone remembers a better answer maybe you can respond better :) | 17:55 | |
kaiser_ | Hello everyone. I am experiencing something weird. I have a simple script that counts lines and words in a Node.js project. When the script is run for the first time, it takes ages to finish. Then it averages around 0.4 sec. More or less the same script in Perl 5 (with only minor differences) finishes in cca. 0.035 sec. | 17:58 | |
What I really want to understand is why it takes sooo looong for the first time, I'm less concerned about the diff between P5 and P6. I'm not an expert in Perl, so I'm pretty sure my code can be improved. | |||
The code is here: gist.github.com/kaisersparpick/a49...ddb8a5aa49 As a comparison, the Perl 5 code is here: gist.github.com/kaisersparpick/29e...dca714c587 | 17:59 | ||
I'd appreciate your feedback. Thanky ou. | |||
17:59
lucasb joined
|
|||
lucasb | from 6.a (advent/alpha) even :) | 18:00 | |
Zoffix | kaiser_: is that the whole thing? Usually what you describe applies to making changes in a module. The first run is slower because of precompilation of that module. But if you're not using any modules, then it's probably something else. | ||
kaiser_: what version of perl6 you use? | 18:02 | ||
18:02
Ven` left
|
|||
kaiser_ | That is all the code. The lines are printed pretty fast until the first "Subtotal" line, so after the "for dir $dir -> $file" iteration. | 18:02 | |
Then it seems to wait for a long time | 18:03 | ||
raschipi | kaiser_: Which version are you running? | 18:05 | |
kaiser_ | I've added Int's to the var declarations to prevent p6 from using bigints, which are the default if I'm not mistaken. | ||
Zoffix | On 2018.06+, the first and subsequent runs take the same time for me | ||
kaiser_: Ints are bigints | 18:06 | ||
kaiser_ | Rakudo Star from around February - sorry I don't know exactly. | ||
Zoffix | perl6 -v prints it | ||
huggable: star | |||
huggable | Zoffix, Estimated Rakudo Star releases: .01, .04, .07 & .10 | ||
Zoffix | I'm guessing 2018.01 | ||
kaiser_ | The code is at my workplace and I'm at home now :( | 18:07 | |
Zoffix | Could it be some operating system disk caching or something? | ||
kaiser_ | "Ints are bigints" - Oh. Then what can I use to avoid them? | ||
lucasb | lowercase int | 18:08 | |
Zoffix | kaiser_: you can use lowercase `int` for native ints | ||
105s first run? Then 0.4s all subsequent runs? Weird | |||
kaiser_: what operating system is this on? | |||
kaiser_ | I'm using Ubuntu 16. I did not set up any special caching. | ||
Exactly. | |||
"105s first run? Then 0.4s all subsequent runs?" <- Exactly :) | 18:09 | ||
Zoffix | :) | ||
kaiser_ | lucasb: Thanks! I'll try that tomorrow. | 18:10 | |
18:10
pecastro joined
18:11
wamba joined
|
|||
kaiser_ | Will I gain considerable speed improvement by switching to lowercase int? | 18:12 | |
Zoffix | not really | 18:13 | |
kaiser_ | Hmmm | ||
18:13
lizmat joined
|
|||
Zoffix | sometimes can even be slower, due to boxing-unboxing | 18:13 | |
kaiser_: what defines a first run, BTW? Do you have to wait 100s after each change to the script? | 18:17 | ||
c: HEAD,2018.01 temp.perl6.party/z.txt | 18:18 | ||
committable6 | Zoffix, Successfully fetched the code from the provided URL | ||
Zoffix, ¦HEAD(a847abe): «1.0552871» ¦2018.01: «1.1416646» | |||
kaiser_ | When I first run the script, it quickly starts printing the lines for the first project, then it seems to be waitin around 100 s before printing the "Subtotal" line, then it proceeds with the second project and quickly finishes. When I run the same script again, it finishes in 0.4s. | 18:19 | |
This is the behaviour whenever I reboot Ubuntu. | 18:20 | ||
SmokeMachine | Im not sure if the expected is with or without the first line... (the /^lo/ one) www.irccloud.com/pastebin/ohj5TB4D/ | ||
raschipi | Could be that in the subsequent runs the OS has the files in memory and doesn't need to read them from the disk again. | 18:22 | |
Zoffix | But 100s difference? Also, I'm guessing Perl 5's version is not affected | 18:23 | |
18:24
lucasb left
|
|||
kaiser_ | The perofmance of the Perl5 version is reliably consistent around 0.035 seconds | 18:24 | |
raschipi | Can you try timing it again after running 'echo 3 > /proc/sys/vm/drop_caches' ? | 18:26 | |
Zoffix | kaiser_: no idea what might be causing it, but next time you're at work, you can try if this version has the same problem: gist.github.com/zoffixznet/6902c3f...0b3b165734 | ||
kaiser_: in your version, you're descending into dirs while iterating the current dir, so you have a potential bug of running out of open file handles, if you're searching through a very nested dir structure. In my version, I just push the dirs to search into an array and do open one dir at a time basically. | 18:27 | ||
kaiser_: also, instead of reading the same file twice to get the lines and then the words, I read it once and get lines/words from the read content. | |||
Doubt if this would fix anything, but maybe it does vOv | 18:28 | ||
And if you want to speed it up, you could replace that `sprintf` with something hand-rolled, 'cause right now sprintf is super slow | 18:29 | ||
(N.B.: in the docs, you might find .fmt method, but on most objects it's just a sprintf call under the hood, so is equivally slow) | |||
kaiser_ | Zoffix and reschipi: I see, thanks for the clarification and suggestions. I'll try them tomorrow. | 18:31 | |
18:31
DarthGandalf left
18:32
kerframil joined,
DarthGandalf joined
|
|||
Zoffix | m: my ($n, $l, $w) = "meows", ^100 .pick, ^100 .pick; for ^2000 { sprintf "%-60.s | %5.d | %6.d", $n, $l, $w }; say now - ENTER now | 18:34 | |
camelia | 0.7465759 | ||
Zoffix | m: my ($n, $l, $w) = "meows", ^100 .pick, ^100 .pick; for ^2000 { join " ", $n, " " x (60-$n.chars), " | ", " " x (5-$l.chars), $l, " | ", " " x (6-$w.chars), $w }; say now - ENTER now | ||
camelia | 0.0688703 | ||
Zoffix | m: say 0.7465759/0.0688703 | ||
camelia | 10.8403172 | ||
18:39
konsolebox left
18:41
konsolebox joined
|
|||
kaiser_ | Oh, sprintf is slow indeed :) | 18:42 | |
Garland_g[m] | I noticed while working with the json exceptions handler that the output for a X::CompUnit::UnsatisfiedDependency doesn't have all of the standard information about a line number, position, filename, etc. It only has "message" and "specification." | ||
This causes the perl6 syntastic plugin to fail to bring up any errors in the error bar, as it is relying on having those particular fields to place the markers in the vim gutter. | 18:43 | ||
Where would be the appropriate place to report this to? | 18:44 | ||
Zoffix | Garland_g[m]: usually github.com/rakudo/rakudo/issues/new but 1 sec, there's already a related issue. Lemme find it | 18:49 | |
Garland_g[m]: this one: github.com/rakudo/rakudo/issues/2022 | 18:50 | ||
18:50
itaipu joined
|
|||
Garland_g[m] | Thanks for the link. | 18:52 | |
18:54
psychoslave joined
|
|||
donpdonp | my ($a, $b) = go; sub go {("A","Z")}; This type cannot unbox to a native string: P6opaque, Hash | 18:55 | |
18:55
hythm_ joined
|
|||
donpdonp | im baffled by the error. my ($a,$b) = ("A","Z"); is happy. | 18:55 | |
18:56
fbynite left
|
|||
Zoffix | m: my ($a, $b) = go; sub go {("A","Z")}; | 18:56 | |
camelia | ( no output ) | ||
donpdonp | ok I winged the example a bit. let me make a better one. | ||
Zoffix | donpdonp: did you have a block somewhere with code that you then removed all the code from and it became a {}? That's a Hash, you need to write it as {;} to have a Block there | 18:57 | |
(doesn't apply to `sub {}`, but to plain blocks) | |||
m: my str $x = {} | 18:58 | ||
camelia | This type cannot unbox to a native string: P6opaque, Hash in block <unit> at <tmp> line 1 |
||
donpdonp | Zoffix: I dont think I did that. my simple example doesnt actually error, im looking into how my code is different. | 18:59 | |
hythm_ | How to modify installed module locally for quick testing? I tried modifying at ~/.zef/store/module-name but that does not seem to ork | 19:00 | |
Work* | 19:01 | ||
Zoffix | hythm_: installed modules are precompiled. I don't think there's a way to modify them without re-installing | ||
You need to get module's source and add the path to the source with -I or `use lib` to get it looked at there first | |||
hythm_ | That will work, thank Zoffix | 19:02 | |
19:02
wamba left
19:03
wamba joined
|
|||
donpdonp | Zoffix: ah I had go(str $param) and called go(some_hash_of_some_sort) so it was a signature problem. | 19:03 | |
19:03
kaiser_ left
|
|||
Zoffix | ah | 19:03 | |
raschipi | Zoffix, can't trying to use an empty hash as a block be detected and the message be awesome? | ||
donpdonp | compounded by lowercase str. | 19:04 | |
why does that compile? go(str $param) | |||
with go(Str $param) the error makes sense Type check failed in binding to parameter '$body'; expected Str but got Hash | 19:05 | ||
Zoffix | donpdonp: `str` is a native type. You get the "cannot unbox" errors for those | ||
The error isn't great, but you get used to them | |||
Altreus | I keep doing something of the shape `$a = $b if $b`. Can I say it shorter? | ||
i.e. stop repeating whatever $b is in each situation | 19:06 | ||
19:06
jameslenz joined
|
|||
Altreus | The $a is actually of the form $hash<some-key> | 19:06 | |
so I want to avoid creating the key | |||
donpdonp | my $a = $b || "default" would answer the first question, but its not going to prevent assignment | 19:07 | |
Zoffix | m: my $a = 42; my $b = 100; $a R[&&]= $b; say $a | ||
camelia | ===SORRY!=== Cannot find method 'ann' on object of type NQPMu |
||
Zoffix | Altreus: I think ^ that would work, once the bug is fixed :) | ||
Altreus | see perl6 seems to have an answer for everything that bores me in perl5 :D | 19:08 | |
donpdonp | ah the if wraps the entire assignment, i didnt notice that before. | ||
19:08
domidumont left
|
|||
Zoffix | oh, maybe not: | 19:08 | |
m: my $a = 42; my $b = 100; $a R[and]= $b; say $a | |||
camelia | 5===SORRY!5=== Error while compiling <tmp> Cannot reverse the args of because assignment operator operators are too fiddly at <tmp>:1 ------> 3my $a = 42; my $b = 100; $a R[and]=7⏏5 $b; say $a |
||
Zoffix | too fiddly | ||
Altreus | at least it's honest | 19:09 | |
lizmat | .oO( users playing second fiddle :-) |
||
Zoffix | m: sub infix:<♥> (\a, \b) { a = b if b }; my $a = 42; my $b = 100; $a ♥ $b; dd $a | ||
camelia | Int $a = 100 | ||
Zoffix | m: sub infix:<♥> (\a, \b) { a = b if b }; my $a = 42; my $b = 0; $a ♥ $b; dd $a | ||
camelia | Int $a = 42 | ||
Zoffix | :) | ||
Altreus | :3 | 19:10 | |
Zoffix | :D | ||
Juerd | It's not only being honest, it actually says sorry. Is there any other compiler that does that? :) | ||
lizmat | feels better if that would be "with b" to me | ||
19:10
jameslenz left
|
|||
raschipi | Unless he really wants to depend on it being True, not just defined. | 19:11 | |
Juerd | raschipi: itym true, not True. True is a specific kind of true. | ||
Altreus | hmm that's a good question | ||
AlexDaniel | m: my $a = 42; my $b = 100; $a R[and]= $b; say $a | ||
camelia | 5===SORRY!5=== Error while compiling <tmp> Cannot reverse the args of because assignment operator operators are too fiddly at <tmp>:1 ------> 3my $a = 42; my $b = 100; $a R[and]=7⏏5 $b; say $a |
||
AlexDaniel | args of what? | ||
Zoffix | mystery :) | ||
m: sub postfix:<⬅> (\a) { a = $OUTER::_ }; my $a = 42; my $b = 0; $a⬅ with $b; dd $a | |||
camelia | Any $a = Any | ||
Zoffix | m: sub postfix:<⬅> (\a) { a = $OUTER::_ }; my $a = 42; my $b = 42; $a⬅ with $b; dd $a | 19:12 | |
camelia | Any $a = Any | ||
Zoffix | hm | ||
lizmat | m: sub infix:<=//> (\a, \b) { a = b with b }; my $a = 42; my $b; $a =// $b; dd $a | ||
camelia | Int $a = 42 | ||
lizmat | m: sub infix:<=//> (\a, \b) { a = b with b }; my $a = 42; my $b = 666; $a =// $b; dd $a | ||
camelia | Int $a = 666 | ||
AlexDaniel | is it ticketed? | ||
that the string is empty in there | |||
‘args of because’ | |||
Zoffix | m: my $a = 42; my $b = 666; $a R[//]= $b; dd $a | 19:13 | |
camelia | ===SORRY!=== Cannot find method 'ann' on object of type NQPMu |
||
Zoffix | grr | ||
AlexDaniel 💤 | |||
Zoffix | AlexDaniel: don't think so. | ||
R#2093 | 19:14 | ||
synopsebot | R#2093 [open]: github.com/rakudo/rakudo/issues/2093 [LTA] Too-fiddly error missing op name | ||
Zoffix | (and the explosion one was ticketed before R#1986 ) | 19:16 | |
synopsebot | R#1986 [open]: github.com/rakudo/rakudo/issues/1986 [QAST] Explosion when `R`-metaopping `||`, `//`, `&&` meta-assigns | ||
Altreus | what did you expect $OUTER::_ to resolve to? | ||
does with contextualise? | |||
Zoffix | $_ of outer | ||
m: sub foo { dd $OUTER::_ }; $_ = 42; foo | |||
camelia | Int $_ = 42 | ||
Altreus | or is it because it doesn't tat it didn't work | ||
Zoffix | Yeah | ||
Yeah, with does set $_ | |||
Altreus | so I could do $a = $_ with $b | 19:17 | |
Zoffix | Yeah | ||
Altreus | and at least it shortens $b | ||
cool | |||
Zoffix | or `$b andthen $a = $_` | ||
(same thing; just written left-to-right instead of right-to-left) | |||
Altreus | %self{$prop} andthen $json{$prop} = .to-json | 19:18 | |
no I don't know why one is a real hash and the other is in a scalar :) | |||
Perl5 thinking is leaking in | |||
Zoffix | m: my %a = :42foo; my %b; %b<foo> ,= %a<foo>; dd %b | 19:21 | |
camelia | Hash %b = {:foo($((), 42))} | ||
Zoffix | :( | 19:22 | |
m: my %a = :42foo; my %b; %b ,= %a<foo>:v; dd %b | |||
camelia | Odd number of elements found where hash initializer expected: Only saw: 42 in block <unit> at <tmp> line 1 |
||
Zoffix | m: my %a = :42foo; my %b = :100meows; %b ,= %a<foo>:p; dd %b | ||
camelia | Hash %b = {:foo(42), :meows(100)} | ||
Zoffix | m: my %a = :42foos; my %b = :100meows; %b ,= %a<foo>:p; dd %b | ||
camelia | Died with X::Hash::Store::OddNumber in block <unit> at <tmp> line 1 |
19:23 | |
Zoffix | m: my %a = :42foos; my %b = :100meows; %b ,= %a<foo>:vp; dd %b | ||
camelia | Unexpected named argument 'vp' passed in block <unit> at <tmp> line 1 |
||
Zoffix | m: my %a = :42foos; my %b = :100meows; %b ,= %a<foo>:v:p; dd %b | ||
camelia | Unsupported combination of adverbs (p v) passed to slice on %a in block <unit> at <tmp> line 1 |
||
Zoffix shakes fist | |||
lizmat | Zoffix: why ? | ||
19:24
hythm_ left
|
|||
lizmat | :v:p are mutually exclusive | 19:24 | |
Zoffix | 'cause I'm failing to do the right thing :) | ||
m: my %a = :42foo; my %b = :100meows; %b ,= %(%a<foo>:kv); dd %b | |||
camelia | Hash %b = {:foo(42), :meows(100)} | ||
Zoffix | m: my %a = :42fooss; my %b = :100meows; %b ,= %(%a<foo>:kv); dd %b | ||
camelia | Hash %b = {:meows(100)} | ||
Zoffix | w00t | ||
lizmat | although you could argue that they *could* be specified together | ||
Zoffix | Altreus: ^ dunno if it's shorter or fits your usecase but it don't repeat stuff :) | ||
lizmat | as :v could be considered a filter on existing keys | ||
Zoffix | lizmat: Yeah, that's what I was expecting it to do, `:v` to filter on existing keys, but give me a pair like `:p` would | 19:25 | |
m: my %h; dd %h<foo>:k | |||
camelia | () | ||
Zoffix | m: my %h; dd %h<foo>:p | ||
camelia | () | ||
lizmat | Zoffix: please file a ticket for that | ||
Zoffix | Well, it does work right, looks like | ||
I mean, :p works like :k:p already | 19:26 | ||
lizmat | ah, yes | ||
Altreus | hmm | ||
lizmat | hmmm | ||
Altreus | no I'm hmming | ||
Zoffix | I think the "odd number" error was from trying to stick a List as one thing | ||
lizmat | it's been a while I was in that section of the code | ||
Altreus | Zoffix: It's academically interesting but the topicalising of with/andthen basically solves it | 19:27 | |
Zoffix | :) | 19:28 | |
Altreus | does :kv also filter on existing things? | ||
Zoffix | m: my %h; dd %h<foo>:kv | ||
camelia | () | ||
Zoffix | yup | ||
Altreus | isn't that the same as :v:p then 🤔 | ||
lizmat | Altreus: no, :kv produces 2 values for each key/value | ||
:p produces 1 value, a Pair with the key/value | 19:29 | ||
Altreus | oh yes | ||
but :p doesn't filter, I see | |||
Zoffix | It does | ||
All of these do filter | |||
Altreus | :x | ||
what does this do then: | 19:30 | ||
m: my %a = :42fooss; my %b = :100meows; %b ,= $a<foo>:p; dd %b | |||
camelia | 5===SORRY!5=== Error while compiling <tmp> Variable '$a' is not declared. Did you mean '%a'? at <tmp>:1 ------> 3%a = :42fooss; my %b = :100meows; %b ,= 7⏏5$a<foo>:p; dd %b |
||
Altreus | gosh | ||
m: my %a = :42fooss; my %b = :100meows; %b ,= %a<foo>:p; dd %b | |||
camelia | Died with X::Hash::Store::OddNumber in block <unit> at <tmp> line 1 |
||
Altreus | okay | ||
Zoffix | Altreus: it does %b = %b, () with the empty list being the "odd" one out | ||
Altreus | m: my %a = :42fooss; my %b = :100meows; %b ,= %a<foo>:kv; dd %b | 19:31 | |
camelia | Died with X::Hash::Store::OddNumber in block <unit> at <tmp> line 1 |
||
Zoffix | m: my %a = :42fooss; my %b = :100meows; %b ,= |(%a<foo>:p); dd %b | ||
camelia | Hash %b = {:meows(100)} | ||
Zoffix | m: my %a = :42foo; my %b = :100meows; %b ,= |(%a<foo>:p); dd %b | ||
camelia | Hash %b = {:foo(42), :meows(100)} | ||
Zoffix | and this one slips it in, so you don't get the error | ||
m: my %a = :42foo; my %b = :100meows; %b ,= %a<foo>:p; dd %b | |||
camelia | Hash %b = {:foo(42), :meows(100)} | ||
Zoffix | and this one works 'cause Pair is Associative so it gets the "combine the things" treatment like %a = %b, %c would | 19:32 | |
or is it a list of pairs | |||
m: my %a = :42foo; dd %a<foo>:p.^name | |||
camelia | 5===SORRY!5=== Error while compiling <tmp> Malformed postfix call at <tmp>:1 ------> 3my %a = :42foo; dd %a<foo>:p.7⏏5^name |
||
Altreus | this actually helps for my other assignment, where I actually have a slice of more than one thing | ||
Zoffix | m: my %a = :42foo; dd (%a<foo>:p).^name | ||
camelia | "Pair" | ||
Altreus | eh, no it doesn't, because I'm translating the keys too :( | ||
Zoffix | nah, just a Pair | ||
Zoffix & | 19:33 | ||
19:33
Zoffix left
|
|||
Altreus | this is fun though | 19:35 | |
written perl5 for so long I'm pretty sure of the fastest way of doing most things | |||
but perl6 offers many more shortcuts | |||
masak .oO( more but slower shortcuts ) | 19:36 | ||
Juerd | Honestly, the shortcut that I like most is ^ | ||
masak | :) | 19:38 | |
timotimo | i like that there's shortcuts for all kinds of access to $_, like .<foo> and .[foo] and .method | 19:42 | |
SmokeMachine | m: $_ = 42; dd [:.abs] # I'd like this one... | 19:44 | |
camelia | 5===SORRY!5=== Error while compiling <tmp> Bogus statement at <tmp>:1 ------> 3$_ = 42; dd [:7⏏5.abs] # I'd like this one... expecting any of: colon pair |
||
timotimo | interesting | ||
SmokeMachine | m: $_ = 42; dd [:abs(.abs)] | 19:45 | |
camelia | [:abs(42)] | ||
SmokeMachine | I could be writing less: github.com/FCO/EventSource/blob/ma...ra.pm6#L42 | 19:46 | |
I think Zoffix already wrote something about that... | 19:47 | ||
timotimo | colonpairoscopy, yeah | ||
19:52
Zoffix joined
|
|||
Zoffix | SmokeMachine: I proposed-but-then-rejected it in R#1462 | 19:53 | |
synopsebot | R#1462 [closed]: github.com/rakudo/rakudo/issues/1462 [RFC] [RFC] make `:.foo` mean `:foo(.foo)`, as in `:foo($_.foo)` | ||
SmokeMachine | Zoffix: yes, I was reading that link... | ||
Zoffix | m: say 42.:<-> | 19:54 | |
camelia | 5===SORRY!5=== Error while compiling <tmp> Decimal point must be followed by digit at <tmp>:1 ------> 3say 42.7⏏5:<-> |
||
Zoffix | Ambiguitity | ||
m: say (42).:<-> | |||
camelia | -42 | ||
Zoffix | s/A.+/bug/; | 19:55 | |
R#2094 | 19:56 | ||
synopsebot | R#2094 [open]: github.com/rakudo/rakudo/issues/2094 [LTA] "decimal point must be followed..." error is too eager | ||
19:58
Ven` joined
20:02
itaipu left
20:03
Ven` left,
itaipu joined
20:17
molaf joined
20:24
ownTheLibs joined,
stee3 joined
20:42
ruoso left
|
|||
Altreus | OK I have a bunch of related classes. I'd like them to be able to refer to each other without introducing a circular dependency, and presumably I can do this without doing some C++ shenanigans like having one file that includes them all and I'm supposed to include that | 20:52 | |
is this what need is for? | 20:53 | ||
I don't really understand the doc for need | |||
raschipi | Altreus: the way to do it is the same as in C++ | 20:57 | |
Can't have circular depedencies like you can in Perl 5. | |||
Altreus | I'm only doing 'use' so the types exist | 21:00 | |
is there some way of saying "This type is going to exist", so I can use it as a type? | |||
this sounds like a step backwards, is all | |||
:/ | |||
raschipi | It comes as a cost of one-pass parsing, it's a trade-off | 21:01 | |
Altreus | well butts | 21:02 | |
21:03
skids left
|
|||
[Coke] | this is the point of the conversation where we typically suggest using roles instead of classes for parts of the design, I think. | 21:03 | |
timotimo | um | ||
but there is a way of saying "this type is going to exist" | |||
it's just stubbing the class | |||
like class Foobar { ... }; | 21:04 | ||
literally containing three dots | |||
Garland_g[m] | You can stub a class, and then the type exists, but you can't inherit from it until it is fully defined. | ||
raschipi | And it needs to be defined in the current scope, not in some other file | ||
Altreus | ya | 21:05 | |
timotimo | m: class Parent {...}; class Bloop is Parent { }; class Parent { has $.foo } | ||
camelia | 5===SORRY!5=== Error while compiling <tmp> 'Bloop' cannot inherit from 'Parent' because 'Parent' isn't composed yet (maybe it is stubbed) at <tmp>:1 |
||
timotimo | ah, mhm | ||
Altreus | I'm not really sure I remember how to do it in C++ ;p | ||
I have one class Message and another class Channe; | |||
Channel | |||
Channel has @.messages and Message has $.channel | |||
So I'd like to provide the types to those | 21:06 | ||
I dunno whether I prefer monkeying around with extra files, or just not putting the constraints on | |||
21:06
jameslenz joined
21:11
jameslenz left
|
|||
Zoffix | Altreus: just don't put the constraint | 21:11 | |
timotimo: another limitation is the stub can't be in a separate file. | |||
Altreus | in perl5 I'd be happy with that but I don't want to believe that there are any problems with perl6 | 21:12 | |
Zoffix | Altreus: all languages suck :) | ||
Altreus | ;_; | ||
Zoffix | :D | ||
Altreus: stick everything into one file :P | |||
Or make a build script that sticks everything into one file. Rakudo compiler does it that way :) | 21:13 | ||
21:13
subroot left
21:14
raschipi left
|
|||
jnthn | Or extract a role and use it in the two places :) | 21:14 | |
Zoffix | :) | ||
Actually, there's a hackish way to do a circular dependency | 21:16 | ||
Altreus | with a .c and a .h :P | 21:17 | |
Zoffix | What's that? | 21:18 | |
Altreus | one with the interface and one with the implementation | ||
Zoffix | Ah | ||
Altreus | which is basically a role and a class tbh | ||
Zoffix | No, by writing the constraint on one side as `has $.bar where do require ::('Bar')` :) | ||
e: BEGIN { given '/tmp/z4222/'.mkdir { .add('Foo.pm6').spurt: 「class Foo { has $.bar where do require ::('Bar') }」; .add('Bar.pm6').spurt: 「use Foo; class Bar { has Foo $.foo }」 }; use lib '/tmp/Foo'; use Bar; use Foo; Foo.new: :bar(Bar) | 21:19 | ||
evalable6 | (exit code 1) ===SORRY!=== Could not find Bar at line 1 in: /tmp/Foo /home/bisecta… |
||
Zoffix, Full output: gist.github.com/6433f04f8794be1a8a...cb3cc9b93a | |||
Zoffix | Dunno why the bot don't like it, but works locally :) | ||
Altreus | probably because use looks for a file? :s | ||
tbrowder_ | [Coke]: please see and comment on my proposal in doc issue GH #2185. | ||
Zoffix | Altreus: yeah, but I create those files in begin | ||
Altreus | oh yes hacky indeed | 21:20 | |
I think I'll pass | |||
Zoffix | No, the file creation isn't the hack. That's just for the bot | ||
Altreus | the constraints are documentation, not compilation | ||
Zoffix | The `has $.bar where do require ::('Bar')` is the hack | ||
'cause you require a module on each typecheck :P | 21:21 | ||
.oO( once do require … ) |
|||
Altreus | surely it is still a circular dependency because that module requires me! | ||
Zoffix | Altreus: yeah, it can knock itself out and require. The `require` stop doesn't involving requiring that module back | ||
s/stop/step/; | 21:22 | ||
The require-back step only happens during typecheck (well, if you add `once`, presumably just the first typecheck) | |||
21:24
robertle left
|
|||
Zoffix | Ah, I messed up braces that's why | 21:25 | |
e: BEGIN { given '/tmp/z4223/'.IO.mkdir { .add('Foo.pm6').spurt: 「class Foo { has $.bar where do require ::('Bar') }」; .add('Bar.pm6').spurt: 「use Foo; class Bar { has Foo $.foo }」 } }; use lib '/tmp/z4223'; use Bar; use Foo; Foo.new: :bar(Bar) | |||
evalable6 | |||
Zoffix | e: BEGIN { given '/tmp/z4223/'.IO.mkdir { .add('Foo.pm6').spurt: 「class Foo { has $.bar where do require ::('Bar') }」; .add('Bar.pm6').spurt: 「use Foo; class Bar { has Foo $.foo }」 } }; use lib '/tmp/z4223'; use Bar; use Foo; Foo.new: :bar(42) | ||
evalable6 | (exit code 1) Type check failed in assignment to $!bar; expected <anon> but got Int (42) in block <unit> at /tmp/mLzVP7GOHX line 1 |
||
Zoffix | works :) | 21:26 | |
the challenge is for this to be non-hacky, you need to keep sort of state inside the `where`, but that's not supported. | |||
(keep state so that you load Bar just once) | 21:27 | ||
oh | |||
oh nm | |||
Altreus | going with "remove the constraints" | 21:28 | |
:D | 21:29 | ||
Zoffix | :D | 21:31 | |
tbrowder_ | .ask [Coke] at your convenience please look at my last comment in doc issue GH #2185 | ||
yoleaux | tbrowder_: I'll pass your message to [Coke]. | ||
[Coke] | . | 21:32 | |
yoleaux | 21:31Z <tbrowder_> [Coke]: at your convenience please look at my last comment in doc issue GH #2185 | ||
[Coke] | tbrowder_: I see those alerts from GH. you don't have to also ping me here, btw. | ||
but since we are both here: those comments seem to cover a lot more ground than my 2 (now 3) bullet points. | 21:33 | ||
I also commented on the ticket. | |||
21:34
Zoffix left
21:37
jabits joined
21:40
HaraldJoerg left
|
|||
tbrowder_ | i don’t think that’s too much ground since they all logically fit together. yr mod to htmlify.p6 may have to change dirs but maintenance should be much improved imo. | 21:49 | |
21:53
jabits left
|
|||
timotimo | what kind of chart would y'all use to display distances between time points? | 21:59 | |
22:02
rindolf left
22:05
psychoslave left
22:11
ChoHag left
|
|||
warriors | well it depends, if you have a set of two points, and you want to compare the sets, likes which set of two points have the biggest or smallest diff, i would use a simple bar chart | 22:35 | |
timotimo | this is about showing when the individual GC runs start | 22:36 | |
so i have a series of points with ever-increasing values, i.e. a line graph would usually tend to look like a diagonal | |||
22:38
fbynite joined
|
|||
warriors | a line chart make sense, especial if you want to highlight the upward diagonal pattern | 22:39 | |
i think bar chart is more to drive attention to individual bar, like highest or lowest barn ... line charts are better to focus on the pattern of movement | 22:40 | ||
22:40
Zoffix joined
22:41
Zoffix left
|
|||
timotimo | it'll take me a long time to try this out ... because the cat's between keyboard and display again, demanding belly rubs and looking really cute | 22:41 | |
warriors | :) | ||
good luck | |||
timotimo | thanks | ||
22:41
MasterDuke joined
|
|||
donpdonp | META6.json: ... "depends" : ["Cro::HTTP", "URI"]; zef install . -> All candidates are currently installed; perl6> use URI; -> Could not find URI at line 1 in: | 22:43 | |
what am I missing? | |||
timotimo | unlikely, but ... more than one perl6 binary involved? | ||
donpdonp | im pretty sure its only 1 | 22:44 | |
$ zef -i list|grep URI -> no matches. hmmm. | |||
timotimo | it could be that URI doesn't actually ahve a "provides" for a module named "URI" | ||
22:44
lizmat left
|
|||
timotimo | also, perhaps you want "zef install --deps-only ." | 22:44 | |
donpdonp | --deps-only also says everyhign is installed | 22:45 | |
timotimo | and "zef install URI" does what? | 22:46 | |
donpdonp | $ zef -i list|grep Cro -> Cro::Core:ver<0.7.6>... | ||
i'll try it | |||
===> Installing: URI:ver<.0.1.4> | |||
$ zef -i list|grep URI => URI:ver<.0.1.4> | 22:47 | ||
so whats wrong with META6.json | |||
timotimo | not sure. perhaps a thing regarding "you already installed this name/auth/version before, so i won't do anything" | 22:48 | |
donpdonp | hmm anyone have a url parser they like? URI doesnt seem to do anything | 22:53 | |
benjikun | donpdonp: Does it just not install? | 22:56 | |
if so, have you tried adding `--force-install`? | 22:57 | ||
22:57
sena_kun left
|
|||
donpdonp | benjikun: its installed | 22:57 | |
URI.new.parse("something.com/") => nil | 22:58 | ||
22:59
hoelzro left,
huggable left
23:00
zoosha_ left,
buggable left
|
|||
geekosaur | parse doesn't seem to produce anything; you're supposed to apply methods to the URI object? | 23:02 | |
it might be argued that it should return self, but currently it doesn't | |||
benjikun | donpdonp: `URI.new('perl6.org/');` | ||
geekosaur | that's probably the most straightforward way to fix it, yes | 23:03 | |
benjikun | remove `.parse`, that's all | ||
donpdonp | i see. thx. so how would i get at say, the 'path' part of the url | 23:04 | |
benjikun | `$url.path` | ||
geekosaur | save the object, use $obj.path | ||
donpdonp | got it. thx all. | ||
benjikun | :) | ||
23:06
jameslenz joined
23:10
Gex_ joined
23:11
jameslenz left
|
|||
Gex_ | Hi everyone | 23:12 | |
23:13
Gex_ left
23:16
Chri joined
23:27
Chri left
23:31
pecastro left
23:33
lizmat joined,
pmurias left
|
|||
Kaiepi | hm | 23:37 | |
i can't build rakudo | |||
23:38
kerframil left
23:40
xyzq joined,
guestorino joined
|
|||
xyzq | howdy everyone | 23:40 | |
TimToady | everyone isn't here, apparently | 23:43 | |
guestorino | haha, nice | 23:44 | |
Kaiepi | this is what happens when i try to build rakudo hastebin.com/emicofoboj.sql | ||
i'll try again genning moarvm and nqp | |||
23:46
xyzq left
23:47
Chrs_ joined
|
|||
Kaiepi | also about last night i don't get to the mental hospital for about another week since i need a doctor's notice and canada's mental health care system absolutely rules but i'll try to contribute in the meantime | 23:47 | |
23:48
guestorino left
|
|||
TimToady | Kaiepi: well, hang in there, and cut yourself all the slack you need | 23:49 | |
23:49
go|dfish joined
|
|||
Kaiepi | nope, build still fails | 23:50 | |
i'll make an issue | |||
and thanks TimToady | |||
23:50
jcallen joined
23:52
Chrs_ left
23:54
hobbs joined,
hobbs left,
hobbs joined
23:55
jeezy` joined,
fbynite left
23:58
jeezy` left
23:59
buggable joined,
ChanServ sets mode: +v buggable,
ZofBot joined,
ChanServ sets mode: +v ZofBot
|