»ö« Welcome to Perl 6! | perl6.org/ | evalbot usage: 'perl6: say 3;' or rakudo:, niecza:, std:, or /msg p6eval perl6: ... | irclog: irc.perl6.org/ | UTF-8 is our friend! | YAPC::NA talk submissions due end of Month. Have you submitted your talk?
Set by toddr_ on 18 March 2013.
00:01 supernovus left 00:03 countley joined 00:07 countley left 00:13 countley joined 00:17 nsharrok joined 00:19 countley left 00:20 cognominal left, Chillance left, countley joined, baest left 00:21 cognominal joined 00:29 cogno joined 00:30 adu_ joined 00:33 gdey left 00:41 lustlife joined 00:42 nsharrok left 00:44 countley left 00:48 census left 00:54 Gruber is now known as Grrrr 01:00 am0c joined 01:02 japhb_ left 01:11 orafu left, lustlife left, orafu joined 01:14 hypolin joined 01:15 adu_ left 01:23 cogno left, cognominal left 01:24 cognominal joined 01:27 cogno joined 01:38 cogno left, cognominal left 01:45 lustlife joined 02:09 xinming left 02:11 xinming joined 02:19 daniel-s__ left 02:48 uasi joined 03:03 grondilu left 03:10 orafu left, OuLouFu joined, OuLouFu is now known as orafu 03:25 census joined 03:42 uasi left 03:45 baest joined 04:09 census left 04:19 colomon left 04:28 colomon joined 04:29 census joined 04:37 dayangkun joined 04:39 preflex left 04:40 preflex_ joined, preflex_ is now known as preflex 04:46 kivutar joined 04:54 daniel-s joined 05:00 rindolf joined 05:10 raiph joined 05:11 dayangkun left
diakopter . 05:11
r: | | ||| | | || | || | | || || | ||| | | | | || |||| || || || || ||| ||| ||e 05:12
p6eval rakudo 8fea53: OUTPUT«===SORRY!===␤CHECK FAILED:␤Undefined routine '&prefix:<|>' called (lines 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, …
diakopter std: try | | ||| | | || | || | | || || | ||| | | | | || |||| || || || || ||| ||| ||e 05:13
p6eval std 86b102f: OUTPUT«ok 00:00 42m␤»
diakopter that's the secret way to break into the compiler - it interprets that as binary and writes it to executable memory and jumps there. 05:15
TimToady r: ||[]
p6eval rakudo 8fea53: OUTPUT«===SORRY!===␤CHECK FAILED:␤Undefined routine '&prefix:<|>' called (lines 1, 1, 1, 1)␤»
TimToady r: |[]
p6eval rakudo 8fea53: OUTPUT«===SORRY!===␤CHECK FAILED:␤Undefined routine '&prefix:<|>' called (lines 1, 1)␤»
TimToady r: say |[]
p6eval rakudo 8fea53: OUTPUT«␤»
05:17 Heather joined
Heather hi 05:17
nqp must be build with -j1 ?
diakopter did you try it higher? 05:18
[curious] 05:19
Heather no
diakopter DrEeevil tested 05:20
DrEeevil it might work in newer versions, when I restricted that a while ago (~1 year I think) it lead to spurious failures 05:21
05:32 census_ joined 05:34 census left 05:36 census_ left
Heather DrEeevil just reg ex github.com/Heather/ecosystem/blob/.../META.list 05:36
05:36 census joined
Heather wrong chat 05:36
so... 06:02
let start with: How to read text file on http?
get? 06:03
r: my $text = get 'example.com'; 06:04
p6eval rakudo 8fea53: OUTPUT«No such method 'get' for invocant of type 'Str'␤ in sub get at src/gen/CORE.setting:7983␤ in block at /tmp/a6em_RAPGf:1␤␤»
06:07 uasi joined
Heather p5eval: get 'example.com'; 06:08
06:08 SamuraiJack joined
p5eval Heather: ERROR: syntax error at (eval 7) line 1, near "get 'example.com'" 06:08
Heather maybe it should be run wget ? .... 06:09
06:09 kurahaupo left 06:28 Jimmy_ joined
Jimmy_ Heather: github.com/cosimo/perl6-lwp-simple 06:29
06:30 Jimmy_ left
moritz star: use LWP::Simple; say LWP::Simple.get('perl6.org').substr(0, 20) 06:37
p6eval star 2013.02: OUTPUT«<?xml version="1.0" ␤»
moritz star: use LWP::Simple; say LWP::Simple.get('perl6.org').comb(rx{ '<title>' .*? '</title>' }) 06:38
p6eval star 2013.02: OUTPUT«<title>Perl 6</title>␤»
Heather cool
07:12 vaelxon joined 07:17 rindolf left 07:25 kaleem joined 07:31 census left 07:34 rindolf joined 07:37 drbean joined 07:39 drbean left
hoelzro pmichaud: I did not... 07:40
07:40 drbean joined
hoelzro (wrt nqp_const.pir installation) 07:41
07:49 FROGGS joined, domidumont joined 07:51 rindolf left, rindolf joined 07:52 wk left 07:54 domidumont left 07:55 domidumont joined 08:14 Guest85728 joined 08:22 Sifr left
moritz I love the new built-in pdf viewer in firefox, but "an unknown error occured while printing" is LTA 08:37
LoRe lighter than air? 08:41
moritz LTA = Less Than Awesome
LoRe :) 08:42
FROGGS moritz: ya, that thing is cool, but it has problems with transparency… but that's the only issue I've seen so far 08:43
moritz oh, and the gnome printing dialog can't count 08:45
when I combine two pages per sheet and double-sided printing, it puts 4 logical pages both on the back and the front of each page
LoRe and some fonts are rendering very strange, ie the headlines in this menu: www.franziskanerinder-au.de/speisek...ekarte.pdf 08:46
08:46 daxim joined, labster left
FROGGS ohh ya, that's kerning, right? 08:48
08:48 kresike joined
kresike hello all you happy and/or unhappy perl6 people 08:48
FROGGS hi kresike
kresike FROGGS, o/ 08:49
is there anyone here that is both happy and unhappy ?
dalek kudo/tmp_highfive: cfb72f2 | (Tobias Leich)++ | src/Perl6/ (3 files):
cleanup and attempt to support switching to v5 and back
08:50
FROGGS kresike: I'm not
pretty happy atm
kresike FROGGS, yes, but I'm looking for people that are happy and unhappy at the same time, possibly wrt perl6 08:53
FROGGS kresike: so you'll change your greeting line if nobody answers?
tadzik hello any(<happy unhappy>) perl 6 people? :) 08:54
kresike I'll remove the and, as it makes little sense
FROGGS tadzik++ 08:55
kresike One could say that he is happy that perl6 exists, but unhappy that it hasn't had a complete implementation yet
FROGGS :o)
kresike tadzik, ☺
but that is happy or unhappy 08:56
tadzik it can be and, but then you won't notice 08:57
r: say any(3, 5) > 1
p6eval rakudo 8fea53: OUTPUT«any(True, True)␤»
tadzik oh hm
r: say so any(3, 5) > 1
p6eval rakudo 8fea53: OUTPUT«True␤»
tadzik r: say so any(3, 0) > 1
p6eval rakudo 8fea53: OUTPUT«True␤»
Heather pdf in firefox -> always crash :D 08:58
FROGGS Heather: never crashed here :o)
Heather FROGGS I don't beleave ^__^ they paid you
kresike tadzik, how so ? 08:59
tadzik any(all(@pdf) ~~ Crash, none(@pdf) ~~ Crash)
08:59 Liz joined, Liz is now known as Guest24760
tadzik kresike: how so what? :) 08:59
kresike tadzik, how can any be and ? 09:00
09:02 Guest24760 is now known as lizmat
tadzik I don't understand the question :) 09:05
r: all(1, 1) == any(1, 0) 09:06
p6eval rakudo 8fea53: ( no output )
tadzik r: say so all(1, 1) == any(1, 0)
p6eval rakudo 8fea53: OUTPUT«True␤»
kresike tadzik, you said any(<happy unhappy>) perl6 people 09:07
I think that means happy or unhappy 09:08
<tadzik> it can be and, but then you won't notice
how so ?
tadzik ah 09:09
well, you'll get the True value regardless of whether it's any of them, or both 09:10
like with (False || True)
that'll give you true, and the same with (True || True)
if that sounds confusing, then it's probably the fact that it's early in the morning, I'm thinking slowly and coffee doesn't seem to help :)
kresike but that means OR ! 09:11
tadzik yes
okay, nevermind :)
kresike Or my logic teacher was way off :)
tadzik haha, no, you're right
it's just my twisted thinking maybe :)
me and my Schrodinger's logic
Heather so when you say hello anybody you say hello to some random person :D 09:12
kresike Heather, I'm using multicast not anycast :)
Heather kresike you just using it wrong 09:13
kresike when you say hello you define the rule people will use to authorize
kresike with that rule all = any
kresike Heather, I think we're way off topic here :) 09:14
Heather ahm... could be
09:15 fhelmberger joined
Heather can somebody share me korean kssn? :P 09:15
Heather ... worst try I used to get it 09:16
09:23 am0c left
jnthn morning, #perl6 o/ 09:28
tadzik hello jnthn 09:29
FROGGS morning jnthn 09:30
09:31 acheche left
lizmat morning all 09:33
FROGGS morning lizmat
09:34 Grrrr left
moritz \o * 09:39
nwc10 what's with this error from making Rakudo? 09:40
/home/nicholas/Perl/rakudo/install/bin/parrot -o blib/Perl6/ModuleLoader.pbc src/gen/perl6-moduleloader.pir
error:imcc:No such file or directory 'nqp_const.pir' in file 'src/gen/perl6-moduleloader.pir' line 1
make: *** [blib/Perl6/ModuleLoader.pbc] Error 1
jnthn urgh
That hoelzro's patch didn't add the file to those installed like pmichaud said it needed to... :/ 09:41
Heather can LWP Simple work with https ? 09:43
moritz I don't think so
Heather moritz sad... is ther mirrored ecosystem list?
or should I run wget on it... 09:44
09:44 wk joined
moritz Heather: I don't know if it's mirrored anywhere 09:44
Heather maybe git cherry pick this file ... 09:45
moritz Heather: you could add something to the modules.perl6.org rebuilding script that takes care of mirroring
git cherry-pick works with commits, not files
jnthn nwc10: gist.github.com/jnthn/654e80453444...tfile1.txt may fix it
Heather wait... I think I can just check how panda do it... 09:46
09:46 lizmat left 09:47 sqirrel joined
moritz it probably shells out 09:47
tadzik fetching META.list? 09:48
Heather oh...
feather.perl6.nl:3000/projects.json
tadzik yes
Heather yes
tadzik though I need that ecosystem module... 09:49
tadzik hum?
Heather maybe I can use it from installed panda...
tadzik what do you want, to generate this file>?
I have a script which does that 09:50
not that it's rocket science
Heather tadzik I need to get all project names with git urls versions and deps
tadzik you have that in that file, yes 09:51
Heather tadzik now I need parse it
moritz use JSON::Tiny; my $d = from-json slurp 'projects.json' 09:55
09:55 Grrrr joined
nwc10 jnthn: strace suggests that parrot is looking for that file in .../include/ not .../library: 10:02
stat("/home/nicholas/Perl/rakudo/install/lib/parrot/5.1.0-devel/include/nqp_const.pir", 0x7fff36800410) = -1 ENOENT (No such file or directory)
it looks for a .pbc in the same directory
jnthn nwc10: Oh. strace++... 10:07
10:07 mtk left
jnthn Take two: gist.github.com/jnthn/654e80453444...tfile1.txt 10:07
10:07 hypolin left
dalek kudo/tmp_highfive: 7fdfc62 | (Tobias Leich)++ | src/Perl6/P5 (2 files):
say(1 + 2.5) works
10:08
masak good antenoon, #perl6
tadzik hi masak 10:09
masak today's autopun spotting: twitter.com/codepo8/status/314552333059112960
FROGGS hehe 10:10
jnthn :)_
o/ masak
masak \o
jnthn masak. Making "I didn't really get here in time for morning" sound classy. :P 10:11
10:14 mtk joined
hoelzro jnthn: yeah, sorry; I missed that message 10:15
Heather perl is very very ultra much more readable then rust ... 10:16
*than
masak senses through the Twitter that something having to do with feminism is happening over at PyCon 10:20
Heather masak ping 10:21
masak pong :)
tadzik I wish it had nothing to do with feminism, actually
masak so does Su-Shee, it seems, on Twitter.
tadzik things like this make people not take real problems seriously
masak I haven't yet found out what the core issue was.
Heather ++
tadzik and the whole thing being ridiculously immature
masak the funny thing about Twitter: you get the reactions first, and the backstory later.
Heather masak I've got a question 10:22
tadzik tl;dr: two guys privately tell a penis joke to one another; a woman feels enraged, takes a picture and whines on twitter. Guy gets fired
masak: hehe, true that
masak Heather: then I implore you to ask it.
tadzik: oh, that sounds a bit sad. :( 10:23
Heather masak can I get %*CUSTOM_LIB in bash?
perl6 <site home> in bash
masak Heather: I dunno. I'm an old-skooler. I know about, and use PERL6LIB. :)
Heather: I'm dimly aware that there's something new-and-fancy called %*CUSTOM_LIB. but I know nothing more :)
tadzik well, I wouldn't want to work for a company that fires people for telling jokes to their friends 10:24
whatever those jokes would be
masak right.
moritz Heather: SITE=$(perl6 -e 'say %*CUSTOM_LIB<site>') 10:25
masak moritz++
Heather -_-'
I'LL TRY
tadzik As a result of her tweets, PyCon staff talked to her, identified the men, and escorted them out of the room
holy batman 10:26
ok, I'll not pollute the safe Perl 6 space with those bollocks anymore
masak Heather: by the way, it's way cool to see you being active, using Perl 6 in various ways. ;)
Heather: we're always looking for new people to lure in^W^Whelp getting started.
GlitchMr www.xkcd.com/1188/ 10:27
I wonder how that would look in Perl 6.
... actually, I guess I should try implementing it 10:28
masak tadzik: well, it happens with other serious issues too, like racism: (1) people clamor for recognition about the problem, (2) solution gets institutionalized, (3) solution gets overapplied, draconian, and useless.
tadzik yeah 10:30
moritz there's also this issue that when some crime is prominent on the media, politicians cry for higher punishments for that crime 10:31
and now they are totally thrown out of proportion, in relation to punishments for crimes of related severity 10:32
masak it's the syllogism of politics: 1. We must do something. 2. This is something. 3. Therefore, we must do this. 10:34
FROGGS 4. And we must this in a way ppl recognize we do much about it. 10:36
GlitchMr rn: gist.github.com/GlitchMr/5212121
p6eval rakudo 8fea53: OUTPUT«(timeout)» 10:37
..niecza v24-35-g5c06e28: ( no output )
GlitchMr Actually, I don't need explicit try { } block here 10:38
Does gist.github.com/GlitchMr/5212121 look like Perl 6 code?
moritz GlitchMr: but you need a default { } block inside CATCH
masak yes, this PyCon incident sends chills down my spine. and now I'm done talking about it, too. 10:39
moritz otherwise it rethrows, because no clause caught the exception
GlitchMr Seems to be an infinite loop in Rakudo 10:40
std: gist.github.com/GlitchMr/5212121
Exactly what it should be
p6eval std 86b102f: OUTPUT«ok 00:00 40m␤»
GlitchMr Do I have old Niecza version of something because it doesn't recognize "is Exception"?
moritz wonders if CATCH without 'when' or 'default' should warn 10:41
n: say Exception
p6eval niecza v24-35-g5c06e28: OUTPUT«===SORRY!===␤␤Undeclared name:␤ 'Exception' used at line 1␤␤Unhandled exception: Check failed␤␤ at /home/p6eval/niecza/boot/lib/CORE.setting line 1443 (die @ 5) ␤ at /home/p6eval/niecza/src/STD.pm6 line 1147 (P6.comp_unit @ 37) ␤ at /h…
moritz GlitchMr: seems that current niecza doesn't have that type either
jnthn
.oO( Unhandled Exception indeed... )
GlitchMr I've tried porting www.xkcd.com/1188/ to Perl 6 10:42
10:42 Woodi joined
Woodi o/ 10:42
GlitchMr Hi, Woodi 10:43
Woodi spring coming :)
GlitchMr I still have snow
jnthn Fresh snow fell here yesterday
FROGGS .oO( one cup of hot snow per day ) 10:44
moritz this morning it was snowing a bit, but it's too warm for it to stay
jnthn Spring doesn't seem to be in a hurry to come this year :)
Woodi I am sure spring is unavoidable...
moritz as German politicians would say, it's "alternativlos" 10:46
which means "there's no alternative to it"
and of course when people say that, I can immediately think of alternatives
GlitchMr perl6advent.wordpress.com/2011/12/...mment-1312
Why I cannot do that?
It says that $@a is invalid hard reference syntax. 10:47
$@b*
$(@b) is still fine.
moritz r: my (@a, @b); push @a, $@b
GlitchMr std: my @a; $@a
p6eval rakudo 8fea53: OUTPUT«===SORRY!===␤Invalid hard reference syntax␤at /tmp/HQ5YxLkbi_:1␤------> my (@a, @b); push @a, $⏏@b␤ expecting any of:␤ postfix␤ infix stopper␤ infix or meta-infix␤ prefix or term␤ prefix or … 10:48
std 86b102f: OUTPUT«ok 00:00 42m␤»
moritz just a rakudo limitation
GlitchMr I guess it still wasn't ported to Rakudo and Niecza
moritz n: my (@a, @b); push @a, $@b
p6eval niecza v24-35-g5c06e28: OUTPUT«===SORRY!===␤␤Invalid hard reference syntax at /tmp/ydqKRLemOI line 1:␤------> my (@a, @b); push @a, $⏏@b␤␤Parse failed␤␤»
jnthn It used to be invalid in std too.
moritz aye 10:49
dalek p: 653ba0c | jnthn++ | tools/build/Makefile.in:
Install nqp_const.pir.
10:58
jnthn nwc10: The "take two" of that patch worked for me so I pushedit
nwc10 I'm still having fun. The patch as-was didn't apply (whitespace) 10:59
jnthn huh...
Well, try it with the one I just pash :)
nwc10 I am
(as of about 5 seconds ago)
jnthn Thanks :)
Heather wants JIT 11:01
tadzik JIT, or mere speed? :Y) 11:02
Heather tadzik more speed :)
tadzik but JIT should be the way 11:03
isn't it
nwc10 JVM has JIT. And this file is not yet empty: github.com/jnthn/nqp-jvm-prep/blob...ocs/LHF.md
more pragmatically, is there a file of "bits of Rakudo that need porting from PIR or C to NQP" ?
but, also, writing Perl 6 code generally is helpful
and perservering after finding bugs and deficiencies 11:04
I can't spell
tadzik also, if you have a server with supreme firepower, that'd be great :)
jnthn in the LHF file, note that donaldh++ has done much of the ground work for "invokedynamic code gen". But the other two are certainly welcome still todo.
tadzik (module smoketesting on various rakudo releases)
11:05 sqirrel left
tadzik feather is (was) doing that to some extend, though 11:05
Heather #panda github.com/Heather/gentoo-perl6/co...1f17656e47 11:07
11:07 cibs joined
jnthn nwc10: The trouble is that it's not really porting so much as designing abstractions. The handful of places we need to do that are hard for *me* to work out, which I suspect means they're not LHF. 11:08
nwc10 interesting. thanks
yes. it's like *I* find the perl 5 internals hard.
jnthn nwc10: The key places that need work are container stuff (which Pm is thinking about lots too at this point), Rakudo/NQP boundary handling, signature binding, and gather/take. 11:09
One thing I suspect, if I get the initial bits in place, I may be able to delegate somewhat easily is the big integer stuff. 11:10
11:15 mtk left 11:16 mtk joined
nwc10 jnthn: Result: PASS 11:33
jnthn yay 11:37
11:53 woosley1 joined
pmichaud good morning, #perl6, briefly 12:09
masak pmichaud, briefly! \o/ 12:11
jnthn gm, pm o/
12:17 JimmyZ_ joined
Heather finally setup emacs mode fine 12:18
12:19 JimmyZ_ is now known as JimmyZ
pmichaud ugh, why is there both a PARROT_LIB_DIR and a PARROT_LIBRARY_DIR and they mean different things? :-/ 12:20
jnthn pmichaud: I wondered that.
Heather r: my $x; { }
p6eval rakudo 8fea53: ( no output )
jnthn pmichaud: But mostly wanted to unbust the build...
(Should be $dayjobbing today, I guess. :)) 12:21
Heather r: my $x; { 5 }; say $x
p6eval rakudo 8fea53: OUTPUT«(Any)␤»
pmichaud sure, unbust the build is important. It just looks weird to have "lib/include" in a path.
not to mention "lib/library"
Heather r: my $x; { $x = 5 }; say $x
p6eval rakudo 8fea53: OUTPUT«5␤»
Heather ...
o_O 12:22
pmichaud afk, carpool
tadzik Heather: why would that surprise you
jnthn Heather: A block written directly where a statement would go is a bear block and just runs 12:23
Uh, bare, not bear!
tadzik bear block!
Heather >_<
jnthn It still serves as a new lexical scope, however. 12:24
masak shown here. 12:25
r: my $x = 42; { my $x = 5 }; say $x
p6eval rakudo 8fea53: OUTPUT«42␤»
Heather r: my $x = { 5 }; say $x 12:26
p6eval rakudo 8fea53: OUTPUT«Block.new()␤»
Heather r: my $x = { return 5 }; say $x
p6eval rakudo 8fea53: OUTPUT«Block.new()␤»
[Coke] r: sub prefix:<we>($){}; so say we all
p6eval rakudo 8fea53: OUTPUT«all()␤»
masak Heather: that's not a bear block.
[Coke]: :P 12:27
Heather r: my $x => { return 5 }; say $x
p6eval rakudo 8fea53: OUTPUT«===SORRY!===␤Preceding context expects a term, but found infix > instead␤at /tmp/1bLhpC6Ug4:1␤------> my $x =>⏏ { return 5 }; say $x␤»
Heather r: my $x = fn => { return 5 }; say $x
p6eval rakudo 8fea53: OUTPUT«"fn" => Block.new()␤»
jnthn
.oO( And that's a pear... )
12:28
Heather: I think the syntax you're looking for is -> { ... }
Which is a lambda 12:29
-> $x { } # lambda taking an arg
masak r: my $foo = -> $x { say "OH LOL $x }; $foo(42)
p6eval rakudo 8fea53: OUTPUT«===SORRY!===␤Unable to parse expression in double quotes; couldn't find final '"'␤at /tmp/dWqHRYu4Ic:1␤------> foo = -> $x { say "OH LOL $x }; $foo(42)⏏<EOL>␤ expecting any of:␤ postfix␤»
masak r: my $foo = -> $x { say "OH LOL $x" }; $foo(42)
p6eval rakudo 8fea53: OUTPUT«OH LOL 42␤»
Heather masak !!!
r: my $foo = -> { say "OH LOL" }; $foo(42) 12:30
p6eval rakudo 8fea53: OUTPUT«Too many positional parameters passed; got 1 but expected 0␤ in block at /tmp/zXYYgK8u7F:1␤␤»
Heather ...
masak I don't need args
masak then don't pass them :)
r: my $foo = -> { say "OH LOL" }; $foo()
p6eval rakudo 8fea53: OUTPUT«OH LOL␤»
masak r: my $foo = { say "OH LOL" }; $foo() 12:31
p6eval rakudo 8fea53: OUTPUT«OH LOL␤»
Heather ...
masak r: my $foo = { say "OH LOL" }; say "look, not called yet!"; $foo()
p6eval rakudo 8fea53: OUTPUT«look, not called yet!␤OH LOL␤»
Heather no.....
tadzik . o O ( cuteness overload )
masak Heather: typing '...' into the channel seems to be a habit of people of a Russian persuation. please don't do that -- it's highly frustrating for those of us who like words. 12:32
Heather r: my $x = { return "OH LOL" }(); say $x
p6eval rakudo 8fea53: ( no output )
Heather r: my $x = ({ return "OH LOL" }()); say $x 12:33
p6eval rakudo 8fea53: ( no output )
jnthn masak: ...
masak jnthn: !!!
Heather r: my $x = (-> { return "OH LOL" }()); say $x
jnthn :D
p6eval rakudo 8fea53: ( no output )
Heather masak it's my personal habit, I like ... 12:34
jnthn Note that return is associated with a routine, not a block
Heather r: my $x = (-> return "OH LOL")(); say $x 12:35
p6eval rakudo 8fea53: OUTPUT«===SORRY!===␤Invalid typename 'return' in parameter declaration.␤at /tmp/6OxDTvFtw1:1␤------> my $x = (-> return⏏ "OH LOL")(); say $x␤»
masak Heather: my point is that it's short for "oh, I didn't expect X" or "I kinda expect Y there". but '...' communicates neither X nor Y, and leaves the reader to try to guess your intent.
...which is harder than you may think. :)
r: my $x = (sub { return 42 })(); say $x
p6eval rakudo 8fea53: OUTPUT«42␤»
[Coke] thinks masak needs to let some sends go
jnthn always thought it was short for "wtf" but expressed as a regex that would match it :P
Heather masak sometimes (mostly) it's just emotion 12:36
masak no sub, I want lambda
masak Heather: you can have lambda or return, but not both.
Heather: the lambda version of 'return' is called 'leave'.
moritz fwiw leave() is specced to return values from a block 12:37
Heather ml: let x = z = 5; z
moritz but afaict it's not implemented
masak rn: my $x = my $z = 5; say $z
p6eval niecza v24-35-g5c06e28: OUTPUT«Potential difficulties:␤ $x is declared but not used at /tmp/4gK9z9mHwd line 1:␤------> my ⏏$x = my $z = 5; say $z␤␤5␤»
..rakudo 8fea53: OUTPUT«5␤»
jnthn r: sub foo() { my $x = -> { say 'here'; return 42; } }; $x(); say 'not here'; }; foo()
p6eval rakudo 8fea53: OUTPUT«===SORRY!===␤Variable '$x' is not declared␤at /tmp/N3KdRFkZAO:1␤------> = -> { say 'here'; return 42; } }; $x()⏏; say 'not here'; }; foo()␤ expecting any of:␤ postfix␤ argument list␤»
jnthn oops
pmichaud back again
jnthn r: sub foo() { my $x = -> { say 'here'; return 42; }; $x(); say 'not here'; }; foo()
masak I don't like Niecza's "Potential difficulties" warning on unused variables :(
p6eval rakudo 8fea53: OUTPUT«here␤»
moritz masak: me neither 12:38
masak it's too common to have those during development, in intermediate stages.
I vote for its removal.
or we explicitly start talking about warnings on two levels: "development" and "production" or some such.
Heather r: my $x = my $z = 5; say $z
p6eval rakudo 8fea53: OUTPUT«5␤»
masak or maybe "hack" and "commit".
jnthn Heather: Above is example of how return is related to the enclosing sub, not enclosing block.
Heather r: my $x = my $z = 5; return $z
p6eval rakudo 8fea53: ( no output )
Heather r: my $x = my $z = 5; return $z; say $x 12:39
p6eval rakudo 8fea53: ( no output )
Heather r: my $x = {my $z = 5; return $z;} say $x
p6eval rakudo 8fea53: OUTPUT«===SORRY!===␤Two terms in a row␤at /tmp/sP8VFiSMmh:1␤------> my $x = {my $z = 5; return $z;} ⏏say $x␤ expecting any of:␤ postfix␤ statement end␤ statement modifier␤ statement modifier loop␤ …
Heather r: my $x = {my $z = 5; return $z;}; say $x
p6eval rakudo 8fea53: OUTPUT«Block.new()␤»
Heather though I was starting with it
12:40 census joined, skids left
Heather r: my $x =-> {my $z = 5; return $z;}; say $x 12:41
p6eval rakudo 8fea53: OUTPUT«Block.new()␤»
Heather r: my $x =->-> {my $z = 5; return $z;}; say $x
p6eval rakudo 8fea53: OUTPUT«===SORRY!===␤Malformed parameter␤at /tmp/4qErM0jdZD:1␤------> my $x =->⏏-> {my $z = 5; return $z;}; say $x␤ expecting any of:␤ scoped declarator␤ constraint␤ prefix or term␤ prefix or meta-prefix␤ …
Heather r: my $x ==> {return 5}; say $x 12:43
p6eval rakudo 8fea53: OUTPUT«===SORRY!===␤Preceding context expects a term, but found infix => instead␤at /tmp/RpObezJ2dZ:1␤------> my $x ==>⏏ {return 5}; say $x␤»
12:45 dwoldrich left
JimmyZ r: my $x <== {return 5}; say $x 12:45
p6eval rakudo 8fea53: OUTPUT«␤»
Heather JimmyZ <== ?
JimmyZ r: say my $x <== {return 5}; 12:46
p6eval rakudo 8fea53: OUTPUT«(Any)Block.new()␤»
JimmyZ r: say {return 5}; 12:47
p6eval rakudo 8fea53: OUTPUT«Block.new()␤»
JimmyZ r: say my $x
p6eval rakudo 8fea53: OUTPUT«(Any)␤»
jnthn Heather: ==> and <== are feed operators, though using them with scalars is a bit curious
Heather r: say ({return 5})();
p6eval rakudo 8fea53: ( no output )
jnthn Heather: They let you write stuff as a pipeline
r: my @a = 1..100; @a ==> grep(*.is-prime) ==> map(2 * *) ==> say 12:48
p6eval rakudo 8fea53: OUTPUT«4 6 10 14 22 26 34 38 46 58 62 74 82 86 94 106 118 122 134 142 146 158 166 178 194␤»
Heather r: my $x <== { say 1; return 5}; say $x 12:49
p6eval rakudo 8fea53: OUTPUT«␤»
Heather r: my $x <== { say 1; return 5}; say $x()
p6eval rakudo 8fea53: OUTPUT«No such method 'postcircumfix:<( )>' for invocant of type 'Array'␤ in block at /tmp/pwcKUmTrz7:1␤␤»
jnthn I...have no idea what that just did :)
std: my $x <== { say 1; return 5}; say $x 12:50
p6eval std 86b102f: OUTPUT«ok 00:00 44m␤»
jnthn But apparently it's valid syntax...
pmichaud looks around for wormholes.
Heather r: my $x <-= {return 5}; say $x 12:51
p6eval rakudo 8fea53: OUTPUT«===SORRY!===␤Preceding context expects a term, but found infix -= instead␤at /tmp/PfIoJtnDuz:1␤------> my $x <-=⏏ {return 5}; say $x␤»
Heather r: my $x <== {return 5}; say $x.WHAT 12:52
p6eval rakudo 8fea53: OUTPUT«(Array)␤»
Heather r: my $x <== {return 5}; say $x[0]
p6eval rakudo 8fea53: OUTPUT«Block.new()␤»
Heather r: my $x <== {return 5}; say $x[0]()
p6eval rakudo 8fea53: ( no output )
Heather O_O
r: my $x <== { say 1; return 5}; say $x[0]() 12:53
p6eval rakudo 8fea53: OUTPUT«1␤»
Heather -_-'
jnthn why array?
jnthn Heather: As I tried to show you, you can't use return to return a value from a simple closure/block. It's for returning from the currently enclosing sub.
r: my $x <== { say 1; 5}; say $x[0]()
p6eval rakudo 8fea53: OUTPUT«1␤5␤» 12:54
Heather r: my $x <== { say 1; return 5}; say $x[1]()
p6eval rakudo 8fea53: OUTPUT«No such method 'Any' for invocant of type 'Parcel'␤ in block at /tmp/nanerF2QHa:1␤␤»
[Coke] I don't dislike the unused vars enough warnings enough to lobby for their removal from niecza. seems harsh.
jnthn Heather: Array because if a variable is the target of a feed operator, it pushes the results onto it. The first push vivifies an Array there.
Heather I see so it's now what I expect
jnthn Heather: The idea of the ==> and <== is that you have a list of things that you pipe through a series of operations, getting a list of things out at the end. 12:55
Heather r: my $x = { say 1; return 5}; say $x()
p6eval rakudo 8fea53: OUTPUT«1␤»
jnthn I that example I think you are returning from the program as a whole. We should probably complain about that.
pmichaud is the unused var message something that can be controlled via lexical pragma?
Heather ok... I keep this try for tomorrow
see you
masak o/ 12:56
jnthn пока )
pmichaud if yes, then just put that lexical pragma into the p6eval setting (a la RESTRICTED)
12:57 Heather left
JimmyZ r: my $x = -> { return 5 }; say $x() 12:58
p6eval rakudo 8fea53: ( no output )
JimmyZ can't use return here?
moritz JimmyZ: we've had the discussion in the backlog already 12:59
JimmyZ couldn't understand it 13:01
[Coke] (and I thought we were trying to be stricter; the unused warnings seem like a logical extension of this to me)
JimmyZ I meant jnthn++'s discussion 13:02
moritz [Coke]: in theory I agree. But in practise they are just annoying
JimmyZ: then I don't understand why you ask again what has already been answered
[Coke] moritz: I think not understanding something is a good reason to ask about it again. 13:03
jnthn JimmyZ: The most important bit of the backlog was this line:
r: sub foo() { my $x = -> { say 'here'; return 42; } }; $x(); say 'not here'; }; foo()
p6eval rakudo 8fea53: OUTPUT«===SORRY!===␤Variable '$x' is not declared␤at /tmp/Vi2BZFQFi3:1␤------> = -> { say 'here'; return 42; } }; $x()⏏; say 'not here'; }; foo()␤ expecting any of:␤ postfix␤ argument list␤»
jnthn darn
JimmyZ moritz: I can't understand the answer, since I'm not good at english enough ;)
jnthn r: sub foo() { my $x = -> { say 'here'; return 42; }; $x(); say 'not here'; }; foo()
p6eval rakudo 8fea53: OUTPUT«here␤»
jnthn JimmyZ: Notice how the "return" is returning from the sub foo, not from the pointy block. 13:04
pmichaud JimmyZ: 'return' only works inside of a Routine, such as a 'sub' or a 'method'. A pointy block is not a sub or method.
jnthn r: sub foo() { my $x = -> { say 'here'; return 42; }; $x(); say 'not here'; }; say foo() # maybe also helps
p6eval rakudo 8fea53: OUTPUT«here␤42␤»
13:04 rindolf left
pmichaud r: my $x = sub { return 5 }; say $x(); 13:05
p6eval rakudo 8fea53: OUTPUT«5␤»
13:05 arnsholt joined
JimmyZ oh, I thought it works in the pointy block 13:06
pmichaud you can have a 'return' in a pointy block, if the pointy block is in a sub. In that case, the 'return' returns from the outer sub, not the pointy block. 13:07
but pointy blocks never use 'return'
JimmyZ thanks, the second example is very great 13:10
with pmichaud++'s explanation
13:15 rindolf joined 13:16 bluescreen10 joined 13:23 brrt joined 13:42 PacoAir joined 13:48 jokar joined 13:52 dayangkun joined 13:53 jokar left, dayangkun left 13:57 jaldhar joined 13:58 Celelibi left 13:59 uasi left
masak I just saw the ADT email on p6l. I feel quite well-equipped to answer that one. but it may be a few hours before I have a slot to do so. 14:00
pmichaud masak +1
masak (basically, I think Perl 6 is quite well-posed to actually get ADTs at some point. but they wouldn't be really useful unless they had sufficient support in the compiler.)
that is, much of it can be provided by a module. maybe not all of it. 14:01
14:01 Celelibi joined
pmichaud I'm guessing the meaning of "abstract data type" has changed since I was in college, then. :) 14:01
jnthn masak: Is the "support in the compiler" mostly about type-related things? 14:02
masak jnthn: yeah. 14:03
an ADT would be its own thing, much like an enum type.
jnthn masak: The MOP stuff lets you override type checking.
Dunno how far that gets you :)
But it already covers classes/roles/enums/subsets etc. :)
masak it sure helps.
14:03 skids joined
masak the help from the compiler I'm thinking of is "SORRY, this given statement doesn't cover all constructors, plz fix" 14:04
pmichaud: data Tree a = Branch (Tree a) (Tree a) | Leaf a
pmichaud: that's an ADT.
14:04 drbean left
jnthn masak: That actually (not joking :)) sounds like something you could do with a macro :) 14:05
14:05 Celelibi left
masak jnthn: :) 14:05
jnthn: how do you mean?
pmichaud masak: yeah, when I was in college, "abstract data type" meant "any data type you could implement that wasn't part of the core language"
masak 'Tree' is the type, 'Branch' and 'Leaf' are the two constructors with two parameters and one parameter, respectively.
jnthn pmichaud: I think this is about the Haskell/ML meaning of it. 14:06
masak pmichaud: yeah. this is a narrower definition.
the nice thing, of course, is that you then use the constructors both for value construction and for value destructuring.
in theory, we have enough puzzle pieces in place to do destructuring with given/when.
14:07 drbean joined
masak I'd like to put together a nice reply showing that. 14:07
14:07 Celelibi joined
jnthn masak: I'm not quite sure exactly how to formulate it but it feels like if you had a pair of macros, one for the overall constructs and another for each of the deconstructors, provied the other one can see what's on the inside...you may be good. 14:07
masak (but I'd need more presence of mind than the current $work load affords me)
jnthn: interesting. 14:08
jnthn Oh, or maybe you can make it drop out of given/when :)
masak that part I'm not sure about.
jnthn Well, what you kinda want is a way to catch falling out of the given without having hit a when?
masak but it seems to me that smartmatching basically already does destructuring.
jnthn: no, definitely should be a compile-time thing. 14:09
jnthn ah
masak jnthn: answering the question "do we cover all the cases?"
jnthn Then you need to use something compile time, which is meta-programming or macros or something similar :)
masak and yes, I know that a general 'given' is basically Turing-complete. I'm talking about a much simpler kind. most of the 'given' statements on ADTs will be really simple, I think.
14:14 xilo left 14:23 Psyche^ joined 14:24 lustlife left, Patterner left, Psyche^ is now known as Patterner 14:26 SmokeMac_ joined
masak here, I put together a proof-of-concept: gist.github.com/masak/5213423 14:26
it doesn't quite get the type parameter 'a' in there. 14:27
but the ease with which this bit gets us a lot of nice things makes me hopeful.
maybe parameterized roles can step in there instead of subtypes, and get us the parameterized type, too.
14:29 SmokeMachine left 14:30 SmokeMachine joined, SmokeMac_ left
timotimo masak: isn't using hashes for that ridiculously overheady? 14:32
also, i was very confused to read "perl6 can do AST!" and thought "it had abstract syntax trees for ages!" ;)
(but then of course i realised that this refers to algebraic subtypes)
hm, seems to me it should have said "algebraic data types" instead? but what do i know! 14:33
moritz timotimo: yes, I thought so too
an "abstract data type" is just a type that you can't make objects of
timotimo oh 14:34
did i say abstract there?
14:34 JimmyZ left
moritz timotimo: you didn't; Philippe did 14:35
(on p6l)
timotimo ah. yes, i don't read that. i wonder if i should?
masak timotimo: oops. ADT. :)
14:36 xilo joined
masak gist fixed. :) 14:36
14:36 SmokeMac_ joined
timotimo hm, it's mostly github commit mails 14:38
moritz yes; used to be much higher traffic 14:39
timotimo at least they are not being discussed, because it would be easy to miss those discussions unless you are on the list and github already has a commit discussion function already
moritz but also high noise-to-signal ration
*ratio
14:39 SmokeMachine left, PacoAir left
moritz I just realize that the normal defintion is "signal to noise" and not "noise to signal", because a signal of 0 would make it undefined 14:40
whereas a noise of zero simply doesn't occur :-) 14:41
14:41 PacoAir joined
masak :P 14:42
jnthn :)
masak sure a noise of zero occurs. just not in engineering contexts.
14:43 sqirrel joined
masak here is another version, for those of you who don't like hashes: gist.github.com/masak/5213563 14:43
either take on ADTs has its own pros and cons. neither can be said to get it quite right, especially syntactically. 14:44
but it's an interesting thought experiment.
especially thinking about what we can do to make it easier to talk about sum types and ADTs.
felher Oeh, we are speaking of _Algebraic_ Data Types, right? Not Abstract Data Types?
masak that's the one! 14:45
yeah, my terminology is mussed up. sorry.
algebraic data types.
timotimo masak: how do you feel about building macros to create algebraic data types? 14:46
masak I'm all for it.
timotimo should i try?
masak yes, please.
timotimo okay, i'll have to experiment a bit, i suppose
it should serve as a so-so benchmark for how easy it is to get macros, i suppose :)
14:47 brrt left
timotimo hm, the first stumbling block: how do i do a repetition in a macro? 14:47
felher Uhh, algebraic data types via macros. How exciting :)
moritz timotimo: just like outside a macro
timotimo that's not what i meant :)
i mean something like quasi { class {{{ $classname }}} { has $.{{{ $names[0] }}}; has $.{{{ $names[1] }}}; ... } <- this kind of repetition 14:48
felher would really like to read backlog and join the discussion, but he has to do $work :/
bye folks.
masak o/
timotimo viel erfolg, felher :)
masak timotimo: you way overestimate where you can put unquotes in a quasi block. :) you're not the first. 14:49
timotimo hehe.
so, can i somehow use a metaclass to create a class in code without macros? 14:50
jnthn Sure
timotimo is that somewhere in the specs already?
masak that's what the compiler does, after all :)
I know it's in some on jnthn++'s talks...
jnthn Maybe but you may have an easier time following the example in one of my talks.
timotimo haha
yeah, sure. what's the title? 14:51
jnthn it's jnthn.net/papers/2012-gpw-meta-programming.pdf 14:52
timotimo aaw, no recording?
jnthn No, sadly not
I gave it at a couple of places but I don't think either did recording. 14:53
timotimo okular claims i've already skipped through the slides before
don't know if i actually paid enough attention
jnthn The section you'll find interesting here is the bit where I take a bunch of JSON and construct classes based on it. 14:54
timotimo oh, that seems deceptively easy
yes, i've just reached it
masak jnthn talks. they make things deceptively easy :)
timotimo masak: will macros be 'enhanced' to accept unquotes in more places or was my usage just way too optimistic? 14:55
jnthn masak: Well, making things complex would be too easy... :P
timotimo hah, with an "is parsed" macro i could even make it syntactically compatible to haskell data definitions :D 14:56
moritz quick, implement "is parsed" macros :-)
jnthn Well, I did to ParseShared refactor already that was a pre-req for them... :) 14:57
masak timotimo: it could go either way. TimToady has been mumbling about an unquotes refactor, which would expand the power of unquotes a bit. but we only got to the conceptual problems of those, not to an actual solutions. :) 14:58
solution*
timotimo right. so for something like my example, maybe an unhygienic/text macro would be more suitable 14:59
masak possibly.
which we don't implement yet.
Pugs does. :)
jnthn Note that text macros are easier than is parsed in a sense. 15:00
moritz I thought it was the other way round :-)
masak (note that "unhygienic" and "text" are distinct, but intersecting, types of macros)
moritz with "is parsed" you "just" have to hand control over to another regex, and then back to the current slang after that
15:01 SamuraiJack left
moritz but with macros that return text, you have to modify the current source code, which is a Str, which is immutable 15:01
masak right.
moritz++
those two are basically orthogonal.
jnthn It's not quite that bad. :)
TimToady and, in fact, sometimes you would like to combine them
masak aye. 15:02
jnthn Because $!target lives in ParseShared
And so you just need to update that...in theory. In practice, things further up may have the thing cached in a register. That's the tricker part I guess...
masak what if you apply a textual macro, update $!target, and then backtrack over the macro application? 15:03
masak wanted to end that sentence with "!!!?!?", but refrained :)
TimToady you basically need a stack of strings
you always parse the top of the stack, and when you hit the end, pop 15:04
masak oh, so backtracking over macros is part of the plan. gotcha.
TimToady yes, textual macros require reparse
masak looking forward to playing around with them, as soon as we find the suc^Whero who implements them! :D
TimToady otoh they don't require you to tell them what state they are at the end
jnthn runs and hides :) 15:05
masak because you get that from the parser that reparsed them?
TimToady nod
masak wow, that is so awesome.
FROGGS .oO( you need a bag of string, a paperclip and a chewing gum... )
*strings
-.-
TimToady whereas handing back a "preparsed" AST the parse has to be told what that means
masak *nod* 15:06
jnthn FROGGS: That sounds more like instructions for making a bong. Which may be a prereq for this... :P
TimToady which is why syntactic categories get involved
FROGGS hehe
masak jnthn: *lol*
FROGGS was thinking of mcgyver
moritz and now we get into syntactic category theory :-)
15:06 pmurias joined
TimToady I got enough grief for naming p5's lexer "toke.c" 15:06
masak TimToady: at some point we should have a deep talk about syntactic categories, spec refactors, and funny-looking Unicode sigils. :)
maybe not today, though. 15:07
15:07 am0c joined, SamuraiJack joined
pmurias FROGGS: have you seen github.com/fglock/Perlito/tree/mas...1-perlito? 15:07
TimToady well, I'm pretty much guaranteed to be stupider next week, so maybe you should attack then :)
masak TimToady: when I read toke.c, I can't help but think that the name isn't all that bad a description. :P
FROGGS pmurias: I see it right now...
masak TimToady: noted. let's aim for next week. :)
FROGGS pmurias: looks like an awesome testsuite for me :o) 15:08
masak funny thing with talking about macros with other communities: the first phase of the discussion is bound to be "oh, so *that's* what you guys mean by terms X, Y and Z. that explains why your factoring looks so bizzarre to me." 15:09
this has happened so far when I've been interacting with the Scala community, and with the Scheme community. 15:13
our approach looks strange-ish to them, and vice versa.
but the Scheme guys have some insight which I need to grok going forward. it seems important for hygiene. 15:14
moritz
.oO( consistently strange )
masak :P
timotimo gist.github.com/timo/5c8544ec4e8166041e86 - seems good so far?
15:15 SmokeMachine joined
masak timotimo: it seems to me that use of parens is a bit foreign to Perl. 15:16
and you could get rid of a lot of them by using commas instead.
timotimo "haskell compatible synatx", but yeah, good point.
masak something like 'adt Tree = Tree, Tree | Str'
timotimo yeah 15:17
masak and 'adt Tree[A] = Tree[A], Tree[A] | A'
timotimo the % modifier for regexes makes me so happy right now
masak feels easier on the eye.
yeah, % rocks :)
timotimo it rocks so hard!
hard like i suppose a neutron star would feel 15:18
will we ever find out what the hardness number of neutron stars is? :D
15:18 SmokeMac_ left
masak not to mention the rockness number. 15:19
timotimo this is strange. why are both parts of the alternation called 0? is that just "the first of 1 parts inside the alternation"? 15:20
timotimo donates more dots
moritz in (a)|(b), both parens produce matches in $0
since they can't both match at same time, why would they occupy different capture numbers? 15:21
TimToady if you want different behaviors, you should probably be using named captures instead anyway
timotimo oh, that's not what i meant. i should clean up my code and show it
i actually have a rule called "alternation", which isn't helpful :D
TimToady Who's on first? 15:22
masak yes, that's confusing levels. :)
timotimo hm. suggest a good name for the part after the = with the | in between for the type definition? 15:23
"definers"? :)
TimToady masak: otoh, if you wait till next week, I might have a morphine-induced visit to Xanadu, and come back with a completely different design for Perl 6 :) 15:24
15:25 woosley1 left
TimToady timotimo: the union? 15:25
15:25 kaleem left
timotimo tee hee 15:25
|| <.die("the union went on strike")>
masak TimToady: doesn't sound like such an unusual week. :P
masak hides
I meant the redesign, not the morphine-induced visits to Xanadu... :) 15:26
TimToady yes, would just as soon do without the morphine; makes me itch
colomon "In Xanadu did TimToady / A stately parser-dome decree / Where Mu, the sacred river, ran / Through classes measureless to man / Done to a sunless C"
*Down
masak no, leave "Done" in there :) 15:27
makes me feel better
colomon maybe it was a Freudian slip. 15:28
TimToady parser-DOM maybe :)
timotimo hm. what's the simplest way to force whitespace matches "between" matches of subrules? 15:29
something like params => 「a, b 」 from a rule like [ <ident> { @.typevars.push($0) }]* % ',' 15:30
i get ident => "a" and ident => "b" just fine. maybe i should just let it rest, because it'll work 15:31
15:32 arlinius joined
masak timotimo: another thing to think about is whether we wouldn't want to call out type parameters explicitly, because we do in other places. 15:35
timotimo: something like 'adt Tree[::A] = Tree[A], Tree[A] | A'
calling it out the first time is probably enough.
it's a kind of declaration.
a nice aspect of that is that it doesn't have to be a type. so you can do other things as well. 15:36
timotimo yes, i was just thinking about that
there's still some confusion for me. things like naming. if i have Tree, Tree, i'll have to translate that somehow into perl6. would i just have those as an array/tuple? 15:37
doesn't feel right to me
neither does $.Tree1 $.Tree2 and $.A
masak see my two examples.
timotimo so maybe something like adt Tree[::A] = Left=Tree[A], Right=Tree[A] | Cargo=A 15:38
masak you should be able to translate straight down to my second one, the one with classes.
timotimo looks again
masak timotimo: I think conceptually, it's a tuple, so they are unnamed. they get nice names during destructuring.
timotimo oh, i totally forgot how those adts actually work in haskell
i forgot about how you specify the name of the deconstructor 15:39
masak just like you specify the constructor.
that's the nice thing.
timotimo as always, it's best to know what you actually want to accomplish before trying to do anything
yes. that part was completely missing for half my examples 15:40
masak having the name of the constructor in the adt declaration is *much* more important than naming the parameters.
because those are what you then smartmatch/deconstruct on.
timotimo yes 15:41
i think i know where i thoughto'd
15:41 grondilu joined
masak hm, maybe 'data' is a nicer keyword for all this than 'adt'... :) 15:42
grondilu rn: $_ = "ffffooooo"; s:g/(.)+/$0.join()/; .say
p6eval rakudo 8fea53, niecza v24-35-g5c06e28: OUTPUT«ffffooooo␤»
timotimo yes. just like they did in haskell :)
grondilu was expecting(hoping) for "fo"
timotimo grondilu: not sure how you get to that? 15:43
rn: $_ = "ffffooooo"; s:g/(.)+/$0.uniq.join()/; .say
p6eval niecza v24-35-g5c06e28: OUTPUT«fo␤»
..rakudo 8fea53: OUTPUT«ffffooooo␤»
jnthn grondilu: $0 refers to the array of captured things
timotimo oh, whoops! :D 15:44
masak why does rakudo get that one wrong?
grondilu jnthn: oh, makes sense.
timotimo rn: $_ = "ffffooooo"; s:g/(.)+/$0.perl.say/; .say
p6eval rakudo 8fea53, niecza v24-35-g5c06e28: OUTPUT«f f f f o o o o o.perl.say␤»
jnthn masak: It may be right.
masak: Rakudo does === semantics in uniq, as per spec.
masak either Niecza or Rakudo gets it wrong.
timotimo er, that's not what i meant to do. i guess i need ()?
jnthn masak: iirc, Niecza does not. 15:45
timotimo rn: $_ = "ffffooooo"; s:g/(.)+/$0.perl().say()/; .say
p6eval niecza v24-35-g5c06e28: OUTPUT«(#<match from(0) to(1) text(f) pos([].list) named({}.hash)>, #<match from(1) to(2) text(f) pos([].list) named({}.hash)>, #<match from(2) to(3) text(f) pos([].list) named({}.hash)>, #<match from(3) to(4) text(f) pos([].list) named({}.hash)>, #<match from(4)…
..rakudo 8fea53: OUTPUT«(Match.new(orig => "ffffooooo", from => 0, to => 1, ast => Any, list => ().list, hash => EnumMap.new()), Match.new(orig => "ffffooooo", from => 1, to => 2, ast => Any, list => ().list, hash => EnumMap.new()), Match.new(orig => "ffffooooo", from => 2, to => 3, ast =…
jnthn masak: So it's probably doing "do they stringify the same"
masak jnthn: but === semantics for matches has eq semantics, surely?
in that case, why do the strings repeat?
timotimo masak: this should be correct, right? Tree[::A] = Branch Tree A, Tree A | Leaf A 15:46
jnthn masak: Are two matches that have a different structure but match the same string ===-equivalent?
timotimo oh, actually not.
jnthn masak: It's not obvious (to me) that we want === on Match objects to mean that. I'm fine if we go that way, just saying it may not be the whole picture.
timotimo Tree[::A] = Branch Tree[A], Tree[A] | Leaf A should be correct, though
masak jnthn: *nod* 15:47
15:47 kaare_ joined
masak timotimo: that looks nice :) 15:47
timotimo now if only it would parse :D
jnthn grondilu: If you want the first thing matched, $0[0] is probably enough. 15:48
timotimo oh. '[' ~ ']' .* will also require [] if .* matches "", so that would be the problem.
masak .+, then :) 15:49
timotimo gist.github.com/timo/5c8544ec4e8166041e86 - this is my current version. is the @.typevars thing a good idea to put there? 15:51
masak timotimo: looks cool. :) 15:52
timotimo so, do i do macro create_adt is parsed /<hs_adt>/? 15:53
masak yes, but 'is parsed' is NYI. 15:54
timotimo ... d'oh :)
do you already have a rough idea when you'll tackle that?
is there such a thing as parametric classes? or only parametric roles? 15:57
masak hey, I'm the AST macro guy. 15:58
you must have me confused with the textual macro guy.
timotimo hehe, ok
masak only parametric roles.
timotimo so if create_adt takes the definition as a string, it'll actually have to return a sub that creates instantiations of the roles or something like that?
16:00 cogno joined
masak well, I kinda liked your idea of creating classes on-the-fly using macros and the MOP. 16:05
you could actually get pretty far doing that with the current macro system in Rakudo... 16:06
timotimo i liked it, too and i still want to do it. but i don't yet see how to tackle type parameters in there
16:06 cogno left
masak ... you just don't get to use 'is parsed'. sorry. :/ 16:06
yeah, type parameters are an interesting problem there.
I'll think a bit about it.
timotimo cool :)
masak you've definitely helped sharpen my thoughts on this.
timotimo i think i'll do some AFK thinking for a few minutes
masak if I find some solution involving macros, I'll definitely include it in my email response to the guy. 16:07
16:07 zby_home_ joined
jnthn Can you describe the type parameters issue succinctly? 16:07
jnthn can't look at the whole ADT thing but may be able to help on that piece
timotimo jnthn: i want to have a sub where you put in a declaration like "Either[::A, ::B] = Left A | Right B" and you get classes Either, Left and Right out that you can use together kind of like you would in haskell
16:07 cogno joined
timotimo (later it would be cool to have it as an "is parsed" macro, so you can actually write something like "data Either[..] = ..." 16:08
but that's not the issue right now)
moritz well, you can't easily do that with a sub 16:10
because you need to modify the caller's lexpad to install the names
or at least put them into GLOBAL at compile time 16:11
and at runtime that's too late
jnthn moritz: ooc, what is the timing of the EXPORT sub being run when you use a module?
timotimo i was going to use the "package EXPORT::DEFAULT" thing and BEGIN blocks like suggested in jnthns talk slides
jnthn moritz: Does it get run, and then we look at EXPORT:: package to pull in symbols?
timotimo but yeah, i see why that wouldn't work if you use that package like a package
moritz jnthn: after the 'use' statement has been parsed, and before the next line is being parsed, iirc
timotimo as in use ADT; adt("Either = ...") 16:12
jnthn moritz: Yes, I meant a little more fine-grained. Do we still import any symbols at all in the "call EXPORT" mode?
timotimo maybe it'd have to return a package or something?
moritz jnthn: I don't think so
16:13 SamuraiJack_ joined
jnthn moritz: OK. I guess what I'm really wondering is what the API is for the EXPORT sub to actually specify what should get installed :) 16:13
16:13 SamuraiJack left
moritz jnthn: there's none yet 16:13
jnthn Ah. OK
'cus if there was you could write
moritz basically EXPORT subs were a quick hack to get 'use lib ...;' working :-)
jnthn use ADT (...some expression to specify it here);
timotimo jnthn: oh, that's a good point! 16:14
jnthn And it would build the requires things in the module's EXPORT and hand them back :)
where "hand them back" means "specify them for installation" :)
moritz maybe EXPORT should just return a hash
or list of Pairs or so
jnthn Something that works like a hash feels fine to me 16:15
Particularly 'cus then you could instead return a Stash :)
FROGGS what is :s in '<sym> :s <xblock>' ?
moritz that was in the back of my mind too
timotimo how does the EXPORT thing work? do i put a sub EXPORT into my package and it'll be called by the use statement?
moritz FROGGS: it enables sigspace
16:15 cogno left
jnthn sub EXPORT() { $*OS ~~ /Win32/ ?? WindowsThings !! OtherThings } 16:15
moritz (ie whitespace implicitly calls the <.ws> routine)
kresike bye folks 16:16
FROGGS moritz: thanks
moritz timotimo: yes. Take a look at lib/lib.pm6 in rakudo
16:16 kresike left
moritz currently you have to put EXPORT after the module though 16:16
timotimo and that's just a barely working hack at the moment?
moritz so file A.pm: module A { ... }; our sub EXPORT(*@args) { }
timotimo barely working == just enough to make this code work?
moritz timotimo: correct
16:17 cogno joined
timotimo right. 16:17
moritz that would be an interesting thing to expand though
and not too much black magic required
timotimo interesting ... how complex is this issue?
are the specs clear yet, except for the return thing mentioned above?
moritz no, there's not much specs 16:18
but just implementing the "EXPORT returns a hash, and the caller installs the pairs into the lexpad" would be very useful
16:19 gdey joined
moritz src/Perl6/Grammar.pm line 1244 16:19
timotimo i would have to work on EXPORTHOW?
oh, in the grammar 16:20
all right then
jnthn No EXPORTHOW seems unrelated to this.
16:20 roland_ joined
timotimo i suppose everything i'll have to know to make the installation of symbols work is in this do_import method already? 16:20
moritz timotimo: not quite (more) 16:21
timotimo: Perl6::World has a 'method import', which does all the hard work
method import($/, $package, $source_package_name) {
timotimo ah, right, i see that now.
16:21 cogno left
moritz you'd just have to modify it to accept a hash of things to import, rather than $package 16:21
timotimo i suppose do_import is the only caller of the import method? 16:22
moritz method import also does my %stash := $package.WHO; and then works on %stash
timotimo: correct
timotimo seems like a doable thing
moritz so you to change the caller locations to do $*W.import($/, $package.WHO, ...) instead of $*W.import($/, $package)
timotimo so i'll pretty much just have to move the .WHO out of import and into do_import for most cases
moritz yes, plus one other bit 16:23
you have to make sure that Perl 6 types and NQP types aren't conflated
ie sub EXPORT will return a Perl 6 hash
timotimo nqp::decont will do it for me, right?
moritz but ig might be that $*W.import wants an NQP hash (I'm not quite sure here)
no
you'll need to access the $!storage attribute from EnumMap (which is a parten class of Hash) 16:24
*parent
timotimo OK, i'll investigate that later. first i'll have to errands. perhaps i'll commute to my hackspace to work, too :)
16:36 PacoAir left
dalek kudo/tmp_highfive: 2db8483 | (Tobias Leich)++ | src/Perl6/ (3 files):
if/unless-conditions ok
16:37
kudo/tmp_highfive: 0633b5a | (Tobias Leich)++ | src/Perl6/P5Grammar.pm:
changed last accourance of pblock to sblock, so that else-blocks are fine now
16:43
masak sent a reply to Philippe on p6l 16:46
16:47 SunilJoshi joined
dalek kudo/tmp_highfive: 8956de4 | (Tobias Leich)++ | src/Perl6/P5Grammar.pm:
remove required whitespace to allow proper elsif-blocks
16:50
census My deepest apologies if this post is improper. Does anybody know any alternatives to TOR? 16:55
16:58 dwoldrich joined
TimToady PENGUIN? 16:58
BAIN? 16:59
masak census: you might get fuller answers if you ask where they actually do such stuff. :)
census and which IRC channel would that be? I did not know there is a TOR channel. I tried /msg alis list *TOR*
masak census: freenode tells me there's a #tor channel at irc.oftc.net 17:00
census is that the same thing as /join #tor here? I just did that and wound up at ##nortor. Or is that the xchat -> #perl-help. I tried #tor in x-chat and did not find a room 17:01
17:02 sftp_ left, sftp_ joined 17:05 SmokeMachine left, rindolf left 17:06 SmokeMachine joined
masak census: you need to /join #tor on the correct server, which is irc.oftc.net 17:08
census: each server has its own set of channels.
17:11 FROGGS left
census masak: can i do that in xchat? should I Pm you? I don't want to upset anybody here. 17:13
masak I'm pretty sure you can do that in xchat. but I don't know more, sorry. you can probably find xchat documentation easily if you look. 17:14
17:22 cogno joined
census masak: thanks! I figured out the xchat thing 17:24
17:24 SunilJoshi left, SunilJoshi joined 17:25 cognominal joined 17:26 domidumont left
masak census++ 17:29
17:31 daxim left
masak the other day I stumbled over these nice slides by GvR: www.dropbox.com/s/xknbe58zcvjhzhv/...n2013.pptx 17:32
I think people interested in async and threading and event loops will want to read that one.
17:43 cog_ joined
jnthn beer, dinner & 17:44
timotimo hm, i meant to commute, but instead i watched jnthns talk "exploring perl6 through its modules", which i enjoyed quite a bit 17:45
so i don't really regret procrastinating :P 17:46
17:47 PacoAir joined 17:48 domidumont joined 17:50 Chillance joined 17:51 cog_ left 17:53 FROGGS[mobile] joined
masak beer, dinner & 18:01
18:02 SunilJoshi left
timotimo .o(is beer the key to successful perl6 development? or maybe dinner?) 18:05
moritz both, I thikn
timotimo: are you still planning to look into the &EXPORT stuff? 18:06
if not, I might take a look now
timotimo yes, i would like to do it
FROGGS[mobile] I wish I had beer 18:12
timotimo i don't actually like beer very much :| 18:13
moritz neither
FROGGS[mobile] I drink beer like ten times a year
moritz but I've seen it as an essential ingredient in jnthn's hacking habits :-)
FROGGS[mobile] it is like chocolate for me... there are days when you need it 18:14
raiph moritz: do you have any of the web log part of your p6 ilbot working? 18:15
moritz raiph: I have a script working that records all the data that _ilbot collects, but it doesn't yet write them into a database
sorear food is a necessary component in the operation of the masak. 18:16
raiph food is kinda necessary for me too
18:18 SunilJoshi joined 18:19 SunilJoshi left
moritz oh, one part of the data acquisition is missing 18:20
I need today's date, but in UTC, not localtime
FROGGS[mobile] what about UGT? *g* 18:21
18:21 cog_ joined
FROGGS[mobile] everytime somebody says morning, the time get set to 8 o'clock 18:22
moritz ... in every time zone 18:23
timotimo universal good time? 18:24
geekosaur "greeting" 18:25
timotimo ah, right 18:26
FROGGS[mobile] timotimo: since when is 8 o'clock good?? 18:27
timotimo i was wondering that same thing!
18:28 spider-mario joined
timotimo moritz: is {if return_value_of_export_sub { do imports }} sensible? or should i check that it's actually a hash and discard every other kind of value? 18:28
because use lib 'foo/bar' returns the @*INC 'accidentally' :) 18:29
18:32 SamuraiJack_ left 18:33 SmokeMachine left 18:41 SmokeMachine joined
moritz timotimo: just fix lib/lib.pm6 to return an empty list or hash 18:41
pmichaud or Nil 18:42
timotimo i added "return;", so i suppose that returns Nil?
moritz and if it's not ~~ Hash, coerce to Hash maybe
or maybe not
moritz has no idea 18:43
timotimo i think i'm doing this wrong, i tried to nqp::getattr(%result, EnumMap, '$!storage'), was that wrong?
pmichaud depends on what you do with it.
timotimo Can not get attribute '$!storage' declared in class 'NQPMu' with this object - not sure where the NQPMu comes from
pmichaud sounds like %result isn't bound. 18:44
timotimo interesting. i did that inside if %result { ... }
timotimo recompiles just to be sure
pmichaud either that, or it needs to be decontainerized first.
timotimo that may actually be the case
moritz it likely needs to
pmichaud but probably not that, since hashes aren't yet held in containers.
moritz well, I'd store the result from EXPORT in a scalar container 18:45
because it's not a NQP hash
so storing it in a hash at nqp level would be confusing, IMHO
pmichaud could be, yes.
timotimo good point
pmichaud I'm afk again, car repair :-( 18:46
moritz github.com/moritz/ilbot6
timotimo okay, saying the thing i have in there as the result before decontainerisation gives me a stringification of the hash i returned from the method, so that partially works 18:49
but i get the NQPMu error again, same as before
oh, but this time i actually nqp::decont it before passing it to getattr 18:51
perhaps i have to $*W.find_symbol(['EnumMap']) instead? 18:52
that could make sense, because it comes from the core setting
moritz yes, you need to do that 18:54
18:57 colomon left 18:58 census left 18:59 roland_ left
timotimo hum. Error while compiling block : Error while compiling op call: Error while compiling block : Error while compiling op bind: Error while compiling op call: Null PMC access in find_method('handle') 19:05
i'm not sure how i can trace that to the location it originated from 19:06
the traceback points to as_post from QAST.nqp from stage 2 :|
19:07 cog_ left 19:08 cogno left
moritz it means something wrong was inserted into the QAST tree 19:08
it's hard to be more specific :( 19:09
timotimo tips on how to track it down?
moritz it seems to come from src/QAST/Compiler.nqp line 348 19:11
19:11 cognominal left
moritz huh, weird 19:11
debug by coment out potentially offensive statements :(
19:11 SmokeMac_ joined 19:14 cog_ joined 19:15 SmokeMachine left, anocelot joined, cogno joined 19:16 cognominal joined
timotimo hmm. 19:17
19:18 FROGGS joined 19:20 araujo left
timotimo oh, weeeird, i was looking at the completely wrong piece of code 19:21
so perhaps the thing i imported was on the wrong layer of ... stuff 19:23
moritz: seems like it's time for you to take over :|
github.com/timo/rakudo/tree/EXPORT_hash - have a look. here's also a test file for lib/ and a test file to run 19:25
gist.github.com/timo/08d612edbe561366caf8
the code in the .t file causes that error. i suppose the yoink sub is somehow getting munged along the way 19:26
19:28 kivutar left
FROGGS say { use v5; if( 0 ) { 42 } elsif( 21 ) { 7 } }() # gives '7' locally 19:31
sorear you have a use v5? and it makes if( work ? 19:32
amazing. who do I ++
FROGGS :o) 19:33
sorear: see github.com/rakudo/rakudo/tree/tmp_highfive
timotimo i am amused by the name of the branch 19:34
FROGGS timotimo: well, after the 'categorically-better' branch I had to call it somehow cool
sorear FROGGS++ 19:35
FROGGS it is tmp because it is just an experiment, but if it tends to go in the right direction I'll clean it up, and create proper commits
sorear: thanks
timotimo seems pretty cool, although i don't have very interest in perl5. it's obviously nice to have! :) 19:36
more than nice
twice as nice!
moritz timotimo: I'm taking a look now 19:37
19:37 grondilu left 19:38 sqirrel left
moritz r: say {}.WHAT 19:38
p6eval rakudo 8fea53: OUTPUT«(Hash)␤»
FROGGS timotimo: I'm doing it so one is able to use pure perl 5 modules, and I hope the number of supported modules is big 19:39
pmurias jnthn: can I move the parrot specific nqp test to t/parrot? 19:40
19:40 cognominal left, cogno left, cog_ left 19:42 cog_ joined
moritz timotimo: you don't even have an EXPORT sub in there, do you? 19:43
19:43 cogno joined, cognominal joined
timotimo hold on, i don't? 19:43
i copypasted the wrong thing, sorry 19:44
moritz gist.github.com/timo/08d612edbe561366caf8 I don't see any sub EXPORT
timotimo gist updated
19:45 fhelmberger left
moritz perlpunks.de/paste/show/514b6372.1a50.2f3 19:45
is that consistent with your observations? 19:46
timotimo huh. hold on.
indeed. this surprises me. 19:47
if i write return ( Flurb => Frob ).hash instead, i get the other weirdness 19:48
moritz ok 19:51
the difference is a container 19:52
so there's nqp::p6decont missing
timotimo: want to give me commit access to your fork?
timotimo mhm. i had it in there at one point, but i got an error so i tried to shotgun-debug it away
sure can
there you go 19:53
moritz Error while compiling op p6decont: No registered operation handler for 'p6decont'
ok, can't use nqp::p6decont in Grammar.pm
timotimo actually i wrote nqp::decont, so maybe *that* was the mistake? 19:55
moritz maybe
timotimo it seems like both of those exist, though. interesting.
moritz I'm trying wth the pir equivalent
that's a ugly, but it'll go away once jnthn++ unifies decont and p6decont 19:56
timotimo sounds okay 19:57
moritz ... except that it doesn't work :(
19:57 zby_home_ left
timotimo maybe our assumptions are wrong? 19:57
moritz timotimo: I've managed to run it without errors now 20:04
I've mostly removed debugging statements :-)
timotimo did you push it yet? 20:06
i don't see it
moritz no
I accidentally triggered a recompile while trying to test it again
so, you need to have a bit more patience :-) 20:07
timotimo sure, no problem
i'm thankful for your help. i wouldn't have been able to come up with PIR code by myself
moritz I'm not using PIR code right now 20:09
I've reverted that part, because it didn't work
I guess the ops in questions aren't loaded yet, or I simply did something wrong
timotimo oh, ok 20:10
moritz ok, this is what I get
the import happens without error 20:11
but when using the symbol, I get some trouble
20:11 spider-mario left
moritz make -j4 && ./perl6 -I. -e 'use Frob <foo>; say ::.keys' 20:11
<debug output>
!UNIT_MARKER GLOBALish EXPORT $?PACKAGE ::?PACKAGE $_ $/ $! Flurb $=pod
it imported symbol Flurb
timotimo yes, that's what i had at the end, too
moritz and when I use ::<Flurb>, the symbol is intact 20:12
timotimo oh, yes it is 20:13
moritz so, partial success 20:14
20:14 domidumont left
timotimo so it's some internal error that's happening to show up here? something about import that i didn't understand properly? 20:14
moritz well, somehow the symbol works fine in the runtime lexpad, but not in the copiler's symbol table
20:17 abdullah joined
abdullah wow there's a lot of people here 20:17
timotimo maybe something going wrong with the %to_install in world? 20:18
or perhaps the $_.key from the hash would have to be unboxed before putting it into the import method? 20:19
moritz no, $!storage is a parrot hash, and thus has parrot Strings in them 20:20
timotimo OK 20:22
moritz \o/ 20:23
$ cat Frob.pm6
my class Frob { method Str() { 'I am frobbed' }
};
sub EXPORT(|) { ( Flurb => Frob, '&exportedsub' => sub () { say 42 } ).hash
}
./perl6 -I. -e 'use Frob <foo>; exportedsub()'
42
so I've managed to export a sub and call it without any indirection 20:24
moritz pushes
timotimo oh yay!
20:26 census joined
timotimo i'll run spectests with that, i guess 20:26
do you think it's ready to be merged after that? or is there something important missing? 20:27
(more removal of debug cruft)
moritz well, it shouldn't cause internal errors when exporting and referencing non-subs 20:30
20:30 thou joined 20:31 rindolf joined
timotimo oh, is that what caused the problem? 20:31
moritz yes
your example exported ints
mine a type
timotimo right. okay that's not cool.
moritz notices he doesn't know anymore how imports and exports work 20:43
$ ./perl6 -e 'my module A { my class B is export { } }; import A; say B'
(B)
ok, that works
but where did it find the symbol B to import? 20:44
$ ./perl6 -e 'my module A { my class B is export { } }; say A.WHO.perl'
("EXPORT" => EXPORT).hash
20:44 ggoebel_ joined
moritz ah, I need to got to EXPORT.WHO 20:45
./perl6 -e 'my module A { my class B is export { } }; say A.WHO<EXPORT>.WHO<DEFAULT>.WHO.keys'
B
that's where I finally found it
:-)
ggoebel_ is it possible to build rakudo on win64 with icu? 20:47
timotimo moritz: i do not understand :D
moritz timotimo: I was trying to reconstruct how the export tags work 20:48
because importing by tags work
so I want to know what the difference is
r: my module A { my class B is export { } }; say A.WHO<EXPORT>.WHO<DEFAULT>.WHO.WHAT 20:49
p6eval rakudo 8fea53: OUTPUT«(Stash)␤»
20:50 cog_ left 20:52 cog_ joined
timotimo oh, hm 20:52
moritz r: say Stash ~~ Hash
p6eval rakudo 8fea53: OUTPUT«True␤»
timotimo hm. maybe the thing that gets installed has to be wrapped in some way? 20:57
i have no idea how to make this work :(
20:57 rindolf left
timotimo i was looking forward to doing this when someone claimed it wasn't too complicated and i enjoy being mentioned in the release announcements, but this is quite a bit out of my reach :| 20:57
20:59 am0c left, araujo joined, araujo left, araujo joined 21:02 skids left
timotimo i guess i'll divert my efforts to trying to figure out the best way to create those algebraic datatypes classes/roles/whatever it will end up being 21:05
21:06 gdey left
arnsholt I'm reading a Steve Yegge blog post, and came across this little gem: "And Perl 6 probably won't ever run on the JVM." =D 21:06
A post from 2007, mind
21:06 baest_ joined 21:07 cognominal left
_sri haha 21:07
21:07 baest left
timotimo hah, it's amusing in hindsight 21:09
so, will one of us celebratorily hold the first version of rakudo on the jvm up to his nose, maybe burnt to one of those old timey cd-roms, or perhaps a floppy disk? 21:10
_sri a mountain of floppy disks
timotimo you don't have to pack the java vm along with it 21:11
21:11 cog_ left, cogno left
sorear will still take more than one 21:16
diakopter you're a mountain of floppies 21:17
ggoebel_ any hints on compiling rakudo on windows 8 x64 with vc++ 11 (vs2012) and icu? 21:20
parrot doesn't seem to autodetect icu on windows. 21:21
moritz I think it just looks for an icu-config executable
timotimo okay, we could hold up a zipdisk to his nose, though
moritz is that in %PATH%?
ggoebel_ does rakudo pass along --icushared and --icuheaders to parrot if provided?
and is there a specific version of icu I should be trying to use?
when I try icu v51... I wind up with the error unresolved external symbols... _u_charFromName_51 21:24
etc
I don't think icu on windows supplies an icu-config.exe
nope
masak is back 21:25
FROGGS ggoebel_: a batch file perhaps?
timotimo hello masak
if you didn't read backlog yet, moritz and me tried making sub EXPORT return a hash and have that imported properly, but we failed ... except for classes it seems 21:26
moritz masak: how's the t2 review coming along?
*nag*
exporting routines works
ggoebel_ FROGGS: nope. if I use the binary distro or compile from source, I wind up with a bin64 directory... with a bunch of exe's and dll's but no icu-config.*
moritz exporting classes doesn't
ggoebel_ which is why I tried --icushared and --ichheaders (per parrot docs)
timotimo ah, routines and not classes, ok 21:27
ggoebel_ anyone other than jnthn run rakudo on win?
masak moritz: it's coming along slower than I thought. and it's not the priority for tonight.
timotimo and also ... integers don't work and probably a host of other things won't work?
masak moritz: I just remembered that it's Rakudo release night.
timotimo oh!
so no EXPORT hash returning in 2012.03 rakudo :(
masak so, I suggest... we cut a release of Rakudo, the compiler :) 21:28
ggoebel_ moritz: yes, the .../icu/bin64 is in the %PATH%
moritz hands masak a sledge scalpel
masak timotimo: don't worry, there's another release next month.
moritz ggoebel_: then I have no idea, sorry 21:29
ggoebel_ s'ok
masak moritz: there's a weekend coming up. I hope to focus on t2 then. 21:30
21:30 kaare_ left
masak thanks for nagging. it helps. :) 21:30
21:36 imarcusthis joined
moritz
.oO( nag nag nagging on heaven's doors )
21:38
timotimo is masak's apartment/house that amazing? :)
moritz has never been there :( 21:39
masak hands moritz unconditional rights to come crash at his place whenever :) 21:41
I have the square metrage, that's for sure.
moritz masak: tusend takk. Now I just need to arrange the travel somehow :-) 21:42
masak yeah, no international portal technology yet. 21:43
also, #perl6, what's up with not signing up for April release manager? 21:44
don't make me scowl at you. you know neither of us would like that. ;)
moritz let's try that in a more positive way 21:46
21:46 noxgirl left
moritz hey, who wants to do tha Rakudo compiler release in April? 21:46
fame and glory awaits you. All you have to do is follow the rather simple instructions in the release guide
and of course you need a machine on which can test and build rakudo. But you should already have that. 21:47
masak .oO( preferably a computing machine )
moritz if you have a coffee machine on which you can build rakudo, that's fine too
21:48 sivoais left
vaelxon oh, oh, me! just one question though...what's a compiler and how does it relate to raccoons? 21:48
masak they're basically the same.
vaelxon so by release...you mean back into the forest?
21:48 sivoais joined, autumn joined
masak yeah. we tag the raccoon, and then we release it in its natural habitat. 21:49
all tests pass here. najs.
I've decided to call this month's compiler release 'Singapore'.
because it's a nice place and I don't have a better idea.
timotimo so, any ideas how to make those algebraic datatypes useful at compiletime to give errors like "you didn't cover every case of this type!"? ;) 21:52
masak that's the 1e6 USD question.
moritz 1) turn rakudo into a Haskell compiler 2) profit 21:53
masak I for one think we can have our cake and not eat monads.
moritz should really bake some monad cake 21:54
timotimo well, we don't have to go quite as far, though?
moritz but now: time for bed
timotimo good night, moritz!
moritz \~
sorear masak: are you sure it's not 1e6 AUD or CAD? 21:55
masak sleep well, moritz. dream of monad cakes.
timotimo .o(it can be done with a macro!)
masak timotimo: I have a feeling it can, yes.
sorear: could also be en.wikipedia.org/wiki/Dollar_(disambiguation) 21:56
sorear masak: a basic 23 tree: date Tree t = Leaf t | Branch (Tree t) (Tree t) (Maybe (Tree t))
masak: type level integers: data Z; data S x 21:57
masak: tree example in GADT syntax: data Tree t where Leaf :: t -> Tree t ; Branch :: Tree t -> Tree t -> Maybe (Tree t) -> Tree t
21:58 bluescreen10 left
sorear masak: my favorite example of an actually somewhat useful GADT: data Tree level t where Leaf :: t -> Tree Z t ; Branch :: Tree l t -> Tree l t -> Maybe (Tree l t) -> Tree (S l) t 21:58
enforce balancedness at the type level. algorithms which break balancedness won't type check. 21:59
masak huh.
FROGGS thinks he is in the wrong channel 22:01
masak FROGGS: no, this is today's topic :) 22:02
dalek kudo/nom: 0dd091c | masak++ | docs/announce/2013.03.md:
[docs/announce/2013.03.md] pick release name

Release, I dub thee Singapore.
kudo/nom: 1a96430 | masak++ | docs/announce/2013.03.md:
[announce/2013.03.md] some formatting

Indenting the text that way won't work. It means
  <pre> formatting in Markdown. Not what we want.
22:02 xilo left
FROGGS masak: ya, it is just that I dont understand a word 22:03
masak FROGGS: did you see the discussion from earlier today?
FROGGS: specifically, my two gists.
FROGGS no
masak wow, stuff sure happened this month. 22:04
pmurias re GADT adding all those crazy types to a dynamicly typed language seems a bit strange ;)
masak pmurias: yeah.
that was my thought as well.
ADTs I can see, but not GADTs.
FROGGS: irclog.perlgeek.de/perl6/2013-03-21#i_6613207 irclog.perlgeek.de/perl6/2013-03-21#i_6613334 22:05
sorear perl 6 is not a dynamically typed language, though
GADTs might be compatible with gradual typing
pmichaud well, TMTOWTDI means that you should be able to create a B&D language too. :-) 22:06
sorear if gradual typing can be made to work at all
have we figured out yet how to make gradual typing and multiple inheritance coexist?
pmichaud masak: eta to release, ooc? 22:07
masak sorear: what's the problem there?
pmichaud: I'm in release mode now. we're talking ~1 h.
pmichaud I was thinking of applying moritz's sink patch
sorear masak: gradual typing in general assumes that a Str can never also be an Int
masak pmichaud: go right ahead.
sorear my Str $x; my Int $y = $x
pmichaud I just need to spectest it also.
sorear gradual typing wants to fail that at compile time 22:08
masak sorear: I see the problem.
pmichaud: take your time. I'll get us ready in the meantime. 22:09
pmichaud compiling and spectesting it now.
pmurias is the gradual typing part of Perl 6 specced or is the approach "add type constraints and maybe the compiler will find some errors at compile type" 22:10
?
pmichaud actually.... never mind, I think I won't apply the patch yet. 22:11
masak pmichaud: ok, so release first and patch later? 22:12
pmichaud yeah. IMO, $list.sink should still be eager.
it's only the implicit sinks that shouldn't sink a scalar.
masak oh well. it's in RT. 22:13
pmichaud right. 22:14
and the bug has already existed for a couple of months.
jnthn back 22:15
pmichaud jnthn: o/
22:16 FROGGS[mobile] left
pmichaud spectests the patch anyway, just to see what happens. 22:17
jnthn views Perl 6 as gradually typed rather than dynamically typed these days, fwiw. 22:18
The MI issue is ugly. 22:19
22:19 xilo joined
jnthn waves hands and happily lets people get on with writing type constraints and getting the errors they hoped for at compile time. :) 22:19
ggoebel_ jnthn: is it possible to compile rakudo on parrot on win64 with icu? 22:20
jnthn ggoebel_: In theory. In practice, I haven't tried it in a long time. Last time I tried I failed to figure out the required Configure options.
ggoebel_ okay... thx 22:21
jnthn ggoebel_: Once upon a time I spent a lot of time getting Parrot/ICU working together on Windows. Then they kicked ICU out of the reop and lost all that. I don't ahve the motivation to figure it out again.
dalek kudo/nom: 48a2c26 | masak++ | docs/announce/2013.03.md:
[announce/2013.03.md] exerpt of changelog added
22:22 census left
masak Couldn't replace leap-second-dates at tools/update-tai-utc.pl line 29. 22:22
ISTR tadzik got this error last month, too. 22:23
22:23 PacoAir left
timotimo masak: feel like changing q{Helpful error if you write "else if" instead of "elsif"} into q{Helpful error if you write "else if" or "elif" instead of "elsif"}? 22:25
pmichaud In github.com/rakudo/rakudo/commit/c4083c42f2e63, why do we have checks with both :op<defined> and :op<isconcrete> ? 22:26
i.e., why check both? (I've slightly forgotten how :op<defined> differs from :op<isconcrete>, I think) 22:27
masak timotimo: ok.
jnthn pmichaud: isconcrete is always the low level "is this a type object" thing 22:28
pmichaud yeah, got that one. :)
masak why does this replacement fail? github.com/rakudo/rakudo/blob/nom/...utc.pl#L29
jnthn pmichaud: defined relates to the Parrot v-table defined, and maps to the HLL idea of defined.
timotimo the pythonist in me is pleased :P
pmichaud jnthn: so, the isconcrete is just intended as a hotpath shortcut?
masak I'm curious to know why update-tai-utc.pl fails nowadays.
jnthn pmichaud: Well, they're different questions 22:29
pmichaud: Wait, are we talking about sink here?
pmichaud yes.
jnthn Ah. Then in that case yes, checking isconcrete is *very* cheap
pmichaud and we assume we'll never have a defined type object :)
jnthn dihwidt :P 22:30
dalek kudo/nom: e2ce160 | masak++ | docs/ (2 files):
[docs] should be "elsif" or "elif"

We handle both. timotimo++
jnthn I hope that meant "else if" or "elif" 22:31
elsif is the valid one :P
masak oh dang. 22:32
'git commit --amen...' oh dang :)
jnthn PUSH --FORCE!
:P
masak but yes, the patch does the right thing. 22:33
jnthn :)
Yes, I noticed that. :)
huf ah, just enough to confuse any wandering nuns
arnsholt Nuns? 22:34
huf yes, for hysterical raisins, things like this are done to mislead wandering nuns.
masak I'm not a wandering nun, and even I'm confused. 22:35
huf maybe you are, and just *very* confused.
vaelxon I thought that was how #perl6 was supposed to make you feel...
dalek kudo/nom: 7ed6a50 | masak++ | docs/announce/2013.03.md:
[announce/2013.03.md] these are the contributors

A fine bunch.
huf (btw, no idea about the origin of the phrase with the nuns, i've tried to find it multiple times but always failed)
masak vaelxon: no, confusion is strictly a secondary effect. 22:36
huf: the original source has probably been lost due to wandering nuns.
huf masak: most likely.
it's stored in a nun-indexable location
masak *groan* 22:37
pmichaud actually, the moritz patch in the RT ticket doesn't seem to resolve the original problem.
masak huh.
I hold moritz patches to a higher standard than that... :)
pmichaud :)
> my $c = [[1], [2], [3]].map({$_}); $c.unshift(47); say $c;
47
masak :(
pmichaud the reason is that currently $c.unshift(47) returns the bare list, not $c 22:38
timotimo "git commit --amen" is an amusing thing in its own right, i find
it's like --sign-off
git can-i-get-an-amen?
pmichaud so the result is the same as $c.unshift(47).sink() and the invocant passed to .sink is the C<self> (de-containerized) coming back from unshift. 22:39
dalek kudo/nom: 337f9e9 | masak++ | docs/release_guide.pod:
[docs/release_guide.pod] move current release north
pmichaud so, we can update .unshift and friends to keep the container, or we can figure out a different approach.
dalek ast: b43c99f | pmichaud++ | S04-statements/sink.t:
Add S04-statements/sink.t as a place to hold sink tests, starting with RT #117235.
22:40
p: bbe55b4 | masak++ | docs/release_guide.pod:
[docs/release_guide.pod] formatting fix
22:42
masak the Parrot release, by the rules of nqp's release guide, does not need to be bumped from 4.10
pmichaud yeah, no bump this month. 22:43
and there's not a 5.2 out yet anyway, afaik
masak right.
dalek p: 48de0ee | masak++ | VERSION:
bump VERSION to 2013.03
22:44
masak github.com/perl6/nqp/blob/master/d..._guide.pod still contains instructions about "Github's download area". that's wrong now and needs to change. 22:45
pmichaud: how is uploading done these days?
pmichaud scp to [email@hidden.address] 22:46
see item #15 in the release guide. :)
er, in the *rakudo* release guide. 22:47
masak yeah, it's correct in the Rakudo release guide.
not in the NQP one.
pmichaud that detail might be missing from the nqp release guide :/
masak (which temporally happens before the Rakudo one)
pmichaud you patch or me?
masak I can do it.
pmichaud masak++ 22:48
masak but first I need to figure out how to log in to rakudo.org... :)
was it with an ssh key?
pmichaud it's normally by ssh key, yes.
masak yeah, found it.
...and I'm in. nice :)
pmichaud dinnertime here -- bbl 22:50
dalek p: 434dfc3 | masak++ | docs/release_guide.pod:
[docs/release_guide.pod] fix upload instructions
22:51
vaelxon is there any kind of socket support in any current perl 6 implementation?
22:51 Liz joined
pmichaud vaelxon: Rakudo has some socket support -- IO::Socket and IO::Socket::INET 22:52
22:52 Liz is now known as Guest41869
vaelxon pmichaud: thanks, I'll go check it out 22:52
timotimo rakudo is getting zeromq support, too! 22:53
it's in the early stages and currently on a tiny bit of a hiatus, though
but it's not terribly hard to contribute i've found out
vaelxon haven't heard of it, but the wikipedia article suggests I should learn more about it 22:54
22:55 kurahaupo joined
timotimo it may be interesting or absolutely wrong for your use case 22:55
it can only connect to other zeromq sockets, for instance, but it makes rather complicated network topologies more comfortable to handle 22:56
vaelxon use case is a server streaming bidirectionally to and from any number of javascript clients over websockets 22:57
sorear then you're in trouble, because there's no select() IIRC
(is this still right?)
timotimo sorear: why is it hard to just plop select in there?
sorear some combination of portability and tuits 22:58
timotimo i should feel bad for only caring about linux, i think. 22:59
pmichaud I wonder if (1) Sockets should be added to the features page
(2) if the features page should have links to the relevant p6doc pages
vaelxon yes, yes, please! I have a dozen questions about specifics just like this..."does rakudo do X usably yet?" 23:01
arnsholt Sounds like a good idea to me
dalek kudo/nom: e5349c0 | masak++ | tools/build/NQP_REVISION:
[release] bump VERSION
kudo/nom: 0ca6e54 | masak++ | docs/release_guide.pod:
[docs/release_guide.pod] fix small thinko
vaelxon does this work?: github.com/tadzik/IO-Select/ 23:07
23:08 census joined
timotimo the parrot version mentioned there is from Wed Aug 24 22:23:15 2011 23:09
vaelxon that's a "no", then?
timotimo so ... either this still works because it just introduced something that never needed to be touched again or it bitrotted
i say: try it and see, i suppose
it comes with tests
23:10 LlamaRider joined, preflex left, Util_ left, preflex_ joined, Util joined
pmichaud I don't think that IO-Select was ever merged into the parrot master. 23:10
I could be wrong about that, though.
23:11 preflex_ is now known as preflex
timotimo hm. which git command will let me check that? cherry? 23:11
pmichaud masak: 0ca6e5444e looks wrong to me 23:12
you may have over thinkoed your thinko
masak takes a second look 23:14
pmichaud step 9 is committing VERSION, not NQP_REVISION
dalek kudo/nom: 6d7c9cc | masak++ | docs/release_guide.pod:
Revert "[docs/release_guide.pod] fix small thinko"

This reverts commit 0ca6e5444e732c7c3ba458bf396859d907b01bff.
23:15
masak yeah. was probably just reading it bleary-eyed :)
pmichaud++
23:18 DarthGandalf joined 23:19 colomon joined 23:28 Guest41869 is now known as lizmat 23:32 cognominal joined
timotimo binary-eyed :) 23:33
masak 's eyes are using two's complement binary 23:34
23:35 cogno joined, cog joined 23:37 cog left
masak ladies and gentlebots. 23:37
we have a release.
tarballs uploaded. tags pushed. p6c email sent. Wikipedia article updated. 23:38
masak celebrates with a glass of water o/
colomon \o/
lizmat hear hear! 23:40
jnthn \o/ 23:41
masak++
pmichaud masak++ 23:43
btw, I claim the march star release
pmichaud makes it so in the actual file.
oh, I guess we don't put planned releases into that file. 23:44
masak no, don't think so 23:45
pmichaud anyway, I intend to work on the march release early next week
(weekend is a little crowded)
afk again, walk 23:46
23:47 arlinius left 23:59 census left