»ö« Welcome to Perl 6! | perl6.org/ | evalbot usage: 'p6: say 3;' or rakudo:, or /msg camelia p6: ... | irclog: irc.perl6.org or colabti.org/irclogger/irclogger_logs/perl6 | UTF-8 is our friend!
Set by moritz on 22 December 2015.
timotimo doc is now writing the X:: stuff 00:00
cale2 what's the difference between .. and ... 00:06
IOninja cale2: one's a range operator the other's is sequence operator 00:07
m: say eager 10..1
camelia rakudo-moar aac9ef: OUTPUT«()␤»
IOninja m: say eager 10…1
camelia rakudo-moar aac9ef: OUTPUT«(10 9 8 7 6 5 4 3 2 1)␤»
IOninja You can perform operations on a range without reifying all of its elements, but not with a sequence 00:08
m: say 42 ~~ 0..10
camelia rakudo-moar aac9ef: OUTPUT«False␤»
IOninja m: say 42 ~~ 0..50
camelia rakudo-moar aac9ef: OUTPUT«True␤»
IOninja And you can make arbitrary sequences
m: say (1, 1, *+* … *)[^20]; # fibonacci seq
camelia rakudo-moar aac9ef: OUTPUT«(1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765)␤»
IOninja m: say 42 ~~ 0..Inf # better example of not reifying stuff 00:09
camelia rakudo-moar aac9ef: OUTPUT«True␤»
IOninja m: say sum 0..99999999999999999999999999999999999999999999999999999999999999999999999999999999999 # another example of usefulness of Range 00:11
camelia rakudo-moar aac9ef: OUTPUT«4999999999999999999999999999999999999999999999999999999999999999999999999999999999950000000000000000000000000000000000000000000000000000000000000000000000000000000000␤»
IOninja m: my @G = 0, {++$ - @G[@G[$++]]} … ∞; say @G[^30] 00:14
camelia rakudo-moar aac9ef: OUTPUT«(0 1 1 2 3 3 4 4 5 6 6 7 8 8 9 9 10 11 11 12 12 13 14 14 15 16 16 17 17 18)␤»
IOninja en.wikipedia.org/wiki/Hofstadter_s...G_sequence
TimToady Making anonymous variables behave like implicit state vars is either one of the best decisions or one of the worst decisions I've ever made, and quite possibly both. 00:19
IOninja :) 00:21
cale2 this rosalind question is tricky
Given: Positive integers n≤40n≤40 and k≤5k≤5. 00:22
Return: The total number of rabbit pairs that will be present after nn months, if we begin with 1 pair and in each generation, every pair of reproduction-age rabbits produces a litter of kk rabbit pairs (instead of only 1 pair).
It's like a modified version of the fib sequence
sample input = 5 3 ............ sample output = 19 00:23
TimToady we're assuming any two rabbits can reproduce here? :)
oh, they always reproduce in pairs, I see... 00:24
cale2 That's the confusing part. It talks about pairs of rabbits as if they're one unit
TimToady so they could just be amoebas instead... 00:24
cale2 exactly 00:25
"A key observation is that the number of offspring in any month is equal to the number of rabbits that were alive two months prior" 00:28
timotimo docs are now syncing it seems like
or maybe it's already done
it seems like you have to put in a line for language.html for the tutorial to show up 00:29
docs.perl6.org/language/haskell-to-p6.html - but it can be reached if you know the name
cale2 m: say (1, 1, (* * 3)+(* * 3) ... *)[5] #given the sample input, it should be something like this 00:30
camelia rakudo-moar aac9ef: OUTPUT«306␤»
cale2 m: say (1, 1, *+* * 3 ... *)[5] 00:32
camelia rakudo-moar aac9ef: OUTPUT«142␤»
cale2 m: say (1, 3, *+* ... *)[5]
camelia rakudo-moar aac9ef: OUTPUT«18␤»
cale2 That's it 00:33
but it should be 19 instead of 18 :S
TEttinger there's plenty of issues with that rabbit simulation, chief among them is that they're going to die of inbreeding-relted diseases for any high enough value of nn
"french bulldog syndrome" 00:34
cale2 m: say (1, 1, 3, *+* ... *)[5]
camelia rakudo-moar aac9ef: OUTPUT«11␤»
cale2 m: say (1, 3, *+* ... *)[5] + 1; # solved :)
camelia rakudo-moar aac9ef: OUTPUT«19␤»
timotimo uh oh, need to go to bed soon and i was distracted from writing the weekly … 00:41
timotimo docs.google.com/document/d/1UbTto1...sp=sharing - please 2 review 00:50
cale2 Will Server and Server::Async become the defacto servers? I'd like to translate some Go Web Dev tutorials into P6 eventually 00:53
timotimo HTTP::Server is more just an interface declaration, really
tony-o: i wonder why HTTP::Server::Threaded wasn't moved under perl6 org? 00:54
cale2 Can you define your own iterators in P6? 01:02
timotimo of course
our current iterators are already defined in perl6 01:03
cale2 so they will respond to ... ?
timotimo huh?
cale2 doesn't ... call the .successor method on your iterator?
timotimo no, it calls .succ on each value
to go through an iterator you want something like for, or map 01:04
well, really what i mean is, you want to wrap a Seq around the iterator
then you can do whatever you like
i'll go ahead and publish the post 01:05
timotimo done and done 01:06
p6weekly.wordpress.com/2017/02/14/...-one-zero/ read up, everybody!
cale2 timotimo: the reason I ask is because it turns out that the rabbits' age needs to be accounted for 01:12
so they only multiply after they've sat out for their first month of existence lol
Geth doc: 5a14552dd7 | (Brad Gilbert)++ | doc/Language/haskell-to-p6.pod6
POD not Markdown
01:20
cale2 glot.io/snippets/en3ytrg8zy 01:30
cale2 I"m getting "Cannot assign to a readonly variable or a value" over and over 01:33
masak probably don't want `.=` on that `.push` 01:34
cale2 glot.io/snippets/en3ytrg8zy
updated
masak .push is already mutating
cale2 it's thinking that the array is read only :S
timotimo right, you want <-> $age instead of -> $age
cale2 huh? 01:35
masak `for $pairs-produced` will only ever loop once, over that Int
timotimo that, too
cale2 That's fine, there's only one item
timotimo hi masak :)
cale2 so it should only loop once
masak ahoj timotimo
timotimo so it doesn't matter what you give for $pairs-produced? 01:36
even though it's a required parameter?
masak cale2: then you can remove the for loop
cale2 It starts with one item in the array, then adds items as it goes on
BenGoldberg m: say Phi; 01:38
camelia rakudo-moar aac9ef: OUTPUT«5===SORRY!5=== Error while compiling <tmp>␤Undeclared name:␤ Phi used at line 1␤␤»
timotimo anyway, putting @*ARGS = <--months=5 --pairs-produced=3>; at the beginning and turning the -> into <-> makes it run
m: say phi
camelia rakudo-moar aac9ef: OUTPUT«5===SORRY!5=== Error while compiling <tmp>␤Undeclared routine:␤ phi used at line 1␤␤»
timotimo time for me to sleep! o/
masak cale2: that innermost for loop will only ever loop once, though 01:39
here, let me demonstrate
m: my $number = 42; for $number { say "OH HAI" }
camelia rakudo-moar aac9ef: OUTPUT«OH HAI␤»
BenGoldberg m: constant Φ = 5 ** .5 * .5 + .5; say Φ;
camelia rakudo-moar aac9ef: OUTPUT«1.61803398874989␤»
cale2 ohhhh, I'm incrementing age... So I need to make it read-write. That error message was bad. It gave me a totally wrong line number 01:40
masak BenGoldberg: shouldn't it be lower-case φ?
BenGoldberg m: constant Φ = 5 ** .5 * .5 + .5; say Φ; constant ϕ = Φ - 1; say ϕ;
camelia rakudo-moar aac9ef: OUTPUT«1.61803398874989␤0.618033988749895␤»
cale2 oh nevermind, i didn't read the lines correctly :D
masak: except it is an array of numbers 01:41
here it is fixed: glot.io/snippets/en3ytrg8zy
masak cale2: `Int :$pairs-produced!` is not an array of numbers, it's an Int 01:42
you're looping over *one* Int
cale2 what code are you looking at?
masak eventually I will be able to convince you of this -- can't we skip to where I already did? :)
cale2: I'm looking at the latest URL you pasted
I think you are sending the same URL over and over 01:43
don't know if you want that
Xliff for (^$pairs-produced) { @rabbit-ages.push: 1 }
masak better
cale2 Xliff: ah, that loop!
masak parens unnecessary :)
Xliff masak: :P 01:43
Allow me my syntactic idiosyncracies 01:44
masak wouldn't dream of doing otherwise :)
Xliff Because ^3.pick doesn't work without the parens.
masak put in double parens for all I care :P
Xliff (((((masak))))).roll
masak rolls
masak rolls with it
BenGoldberg m: (((((enum masak))))).roll.say 01:45
camelia rakudo-moar aac9ef: OUTPUT«5===SORRY!5=== Error while compiling <tmp>␤Undeclared routines:␤ enum used at line 1␤ masak used at line 1␤␤»
BenGoldberg m: (((((enum <masak>))))).roll.say
camelia rakudo-moar aac9ef: OUTPUT«masak => 0␤»
Xliff m: (((((enum <masak BenGoldberg Xliff>))))).roll.say
camelia rakudo-moar aac9ef: OUTPUT«BenGoldberg => 1␤»
Xliff m: (((((enum <masak BenGoldberg Xliff>))))).roll.say
camelia rakudo-moar aac9ef: OUTPUT«BenGoldberg => 1␤»
Xliff m: (((((enum <masak BenGoldberg Xliff>))))).pick.say
camelia rakudo-moar aac9ef: OUTPUT«Xliff => 2␤»
AlexDaniel m: say ^50 .pick 01:46
camelia rakudo-moar aac9ef: OUTPUT«5␤»
AlexDaniel Xliff: oh really?
BenGoldberg m: [<3d6>].roll.say
camelia rakudo-moar aac9ef: OUTPUT«3d6␤»
Xliff Huh!
m: ^50.pick
camelia rakudo-moar aac9ef: OUTPUT«Potential difficulties:␤ Precedence of ^ is looser than method call; please parenthesize␤ at <tmp>:1␤ ------> 3^507⏏5.pick␤WARNINGS for <tmp>:␤Useless use of "^" in expression "^50.pick" in sink context (line 1)␤»
Xliff m: ^50 .pick
camelia ( no output )
Xliff m: ^50 .pick.say
camelia rakudo-moar aac9ef: OUTPUT«33␤»
Xliff That space should have no effect 01:47
But it does.... aaaaieee!
BenGoldberg rakudobug?
Xliff Yeah. That's an LTA
AlexDaniel I don't think it is a bug
Xliff *shrug* 01:48
I prefer parens there than a space.
AlexDaniel I don't know the reasoning though
Xliff Of course, my preference means little.
masak the space having an effect is a relatively new thing 01:49
used to be a TTIAR
AlexDaniel Xliff: I don't think so. You can use parens in your code as much as you want, this means a lot :)
BenGoldberg m: sub infix:<d>(Int $dice, Int $sides is copy) { $sides = 1..$sides; [+] $sides.pick }; say 3 d 6 for 1..10; 01:50
camelia rakudo-moar aac9ef: OUTPUT«Type check failed in assignment to $sides; expected Int but got Range (1..6)␤ in sub infix:<d> at <tmp> line 1␤ in block <unit> at <tmp> line 1␤␤»
BenGoldberg m: sub infix:<d>(Int $dice, $sides is copy) { $sides = 1..$sides; [+] $sides.pick }; say 3 d 6 for 1..10;
camelia rakudo-moar aac9ef: OUTPUT«5␤6␤1␤5␤6␤3␤2␤6␤5␤2␤»
BenGoldberg m: sub infix:<d>(Int $dice, $sides is copy) { $sides = 1..$sides; [+] $sides.pick xx $dice }; say 3 d 6 for 1..10;
camelia rakudo-moar aac9ef: OUTPUT«8␤8␤7␤9␤11␤8␤14␤11␤10␤15␤»
AlexDaniel masak: wasn't it like this right from the start? I mean, when infix . was introduced
c: all ^50 .pick.say 01:51
masak AlexDaniel: there's no `infix:<.>`
AlexDaniel: you might be thinking of `infix:<.=>`
committable6 AlexDaniel, gist.github.com/e101be26628e09d4cb...2d20a6745d
AlexDaniel m: ^50 . pick . say
camelia rakudo-moar aac9ef: OUTPUT«36␤»
AlexDaniel well, it *looks* like an infix, but whatever 01:52
masak maybe I'm wrong. maybe that's how the new feature works :)
in which case you're absolutely right
BenGoldberg Prior to 2015.10, it produced a 'two terms in a row' type error.
AlexDaniel bisect: 50 . say 01:52
masak but in that case, "when infix . was introduced" was fairly recently
bisectable6 AlexDaniel, On both starting points (old=2015.12 new=aac9efc) the exit code is 0 and the output is identical as well
AlexDaniel, Output on both points: 50
masak 2015.10 sounds about right
AlexDaniel bisect: ^0 . pick . say
bisectable6 AlexDaniel, On both starting points (old=2015.12 new=aac9efc) the exit code is 0 and the output is identical as well
AlexDaniel, Output on both points: Nil
BenGoldberg m: ^0 . pick . say; 01:53
camelia rakudo-moar aac9ef: OUTPUT«Nil␤»
AlexDaniel bisect: ^1 .pick.say
bisectable6 AlexDaniel, On both starting points (old=2015.12 new=aac9efc) the exit code is 0 and the output is identical as well
AlexDaniel, Output on both points: 0
AlexDaniel ahhh right 01:53
wtf am I doing
bisect: old=2015.09 50 . say
bisectable6 AlexDaniel, Bisecting by exit code (old=2015.09 new=aac9efc). Old exit code: 1
AlexDaniel here
bisectable6 AlexDaniel, bisect log: gist.github.com/0ae6e9a3fbfa7e377e...003b551b29
AlexDaniel, (2015-09-26) github.com/rakudo/rakudo/commit/cb...ceec2c74de
AlexDaniel masak: see! It says infix:<.> right there :) 01:54
derrick hello
AlexDaniel derrick: hello :) 01:55
c: cb25b2f47 ^50 .pick.say
committable6 AlexDaniel, ¦«cb25b2f»: 18
AlexDaniel masak: and yes, it worked like this right from the start (the start being the introduction of infix:<.>)
cale2 I'm trying to get the output to mirror this pic lol 01:56
cdn-images-1.medium.com/max/600/1*...zyrDsQ.png
AlexDaniel cale2: perhaps consider generated some input for graphviz?
u: bunny
unicodable6 AlexDaniel, U+1F46F WOMAN WITH BUNNY EARS [So] (👯)
AlexDaniel u: rabbit
unicodable6 AlexDaniel, U+1F407 RABBIT [So] (🐇)
AlexDaniel, U+1F430 RABBIT FACE [So] (🐰)
cale2 how do I use those unicode symbols in my code? 01:57
m: say "U+1F430"
camelia rakudo-moar aac9ef: OUTPUT«U+1F430␤»
masak AlexDaniel: I sit corrected. :)
cale2 m: say U+1F430
camelia rakudo-moar aac9ef: OUTPUT«5===SORRY!5=== Error while compiling <tmp>␤Confused␤at <tmp>:1␤------> 3say U+17⏏5F430␤»
BenGoldberg m: "\u[1F430]".say 01:58
camelia rakudo-moar aac9ef: OUTPUT«5===SORRY!5=== Error while compiling <tmp>␤Unrecognized backslash sequence: '\u'␤at <tmp>:1␤------> 3"\7⏏5u[1F430]".say␤ expecting any of:␤ double quotes␤ term␤»
AlexDaniel say “\x[1F430]”
m: say “\x[1F430]”
camelia rakudo-moar aac9ef: OUTPUT«🐰␤»
AlexDaniel m: say “\c[RABBIT]”
camelia rakudo-moar aac9ef: OUTPUT«🐇␤»
BenGoldberg m: "\c[PILE OF POO]".say
camelia rakudo-moar aac9ef: OUTPUT«💩␤»
AlexDaniel
.oO( … everyone's favorite )
01:59
BenGoldberg This would be more fun if hexchat suppored colored unicode.
masak AlexDaniel: that commit message also pegs TimToady as not a big proponent of infix:<.> and fluent programming...
AlexDaniel masak: I also recall TimToady regretting it a little bit 02:00
masak I can't recall using infix:<.> once since it was introduced
AlexDaniel I'm using it all the time 02:01
masak I've only seen it used here on channel by enthusiastic youngsters
masak .oO( "get off my lawn" indeed )
AlexDaniel ఠ_ఠ
masak I keep putting in those backspaces at the end of lines, too
the unspace markers, I mean
cale2 what does infix<.> do? 02:02
masak and I keep using parentheses to indicate precedence, as honest hard-working citizens do
AlexDaniel m: 42.say
camelia rakudo-moar aac9ef: OUTPUT«42␤»
AlexDaniel m: 42 . say
camelia rakudo-moar aac9ef: OUTPUT«42␤»
AlexDaniel cale2: it allows you to put spaces around the dot
cale2 that confuses it with function composition, no?
AlexDaniel You mean ∘? 02:03
masak nothing to do with function composition 02:04
the `.` here still means public attribute/method call
AlexDaniel masak: but there is a line, right? You don't write 25 + (5 × 2) do you? 02:05
masak AlexDaniel: no, I write `25 + 5 * 2` :) 02:06
AlexDaniel masak: then I'm not sure what you've meant with your message about parens to indicate precedence 02:07
by the way: 02:08
m: 42 . WHAT
camelia rakudo-moar aac9ef: OUTPUT«===SORRY!===␤Method call must either supply a name or have a child node that evaluates to the name␤»
masak that could be seen as a bug, I think 02:09
it's because .WHAT is "special"
AlexDaniel yea, WAT
but there is a ticket for this
masak AlexDaniel: re precedence, I mean that given the choice between whitespace to indicate precedence and parentheses to indicate precedence, I greatly prefer the latter. 02:10
it doesn't mean I enjoy putting in unnecessary parentheses in my arithmetic expressions.
AlexDaniel RT #126855
synopsebot6 Link: rt.perl.org/rt3//Public/Bug/Displa...?id=126855
SmokeMachine Where can I read the implementation of infix:<.>? 02:14
geekosaur s: &infix<.> 02:16
SourceBaby geekosaur, Something's wrong: ␤ERR: ===SORRY!=== Error while compiling -e␤Undeclared routine:␤ infix used at line 6. Did you mean 'indir', 'index'?␤␤
geekosaur s: &infix:<.>
SourceBaby geekosaur, Something's wrong: ␤ERR: ===SORRY!=== Error while compiling -e␤Malformed postfix call␤at -e:1␤------> .⏏<EOL>␤
geekosaur sourcebot is never easy to figure out :/
masak s: infix:<.>
SourceBaby masak, Something's wrong: ␤ERR: ===SORRY!=== Error while compiling -e␤Malformed postfix call␤at -e:1␤------> .⏏<EOL>␤
masak something's wrong indeed :/ 02:18
SmokeMachine Github search ignores :<.> 02:19
SmokeMachine s: infix:<+> 02:29
SourceBaby SmokeMachine, Something's wrong: ␤ERR: Cannot resolve caller sourcery(Int); none of these signatures match:␤ ($thing, Str:D $method, Capture $c)␤ ($thing, Str:D $method)␤ (&code)␤ (&code, Capture $c)␤ in block <unit> at -e line 6␤␤
cale2 Why does it say there's no method "age" for the grep glot.io/snippets/en3ytrg8zy
SmokeMachine s: &infix:<+>
SourceBaby SmokeMachine, Sauce is at github.com/rakudo/rakudo/blob/aac9...ic.pm#L186
cale2 it should have a read method for the objects
SmokeMachine s: &infix:<.> 02:30
SourceBaby SmokeMachine, Something's wrong: ␤ERR: ===SORRY!=== Error while compiling -e␤Malformed postfix call␤at -e:1␤------> .⏏<EOL>␤
AlexDaniel mch: my $x = ‘.’; say infix:[$x] 02:31
committable6 AlexDaniel, gist.github.com/26556ae24804344529...b21d3bc460
TEttinger uhhh what happened to the colors?
BenGoldberg s: &infix:<+>
SourceBaby BenGoldberg, Sauce is at github.com/rakudo/rakudo/blob/aac9...ic.pm#L186
AlexDaniel TEttinger: colors never worked with SourceBaby 02:32
TEttinger oh ok
SmokeMachine AlexDaniel: thanks!
BenGoldberg I'm guessing that SourceBaby isn't configured to use irc colors, and uses xterm colors instead.
AlexDaniel SmokeMachine: sorry… for what?
BenGoldberg Err, ansi colors
AlexDaniel BenGoldberg: it just dumps whatever it recieves, so yes 02:33
SmokeMachine Oh! No source... :(
AlexDaniel the easiest way to fix it is to use RAKUDO_ERROR_COLOR
s: %*ENV<RAKUDO_ERROR_COLOR> = 0; &infix:<.> 02:34
SourceBaby AlexDaniel, Ehhh... I'm too scared to run that code.
AlexDaniel :P
SmokeMachine AlexDaniel: sorry.. I got confused... I thought that was the source of &infix:<.>
AlexDaniel SmokeMachine: well, the source is right here: 02:35
bisect: old=2015.09 50 . say
bisectable6 AlexDaniel, Bisecting by exit code (old=2015.09 new=aac9efc). Old exit code: 1
AlexDaniel, bisect log: gist.github.com/aae6c4dd45600bc63a...0115642a43
AlexDaniel, (2015-09-26) github.com/rakudo/rakudo/commit/cb...ceec2c74de
SmokeMachine AlexDaniel: thanks! 02:35
AlexDaniel not only the source, it is the whole commit :)
.oO( and a better way to fix SourceBaby is to make it use Whateverable :P )
02:36
BenGoldberg s: ((%*ENV<RAKUDO_ERROR_COLOR> = 0),&infix:<.>)[1]
SourceBaby BenGoldberg, Something's wrong: ␤ERR: ===SORRY!=== Error while compiling -e␤Malformed postfix call␤at -e:1␤------> .⏏<EOL>␤
BenGoldberg s: ((BEGIN %*ENV<RAKUDO_ERROR_COLOR> = 0),&infix:<+>)[1] 02:37
SourceBaby BenGoldberg, Sauce is at github.com/rakudo/rakudo/blob/aac9...ic.pm#L186
BenGoldberg s: ((BEGIN %*ENV<RAKUDO_ERROR_COLOR> = 0),&infix:<.>)[1]
SourceBaby BenGoldberg, Something's wrong: ␤ERR: ===SORRY!=== Error while compiling -e␤Malformed postfix call␤at -e:1␤------> .<HERE><EOL>␤
AlexDaniel \o/
SourceBaby: source
SourceBaby AlexDaniel, See: github.com/zoffixznet/perl6-sourceable
AlexDaniel github.com/zoffixznet/perl6-sourceable/pull/5 02:40
color…s
BenGoldberg color xx 0 02:42
cale2 I should just make a stack overflow account for my P6 questions lol 02:43
m: say (1,2,3,4,5).grep( $_ > 5); 02:45
camelia rakudo-moar aac9ef: OUTPUT«Use of uninitialized value of type Any in numeric context␤ in block <unit> at <tmp> line 1␤Cannot use Bool as Matcher with '.grep'. Did you mean to use $_ inside a block?␤ in block <unit> at <tmp> line 1␤␤»
AlexDaniel m: say (1,2,3,4,5).grep(* > 5);
camelia rakudo-moar aac9ef: OUTPUT«()␤»
cale2 how do you get around that?
AlexDaniel or
m: say (1,2,3,4,5).grep({$_ > 5});
camelia rakudo-moar aac9ef: OUTPUT«()␤»
AlexDaniel cale2: so you have to pass a code block. Or WhateverCode 02:46
cale2 AlexDaniel: Because * defaults to Mu instead of Any? or what is going on? 02:47
cale2 m: say (1,2,3,4,5).grep( say $_.WHAT; $_ > 5); 02:48
camelia rakudo-moar aac9ef: OUTPUT«(Any)␤Use of uninitialized value of type Any in numeric context␤ in block <unit> at <tmp> line 1␤Cannot resolve caller grep(List: List, List); none of these signatures match:␤ ($: Bool:D $t, *%_)␤ ($: Mu $t, *%_)␤ in block <unit> at <tm…»
cale2 m: say (1,2,3,4,5).grep( say $_.WHAT);
camelia rakudo-moar aac9ef: OUTPUT«(Any)␤Cannot use Bool as Matcher with '.grep'. Did you mean to use $_ inside a block?␤ in block <unit> at <tmp> line 1␤␤»
geekosaur grep takes a block. you can create one explicitly with braces in which case it will be run with $_ locally set to the item being checked. if you use code with * in it, it gets turned into a closure block (this is WhateverCode) 02:50
geekosaur m: say (* + 5).WHAT 02:50
camelia rakudo-moar aac9ef: OUTPUT«(WhateverCode)␤»
AlexDaniel m: say {$_ + 5}.WHAT 02:51
camelia rakudo-moar aac9ef: OUTPUT«(Block)␤»
fil512 Hi I have a grammar parsing problem 02:57
cale2 Is there an idiomatic way to pop an item from one array and push it onto another?
hi fil512
fil512 hi cale 02:58
i want to create a rule like:
token TOP { ^ [ <comment> | <chunk> ]* $ }
where comment is '\\' \N*
I want <chunk> to be everything else 02:59
almost like a !<comment>
but I can't figure out how to write that
AlexDaniel cale2: @a.push(@b.pop) ? 03:01
fil512 it's almost like I want to do a split on <comment> and then group up the matches and the in-between non-matches 03:02
I could just use split, but eventually I am going to be parsing stuff inside the chunks
would like to use the grammar construct if i can
fil512 if i put .+ in <chunk> it just gobbles up everything 03:06
AlexDaniel fil512: well, you can use something like: chunk { <!comment>+ } 03:07
but if I were you I'd try to rethink what exactly I am trying to achieve :)
cale2 AlexDaniel: for @nursery -> $pair { $pair.grow-up; if $pair.of-age { @nursery.pop: $pair; @playpen.push: $pair; } }
moving from the nursery to the playpen ;) 03:08
I guess I'd need the index maybe...
fil512 <!comment>+ hangs
got into an infinite loop
anyways that won't really work because I'm going to want to parse out stuff in the <chunk> later on anyway
cale2 fil512: May be better to make a stack overflow post that clearly outlines what you expect to happen and what happens 03:09
AlexDaniel fil512: if you gist your example we can figure out why it hangs :) 03:09
cale2 I'm not an expert in grammars
fil512 it just feels like this has got to be a common parsing thing people need to do
parse gunk out, and then also keep all the non-gunk for parsing later
it's a lot like "split"
AlexDaniel keep all the non-gunk for parsing later? Like multi-pass parsing? :S 03:10
fil512: ah, right 03:11
fil512: it's probably { <!comment>+ . }
oops
fil512: it's probably { [<!comment> .]+ }
cale2: what's @nursery.pop: $pair; ? 03:13
how come you pass an argument to pop?
and you're also iterating it… you don't want .pop at all
cale2: you can try something crazy like @playpen.append: gather @nursery .= grep { $pair.grow-up; take $pair if $pair.of-age; not $pair.of-age } 03:16
cale2 AlexDaniel: glot.io/snippets/en41uv8b4w 03:20
if gather/take _removes_ the item from the list, that may work 03:21
AlexDaniel cale2: it's grep that does it 03:21
ah wait! 03:22
categorize?
m: say categorize { $_ %% 2 }, (1, 7, 6, 3, 2);
camelia rakudo-moar aac9ef: OUTPUT«{False => [1 7 3], True => [6 2]}␤»
AlexDaniel cale2: in your case it would be @nursery.categorize: { $pair.of-age } 03:23
m: say categorize { $_ %% 2 ?? ‘alive’ !! ‘dead’ }, (1, 7, 6, 3, 2); 03:24
camelia rakudo-moar aac9ef: OUTPUT«{alive => [6 2], dead => [1 7 3]}␤»
cale2 AlexDaniel: I would only need one array in that case. the issue with that one array is that, every time rabbits had babies, they'd get appended to the current array that was looping. Then the babies would age too quickly
AlexDaniel so what do you need exactly…
if you want to take something and throw away the rest, then use grep
if you want to end up with two piles of something, then use categorize 03:25
(or even .classify)
cale2 m: my %stuff = categorize { $_ %% 2 }, (1, 7, 6, 3, 2); %stuff<False>.pop; say %stuff; 03:30
camelia rakudo-moar aac9ef: OUTPUT«{False => [1 7], True => [6 2]}␤»
cale2 m: my %stuff = categorize { $_ %% 2 }, (1, 7, 6, 3, 2); %stuff<False>.pop; say %stuff.categorize: { $_ %% 2 };
camelia rakudo-moar aac9ef: OUTPUT«Cannot resolve caller Real(Pair: ); none of these signatures match:␤ (Mu:U \v: *%_)␤ in block <unit> at <tmp> line 1␤␤»
cale2 m: my %stuff = categorize { $_ %% 2 }, (1, 7, 6, 3, 2); %stuff<False>.pop; say %stuff.categorize({ $_ %% 2 }); 03:31
camelia rakudo-moar aac9ef: OUTPUT«Cannot resolve caller Real(Pair: ); none of these signatures match:␤ (Mu:U \v: *%_)␤ in block <unit> at <tmp> line 1␤␤»
cale2 m: my %stuff = categorize { $_ %% 2 }, (1, 7, 6, 3, 2); %stuff<False>.pop; say %stuff.values.join.categorize({ $_ %% 2 }); 03:34
camelia rakudo-moar aac9ef: OUTPUT«Cannot convert string to number: trailing characters after number in '036⏏5 21 7' (indicated by ⏏)␤ in block <unit> at <tmp> line 1␤␤Actually thrown at:␤ in block <unit> at <tmp> line 1␤␤»
cale2 m: my %stuff = categorize { $_ %% 2 }, (1, 7, 6, 3, 2); %stuff<False>.pop; say %stuff.values.categorize({ $_ %% 2 });
camelia rakudo-moar aac9ef: OUTPUT«{True => [[6 2] [1 7]]}␤»
BenGoldberg m: my %stuff = categorize { $_ %% 2 }, (1, 7, 6, 3, 2); %stuff<False>.pop; say %stuff.<True>;
camelia rakudo-moar aac9ef: OUTPUT«[6 2]␤»
cale2 m: my %stuff = categorize { $_ %% 2 }, (1, 7, 6, 3, 2); %stuff<False>.pop; say %stuff.values.flatten.categorize({ $_ %% 2 }); 03:35
camelia rakudo-moar aac9ef: OUTPUT«No such method 'flatten' for invocant of type 'Seq'␤ in block <unit> at <tmp> line 1␤␤»
BenGoldberg m: my %stuff = categorize { $_ %% 2 }, (1, 7, 6, 3, 2); %stuff<False>.pop; say %stuff.<True>.categorize: { $_ %% 2 };
camelia rakudo-moar aac9ef: OUTPUT«{True => [6 2]}␤»
BenGoldberg m: my %stuff = categorize { $_ %% 2 }, (1, 7, 6, 3, 2); %stuff<False>.pop; say %stuff.<True>.categorize: { $_ % 3 };
camelia rakudo-moar aac9ef: OUTPUT«{0 => [6], 2 => [2]}␤»
cale2 I need to join together the categories and re-do it 03:36
cale2 How do you round-trip from categories, back to a list, back to categories 03:37
AlexDaniel whyyy
I mean, why categorize when you want to throw it all back 03:38
cale2 AlexDaniel: because the rabbits grow up. things change
cale2 ohhhh, I'll just keep an array and then a separate categorized thing 03:40
two different structures
AlexDaniel I've just realized that I've been living without any sort of recycle bin on my PC for more than 3 years 03:44
just don't delete stuff you don't want to delete, right? :)
cale2 m: my @list = (1,3,1,3,1); my %stuff = categorize { $_ > 2 }, @list; %stuff<True>.map: { * + 2 }; say @list; 03:50
camelia rakudo-moar aac9ef: OUTPUT«5===SORRY!5=== Error while compiling <tmp>␤Malformed double closure; WhateverCode is already a closure without curlies, so either remove the curlies or use valid parameter syntax instead of *␤at <tmp>:1␤------> 3 2 }, @list; %stuff<True>.map: { …»
cale2 m: my @list = (1,3,1,3,1); my %stuff = categorize { $_ > 2 }, @list; %stuff<True>.map: { $_ + 2 }; say @list;
camelia rakudo-moar aac9ef: OUTPUT«[1 3 1 3 1]␤»
cale2 I need categorize to keep object references
cale2 going back to nursery and playpen setup 03:59
m: for (1,2,3,4,5).pairs -> $i, $num { say $i ~ $num }
camelia rakudo-moar aac9ef: OUTPUT«0 11 2␤2 33 4␤Too few positionals passed; expected 2 arguments but got 1␤ in block <unit> at <tmp> line 1␤␤»
cale2 what's with that error? 04:00
[Coke] yawns. 04:04
cale2 [Coke]: why didn't 5 get printed in my example above? 04:05
[Coke] you have 5 items and two params. 04:06
m: for (1,2,3,4,5).pairs -> $i, $num? { say $i ~ $num }
camelia rakudo-moar aac9ef: OUTPUT«0 11 2␤2 33 4␤Use of uninitialized value <element> of type Mu in string context.␤Methods .^name, .perl, .gist, or .say can be used to stringify it to something meaningful.␤ in block at <tmp> line 1␤4 5␤»
cale2 .pairs grabs the index and the item
[Coke] m: for (1,2,3,4,5).pairs -> $i, $num? { say $i ~ $num // 'empty' }
camelia rakudo-moar aac9ef: OUTPUT«0 11 2␤2 33 4␤Use of uninitialized value <element> of type Mu in string context.␤Methods .^name, .perl, .gist, or .say can be used to stringify it to something meaningful.␤ in block at <tmp> line 1␤4 5␤»
[Coke] m: for (1,2,3,4,5).pairs -> $i, $num? { say $i ~ (defined $num ?? $num !! "empty")} 04:07
camelia rakudo-moar aac9ef: OUTPUT«0 1True␤2 3True␤4 5True␤»
[Coke] I am missing something in the def check, but the ? on the parameter is the key bit - makes $num optional.
otherwise it's required, and on the last iteration you wouldn't have had one, so it can't go
cale2 Oh, I think what I want is .kv 04:08
But the docs say that .kv gives an interleaved list. Which is misleading, because it actually will give you pairs if you want it to
[Coke] er.. 04:09
right. 5 interleaved pairs.
cale2 m: say (1,2,3,4,5).kv; for (1,2,3,4,5).kv -> $index, $item { say $index ~ $item }
camelia rakudo-moar aac9ef: OUTPUT«(0 1 1 2 2 3 3 4 4 5)␤01␤12␤23␤34␤45␤»
cale2 the first is just a plain list
m: say (1,2,3,4,5).kv.WHAT; for (1,2,3,4,5).kv -> $index, $item { say $index ~ $item } 04:10
camelia rakudo-moar aac9ef: OUTPUT«(Seq)␤01␤12␤23␤34␤45␤»
cale2 a Seq :)
[Coke] m: for (1,2,3,4,5).pairs.kv > $i, $num { say $i ~ $num}
camelia rakudo-moar aac9ef: OUTPUT«5===SORRY!5=== Error while compiling <tmp>␤Variable '$i' is not declared␤at <tmp>:1␤------> 3for (1,2,3,4,5).pairs.kv > 7⏏5$i, $num { say $i ~ $num}␤»
[Coke] m: for (1,2,3,4,5).pairs.kv -> $i, $num { say $i ~ $num}
camelia rakudo-moar aac9ef: OUTPUT«00 1␤11 2␤22 3␤33 4␤44 5␤»
[Coke] ^^ there you go
not that $num is a $pair, there.
*note
so, first, get the interleaved pairs, then get the kv combo of the array of pairs, then pass the key and the value into the parameters (which now match so don't ahve to be optional) 04:11
cale2 I think the docs should say that even though .kv gives you a Seq, you can still iterate using each index and item as if it gave you a list of pairs
b2gills fil512: you could try token TOP { ^ [ <comment> || <chunk> ]* $ }; token comment { '\\' \N* <eol> }; token chunk { \N* <eol> }; token eol { \n | $ } 04:22
ugexe m: my %h = a => 1, b => 2, c => 3; .say for %h.pairs; # its implied multiple ways 04:33
camelia rakudo-moar aac9ef: OUTPUT«a => 1␤c => 3␤b => 2␤»
cale2 If I see one more "No such method for type Any" when looping over an array of objects, I'm going to lose it 04:49
That is the most infuriating error
samcv ok i'm rewriting my grant proposal in pod since i guess the ian hague grant and general grants have different formats 04:57
samcv anybody know since the ian hague grant wanted hours and dollars per month, but the general grant template just says to "put how much you think the project is worth" 04:58
so they don't want by hour? i'm uncertain
tony-o timotimo: i hadn't maintained threaded - it was meant to get us by until Async stuff was more stable, and that's a reality now :-). I'm more than happy to move it in if desired 06:32
timotimo tony-o: well, that would just be consistent :P 09:28
timotimo Xliff: did you know about "^3 .pick", though? :) 09:34
Xliff: never mind, someone else already pointed it out 09:35
timotimo .tell cale2 i think you were still confused about the kv thing. .kv gives you a flat list, -> $index, $num takes two items from the list on each iteration. .pairs gives you a flat list of Pair objects, and if you -> $a, $b, it'll take two of these pairs on each iteration. you seem to think that -> $a, $b does unpacking. it does not. -> ($a, $b) does unpacking. 09:43
yoleaux timotimo: I'll pass your message to cale2.
mrdside hi. can i put in grammar something like "(\n|EOF)" (new line or end of file)? 09:57
moritz EOF is $
though if you match a $$ (logical end-of-line), that also matches at end-of-file
m: say so "ab\n" ~~ /\n$$/ 09:58
camelia rakudo-moar aac9ef: OUTPUT«False␤»
moritz m: say so "ab\n" ~~ /$$/ 09:58
camelia rakudo-moar aac9ef: OUTPUT«True␤»
moritz m: say so "ab\n" ~~ /$$\n?/
camelia rakudo-moar aac9ef: OUTPUT«True␤»
moritz m: say so "ab\n" ~~ /$$\n/
camelia rakudo-moar aac9ef: OUTPUT«True␤»
moritz m: say so "ab\n" ~~ /$$\n?/
camelia rakudo-moar aac9ef: OUTPUT«True␤»
mrdside moritz: \O/
moritz m: say so "ab" ~~ /$$\n?/
camelia rakudo-moar aac9ef: OUTPUT«True␤»
mrdside moritz: thx
moritz mrdside: / $$ \n? / should be what you want
mrdside moritz: for me "СТАЖ.+?(\n|$)" works perfect 09:59
moritz: grammars solved my problem 10:00
moritz \o/
mrdside: did the fix with regex instead of token help?
mrdside moritz: can i use in "method" for grammars any routines? 10:01
moritz: i need convert string to number 10:02
moritz use +$thestring
inside a code block
mrdside moritz: can i `made` immutable list or array?
moritz: $/.split('=')[0]+thestring 10:03
moritz m: $_ = 'abc1234'; m/(\d+) { make 2 * +$0 }/ and say $/.made
camelia rakudo-moar aac9ef: OUTPUT«2468␤»
moritz mrdside: sure
mrdside moritz: how? nothing about this in tutorial 10:04
moritz mrdside: you can pass any data structure to make 10:05
make (1, 2, 3, 'my mom')
mrdside moritz: ok, this is cast, but i have string in format "\d+\,\d{2}"
moritz mrdside: substitute , by . and then use prefix + 10:06
or $first_number + $second_number / 100
mrdside moritz: $/.split('=')[0].subst(',','.')
mrdside moritz: last question. i need to make an array in `.map: *.made` 10:14
moritz mrdside: have you tried .map(*.made).Array ? 10:15
mrdside moritz: no, maybe it's there some more complex tutorial about grammars? i'm absolutely newby in perl. 10:16
moritz EGONE 10:29
DrForr Egon? Where? 10:54
moritz dust in the wind 10:57
IOninja samcv: I put the total sum and not hours in my proposal. 11:14
arnsholt Bah. Going back to Perl 5 and remembering to put parens around conditions and the like is hard >.< 11:43
DrForr It gets easier, took me a few months to make the switch seamless. 11:44
masak I find it effortless nowadays 11:45
Perl 6 is the odd one out there, actually. well, it and Python
IOninja erm.. 11:50
And Go... and Rust...
El_Che and ruby
arnsholt masak: I don't program in either frequently enough to be able to switch subconciously, unfortunately 12:08
And Smalltalk is no help at all =)
masak Smalltalk a lot lately? 12:17
DrForr Only at parties. 12:18
arnsholt =D
masak: $dayjob.primary-system is implemented in Smalltalk, so yeah
Smalltalk and SQL, for the most part
masak cool 12:20
what implementation of Smalltalk are you using?
arnsholt Visual Smalltalk Enterprise
Last updated in 1999 >.<
masak heh 12:21
arnsholt (One of the major pieces of technical debt in the system, incidentally)
arnsholt Getting the system over to VAST would probably be a big improvement 12:21
(Or one could dream, and say Pharo...) 12:22
masak .oO( a VAST improvement -- too obvious a pun? ) 12:31
arnsholt Yeah, I almost put it in, but it was almost too easy =) 12:32
Pharo being far more advanced would be somewhat less obvious, I guess. Maybe =)
masak .oO( Pharo, Pharo, gotta get down on Pharo... pun, pun, pun... ) :P 12:34
DrForr does a few Pharo shuffles. 12:35
newcoder What's special about perl6? Why will people use perl6 instead of perl5? 13:20
Will perl5 be obsolete?
DrForr You don't have to use it "instead of", you can use both perl 5 and perl 6, they coexist side-by-side. 13:26
And no, Perl 5 isn't going away for a long time. 13:27
newcoder DrForr: 'side by side' how?
DrForr: Either you have to install perl5 or perl6
DrForr No. One is 'perl', one is 'perl6'. 13:28
newcoder You can't write perl6 program with perl/perl5
DrForr Yes, you can, with Inline::Perl6.
And you can use Perl 5 from Perl 6 with Inline::Perl5 (in perl 6.) 13:30
timotimo well, i'm sure they learned something 13:33
DrForr They're over on freenode #perl since they lost the argument here.
timotimo it didnt seem like they were arguing? 13:35
DrForr True, they were more telling us how perl 6 works without having any idea. 13:38
IOninja huh?
IOninja Seems a legitimate question to ask when the two languages are named "Perl" and "Perl 6" 13:38
timotimo yeah 13:39
and we told them and all is well
IOninja Saying they're two different languages clarifies any confusion about obsolecense, side-by-sideness, or using one from the other
DrForr Yeah, it is. That's why I said they can coexist happily.
timotimo it seemed like a "obsoleting perl5 is dumb" - "thats why we dont do that" kind of deal 13:41
i.e. "hey the thing youre not doing is dumb!" 13:42
DrForr Closer to "The thing I say you're doing because of the name..." whereas my response was "slow down, that's not happening..." 13:43
cale2 I think "No such method 'of-age' for invocant of type 'Any'" needs to be changed 13:44
yoleaux 09:43Z <timotimo> cale2: i think you were still confused about the kv thing. .kv gives you a flat list, -> $index, $num takes two items from the list on each iteration. .pairs gives you a flat list of Pair objects, and if you -> $a, $b, it'll take two of these pairs on each iteration. you seem to think that -> $a, $b does unpacking. it does not. -> ($a, $b) does unpacking.
cale2 when you loop through an array of objects, and you try to call methods on the objects. It's 100% LTA right now 13:45
moritz cale2: what do you want the error message to say? 13:45
undefined is not a function? :-) 13:46
cale2 moritz: Perhaps something related to the loop itself. I can't say given that I still don't know what the error is pointing to
There's literally no way to troubleshoot this runtime error given that information
jnthn Does your code call a method .of-age?
cale2 The program was running just fine, then at some point, it throws that. 13:47
Is it because the the array became empty and it tried to call a method on an empty object?
moritz no 13:48
the array contains an Any
moritz which you could catch earlier if you gave the loop param a type constriant 13:48
*constraint
for @array -> MyType $x { ... }
then it'll tell you that it got an Any but expected a MyType
cale2 Any may as well be a Null 13:49
It's probably because the .kv method is not giving me the index and the object 13:50
it's probably giving me the index and another index or something like that
timotimo m: say <foo bar baz quux>.jv.perl 13:51
camelia rakudo-moar aac9ef: OUTPUT«No such method 'jv' for invocant of type 'List'␤ in block <unit> at <tmp> line 1␤␤»
timotimo grr
m: say <foo bar baz quux>.kv.perl
camelia rakudo-moar aac9ef: OUTPUT«(0, "foo", 1, "bar", 2, "baz", 3, "quux").Seq␤»
timotimo it gives you an index then an obj then an index etc
so you iterate with two vars
cale2 I wish it were true man 13:52
timotimo show your code please
timotimo test 13:55
connection is breaking up...
jnthn cale2: Did you try `say @the-thing-you're-looping-over.kv.perl` or some such?
To see what's actually there?
cale2 glot.io/snippets/en4jdfyvyg
timotimo urgh this ssh app wont let me click the link nor copy the alternative buffer 13:57
cale2 try this link glot.io/snippets/en4jdfyvyg/raw
timotimo k appointment. l8r! 13:58
perlpilot good morning 14:00
cale2: What do you think @nursery[$i]:delete does? 14:02
cale2: That's how you're getting Any in your @nursery btw :)
IOninja DrForr: do people often come to #perl with questions about or related to Perl 6?
DrForr Not often, but it does happen. 14:03
perlpilot and usually they get redirected here.
IOninja cale2: FWIW you can use safecall .? to avoid that error and short-curcuit outta the loop (or don't loop over holes in the first place) 14:04
m: my @a = ^10; @a[5]:delete; .say for @a
camelia rakudo-moar aac9ef: OUTPUT«0␤1␤2␤3␤4␤(Any)␤6␤7␤8␤9␤»
IOninja nm 14:05
cale2 I need to remove the selected item from the array and place that same item in the other array
there's no way to do it other than that...
IOninja Well, there's splice()
wonder how well that place with looping... 14:06
cale2 splice doesn't take a reference to the object, it only copies it
I think...
perlpilot eh? 14:07
IOninja references? wat?
timotimo doesnt it return the stuff it took out?
jnthn Splice works in-place on the array it's called on
IOninja m: my @b; my @a = ^10; for @a.kv -> $k, $v { @b.append: @a.splice: $k, 1; $v.say }; say @b
camelia rakudo-moar aac9ef: OUTPUT«0␤2␤4␤6␤8␤[0 2 4 6 8]␤»
IOninja m: my @b; my @a = ^10; for @a.kv -> $k, $v { @b.append: @a.splice: $k, 1 if $k == 5\; $v.say }; say @b 14:08
camelia rakudo-moar aac9ef: OUTPUT«5===SORRY!5=== Error while compiling <tmp>␤Confused␤at <tmp>:1␤------> 3 @b.append: @a.splice: $k, 1 if $k == 5\7⏏5; $v.say }; say @b␤»
IOninja m: my @b; my @a = ^10; for @a.kv -> $k, $v { @b.append: @a.splice: $k, 1 if $k == 5; $v.say }; say @b
camelia rakudo-moar aac9ef: OUTPUT«0␤1␤2␤3␤4␤5␤7␤8␤9␤[5]␤»
IOninja seems to work well
timotimo m: say <a b c d e f>.splice(3,2,0)
camelia rakudo-moar aac9ef: OUTPUT«No such method 'splice' for invocant of type 'List'␤ in block <unit> at <tmp> line 1␤␤»
cale2 i'll try it now
timotimo ah
IOninja only Arrays
timotimo m: say [<a b c d e f>].splice(3,2,0)
camelia rakudo-moar aac9ef: OUTPUT«[d e]␤»
IOninja and Buf
timotimo returns what it takes out
which you can then append 14:09
m: say [<a b c d e f>].splice(3,1,0).perl
camelia rakudo-moar aac9ef: OUTPUT«["d"]␤»
timotimo one element list if only 1 removed
cale2 it worked! now to fix the broken logic
IOninja \o/
cale2 Adding type annotations to the arrays didn't work though. 14:11
IOninja Hm, my thing did'nt work right tho. Why does @b have 5 yet the chopped thing was a 6 14:12
IOninja m: my @b; my @a = ^10; for @a.kv -> $k, $v { @b.append: @a.splice: $k+1, 1 if $k == 5; $v.say }; say @b 14:12
camelia rakudo-moar aac9ef: OUTPUT«0␤1␤2␤3␤4␤5␤7␤8␤9␤[6]␤»
IOninja ok...
That's weird
timotimo well 14:13
the k and v are set from "for"
those dont change from under your feet
cale2 it's because of this line: @playpen.push: @nursery.splice($i, 1);
I had to flatten it to: @playpen.push: |@nursery.splice($i, 1);
perlpilot cale2: or use append instead of push
IOninja timotimo: right, but the $v.say produces exact same output, even though the code changed to slice the NEXT element instead of the sliced the first time :/ 14:14
cale2 right!
IOninja m: my @b; my @a = ^10; for @a.kv -> $k, $v { "k: $k".say; @b.append: @a.splice: $k+1, 1 if $k == 5; $v.say }; say @b 14:15
camelia rakudo-moar aac9ef: OUTPUT«k: 0␤0␤k: 1␤1␤k: 2␤2␤k: 3␤3␤k: 4␤4␤k: 5␤5␤k: 6␤7␤k: 7␤8␤k: 8␤9␤[6]␤»
perlpilot iterating over something you're modifying is fraught 14:16
IOninja Yeah, looks like that's the case
cale2 to be honest I'm re-writing it in haskell and the logic is more clear :S 14:18
perlpilot cale2: I'd say that's more a function of you than the language.
IOninja m: my @a = "a".."c"; for @a.kv -> $k, $v { say "Cut({@a.splice: $k, 1})" if $k == 1; $v.say };
camelia rakudo-moar aac9ef: OUTPUT«a␤Cut(b)␤b␤»
cale2 perlpilot: Perhaps, but doesn't logic affect how we express things?
IOninja heh 14:19
cale2 sorry *language
perlpilot cale2: yeah ... assuming you know the language well enough to be appropriately expressive :-)
IOninja You've been saying language X is clearer than perl 6 for months here now :)
IOninja m: my @a = "a".."d"; for @a.kv -> $k, $v { $v.say; say "Cut({@a.splice: $k, 1})" if $k == 1; }; 14:20
camelia rakudo-moar aac9ef: OUTPUT«a␤b␤Cut(b)␤d␤»
IOninja m: my @a = "a".."d"; for @a.kv -> $k, $v { $v.say; say "Cut({@a.splice: $k+1, 1})" if $k == 1; };
camelia rakudo-moar aac9ef: OUTPUT«a␤b␤Cut(c)␤d␤»
jnthn I'm quite sure the haskell solution doesn't involve mutating something that's being iterated over. :P
perlpilot heh, indeed
IOninja tries to wrap head around those last two. 14:21
Success!
cale2 That may be the case, but I'm writing it in the traditional OO method, no?
the update logic is held inside the object. I'm just sending it a message
jnthn I don't think I'd writing code the mutates something I'm iterating over in any style. :-) 14:22
*I'd write
IOninja The in first, we cut "b" and "c" is missing cause it moved to idx 1 and so idx 2 is d; and in the second one we cut one further in line so the shortage doesn't make indexing weird.
Now can I sleep peacefully.
IOninja contemplates splicing up a fibonacci sequence 14:24
IOninja eh, too hard 14:25
perlpilot This reminds me of some code I was looking at yesterday. The gist of it was my @a = @other[0..2]; if (some_condition) { @a[2] = @a[3]; pop @a; } It took me a while to figure out what was really going on in that if statement
(I had to remove all of the extraneous code first) 14:26
IOninja m: my @a = 1 … *; for @a.kv -> $k, $v { @a.splice: $k+1, 1 if $k %% 2; $v.say; last if $++ > 20}
camelia rakudo-moar aac9ef: OUTPUT«1␤3␤4␤6␤7␤9␤10␤12␤13␤15␤16␤18␤19␤21␤22␤24␤25␤27␤28␤30␤31␤33␤»
IOninja cool!
IOninja It's an evenly odd sequence :P 14:27
perlpilot rotor would be so much simpler and easier to grok. :)
IOninja perlpilot: I'd like to see that done with rotor 14:28
perlpilot It would need a 0 in the front that gets thrown away 14:29
IOninja OK
m: my @a = 0 … *; say @a.rotor(2 => 1).flat.[1..20] 14:30
camelia rakudo-moar aac9ef: OUTPUT«(1 3 4 6 7 9 10 12 13 15 16 18 19 21 22 24 25 27 28 30)␤»
IOninja m: my @a = 0 … *; say @a.rotor(2 => 1).flat.[1..20] eqv my @b = 1 … *; (do for @b.kv -> $k, $v { @b.splice: $k+1, 1 if $k %% 2; $v })[^20] 14:31
oops
camelia rakudo-moar aac9ef: OUTPUT«(timeout)False␤» 14:32
IOninja kinda expected it to be lazy
cale2 jnthn: How would you update an array of objects without iterating over them?
perlpilot cale2: you wouldn't *modify* them in the midst of iteration. You'd still iterate them in some fashion
IOninja m: (do loop { rand })[^10].say 14:33
camelia rakudo-moar aac9ef: OUTPUT«(0.535942470218007 0.432600492498629 0.141581615585711 0.00287844879814243 0.785823253284184 0.548317367701326 0.276469376450457 0.903177553464192 0.95945752288883 0.96783026971298)␤»
IOninja m: (do for ^Inf { rand })[^10].say
cale2 I agree, my solution so far is bad because of that. rabbits grow up too fast. That's why I tried to prepend them to the list so they wouldn't be immediately modified.
but prepend broke stuff
IOninja So loop {} is lazy by for ain't? :/
camelia rakudo-moar aac9ef: OUTPUT«(timeout)» 14:34
perlpilot cale2: my @next_gen = @curr_gen.grep(...); ... @curr_gen = @next_gen; # you could do something like this
jnthn cale2: I'd probably write it somethin glike this: glot.io/snippets/en4khuprse 14:36
*something like
Which gets rid of the need for indexes at all 14:38
perlpilot or you could use classify if that fits your brain better 14:39
jnthn I thought about classify, but the .grow-up at the end of the loop made it come out worse.
perlpilot some people balk at Perl because it gives you so many options. I think that's one of the things that makes it so beautiful. You can explore different ways of doing things and expand your brain-power a little bit in the process. 14:43
perlpilot (That's the dividing line between Perl and Python even ... IF you think TMTOWTDI is a blessing, you're a Perl person. If you think TMTOWTDI is a curse, you're a Python person) 14:45
IOninja dislikes Python due to its whitespace-indents rather than lack of TMTOWTDI
moritz python doesn't really lack timtowtdi 14:46
they just pretend that
IOninja hehe 14:46
cale2 I think for non-geniuses the freedom can be a curse, yeah 14:47
For a normal person to understand why one design pattern is better than another, you need to have a strong understanding of the magic under the hood
cale2 for @nursery -> $pair { push $pair.of-age ?? @playpen !! @growing, $pair; $pair.grow-up; } 14:49
does that `push` function push on to the @nursery?
jnthn No
First argument is what array to push to 14:50
jnthn You could write it ($pair.of-age ?? @playpen !! @growing).push: $pair 14:50
But putting the push up front felt clearer to me
IOninja hah 14:52
So only geniuses are free?
dat logic
IOninja Accidentally left perl6 -e 'm: (do for ^Inf { rand })[^10].say' running in a terminal... Chewed up 3.7GB before I realized what was making my box lag 14:54
why is it not lazy?
Even m: (lazy do for ^Inf { rand })[^10].say is not lazy :\
cale2 IOninja: only geniuses can write good code in a completely free language 14:59
IOninja [citation needed] 15:08
English is even freer than Perl 6... am I to assume anyone who can cobble up a coherent sentece is a genius :) 15:09
huf_ coherent is fairly easy, elegant is much harder :) 15:11
tony-o timotimo: transfered H:S:T 15:12
IOninja cale2: and I assume you can, of course? :)
jnthn I've never worked in a programming language where I didn't come across poorly thought out or poorly factored code. I have found that in some languages that tend to lean towards the more verbose side, code can more easily *look* good because there just aren't many ways to look, but zoom out enough and it's still structurally rotten.
I've also seen good examples of code in all of those. 15:14
But I think the goodness was more in good and well-expressed solution to problem. 15:15
perlpilot jnthn: that's been my experience as well. 15:33
cale2 glot.io/snippets/en4m83hbra 15:39
in case anyone is curious
IOninja heh 15:51
IOninja cale2: well, that looks like gibberish to me 'cause I never seen Haskell code. So your whole Language X is better/clearer/consicer than Perl 6 feels to me to be just your extra experience with those languages than with Perl 6. 15:52
sena_kun >Haskell is clearer 15:54
lol
IOninja Well, I'm also forgetting I'm not a genius and apparently only geniuses can grok awesome codes. 15:55
cale2 IOninja: I would never say haskell is better than perl6. You could probably write a perl6 version of the program that looks just like the haskell. But the perl6 language gets me lost in the weeds with all the different options. I'm not that good of a programmer unfortunately
perlpilot cale2: You could have written the Perl in much the same way as the Haskell btw.
perlpilot cale2: and Haskell *is* better than Perl ... for some problems. There is no "universal better" ;-) 15:56
TMTOWTDI includes not using Perl if that's what works :) 15:57
IOninja cale2: from your questions and statements, I'd guess you get lost because you try to find the bestest "way" to do something; like trying to stick types all over the places. There is no best.
mspo TMTOWTDI? 15:58
oh yeah
cale2 IOninja: You're right! If I'm writing OO, I want it to be brilliantly OO. If I'm writing FP, I want it to be brilliant FP
IOninja :)
sena_kun Like hell haskell is clearer when you have a monsterous monad transformer inside of a core and you need to keep track of tons of lifts and modules and stuff like functional dependencies, database-related DSLs and everything else.
perlpilot sena_kun: you sound like you've used Haskell before ;) 15:59
cale2 That's why we should embed haskell inside of other languages just to handle domain logic :)
perlpilot cale2: Haskell is already embedded in Perl 6 :) 16:00
It's just embedded really really deep.
b2gills cale2: why did you use filter(grep) and map in Haskell, but you didn't in Perl 6?
sena_kun perlpilot, I'm using right now in couple of my projects. No, I don't hate it, I love it. :) But when I saw "haskell is clearer than X" I shrugged. :) 16:01
cale2 b2gills: I did. I was using grep: $pair.of-age
sena_kun: I find more and more that haskell really is for bad programmers though. I'm not smart enough to keep everything in my own head. Easier to write it down the second it comes to me. Hence all of my types everywhere in P6 16:02
perlpilot cale2: from my perspective, what you did was try one programming paradigm in Haskell and another programming paradigm in Perl 6 and blame the language for your choices.
timotimo you shrugged? more like you snapped! :D
sena_kun it can be. (: 16:03
b2gills A lot of features in Perl 6 are a direct consequence of the first implementation being built in Haskell 16:04
perlpilot cale2: I think I have to start a quote file for you now. "haskell really is for bad programmers" is just too good :)
sena_kun cale2, every language is for bad, for good, for ugly programmers too.
pyrimidine not sure if anyone else is on the o'reilly 'deal of the day' list, but 'Think Perl 6' is today's special :)
sena_kun many of such bad programmers are professors for some reason. I think there is some connection between! It is conspiracy! 16:05
pyrimidine Not sure if this link will work: shop.oreilly.com/product/0636920065...erl_6_deal 16:06
IOninja pyrimidine: link just leads me to the book... no deal of the days 16:08
pyrimidine add to cart, it's applied after
perlpilot I didn't realize that book was 475 pages.
IOninja If I go to deal of the day page, I get "Learning React Native" and "Tableau 10 Business Intelligence Cookbook" but no Perl 6 16:09
Oh yeah. If you go to cart it knocks off about $20
pyrimidine yup, it's 50% off 16:10
IOninja Guess I should buy it.
pyrimidine It's a early release, so it's not complete yet
but you'll get all the updates
[Coke] stares at chdir $?FILE.IO.dirname.IO.dirname (docs/xt/example*) 16:11
er, github.com/perl6/doc/blob/master/x...ation.t#L7
sena_kun [Coke], to find out relative path, isn't it?
IOninja pyrimidine: I guess it'd help me learn Perl 6 :) 16:12
huggable: FindBin
huggable IOninja, use lib $*PROGRAM.parent.parent.child("lib").Str; # finds lib/ for scripts in bin/ or t/
pyrimidine IOninja: heh. I don't think that's a problem :)
sena_kun [Coke], stupid me wasn't able to find a better way to do so. But it should be rewritten anyway.
IOninja m: dd [ $?FILE.IO.dirname.IO.dirname ]; dd [ $?FILE.IO.dirname ] 16:13
camelia rakudo-moar aac9ef: OUTPUT«["/"]␤["/tmp"]␤»
IOninja m: dd $?FILE.parent 16:14
camelia rakudo-moar aac9ef: OUTPUT«No such method 'parent' for invocant of type 'Str'␤ in block <unit> at <tmp> line 1␤␤»
IOninja
.oO( why is it a Str :/ )
[Coke] wouldn't say stupid. I just couldn't tell what it was trying to do.
at first glance, it seemed like a no-op
IOninja Yeah, to me too
m: dd $?FILE.IO.parent 16:15
camelia rakudo-moar aac9ef: OUTPUT«"/tmp".IO(:SPEC(IO::Spec::Unix),:CWD("/home/camelia"))␤»
IOninja [Coke]: do people ever blow the deadline of the grant delivery they promised and is it a big deal? 16:17
perlpilot IOninja: are you already planning to miss your deadline? 16:19
IOninja perlpilot: nope 16:21
IOninja re-reads the grant to see what was promised
perlpilot IOninja: also, IANAGM but I would guess that since it's paid on completion, it's not that big a deal if you miss a deadline, but communication with your GM is paramount to keeping the grant active until it is complete. 16:22
IOninja IANAGM? 16:23
perlpilot i am not a grant manager 16:24
IOninja lol
pyrimidine IOninja: I recall something happening a few years back re: a grant that wasn't (or couldn't be) completed. I think they are pretty flexible though
gfldex also: i am not a grand mage
perlpilot pyrimidine: I can remember at least 2 grants that extended well past their deadlines. I don't know if they ever paid out or were simply dropped. 16:26
IOninja I still think I'll be able to finish I intend to finish before end of March, as promised, but I think my Feb report will be sparser than what it should be if you follow my breakdown of deliverables. I guess I'm worrying prematurely.
perlpilot but again, I would imagine that communication is super important in this situation 16:27
IOninja: Have I mentioned that you should communicate often with your grant manager? ;)
IOninja [Coke] is my grant manager :)
mspo is perl6 doing GSoC this year? 16:31
or moar
moritz it doesn't look like anybody has stepped up and done the necessary work 16:33
perlpilot If TPF or the like haven't applied, they missed the deadline. Org application deadline was Feb 9
timotimo oof
i seem to recall trouble 2 years ago or so lefzt perlers bitter about gsoc 16:34
am i misremembering?
perlpilot TPF applied and was rejected because they were looking for "newer orgs" at one point.
(they == google)
timotimo pff, age-ism 16:35
IOninja perl's not cool enough!
mspo yeah they rejected netbsd for 2-3 years for that
but then last year they let us back in
so you have to keep at it
I'm not involved this year so we'll see 16:36
[Coke] (grants) as was said, you only get paid upon completion. There are rules about lack of communication == giving up your grant. 16:47
IOninja Cool. 16:48
mspo we require contract "renewals" per year when paying "for work" instead of "for time"
IOninja [Coke]: My Feb report will be ready by end of day Feb 27th. It's my last off-work day of the month. 16:50
[Coke] IOninja: danke. 17:00
timotimo that'll be fab for feb 17:01
mspo I could share some language if you want to use a similar setup
cale2 perlpilot: I don't see how this is a bad quote "haskell really is for bad programmers". At least in simple levels (before you get to higher level stuff, which you don't necessarily have to right away) it is true. It holds your hand and forces you to answer "what does this function do, now this one, now what is this data" building up programs from small pieces 17:15
I think declarative is easier than imperative, but maybe that's just me. Easier to say "what does it do" rather than "how does it do it" 17:16
One day I'll write a perl6 slang that adds type annotations on the line above the subroutine lol
b2gills you can already do that 17:17
m: sub foo ( Str --> Str ){...}; sub foo ( $a ) { $a x 2 }; say foo 'ab'
camelia rakudo-moar aac9ef: OUTPUT«abab␤»
b2gills m: sub foo ( Str --> Str ){...}; sub foo ( $a ) { $a x 2 }; say foo 5 17:18
camelia rakudo-moar aac9ef: OUTPUT«55␤»
IOninja heh
m: sub foo ( Str --> Str ){...}; sub foo ( $a ) { $a x 2 }; say &foo.candidates 17:19
camelia rakudo-moar aac9ef: OUTPUT«(sub foo ($a) { #`(Sub|68052176) ... })␤»
faraco m: say '"Braile" or "Dancer2" Perl 5' 17:20
camelia rakudo-moar aac9ef: OUTPUT«"Braile" or "Dancer2" Perl 5␤»
b2gills I can't believe no one complained about that not working (failing) correctly. Actually ... yes I can. 17:22
IOninja m: multi foo ( Str --> Str ){...}; multi foo ( $a ) { $a x 2 }; say foo 5
camelia rakudo-moar aac9ef: OUTPUT«55␤»
IOninja m: multi foo ( Str --> Str ){...}; multi foo ( $a ) { $a x 2 }; say foo "x"
camelia rakudo-moar aac9ef: OUTPUT«Stub code executed␤ in sub foo at <tmp> line 1␤ in block <unit> at <tmp> line 1␤␤Actually thrown at:␤ in block <unit> at <tmp> line 1␤␤»
IOninja :D
timotimo there's a syntax where the return value goes before the sub name 17:25
it'd also allow a newline in between 17:26
i never wrote it like that, though
timotimo perhaps it only works with "my ... sub"? 17:26
IOninja m: proto foo (Str --> Str) {*}; multi foo ($x) { $x x 2 }; foo "x" 17:29
camelia ( no output )
IOninja m: proto foo (Str --> Str) {*}; multi foo ($x) { $x x 2 }; foo 42
camelia rakudo-moar aac9ef: OUTPUT«5===SORRY!5=== Error while compiling <tmp>␤Calling foo(Int) will never work with proto signature (Str --> Str)␤at <tmp>:1␤------> 3-> Str) {*}; multi foo ($x) { $x x 2 }; 7⏏5foo 42␤»
IOninja m: proto foo (Str --> Str) {*}; multi foo ($x) { ($x x 2).Int }; foo "42"
camelia ( no output )
IOninja m: proto foo (Str --> Str) {*}; multi foo ($x) { ($x x 2).Int }; say foo "42"
camelia rakudo-moar aac9ef: OUTPUT«4242␤»
IOninja aww
timotimo m: my Int␤sub test() { 99 }; say test 17:32
camelia rakudo-moar aac9ef: OUTPUT«99␤»
timotimo ^- that's how you get at least the return type into the line above the sub itself
IOninja m: my Int␤sub test() { "x" }; say test 17:33
camelia rakudo-moar aac9ef: OUTPUT«Type check failed for return value; expected Int but got Str ("x")␤ in sub test at <tmp> line 2␤ in block <unit> at <tmp> line 2␤␤»
IOninja heh cool
m: my int sub test() { 42 }; say test
camelia rakudo-moar aac9ef: OUTPUT«42␤»
IOninja m: my 42 sub test() { 42 }; say test 17:34
camelia rakudo-moar aac9ef: OUTPUT«5===SORRY!5=== Error while compiling <tmp>␤Malformed my␤at <tmp>:1␤------> 3my7⏏5 42 sub test() { 42 }; say test␤»
IOninja m: my Nil sub test() { 42 }; say test
camelia rakudo-moar aac9ef: OUTPUT«Type check failed for return value; expected Nil but got Int (42)␤ in sub test at <tmp> line 1␤ in block <unit> at <tmp> line 1␤␤»
timotimo heh.
IOninja is there some sort of hasattr? Looking for non-explosive version of nqp::getattr_i that just gives me 0 or something if the attr doesn't exist 17:37
and sticking a `try` on it makes the operation twice slower... 17:38
IOninja huh weird: 17:40
m: use nqp; sub x {}; for ^100_000 { $ = nqp::istype(&x, Routine) && nqp::getattr_i(&x, Routine, q|$!yada|) }; say now - INIT now
camelia rakudo-moar aac9ef: OUTPUT«0.0783406␤»
IOninja m: use nqp; my &x; for ^100_000 { $ = nqp::istype(&x, Routine) && nqp::getattr_i(&x, Routine, q|$!yada|) }; say now - INIT now
camelia rakudo-moar aac9ef: OUTPUT«0.1643105␤»
IOninja When it *is* a routine it does both istype and getattr but that's twice as fast as just istype on an Any? 17:41
timotimo maybe it can only type-specialize in one case 17:42
IOninja Ah
m: use nqp; constant &x = Any; for ^100_000 { $ = nqp::istype(&x, Routine) && nqp::getattr_i(&x, Routine, q|$!yada|) }; say now - INIT now 17:43
camelia rakudo-moar aac9ef: OUTPUT«0.0674589␤»
IOninja Oh well, I'll use that 17:43
IOninja Wonder if "redeclaration of routine" looks weird: gist.github.com/zoffixznet/a6aaf3f...9317feea14 17:48
since my &x is not a routine, is it?
m: my &x; say &x.^name
camelia rakudo-moar aac9ef: OUTPUT«Callable␤»
IOninja close enuf :P
IOninja hm 17:49
IOninja m: my &x; multi x($) {} 17:49
camelia rakudo-moar aac9ef: OUTPUT«5===SORRY!5=== Error while compiling <tmp>␤Redeclaration of routine 'x' (did you mean to declare a multi-sub?)␤at <tmp>:1␤------> 3my &x; multi x($) {}7⏏5<EOL>␤»
IOninja ok, at least that's not new :)
m: my &x; multi sub x ($) {}
camelia rakudo-moar aac9ef: OUTPUT«5===SORRY!5=== Error while compiling <tmp>␤Redeclaration of routine 'x' (did you mean to declare a multi-sub?)␤at <tmp>:1␤------> 3my &x; multi sub x ($) {}7⏏5<EOL>␤»
IOninja I am declaring multi sub, computer! 17:50
moritz but my &x isn't a proto 17:52
IOninja heh, looks like someone had a lot of fun writing roast. grep -FR 'WTF' shows some very strange tests :P 17:54
IOninja m: class { method x {}; multi method x {} } 17:55
camelia rakudo-moar aac9ef: OUTPUT«5===SORRY!5=== Error while compiling <tmp>␤Cannot have a multi candidate for 'x' when an only method is also in the package '<anon|60568608>'␤at <tmp>:1␤»
IOninja moritz: ^ but in the method case it actually tells me what's up. 17:56
moritz IOninja: yes, that's a better error message 17:57
m: sub x() { }; multi x() { }
camelia rakudo-moar aac9ef: OUTPUT«5===SORRY!5=== Error while compiling <tmp>␤Redeclaration of routine 'x' (did you mean to declare a multi-sub?)␤at <tmp>:1␤------> 3sub x() { }; multi x() { }7⏏5<EOL>␤»
IOninja heh and the author of the funny test is... jnthn :) github.com/perl6/roast/commit/0df5...004063c4d6 18:00
jnthn: though for some reason github tells me it's an "Unrecognized author"
jdv79 how does one ref an anon block inside itself?
IOninja &?BLOCK 18:01
gfldex he clearly doesn't get the recognition he should get
ilmari From: jnthn <jnthn@c213334d-75ef-0310-aa23-eaa082d1ae64> # someone hasn't configured git user.{email,name} 18:02
oh, svn...
moritz it was a git-svn import
ilmari someone didn't configure git-svn properly
svn.authorsfile 18:03
moritz someone didn't configure git-svn at all
our svn was dying, and I was glad that I managed to update my older git-svn clone at all to newest state 18:04
IOninja m: { say $++ and $++ < 10 and &?BLOCK() } 18:08
camelia rakudo-moar aac9ef: OUTPUT«0␤1␤2␤3␤4␤5␤6␤7␤8␤9␤10␤»
summan Perl 6 is awesome, amazing great language. But we need MOOC on it. Moreover it needs to also focus on big data, analytics and machine learning to succeed. !!! 18:09
Perl 6 is awesome, amazing great language. But we need MOOC on it. Moreover it needs to also focus on big data, analytics and machine learning to succeed. 18:10
timotimo cool, you're going to build a course for perl6? 18:11
moritz summan: thank you for volunteering!
summan timotimo Would have done. But I am no expert programmer, just a novice. For people like us courses on Perl 6 would be great on platforms like www.coursera.org or edx.org 18:13
Perl foundation can do it.
DrForr The Perl Foundation is made of people. Programming languages don't write themselves :) 18:14
[Coke] You may be over-estimating the amount of time available by people already volunteering at TPF. 18:15
seems like the sort of thing that'd be amenable to a grant. 18:16
summan Perl 6 design is great. Though I use scientific stack in Python and R for statistics, I was just going through this perl6intro.com/. I found Perl 6 to be an elegant language. So I just wanted to learn it. So a course on it woud be justified. I myself learned Python and R from www.coursera.org and www.edx.org. 18:18
IOninja Seems both sites are for courses offered for free by universities...
DrForr There's a few tutorials on Safari and a recent webcast is going up soon. 18:19
IOninja wow lots of translations for perl6intro.com
+ a ton of books 18:20
I lost track of how many there are coming out this year
uuuh... Well now I know why so many people are using dev commits with rakudobrew: perl6intro.com/#_installing_perl_6 18:21
.seen hankache 18:22
yoleaux I saw hankache 28 Jan 2017 12:15Z in #perl6: <hankache> windows users, what terminal do you use? Any alternative to cmd.exe?
summan Reaching to community of people should be of priority I guess. PyData and PyCon are examples in python + a lot of courses. A beginner definitely would delve into where the resources for learning are plenty. Its a simple rule!! 18:23
mst summan: "perl foundation" can't do it. you need a person to write it.
perl foundation grants can help fund that person 18:24
but first you need to find the person
DrForr Or be that person.
IOninja .tell hankache Your perl6intro site tells users to use untested development commits by building them with rakudobrew: perl6intro.com/#_installing_perl_6 We generally avoid suggesting rakudobrew since users aren't skilled enough to fix any issues with it and users should be using properly tested user releases, not whatever commit ended up being HEAD when they build perl6
yoleaux IOninja: I'll pass your message to hankache.
IOninja summan: what a coincidence. There's an article written just for that topic: perl6.party/post/Open-Source-Projec...et-Reality 18:25
summan IOninja Oh yeah, nice to see :) 18:26
IOninja summan: well, nothing's changed from when the first time you were telling us to write MOOC courses followed by a bunch of exclamation marks. 18:27
summan: we're all busy with stuff we feel needs doing. If you feel MOOC stuff needs to be done. Do it.
summan: "But I am no expert programmer, just a novice." You don't need to be an expert. 18:28
And in some respects it's better that you're not. 18:29
summan: write the course. Let experts review it for mistakes. You don't need an expert to write it.
DrForr And as I like to point out, if you're *not* an expert it's actually better, as you're learning and can take notes as you go along.
I'd be more than happy to review whatever you do and offer feedback, I've given Perl 6 training worldwide :) 18:30
summan DrForr Will try my best !! :) 18:33
DrForr It can be something as simple as: "I got frustrated trying to figure out what X means. I looked all over and couldn't find docs." 18:34
cale2 gitbooks > MOOCs 18:38
something like 70% of MOOCs people never even finish
gitbooks are lightweight, no commitment required, no login required.
mst different people prefer learning from different media 18:39
so sweeping X > Y statements are generally bollocks
IOninja m: say 42 > 5
camelia rakudo-moar aac9ef: OUTPUT«True␤»
cale2 mst: For a group of people that have minimal time, with the goal of creating a lot of content, gitbooks are better than MOOCs. 18:40
cale2 From a creator perspective, MOOCs would require at least double the effort. But if someone wants to, that would be cool! 18:40
IOninja m: say quietly not X > not Cool
camelia rakudo-moar aac9ef: OUTPUT«True␤»
DrForr cale2: I think you two are in violent agreement :) 18:41
IOninja m
m: say quietly Perl == Cool
camelia rakudo-moar aac9ef: OUTPUT«True␤»
cale2 I mentioned yesterday that I would love to translate some Golang sources to Perl6. But I'm not sure if Perl6 web dev idioms are finished yet 18:42
DrForr cale2: Great opportunity to make your own! 18:42
cale2 DrForr: I'm a bad programmer, remember? :)
mst cale2: well done on completely missing the point
cale2 I strictly stick to ruining documentation instead of ruining actual code 18:43
DrForr cale2: No, but that just means you're going to be a more effective canary than most would be :)
mst cale2: I'm not telling you where to spend your time; it's your time - but there are people who will learn better from one or the other so 'X > Y' is still silly 18:44
cale2 mst: 😘
[Coke] I don't particular find "feel free" to be helpful in this case; no, there isn't a clear perl 6 lib to use like there is in p5 yet. I ran up against this in parrot back in the day: sometimes you just want to be a user, you don't want to shave yaks all the way down. 18:45
mst cale2: also, for example, I can think of plenty of people for whom MOOCs' having a specific timeline and etc. helps them motivate themselves, so ranking "no commitment required" as an advantage is an error 18:45
note, I hate MOOCs and would much prefer to learn from a gitbook
timotimo i'd love to have perl6 shouted into my head by a mst :3
IOninja :) 18:46
mst I've not found I'm particularly good at class-style lecturing
b2gills I first learned Perl 5 by the error messages and the included docs
timotimo OK, that's fine
mst then again, I've always previously attempted to produce a 'normal' class
timotimo ah, that must be the mistake! ;) 18:47
IOninja I've learned both Perl 5 and Perl 6 from IRC... and never bothered with docs with either :(
timotimo you do you, mst
mst maybe if I threw that out the window and went "let's do this mst style, and it'll maybe work for 10% of people, and everybody else can watch somebody competent at the standard approach"
IOninja heh
mst but I think having somebody who hates watching videos making one is probably silly
hobbs I think the result would be entertaining
b2gills I first learned Perl 6 by reading and watching everything I could get my hands on it for about 5 years or more, while never actually trying it 18:48
hobbs you might be a youtube celebrity
DrForr You too can be Tron Guy :)
b2gills I would subscribe to a mst channel if all he did was rant 18:49
DrForr I believe we call that 'IRC' :) 18:50
IOninja .ask TimToady is `sink Failure.new` supposed to ignore the Failure? 19:00
yoleaux IOninja: I'll pass your message to TimToady.
TimToady no, the main point of lazy failures is to not throw away the information when you sink it (or try to use it) 19:03
yoleaux 19:00Z <IOninja> TimToady: is `sink Failure.new` supposed to ignore the Failure?
TimToady m: sink Failure.new
camelia rakudo-moar b51a55: OUTPUT«Failed␤ in block <unit> at <tmp> line 1␤␤Actually thrown at:␤ in block <unit> at <tmp> line 1␤␤»
TimToady m: eager Failure.new
camelia ( no output )
IOninja Thanks.
TimToady m: so Failure.new
camelia rakudo-moar b51a55: OUTPUT«WARNINGS for <tmp>:␤Useless use of "so " in expression "so Failure.new" in sink context (line 1)␤»
TimToady heh
TimToady not really useless there... 19:04
IOninja I recall making it throw but now on a ticket someone says `sink ` is a way to silence failures... Wanted to ensure my "fix" wasn't wrong :P
TimToady sink is more or less what happens to statements that aren't the last, and we shouldn't bend it to mean something else, which this is, subtly 19:06
m: sink 42
camelia rakudo-moar b51a55: OUTPUT«WARNINGS for <tmp>:␤Useless use of constant integer 42 in sink context (line 1)␤»
TimToady m: eager 42
camelia rakudo-moar b51a55: OUTPUT«WARNINGS for <tmp>:␤Useless use of constant integer 42 in sink context (line 1)␤»
TimToady hmm
m: eager 42, 43 19:07
camelia ( no output )
TimToady m: sink 42, 43
camelia rakudo-moar b51a55: OUTPUT«WARNINGS for <tmp>:␤Useless use of constant integer 43 in sink context (lines 1, 1)␤Useless use of constant integer 42 in sink context (lines 1, 1)␤»
TimToady interesting that eager only silences the list
TimToady m: eager so Failure.new 19:08
camelia ( no output )
TimToady anyway, that's not what sink is for
TimToady m: try Failure.new 19:09
camelia ( no output )
TimToady lot's of other ways to silence a failure
jnthn I'm a tad surprised try didn't fatalize it... 19:10
m: try { Failure.new }
camelia ( no output )
jnthn m: try +'nope'
camelia ( no output )
jnthn Oh, duh 19:11
It does and then catches the exception
I even wrote the code that makes that happen. :P
TimToady indeed :) 19:14
TimToady is glad he lives in the state of CA, not the country of CA, because his furnace is bust 19:16
IOninja recently learned CA has "Yolo by-pass" 19:18
www.google.ca/maps/place/Yolo+Bypa...21.6280637
DrForr Cloning?
IOninja :)
DrForr I was amused when I was driving back from dropping Percy off and passed the (closed) Donner Party Picnic Ground. 19:19
TimToady well, CA has Yoho you can bypass... 19:20
DrForr "Donner party, table for 7... er, 6?"
TimToady what self-serving people! 19:21
DrForr Biting sarcasm. 19:21
TimToady will chew on that...
samcv good * perl 6 19:22
perlpilot cale2: That wasn't a "bad quote" it was an interesting one. I like the sentiment.
samcv .tell lizmat thanks for " Make Int.WHICH about 1.7x faster" :) 19:28
yoleaux samcv: I'll pass your message to lizmat.
IOninja I see the "Shouldn't happen" in the comment but it did happen to me like a week ago: github.com/rakudo/rakudo/blob/b51a...pm#L34-L35 19:33
In irclog.perlgeek.de/perl6-dev/2017-...i_14066457 19:34
m: gist.github.com/zoffixznet/b7fe891...4a664b2822
camelia rakudo-moar b51a55: OUTPUT« ok 1 - 3..4 ~~ -1/0..1/0␤ ok 2 - 0/0..0/0 ~~ -1/0..1/0␤ ok 3 - 2..3 ~~ 2..3␤ ok 4 - "2".."3" ~~ 2..3␤ ok 5 - 2.0..3.0 ~~ 2..3␤ ok 6 - 2..3 ~~ 2..3␤ ok 7 - 2.5..2.8 ~~ 2..3␤ ok 8 - FatRat.new(2, 1)..FatRat.new(3, 1…»
IOninja e: gist.githubusercontent.com/zoffixz...6b3d/p6.p6
evalable6 IOninja, Successfully fetched the code from the provided URL.
IOninja, rakudo-moar b51a550: OUTPUT«(exit code 2) ok 1 - 3..4 ~~ -1/0..1/0␤ ok 2 - 0/0..0/0 ~~ -1/0..1/0␤ ok 3 - 2..…»
IOninja, Full output: gist.github.com/8a1276fbef864dbae4...470fb3c6d6
IOninja hm, but only on my 32-bit box 19:36
IOninja .ask dogbert11 do you get any warnings about Failures in DESTROY when running this code on 32-bit box? gist.githubusercontent.com/zoffixz...e2bb791e4a 19:36
yoleaux IOninja: I'll pass your message to dogbert11.
IOninja Got 2017.01-121-gf94cb21 on both 32-bit and 64-bit and only 32-bit one complains 19:37
IOninja .tell dogbert11 previous URL seems busted; this one: gist.github.com/zoffixznet/b7fe891...4a664b2822 19:40
yoleaux IOninja: I'll pass your message to dogbert11.
timotimo IOninja: yeah, that warning is a helpful thing to have, we put it in mostly because it does tend to happen a bunch 19:44
until we figure out sinking better :)
IOninja Well I tickedted its happening: rt.perl.org/Ticket/Display.html?id=130786 19:45
timotimo but the "only 32bit" thing makes me a bit uncomfortable :)
IOninja Uncomfortable how?
timotimo it could very well be that it's just the size of objects and frames being different sizes causes GC to do things in a slightly different order
IOninja m: my $f = Failure.new; sink $f 19:49
camelia rakudo-moar b51a55: OUTPUT«WARNINGS for <tmp>:␤Useless use of $f in sink context (line 1)␤Failed␤␤Actually thrown at:␤ in block <unit> at <tmp> line 1␤␤»
IOninja ain't useless :/
IOninja The code where the DESTROY stuff happens has `try` prefix before code that makes the Failures 19:50
timotimo try is supposed to make failures immediately fatal
perigrin_ w/ 52
timotimo through the magic of code-gen
IOninja perigrin_: No win. Try again. 19:51
perigrin_ IOninja: it was there, just wasn't there with w/ 19:52
:)
IOninja Looks like the confusion that $proc.out.close returns the proc is prevalent: rt.perl.org/Ticket/Display.html?id...xn-1383778 20:02
IOninja Or rather... people thinking that IO::Pipe.close throws when it doesn't 20:02
m: sub meows { Proc.new: :command["false"] }; try meows 20:03
camelia ( no output )
IOninja s: sub meows { Proc.new: :command["false"] }; try meows; exit
SourceBaby IOninja, Something's wrong: ␤ERR:
IOninja Well, it 'splodes in non-restricted setting. 20:04
'cause the explosion is in a sinking Proc and so happens after the try.
I dunno... is this a doc problem or a design problem? :)
Actually make it three people... 20:06
m: |Failure.new 20:15
camelia ( no output )
IOninja m: sink |Failure.new 20:16
camelia ( no output )
IOninja m: sink [Failure.new],
camelia rakudo-moar b51a55: OUTPUT«Failed␤ in block <unit> at <tmp> line 1␤␤Actually thrown at:␤ in block <unit> at <tmp> line 1␤␤»
IOninja Weird, no?
(the slip preventing 'splosion that is)
Actually, blocking sinkage. `|run "false"` doesn't explode 20:18
IOninja Anyone wanting to give a talk? Toronto Perl Mongers are lookin' for speakers. 20:20
☃☃☃☃☃☃☃ 20:21
:) 20:22
IOninja ends the soliloquy
arnsholt IOninja: If you're springing for airfare OSL-YYZ, I'm sure I can come up with something =) 20:24
IOninja heh, doubt there's any airfare springed 20:25
Unless you're famous.
:)
cale2 what happens when you put `.IO` on the end of a filename? Is .IO coercing the Str to a IO::Handle type? 20:26
IOninja IO::Path
cale2 perhaps then .slurp coerces IO::Path to an IO::Handle 20:27
Xliff .slurp returns the contents. 20:29
IOninja cale2: not really; just uses it to slurp the thing pointed to by that IO::Path: github.com/rakudo/rakudo/blob/b51a...#L458-L487
Xliff .open should return the IO::Handle
IOninja Kinda weird design 20:32
IO::Handle has slurp-rest; IO::Path has slurp;
[Coke] IOninja: buffalo is kind of a long drive for me. - also, am I famous? 20:34
perlpilot still wishes "slurp-rest" didn't exist or had a better name
[Coke] perlpilot: there's always 6.d 20:34
[Coke] wonders if slurp(:rest) would have worked. 20:35
IOninja [Coke]: doesn't seem so: www.google.com/search?q=wiki+Will+...p;oe=utf-8
[Coke] IOninja: I'm at least name dropped in wikipedia. :P 20:35
IOninja [Coke]: the reason I mention famousnes is we did pull together something around a grand for Damian Conway's visit :)
perlpilot: like... slurp? :) 20:36
perlpilot IOninja: exactly! :)
[Coke] oh so I can expect about 4.50. Canadian. :)
IOninja :) We'll pay for your parking ;)
[Coke] aahahaha. perfect.]
cale2 Can you convert a seq to an array? 20:52
sena_kun cale2, .list? 20:54
gfldex m: dd Seq.new.Array 20:55
camelia rakudo-moar b51a55: OUTPUT«Too few positionals passed; expected 2 arguments but got 1␤ in block <unit> at <tmp> line 1␤␤»
sena_kun not .Array though
gfldex .Array is not the problem
it's not that easy to create a Seq
m: dd (1…3).Array 20:56
camelia rakudo-moar b51a55: OUTPUT«[1, 2, 3]␤»
sena_kun neat.
gfldex, by the way, I'd want to talk with you a bit about the docs, are you relatively free now? 20:57
gfldex yes
perlpilot [Coke]: do you think TPF would give small travel grants for speakers to spread the Perl word? 20:58
perlpilot [Coke]: not in the sense that you would apply for one, but that Toronto.pm would apply for one to get reimbursed for flying someone (maybe you) in 20:59
sena_kun okay. I've finished(or almost) work on a single style and compileable examples, but in process a question risen. Your extract-examples script indeed extract examples, but for what purpose? Cannot we in such fashion just execute examples directly instead of extracting? 21:00
cale2 gather/take creates a Seq. I just assigned it to an @array variable and that converted it 21:01
mst gfldex: grep/map return Seqs too
mst uses .list sometimes to get something bindable
when I'm trying to be readonly-everything 21:02
sena_kun gfldex, I've built a test around your script, but we lost information after extracting to properly shout about errors 21:03
timotimo IOninja: the reason why there's slurp and slurp-rest is because slurp includes opening and closing, whereas slurp-rest is about a file-handle that neds up staying open afterwards 21:06
dogbert17 IOninja: ran you code a few times and saw no DESTROY warnings 21:33
lucs dogbert17: I believe you have some yoleaux messages addressed to dogbert11 waiting. 21:35
dogbert17 lucs: the ones from IOninja? 21:36
lucs Yes
dogbert17 dogbert11 is my $work alter-ego 21:39
lucs Oh, just saying.
dogbert17 lucs: thx for pointing it out
lucs Sure thing.
IOninja dogbert17: OK will just close my ticket then 21:41
dogbert17: oh, which perl6 version did you use?
I guess I should still just close it since I don't know how to repro it on HEAD 21:42
dogbert17 IOninja: This is Rakudo version 2017.01-207-gb51a5505a built on MoarVM version 2017.01-45-g2b0739d8 21:44
IOninja m: say $*PERL.compiler.version 21:46
camelia rakudo-moar b51a55: OUTPUT«v2017.01.207.gb.51.a.550␤»
IOninja yeah that already has my fix for ~~
hobbs gb.51.a.550? 21:47
dogbert17 IOninja: remember seeing it a few months ago, there was some discussion on IRC which led to timotimo making a fix 21:47
hobbs oh, it's interpreting it as that thing where every switch between alpha and numeric is a new significant segment
IOninja yeah 21:47
timotimo did i fixbreak something?
dogbert17 many things :)
IOninja don't think so :)
cale2 m: say (1,2,3,4) + (5,6,7);
camelia rakudo-moar b51a55: OUTPUT«7␤»
cale2 m: say (1,2,3,4) ~ (5,6,7); 21:48
camelia rakudo-moar b51a55: OUTPUT«1 2 3 45 6 7␤»
cale2 m: say (1,2,3,4) ++ (5,6,7);
camelia rakudo-moar b51a55: OUTPUT«7␤»
cale2 m: say join (1,2,3,4), (5,6,7);
camelia rakudo-moar b51a55: OUTPUT«51 2 3 461 2 3 47␤»
IOninja Lists are Cool
cale2 how the hell do i do concat two @arrays lol 21:48
timotimo what did i make a fix for?
cale2: with the , operator and "flat"
cale2 m: say (1,2,3,4), (5,6,7); 21:49
camelia rakudo-moar b51a55: OUTPUT«(1 2 3 4)(5 6 7)␤»
cale2 m: say |(1,2,3,4), (5,6,7);
camelia rakudo-moar b51a55: OUTPUT«1234(5 6 7)␤»
cale2 m: say |(1,2,3,4), |(5,6,7);
camelia rakudo-moar b51a55: OUTPUT«1234567␤»
perlpilot cale2: those are lists you're trying to concatenate btw :)
dogbert17 timotimo: some strange DESTROY warnings if I remember correctly 21:50
timotimo jesus, my last rakudo commit was 3 months ago
IOninja :o 21:51
mine was 3 hours ago :)
hoelzro timotimo: mine was 5 =(
IOninja Slackers! ;)
timotimo oh, no, i searched wrong
cale2 perlpilot: If lists, seqs, and arrays were the same thing, what would anyone complain about?
timotimo i actually did something 4 weeks ago
and one 9 weeks ago
IOninja cale2: same thing being what? 21:52
perlpilot cale2: someone will always find *something* to complain about :)
IOninja cale2, and what about Slips :) 21:53
cale2, Arrays and Slips are Lists. Arrays are mutable and Slips... slip... into surrounding stuff. Seqs lazily generate and forget stuff, seems a far cry from Lists 21:54
cale2 To a beginner, they're all the same thing. except sometimes things don't work because they're different types and then you have to fiddle until it works. 21:55
Will be interesting to see how "Think Perl 6" teaches them all
IOninja hehe 21:56
Well, they all do Positional role, so there is some sameness :)
cale2 Realistically, the only reason a beginner would need to know about Seq is if they learn about gather/take. They probably should learn the imperative accumulator method before learning gather/take, though. 21:57
Geth doc: 9771ffeeb9 | Altai-man++ | 3 files
Fix a couple of examples, add 'haskell' page to ignore-list of extract-examples.p6
IOninja m: class Sameness is Array is Seq is Slip {}; say Sameness.new: 1, 2, 3
camelia rakudo-moar b51a55: OUTPUT«[1 2 3]␤»
IOninja ehehe
IOninja "imperative accumulator method"... *snores* 21:58
cale2 The differences are frustrating when you're adding typing to your program. All of the sudden Array[Stuff] doesn't compile because your gather/take actually produced a Seq.
IOninja What is that anyway?
But why are you adding typing? 21:59
cale2 m: my @stuff; for 1,2,3,4 { @stuff.push: $_ }; say @stuff;
camelia rakudo-moar b51a55: OUTPUT«[1 2 3 4]␤»
IOninja ah
cale2 that method
IOninja: why wouldn't you add typing. It's nice to know that your function returns an Array of a certain thing 22:00
IOninja loop amd push sounds much less intimidating :)
perlpilot cale2: do you expect type annotations in Perl 6 to act like Haskell in some way?
dogbert17 timotimo, IOninja: irclog.perlgeek.de/perl6-dev/2016-0...i_13211439
cale2 IOninja: Yeah, teach loop/push first. Then gather/take is like "oh I don't need the accumulator any more"
cale2 perlpilot: cognitively, type annotations are helpful to humans just as much as computers. look at the signature "ah, I know what this func does" 22:01
IOninja cale2, but if you're unfamiliar with Perl 6 types your effect is frustration
perlpilot okay ... I was getting a feeling like you were expecting something akin to Haskell's type inferencing to happen in Perl 6
IOninja cale2, and you can play to language's strength: gradual typing and not bother with types until you learn about them. 22:02
Instead of wanting sameness. 22:03
Geth doc: 5c2a3bcf00 | Cale++ | doc/Language/haskell-to-p6.pod6
add placeholder for gather/take
22:03
perlpilot I'd say this is where Haskell and Perl 6 are polar opposites. In Haskell, you add types so that the compiler can help you write the code; in Perl 6 you leave off the types so that the compiler doesn't get in your way of writing the code ;-) 22:04
cale2 IOninja: Nobody can tell me Perl6's strengths, though. When I ask, they say TMTOWTDI. When I do it a different way, they say "play to Perl6's strengths". okay... 22:05
I get the impression that there _is_ such a thing as idiomatic Perl6. But people pretend that there isn't. 22:06
perlpilot cale2: I suggest you ask TimToady about "idiomatic Perl 6" some time :-) 22:09
perlpilot cale2: and, yes, there is such a thing. 22:11
IOninja cale2: hehe, interesting. I do believe there is idiomatic Perl 6, but I'd have a hard time naming examples. 22:14
Other than assuming everything TimToady writes is idiomatic by definition :P
But I notice you throw around all sorts of CS terms I never heard of. Perhaps idiomatic Perl is writing code ignoring all these strict rules and definitions... or perhaps I think so because that's how I code :P clueless about something-something-aggregators you showed earlier 22:16
IOninja And, to me at least, TIMTWOADY means you can write `for ^5 { .say }` or `^5 .map: &say` or `.say for 0..4`; same as in English you structure phrases differently, as they fit. Not that you can do FP-only-and-nothing-but-FP while someone can do OO-only-and-nothing-but-OO and declarative whatver that is 22:19
gfldex for '.' { .Str.say when !.IO.d; .IO.dir()>>.&?BLOCK when .IO.d } 22:21
^^^ I cound 3 idioms in there
count even
Geth doc: 6c1c54ee99 | (Wenzel P. P. Peppmeyer)++ | doc/Language/variables.pod6
mexico examples
22:26
IOninja hehe is that what we call the opposite of Texas? :)
Oh 'cause it is... literally I guess
gfldex at least I do
IOninja I like it. 22:27
cale2 gfldex: I like it. Let's call the Perl::Tidy tool that converts texas to unicode `Perl::Tidy::Mexify` or something lol 22:28
TEttinger huh, except that mexico uses even longer names than texas 22:29
cale2 in that case `Perl::Tidy::WingDingify`
TEttinger simplest is "mexico city" vs. "ciudad mexico" (not sure if it needs "ciudad de")
the chinese ideograms are about as close as it gets to one symbol for one concept 22:31
cale2 TEttinger: creo que se llama "mexico" porque espanol tiene los caracturas unicoda 22:32
TEttinger I guess "mexico" could include the maya, but I don't know if they lived there or further south. and the maya used a one-to-one symbol-to-concept mapping
cale2 wow, I guessed for "unicode characters" and it was right lol
IOninja The Mayan people are still alive dude :) 22:33
TEttinger I guess. spanish has just a few unicode chars, enough to fit in Latin-1
cale2 perlpilot: I would imagine idiomatic Perl6 would mostly come through in control flow. Structurally Idiomatic Perl6 in large applications would probably just be OO
TEttinger IOninja: didn't they leave the cities though?
did their script stay in use? 22:34
IOninja No idea.
Heh, google-mapping "Maya" gives me Floridian city named "Mayo" :P
cale2 TEttinger: Texas is close to Mexico. Texas is ascii, Mexico is unicode because it has to be. You could say Texas vs Chinese, but it doesn't have a ring to it / the imagery isn't as good :P 22:35
TEttinger true
cale2 The imagery of the Alamo lol 22:36
TEttinger was the battle of the alamo in the Mexican-American war? 22:36
cale2 Perl6 is one of the few languages that the Cherokee could program in: en.wikipedia.org/wiki/Cherokee_syllabary 22:36
in their own language, I mean
TEttinger are the keywords remappable, if there are any? 22:37
I'm not sure if the sigils can be changed
cale2 TEttinger: Idk, but I think there was a basement there
IOninja What's special about Perl 6 and Cherokee? 22:39
IOninja m: sub ᎢᏣᎵᏍᎠᏁᏗ { say "ᎢᏣᎵᏍᎠᏁᏗ" }; ᎢᏣᎵᏍᎠᏁᏗ 22:40
camelia rakudo-moar b51a55: OUTPUT«ᎢᏣᎵᏍᎠᏁᏗ␤»
IOninja Works in Perl 5 too
cale2 Oh, you can name perl5 functions in unicode? did not know
golang only allows for unicode in strings i think 22:41
perlpilot re mexico v. texas ... that's taking the analogy somewhere far away from home :) 22:42
IOninja Yeah, as long as you use proper switches, tell it your source is in utf8, and sacrifice a goat to god Rah. 22:43
cale2 texas is to ascii as wisconsin is to to unicode 22:45
timotimo ah, i remember that fix! 22:53
cale2: "there is more than one way to do it" doesn't mean "every way to do it is the right way"
perlpilot Really, the key thing is that there is a human in the mix. And that human gets to use his or her brain to decide "is this right or not". But sometimes (often?) humans don't want to think about that; they just want to be able to say "I'm doing things in style A, what's the appropriate way to do X in style A" and get a ready-made answer. 22:56
foolish humans. 22:57
;-)
IOninja doesn't think like that at all :o 22:58
cale2 perl is actually much "lower level" than haskell. If you want to speak in terms of abstractions. haskell abstracts the machine away to such a degree, that many people actually want to go back to visualizing the computer model 22:59
timotimo can imagine that 23:00
perlpilot cale2: I dunno. I think that Perl is much broader than Haskell in that it tries to bridge the gap between low level and high level
perlpilot But, I'll agree that Perl *can be* (and often is) lower level than Haskell. 23:03
timotimo the way haskell does its lazy evaluation can sometimes make understanding how it actually executes its things really tricky 23:04
but that's no issue when you're not interested in that
which you can totally do
cale2 I'm confused about how you set an attribute on an object. I thought `has $.thing is rw` did it 23:10
cale2 m: class Thing { has $.stuff is rw }; my Thing $t.=new; $t.thing = 'hello'; say $t; 23:11
camelia rakudo-moar b51a55: OUTPUT«No such method 'thing' for invocant of type 'Thing'␤ in block <unit> at <tmp> line 1␤␤»
cale2 Yep, that's what I get every time
oops
m: class Thing { has $.stuff is rw }; my Thing $t.=new; $t.stuff = 'hello'; say $t; 23:12
camelia rakudo-moar b51a55: OUTPUT«Thing.new(stuff => "hello")␤»
cale2 what the
IOninja heh 23:14
cale2: maybe you were using $!stuff? That's a private attr
m: class Thing { has $!stuff is rw };
camelia rakudo-moar b51a55: OUTPUT«Potential difficulties:␤ useless use of 'is rw' on $!stuff␤ at <tmp>:1␤ ------> 3class Thing { has $!stuff is rw 7⏏5};␤»
IOninja Though that warns
cale2 If I had a dime for every time I tried to invoke a method on Any 23:15
timotimo well, how are you putting your Anys into your variables? :)
perigrin cale2: Any.port.in($a_storm) ? 23:16
IOninja m: use MONKEY-TYPING; augment class Any { method FALLBACK (|) { say "You got a dime!" } }; my $x; $x.somethin'or-other
camelia rakudo-moar b51a55: OUTPUT«You got a dime!␤»
IOninja ehehe
timotimo well done
IOninja Add a state counter var, a BEGIN that loads data from file and END that writes it back; stick it into a module and alias perl6 to perl6 -MDimeCounter; and you'll know exactly how many dimes you'd get :) 23:21
timotimo yup 23:23
if you develop on multiple machines, may want to build a network-attached storage solution for your dime count
IOninja :D 23:24
b2gills better yet send it over irc to a bot that keeps track, and tweets the cumulative count on a regular basis 23:26
timotimo right, chatbots are the next disruptive technology 23:28
IOninja ugh... stupid bots are refusing to join. 23:36
they're striking
IOninja Guess it's my excuse to go gaming today and do the changelog populating tomorrow :} 23:38
timotimo :) :) 23:42
how long until release?