»ö« 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!
Set by sorear on 4 February 2011.
jnthn japhb_: gist.github.com/1233689 00:06
Will push in a moment.
japhb_: It gives you back a list of matches. If it's empty, you know that you need to show usage info. Otherwise, go ahead and do the dispatch for real.
dalek kudo/nom: 8453ed1 | jnthn++ | src/core/Routine.pm:
Add a way to get a set of matching candidates for a multi.
00:08
jnthn japhb_: With ^^, it should be relatively straightforward now. :) 00:09
jnthn sleep; more Perl 6 hacking tomorrow :) 00:24
[Coke] was just going to give jnthn a hard time for still being awake! 00:41
sorear good * #perl6 01:03
colomon \o 01:04
benabik o/ 01:11
japhb Can someone kick whatever updates perl6.org/compilers/features ? It doesn't appear to have picked up jnthn++'s changes, and it's been a couple hours 01:38
I guess for this channel s/kick/hug/
jnthn: Thank you, I'll take a look when I'm not chasing young'ns 01:40
benabik HW assignment: "Read an e-mail file, print the From, To, Subject, and Cc headers" Bonus points for brevity. My answer: perl -ne 'exit if/^$/;print if/^(From|To|Subject|Cc):/' 02:33
I'd take suggestions on shortening it, but that would be cheating. :-D
TimToady++ # Creating expressive languages
sorear benabik: egrep '^(From|To|Subject|Cc)' 02:38
benabik sorear: Will print non-header lines that start with those. :-D
sorear egrep is officially deprecated in favor of grep -E, but, well, brevity
benabik I suppose I could use see first.
*sed
sorear hmm 02:39
benabik Although I don't need the : if I know I'm in headers. 02:39
sorear something like sed '/^$/q;/^\(From\|To\|Subject\|Cc\)/p' then
benabik Bluh, but yes.
sorear or perl -ne 'print if 1../^$/&&/.../' 02:40
the flip-flop operator is under-appreciated
sorear pity this is a text task, I'd love to show off a J solution but J is not strong with text :D 02:40
benabik I don't quite get flipflop sadly. 02:41
Tene sorear: use sed -r instead of all those extra escapes 03:13
sorear: also, you need -n to surpress unwanted output 03:14
felher Is there a neat way to do function composition in perl6? Something neater than: sub compose($f, $g) { return anon sub ($x) { return $f($g($x)); } } # <---- is that the way one would write a compose function? 03:15
sorear felher: yes, although anon is redundant there 03:18
felher sorear: k, thnx :) 03:19
sorear felher: as for "something neater", I propose s/compose/infix:<o>/ 03:20
japhb A real compose should be agnostic to the signature of $g, right?
felher sorear++: yeah, sounds good :). 'Neat' was the wrong word in the first place, i guess. I should have used 'builtin'. :) 03:21
japhb: yeah, i guess it should :) 03:22
Tene yeah, you want to capture/flatten the arg list 03:23
.u ∘ 03:24
phenny U+2218 RING OPERATOR (∘)
sorear .u ⎄
phenny U+2384 COMPOSITION SYMBOL (⎄)
sorear I wonder what that is 03:24
oh, Keyboard symbols 03:25
felher sub compose($f, $g) { return anon sub (|$x) { return $f($g(|$x)); } } # <--- would one use |$x for that? 03:28
sorear felher: yes 03:40
felher sorear: nice :) 03:49
sorear: thnx a lot :)
japhb sorear: Would this be correct: 03:51
gah, unicode pasting hell
japhb_ multi infix:<∘>(&f, &g) { -> |$args { f(|(g(|$args))) } }; sub f($a, $b) { "$a - $b" }; sub g($a, $b, $c) { return $a, $c }; my &h := &f ∘ &g; h(7, 8, 9); 03:52
japhb That doesn't work in Rakudo ATM 03:53
sorear: ^^
sorear japhb: you shouldn't use | between f and g 04:04
japhb: what you're doing isn't quite valid, because of a fundamental asymmetry between arguments (plural) and return values (singular, but return makes a parcel) 04:05
japhb_ rakudo: sub compose(&f, &g) { -> |$args { f(|(g(|$args))) } }; sub f($a, $b) { "$a - $b" }; sub g($a, $b, $c) { return $a, $c }; my &h := compose(&f, &g); say h(7, 8, 9); 04:18
p6eval rakudo 8453ed: OUTPUT«7 - 9␤»
japhb_ rakudo: sub compose(&f, &g) { -> |$args { f(g(|$args)) } }; sub f($a, $b) { "$a - $b" }; sub g($a, $b, $c) { return $a, $c }; my &h := compose(&f, &g); say h(7, 8, 9);
p6eval rakudo 8453ed: OUTPUT«Not enough positional parameters passed; got 1 but expected 2␤ in sub f at /tmp/92oZ812Xe_:1␤ in block <anon> at /tmp/92oZ812Xe_:1␤ in <anon> at /tmp/92oZ812Xe_:1␤ in <anon> at /tmp/92oZ812Xe_:1␤␤»
japhb_ sorear: that ^^ was from an earlier version, before I tried the operator form. Note that without the extra |() between f and g, it fails. 04:19
japhb_ rakudobug or pebcak? 04:20
sorear japhb_: latent pebcak maybe. |() will work in the simple case of a list of scalar variables, but in general the return ,,, / |() pair discards information 04:44
sorear japhb_: in particular, return(1,2,3) and return((1,2,3)) are the same, but f(1,2,3) and f((1,2,3)) are not 04:45
moritz good morning 05:04
masak good morning 05:09
moritz masak: any thoughts on gist.github.com/1233070 ? 05:10
masak looks 05:12
masak looks nice and clean. 05:13
I assume .set_codes is a temporary workaround for lack of .STORE or similar.
sorear o/ MASAK 05:14
masak oh hai SOREAR
masak commutes 05:15
moritz nqp: nqp::say(pir::typeof__SP($*OUT)) 05:30
p6eval nqp: OUTPUT«Contextual $*OUT not found␤current instr.: '_block1000' pc 43 ((file unknown):40) (/tmp/R0MGHzx5AX:1)␤»
moritz nom: nqp::say(pir::typeof__SP($*OUT))
p6eval nom 8453ed: OUTPUT«IO␤»
sorear jnthn: ping 05:44
japhb sorear: so what's the solution for a third-party routine to transparently pass the return from one routine in as the arguments to another without any modification at all? In other words, how do you compose "properly"? 05:48
sorear japhb: you're trying to compose an octagonal peg with a round hole. 05:50
return values and argument lists are not quite the same thing in Perl 6; in general it doesn't make sense to "pass the return from one routine in as the argumentS to another without any modification at all"
japhb sorear, nevermind how I attempted to do it. Is it *possible* within the confines of spec'ed Perl 6? And if so, how do you do it?
hmmm. That is too bad. 05:51
A very subtle loss from the Perl 5 world that I would not have expected.
sorear japhb: in perl 6, functions return exactly one value 05:52
it makes total sense to write sub compose(&f,&g) { -> |$args { f(g(|$args)) } }
passing the return value of g as the argument (note lack of s) to f
you could argue that Perl 6 is actually working better here, because you can't write a wantarray-transparent composition in perl 5 05:53
try not to think of return $f, $g as returning two values, because it's not. it's sugar for list construction
japhb But if g() can only ever return one thing, but f() can take an arbitrary number of things, then the only general composition would be to always flatten the return of g(), I would think 05:56
And if f() wanted to not have that happen, then it would declare :(|$args) as its signature
sorear japhb: that fails to be a general composition, for reasons I have already tried to explain.
sorear flattenning is a lossy operation, because it tries to DWIM 05:58
japhb sorear, then essentially there is no general composition, right? Because you cannot have an external composer that will arbitrarily compose any two Perl 6 subs that *do not know they might be composed*, and thus do not follow a special protocol to make it possible. 05:59
sorear japhb: how would you write a "general composer" in Pytoh? 06:01
japhb Hmmm, come to think of it, you've actually said that it doesn't make sense to even ask, because if a routine can only ever return one thing, there is no sensical way in which one can losslessly pretend it returns an arbitrary number of things. 06:02
TimToady that depends entirely on how g binds it 06:05
japhb sorear, I wouldn't, since I don't speak Python (I only read it). In a stack language, however, it's trivial.
TimToady if g binds it as a slurpy, if flattens again
sorear it's a fairly common pattern in expressionist languages like Perl that a function call is an expression, so a function needs to return values from the same semantic universe as single terms 06:06
japhb TimToady, I'm confused. Did you mean g or f? 06:07
TimToady oh, f is on the outside, so f 06:07
sorear there has been some speculation that Perl 6 should allow returning general Captures, with special binding support; but this would not count as "without any modification at all"
japhb TimToady, ah, OK, yes, I follow you there. 06:08
sorear personally I lean towards forcing the user to explicitly return a Capture object if ey wants a Capture-style return
japhb sorear, as opposed to letting the caller specify "I want to get a capture back from you"? 06:09
sorear japhb: wantarray is long dead.
japhb sorear, I spoke poorly. 06:10
sorear (there has been some speculation about reviving wantarray to support sink contexts, but everything about sink context is currently well into speculation) 06:11
worr sorear: what's the perl6 replacement for wantarray()?
japhb I meant, as opposed to letting the caller specify: "Perl, instead of handing me back whatever the callee thought it was going to send, I want you to build and return a raw Capture instead"? I was asking if that was the opposing position to the "lean towards forcing the user to explicitly return a Capture object if ey wants a Capture-style return". I wasn't sure what the opposing viewpoint to yours actually was. 06:12
sorear japhb: oh! sorry, I'm half asleep.
japhb sorear, np!
sorear japhb: the opposing viewpoint was to consider &return as (notionally) creating a Capture object in all cases 06:13
japhb ah, ok
sorear starts to observe that most languages have the octagonal-returns circular-arguments problem in practice, even where the theory is symmetrical 06:14
TimToady b: sub infix:<∘> (&f, &g --> Block) { -> \$args { f g |$args } }; say ~(&reverse ∘ &ords)("abc") 06:15
p6eval b 1b7dd1: OUTPUT«99 98 97␤»
TimToady note the passing of a list from ords to reverse
sorear Haskell culture dictates functions that accept multiple arguments curried but return tuples, so composing stuff often requires liberal application of uncurry and other combinators
Scheme allows return lists with (values), but it isn't used all that much, and there is a strong bias towards designing functions to return exactly one value 06:16
japhb b: say (ords("abc")).WHAT 06:17
p6eval b 1b7dd1: OUTPUT«List()␤»
japhb nom: say (ords("abc")).WHAT 06:17
p6eval nom 8453ed: OUTPUT«List()␤»
sorear when I say "list" I mean something that can be put on the right side of my @foo = ... and have it DWIM 06:18
this is simultaneously more and less general than simply "object that ~~ List"
japhb b: say &reverse.signature.perl
p6eval b 1b7dd1: OUTPUT«get_attr_str() not implemented in class 'Perl6MultiSub'␤ in main program body at line 1:src/metamodel/RoleToInstanceApplier.nqp␤»
sorear japhb: (*@items)
japhb heh, p6eval.sorear FTW 06:19
TimToady context is applied lazily in Perl 6 at binding time
TimToady so you can't know whether your return value will be in scalar or list context, because it would require time travel 06:19
well, in the general case; specific cases may be analyzable 06:20
sorear all contexts in P6 work approximately like string/numeric/boolean context does in Perl 5
dictated by the consumer, using type-sensitive overloadable methods
although p6 doesn't have any of the syntactic boolean oddities that p5 does (yet?) 06:21
japhb TimToady: so your composition example is working because &reverse has a flattening single argument signature, rather than a more general multiple scalar signature, for example.
TimToady the slurpy signature doesn't care how many arguments there are 06:22
it has one formal parameter, if that's what you mean
japhb TimToady, yes, that's what I meant, and said badly (I'm pretty tired myself. :/)
sorear TimToady is on my time zone fwiw 06:23
though I guess he could still be on German Perl Workshop sleepphase, if he went
japhb As am I, IIRC. I just have had crappy sleep several days running, so I'm bleary.
TimToady with me, it's usually just brane damaje :) 06:24
japhb And yet, the Pun Center of the brain seems to still work fine ...
TimToady -Opun
sorear japhb: f g ... works for f=reverse because (*@items) knows what to do with a single argument 06:25
japhb sorear, right.
sorear japhb: a signature like ($f,$g,$h) would work well with f |g ... instead
japhb sorear, that makes me wonder if the general composer is actually just two forks that introspects f: if it has only one argument, pass it without flattening. Otherwise, flatten in passing. 06:26
sorry, only one *parameter
wow, my English really is a mess right now 06:27
TimToady a general composer would probably do currying like Haskell, and require geniuses to program it
sorear japhb: that might be a useful approximation. I doubt it would DWIM in all cases, and I lack the creativity ATM to decide
TimToady would like to make a withdrawal from the creativity ATM 06:28
japhb My mental block is that when I went off to "learn a language from another paradigm", I chose Forth. And if you asked a Forth guy how to do proper composition, he'd look at you as if you asked how you ensured that gravity was working tomorrow.
TimToady well, note that the reverser ords case would still work with a | composer 06:29
b: sub infix:<∘> (&f, &g --> Block) { -> \$args { f |g |$args } }; say ~(&reverse ∘ &ords)("abc") 06:30
p6eval b 1b7dd1: OUTPUT«99 98 97␤»
TimToady whew! :)
that would be a more p5ish composer 06:31
japhb I guess I kinda came at it from a P5 angle, didn't I?
TimToady so did I, so did I... :) 06:32
but the angle has changed a few times since then...
japhb Not surprising I suppose, since I do it all day ... :-)
heh
sorear japhb: you might think of forth as having a one-dimensional mindset here 06:33
in forth, it's not so easy to write something like f(g(x), h(x)), especially when x is a multi-cell object 06:34
Perl is much more tree-concious
(all user-level languages without built-in garbage collection need to be forgotten ASAP) 06:35
japhb
.oO( : i dup h swap g f ; ) # Which of course only works if x is a single cell, as you point out
06:37
sorear well, 2dup and 2swap exist.
but the lack of type encapsulation makes that not extend very well 06:38
japhb sorear, sure, but the underlying assumption is a fixed size of x.
right
You pretty much have to assume x is an address to the thing you really want, and g and h both want addresses.
Oh, hum, and I assumed that h *returns* only 1 cell. Heh, silly me. 06:39
Oh dear, if I keep down this path, I'll end up porting my Perl 5 Forth interpreter to Perl 6 .... I'm not so sure that could be strictly classified as sane. 06:40
sorear it's funny, I can remember *writing* at least two forths but I can't remember actually using one
japhb resembles that remark 06:41
TimToady
.oO(go forth and multiply...)
japhb I will say that I understood a *LOT* more of what VM people discuss after writing a Forth. And also got somewhat depressed when reading about some VM or other finally moving forward to the Forth state of the art circa when I was born. 06:42
Anyway, thank you sorear++ and TimToady++ for a damn fine conversation. 06:44
On that note, I think I shall retire for the night.
sorear if Forth were designed today, I would insist on it having strong(er) typing, garbage collection, and higher-order functions 06:46
sleep well
sorear out 07:24
ountscu o/;\o 08:07
hi monks!a problems~~ how to fix this when compile nqp,I got an error :get_pointer() not implemented in class 'GLOBALish' 08:10
moritz ountscu: hi. Which parrot revision are you using? 08:17
ountscu Parrot version 3.8.0-devel built for amd64-linux 08:19
moritz ountscu: nqp currently requires 3.8.0 (released version). For newer parrots you need to use the kill-useless-defaults branch of nqp 08:20
ountscu a new nqp branch? I never notice it before. thanks!! 08:23
moritz it's only a day or two old
and will be merged into master after the rakudo release
ountscu looks like a newborn baby? when will release the new rakudo? 08:26
moritz tomorrow, probably
ountscu what's new about the new release? 08:27
moritz lots of things :-)
a new meta object model
improved speed
better enums, better parameterized roles, ...
see the top of github.com/rakudo/rakudo/blob/nom/.../ChangeLog 08:28
ountscu excellent!I can't wait to try it.thanks !moritz! 08:32
jnthn morning, #perl6 08:42
moritz morning jnthn 08:43
jnthn pir::find_encoding__is(nqp::unbox_s(pir::perl6_decontainerize__PP($encoding))) 08:48
hmm...I thought nqp::unbox_s would already decontainerize...maybe not 08:49
moritz if it does, I can simplify some of my code quite a bit :-)
jnthn inline op repr_unbox_str(out STR, in PMC) :base_core { PMC *var = decontainerize(interp, $2);
Yes, looks like it does.
moritz \o/
jnthn getattr does not.
moritz ah right, you sometimes want to access the attribute of a container, but you never want to unbox it :-) 08:50
jnthn Aye
mls_ morning perl6! 09:01
Woodi moritz: :) help 09:03
moritz Woodi: what can I do you for? 09:04
Woodi i just tried test why IO::Socket::INET hangs for me and stuck on .new...
moritz waitwaitwait
start from the beginning
which version of rakudo are you using?
Woodi k
how to write: my $s = IO::Socket::INET.new( $host, $port); 09:05
moritz my $s = IO::Socket::INET.new( :$host, :$port);
Woodi :$host, :$port was working yesterday for me :) Star here
mls_ (strace is your friend ;) ) 09:06
moritz which star?
perl6 --version
Woodi This is Rakudo Perl 6, version built on parrot 3.6.0 0 09:07
problem is i have module where it works but new file test-recv.pl do not :) 09:08
pastebin.com/D3aUM9q0 09:10
moritz I think somebody reported that recv hangs
Woodi i have problem before recv and send... .new fails. and something listens on the port 09:12
i use 'get' line by line for now
moritz how does it fail? 09:13
Woodi .send not def on Failure 09:13
possible I::S::I need to be instantiated in class ? 09:14
moritz my $s = IO::Socket::INET.new( :$h, :$p ) or die();
that's wrong
the names of parameters are 'host' and 'port', not 'h' and 'p' 09:15
so use
.new(host => $h, port => $p) or so
tadzik jnthn: why in candidates-matching checker() is a sub, and not just inlined there?
good morning channel
Woodi damn 09:16
ok, recv (without buf) hangs... 09:17
Woodi thanx, cannot grasp params for %args... 09:18
moritz $ echo "foo"| ./perl6 -e 'say $*IN.read(2).list.perl' 09:20
Array.new(102, 111)
Woodi btw. in perl5 using hash as param was much slower (if i understund correct), and thats AnyEvent autor wroted additional API without %. how in perl6 ?
moritz \o/
tadzik \o/ 09:21
moritz Woodi: the problem in perl 5 was that hashes were flattened into argument lists, and later needed to be reconstructed
Woodi: that problem doesn't exist in Perl 6 anymore
Woodi ah, k :)
moritz if you declare a hash, and pass in a hash, it's pass-by-reference 09:22
(but write protected)
Woodi just by-pointer-access
in C terms
moritz yes
jnthn tadzik: To want a context without the invocant. 09:23
s/want/get/
dalek kudo/nom: 5a5f068 | moritz++ | / (4 files):
implement basic, cheating Buf

The "cheat" part is that it is actually a Buf8, not something that can store arbitrary integers
09:24
kudo/nom: f516563 | moritz++ | src/core/IO.pm:
IO.read
kudo/nom: 1186484 | moritz++ | src/core/Buf.pm:
simplify some Buf code, jnthn++
moritz $ ./perl6 -e '$*OUT.write(Buf.new(1, 2))'|hexdump -C 09:36
00000000 01 02 |..|
jnthn nice :) 09:36
moritz++
moritz hacking on Buf is fun! 09:37
I know the tools for interfacing with parrot PMCs well enough these days
dalek kudo/nom: be999e7 | moritz++ | src/core/IO.pm:
IO.write(Buf)
moritz and I get good encapsulation between rakudo and parrot
evalbot rebuild nom 09:38
p6eval OK (started asynchronously)
moritz nom: say (23, 56, 8).fmt('%02x', ' '( 09:38
p6eval nom 8453ed: OUTPUT«===SORRY!===␤Unable to parse postcircumfix:sym<( )>, couldn't find final ')' at line 1␤»
moritz nom: say (23, 56, 8).fmt('%02x', ' ')
p6eval nom 8453ed: OUTPUT«17 38 08␤» 09:39
jnthn For the nom version of Zavolaj, I'm thinking about switching over to the lowercase types.
So that we can do sized types also.
moritz wonders how to best .gist a Buf 09:40
I though of Buf:0x<a0 f3 08>
or maybe something more like hexdump output
Buf:<Stra.e> and then some form of hex representation afterwards 09:41
jnthn Some kind of hex dump is perhaps most useful. 09:43
moritz I'll go with hex only for now, and think about cleverer solutions later 09:44
dalek kudo/nom: 56df3d9 | moritz++ | src/core/Buf.pm:
Buf.gist, eqv for Buf
09:54
kudo/nom: 5a7752c | moritz++ | NOMMAP.markdown:
update NOMMAP

Buf is now "good enough" (I hope) to be removed from the punch list, and the segfault in mandelbrot-color is long gone
09:56
moritz jnthn: are WhateverCode closures cheaper than ordinary blocks in any way?
(I suspect they might not need $_)
nom: say (1, 1, 2) <<+>> (1, 2) 09:59
p6eval nom be999e: OUTPUT«2 3 3␤»
moritz nom: say (1, 1, 0, 0) <<+>> (1, 2)
p6eval nom be999e: OUTPUT«2 3 1 2␤»
moritz nom: say (1 xx -2).perl 10:05
p6eval nom be999e: OUTPUT«().list␤»
jnthn moritz: Yes, they are a bit cheaper. 10:09
moritz: They don't get the $_.
moritz rakudo: say ~^5 10:11
p6eval rakudo be999e: OUTPUT«0 1 2 3 4␤»
moritz uhm, what's bitwise negation?
flussence +~ ?
moritz I meant stringy bitwise negation, sorry
flussence rakudo: say ~^ 5 10:12
p6eval rakudo be999e: OUTPUT«0 1 2 3 4␤»
flussence hm, it's not that...
moritz S03:687 says it should be ~^ 10:13
flussence rakudo: say ~^ "5"
p6eval rakudo be999e: OUTPUT«0 1 2 3 4␤»
flussence argh
Woodi which nom branch i need for 'rakudo-dev' atm ?
moritz ah, but the grammar knows only of infix:<~^>, not of prefix
Woodi: nom
Woodi thanx 10:14
moritz b: say ~^'foo' 10:17
p6eval b 1b7dd1: OUTPUT«No applicable candidates found to dispatch to for 'prefix:<~^>'. Available candidates are:␤:(Buf $a)␤␤ in main program body at line 22:/tmp/dNcMTW4qAg␤»
snarkyboojum how does stringy bitwise negation work?
moritz 1) assume a bit width 2) negate 10:18
snarkyboojum doesn't seem like a very clear concept, considering we don't know the bits which constitute a string 10:19
assume a bit width?
moritz well, if you only have Latin-1, you can just subtract each codepoint from 255
that would be 8 bit width
snarkyboojum so depends on the current char encoding eh?
moritz S03:687 has a bit on that 10:20
"The use of coercion probably indicates a design error" :-) 10:21
snarkyboojum seems dodgy to me ;)
moritz also note that it returns a Buf, not a Str 10:22
so it doesn't round-trip
moritz proposes an alternative algorithm
chose a random number at least as high as the highest assigned codepoint 10:23
subtract the codepoints from that
and... have fun!
moritz -> lunch, or so
Woodi but how actualy to get nom branch of github.com/perl6/nqp.git ? only match-nom and it seems to be old. or other repo ? 10:28
dalek kudo/nom: 909cc3c | moritz++ | src/ (2 files):
parse prefix:<~^>, and implement it for Buf

also add Buf.elems
bbkr Buf and Str.encode in NOM! santa clause has come early this year :)
moritz Woodi: use master
(my fellow lunch nommers aren't ready yet...) 10:29
Woodi oki
Woodi compilation fails with called from Sub '_block1000' pc 196 (src/stage0/NQP-s0.pir:102) (src\stage2\gen\NQP.pm:1) in src/stage1/nqpmo.pbc 10:30
moritz Woodi: which parrot do you have?] 10:31
Woodi: and what's the error before the one you just pasted?
Woodi i use perl Configure.pl --with-parrot=/opt/perl6/bin/parrot (just compiled parrot 3.8.0)... 10:32
moritz the best way to build rakudo/nom is to 'git checkout 'nom' in the parrot branch, and then do perl Configure --gen-parrot && make
hm, 3.8.0 should be fine
Woodi i hate --gen-*...
moritz (later development versions are not good)
Woodi so i need 'nom' branch in parrot not github-nqp-master ? 10:33
Woodi lunch is good idea... 10:34
im2ee Hello! :)
tadzik hello 10:40
bbkr rt.perl.org/rt3/Ticket/Display.html?id=96430 (worth quick-implementing if Buf is already today's topic) 10:49
dalek kudo/nom: 9a2f7fc | jnthn++ | src/Perl6/Metamodel/NativeHOW.pm:
Make Int ~~ int and various other things on native type objects not explode.
10:52
kudo/nom: 1e27868 | jnthn++ | src/Perl6/Metamodel/NativeHOW.pm:
NativeHOW should just compose MROBasedTypeChecking, not do its own thing.
kudo/nom: 6a20116 | jnthn++ | src/Perl6/Actions.pm:
Basic support for an argument with trait_mod:<is>.
kudo/nom: 6eee0ca | jnthn++ | src/ (3 files):
Stub in a few sized natives. No associated functionality yet.
JimmyZ does num32 is Int right ? 11:02
snarkyboojum JimmyZ: does that depend on the machine word size 11:06
Woodi is it possible to 'tie' scalar like in p5 to increment on access ? eg: my $i=0; v6tie( $i) {...}; say "0: $i"; say "1: $i"; 11:06
masak im2ee: I have an even shorter solution to the problem from yesterday :)
flussence I'm at a complete loss what's wrong here... the method on line 7 never gets called: github.com/flussence/Pod-Tree-Walk.../Walker.pm 11:07
(and no error)
masak im2ee: namely, just generate all possible strings from the regex /<[abc]> ** 1..4/ -- a kind of "reverse regex matching", as it were.
im2ee: there's no mechanism to do that in Perl 6 itself, but it can easily be provided through a module. 11:08
JimmyZ jnthn: there may be some typo in 6eee0ca
im2ee masak, could You show me this? 11:09
dalek kudo/nom: 60e9ad7 | jnthn++ | src/core/natives.pm:
Fix copy-paste fail noticed by JimmyZ++.
11:11
Woodi flussence: you try without declare recurse-node without Pod::Block type ? 11:13
s/wihout//
whatever :)
tadzik flussence: I get a PASS 11:14
flussence tadzik: does it at least print out that "In recurse" bit? 11:15
tadzik flussence: nah, doesn't seem so :/ 11:16
flussence I think I figured it out...
yep, it's that multi bug from yesterday... 11:17
jnthn flussence: Got a link to the nopaste handy?
flussence the one from yesterday? 11:18
jnthn yes
flussence gist.github.com/1232212
masak im2ee: only an earlier example of the same that I made a few months back: gist.github.com/908829 11:22
but the principle is the same.
that script prints 36 different strings on the form 'henning', 'manall', 'menkell', etc. 11:23
jnthn flussence: Did you file an RT ticket? 11:25
im2ee ok :) 11:26
masak im2ee: so a solution could be as simple as `use GGE; .say for generate GGE::Perl6Regex.new('<[abc]> ** 1..4').exp` 11:29
flussence I've been trying to avoid making Yet Another Website Account, but if you really want me to... :)
jnthn flussence: You don't have to
You just send an email.
flussence: I have a patch, I just want a ticket to make sure it gets tests.
flussence whoa, didn't know that
im2ee masak++, thanks. :)
flussence will do
jnthn masak++ probably knows the address off by heart too :P 11:30
flussence ooh, will this "perlbug" program work for perl6 bugs? 11:32
jnthn not afaik
flussence aww
dalek kudo/nom: e5fab7f | jnthn++ | src/Perl6/Metamodel/BOOTSTRAP.pm:
Fix generic instantiation bug that led to over-sharing of dispatchee lists.
jnthn flussence: e5fab7f should fix your issue 11:33
flussence \o/
moritz comes back from lunch and sees patches. o/
flussence (hm, I *could* add the test myself...
jnthn flussence: That also works :) 11:34
JimmyZ nom: say int
p6eval nom 909cc3: OUTPUT«No method cache and no find_method method in meta-object␤ in sub say at src/gen/CORE.setting:4811␤ in <anon> at /tmp/uGMdrkqv8l:1␤ in <anon> at /tmp/uGMdrkqv8l:1␤␤»
jnthn JimmyZ: Fixed that one earlier today, but p6eval didn't rebuild yet. :) 11:35
JimmyZ loop { jnthn++; sleep 1; }
jnthn flussence: Long story short, it was a bug in proto auto-generation, but the underlying issue was actually in the mechanism I built the auto-gen on. 11:36
flussence looks a bit more involved than I'd imagined it... I thought it was just forgetting to check the multi name :) 11:38
jnthn No, it was quite deep. 11:39
masak jnthn: what [email@hidden.address] ? :) 11:45
jnthn :)
masak I do, but I usually rely on tab completion.
jnthn see! :) 11:46
masak 'r' <Tab>
perl6: try { die "OH NOES"; CATCH { say $! } } 11:51
p6eval pugs: ( no output )
..rakudo 909cc3, niecza v9-32-g380d891: OUTPUT«Any()␤»
masak b: try { die "OH NOES"; CATCH { say $! } }
flussence t/spec/S12-methods/multi.rakudo dies at test 5 for me, anyone else seeing that?
p6eval b 1b7dd1: OUTPUT«OH NOES␤»
masak sorear: I think b is correct here.
sorear: want me to submit a nieczabug? 11:52
moritz the spec on exceptions is still very vague
jnthn masak: TimToady said the other day that $! doesn't contain the current exception in CATCH
masak: At lesat, afaik
masak: So, nom and niecza are probably right. 11:53
masak: Look in $_
jnthn masak: Rationale is that the body of CATCH is implicitly a loop, iiuc. 11:53
masak ok. 11:54
makes some sense, yes.
perl6: try { die "OH NOES"; CATCH { .say } }
p6eval niecza v9-32-g380d891: OUTPUT«OH NOES␤» 11:55
..pugs: ( no output )
..rakudo 909cc3: OUTPUT«Any()␤»
masak niecza++
jnthn Hopefully the in-development mls++ patch will help nom there.
masak though if we're talking about Least Surprise, $! is definitely where it should be. I don't think it's just me.
tadzik I'd expect $! too
why wouldn't it be there? 11:56
jnthn Note that
jnthn try { die "OH NOES" }; say $! # should be OH NOES 11:56
tadzik yes
moritz flussence: multi.rakudo dies after test 16 here, and has a few failures before
jnthn huh, I got a clean spectest run... 11:57
oh, no wonder, it's commented out in spectest.data. 11:58
moritz ah :-)
jnthn It's correct that it does 11:59
*dies
The test file is wrong with regard to the new proto spec.
masak perl6: say sprintf "<%10s>", "foo"
p6eval niecza v9-32-g380d891: OUTPUT«<foo>␤»
..pugs, rakudo e5fab7: OUTPUT«< foo>␤»
masak submits nieczabug
jnthn hmm...this test file is kinda crufty. 12:03
moritz bbkr: this commit should make you happy....
dalek kudo/nom: 2466044 | moritz++ | src/core/IO/Socket.pm:
IO::Socket.read (returns Buf)
12:04
bbkr moritz++ ! 12:05
moritz bbkr: it would be nice if you could test it with non-ASCII chars
masak moritz++ 12:06
jnthn moritz++
dalek ast: a28816d | jnthn++ | S12-methods/multi.t:
Fix one of the many issues in S12-methods/multi.t; needs a good going over due to new dispatch semantics.
12:09
bbkr moritz: building patched rakudo right now... 12:11
moritz bbkr: no hurry (but of course I don't object to quick feedback :-) ) 12:11
dalek ast: e17926a | jnthn++ | S12-methods/multi.t:
Toss some incorrect deferral tests; we test that properly in more appropriate test files.
12:13
flussence I've golfed down the paste to a pretty small test file - is there a good place to stick that or should I hold off until the rest of multi.t works?
dalek ast: 42b0117 | jnthn++ | S12-methods/multi.t:
Fudge a few tests; now this runs on nom.
12:15
flussence there's my answer :)
jnthn :)
Woodi my $resp = $!sock.get(); my $len = substr( $resp, 1, $resp.bytes - 2 ); $resp = $!sock.recv( $len ); # expected Int but got Str instead 12:17
no Str -> Int conversion ? 12:18
automagic one...
moritz Woodi: we probably should have. Use $len.Int for now
Woodi oki
jnthn not Cool 12:19
:P
[Coke] stares at you over his coffee. 12:20
dalek kudo/nom: 42abf87 | jnthn++ | t/spectest.data:
Run S12-methods/multi.t.
moritz nom: sub f(Cool $x as Int = 3) { say $x }; f 12:21
p6eval nom e5fab7: OUTPUT«3␤»
dalek ast: d7c5956 | jnthn++ | S12-methods/multi.t:
Unfudge 3 tests that nom passes that master did not.
12:22
moritz bbkr: would you be fine with changing $.liste in IO::Socket::INET from Int to Bool?
dalek ast: d218bab | flussence++ | S12-methods/multi.t:
Add a test for the fix in rakudo e5fab7f
12:23
flussence ooh, I just figured out a neat trick - "git rebase origin/master" gets rid of noise from trivial merge commits 12:24
moritz flussence: that's what git pull --rebase does 12:25
jnthn I use...what moritz said :)
moritz you can even alias pr = pull --rebase or so
flussence goes and does that right away since I'll probably forget it later :)
bbkr moritz: Bool $.listen seems more correct 12:26
moritz bbkr: I've made it a Bool, but the constructor coerces to Bool, so that old code with :listen(1) will continue to work 12:33
dalek kudo/nom: 8ba1a33 | moritz++ | src/core/IO/Socket (2 files):
[IO] accept Cool args; $.listen is now Bool
moritz Woodi: there you have the automagic Str -> Int conversion :-)
JimmyZ rakudo: multi trait_mod:<is>($t, :$ne!) { say $ne; } ; my native f is ne { } 12:36
p6eval rakudo e5fab7: OUTPUT«===SORRY!===␤No applicable candidates found to dispatch to for 'trait_mod:<is>'. Available candidates are:␤:(Mu $type, Any $size, Any $nativesize)␤:(Attribute $attr, Any $rw)␤:(Attribute $attr, Any $readonly)␤:(Routine $r, Any $rw)␤:(Routine $r, Any $default)␤:(Par…
jnthn JimmyZ: Need a Mu on that $t 12:37
JimmyZ oh yes, thanks 12:37
JimmyZ wonders how to use multi trait_mod:<is>(Mu $t, $b, $d, :$ne!) { say $b; } ; 12:39
jnthn You don't.
Different trait mods need you to write the appropraite signature.
JimmyZ I can't pass a value to :$ne ? 12:41
jnthn Yes, one
is my_trait(42) 12:42
moritz what about my_trait(1, 2, :foo) ?
JimmyZ rakudo: multi trait_mod:<is>(Mu $t, :$ne!) { say $ne; } ; my native f is ne(45) { }
p6eval rakudo e5fab7: OUTPUT«===SORRY!===␤No applicable candidates found to dispatch to for 'trait_mod:<is>'. Available candidates are:␤:(Mu $type, Any $size, Any $nativesize)␤:(Attribute $attr, Any $rw)␤:(Attribute $attr, Any $readonly)␤:(Routine $r, Any $rw)␤:(Routine $r, Any $default)␤:(Par…
moritz is that supposed to work?
jnthn Probably passes a parcel 12:43
moritz makes sense
jnthn JimmyZ: No, you need an argument
Mu $t, $arg, :$ne!
jnthn tries to figure out how NativeCall should look in nom. 12:44
JimmyZ so I can't pass a vlue to ne directly?
*value
jnthn no 12:45
It's only role is to disambiguate the dispatch. 12:46
*its
Note that originally we used to require you to declare a type with the role name.
grr
with the trait name
dalek kudo/nom: 4152d21 | moritz++ | LHF.markdown:
update NOMMAP
12:51
JimmyZ rakudo: multi trait_mod:<is>(Mu $t, $size, Mu $r) { say $ne; } ; Role A { ... }; my native f is A(45) { } 12:51
p6eval rakudo e5fab7: OUTPUT«===SORRY!===␤No applicable candidates found to dispatch to for 'trait_mod:<is>'. Available candidates are:␤:(Mu $type, Any $size, Any $nativesize)␤:(Attribute $attr, Any $rw)␤:(Attribute $attr, Any $readonly)␤:(Routine $r, Any $rw)␤:(Routine $r, Any $default)␤:(Par…
Woodi thank you moritz++ :) 12:52
JimmyZ rakudo: multi trait_mod:<does>(Mu $t, $size, Mu $r) { say $ne; } ; Role A { ... }; my native f does A(45) { }
p6eval rakudo e5fab7: OUTPUT«===SORRY!===␤Unable to parse $*PKGDECL definition at line 1, near "does A(45)"␤»
jnthn role, not Role 12:53
moritz rakudo: multi trait_mod:<is>(Mu $t, $size, :$r!) { say $size }; my $x is r(42);
p6eval rakudo e5fab7: ( no output )
jnthn And we don't do variable traits just yet.
JimmyZ rakudo: multi trait_mod:<does>(Mu $t, $size, Mu $r) { say $ne; } ; role A { ... }; my native f does A(45) { }
p6eval rakudo e5fab7: OUTPUT«===SORRY!===␤Method 'add_role' not found for invocant of class 'Perl6::Metamodel::NativeHOW'␤»
moritz and adventurous soul could backport Buf.unpack from b 12:54
masak sounds like fun :) 12:56
I might have a look at it after $dayjob
moritz wonders if IO::Socket.recv makes sense in its current form 13:09
flussence "Looks like you failed 164 tests of 47598" # whee, database-driven tests! 13:15
colomon woah, nom is actually faster than niecza at running sin.t now! jnthn++ mls++ 13:19
bbkr moritz: I've checked read on non-ascii. works superfine. except one issue - if you chop multibyte char in half you cannot extend received Buf like in previous release ($buf.contents.push(next_chunk)) as current $buf.list is a copy. This is not read() issue itself, and proper Buf ~ and ~= operators hopefully will resolve the issue in the future. 13:20
Woodi moritz: do better thing, atm +- hour or two every network module is broken anyway, imo :)
jnthn colomon: whoa.
JimmyZ nom: say int.HOW
p6eval nom 8ba1a3: OUTPUT«Method 'gist' not found for invocant of class 'Perl6::Metamodel::NativeHOW'␤ in sub say at src/gen/CORE.setting:4824␤ in <anon> at /tmp/ngVV9ELux6:1␤ in <anon> at /tmp/ngVV9ELux6:1␤␤»
moritz bbkr: Buf.new($b1.list, $b2.list) should work for concatenation 13:21
"work"
as in, work around
moritz wonders how much list-ish and how much str-ish interface Buf should have
colomon jnthn: to be far, that's including niezca's pig-like startup speed. but still, sin.t working in 2.5 seconds on nom is pretty darned great! seems like it was about 50 seconds last time I tried timing it...
jnthn colomon: That's...quite a speed up!
colomon: And yes, we probably win just on startup speed. 13:22
But still, progress in right direction...
moritz 4.9s here for sin.t
bbkr moritz: I use this hack. but it is painfully slow. if you read data in 100 chunks without ~= operator you have to rewrite 5049 x sizeof(chunk) amount of data to new bufs. 13:24
JimmyZ nom: say int.^methods().perl.say;
p6eval nom 8ba1a3: OUTPUT«Method 'methods' not found for invocant of class 'Perl6::Metamodel::NativeHOW'␤ in method dispatch:<.^> at src/gen/CORE.setting:702␤ in <anon> at /tmp/OehE3UPDFv:1␤ in <anon> at /tmp/OehE3UPDFv:1␤␤»
colomon running all the trig tests just took me 30.6 seconds. \o/
moritz bbkr: hm, will think about it 13:25
jnthn JimmyZ: I'm not sure if you can (or should be able to) put methods on a native.
bbkr moritz++
jnthn JimmyZ: It doesn't really make sense. You'd never be able to call them, other than on the type object. 13:26
mls_ perl6: succeed;
p6eval pugs: OUTPUT«*** No such subroutine: "&succeed"␤ at /tmp/Gthfd3q_tZ line 1, column 1-8␤»
..niecza v9-32-g380d891: ( no output )
..rakudo 8ba1a3: OUTPUT«Warning␤»
[Coke] jnthn++ 13:28
mls_ hmm, I think the last test in S04-statements/try.t is wrong 13:29
JimmyZ nom: int.say
p6eval nom 8ba1a3: OUTPUT«int()␤»
mls_ at the end of the CATCH block the exception will be rethrown 13:30
masak if it wasn't handled.
mls_ how do you define "handled"? 13:31
moritz set the .handled bit
mls_ 1) the code doesn't do that, 2) the catch lambda in S04 sets it back to false 13:32
jnthn If any of the when clauses match (including default) then we never make it to setting it back to false, however. 13:33
mls_ yes, but the code in the try.t test doesn't have when/default.
That's why I think it's wrong
moritz might very well be the case 13:34
most of the tests are from a time before automatic rethrowing
mls_ niecza: { die("foo") ; CATCH {} }
p6eval niecza v9-32-g380d891: OUTPUT«Unhandled exception: foo␤ at /home/p6eval/niecza/lib/CORE.setting line 742 (CORE die @ 2) ␤ at /tmp/M8adcVE3Sf line 1 (MAIN C1_ANON @ 2) ␤ at /tmp/M8adcVE3Sf line 1 (MAIN mainline @ 1) ␤ at /home/p6eval/niecza/lib/CORE.setting line 2060 (CORE C968_ANON …
mls_ niecza: { die("foo") ; CATCH {say 'hello'} }
p6eval niecza v9-32-g380d891: OUTPUT«hello␤Unhandled exception: foo␤ at /home/p6eval/niecza/lib/CORE.setting line 742 (CORE die @ 2) ␤ at /tmp/YOJHGj35br line 1 (MAIN C1_ANON @ 2) ␤ at /tmp/YOJHGj35br line 1 (MAIN mainline @ 1) ␤ at /home/p6eval/niecza/lib/CORE.setting line 2060 (CORE C968…
mls_ jnthn: I now to "perl6" semantics, i.e. the call chain in the exception handler includes the ones where the exception was thrown 13:36
(looks interesting in the sub profiler ;) ) 13:37
(the "die/throw" op calls the catch block)
JimmyZ nom: use MONKEY_TYPING; augment class Int { method foo() { 'hi'; } }; say int.foo(); 13:40
p6eval nom 8ba1a3: OUTPUT«hi␤»
JimmyZ doesn't know whether if it's right or not :( 13:41
jnthn JimmyZ: Well, tbh, most of "right" vs "wrong" in the native types implementation is "what jnthn says is right or wrong" :)
JimmyZ: If you do $some_natively_typed_think.method_call() it will always box it before making the method call, because you can't make a call on a native value 13:42
JimmyZ jnthn: so is it right above code? 13:43
jnthn JimmyZ: Native types "inherit" (for some value of) from a class.
jnthn Generally, it's the class they'll end up boxing to. 13:43
JimmyZ: Yeah, it's doing what I expect it to.
JimmyZ jnthn: thanks
JimmyZ anyway, perl6 is so powerful, nom++, and jnthn++ 13:45
masak it's doing what I expect it to too, fwiw. 13:46
i.e. ints behave a lot like Ints.
jnthn Mostly, I'm just feeling my way forward, because I'm the first to try and put the native type stuff into an otherwise quite rich Perl 6 implementation.
masak the only time they don't is when you try to do something outright impossible, like rebind an int.
shinobicl hi... does anyonw know how much RAM do i need to "make" the new rakudo? All I know is that 470MB are not enough and 2GB is enough 13:47
masak but calling methods is no problem; just need to box it.
jnthn The reason I added the sized ones is because I want to use them in NativeCall.
masak shinobicl: that sounds about right. 13:47
moritz shinobicl: a bit more than 1G is necessary
shinobicl thanks moritz!
jnthn
.oO( Too much... )
13:48
moritz jnthn: now that we have exporting into lexical scopes, wouldn't it be much easier to split the setting? 13:49
JimmyZ I thoght native types is some types likes C
*thought
moritz (or nested settings, like SAFE)
JimmyZ: C doesn't have a bigint type :-)
jnthn moritz: nested could work 13:50
JimmyZ moritz: yes, rakudo augment C
masak JimmyZ: they are very much like that, but they box when you try to use them like objects.
jnthn moritz: PRIMITIVE -> CORE -> SAFE
moritz jnthn: does that make lookups slower?
jnthn moritz: Marginally.
moritz builds and benchmarks 13:51
dalek kudo/nom: 393309c | moritz++ | src/core/Buf.pm:
non-spec Buf.append_inplace hack for bbkr++
jnthn moritz: As in, almost certainly not worth worrying about.
moritz I could well imagine a "FAT" setting where all the things like Date, DateTime, IO::Socket etc. live in
jnthn moritz: I'd guesstimate <1%
moritz: Yeah, same.
Of course, we should be using less memory to build the setting too :) 13:52
Even at the size it's at.
moritz I wonder how hard it would be find a clear cutting point between a small inner and a big outer setting 13:55
one with nearly no forward references
jnthn Well, things like the temporal stuff easily slip out into the outer one. 13:56
Sockets probably do also.
And maybe Set etc
moritz a quick counting showed about 8 files that clearly belonged to the outer
and yes, Set, KeyMap etc. too, which are NYI 13:57
benabik jnthn: PRIMITIVE?
bbkr moritz: spec already defines buf concatenate behavior, so why not make it official infix:<~=> and have another part of spec implemented? 13:57
flussence benabik: I guess that's everything that can't be implemented in terms of other functions :)
jnthn benabik: There's probably better names.
benabik jnthn: Just wondering if you mean the existing bootstrapping bit for the setting, or something else 13:58
jnthn benabik: Yes, it'd be where various bootstrappy bits happened. 13:59
benabik Bare minimum for the complier to make sense, so if you want your own setting, it's inside PRIM. Fair enough. Sounds neat.
moritz bbkr: will do as a next step, yes. But it's more convenient for the implementation to live inside a method 14:00
nom: class A { }; multi infix:<~=>(A $, A $) { }; my $x = 'foo'; $x ~= 'bar'; say $x 14:01
p6eval nom 4152d2: OUTPUT«foobar␤» 14:02
dalek p: 7595e8b | jnthn++ | src/PAST/NQP.pir:
Add some NQP ops.
14:30
p: ca60d32 | jnthn++ | src/NCI/CallBuilder.nqp:
Start to sketch out NQP/6model level NCI handling. Rather than do everything itself, the Perl 6 NativeCall library can be built on top of this.
mls_ Argh, a caught exception in a default/when block kills the special "succeed" semantics, as Actions.pm just adds a succeed call to the end of the block.Sigh. 14:38
masak moritz, jnthn: I'm confused by your usage "small inner" and "big outer" in terms of settings. wouldn't the big one, the one with temporal stuff etc, need the small one as a dependency? i.e. the small one must be the outer one. 14:39
jnthn masak: Well, it depends if you're looking from the inside or the outside :P 14:40
masak 's brain asplode 14:41
jnthn masak: I think we're all intending the same thing. :)
masak: Yes, the one with temporal etc in would have the primitive one as its outer.
TimToady I don't suppose we have to require CORE::OUTER to be undefined 14:42
TimToady funny that CORE is an "inner" metaphor though, now that you mention it 14:43
jnthn :)
TimToady metaphors we live by...
mls_ Hi TimToady!
I've got some questions about exceptions for you 14:44
TimToady oh oh :)
benabik We could rename OUTER to INNER, but I think that would just cause more confusion. :-D 14:45
masak aaaugh
mls_ S04-exception-handlers/catch.t construct exceptions with Exception("message")
masak benabik: I know you're joking, but... OUTER is *physically* outer in most code :) so yes, it would cause more confusion.
mls_ S02 contains that syntax 14:46
TimToady it's probably better to use an explicit constructor when you know construction has to happen, but really common constructors can use coercion syntax; it's not prohibited; see S13:198 14:47
mls_ ah, thanks. NYI in Rakudo/Niecza, though 14:48
benabik Is it possible for a type to define how other types coerce to it? 14:49
Or does Exception("message") rely on String knowing how to be an Exception?
TimToady that's what S13 is talking about
TimToady you can presumably multi the &.() to handle different incoming types 14:51
but basically, type objects are specced to respond to .()
that's how MyType() coercions are handled 14:52
mls_ Second question: S04-exception-handlers/catch.t contains a test that does die(3) and then checks $_ in the catch block 14:53
benabik Not sure I'm a fan of S13's method of disambiguating that… I'd prefer $obj.Type to always have preference over Type($obj).
jnthn TimToady: multi postcircumfix:<( )>(Mu:U $self: $target) { $target."$self.^name()" } # something like this?
bbkr moritz: I've benchmarked both Buf approaches, '€' x 100 (300 bytes) in 100 chunks. Buf copying took 147 seconds, Buf.append_inplace took 1 second :)
jnthn TimToady: er, multi method...and in Mu.
benabik (I'll just have all my own Types call $obj.Type first.) 14:54
jnthn benabik: I'd understood that to be the default.
mls_ hmm, that multi... does that default to .new like it should? 14:55
TimToady jnthn: yes, it's best if the type knows how to convert itself to other types, but newly defined types tend to know more about the old types rather than old types knowing about new types, so we need both ways 14:56
jnthn mls_: Well, what I just showed is the fallback.
TimToady whyu should it default to .new?
mls_ S13 says something like taht
jnthn mls_: Exception can override it
benabik jnthn: It says one falls back to the other, but say there's an Exception(Stringy $msg). If I do: class Foo does Stringy { method Exception {} }, I'd like my Foo $foo; Exception($foo) to call $foo.Exception. 14:57
benabik So new types can create more specialized versions. 14:57
jnthn benabik: I *think* that's what I just described implenting.
TimToady this is all still somewhat negotiable, but I need to afk for a bit & 14:58
feel free to queue questions for later though
mls_ ok, I'll bother you with the second question when you're back ;)
benabik jnthn: You just described there being a fallback, but wouldn't `class Exception { method postcircumfix<( )> (Stringy:D $msg)` (which there probably will be for re-dispatching to Exception.new) take precedence over it? 14:59
*multi method
jnthn benabik: Yes.
benabik: Oh, I see what you're trying to do...hm. 15:00
benabik :-D
jnthn: If my Foo should become a specific _type_ of Exception, say. $foo.Exception would return MyPackage::Exception, but Exception($foo) would return Exception. 15:01
I'd like coercion to happen one way.
the same way, I mean 15:02
jnthn benabik: Well, TimToady seems to want it both ways ;)
...but that's nothing new :P
I see the concern though.
benabik \o/ I communicated successfully!
Types could check for a .Type method on the object they're coercing, but then you'll have someone forget and bleck. 15:03
jnthn At some points I've wondered if coercion is recognized syntactically and re-written to something in meta-space. 15:03
.^coerce(...)
benabik Deep.
dalek p: 4c6d236 | jnthn++ | / (3 files):
Install NCI::CallBuilder.
15:04
TimToady the original intent was to recognize types syntactically
that's one of the reasons types are predeclared 15:05
jnthn TimToady: Well, we already do that really. :)
TimToady the current S13 spec doesn't really take advantage though
jnthn TimToady: It's just that if all we're doing is invocation, then the "oh it's a type!" case boils down to the same thing as a call.
masak TimToady: not a question per se; just noting that I don't think Exception("message") qualifies as a coercion. the string is not so much converted into an exception as subsumed by it. 15:06
jnthn takes a break from native call stuff for a bit to work on something else
benabik ClassHOW.coerce could check $obj for a .Type method and then fall back on Type(). Although you get to interesting questions of $obj.SuperClass being more important than SuperClass() and how to detect that...
benabik Being able to define coercions both ways is important though. New types need to know how to convert to old and convert old to them. 15:07
TimToady masak: you could say the same about int to float conversion :)
masak sure, but a float is immutable, so the subsuming doesn't feel as "physical" there. 15:09
mostly I'm just questioning providing two syntaxes for creating an Exception where one would do fine.
moritz masak: yes, I was confusing inner and outer there 15:12
benabik somewhat likes Scala's implicit methods for coercion.
moritz jnthn: btw I've benchmarked mandelbrot, once normal, once with --setting=SAFE 15:13
jnthn moritz: OK...and? :)
moritz jnthn: the difference is about 0.3s on 50s, but that is roughly the same amount as the timing noise
jnthn moritz: Yeah.
ooh, we're at 50s now? :) 15:14
masak also, maybe I'm seeing a slippery slope there in over-applying coercions where they make little sense. "want to create a process? just coerce the string containing the executable name using .Process!"
tadzik I don't like Exception(Str) either :)
I imagine it as something that in 10 years people will talk of as they now do of indirect method calls in Perl 5
benabik I like coercions up front, sometimes… The .perl output of ().list takes too long for me to find out it's a list. 15:15
I'd much prefer List()
tadzik nom: ().list.perl.say
p6eval nom 393309: OUTPUT«().list␤»
tadzik meh
nom: List.new.perl.say
moritz :-)
p6eval nom 393309: OUTPUT«().list␤»
benabik Although I guess an empty list would be hard to distinguish from a type object. Hm.
moritz benabik: note that .perl is meant for, well, perl. Not for humans
tadzik I semi-like it as it is 15:16
benabik moritz: But shouldn't perl be for humans? ;-)
moritz writing that as List.new(...) would fix that problem
benabik: .gist is for humans
masak benabik: what makes you think an empty list isn't a type object? :P
rakudo: say ().defined; say List.defined
tadzik it's meant for perl, not humans, but it doesn't break encapsulation because no, but it's meant to produce the same object, but it doesn't...
p6eval rakudo 393309: OUTPUT«Bool::True␤Bool::False␤»
masak maybe that... :)
benabik masak: Yes, that.
tadzik rakudo: say ().defined; say List.new.defined
p6eval rakudo 393309: OUTPUT«Bool::True␤Bool::True␤»
shinobicl nom: sub prefix:<Ask> (Str $what) { "whats up " ~ $what }; say Ask "Joe"; 15:29
p6eval nom 393309: OUTPUT«Could not find sub &Ask␤ in <anon> at /tmp/1CSt_AEv5p:1␤ in <anon> at /tmp/1CSt_AEv5p:1␤␤»
moritz nom doesn't do custom operators yet 15:30
shinobicl perl6: sub prefix:<Ask> (Str $what) { "whats up " ~ $what }; say Ask "Joe";
benabik nom: sub ask { "What's up " ~ $^doc ~ "?" }; say ask "Joe"
p6eval rakudo 393309: OUTPUT«Could not find sub &Ask␤ in <anon> at /tmp/nAKdnrMC56:1␤ in <anon> at /tmp/nAKdnrMC56:1␤␤»
..pugs, niecza v9-32-g380d891: OUTPUT«whats up Joe␤»
nom 393309: OUTPUT«What's up Joe?␤»
masak nom: sub Ask(Str $who) { "what's up, $who?" }; say Ask "Joe" 15:31
p6eval nom 393309: OUTPUT«what's up, Joe?␤»
benabik nom: sub ask { "What's up $^doc?" } ; say ask "benabik" 15:31
p6eval nom 393309: OUTPUT«What's up benabik?␤»
benabik It finds ^params in strings. Neat.
moritz bbkr: fwiw I've tried to implement infix:<~=>(Buf, Buf), but it's not picked up in the dispatch, likely because it collides with the = meta operator on infix:<~> for Str 15:32
tadzik I think it finds everything which looks like an expression
jnthn moritz: The meta will win, I think. 15:33
masak jnthn: I don't.
jnthn masak: Tough.
:P
masak then how could you override your metaoperators?
moritz jnthn wins :/
shinobicl moritz: that remembers me a thread i saw in a BBS some time ago... "perl6 craziness" was called...
jnthn masak: I don't think you're meant to write your own derived forms.
masak because in some cases, you have to.
jnthn: I thought the spec even talked about that. 15:34
jnthn I thought it said you shouldn't...I may be misremembering.
moritz jnthn: I'm pretty sure you should be able to
shinobicl pastebin.com/1GTw45J9
jnthn moritz: OK, I may be misremembering...
masak jnthn: S13:143 15:35
"...(unless you define it yourself)"
I win! :)
jnthn huh, what's with all the S13 references today...
Fair enough. Patches welcome. :) 15:36
masak jnthn: clearly you need to be reminded of it :P
jnthn Probably means patching the meta-operator generating code to not generate things that already exist.
moritz one thing I've always wanted to do is to add a prefix:<[+]>(Range) multi which optimizes summing over ranges of integers 15:37
masak moritz: ooh! 15:38
jnthn moritz: oh ouch
dalek kudo/nom: aa5e9b6 | jnthn++ | src/Perl6/Actions.pm:
Generate lexicals of the correct primitive type for holding arguments.
kudo/nom: bd4af3e | jnthn++ | src/ (2 files):
Start passing nativeness info down towards the binder.
jnthn moritz: If you want to do that, you're going to have to manually write out the candidate that falls back to the meta-op internals too.
moritz jnthn: yes, that was the problem in b
jnthn Well, it's not really a problem, just more effort. :) 15:39
jnthn Oh, maybe we can get away with it somehow. 15:39
By just generating the extra multi
moritz maybe the autogenerate can kick in if the dispatch fails, not just when lookup fails 15:40
jnthn no
The auto-generation is compile time.
moritz right
jnthn Oh, you're thinking of type-inferring it?
moritz no
jnthn And doing a compile time recognition of the case?
OK, then I'm not sure I follow. 15:41
moritz I just didn't think of the auto-gen taking place at compile time
jnthn Ah, OK
moritz so I was working with RONG assumptions
jnthn We could feasibly recognize the case in the optimizer.
Provided we knew we had a range as the argument, of coure.
*course 15:42
masak could we get away with only generating those metaops that are actually used in the code?
are there still an infinite amount of them? 15:43
jnthn masak: We do.
masak oh, good.
jnthn masak: We've only generated the used ones since ng.
masak but &eval and metaops still works?
jnthn masak: There's infinitely many of them, and setting compilation already takes long enough, so I don't want to re-generate all of them... :)
*pre-generate
moritz masak: eval has its own compile time
jnthn What moritz++ said.
masak what about define-your-own, then &eval with that metaop in it? :) 15:44
moritz it has its own compile time.
masak I heard that bit.
moritz -> decommute
masak I'm just wondering if that case works.
moritz dunno, but it can be made to work :-)
jnthn masak: The mechanism eval uses to see outer (at compile time and runtime) is *exactly* the same one we use for the setting.
moritz expects a new masak bug after the commute
masak :) 15:45
jnthn: yes, but I mean, since eval has its own compile time, and if compile time is when new metaops are autogenerated, isn't there a risk that a thus-far unused metaop will be generated and hide a user-defined one in the OUTER? 15:46
jnthn masak: Sure, but it'd also mean that any that we defined in the setting were being ignored too. 15:47
jnthn masak: That is, if we fix it for the setting case, it probably fixes the eval case too. 15:47
masak oh. true.
sanity++
jnthn In eval, the compiler really does just treat the scope you call eval in as a kind of setting.
It actually goes a bit too far now, which is why we have the globals bug :) 15:48
(it thinks you deserve a fresh GLOBAL too in eval...)
(it shouldn't.)
oh gee, this natives stuff is tricky... 15:49
mberends jnthn: I'm very happy that you are busy with NativeCall :) 15:53
jnthn mberends: Wanna help? ;)
mberends: I've decided to split things up a little.
mberends: Going to have an NQP level bit 15:54
mberends: Then do NativeCall on top of that.
mberends: The hope/dream being that we just have to re-implement the NQP level bit on other VMs...and that NativeCall gets saner. :)
mberends: Thing is, I really want to use native types (int, int8, int16) etc this time 15:55
mberends: Not Int, etc like we have before.
mberends: So, it'll take a little migration, I suspect. But may as well do it now rather than put it off... 15:56
Can also do structs.
mberends jnthn: ok. I'll help wherever you think I can :) 15:57
jnthn: that's a Good Improvement.
er, good improvement ;)
jnthn :)
Well, some way to go yet.
But started on it at least. 15:58
masak decommutes
mberends yay, SQLite will be reachable with structs :) 15:59
dalek ast: 9b7e843 | Coke++ | S03-operators/buf.t:
rakudo nom fudging
16:05
bbkr moritz: confirmed, infix:<~=> does not dispatch. "multi infix:<~> (Buf:D $a, Buf:D \$b)" however dispatches properly $buf1~$buf2 and $buf1~=$buf2, but it's useless if ~ operator does not know that it is called with '=' to decide if to do new buffer or appending
dalek kudo/nom: a1032e0 | Coke++ | t/spectest.data:
run fudged test, track failures
16:07
[Coke] phenny, b? 16:10
TimToady b or not b, that is the question... 16:11
[Coke] the answer to that is yes, of course. 16:12
TimToady phenny doesn't agree :)
sjohnson phenny, advice 16:34
sjohnson :( 16:36
Woodi should i define sub a( Str $b!, $c?, $d? ); or multi sub for each case ? or multi is only for same param count with other types ? 16:58
jnthn Woodi: Both are possible. Which is best depends, and not everyone will call it the same way. Generally, I use optionals if the behavior is mostly the same for all the cases, and multis if I want to do something quite different for each arity. 17:00
mls_ TimToady: my second question 17:01
Woodi thanx jnthn
mls_ catch.t contains die(3) and checks $_ in CATCH to match 3
mberends fractal Sierpinski triangles for Niecza Perl 6: gist.github.com/1235342
japhb Is there anyone around who can hug perl6.org/compilers/features so that it updates with jnthn++'s changes from yesterday? 17:01
masak japhb: don't you have a commit bit yourself? 17:02
and if not, why not?
you've already asked twice. soon it'll have been less work to JFDI. :P
japhb masak, it's not updating the data that's the problem: jnthn did that. The page is not re-rendering. I don't know where that is, or if I have / ever had access. 17:03
masak oh! 17:04
jnthn Did I screw up the json somehow, I wonder... 17:05
mls_ jnthn: current state of exception patch: gist.github.com/1235351
jnthn: notice the new invoke_catchhandler op that does some evil call chain hackery 17:06
masak jnthn: yes, I think you did. first change at github.com/perl6/features/commit/6...cdb269e7d3 looks like it's not quoted enough.
jnthn oh, wtf. 17:07
masak also, that addition should probably have been on "status", not "code".
jnthn yeah
:/
masak feature request: when someone screws up the JSON in that file, this channel is notified. 17:08
japhb I was thinking something similar. :-)
dalek atures: bde748c | jnthn++ | features.json:
JSON is hard, it turns out...
masak preferably each time the pagegen fails.
japhb masak, where is that page hosted? 17:09
Some feather*?
mls_ afk -> home 17:12
japhb commuting & 17:13
TimToady mls_: not sure there was a question in that, but an exception should stringify/numify in a dwimmy way such that a when can match an errno or a message, as well as the exception type
note also that an exception may not be rethrown with die, I think, since exceptions within the CATCH are considered new exceptions 17:14
we'll need a different verb to put things into the unhandled list instead of the undead list 17:15
maybe undead is misnamed, since it's really the old exception that is undead when it comes back :) 17:16
mls_ Btw, are exceptions Cool? 17:16
TimToady well, they can convert to numeric or string for matching, but I don't know if that makes them Cool 17:18
TimToady seems they used to be Cool, and that caused problems 17:18
they end up getting multi-dispatched more generally than they ought, but maybe separating the notion of Failure from the notion of Exception will clear that up 17:19
a Failure contains an unthrown exception, I think, but isn't one
mls_ ok, thanks TimToady++ 17:20
afk -> home (this time for real ;) )
japhb_ masak, BTW: sorry if I sounded incorrectly lazy before. I should have asked "How can I fix this?" rather than "Can anyone fix this?" 17:36
pmurias hello 17:40
tadzik hello pmurias 17:42
Woodi hmm, perlisophycally asking - do in Perl6 is/will be better (performance) to use recursive function in HOP style or just while loop ? functional languages defaults to recursion, what in v6 ? 18:00
whithout memoisation :) 18:01
jnthn Woodi: That may well be implementation dependent.
Woodi: And then probably situation dependent too ;)
Woodi: In Rakudo, probably while loops are cheaper, and also probably easier on the optimizer. 18:02
Woodi ok, just asking "mayve usually while is better ?" :) 18:02
jnthn If it's speed you want over all else, then yes, probably. :)
Woodi and do function calls will be expensive ? asking: do for performance prefer middle-size IFs over calls ? 18:05
Woodi probably calls will not be unnoticable... 18:07
[Coke] chuckles that trunk@r1337 might be the revision of his project that goes to prod today. 18:13
[Coke] now has to explain LEET to the analyst. Sigh. 18:16
Woodi is in perl6 something like: sub f( $a!, $b?, $b?, $d? ) { while params() { ... } } # or $p = shift $params(); ? 18:17
masak Woodi: you have to slurp the variables to be able to iterate them. 18:19
maybe you can access the siggie and iterate that, though. I dunno.
Woodi i need params, not @...
pls give me info, i will go read :) 18:21
TimToady Woodi: note also that lazy lists are already HOP in disguise 18:23
the language itself is designed to be relatively optimizable, but it will take a while for implementations to get there
the most important thing is that we try to make as most external functional information available lexically, so you can know what you're dealing with at compile time most of the time 18:25
ss/ as / /
you can get the raw capture if you like and pull the positionals out of it 18:26
Woodi i do not ask about performance now, but general hints how features will behave relative to each other. not to grainy but some things ar known to devs. i can only gues hinking about C/v5. 18:28
captures, so i will study it a little
thank you 18:29
masak can Rakudo do that already? 18:38
masak hm, I guess the siggie is no good for pulling positionals out, since it's never populated with values -- only the lexpad is. 18:38
masak the siggie only guides the capture to the lexpad :) 18:38
jnthn masak: (raw capture) that's just |$c in the sig. 18:44
TimToady we need to see a use case 18:45
jnthn TimToady: Delegaty things? 18:46
jnthn is deep in a bunch of binder changes at the moment. 18:46
TimToady I mean a use case for what Woodi is trying to do, which looked more like XY and/or premature optimization to me 18:52
jnthn TimToady: oh, ok :) 18:54
masak aye. 18:55
if iterating through the parameters is that important, then maybe the parameters should consist of something iterable.
rakudo: sub foo(*@params) { .say for @params }; foo "OH", "HAI", "WORLD" 18:56
p6eval rakudo a1032e: OUTPUT«OH␤HAI␤WORLD␤»
Woodi hmm, do not read yet about captures but use case: 19:04
for example some db with api of very similiar functions (or protocol with similiar request/response construction for each command) 19:06
so, few functions have zero params, few one param, few more, ..., few is varg... 19:08
so if function are similiar in functionality can be internal function called by all function. that internal function can use IFs for 0, 1, 2, ..., varg cases or slurp parameter list :) 19:09
method !__cmd_zeroonetwothree( Str $command!, $p1?, $p2?, $p3 ) { ... } 19:11
and: for <c1 c2 c3> -> name { A::B.HOW.add_method( A::B, $name, method () { return self!__zeroonetwothree( $name ) } ); } 19:14
and: for <c1 c2 c3> -> name { A::B.HOW.add_method( A::B, $name, method ( $param ) { return self!__zeroonetwothree( $name, $param ) } ); }
and so on :)
and then IFs for each param number... so manipulation of parameters would be nice :) 19:16
and that for's can be at BEGIN 19:17
jnthn++ help :) 19:18
TimToady sounds like zeroonetwothree wants to be a macro-ish kind of thing, really, but we don't have those yet
as for your binding
Woodi for protocol construction must be macro language which can call perl6 code :) 19:24
dalek kudo/nom: 4c67ac6 | jnthn++ | src/binder/bind. (2 files):
Tentatively start to refactor the binder so it can work with natively typed arguments and parameters. This doesn't do much besides change the API used by a couple of low-level bits.
19:26
kudo/nom: 78198e7 | jnthn++ | src/binder/bind.c:
Extensive refactor of parameter binding to work towards supporting natively typed parameters/arguments.
kudo/nom: e089c70 | jnthn++ | src/binder/bind.c:
Get binder to handle being passed natively typed values and binding them to natively typed lexical registers. Note that the code-gen isn't really up to scratch for using this yet, but the binder part now seems to work.
kudo/nom: ff86674 | jnthn++ | src/Perl6/Actions.pm:
Ensure we generate correct code for natively typed parameter lookups when they're used.
tadzik ho
mberends exciting! 19:27
TimToady sorry, got called away briefly
TimToady as for your binding, you can have a signature that binds the remaining capture in the middle, so you could do something like ($name, |$rest ($p1?, $p2?, $p3?, *@more)) 19:29
and it would always bind name, then $rest would be the capture of the rest of the arguments, of which the first three are also given names of p1, p2, p3
at least, that's specced behavior
jnthn Pretty sure that's how I implemented it too. 19:30
nom: sub foo($name, |$rest ($p1?, $p2?, $p3?, *@more)) { say $name; say $p1 }; foo('bar', 1, 2) 19:31
p6eval nom a1032e: OUTPUT«bar␤1␤»
jnthn nom: sub foo($name, |$rest ($p1?, $p2?, $p3?, *@more)) { say $name; say $rest }; foo('bar', 1, 2)
p6eval nom a1032e: OUTPUT«bar␤1 2␤»
TimToady sugoi!
Woodi that i need i think :) 19:32
any other language have such features ? :)
but ppls will complain about line noise :) 19:35
jnthn nom: sub foo(:$bar, |$c, :$baz) { say $c.hash }; foo(:baz(42), :bar(69)) 19:36
p6eval nom a1032e: OUTPUT«baz 42␤»
Woodi but about macro language maybe rich string functionality can be enough... 19:39
jnthn Woodi: Perl 6 includes hygenic macros. 19:41
Woodi: Rakudo doesn't implement them yet, but masak++ is working on it :)
masak heh! good luck. :) wait, that's me o.O 19:42
Woodi so perl6 programs will have document-form for heavy pre-parse in the future :) 19:45
dalek kudo/nom: 8943be1 | moritz++ | src/core/Buf.pm:
infix:<~>(Buf, Buf)
19:48
p: c4f9df4 | jnthn++ | src/pmc/stable.pmc:
Give us a bit more space in the type cache IDs.
19:50
p: 732b4f3 | jnthn++ | src/6model/ (8 files):
Extend storage spec support so a REPR can describe the things it can/canny box.
p: ce48590 | jnthn++ | src/6model/reprs/P6opaque.c:
Eliminate an unused variable, and the warning that goes with it.
kudo/nom: 943dcd1 | moritz++ | src/core/Buf.pm:
[Buf] remove append_inplace hack; ordinary concatenation performs nearly equally well, so this was a case of premature optimization. Go figure.
19:52
jnthn Commits! Lots of them! 19:53
masak jnthn++
moritz++
Woodi here are bindings teoretically discused erlier :) github.com/slunski/perl6-simple-redis 19:57
realy not much funcionality as for db but get/set keys work :)
Redis is rather something like Memcache but with permament storage 19:58
tadzik oh, that'd be your child? 19:59
masak Woodi++
Woodi: um, if you recommend the use of ufo, why is there also a Makefile in the repository? 20:00
it's either one or the other...
tadzik it's ufo generated 20:01
Woodi ufo just work on std perl distributions :) 20:02
masak well, you don't need the 'ufo' step if there's already a Makefile. 20:03
Woodi s/Makedile//
i forget remove it
anyway it's terrible coded except function autogeneration... 20:04
and $socket.get line by line isn't probably good for performance 20:05
and protocol is realy simple, can by used by hand over telnet 20:06
masak 'night, #perl6 20:12
tadzik 'night 20:12
...damnit, missed it
colomon he's sneaky that way
tadzik I bet he leaves, then enters irclog.perlgeek.de and looks how people missed him by seconds 20:15
dalek kudo/nom: 57dc7ad | jnthn++ | / (2 files):
Bump to latest nqp/6model.
20:17
kudo/nom: 5af26ae | jnthn++ | src/binder/bind.c:
Handle case where natively typed parameters are passed boxed arguments. Binding works if the thing passed knows how to unbox itself to the correct native type.
bbkr moritz++ # Buf concat & append 20:54
jnthn How are we on Buf compared to b now? 20:58
bbkr hmm, I get "make: nqp: Command not found" in Configure.pl of current nom. has anything changed in build commands? 21:10
jnthn Don't think so 21:12
Odd
jnthn oh 21:13
it's a stupid *nix thing.
bbkr ? 21:14
dalek p: 0751cd8 | jnthn++ | tools/build/Makefile.in:
Fix build for various platforms.
21:15
bbkr happens on line "nqp --target=pir --output=src/gen/CallBuilder.pir src/NCI/CallBuilder.pm", should it be something like "./nqp"
?
bbkr \o/ 21:16
jnthn bbkr: Yeah...it worked on Windows. :)
dalek kudo/nom: 33e65ba | jnthn++ | tools/build/NQP_REVISION:
Use a build of NQP that isn't broken on some platforms.
bbkr jnthn++ 21:17
tadzik -j2 is broken for me, still 21:20
jnthn tadzik: on? 21:22
nqp?
Or Rakudo?
tadzik nqp 21:23
jnthn tadzik: As of today?
pmurias sorear: hi
tadzik jnthn: yep
jnthn tadzik: Or for a while?
tadzik: ah, maybe missing dependencies 21:24
tadzik jnthn: it tries to build CallBuilder before building nqp
jnthn oh
ok, feel free to fix now
or I take it later
Probably just wants a dependency on $(NQP_EXE)
jnthn imagines parallel make is mostly useless for a bootstrapping compiler... :) 21:25
pmurias jnthn: why? 21:26
dalek p: 76afaff | tadzik++ | tools/build/Makefile.in:
[Makefile.in] Fix dependencies
jnthn pmurias: Because it has the build the stages in order
pmurias: And the stages have ordering requirements within them.
pmurias make itself doesn't seem very usefull for building p5 programs 21:27
benabik jnthn: Depends on how complex each stage is. Each stage must finish before moving to the next, but within a stage you may be able to compile sections freely. 21:28
pmurias sorear: if i want to start working on niecza-p5 interop (my exams are over) how should i hook the interop code in? 21:29
in needs to be pluggable so the embedding code will be only used when needed/avalible?
jnthn benabik: It *may*. But in the case of NQP there's little freedom. 21:30
benabik jnthn: Also, parallel make can point out missing dependencies, which might cause make to not rebuild something. ;-D 21:31
jnthn Yes, true ;) 21:32
jnthn starts fiddling with getting the multi-dispatcher to know what to do with native types. 21:39
diakopter ! 21:40
Woodi perl6: sub foo($name, |$rest ($p1?, $p2?, $p3?, *@more)) { say $name; say $rest }; foo('bar', 1, 2) 21:54
p6eval rakudo 8943be: OUTPUT«bar␤1 2␤»
..pugs: OUTPUT«*** ␤ Unexpected "($"␤ expecting "?", "!", trait, "=", default value, "-->" or ")"␤ at /tmp/kWf1MP6CaH line 1, column 23␤»
..niecza v9-32-g380d891: OUTPUT«===SORRY!===␤␤Action method post_constraint not yet implemented at /tmp/rslF53ahOI line 1:␤------> $name, |$rest ($p1?, $p2?, $p3?, *@more)⏏) { say $name; say $rest }; foo('bar', 1␤␤Unhandled exception: Unable to resolve…
Woodi b: sub foo($name, |$rest ($p1?, $p2?, $p3?, *@more)) { say $name; say $rest }; foo('bar', 1, 2)
p6eval b 1b7dd1: OUTPUT«bar␤Capture()<0x4d97e38>␤»
jnthn Woodi: Seems b was a bit less useful about stringifying captures. 21:55
Woodi which Rakudo b is ? 21:56
jnthn Woodi: The "Beijing" release.
Woodi: Which is the compiler that shipped with the current Star distribution. 21:57
"rakudo:" here is the current development branch
Woodi my perl --version says "This is Rakudo Perl 6, version built on parrot 3.6.0 0" only and dpkg 2011.07-1 21:58
Woodi not good 21:59
next Star tomorow ? 22:01
jnthn Woodi: No, that'll take us a little longer. 22:02
Woodi: Don't want to cause too many regressions.
Woodi nqp for nom branch is in rakudo source tree ? 22:03
jnthn no 22:04
github.com/perl6/nqp
Woodi not compiled earlier today... will try again
Woodi but bad parrot :) 22:08
dalek ast: 28d220d | jnthn++ | S12-methods/multi.t:
Oops, 2 instances of class A { ... } in the same test file.
22:09
jnthn Woodi: Yeah, it has quite specific requirement.
dalek kudo/nom: 952b7bb | jnthn++ | src/binder/multidispatch. (2 files):
Note presence of native types in the multi-dispatcher candidate graph; not doing anything with them yet.
22:10
benabik Parrot master currently won't compile NQP master, but it will compile NQP's kill-useless-defaults branch.
Woodi should i use parrot branch named kill-useless-defaults too ? or how to get what rakudo needs ? 22:11
jnthn Woodi: The easiest way to get bleeding edge Rakudo with compatible versions of everything is to just git clone Rakudo, then perl Configure.pl --gen-parrot --gen-nqp 22:12
tadzik depends on what parrot do you have
jnthn Woodi: It'll make a completely isolated build of an appropriate Parrot and NQP for you.
Woodi no eay, i refuse to use --gen-*
jnthn (e.g. won't break any installed version you have)
Well, then you're going to have to go through the pain of doing what they do by hand :)
benabik Woodi: Then Parrot master, NQP kill-useless-defaults, and Rakudo master _should_ work.
jnthn No, they won't. 22:13
benabik No?
jnthn Not as of a few hours ago.
Rakudo now depends on stuff in NQP master that didn't get merged into kill-useless-defaults.
benabik Ahhhh....
Woodi i write scripts and eg: sh go.parrot ; cd ../nqp ; sh go.nqp ; cd ../rakudo ; sh go.rakudo :)
benabik Hm. We merged sub-profiler after kill-useless-defaults. Bad us. 22:14
jnthn How so? 22:15
benabik It'd be nice to use sub-profiler on Rakudo master, mostly. :-D
jnthn ah, ok
you can always catch the kill-useless-defaults branch up with nqp master.
benabik I'll get on that, but as of right now...
Parrot RELEASE_3_8_0, NQP master, Rakudo master. 22:16
Technically Parrot fb6470c will work, but it doesn't really have much more than the release.
jnthn Yes, that combination really should work.
benabik s/will/should/
Woodi k, will try 22:17
jnthn Hm. Enough natives hacking for today. Will continue playing with the multi stuff tomorrow. :) 22:19
benabik Hm. I hadn't built the new parrot yet. Sadface. 22:20
benabik So I merged master into kill-useless-defaults, but since I don't have a new enough parrot I can't test it. *sigh* Maybe someone else will beat me to it. 22:24
dalek p/kill-useless-defaults: 7595e8b | jnthn++ | src/PAST/NQP.pir:
Add some NQP ops.
22:37
nqp/kill-useless-defaults: ca60d32 | jnthn++ | src/NCI/CallBuilder.nqp:
nqp/kill-useless-defaults: Start to sketch out NQP/6model level NCI handling. Rather than do everything itself, the Perl 6 NativeCall library can be built on top of this.
benabik I didn't actually test it with Rakudo, but there it is. 22:37
diakopter poor dalek 22:37
Woodi parrot RELEASE_3_8_0-9-g0bf02d9 needed for nqp-kill* now 22:48
is this parrot god for rakudo nom ? 22:49
Woodi hmm, new House :) 22:50
i will test it tomorow, to many parrot compitations today... 22:53
gn #perl6 &
jnthn Woodi: It should be OK
Woodi: night o/ 22:54
jnthn sleep & 23:12