»ö« Welcome to Perl 6! | perl6.org/ | evalbot usage: 'perl6: say 3;' or rakudo:, niecza:, std:, or /msg camelia perl6: ... | irclog: irc.perl6.org | UTF-8 is our friend!
Set by sorear on 25 June 2013.
jeffreykegler Tweet re Larry & craiglist: twitter.com/jzawodn/status/390609563113631744 00:13
jeffreykegler I 00:14
I am assuming it's true, and if so, congrats 00:15
BenGoldberg So I've got a silly question... I realize of course that the "proper" perl6 idiom for returning a numerically 0 value whose boolean truth-y-ness is True, is "return 0 but True". However, it seems to me that it will probably be faster and more memory efficient to simply " 00:22
to simply "return '0e0';"
grondilu r: say so 0e0 00:23
camelia rakudo e22ac2: OUTPUT«False␤»
BenGoldberg r: say so '0e0' 00:23
camelia rakudo e22ac2: OUTPUT«True␤»
grondilu oh 00:24
BenGoldberg Quotes matter
grondilu well, that's a neet trick. Maybe the optimizer could turn 0 but True into '0e0'
grondilu though it would not do the Boolean role. 00:25
r: say '0e0' ~~ Bool
camelia rakudo e22ac2: OUTPUT«False␤»
grondilu r: say (0 but True) ~~ Bool
camelia rakudo e22ac2: OUTPUT«False␤»
grondilu r: say '0e0' ~~ True 00:26
camelia rakudo e22ac2: OUTPUT«Potential difficulties:␤ Smartmatch against True always matches; if you mean to test the topic for truthiness, use :so or *.so or ?* instead␤ at /tmp/hGrSAs45BG:1␤ ------> say '0e0' ~~⏏ True␤0e0True␤»
grondilu r: say (0 but True) ~~ True
camelia rakudo e22ac2: OUTPUT«Potential difficulties:␤ Smartmatch against True always matches; if you mean to test the topic for truthiness, use :so or *.so or ?* instead␤ at /tmp/c7apyxHS64:1␤ ------> say (0 but True) ~~⏏ True␤0True␤»
synopsebot Link: perlcabal.org/syn/S64.html#line_1
grondilu ah nevermind 00:27
BenGoldberg Well, ideally, the optimizer would create a singleton 0 but True object, and all places which do "return 0 but True" would really do "return $zerobuttrue.clone" or some such.
r: say True ~~ Bool 00:28
camelia rakudo e22ac2: OUTPUT«True␤»
BenGoldberg r: say False ~~ Bool 00:29
camelia rakudo e22ac2: OUTPUT«True␤»
BenGoldberg r: say (-1 but False)
camelia rakudo e22ac2: OUTPUT«-1␤»
BenGoldberg r: say (-1 but False) ~~ Bool;
camelia rakudo e22ac2: OUTPUT«False␤»
grondilu r: my $one = "one" but 1; say $one + 2; 00:35
camelia rakudo e22ac2: OUTPUT«Cannot convert string to number: base-10 number must begin with valid digits or '.' in '⏏one' (indicated by ⏏)␤ in method Numeric at src/gen/CORE.setting:11892␤ in sub infix:<+> at src/gen/CORE.setting:3884␤ in sub infix:<+> at src/gen/CORE.setting…»
grondilu n: my $one = "one" but 1; say $one + 2;
camelia niecza v24-98-g473bd20: OUTPUT«Unhandled exception: Cannot parse number: one␤ at /home/p6eval/niecza/lib/CORE.setting line 1536 (die @ 5) ␤ at /home/p6eval/niecza/lib/CORE.setting line 3745 (ANON @ 10) ␤ at /home/p6eval/niecza/lib/CORE.setting line 3747 (NumSyntax.str2num @…»
grondilu thought this would work 00:36
diakopter :}
[Coke] nqp: say(nqp::what(nqp::rand_n(100.2))) 00:39
camelia nqp: OUTPUT«error:imcc:syntax error, unexpected NREG, expecting '(' ('$N5001')␤ in file '(file unknown)' line 60382055␤␤␤»
grondilu r: say 1 but "one" 00:40
camelia rakudo e22ac2: OUTPUT«one␤»
grondilu r: say 2 + (1 but "one")
camelia rakudo e22ac2: OUTPUT«3␤»
grondilu r: say 2 + ("one" but 1)
[Coke] nqp-jvm: say(nqp::what(nqp::rand_n(100.2)))
camelia rakudo e22ac2: OUTPUT«Cannot convert string to number: base-10 number must begin with valid digits or '.' in '⏏one' (indicated by ⏏)␤ in method Numeric at src/gen/CORE.setting:11892␤ in sub infix:<+> at src/gen/CORE.setting:3884␤ in sub infix:<+> at src/gen/CORE.setting…»
nqp-jvm: OUTPUT«␤»
[Coke] nqp-jvm: say(nqp::rand_n(100.2))
camelia nqp-jvm: OUTPUT«22.108048225152885␤»
[Coke] nqp-m: say(nqp::rand_i(123124)) 00:41
camelia nqp-moarvm: OUTPUT«7502744162270190791␤»
[Coke] O_o
is that a bug?
nqp-m: say(nqp::rand_n(12.3124)) 00:42
camelia nqp-moarvm: OUTPUT«0.406725␤»
[Coke] nqp-m: say(nqp::rand_n(12.3124))
camelia nqp-moarvm: OUTPUT«0.406725␤»
[Coke] nqp-m: say(nqp::rand_n(12.3124))
camelia nqp-moarvm: OUTPUT«0.406725␤»
[Coke] O_o
nqp-m: nqp::srand();say(nqp::rand_n(12.3124))
camelia nqp-moarvm: OUTPUT«No registered operation handler for 'srand'␤compile_op␤»
[Coke] nqp-m: nqp::seed();say(nqp::rand_n(12.3124))
camelia nqp-moarvm: OUTPUT«Arg count 0 doesn't equal required operand count 1 for op 'seed'␤compile_mastop␤»
[Coke] nqp-m: nqp::seed(124);say(nqp::rand_n(12.3124))
camelia nqp-moarvm: OUTPUT«0.249771␤»
[Coke] nqp-m: nqp::seed(124);say(nqp::rand_n(12.3124)) 00:43
camelia nqp-moarvm: OUTPUT«0.249771␤»
[Coke] nqp-m: nqp::seed(4);say(nqp::rand_n(12.3124))
camelia nqp-moarvm: OUTPUT«0.161399␤»
[Coke] forgets the low level bit. :P
anyway, we have 3 different backends each with 3 different sets of rand*.
Mouq nqp-m: for (0,1,2,3,4,5) { say(nqp::rand_n(12.3124)) } 00:47
camelia nqp-moarvm: OUTPUT«Rebuild in progress␤»
Mouq
.oO( I need to make errors and program output output from camelia differently sometime, but that requires serious code refactoring)
00:48
nqp-m: for (0,1,2,3,4,5) { say(nqp::rand_n(12.3124)) } 00:49
camelia nqp-moarvm: OUTPUT«0.406725␤0.878274␤0.947417␤0.207722␤0.03578␤0.900015␤»
Mouq nqp: say(nqp::rand_n(12.3124)) 00:50
camelia nqp: OUTPUT«error:imcc:syntax error, unexpected NREG, expecting '(' ('$N5001')␤ in file '(file unknown)' line 43759623␤␤␤»
Mouq ...huh? 00:51
TimToady yes, I am now officially at craigslist as Artist in Residence, which is all true, except for the "residence" part, and maybe the "artist" part :) 01:16
TimToady I guess I'm just "in", except that doesn't seem too true either... 01:17
[Coke] TimToady++ 01:20
I hope it's a great situation for you. 01:21
TimToady they have real good health insurance :) 01:27
and so far they seem like a great bunch of folks
TimToady the sort of folk who just like to quietly do good in the world :) 01:29
pdurbin TimToady: the best kind. and nice that they mentioned perl6 right in the tweet. congrats! 01:30
TimToady yes, they are intentionally supporting what I am already doing :D 01:31
pdurbin a nice hack
TimToady and put it very plainly that I was not allowed to feel like I was mooching :) 01:32
pdurbin TimToady: after all you've done... mooch a little :)
TimToady I do expect I can help them too, but for now I'm just hanging out on the internal channels too see if there's anything I can give advice on 01:33
also "we're hiring" :) 01:34
pdurbin :)
TimToady but they're also really excited by the potential of Perl 6 to help them down the road 01:36
diakopter o_O 01:38
Mouq Congratulations TimToady! 01:39
pdurbin TimToady: anything in particular they're especially excited about? 01:40
TimToady potential efficiency, concurrency, internationalization 01:41
pdurbin gotcha 01:42
TimToady as with most people in this line of work, they'd like to get more done with less electricity :)
pdurbin oh sure. green computing 01:43
japhb__ Congrats TimToady!
[Coke] checks out the job postings. 01:44
pdurbin I was listening to mostlyerlang.com/2013/10/07/019-eli...ose-valim/ today and twitter.com/joeerl was talking about elixir-lang.org , saying something to the effect that Elixir is the first language he knows of that's designed with so much input from so many people on the Internet... very different than when he designed Erlang in relative isolation. But of course, I was thinking, 01:48
"What about perl6.org/archive/rfc/ ?"
colomon TimToady++ 02:01
Mouq rnp: sub foo (**@slice) { say +@slice }; foo; foo(); 02:55
camelia pugs: OUTPUT«*** ␤ Unexpected "*@"␤ expecting formal parameter␤ at /tmp/MZifywwrna line 1, column 11␤»
..niecza v24-98-g473bd20: OUTPUT«===SORRY!===␤␤Slice parameters NYI at /tmp/q5sm00iBec line 1:␤------> sub foo (**@slice⏏) { say +@slice }; foo; foo();␤␤Unhandled exception: Check failed␤␤ at /home/p6eval/niecza/boot/lib/CORE.setti…»
..rakudo e22ac2: OUTPUT«0␤0␤»
Mouq r: sub foo (**@slice) { say +@slice }; foo; foo(); foo('a',('b','c')) 02:57
camelia rakudo e22ac2: OUTPUT«0␤0␤2␤»
uvtc Hi, #perl6. I've seen the term "fakecutable" (fake executable) in the logs here and in #moarvm. What is a fakecutable? 03:57
Also, congratulations on the work news, TimToady. Sounds like a nice company. 03:58
Well, contratulations to them as well, actually. :) 04:02
BenGoldberg A fake executable is a script pretending to be an executable :) For example, a program named 'rakudo' which you can use to run perl6 programs, but which is actually an sh script instead of an executable binary program 04:04
uvtc Oh. Thanks, Ben. Yes. Like when you expect the program to be a binary, but it turns out to be a script which delegates to the binary --- or is a symlink to it. 04:09
uvtc So, eventually, there should be a `perl6` fakecuteable which delegates to rakudo, or moar, or whichever Perl 6 impl you've selected/installed. Reminds me of the Debian alternatives system. 04:12
jeffreykegler TimToady: a very classy and assertive move by craiglist. As I understand it, your ability to devote full-time to Perl 6 will be a change, right? 04:13
uvtc r/installed/installed, I'm guessing/ 04:15
TimToady well, getting paid for it will be :) 04:16
jeffreykegler Again, congratulations on this much deserved piece of good fortune 04:18
uvtc Oh, little appearance of Perl 6 in a reply to <news.ycombinator.com/item?id=6559177>. 04:19
diakopter uvtc: actually we use fakecuteable to mean an executable compiled from generated C that is a wrapper to launch the VM with your sript precompiled as bytecode or something 04:40
uvtc diakopter, Ah, that's a mouthful. :) Now I remember where I first heard that term. Back when Rakudo on Parrot was just coming on line, or, well, when a perl6 executable was finally becoming available. 04:43
diakopter, Thanks for the clarification. 04:45
diakopter uvtc: mouthful is my middle name 04:46
uvtc :)
lue
.oO(diamouthfulkopter?)
04:58
dwarring r: say False but True 05:13
camelia rakudo e22ac2: OUTPUT«True␤»
dwarring ;) 05:14
diakopter r: say True but False 05:36
camelia rakudo e22ac2: OUTPUT«False␤»
diakopter r: say False but False
camelia rakudo e22ac2: OUTPUT«False␤»
diakopter r: say False but False but False but False but False 05:37
camelia rakudo e22ac2: OUTPUT«===SORRY!=== Error while compiling /tmp/MpBa8Rm41k␤Operators 'but' and 'but' are non-associative and require parenthesis␤at /tmp/MpBa8Rm41k:1␤------> say False but False ⏏but False but False but False␤ expecting…»
lue r: say False but "FILE_NOT_FOUND"
camelia rakudo e22ac2: OUTPUT«False␤»
diakopter r: say False but die
camelia rakudo e22ac2: OUTPUT«␤ in block at /tmp/rx2k5yAdpK:1␤␤»
diakopter r: say False but ...
camelia rakudo e22ac2: OUTPUT«Stub code executed␤current instr.: 'throw' pc 402455 (src/gen/CORE.setting.pir:169079) (src/gen/CORE.setting:10512)␤called from Sub 'sink' pc 438520 (src/gen/CORE.setting.pir:182308) (src/gen/CORE.setting:11902)␤called from Sub 'MAIN' pc 399 (src/gen/perl…»
diakopter r: say False but but 05:39
camelia rakudo e22ac2: OUTPUT«===SORRY!=== Error while compiling /tmp/K0JB24qy5Z␤Undeclared routine:␤ but used at line 1␤␤»
dwarring heh 05:42
JimmyZ r: say False but Pi
camelia rakudo e22ac2: OUTPUT«===SORRY!=== Error while compiling /tmp/e7AiPvaQ2t␤Undeclared name:␤ Pi used at line 1␤␤»
dwarring r: say False but True but False 05:43
camelia rakudo e22ac2: OUTPUT«===SORRY!=== Error while compiling /tmp/uEl3fsPFoa␤Operators 'but' and 'but' are non-associative and require parenthesis␤at /tmp/uEl3fsPFoa:1␤------> say False but True ⏏but False␤ expecting any of:␤ po…»
dwarring nah
r: say ((False but True) but False) but True 05:44
camelia rakudo e22ac2: OUTPUT«True␤»
dwarring r: say True does False but True 06:29
camelia rakudo e22ac2: OUTPUT«===SORRY!=== Error while compiling /tmp/8sNBfloiX8␤Operators 'does' and 'but' are non-associative and require parenthesis␤at /tmp/8sNBfloiX8:1␤------> say True does False ⏏but True␤ expecting any of:␤ p…»
masak TimToady++ # craigslist 06:59
craigslist++ # TimToady
JimmyZ What does this mean? I can't follow it ... 07:01
masak JimmyZ: irclog.perlgeek.de/perl6/2013-10-17#i_7723695 07:08
JimmyZ Yeah, I saw it. But I still don't what it is 07:10
JimmyZ don't know 07:10
masak JimmyZ: craigslist? it's a very early c2c site.
powered by Perl.
JimmyZ oh, I never heard about it 07:12
nwc10 JimmyZ: news.perlfoundation.org/2012/01/cra...d-don.html 07:18
masak craigslist++
nwc10 that is pleasing news
masak ss/craigslist has become <(uquibuitous)> with/synonymous/ # :) 07:19
JimmyZ craigslist++ 07:20
lizmat craigslist++ indeed # TimToady 07:44
lizmat continues with decommute& 07:44
masak .oO( $decommute.resume ) 07:51
mathw I think I might know too many cool programming languages 08:09
FROGGS mathw: write slangs for all of them and then you just can mix them properly :o) 08:16
moritz so, today is rakudo release day, right? 09:10
++[Coke]
mathw FROGGS: ultimately, that'd be really cool :) 09:18
masak ooh, release day. 09:33
now with more Moar!
hm, at least for the NQP release.
mathw yes, Rakudo on Moar isn't there yet AIUI 09:37
very exciting though
moritz IMHO it would be nice to git-tag moar for the nqp release 09:38
FROGGS doit 09:39
FROGGS we are unable to checkout that version though 09:39
or does --gen-moar handle that?
moritz is there a --gen-moar? 09:41
FROGGS I thought there is 09:43
(and I thought you added it fwiw)
sad, there is no such option :/ 09:44
moritz FROGGS: no, I just added --install to moar's Configure.pl 09:48
FROGGS: I meant to do --gen-moar, but so far haven't got around to it 09:49
FROGGS well, I think we won't really need it until rakudo has landed on moar too
dalek p/unified-build: d9060a7 | moritz++ | / (3 files):
create a ./nqp launcher
09:58
p/unified-build: 4bcb5a1 | moritz++ | tools/build/Makefile-Parrot.in:
build NQP launcher by default; use it in test runs
moritz and with that, the unified-build branch of nqp is testable again
moritz meh, nqp install is broken in that branch :/ 10:05
masak \o/ /o\ 10:06
moritz oh, probably just a stupid thinko on my part, and easy to fix
moritz tries to be optimistic
dalek rlito: 1bbe89c | (Flavio S. Glock)++ | / (4 files):
Perlito5 - perl6 - refactor_range_operator
10:12
rlito: f7a7e8f | (Flavio S. Glock)++ | / (3 files):
Perlito5 - perl6 - refactor_range_operator - use .keys
dalek p/unified-build: 5dcc094 | moritz++ | tools/build/Makefile-Parrot.in:
fix installation

also split up "install" in "base-install" and "exec-install". The former installs the binary as nqp-p, the latter as nqp as well
10:38
moritz ok, rakudo build on top of nqp/unified-build succeeded 10:41
now it just needs a .bat launcher on windows 10:43
dalek Heuristic branch merge: pushed 102 commits to Perlito/replito by creaktive 10:49
[Coke] thanks moritz++ for reminding him about the release. 11:56
[Coke] warns folks that it will be late in the day here before it happens. 11:57
[Coke] has not scheduled his day well around the release. :)
but I am happy to do it. 11:58
[Coke] scurries away to dayjob.
c1sung d 12:27
fglock p56: 0..$#x, 0..$#$x, 0..$#{func()} 12:31
camelia p5-to-p6 : OUTPUT«@x.keys(), $x.keys(), func().keys()␤»
TimToady those parens are never necessary, btw 12:45
TimToady fglock: because argumentless methods are indistinguishable from attribute accessors, to Perl 6, and accessors are treated more like nouns than like verbs, so the () is really kinda non-idiomatic 12:55
grondilu p5eval: my @x = 1 .. 3; print join ' ', 0 .. $#x 13:02
p5eval grondilu: 0 1 21
grondilu p5eval: my @x = 1 .. 3; join ' ', 0 .. $#x
p5eval grondilu: 0 1 2
grondilu r: my @x = 1 .. 3; print @x.keys
camelia rakudo e22ac2: OUTPUT«012»
grondilu thought $#x was the number of elements 13:03
FROGGS no, highest index 13:05
scalar @x is the element count
grondilu yeah, makes sense
masak I once read a blog post where someone had found some Perl teaching material that pointed out that $#x returns @x-1 and then went on to say "this is a bug in Perl and will be fixed in the next version" o.O 13:06
grondilu p56: 1..$#x 13:08
camelia p5-to-p6 : OUTPUT«1 .. @x.end␤»
grondilu p56: 0..* # just curious 13:09
camelia p5-to-p6 : OUTPUT«missing value after operator '..' at perlito5.pl line 1385.␤»
grondilu oops, wrong sense
p65: # testing 13:10
masak p56: my $x = "HAI"; "OH ${x}" 13:11
camelia p5-to-p6 : OUTPUT«my $x = 'HAI';␤'OH ' ~ $x␤»
masak nice.
Util r: my ($x, $y, $dx, $dy) = 15, 25, 1, 10; ($x, $y) = ($x + $dx, $y + $dy); say [$x, $y];
camelia rakudo e22ac2: OUTPUT«16 35␤»
Util r: my ($x, $y, $dx, $dy) = 15, 25, 1, 10; ($x, $y) Z+= ($dx, $dy); say [$x, $y];
camelia rakudo e22ac2: OUTPUT«15 25␤»
Util Is this just due to op+= being NYI? 13:12
masak r: my ($x, $y, $dx, $dy) = 15, 25, 1, 10; ($x, $y) Z[+=] ($dx, $dy); say [$x, $y];
camelia rakudo e22ac2: OUTPUT«15 25␤»
masak r: my ($x, $y, $dx, $dy) = 15, 25, 1, 10; ($x, $y) [Z+]= ($dx, $dy); say [$x, $y];
camelia rakudo e22ac2: OUTPUT«===SORRY!=== Error while compiling /tmp/Z6OMDgPnr0␤Preceding context expects a term, but found infix = instead␤at /tmp/Z6OMDgPnr0:1␤------> dx, $dy) = 15, 25, 1, 10; ($x, $y) [Z+]=⏏ ($dx, $dy); say [$x, $y];␤»
masak Util: no, I don't know what's going on there. 13:13
Util: looks like a bug to me.
Util masak: thanks! 13:16
masak (it also looks a little familiar, so it might be submut already) 13:17
Util masak: I will check before submitting the bug. It looks familiar to me, too. 13:19
moritz it's something to do with the Z metaop losing the container somewhere, iirc 13:20
or producing a new container
FROGGS masak: you are a git pro: how can I step back one single commit? like checking out one commit before the one I am on?
moritz git checkout HEAD^ 13:21
or if you want to revert your branch to it, git reset --hard HEAD^ # loses the newest commit, and potentially uncommitted changes
masak what moritz said.
I have the latter alternative aliased as 'git undo' here :)
moritz in #git I would have answered with !revert, which lists that and a few other options 13:22
(like git revert)
FROGGS ahh, cool
moritz: thanks!
masak also, the 'loses' is a truth with modification: when you have 'git reflog', nothing is really lost for a month or so.
moritz right, only the uncommitted changes are actually lost
timotimo except unstaged changes
masak right. 13:23
timotimo the uncommitted changes are not lost, if they are staged. but they are really hard to find :P
masak if you 'reset --hard', don't come to me afterwards and whine about uncommitted changes :P
timotimo: troo
timotimo: but then we are definitely not in the porcelain anymore, Dorothy.
masak .oO( timototo ) 13:24
moritz timotimo: so how does one recover formerly-staged diffs?
timotimo if you remember the contents, you can grep your object storage :P
masak moritz: they will be a tree object somewhere in the object db.
timotimo i don't think there will actually be a tree 13:25
masak there will.
the staging area is a tree.
timotimo since the staged changes are usually just in the index file, no?
masak hm.
timotimo oh, that also goes into the object db?
masak suddenly I'm not sure.
grondilu p5eval: my $foo = "bar"; sub f { "foo" }; "${f()}";'
p5eval grondilu: ERROR: Can't find string terminator "'" anywhere before EOF at (eval 7) line 1.
moritz p5eval: my $foo = "bar"; sub f { "foo" }; "${\f()}";' 13:26
grondilu p5eval: my $foo = "bar"; sub f { "foo" }; "${f()}";
p5eval moritz: ERROR: Can't find string terminator "'" anywhere before EOF at (eval 7) line 1.
grondilu: No output
timotimo masak: i'll set up a little experiment and tell you the result
moritz p5eval: my $foo = "bar"; sub f { "foo" }; "${\f()}";
p5eval moritz: foo
masak timotimo: ah, it's not a tree until something does 'git-write-tree' on the staging area...
timotimo: (which generally happens during commit)
grondilu p56: my $foo = "bar"; sub f { "foo" }; "${\f()}";
camelia p5-to-p6 : OUTPUT«my $foo = 'bar';␤our sub f (*@_) {␤ 'foo'␤}␤$(\f())␤»
FROGGS what discussion have I started /o\ 13:27
grondilu r: my $foo = 'bar'; sub f { "foo" }; $(\f())
camelia ( no output )
masak p56: my $x = 2; { my $x = $x }
camelia p5-to-p6 : OUTPUT«my $x = 2;␤{␤ my $x = $x␤}␤»
grondilu r: my $foo = 'bar'; sub f { "foo" }; say $(\f())
masak ^^^ wrong
camelia rakudo e22ac2: OUTPUT«foo␤»
moritz r: my $foo = 'bar';␤our sub f (*@_) { 'foo' }; say $(\f())
camelia rakudo e22ac2: OUTPUT«foo␤»
moritz FROGGS: a fun discussion 13:28
timotimo oh, git stores all objects non-plain? what do they do to the contents?
grondilu forgot how to do indirections in P5 :/
FROGGS ahh, good *phew*
timotimo i thought a blob object was just the word "blob", a length and then the content or something?
moritz timotimo: gzip, iirc 13:29
timotimo ah, i should be able to zgrep, right?
zgrep doesn't do -r?! :-(
moritz thread.gmane.org/gmane.comp.version...git/236238 if you are interested in some pack object details :-)
masak timotimo: they are all gzipped, yes.
timotimo no, not pack files please :P 13:30
masak right, pack files are the next step.
things are zipped already in the .git/objects stage.
timotimo moritz: there's a german talk with a recording somewhere, that uses a tool that displays the whole object db as a graph next to a console and then does some operations completely without porcelain *or* plumbing, just writing the files directly 13:30
masak hard-core. 13:31
timotimo surprisingly unhard actually :)
masak timotimo: if you want to see something nice, check out e83c516 of git.git 13:32
timotimo: a *very* small git.
(it's the first git commit)
timotimo the first git commit of git itself? cool :)
masak yep.
~1300 lines of C code. 13:33
moritz and linus only committed it once he was able to commit it with git, of course :-)
masak of course. 13:35
but those were purely plumbing commands.
FROGGS moritz: the main-usage-with-j4-bug seems to be introduced by github.com/rakudo/rakudo/commit/9e...237cc4b943 13:36
moritz: but reverting it doesnt make it go away :o(
moritz FROGGS: doesn't seem likely to me that that's actually the problem 13:37
FROGGS but the commit before works... which is github.com/rakudo/rakudo/commit/cd...4bb66a6857 13:38
jnthn timotimo: If you want to see the contents of a blob, git cat-file -p beefcafe 13:39
moritz FROGGS: IMHO it's more likely that that's a glitch in the bisect
FROGGS moritz: that is why I re-ran these manually 13:40
timotimo jnthn: i want to grep all my objects to see if one of them has staged-but-not-committed trees
jnthn git fsck --lost-found # may find them
FROGGS ohh damn 13:41
moritz: false alarm, my windows vm got killed, so the last pass might be a false positive
jnthn Then look at the ones in .git/lost-found/other 13:42
they aren't gzip'd under there iirc so you can grep 'em more easily
jnthn You may also be able to use git grep, if you can find a way to feed it all the trees... 13:43
masak ooh, .git/lost-found
jnthn ...oh, but you said you didn't have a tree... 13:44
bbiab
grondilu p56: our $foo = "bar"; ${"foo"} 13:46
camelia p5-to-p6 : OUTPUT«our $foo = 'bar';␤$('foo')␤»
grondilu p5eval: our $foo = "bar"; ${"foo"}
p5eval grondilu: bar
fglock TimToady: re non-idiomatic - thanks, fixing
grondilu r: our $foo = "bar"; say $('foo')
camelia rakudo e22ac2: OUTPUT«foo␤» 13:46
masak grondilu: $() just itemizes a thing. 13:47
r: my $foo = 'bar'; say $::"foo"
camelia rakudo e22ac2: OUTPUT«===SORRY!===␤ResizablePMCArray: index out of bounds!␤»
masak o.O
r: my $foo = 'bar'; say ::'$foo' 13:48
FROGGS r: our $foo = "bar"; say $::('foo')
camelia rakudo e22ac2: OUTPUT«===SORRY!=== Error while compiling /tmp/E_9tOhWPDD␤Two terms in a row␤at /tmp/E_9tOhWPDD:1␤------> my $foo = 'bar'; say ::⏏'$foo'␤ expecting any of:␤ postfix␤ infix stopper␤ infix or m…»
rakudo e22ac2: OUTPUT«bar␤»
FROGGS r: our $foo = "bar"; say ::('$foo')
camelia rakudo e22ac2: OUTPUT«bar␤»
masak submits rakudobug
TimToady under strict refs, p56 can assume it's getting a hard ref to ${}, but under no strict it can't really know whether it's getting a string or a ref 13:51
so we probably need to throw a disambiguating call in there that hardens a soft ref 13:52
diakopter o_O 13:55
TimToady diakopter: that's why we changed it in p6 :)
symbolic deref is always a different syntax in P6 from normal deref 13:56
hoelzro [Coke]++ # docs 13:57
diakopter o_O at awakeness
TimToady oh, had to take Tertia et al. to the airport 13:58
diakopter masak: did you see the rj: constant a = a in the backlog
diakopter sorear: howdy :) 13:59
colomon sorear! \o/ 13:59
FROGGS hi sorear!
diakopter rj: constant a = a
camelia rakudo-jvm e22ac2: OUTPUT«===SORRY!===␤java.lang.NullPointerException␤»
TimToady so what's gonna be the abbrev for the js backend? s? e? 14:00
masak diakopter: does... does that go in the RT perl6 queue? guess it does. 14:01
masak submits rakudobug
FROGGS TimToady: not that we have no chars (graphemes?) left some day for new backends O.o 14:02
masak TimToady: abbreviation for the JS backend: 'rq' 14:03
TimToady ponders what the abbrev for the APL backend will be
why q?
masak TimToady: 'Q' is the traditional one-char abbreviation for JavaScript.
cf 'QUnit'.
'JUnit' was taken by Java.
hoelzro has anyone writen a unit testing framework named Punitive? 14:04
hoelzro if not, I claim it for Perl 6. 14:04
diakopter hoelzro: how about Compensatory 14:05
masak sorear! \o/
sorear: I'm trying to grok sheaves and the Yoneda lemma. my brain hurts.
hoelzro diakopter: I don't get it =/ 14:06
diakopter en.wikipedia.org/wiki/Punitive_damages
hoelzro ah =P 14:07
moritz if I create an nqp.bat, do I invoke it as ./nqp or as ./nqp.bat (on windows)? 14:09
masak so, compensatory damages is for the sake of the plaintiff, and punitive damages are to deter the defendant from relapsing?
moritz: either.
TimToady well, or to deter anyone else from trying the same thing...
masak right.
moritz masak: takk
diakopter erm 14:10
neither
masak moritz: and the idiomatic is backslash (\) not forward slash (/)
moritz: but I believe forward slash works too.
moritz: also, I think that (effectively) '.' is in $PATH on Windows.
diakopter ./ doesn't work
masak ok.
so it's 'nqp' or 'nqp.bat' 14:11
moritz :(
TimToady is that punitive or compensatory?
diakopter OTOH 14:12
"./e.bat" does work :D 14:13
moritz \o/
diakopter: does ./e work too?
masak waitwait
diakopter: if "./e.bat" *does* work, what was it that *didn't* work? 14:14
TimToady bats his eyelashes
diakopter C:\Users\mwilson\bin>"./e.bat" foo
C:\Users\mwilson\bin>./e foo
'.' is not recognized as an internal or external command,
operable program or batch file.
(there is an e.bat in that dir) 14:15
it does the same thing as jnthn's e.bat -- @"c:\Program Files (x86)\Notepad++\Notepad++.exe" "%1" "%2" "%3" "%4" "%5" "%6" "%7" 14:16
TimToady Twinkle, twinkle, little bat! How I wonder what you're at!
moritz is that leading @ important?
diakopter suppresses echo
FROGGS array context
:P 14:17
masak oh, the quotes were part of the command. I see. 14:18
FROGGS diakopter: does "./e.bat" will look up the file in . only or in PATH too?
diakopter i'll try it 14:19
TimToady Up above the world so high / Like a tea tray in the sky! 14:20
diakopter FROGGS: nope
. only
FROGGS cool
diakopter tries with ..
yeah, .. does the right thing 14:21
dalek p/unified-build: 1c31dff | moritz++ | / (3 files):
try to generate nqp.bat launcher for windows
14:28
moritz anyone want to test that commit on windows?
I have windows now, but haven't set up the toolchain so far
masak today's autopun spotting: twitter.com/peterseibel/status/390...2129013761 14:35
jnthn diakopter: Why on earth do you have "%1" "%2" ... instead of %* ?:
masak jnthn: maybe he just really likes to have arguments :P 14:36
jnthn :P
diakopter because %* strips original quotes 14:38
which le-breaks 14:39
jnthn oh...I never hit that problem :)
masak :)
jnthn also, why the hell... :)
That's horrible semantics!
diakopter well, I thought it did... I'll verify.
jnthn Well, maye I didn't oen files with spalweces in the name
gah
masak .oO( when they said "worse is better", they didn't put nearly enough emphasis on the "worse" part... ) 14:40
jnthn Well, maybe I didn't open files with spaces in the name
diakopter
.oO( beware the spalweces.. )
jnthn: yep, %* does not preserve the quotes 14:41
masak "spalweces" sounds like a lazy contraction of "space whale feces", by professionals who have seen far too much of the latter.
diakopter: what about if you put the %* in quotes? "%*" ? 14:42
jnthn What a crappy profession :P
masak jnthn: it's a tough job, but someone's gotta do it.
diakopter it's only a problem when the space whales are the size of galaxy superclusters
masak: *cry*
diakopter erm. 14:44
actually it does preserve the quotes on %*
but...
ergh. 14:45
diakopter sigh. 14:46
apparently somewhere along the way, I acquired that superstition, spuriously
or I just can't remember the exact case to reproduce 14:47
dalek rlito: 18da02f | (Flavio S. Glock)++ | / (2 files):
Perlito5 - perl6 - pretty-print - omit parenthesis when calling func/method without args
14:51
TimToady fglock: also, I'd probably just translate ${x} to {$x} when interpolating 14:57
fglock TimToady: ack 14:59
fglock I think now I've got some nice infrastructure for the refactoring 15:00
fglock with splitted steps for perl5 -> ast -> refactor -> pretty print 15:01
this is getting interesting
masak fglock++ 15:04
fglock yes, and I also need to translate chr(10) back to "\n"
masak fglock: this is highly interesting to watch!
TimToady translation is always a fascinating subject, where "fascinating" is a euphamism for "terrifyingly open-ended"
fglock or better, print "\n" to say(...)
TimToady *euphemism 15:05
or print "foo\n" to say "foo" 15:06
fglock yes - that is easy because the "\n" is already stripped off as a special char
TimToady okay, so with the ast approach you could actually turn $x . "stuff" into "{$x}stuff" even if they didn't use ${x} in the first place 15:09
TimToady unless one prejudices the pretty printer to use the same kind of operator, asssuming such info is even passed through the ast 15:11
TimToady certainly one must pass comments through, even though those would not typically be kept in a normal ast 15:11
TimToady translating comments is another one of those open-ended topics :) 15:12
fglock yes, actually the AST is the same for "${a}x" and $a . 'x'
still thinking about comments
TimToady p56: 42; # Life, the Universe, and Everything
camelia p5-to-p6 : OUTPUT«42␤»
TimToady yeah, those have to come though, generally 15:13
TimToady but sometimes they're amusingly wrong 15:13
pmurias fglock: you plan to use perlito for p5 -> p5 refactoring?
TimToady especially ones that say # workaround Perl 5 bug
fglock specially multi-line comments in a column besides the code
pmurias: yes, that is something I'm playing with - to make a non-strict script strict by decalring the variables automatically 15:14
TimToady yes, alignment is nice, but not as critical as getting the info through
fglock or extract subroutines using vim
fglock *declaring 15:14
pmurias: this is something I could use at work :) 15:15
TimToady it's okay to guess as long as you mark the guesses with something that is easy to search for
with maybe a suggestion for how to make it guess the other way next time 15:16
fglock I think I can implement the comment stripper as a side effect of <ws>
like heredocs
pmurias reformating of the code seems to be an issue for the pretty print approach
unless all the code is formated with perltidy to start with ;)
fglock because it loses formatting, yes 15:17
TimToady typically just attaches the ws as an attribute of whatever the last token was
fglock it is a kind of perltidy, just dumber (or smarter, depends how you look)
but refactoring makes preserving attributes more tricky 15:18
pmurias you could try attaching the orginal source to pieces of ast 15:19
fglock maybe attaching comments to the top node of the statement, with (x,y) info
TimToady pmurias: you still have to decide what to do when you one set of nodes to a different set 15:19
*map
fglock pmuris: you have cases like m#xyz# #comment 15:19
*pmurias 15:20
TimToady especially when there's a many-to-one or one-to-many mapping
fglock it is an interesting problem :)
pmurias TimToady: you mean when transforming the ast?
fglock another thing I'm considering, is to delay BEGIN block execution and just translate the BEGIN block to perl6 15:25
fglock this will break some code, but I think it is what you would do if you would translate by hand 15:26
TimToady pmurias: yes
fglock executing BEGIN and serializing to perl6 would give funny looking results 15:27
TimToady there might be some recognizable patterns of intent that could be handled by hand 15:29
er, s/by hand/specially/ 15:30
but I agree that translating the BEGIN is probably the better default
fglock decommuting & 15:33
sahadev congrats, TimToady. 15:45
is there an option to Str.lines that does not chomp the lines before returning? similar to open(..., chomp => False) 15:47
masak sahadev: hmmm... .lines is synonymous with .comb(/N+/) 15:48
TimToady dunno, oughta be
masak sahadev: so it feels a little unintuitive to extend it that way. 15:49
sahadev: why not just re-add the line breaks with >>~>> "\n" ?
TimToady not all linebreaks are "\n"
masak does it matter in this case? 15:49
TimToady thinks that .comb is the farthest thing from the user's mind when they're using .lines 15:50
so I'm fine with a :!chomp option
benabik .split(/<?[\n]>/) ?
masak anyway, I would pull a pull request with a :!chomp option.
TimToady but the fact you have to put ! there maybe indicates the default is wrong 15:51
diakopter or a coincidence of naming 15:52
TimToady so maybe :nl to include the newlines, or some such 15:53
masak +1
TimToady :newlines would be clearer, since :nl might be taken to specify what you want for newline 16:00
:raw seems a bit too generic 16:01
:seps is a problem if they think of them as terminators rather than separators :)
awks use of RS notwithstanding...
sahadev :lineseps? 16:02
TimToady same problem as :seps :)
of course, unicode talks about LINE and PARAGRAPH SEPARATORs so maybe it's not so bad 16:03
masak :keepnl 16:05
[Coke] :raw would mean bytes. 16:07
sahadev I like :keepnl. the intent is clearest there. 16:08
TimToady +1
TimToady though just :keep couldn't mean much else 16:09
PerlJam :nl could be dual purpose ... :nl -- each line has whatever newlines were in the input. :nl($stuff) -- each line has its newline replaced with $stuff :-) 16:10
TimToady that seems like a solution in search of a problem 16:11
timotimo so with :nl(True) you can replace each newline with True? :) 16:12
masak .oO( :keepnl -- reverse the effects of global warming and rising sea levels! ) 16:13
TimToady snorts 16:14
PerlJam does that mean it will eventially plunge us into another ice age?
TimToady alternatively, forget that option entirely, and force people to specify delimiter of <?after \n> if that's what they mean
TimToady was hoping to have beachfront property soon, since currently we're about 15m above sea level 16:16
pity about the Googleplex downhill from me though...
masak if there's one organization I could actually see surviving being totally submerged under water, it is Google. 16:18
TimToady weather Mountain View --> water temp 18℃ with current from the N at 1.3 knots 16:20
diakopter waves chompy
sahadev TimToady: how does one specify a delimiter option to .lines? I don't see a supported parameter in the spec. 16:21
.split could be used, I guess
TimToady sahadev: that is what we've been discussing all along
TimToady the problem with using split is that strings aren't naturally very lazy 16:22
TimToady unless they're cats, which are naturally lazy 16:23
but all the cats are feral so far
TimToady had better go buy some kitty litter before our cat decides to go feral... 16:24
sahadev TimToady: I might have misread, but when you said "... forget that option entirely, and force people to specify delimiter of <?after \n> ...", weren't you talking about .lines?
TimToady .lines(:delim(/<?after \n>/)) or some such
presumably whatever open uses for the same kind of option 16:25
PerlJam open uses :nl :)
TimToady then :nl :) 16:25
otoh it feels like something that should be optimized relative to the normal chomp mode, and that's a pretty complicated option to recognize as doing something simpler 16:26
PerlJam It's weird that open has :chomp which subsequently affects get and lines 16:27
sahadev open uses :chomp too, which is a Bool, whereas :nl is not.
TimToady open's :chomp is what we're talking about deprecating
it's the wrong default 16:28
but there's no obvious antonym to "chomp"
TimToady --> kitty litter store 16:29
diakopter you don't need another litter of kittens
nobody needs more kittens
mathw I have strange kitty litter 16:32
to aid in the collection of a urine sample so the vet can find out what's wrong with my cat
the cat, of course, doesn't believe it's litter and refuses to use it
dalek p/unified-build: f55635a | moritz++ | tools/build/Makefile-JVM.in:
[JVM] move some generated files to gen/jvm/
16:42
[Coke] TimToady: I was just talking with ROODE who recalled chop/chomp/chip/chimp. small world. 16:58
TimToady [Coke]: it was never entirely clear what "chimp" would mean... 17:28
daxim p3rl.org/Text::Chomped 17:32
timotimo there is no method to split a filename into extension and rest? 18:07
FROGGS timotimo: I believe the IO::Spec basename was stripped because it was not specced and not needed (in rakudo) 18:08
timotimo is there a non-mutating version of ~~ s/.../.../? 18:09
timotimo tries to make something with perl6 and figures out he's completely untrained 18:09
FROGGS hmmm, I thought it was in File::Spec module, but it is not :/ 18:10
timotimo i figured out i can just as well just use m/.../ for this task 18:11
FROGGS yeah, you probably know best what a file extension is to you and what not :o)
timotimo :)
FROGGS (thinking about dot-files and files with several dots...) 18:12
timotimo i'm surprised .path.mkdir is not a thing
god damnit, dir() is slow 18:13
takes like 5 seconds to list my .. hold on
100 things in my home directory
(on parrot)
FROGGS r: say IO::Path.^methods
camelia rakudo e22ac2: OUTPUT«SPEC dir BUILD path parts basename directory volume Bridge Int succ pred IO open is-absolute is-relative absolute relative cleanup resolve parent child copy chmod contents d e f s l r w x z modified accessed changed new Str gist perl Numeric␤»
FROGGS basename, see ^^
r: say "test.txt".IO.path.basename 18:14
camelia rakudo e22ac2: OUTPUT«test.txt␤»
FROGGS r: say "C:\\test.txt".IO.path.basename
camelia rakudo e22ac2: OUTPUT«C:\test.txt␤»
FROGGS hmmm
r: say "/tmp/test.txt".IO.path.basename
camelia rakudo e22ac2: OUTPUT«test.txt␤»
FROGGS r: say "/tmp/test.txt".IO.path.parts 18:15
camelia rakudo e22ac2: OUTPUT«("volume" => "", "directory" => "/tmp", "basename" => "test.txt").hash␤»
FROGGS no extension :/
timotimo hehe 18:16
i've tried all those parts
Quom r: say 'is there a non-mutating version of ~~ s/.../.../?'.subst(/(is) (there)/, {"$1.tc $0.lc"}) 18:20
camelia rakudo e22ac2: OUTPUT«is there a non-mutating version of ~~ s/.../.../?␤»
Quom Hm 18:20
r: say 'is there a non-mutating version of ~~ s/.../.../?'.subst(/(is)\s(there)/, {"$1.tc $0.lc"})
camelia rakudo e22ac2: OUTPUT«there.tc is.lc a non-mutating version of ~~ s/.../.../?␤»
Quom Close enough :) 18:21
r: my $a = 'abcd'; $a.subst(/b/,'2'); say $a
camelia rakudo e22ac2: OUTPUT«abcd␤» 18:22
TimToady maybe an strace would point out any excessive syscalls 18:26
TimToady (for dir) 18:28
diakopter heh, the opendir op isn't yet mapped in moar 18:30
hexcoder std: my $spot is Scalar 18:45
camelia std a0bcfb1: OUTPUT«ok 00:01 121m␤»
hexcoder r: my $spot is Scalar 18:46
camelia rakudo e22ac2: OUTPUT«===SORRY!=== Error while compiling /tmp/92PjGHviDl␤Variable trait 'is TypeObject' not yet implemented. Sorry. ␤at /tmp/92PjGHviDl:1␤------> my $spot is Scalar⏏<EOL>␤ expecting any of:␤ scoped declarator…»
hexcoder n: my $spot is Scalar
camelia niecza v24-98-g473bd20: OUTPUT«===SORRY!===␤␤Trait name not available on variables at /tmp/ohxUKVKKjj line 1 (EOF):␤------> my $spot is Scalar⏏<EOL>␤␤Potential difficulties:␤ $spot is declared but not used at /tmp/ohxUKVKKjj line 1…»
hexcoder funny, with my rakudo * at home, I get "Null PMC access in get_string()" 18:47
timotimo well, strace for dir() gives me a *whole* bunch of brk calls ;) 18:48
timotimo it does the getdents twice and then just spents a lot of time doing whatever it is it's doing 18:53
TimToady probably not the syscalls then 19:02
brk is fairly cheap when it's just extending an already allocated memory page
maybe it's one of those "allocate 100_000 things just in case" things :/ 19:03
or maybe it's calling a parser just to see if the name is . or .. 19:04
or maybe it's using junctions
jnthn back 19:07
TimToady huh, it is using a junction: sub dir(Cool $path = '.', Mu :$test = none('.', '..')) { 19:22
timotimo: maybe try timing it with dir('..', True) or some such 19:23
er, :test(True) I guess
I guess :test means that already 19:24
that would tell you how much is junction overhead
jnthn That's one of the optimizer-can't-easily-unroll cases of junctions too 19:25
yoleaux 19:22Z <FROGGS> jnthn: can you please review these changes? github.com/MoarVM/MoarVM/compare/d...a?expand=1
19:23Z <FROGGS> jnthn: I think all are okay except github.com/MoarVM/MoarVM/commit/22...8ea547e6ac
jnthn git log -p master..doughera 19:27
uh, dammit
FROGGS :o)
TimToady or try a micro-optimization: test => { .ord != 46 or not /^ '.' ** 1..2 $/ } 19:31
timotimo well, the difference between :test and no :test is about 0.5 seconds out of 7 seconds 19:33
er, 7.5 seconds
TimToady okay, so probably not the whole answer
TimToady since "dir is now lazy" according to the changelog, I'm suspecting it's the 100_000 thing 19:34
sqirrel m.youtube.com/watch?v=sTHXIzHPyqE&a...ata_player 19:35
flashmob cologne germany
may the force be with you
FROGGS :o)
timotimo oh, the "i want a 1 million entries list, kthx?"? 19:36
thing?
TimToady irclog.perlgeek.de/perl6/2013-10-04#i_7672040 is the middle of the discussion 19:38
timotimo ah, yes. i'd've gone with 1000 as well instead of 100_000 19:39
TimToady you might try changing that in src/core/ListIter.pm and see if it makes a timing difference in this case 19:40
TimToady will also again point out that Perl 5 starts at, like 4 19:41
timotimo i'm currently not free to do such things, sorry
TimToady oh well
it might just be general VM slothfulness too 19:42
lue hello world o/ 19:44
jnthn FROGGS: 22f810 is just one of those "argh, compilers" things. It's not the prettiest fix, but we'd better just cope 19:48
Um, as in, there's not a pretty fix :) 19:49
FROGGS ahh, sad 19:50
I was hoping for a "yeah, but" :o)
jnthn Well, we could pick a better name is all 19:51
FROGGS yeah :/
jnthn But let's take the patch and we deal with that later.
Better that we build.
FROGGS I tested it on linux so far and it passes...
I have not a working solaris atm 19:52
jnthn: you tested it on windows? just to be sure?
I can do that too...
jnthn I can do, but I'm generally quite trusting of doughera++ patches :) 19:53
FROGGS k
will merge now
jnthn Building it here just in case
eeks, doesn't build 19:54
FROGGS O.o
jnthn src\io\dirops.c(203) : error C2039: 'dir_name' : is not a member of 'MVMOSHandleBody'
oh, it's stuff in #define for WIN32 19:55
FROGGS yeah, now we need to spot all cases 19:57
jnthn: I an fix it too if you got other stuff to do 19:58
jnthn Just got a fix build here
pash it 19:59
FROGGS .oO( aaahhh, sssss, pash it, pash it good ) 20:01
okay, that was not much to fix
jnthn :) 20:02
FROGGS okay, it is in master now 20:03
jnthn yay :) 20:04
FROGGS I wasted the last two days biseting the main-usage.t fails I get when running 4 jobs + my windows vm 20:05
bisecting*
jnthn :S 20:06
Did you get it down to anything?
FROGGS looks like I an only reproduce it when beeing at work O.o
because I had failing commits that pass here on my couch >.<
at work it looked like as if something around july 3rd did it 20:07
timotimo r: class Testclass { has num $.a; }; my Testclass $a .= new(:a(10)); 20:16
camelia rakudo e22ac2: OUTPUT«Cannot modify an immutable value␤ in block at src/gen/CORE.setting:838␤ in method BUILDALL at src/gen/CORE.setting:821␤ in method bless at src/gen/CORE.setting:810␤ in method new at src/gen/CORE.setting:795␤ in method new at src/gen/CORE.setting…»
timotimo :o
r: class Testclass { has Num $.a; }; my Testclass $a .= new(:a(10)); 20:17
camelia rakudo e22ac2: OUTPUT«Type check failed in assignment to '$!a'; expected 'Num' but got 'Int'␤ in block at src/gen/CORE.setting:838␤ in method BUILDALL at src/gen/CORE.setting:821␤ in method bless at src/gen/CORE.setting:810␤ in method new at src/gen/CORE.setting:795␤ …»
timotimo r: class Testclass { has Num $.a; }; my Testclass $a .= new(:a(10.0));
camelia rakudo e22ac2: OUTPUT«Type check failed in assignment to '$!a'; expected 'Num' but got 'Rat'␤ in block at src/gen/CORE.setting:838␤ in method BUILDALL at src/gen/CORE.setting:821␤ in method bless at src/gen/CORE.setting:810␤ in method new at src/gen/CORE.setting:795␤ …»
timotimo right ...
to get a num you have to work hard :P
jnthn 10e0
timotimo can we get a use Num; or something btw? 20:18
r: { my \Rat := Num; say 10.5.WHAT }; say 10.5.WHAT;
camelia rakudo e22ac2: OUTPUT«===SORRY!===␤No compile-time value for Rat␤»
jnthn Should be do-able as a slang maybe...
timotimo r: { my \Rat ::= Num; say 10.5.WHAT }; say 10.5.WHAT;
camelia rakudo e22ac2: OUTPUT«===SORRY!===␤No compile-time value for Rat␤»
timotimo r: { constant \Rat := Num; say 10.5.WHAT }; say 10.5.WHAT;
camelia rakudo e22ac2: OUTPUT«===SORRY!===␤Default constructor for 'Num' only takes named arguments␤»
jnthn I think it expects whatever you supply the toake the same things a Rat constructor does 20:19
timotimo so ... *theoretically* this could work, except it tries to Rat.new(:nom(20), :denom(11))
jnthn yeah
r: { constant \Rat := Num but role { method new(:$nom, :$denom) { $nom.Num / $denom.Num } }; say 10.5.WHAT }; say 10.5.WHAT; 20:20
camelia rakudo e22ac2: OUTPUT«===SORRY!===␤Too many positional parameters passed; got 3 but expected 1␤»
timotimo and it will do craptons of overhead because at first it tries to pull the number out to create a proper rat, *then* it calculates that back to make it a num :P
hehe
jnthn r: { constant \Rat := Num but role { method new($nom, $denom) { $nom.Num / $denom.Num } }; say 10.5.WHAT }; say 10.5.WHAT; 20:21
camelia rakudo e22ac2: OUTPUT«(Num)␤(Rat)␤» 20:21
jnthn There you go :)
timotimo cool beans :)
jnthn yeah but it's compile time still :)
timotimo it's always nice that rakudo allows us to do stuff like that
yes, / and friends will still create rats if it can
nwc10 hangon, is that another of those insanely complex things that actually just works? 20:23
timotimo yeah
the compiler always does find_symbol('Rat') and friends when it builds constants etc 20:24
and that looks in the lexical scope
jnthn Ye,s if you stick that in a mdoule and export it then you have a pragma for "default 4.2 style constants to be Num not Rat"
timotimo so ... native num attributes in perl6 classes not supported with default BUILD? 20:26
coercive types are going to be interesting.
jnthn Yeah 20:27
It's part of the whole natives stuff that needs doing
timotimo has no idea what that entails 20:30
same for coercive types
i'm also not sure if i'm going to finish the nodal stuff, i think i'll need some guidance for that some time
jnthn
.oO( How many full time jobs worth of work do I have on Perl 6? :) )
20:39
nwc10 jnthn: "a sufficiency" 20:43
timotimo so ... a coercive type has a different type for typechecks and then does a coercion ... so is that using .Typename method calls? 20:46
timotimo or how is it supposed to work? 20:50
for the simplest things like Str(Cool), it's easy, because then i can just say "oh, you mean to call .Str on any Cool that comes in" 20:51
and i suppose for custom types that can only sometimes work?
jnthn So far, my feeling is we need an nqp::istype variant that works in coercive contexts 20:56
And will accept a different result out
timotimo oh, so we want to pipe the value through nqp::istype and istype itself does the coercion? 20:57
what if we only want to check for match and not actually coerce?
jnthn No, we need another op...
nqp::istype will still be checky
I think that's how we want it.
timotimo and other things, like is $foo ~~ CoerciveType mutating for $foo? i don't think it should, actually.
timotimo i agree, istype should not be magical like that 20:58
jnthn Well, that's where we'll need some spec work :)
We need to be careful at a level most people don't think of
Which is that coercion may involve a method call but certain things imply various type checks won't do that at present.
oh, that may not be true...
timotimo in my opinion, coercive types make sense mostly (perhaps only) in assigny situations like attributes, assignments and argument passing 20:59
that's the least implementor-torturing version i can think of, which may not be what we want to end up using 21:00
jnthn yeah, we need to define where they make sense and what there sematnics are in other places (possibly, error)
timotimo how much is missing actually to make has num $.foo work? 21:06
jnthn That is probably fixable with BUILDPLAN tweaks 21:07
timotimo oh, nice!
jnthn Like, add some extra instruction codes 21:08
timotimo that sounds doable!
jnthn Yeah, it's like an ale-level task 21:09
timotimo i don't know what that's supposed to mean :|
jnthn Well, a really easy, boring task is like, lager-level. But a really complicated one needs a stout or a barley wine. An ale is like, in the middle. :) 21:11
.oO( We all rate tasks by what kind of beer we'd want in order to take it on, right? :P )
timotimo heh.
timotimo BUILD_LEAST_DERIVED is the only place where i have to work with buildallplan? 21:21
huh. i'm not actually sure why the buildplan is split into parrot and nonparrot 21:22
the only difference my eye can see is the use of atpos or atpos_s 21:24
oh, there's actually two copies, one for BUILDALL and one for BUILD_LEAST_DERIVED and the difference is probably just one line or something :P 21:27
but it's sufficiently hot code to require duplication for the tinyest difference
oh, it says why it needs to be different on parrot 21:28
timotimo i'm kind of sad we can't just go ahead and do actual code generation 21:29
for the buildplan i mean
this still has things like strings for attributes instead of an integer slot for hash-less access 21:30
jnthn timotimo: Yeah, some hint_for love wouldn't go amiss :) 21:35
timotimo though the last time i timed that stuff it didn't seem to make a difference 21:36
i'd still like to try it some time, though
r: class Foo { has num $.a; }; say Foo.^attributes[0].^methods 21:37
camelia rakudo e22ac2: OUTPUT«<anon> <anon> <anon> <anon> <anon> <anon> <anon> <anon> <anon> <anon> <anon> <anon> <anon> <anon> <anon> <anon> <anon> <anon> compose apply_handles get_value set_value container has-accessor readonly package Str gist␤»
timotimo r: class Foo { has num $.a; }; say Foo.^attributes[0].container.^methods
camelia rakudo e22ac2: OUTPUT«No such method 'methods' for invocant of type 'Perl6::Metamodel::NativeHOW'␤ in block at /tmp/3XpypOrDnl:1␤␤»
timotimo is that the proper way to figure out that it's a native attribute?
r: class Foo { has num $.a; }; say nqp::objprimspec(Foo.^attributes[0].container); 21:39
camelia rakudo e22ac2: OUTPUT«2␤»
timotimo r: class Foo { has int $.a; }; say nqp::objprimspec(Foo.^attributes[0].container);
camelia rakudo e22ac2: OUTPUT«1␤»
timotimo r: class Foo { has str $.a; }; say nqp::objprimspec(Foo.^attributes[0].container);
camelia rakudo e22ac2: OUTPUT«3␤»
jnthn .type on the attribute meta-obj I think
timotimo r: class Foo { has Str $.a; }; say nqp::objprimspec(Foo.^attributes[0].container);
camelia rakudo e22ac2: OUTPUT«0␤»
timotimo r: class Foo { has Str $.a; }; sayFoo.^attributes[0].^type;
camelia rakudo e22ac2: OUTPUT«===SORRY!=== Error while compiling /tmp/gweer1mTTD␤Undeclared routine:␤ sayFoo used at line 1␤␤»
timotimo r: class Foo { has Str $.a; }; say Foo.^attributes[0].^type;
camelia rakudo e22ac2: OUTPUT«No such method 'type' for invocant of type 'Perl6::Metamodel::ClassHOW'␤ in block at /tmp/Md10j0UM0S:1␤␤»
timotimo r: class Foo { has Str $.a; }; say Foo.^attributes[0].HOW.type(Foo.^attributes[0]); 21:40
camelia rakudo e22ac2: OUTPUT«No such method 'type' for invocant of type 'Perl6::Metamodel::ClassHOW'␤ in block at /tmp/kG47F8Kqv6:1␤␤»
timotimo oh wait, that's not right
r: class Foo { has Str $.a; }; say Foo.^attributes[0].type;
camelia rakudo e22ac2: OUTPUT«(Str)␤»
timotimo r: class Foo { has str $.a; }; say Foo.^attributes[0].type;
camelia rakudo e22ac2: OUTPUT«(str)␤»
timotimo that seems right, thanks!
r: class Foo { has str $.a; }; say nqp::objprimspec(Foo.^attributes[0].type);
camelia rakudo e22ac2: OUTPUT«3␤»
timotimo r: class Foo { has str $.a; }; my $f = Foo.new; nqp::setattr($f, '$.a', 'foo'); 21:46
camelia rakudo e22ac2: OUTPUT«===SORRY!===␤Error while compiling block (source text: "class Foo { has str $.a; }; my $f = Foo.new; nqp::setattr($f, '$.a', 'foo');"): Error while compiling op call: Error while compiling block : Error while compiling op setattr: No registered operation han…»
jnthn bindattr
timotimo right, thanks
r: class Foo { has str $.a; }; my $f = Foo.new; nqp::bindattr($f, '$!a', 'foo'); 21:47
camelia rakudo e22ac2: OUTPUT«===SORRY!===␤Error while compiling block (source text: "class Foo { has str $.a; }; my $f = Foo.new; nqp::bindattr($f, '$!a', 'foo');"): Error while compiling op call: Error while compiling block : Error while compiling op bindattr: Operation 'bindattr' requ…»
timotimo r: class Foo { has str $.a; }; my $f = Foo.new; nqp::bindattr($f, '$!a', Foo, 'foo');
camelia rakudo e22ac2: OUTPUT«use of uninitialized value of type Foo in string context in block at /tmp/7PMHxusCcT:1␤␤Can not bind attribute '' declared in class 'Str' with this object␤ in block at /tmp/7PMHxusCcT:1␤␤»
timotimo wrong way around
and it probably should be bindattr_str and friends, right?
jnthn For native,s yeah
And you need to nqp::decont($f) there 21:48
But self is already donce't
*decont'd
timotimo ah, good.
jnthn bwaha...I was going to do ablaut on decont, wrote it, and realized how rude it was
timotimo de ... cunt? :) 21:50
diakopter :/
jnthn *sigh* 21:51
timotimo i now have a bit of code that i can now try to compile 21:56
timotimo whaaaat, Could not find Perl6::BOOTSTRAP in any of: 22:02
timotimo Method 'create_BUILDPLAN' not found for invocant of class 'Perl6::Metamodel::ClassHOW' huh 22:03
i accidentally locerwased the B ni buildplan
.... wow i can NOT type if i have a delay of >0.5s in my ssh 22:06
timotimo it may even be the same thing as hearing your own voice a second or so delayed playing back at you will cause you to not be able to continue speaking 22:07
rakudo.jvm stage parse takes 200 secodns on my poor weak old laptop :| 22:09
jnthn sleep & 22:13
timotimo d'oh, imprecise line numbers in backtraces on the jvm strikes again! 22:15
huh. This representation can not unbox to a native int - don't really know where i'm trying to interpret something as int :| 22:18
timotimo oh, haha 22:20
[Coke] timotimo: you want "timotimo" or your real name in the release announcement? 22:21
Mouq: Ditto?
timotimo i'd like the real name please :) 22:23
TimToady integers are reals too! 22:24
Mouq [Coke]: Real sounds good 22:25
TimToady r: say Int ~~ Real
camelia rakudo e22ac2: OUTPUT«True␤»
Mouq r: say Int ~~ Numeric 22:26
camelia rakudo e22ac2: OUTPUT«True␤»
Mouq r: say Int ~~ Num
camelia rakudo e22ac2: OUTPUT«False␤»
dalek p: a7c5369 | dwarring++ | examples/rubyish/ (7 files):
implemented rubyish lambda, etc - nqp::makeclosure++
22:27
[Coke] grondilu: same question to you. 22:28
dwarring feels the need to give ops karma nqp::makeclosure++ 22:28
timotimo i don't know why, but my use of bindattr_* seems to be wrong 22:30
now i have a good reason to check out cokes op docs! :)
oh crap what did i do o_O 22:31
i think i just accidentally created a "nom" branch of nqp on github >_>
diakopter erm
but it already had one?
timotimo no
timotimo nqp has master 22:32
timotimo i think i'm using bindattr right. now i don't know what's going wrong 22:32
[Coke] ah. I'm pretty sure grondilu is also duped. 22:33
timotimo also, i'm getting cannot unbox to native int if i have a num attribute, so it's not the value that's going into the bindattr_ call
grondilu [Coke]: what question? 22:34
[Coke] .u æ 22:35
yoleaux U+00E6 LATIN SMALL LETTER AE [Ll] (æ)
[Coke] grondilu: what's your name?
grondilu oh about name. My real name, please. Lucien Grondin
grondilu will be glad to figure in this
[Coke] You're in as L. 22:37
assuming that came from github.
timotimo ah, cool, now i'm getting a null pointer exception! 22:40
i must have made it better than before! >_
can objprimspec ever return null? 22:41
[Coke] I'd say check the docs, but I know who's working on those...
timotimo :) 22:43
objprimspec isn't doc'd yet
[Coke]: do you want to add "1 = int, 2 = num, 3 = str" to the "primitive type" text for primspec ops? 22:44
[Coke] timotimo: can you add it as long as you're in there? 22:45
timotimo oh, i do have a commit bit in nqp
dalek p: 152d483 | timo++ | docs/ops.markdown:
explain what the primitive types for *primspec are.
22:46
dwarring nqp: my $n; my $s := sub (){say(++$n)}; $s(); $s() # closure 22:46
camelia nqp: OUTPUT«1␤2␤»
timotimo nqp-j: say(nqp::objprimspec(NQPMu)) 22:47
nqp-jvm: say(nqp::objprimspec(NQPMu))
camelia nqp-jvm: OUTPUT«0␤» 22:48
timotimo how do i get a NPE :o
dalek kudo/nom: b991e0b | coke++ | docs/announce/2013.0 (4 files):
announcements aren't executable
kudo/nom: 6364da9 | coke++ | docs/release_guide.pod:
Document release schedule with no deps
kudo/nom: 7f8de0c | coke++ | docs/announce/2013.10.md:
add release announcement for 2013.10
kudo/nom: b9d7c10 | coke++ | docs/release_guide.pod:
relocate &name release
kudo/nom: bd315da | coke++ | docs/release_guide.pod:
need moar modules
dwarring nqp: sub make_incr(){my $n; sub (){say(++$n)} }; my $s:= make_incr(); $s(); $s() 22:52
camelia nqp: OUTPUT«1␤2␤»
lizmat [Coke]: I think the method postcircumfix:[] and {} changes to sub should be mentioned in the short list as well, no?
dalek p: c774afd | coke++ | VERSION:
bump VERSION to 2013.10
[Coke] lizmat: you did those, aye? Can you add a line for me? 22:53
lizmat will do
[Coke] lizmat++ !
my plan is to try to get the nqp release done before I head out for a bit, then do the rakudo release when I return. plenty of time for volk to edit the announcement and the changelog. ;)
dalek kudo/nom: 1f77c4c | (Elizabeth Mattijsen)++ | docs/announce/2013.10.md:
Mention postcirumfix [] and {} changes from method to sub
22:57
zjmarlow will circular module loading ever be nonfatal? 22:58
timotimo a friend just sent me a link to a shop on amazon that sells ducks ... to solve my programming problems %) 23:05
[Coke] lizmat++ 23:11
dalek p: b8b44d8 | dwarring++ | docs/ops.markdown:
some doco for nqp::makeclosure
[Coke] heads out, will return much later.
Mouq rn: my $a .= ++; say $a 23:20
camelia rakudo 1f77c4: OUTPUT«No such method '&postfix:<++>' for invocant of type 'Any'␤ in method dispatch:<.=> at src/gen/CORE.setting:1127␤ in block at /tmp/1JVYQuHK8Z:1␤␤»
..niecza v24-98-g473bd20: OUTPUT«0␤»
Mouq Which of course means my $a = $a = $a + 1, but I'd still think it should work :p 23:22
lue r: my $a; $a++; say $a; 23:26
camelia rakudo 1f77c4: OUTPUT«1␤»
lue r: my $a++; say $a;
camelia rakudo 1f77c4: OUTPUT«===SORRY!=== Error while compiling /tmp/2w3w9SdWkL␤Preceding context expects a term, but found infix + instead␤at /tmp/2w3w9SdWkL:1␤------> my $a++⏏; say $a;␤»
lue r: my $a; $a .= ++; say $a;
camelia rakudo 1f77c4: OUTPUT«No such method '&postfix:<++>' for invocant of type 'Any'␤ in method dispatch:<.=> at src/gen/CORE.setting:1127␤ in block at /tmp/AlIwmnBhTl:1␤␤»
Mouq doesn't actually know how dispatch:<.=> works… fires up vim 23:28
dwarring ....arrgh it's takeclosure 23:34
dalek p: 062b576 | dwarring++ | docs/ops.markdown:
doco oops nqp::makeclosure => nqp::takeclosure
23:36
dwarring glasses or bigger font 23:37
timotimo huh. on parrot it doesn't explode ... 23:47
grondilu [Coke]: did you get my privmesg? 23:58
grondilu notices that [Coke] is afk
what the syntax for tell already? 23:59
timotimo r: class Foo { has num $.a }; my Foo $f .= new(:a(0e0)); # now works locally, but the code won't build on jvm :(
camelia rakudo 1f77c4: OUTPUT«Cannot modify an immutable value␤ in block at src/gen/CORE.setting:838␤ in method BUILDALL at src/gen/CORE.setting:821␤ in method bless at src/gen/CORE.setting:810␤ in method new at src/gen/CORE.setting:795␤ in method new at src/gen/CORE.setting…»