»ö« | perl6.org/ | nopaste: paste.lisp.org/new/perl6 | evalbot usage: 'perl6: say 3;' or rakudo: / pugs: / std: , or /msg p6eval perl6: ... | irclog: irc.pugscode.org/ | UTF-8 is our friend!
Set by diakopter on 25 January 2010.
00:14 ilogger2 joined 00:16 Gothmog_ joined, kraih_sri joined 00:17 broquaint joined 00:19 colomon joined 00:20 mathw joined
diakopter archtech: spokesbug as opposed to spokesperson or mascot. 00:23
archtech diakopter, that's not what I mean :P
I mean why is perl6's page targeting the 2 to 6 year old demographic 00:24
TimToady get 'em while they're young
archtech :P 00:25
TimToady also, to discourage curmudgeons who are too set in their ways to adapt. :) 00:26
we're trying to discourage the formation of the type of high-priesthood that has developed in other communities 00:27
archtech TimToady, it depends what you need to adapt to.
I'm not convinced Teletubbies is the right image for Perl 6. 00:28
But good luck with it
TimToady and it's not just 2 to 6 year old demographic, but the half of the population that aren't into chest thumping games
diakopter I see it more as anime-ish 00:29
than teletubbish
TimToady teletubbies are ugly 00:30
archtech Not to mention associating Perl6 with bugs :P 00:31
diakopter that's the self-deprecating humor
reverse psychology, irony, whichever.
archtech The problem is, this self-deprecating humor leaves impression that you have bugs and that's funny. 00:32
diakopter but ... those things are both true.
(some bugs are quite funny)
archtech It is ... 00:33
Well I don't know what to say, maybe check framing in linguistics.
I can't explain well this type of stuff.
TimToady basically, in anthropological terms, we want to fix some of the bugs in current hacker culture too
we want to move away from being a Vulnerability as Weakness culture into more of a Vulnerability as Strength culture. 00:34
archtech TimToady, to me, something Perl 6 could use in its image is, slick, modern look.
Because the common perception is that Perl is arcane and ancient.
TimToady but that's what everyone else is doing. :)
archtech And this page looks a bit like a home page from 1997
Which supports this image.
TimToady simple is okay; we don't need flashy 00:35
archtech modern/slick != flashy
diakopter mmm, slickness. like that gradient highlight that adds a "sheen" to many logos.
archtech I guess we put different meaning into slickness
TimToady anyway, we want to communicate simplicity
there's already far too much slick in the world 00:36
00:36 lue joined
archtech Well, good luck with it. 00:36
TimToady we'll do okay :)
snarkyboojum it's really quite different to something from 1997 - just check perl.org from 1997 or something at archive.org 00:37
diakopter speaking of, 2019 called; they want a Perl 7 implementation. 00:38
snarkyboojum let me check the wayforwardmachine 00:39
says Perl6 is still state of the art :P
lue I've got The Docter on speed-dial! 00:40
lue is talking to The Docter
...eh, Doctor 00:41
diakopter hmm. wondering whether I should admit I typoed my last msg (meant to type Perl 6)
snarkyboojum ah :) 00:42
TimToady nah, the ghost of Tolkien claims that large sequels only take 14 years 00:44
though the ghost of Moses keeps saying "I thought you said 40 years" 00:45
lue The Doctor says perl 6 came out in the '10s...
00:46 ash__ joined 00:48 ash__ left, ash__ joined
TimToady well, Perl 6 will be 16 in 2016, which is the usual age for a coming-out party... 00:48
though perhaps we could schedule a bat mitzvah in 2012 00:49
lue So Perl was found in Israel? 00:50
It's written in Hebrew?
diakopter Aramaic 00:51
lue The Doctor tells me Perl 6 will have an "official" implementation February 16, 2011, around tea. 00:53
diakopter lue: that would be impressive... (since "official" merely means "implementing the whole spec correctly") 00:55
lue as in the "perl" program is updated.
colomon diakopter: the whole story: at around lunch time, February 16, 2011, a bunch of us are going to go in and take everything Rakudo 2011 doesn't implement out of the spec. :) 00:56
lue You're talking to the Doctor too!? That's who the third voice is.
TimToady well, just mark it all as "post 6.0"
diakopter colomon: but what about the features other implementations implement but Rakudo doesn't (by then)? 00:59
lue what other implementations? :)
diakopter >: 01:00
lue Ooh, should'nt have said that. (sorry Doctor!) 01:01
colomon diakopter: I'm sure someone will revert the spec within a couple of days. :)
once the slashdotting wears down.
diakopter |:|
ash__ which spec is 'use' in? 01:02
mberends S09 01:05
01:06 drbean joined 01:07 patspam joined 01:24 am0c joined
TimToady er, S11, actually 01:29
mberends <oops> I read S11 and typed S09 </oops> 01:37
TimToady fired off those old octal neurons, did it? :)
diakopter you musta thought S09 was octal
hm
TimToady other way around 01:38
diakopter yar
mberends no, musta just been half asleep
TimToady the night is yet young 01:39
diakopter I love how S09 is top-ranked on google for "S09"
S08 is fourth
01:40 ruoso joined
diakopter same with S07 01:40
S06 is 2nd
and S05 and S04
S03 is top
TimToady some people are easily amused 01:41
mberends is :-) 01:42
diakopter ok, maybe "love" was too strong
TimToady we can give you some great deals on S09! 01:43
mberends lorl
lue Do I get Oxiclean if I order my own copy of S09 with a credit card? 01:45
TimToady only if you do it with the credit card we give you 01:46
diakopter std: my %%%3 01:47
p6eval std 29700: OUTPUT«ok 00:01 107m␤»
diakopter riddle me that. 01:48
TimToady (my %) % %3 probably
diakopter std: my % % % 3 01:49
p6eval std 29700: OUTPUT«===SORRY!===␤Anonymous variable requires declarator at /tmp/uUSmkdZcZg line 1:␤------> my % % %⏏ 3␤ expecting twigil␤FAILED 00:01 106m␤»
diakopter std: my % % %3
p6eval std 29700: OUTPUT«ok 00:01 107m␤»
TimToady er
my *is* a declarator...
oh, it's the second one
er, third?
depending on how you count
diakopter ok, but what does %3 mean
TimToady presumably something like %($3) 01:50
diakopter facestab
mberends it's so useful to have a human online who can think like a parser
diakopter or even like STD
TimToady well, STD doesn't actually care 01:51
it just assumes \d+ is a legal name to go after a sigil
lue STD just gives you a crummy number.
std: say "hello";
p6eval std 29700: OUTPUT«ok 00:01 105m␤»
TimToady well, it gives you a parse tree, but those don't ircify very well 01:52
you can get the parse tree if you run STD yerself
mberends the best feature is the user-context-sensitive help
it seems to "know" what you're "thinking" 01:53
or even what you "need", that's cool
diakopter std: my & & & 01:54
TimToady interesting, it returns the 3 as 'index'
p6eval std 29700: OUTPUT«===SORRY!===␤Anonymous variable requires declarator at /tmp/2UJbwi7pDV line 1:␤------> my & & &⏏<EOL>␤ expecting any of:␤ infix noun␤ twigil␤FAILED 00:02 128m␤»
diakopter but I *did* declare &
(pronounced "unnhh")
TimToady yes, but you declared it as anonymous, so you have to declare it again 01:55
diakopter o
TimToady std: my & & my &
p6eval std 29700: OUTPUT«===SORRY!===␤Illegal redeclaration of routine '' (from line 1) at /tmp/mMpXxmp0d1 line 1:␤------> my & & my &⏏<EOL>␤ expecting any of:␤ infix noun␤ twigil␤FAILED 00:01 128m␤» 01:56
diakopter std: my & && my &
p6eval std 29700: OUTPUT«===SORRY!===␤Illegal redeclaration of routine '' (from line 1) at /tmp/IkfSG99sKG line 1:␤------> my & && my &⏏<EOL>␤ expecting any of:␤ infix noun␤ twigil␤FAILED 00:01 128m␤»
TimToady fnerk
wow, a real STD buglette
diakopter buglers are in high demand 01:57
TimToady so are taps, at the end of the day 01:58
diakopter std: my (&*; %, $; int &a;); 02:00
p6eval std 29700: OUTPUT«ok 00:01 110m␤»
02:01 nbrown joined
diakopter std: my ($ where $) 02:02
p6eval std 29700: OUTPUT«===SORRY!===␤Unsupported use of $) variable; in Perl 6 please use $::EGID at /tmp/fr9mogIA1u line 1:␤------> my ($ where $)⏏<EOL>␤FAILED 00:01 108m␤»
TimToady std: my ($) 02:03
p6eval std 29700: OUTPUT«ok 00:01 106m␤»
TimToady std: my ( $ where $ )
p6eval std 29700: OUTPUT«===SORRY!===␤Anonymous variable requires declarator at /tmp/rM21s2O1of line 1:␤------> my ( $ where $⏏ )␤ expecting twigil␤FAILED 00:01 108m␤»
TimToady that message could be improved 02:04
diakopter std: my $ is is is is
p6eval std 29700: OUTPUT«ok 00:01 106m␤»
diakopter use speeth_imphedimenths; 02:05
std: my (IS $) 02:08
p6eval std 29700: OUTPUT«===SORRY!===␤Invalid typename IS at /tmp/qOgHWbou66 line 1:␤------> my (IS⏏ $)␤FAILED 00:01 108m␤»
diakopter std: my IS $
p6eval std 29700: OUTPUT«===SORRY!===␤In "my" declaration, typename IS must be predeclared (or marked as declarative with :: prefix) at /tmp/sf4acPdyRs line 1:␤------> my IS⏏ $␤FAILED 00:01 105m␤»
02:09 hidx joined
dalek kudo/ng: b14892b | pmichaud++ | src/Perl6/Grammar.pm:
Add NYI messages for := and ::= bindings.
02:25
lue hears an echo of EXTERMINATE! 02:28
colomon ng: say split("", "forty-two"); 02:32
p6eval ng c0f4cc: OUTPUT«Could not find non-existent sub &split␤current instr.: '_block14' pc 29 (EVAL_1:0)␤»
lue I want to do a raised eyebrow smiley for that result... 02:35
TimToady actually, it couldn't find an existent sub 02:36
or it found a non-existent sub
but I'd settle for a simple "Couldn't find &split" 02:38
colomon I was just working on writing split. :)
But I suppose the error message is LTA. 02:39
pugs_svn r29701 | lwall++ | [STD] don't carp about duplicate anonymous routine declarations 02:42
r29701 | make undeclared type message the same for parameters as for other declarations
r29701 | clarify the message about anonymous variables
r29701 | don't report a $) variable where ) is the $*GOAL
r29701 | and in general, diakopter++ for tormenting STD 02:43
dalek kudo/ng: 97e5506 | (Solomon Foster)++ | src/core/Rat.pm:
Clean up ugly bit in GCD now that list assignment works again.
02:59
kudo/ng: f0a4366 | (Solomon Foster)++ | src/core/Any-str.pm:
Add sub versions of split.
TimToady std: $ 03:03
p6eval std 29701: OUTPUT«===SORRY!===␤Non-declarative sigil is missing its name at /tmp/2UBSoTgoHF line 1:␤------> $⏏<EOL>␤ expecting twigil␤FAILED 00:01 107m␤»
TimToady std: my (IS $)
p6eval std 29701: OUTPUT«===SORRY!===␤In parameter declaration, typename 'IS' must be predeclared (or marked as declarative with :: prefix) at /tmp/Iyv9OMXEPB line 1:␤------> my (IS⏏ $)␤FAILED 00:01 108m␤»
TimToady std: my ($ where $)
p6eval std 29701: OUTPUT«===SORRY!===␤Non-declarative sigil is missing its name at /tmp/9D7Z9jkIB3 line 1:␤------> my ($ where $⏏)␤ expecting twigil␤FAILED 00:01 108m␤»
TimToady std: my & && my & 03:05
p6eval std 29701: OUTPUT«ok 00:01 127m␤»
03:05 hidx left 03:13 tylerni7 left 03:22 tylerni7 joined, tylerni7 left, tylerni7 joined
k23z__ is berlios offering private svn ? 03:30
dalek kudo/ng: 88f0181 | (Solomon Foster)++ | src/core/Num.pm:
Pull in Num.Rat from master.
03:34
pugs_svn r29702 | colomon++ | [t/spec] Unfudge three tests that work now.
lue is listenting to the Milk Bar song from Majora's Mask on a loop 04:09
colomon is watching fiddlers he knows in the Olympic opening ceremony (a few minutes behind real time). 04:11
lue thinks that colomon has a TV in his office (or a computer in his living room) 04:14
lue or has figured out quantum physics
colomon my wife and I both have our laptops out.
lue I'm on my laptop, but the battery lasts only 50 minutes (old laptop) 04:15
colomon We're both plugged in, too. :) 04:16
I get 2 - 3 hours of battery, depending on how often I recompile (or run spectests). 04:17
lue If I got two new batteries, and swapped my cd drive with the 2nd, I have the power of most modern laptops!
It's an old PowerBook G3 Wallstreet.
colomon OS X, at least, I hope? 04:18
lue Nah, Linux. Switched because OS X for this laptop wouldn't be supported anymore.
colomon ah, Yellow Dog (?) is probably a fine choice. 04:19
just so you're not running OS 9 or whatever. (okay, I'm a relative newcomer to the Mac.)
lue Fedora. Chose Gentoo first, then Ubuntu, then switched to OpenSuSE, then Fedora. 04:20
PPC Linux is BLOODY difficult, compared to Intel.
colomon My wife has a PPC Mac in our basement, which at this point we keep around mostly so I can test my code on PPC if need be. 04:22
I keep on thinking I should replace it with a Playstation 3. :)
lue I got this laptop as a free gift. It was given to get rid of it, but hey, Free Mac (they're expensive). 04:23
colomon I know, I'm on a MBP. :) 04:24
Really well worth the cost, though, drastically better machine than my old Windows laptops.
lue O.o Shiny! What I would do for that (not much) o.O 04:25
... Milk Bar theme never gets old :D 04:27
colomon holy smokes, I just had 992 tests run (and I think pass) in my very slightly hacked sin.t! 04:31
lue you created a test for sins? (getting a little HEAVENLY, are we?) 04:33
colomon dude, I have like 1700 tests for sin. 04:34
ng: sin(Inf) 04:35
p6eval ng 88f018: OUTPUT«too many positional arguments: 2 passed, 1 expected␤current instr.: 'sin' pc 219906 (src/gen/core.pir:4769)␤»
lue my salute to puns! 04:36
colomon ng: say Inf.WHAT
p6eval ng 88f018: OUTPUT«Num()␤»
04:37 Chillance joined 04:38 Chillance left
lue ng: say Inf.WHICH 04:46
p6eval ng 88f018: OUTPUT«Inf␤»
TimToady it's possible that Inf should not be in any of Int/Num/Rat, but be a subtype of Numeric 04:47
lue ng: say Inf+5
p6eval ng 88f018: OUTPUT«Inf␤»
lue good. Nothing weird. :)
TimToady it's currently Num for historical reasons having to do with IEEE floaters
but p6 is supposed to extend the idea of Inf to all numeric types (that aren't native) 04:48
colomon Hmmm, subtype of Numeric or subtype of Real? 04:50
lue Inf can be argued to not be a number at all. (I don't argue this, btw)
TimToady mostly, we need to put it where it can be dispatched sanely without having a lot of strange 'if' statements here and there 04:51
lue (ahh, perl6, the only language to care about what Infinity is...) Is it a real number?
TimToady but there's an argument that any values are allomorphic
42 is an integer, a real, a rational, etc. 04:52
lue hmm, looking at wikipedia about infinity... this is now a quest for the truth (get our philosophy caps on!) 04:54
colomon But if it's a subtype, you can be real slick with it, eh? multi sub infix:<+>(Infinity $x, Real $y) { return $x; }
TimToady don't want slick, I want cute :P
we can also dispatch on specific values 04:55
lue but is cute -Ofun? I think slick is. 04:56
TimToady otoh, values are consider an extra constraint, so doesn't dispatch only on the nominal type
(whatever that type is)
colomon I think having Infinity be its own type is definitely -Ofun, whether you call it cute or slick. 04:57
TimToady just thinking maybe the nominal type of a constant might be possibly be a role like Numeric without committing to a storage type, as long as all such values are distinguishable without consulting the storage type 04:58
lue but then what good would be assigning a value to the variable of that type be?
Ah, the wonders of infinity...
TimToady a variable must have a storage type 04:59
but these are constants
colomon But we need to have pos / neg Infinity, that's two values... guess it could be two types, but that doesn't feel instinctively right to me.
lue Maybe something like: my Infinity $a = +; my Infinity $b = -; 05:00
according to dr. math, infinity is NaN. (mathforum.org/dr.math/faq/faq.large...bers.html) 05:02
colomon I'm really liking this idea, though. All the special cases become simple easy to understand functions...
Infinity.sin() { NaN; } 05:03
TimToady I don't have any fixed ideas on this, but it seems like something worth considering
colomon NaN might make sense as a type as well...
lue it's a concept, NaN :)
colomon I will keep this in the back of my mind.
lue I hold on to my belief that (x/0)=Infinity and (x/Infinity)=0 05:04
I don't care if Infinity is NaN, IMO, it's its NaN-ness that makes it work. 05:07
(you should ask me about my crazy theories sometime :D )
TimToady is Inf-time sometime?
colomon It's when you go to Milliways. 05:08
lue It's probably all time and no time, at the same time >:D 05:09
(bah, but time's an illusion (lunchtime doubly so))
TimToady as for the bucket, NaNtucket.
the lunch bucket, that is 05:10
lue infinity is measured in NaNometers :) 05:11
05:12 gfx joined
colomon ng: say asin(1.0); 05:12
p6eval ng 88f018: OUTPUT«1.5707963267949␤»
colomon ng: say sin(asin(1.0)); 05:13
p6eval ng 88f018: OUTPUT«too many positional arguments: 2 passed, 1 expected␤current instr.: 'sin' pc 219906 (src/gen/core.pir:4769)␤»
lue wants to go to the Milliways Milk Bar :D
colomon ng: say sin(1.5707963267949) 05:14
p6eval ng 88f018: OUTPUT«No applicable candidates found to dispatch to for 'infix:<div>'␤current instr.: 'perl6;Rat;new' pc 287232 (src/gen/core.pir:0)␤»
colomon ng: my $a = asin(1.0); say $a; say asin($a); 05:15
p6eval ng 88f018: OUTPUT«1.5707963267949␤too many positional arguments: 2 passed, 1 expected␤current instr.: 'asin' pc 220247 (src/gen/core.pir:4871)␤»
colomon ng: my $a = asin(1.0); say $a; say sin($a)
p6eval ng 88f018: OUTPUT«1.5707963267949␤too many positional arguments: 2 passed, 1 expected␤current instr.: 'sin' pc 219906 (src/gen/core.pir:4769)␤»
colomon say sin(1.6)
ng: say sin(1.6) 05:16
p6eval ng 88f018: OUTPUT«0.999573603041505␤»
colomon too tired to figure this out tonight... 05:20
lue 21:20 over here. I'm beginning to feel it too. 05:21
TimToady of course, if IEEE floaters do the right thing with these NaNnies, then maybe we can just go ahead and use Num for mixed-mode operations when it's needed
lue how do you write a recurring decimal in p6?
TimToady and then we dont have to write anything special for 'em
colomon lue: say 1/3
TimToady yes, Rats 05:22
colomon ng: say 1/3
p6eval ng 88f018: OUTPUT«0.333333333333333␤»
colomon ng: say (1/3).perl
p6eval ng 88f018: OUTPUT«1/3␤»
colomon ng: say (1/3).WHAT
p6eval ng 88f018: OUTPUT«Rat()␤»
TimToady ng: say (1/3).perl
p6eval ng 88f018: OUTPUT«1/3␤»
lue what about .999... and .111...? I wanted to try something with them... 05:23
of course, .999... = 1 and .111... = 0. Just want to see if p6 knows this. 05:24
colomon ng: say 1/9
p6eval ng 88f018: OUTPUT«0.111111111111111␤»
lue ng: say 1/9 = 0;
p6eval ng 88f018: OUTPUT«0.111111111111111␤Cannot assign to readonly value␤current instr.: '&infix:<=>' pc 15452 (src/builtins/Junction.pir:113)␤»
RandalSchwartz since when is .111111 = 0 ?
colomon ng: say (1/9)*9
TimToady ng: say 9 * 1/9
p6eval ng 88f018: OUTPUT«1␤»
colomon RandalSchwartz: since never. :)
lue or whatever .111... is equal to.
I know .999... is equal to 1. 05:25
RandalSchwartz I'd say .11111... is equal to itself
colomon I don't think there's a way to say .9999.... in perl. Yet.
(I mean, as distinct from 1 or .11111.... times 9)
lue 3/3 is both .999... and 1. 05:26
1/3=0.333...*3=1
1/3=0.333...*3=.999... 05:27
(1/3)*3=1
colomon afk # off to bed
05:29 patspam left
TimToady ng: say "yes" if 1/3 * 3 == 1 05:30
p6eval ng 88f018: OUTPUT«yes␤»
05:30 patspam joined
TimToady don't try that one in Perl 5 05:30
lue Heh, fun with numbers! Does P6 have the power to write π as a ratio? (π/1 doesn't count) 05:33
s1n TimToady: seems to work for me (perl -e 'print "yes\n" if 1/3 * 3 == 1') 05:34
TimToady bet it doesn't work for other fractions 05:35
s1n lue: how would you express pi as a ratio given it's irrational?
TimToady we don't have an IrRat type
lue that's the point >:)
s1n TimToady: perl -e 'print "yes\n" if 7/16 * 16 == 7'
TimToady powers of 2 should always work 05:36
s1n ahh, that's the requirement, it breaks when i do 2342345/45234214
wait, whoops 05:37
nope, still works
TimToady maybe someone installed a fuzz onto == comparisons since I last looked 05:38
s1n dunno, but i can't craft a number that breaks
TimToady maybe they got tired of that FAQ :)
lue hm, maybe I can invent the number ∏ for the sole purpose of the ration π/∏ ... 05:39
oops ratio
ANFSCD... I want to make myself a 4 dimension person so I can "walk" through the timeline as I please. 05:43
05:46 rv2733 joined 05:49 rv2733 left 05:50 rv2733 joined
lue I believe the statement that 4D *can not, in any way, possibly ever be TIME,* is (quite frankly) ignorant. 05:50
05:51 athenot joined 05:52 drbean left 05:54 rv2733 left 06:24 k23z__ joined 06:32 athenot left 06:47 simcop2387 joined, iblechbot joined 06:49 lue left 06:56 TiMBuS joined 07:14 drbean joined 07:28 Su-Shee joined
Su-Shee good morning 07:29
phenny: tell vamped yes, I'm talking the art of electronics. this summer, it seems. 07:32
phenny Su-Shee: I'll pass that on when vamped is around.
07:35 kaare joined, kaare is now known as Guest54390 08:18 vamped joined
vamped hello Su-shee 08:19
phenny vamped: 07:32Z <Su-Shee> tell vamped yes, I'm talking the art of electronics. this summer, it seems.
vamped lol. like clockwork.
Su-Shee: AOE has been rumoured for 4 years. Was there anything semi-official that you saw? 08:20
Su-Shee vamped: it's flagged as pre-order at amazon for half a year now and wikipedia says it's comming in 2010. 08:24
vamped: I already considered hooking up all those makers and arduino freaks to send fanmail to the author. ;) 08:26
vamped Yes. Well the author "is working on it" and it will "take a long time." I suppose I want it done right, and not just another re-release that is not much different from the original. 08:31
Su-Shee vamped: that's the same with this computer graphic's bible and the meyer-oo book and we never see new stevens' bibles again.. 08:33
08:36 synth joined
vamped same with "Programming Perl" :D - it's been 10 years since last release. 08:36
08:37 vamped left 09:00 gfx left 09:34 Chillance joined 09:46 Chillance left 09:50 fridim joined, Chillance joined 09:51 drbean left
colomon ng: say 2.Num.Num 10:00
p6eval ng 88f018: OUTPUT«2␤»
colomon ng: say 2.1.Num.Num
p6eval ng 88f018: OUTPUT«2.1␤»
colomon ng: say 2.Int.Num
p6eval ng 88f018: OUTPUT«2␤»
colomon ng: say Inf.sin 10:03
p6eval ng 88f018: OUTPUT«NaN␤»
colomon ng: say asin(1).sin
p6eval ng 88f018: OUTPUT«1␤»
colomon ng: say asin(1)
p6eval ng 88f018: OUTPUT«1.5707963267949␤»
colomon ng: say sin(asin(1))
p6eval ng 88f018: OUTPUT«too many positional arguments: 2 passed, 1 expected␤current instr.: 'sin' pc 219906 (src/gen/core.pir:4769)␤»
colomon ng: say Int.sin('degrees'); 10:06
p6eval ng 88f018: OUTPUT«Use of type object as value␤current instr.: 'perl6;Perl6Exception;throw' pc 13784 (src/builtins/Associative.pir:118)␤»
colomon ng: say Inf.sin('degrees')
p6eval ng 88f018: OUTPUT«too many positional arguments: 2 passed, 1 expected␤current instr.: '_block14' pc 29 (EVAL_1:0)␤»
10:10 am0c left 10:11 agentzh joined 10:26 mssm joined 10:27 am0c joined 10:36 k23z__ left 10:44 pmurias joined
pmurias hi 10:46
colomon o/ 10:58
11:03 agentzh left 11:10 nbrown left 11:11 nbrown joined 11:13 Rix joined 11:24 IllvilJa joined 11:26 drbean joined
pugs_svn r29703 | colomon++ | [t/spec]i Fudge two questionable tests that fail hard. 11:46
colomon rakudo: say pi.Rat(1e-10) 11:47
p6eval rakudo 1d4928: OUTPUT«3.14159265361894␤»
colomon rakudo: say pi.Rat(1e-10).perl
p6eval rakudo 1d4928: OUTPUT«312689/99532␤»
pugs_svn r29704 | colomon++ | [t/spec] Replace references to pi the constant with a local variable. 11:51
11:57 masak joined
masak hi #perl6. hope you had a nice Friday night. I did. :) 11:58
I'm not staying long (going swimming), but while I'm here, I might as well submit a rakudobug. 11:59
rakudo: foo(5) { say "HAI 5!" }; foo(5)
p6eval rakudo 1d4928: OUTPUT«Confused at line 10, near "{ say \"HAI"␤in Main (file <unknown>, line <unknown>)␤»
masak erm.
rakudo: sub foo(5) { say "HAI 5!" }; foo(5)
p6eval rakudo 1d4928: OUTPUT«HAI 5!␤»
masak rakudo: sub foo(Inf) { say "HAI INFTY!" }; foo(Inf)
p6eval rakudo 1d4928: OUTPUT«Malformed routine definition at line 10, near "foo(Inf) {"␤in Main (file <unknown>, line <unknown>)␤»
masak rakudo: sub foo(NaN) { say "NAN BREAD!" }; foo(NaN) 12:00
p6eval rakudo 1d4928: OUTPUT«Malformed routine definition at line 10, near "foo(NaN) {"␤in Main (file <unknown>, line <unknown>)␤»
12:00 mssm left
masak submits rakuodbug 12:00
colomon masak: you would love the weird bugs I've been getting in ng. 12:01
masak I'm sure.
dalek kudo/ng: b38e07b | (Solomon Foster)++ | t/spectest.data:
Turn on roots.t.
masak I stumbled on this, which really is a TODO bug of sorts, because I wanted to see if Inf and NaN would match other types than Num.
TimToady mentioned in the backlog that they should.
12:04 mberends joined
masak mberends: o/ 12:05
jnthn Good day, folks.
masak lolitsjnthn!
mberends good morning masak+jnthn
masak 'masak+jnthn' sounds like one of those freaky mech bots with big cannons as arms, destroying everything in their path. 12:06
mberends eek! duck!
masak except we don't shoot ammunition, but bug reports and Rakudo features :) 12:07
dalek kudo/ng: b9c1166 | (Martin Berends)++ | docs/compiler_overview.pod:
[docs/compiler_overview.pod] first 25% of rewrite for ng
kudo/ng: 075b8f9 | (Martin Berends)++ | (19 files):
Merge branch 'ng' of github.com:rakudo/rakudo into ng
jnthn masak: One arm shooting bugs and the other shooting fixes makes a rather schizophrenic mech bot. :-) 12:08
masak jnthn: it's just the Yang and Yin of software development :)
mberends o noes, that second commit was not ready for release :( please kill it somebody...
masak mberends: 'git revert' and then push again? 12:09
mberends thanks, will try that
colomon jnthn: I've got another crazy dispatch thing going on. 12:11
ng: sin(Inf)
p6eval ng 88f018: OUTPUT«too many positional arguments: 2 passed, 1 expected␤current instr.: 'sin' pc 219906 (src/gen/core.pir:4769)␤»
colomon ng: asin(.9) 12:12
p6eval ng 88f018: ( no output )
colomon ng: say asin(.9)
p6eval ng 88f018: OUTPUT«1.11976951499863␤»
jnthn ng: Inf
p6eval ng 88f018: ( no output )
jnthn ng: say Inf
p6eval ng 88f018: OUTPUT«Inf␤»
colomon ng: say sin(asin(.9))
p6eval ng 88f018: OUTPUT«too many positional arguments: 2 passed, 1 expected␤current instr.: 'sin' pc 219906 (src/gen/core.pir:4769)␤»
dalek kudo/ng: 4aa2add | (Martin Berends)++ | (19 files):
Revert "Merge branch 'ng' of github.com:rakudo/rakudo into ng"

changes made to b9c1166a4512cee2daf8f7face4ad3331b941780.
12:13
jnthn ng: asin(Inf)
p6eval ng 88f018: OUTPUT«too many positional arguments: 2 passed, 1 expected␤current instr.: 'asin' pc 220247 (src/gen/core.pir:4871)␤»
colomon jnthn: I think we could really really use a version of that message that actually printed what the arguments and candidates were.
Either that or I need a dispatch internals debugging lesson. 12:14
masak mberends: seems you only reverted the merge commit, and not the 25% rewrite commit.
mberends warning: mberends-- may have messed up some source files. build with caution
colomon ng: say Inf.sin 12:15
p6eval ng 88f018: OUTPUT«NaN␤»
mberends masak: the 25% rewrite is OK, that's the only one I wanted to commit
colomon ng: say Inf.sin('degrees')
jnthn ng: &asin.candidates>>.signature>>.perl>>.say
p6eval ng 88f018: OUTPUT«too many positional arguments: 2 passed, 1 expected␤current instr.: '_block14' pc 29 (EVAL_1:0)␤»
ng 88f018: OUTPUT«Symbol '&asin' not predeclared in <anonymous>␤current instr.: 'perl6;PCT;HLLCompiler;panic' pc 137 (src/PCT/HLLCompiler.pir:101)␤»
jnthn wtf 12:16
masak mberends: there's a way to avoid making merge commits when pulling with git. it's spelled "git pull --rebase origin <branch>"
mberends silly me, I remember that.... now
masak it's a very nice aspect of git. it means, "pull, but pretend the work I just did comes after the things I pull". 12:17
anyway. swimming. 12:18
mberends and that can be automated in a config file too, somehow
masak probably.
I don't think I'd want it on by default, though.
mberends enjoy the swim!
masak will be back later to pester you all with rakudobugs and bad puns. :)
12:18 masak left
jnthn oh, there were puns? I should bother to backlog! 12:18
mberends jnthn: you can't backlog the future... yet 12:19
wait long enough and it works
jnthn oh
That's disappointing. 12:20
.oO( Why isn't the future out yet? )
colomon the lack of puns or the insanity of sin?
jnthn colomon: Both...though the second is more sinful than disappointing. :-)
colomon: I'll take a look soonish. Need coffee. 12:21
colomon ng: &asin.candidates>>.signature>>.perl>>.say
p6eval ng 88f018: OUTPUT«sh: ./perl6: No such file or directory␤»
colomon jnthn: roger. 12:22
spinclad colomon: yes? 12:23
colomon spinclad: hmmm? 12:24
jnthn :-)
spinclad roger: that's me. 12:25
colomon Ah.
Apologies for accidentally invoking you. 12:33
12:36 iblechbot left
pugs_svn r29705 | pmurias++ | [mildew] '1' gets converted to SSA correctly 12:39
r29706 | pmurias++ | [mildew] refactored the conversion into ssa into subroutines
jnthn mberends: Erm. 12:56
mberends: I think that revert did something really odd. 12:57
pugs_svn r29707 | pmurias++ | [mildew] -Cssa executes the transformed AST
r29708 | pmurias++ | [mildew] inner molds are converted to ssa too
pmurias ruoso: the transformation to SSA is begining to work :)
12:59 rv2733 joined
jnthn mberends: It seems that it somehow reverted a bunch of changes from yesterday. 12:59
Though the merge patch you reverted seemed to re-do the ones from yesterday too
jnthn is confused
mberends jnthn: mea culpa :( I think I un-committed some other peoples' commits
lots of FAIL here too 13:00
jnthn Essentially commit b9c1166a4512cee2daf8f7face4ad3331b941780 (the one where you added the 25% change to the doc) looks fine. 13:01
jnthn pulls and sees if he can clear up 13:02
mberends what happened here was, I forgot to git pull before adding the 25% pod update
then I stashed, pulled, applied the stash, pushed. Then the mess erupted. 13:03
jnthn mberends: Mighta got it sorted, testing. 13:04
13:05 patspam left
jnthn oh huh 13:12
mberends is that good or bad? 13:13
jnthn Heh
Forgot that after a revert you gotta commit the revert :-)
Done and pushed 13:14
My tree here seems to have everything in it.
So think we're OK again.
Oddness. :-/
colomon \o/
jnthn colomon: I reproduced your sin issue.
mberends pulled, testing
colomon jnthn: I'm hoping you mean in a way which makes it comprehensible?
jnthn colomon: Trying to work out why it's failing. 13:15
13:15 drake1 joined
drake1 hello 13:16
dalek kudo/ng: b7fb2e1 | jonathan++ | (19 files):
Revert "Revert "Merge branch 'ng' of github.com:rakudo/rakudo into ng""
drake1 how far is perl6 before it's safe to use? 13:17
mberends drake1: we're aiming for a major milestone release called Rakudo * in April 13:18
jnthn drake1: Depends what you want to use it for. :-) For experimentation and learning the language, it's safe now, I guess. :-)
drake1 for instance, I wrote my own little language you can use for inspiration www.gangsterfreak.com/cslib/cut/csconf :) 13:19
jnthn colomon: OK, found something curious.
ng: say 1.5.sin('radians')
p6eval ng 4aa2ad: OUTPUT«sh: ./perl6: No such file or directory␤»
drake1 jnthn: just when I can build it for my CD distros
colomon > say 1.5.sin('radians') 13:20
Any.sin 1.5 radians
Num.sin 1.5 radians
0.997494986604054
jnthn colomon: Now do Inf.sin('radians')
colomon: Seems to be different between Rat and Num. 13:21
:-/
drake1: The Rakudo * release planned for April is probably more suitable for that.
colomon > say 1.5.Num.sin('radians')
Num.sin 1.5 radians
drake1 ok
colomon 0.997494986604054
drake1 jnthn: is it very different than perl5 or is the non-library systax like the good old one? 13:22
colomon btw, jnthn, my slightly hacked sin.t passed 992 tests last night before hitting this issue.
jnthn drake1: It's really rather different.
drake1 jnthn: so it wont replace the earlier version 13:23
jnthn drake1: Perl 6 should be seen more as "another language in the Perl family" rather than "Perl 5's replacement"
drake1 nice
jnthn drake1: Right. We install a perl6 binary.
And leave /usr/bin/perl as Perl 5. :-)
drake1 very nice
jnthn The two are meant to co-exist. :-)
colomon: Wow
13:23 apeiron joined
jnthn colomon: I'm trying to investigate what's up, it's not obvious. :-/ 13:23
drake1 I've heard the reference notation has change a bit 13:24
jnthn: what about things like use strict; and regular expression with slashes? 13:25
jnthn drake1: use strict is the default in Perl 6. Regular expressions still can be written between slashes, though regex syntax has changes (not everything changed, though... /^\d+$/ for example still works just fine :-)). 13:26
drake1 perfect 13:27
then I probably wont need the old one at all
jnthn: and pack is still a standard func?
jnthn drake1: Not sure about pack, sorry...maybe somebody else knows. 13:29
drake1 hm
maybe I should try it 13:30
jnthn rakudo: pack
p6eval rakudo 1d4928: OUTPUT«Could not find non-existent sub pack␤in Main (file src/gen_setting.pm, line 324)␤»
jnthn Ah.
drake1 ok
then it's more friendly for the kids 13:31
jnthn drake1: I think "not yet implemented, not sure on if it's in the specification" is the best I can answer on that.
drake1 hehe
jnthn :-)
colomon I believe pack is intended to be implemented, but the spec isn't worked out yet.
jnthn colomon: Ah, OK, cool. :-)
drake1 I think it should be standard though, it's one of the best for quick oneliners
colomon Buf is still largely unspec'd, isn't it?
jnthn colomon: Yeah, I think it's intentions are understoodish, and its details need somebody to write a first cut implementation and see how it works out. 13:32
colomon And pack is a Buf function.
jnthn Ah
Yeah, you're right. 13:33
13:33 mssm joined
colomon jnthn: could some of the Num.sin calls be somehow slipping through to Parrot's version of sin? 13:34
jnthn colomon: I don't see how that would happen. 13:35
colomon jnthn: I don't have any idea how, but it's I'm pretty sure all of rakudo's versions of sin take two arguments, and parrot's only takes one...
jnthn Oh, hang on...
drake1 actually I may write a perl interface for my newly invented binary executable object format, is the binary interface for perl6 alot different? 13:37
13:38 pmurias left
colomon drake1: I'm not sure exactly what you mean, but the answer is almost certainly yes. Rakudo is pretty drastically different than perl 5. 13:38
drake1 colomon: I mean the XS interface 13:39
not the shell pipe open 13:40
jnthn drake1: Then *very* different.
drake1 ok
maybe you have a doc with the outline?
and what about typeglobs, are you going to continue the use? 13:41
jnthn We don't have anything solid yet - the best thing on offer at the moment is actually a module, which can be found at github.com/quietfanatic/link-c 13:42
drake1 ok
(trying to find a pen for a note
got it 13:43
jnthn colomon: That Parrot sin method thought may be a good one...
colomon jnthn: would there be parrot docs foR drake1's binary interface. 13:44
?
drake1 seems like link-c
jnthn colomon: Perhaps, but then you gotta know how to dive down to the Parrot level to do bits too.
13:44 jcharlot joined
jnthn drake1: Essentially though, Rakudo compiles Perl 6 down to bytecode that runs on the Parrot VM, and it provides the guts of the native calling stuff. 13:45
link-c is built atop of those.
colomon: You were spot on. 13:46
:-)
drake1 like for dynamic links or what you mean?
jnthn drake1: For calling functions in an external library.
drake1 sweet
jnthn drake1: The intention is that you don't need a glue layer any more.
drake1 but the type must be set 13:47
jnthn drake1: Eventually, we want to have something nice and declarative at the Perl 6 level.
drake1: However, it's one of the parts of Perl 6 that's still very much a work in progress. :-)
13:47 athenot joined
jnthn Yeah, Perl 6 lets you write types in signatures, so we can hopefully get something nice. 13:47
drake1 please let me know if I can be of any help [email@hidden.address]
jnthn Well, playing with stuff and reporting bugs is always welcome. :-) 13:48
colomon: I has a fixish thing. :-)
drake1 only found one bug in the perl core so far, but it was the new version of od in the bin that changed the display instead
colomon \o/ 13:49
13:49 jcharlot left
jnthn drake1: Perl 6 is at a much earlier stage, so I'm afraid for now there's many more bugs to find. 13:50
drake1: We're working hard at stomping on 'em though. :-) 13:51
drake1 sure
hehe
im trying to find some in my own source codes but I can't 13:52
completely auto-generated C 13:53
jnthn colomon: spectesting then will push if all is well
colomon \o/
13:54 TiMBuS left
jnthn colomon: pushed 13:58
colomon: I plan to work on captures, nested signatures, etc a bit today. 14:00
dalek kudo/ng: 6090323 | jonathan++ | src/cheats/num.pm:
Make sure NaN, Inf etc are Perl 6 Nums, not Parrot Floats, so we dispatch to the right sin, etc.
14:02
drake1 you can make nice graphs with gnuplot if you're going to test the math stuff 14:03
colomon jnthn: that seems to clear up the sin(Inf) issue, but not the nearly identical asin issue. hold a moment and I'll get you a test case. 14:08
14:08 drbean left
colomon ng: say sin(asin($desired_result)) 14:08
p6eval ng b7fb2e: OUTPUT«Symbol '$desired_result' not predeclared in <anonymous>␤current instr.: 'perl6;PCT;HLLCompiler;panic' pc 137 (src/PCT/HLLCompiler.pir:101)␤»
colomon ng: sin(asin(0)) 14:09
jnthn colomon: There's a high probability that it's a similar issue
p6eval ng b7fb2e: OUTPUT«too many positional arguments: 2 passed, 1 expected␤current instr.: 'sin' pc 219906 (src/gen/core.pir:4769)␤»
jnthn colomon: That is, somewhere we're ending up with a Parrot Float, not a Perl 6 Num
drake1 whats that .pir ?
colomon and that still happens in my build here with Inf fixed. 14:10
jnthn colomon: Right, I guess asin must be returning a Parrot Float then.
colomon jnthn: oh, could it be in the result of sin, asin, etc is a Parrot Float.
jnthn brb, making some lunch.
mberends drake1: docs.parrot.org/parrot/latest/html/...o.pod.html
drake1 thanks 14:11
it almost rhymes on one of my alias names hehe
colomon ng: say sin(sin(0)) 14:12
p6eval ng b7fb2e: OUTPUT«0␤»
colomon ng: say sin(pir::asin__Nn(0)) 14:13
p6eval ng b7fb2e: OUTPUT«0␤»
colomon ng: say sin(pir::asin__Nn(0.5)) 14:14
p6eval ng b7fb2e: OUTPUT«0.5␤»
drake1 so perl6 uses the sine maps from the local FPU environment? 14:15
colomon drake1: it uses the Parrot sine, which I expect is the local FPU. 14:16
drake1 hm
thought you meant suspect
colomon jnthn: I need to be away from the keyboard a bit, but it looks to me like the problem must somehow be in Any!from-radians
jnthn colomon: ah, ok 14:17
colomon jnthn: see the above direct calls to pir, and the fact that sin and asin have the same Nn signature
but I completely cannot understand what might be wrong with !from-radians, particularly as this is the radians case, which just returns self.
14:20 lichtkind joined
colomon afk 14:21
14:26 TiMBuS joined 14:27 drake1 left 14:33 apeiron left
mberends ng 6090323 todos 76, skips 324, passes 3966 out of 4366 tests! 14:37
jnthn Almost 4000! 14:38
Wow, that was an unhealthy lunch. :-)
colomon :) 14:45
jnthn Don't see immediately hwy !from-radians is wrong...as you say, it just returns self. 14:50
ng: say PARROT(4.2e1) 14:51
p6eval ng 609032: OUTPUT«sh: ./perl6: No such file or directory␤»
jnthn oh, here's an interesting one.
> say PARROT(sin(4.2e1))
Num
> say PARROT(asin(4.2e1))
Float
lichtkind mberends: moin 14:53
jnthn > say PARROT(pir::asin__Nn(4.2e1))
ng: say PARROT(pir::asin__Nn(4.2e1))
p6eval ng 609032: OUTPUT«Num␤»
jnthn ng: say PARROT(pir::asin__Nn(4.2e1)!from_radians('radians')) 14:54
p6eval ng 609032: OUTPUT«Method '!from_radians' not found for invocant of class 'Float'␤current instr.: '_block14' pc 29 (EVAL_1:0)␤»
14:55 snarkyboojum joined
jnthn ng: say PARROT(pir::asin__Nn(4.2e1)!from-radians('radians')) 14:56
p6eval ng 609032: OUTPUT«Float␤»
pmichaud good morning, #perl6 14:58
jnthn morning, pmichaud 15:01
colomon: from_radians is indeed going to the "just hand back self" branch, so I'm rather mystified as to how things go wrong there, though clearly it looks like they are. 15:02
*from-radians, that is.
colomon yup, that's a weird one, all right. 15:08
pmichaud okay, what's on the list of things that need fixing today? 15:13
15:13 rv2733 left
colomon pmichaud: how hard would constants be to do? I keep on bumping into the lack of pi. 15:14
pmichaud checking
jnthn: ping 15:21
jnthn pmichaud: p0ng
pmichaud in Grammar.pm:116, where we look up barewords to see if they're known names, why do we do all of the checks for Abstraction/P6protoobject/Perl6Role ? 15:22
jnthn pmichaud: What would you expect to see? 15:23
pmichaud naively, anything that is named in the namespace. 15:24
jnthn An our sub would be named in the namespace too though?
pmichaud i.e., if the symbol exists, then it's a known "name"
an our sub wouldn't be a bareword
because they begin with &
(yes, that _used_ to be the case in master :-)
jnthn I dunno...that may be a little too naiive. 15:25
You're right that we maybe would get away with it now.
We could try it.
pmichaud well, I agree, but we have the case of constant foo = 3 which will put "foo" into the namespace
so we're no longer just looking for abstraction/protoobject/p6role 15:26
jnthn Yeah, true.
We didn't have the issue in master since constants were lexically scoped there.
pmichaud right
jnthn We never caught up with the our-scoped change.
I don't see any immediate problems with saying "bareword and in the namespace = known name" 15:27
pmichaud the one place that might bite us is parrot's method-in-namespace bug
jnthn Yes.
pmichaud because methods end up in the namespace without the '&'
but actually, given the way we build our methods now, I suspect that might not be the case
jnthn Even if you :nsentry('') them?
pmichaud well, I'll remove the checks and see what happens 15:28
jnthn Is there a reason we can't :anon methods now, by the way?
pmichaud it doesn't mean what we think it means :-(
jnthn I thought it just meant "don't put it in the namespace"?
pmichaud basically (unless chromatic++ has already fixed it), :anon had the effect of not registering it as a method, iirc
jnthn We don't care though. 15:29
pmichaud oh, that's true.
jnthn I don't think I even emit :method on methods any more.
We add them all through the meta-model.
.^add_method...
pmichaud anyway, I'll try removing the checks and we'll see what breaks.
jnthn OK
tbh that code was rather inspired by master anyway 15:30
:-)
pmichaud yeah
also, I notice a quite a few
my $test := pir::get_hll_global__PPS(@parts, $final);
__PPs is much more efficient than __PPS
jnthn Remind me what uppercsae vs lowercase means again?
pmichaud (well, maybe not *much*, but the __PPS version ends up creating a string register)
uppercase == *must* be a register 15:31
jnthn Ah, OK
pmichaud lowercase == may be a constant or register
jnthn OK.
btw, in S02:
A parcel may be captured into an object with backslashed parens:
$args = \(1,2,3,:mice<blind>)
Does that read to you as "what's in $args after this is a Capture"?
pmichaud yes.
jnthn OK, good.
The wording just felt a bit...odd. :-) 15:32
Hmm...this in S02 is fossil, I guess: 15:39
In item context, though, the implied parentheses are not removed, so
$a = < a b >;
is equivalent to:
$a = ('a', 'b');
which, because the list is assigned to a scalar, is autopromoted into
a C<Capture> object:
$a = \('a', 'b');
15:40 Psyche^ joined
lichtkind does anybody know who writes lith-ology.blogspot.com ? 15:40
pmichaud jnthn: yes, fossil.
jnthn Good.
pmichaud colomon: how would you like pi to be initialized?
and, where should we put it? ;-) 15:41
colomon pmichaud: Hmmm... Num.pm? 15:42
pmichaud looks like it goes in Numeric
keep in mind we have to have it defined before any function/method that uses it, also 15:43
(S32 says Numeric)
C<Numeric> provides some constants in addition to the basic
mathematical functions.
constant pi is export = 3.14159_26535_89793_23846_26433_83279_50288;
colomon right but we don't have Numeric this week, do we?
:)
also, there's another issue there...
pmichaud we can create a Numeric.pir, though, and just put 'pi' in it :)
colomon ng: my $pi = 3.14159_26535_89793_23846_26433_83279_50288
p6eval ng 609032: OUTPUT«PAST::Compiler can't compile node of type BigInt␤current instr.: 'perl6;PCT;HLLCompiler;panic' pc 137 (src/PCT/HLLCompiler.pir:101)␤»
15:44 Psyche^ is now known as Patterner
pmichaud yeah, we need something to detect when we're outside the boundaries of Rat 15:44
colomon which is to say, it tries to construct it as a Rat and fails miserably.
lichtkind pmichaud: fossil is the author?
colomon pmichaud: shouldn't it be Numeric.pm? Or does it have to be in the pir world? 15:45
pmichaud lichtkind: I was replying to jnthn
colomon: initially it probably needs to be in the pir world, unless 'constant' is already implemented
jnthn No, it's not.
colomon ah, okay. Numeric.pir it is. :)
pmichaud then I'll put it in the pir world as a cheat for now
jnthn Though since it's just "stick this thingy in the namespace" it should be relatively easy. :-) 15:46
pmichaud right
jnthn: no issues with changing the name test (yay!)
at least, we pass spectest
jnthn pmichaud: I doubted there would be. 15:47
:-)
Just the method one we may hit, but that's likely not a big deal for now.
dalek kudo/ng: 00da096 | pmichaud++ | src/Perl6/Grammar.pm:
Modify the is_name() test to be less discriminating. All spectests
15:48
pmichaud Currently we have src/cheats/setup-io.pm, but it looks like it's starting to initialize more than just the io process vars 15:51
perhaps a src/cheats/constants.pir instead ?
jnthn pmichaud: Oh, that was me being lazy and thinking "heh, it's in cheats anyway" :-)
pmichaud: I'm curious what the non-cheat version of that lot should look like 15:52
Anyway, yes, feel free to rename...
pmichaud well, we might not be able to avoid the cheat there.... that somewhat gets into "knowhow" issues
it may be that we want src/knowhow/parrot/... for that sort of stuff :)
jnthn knowhow?
pmichaud well, whatever we use to say "this is the parrot-specific internals the compiler has to know about" 15:53
jnthn I was pondering more a src/backend/parrot/ etc structure
pmichaud that works too.
although maybe it's just src/vm/parrot
jnthn That's better.
I wrote the last one and looked at it like "eww, long"
[particle] or rts (runtime system)
pmichaud i.e., things that really can't be "cheats" but also are vm-specific 15:54
jnthn Yeah
I'd rather we defer any re-structuring like that until we're actively working on an additional backend though.
pmichaud hmmm.... I didn't think that $*OS was a string
jnthn Oh?
oh, wrose 15:55
S02 doesn't evne name it.
pmichaud right, it's now $*DISTRO
lichtkind so nobody knows here who is lithology
pmichaud lichtkind: no, I don't. 15:56
oh, wait
might be able to find it in the mailing archives
jnthn Is that the guy who writes teh summaries?
lichtkind yes
in the blog software is no name
pmichaud lichtkind: lists.parrot.org/pipermail/parrot-d...03668.html
has the name, email address, etc. 15:57
lichtkind pmichaud: thanks, but there is a nick , no clear name :) 15:58
pmichaud there's an email address :)
echo "Who are you?" | mail [email@hidden.address] # :-) 16:00
lichtkind true :) 16:01
16:03 nihiliad joined 16:07 iblechbot joined 16:14 nadim joined
colomon rakudo: say pi.Rat(1e-10).perl 16:15
p6eval rakudo 1d4928: OUTPUT«312689/99532␤»
pmichaud > say pi
3.14159265358979
colomon ooooooo. 16:16
pugs_svn r29709 | lichtkind++ | submit 2 perl 6 talks, made and held by lichtkind
pmichaud > say e
2.71828182845905
16:16 justatheory joined
pmichaud test then commit then push :) 16:16
16:18 Trashlord joined
jnthn Yay, first pieces of Capture coming together. 16:21
Trashlord yay!
jnthn colomon: BTW...
t\spec\S32-num\roots.rakudo ................................... Failed 4/44 subt
ests
colomon: I've been seeing this since roots.t was added back.
It may be platform specific.
colomon works on mine. hmmm.... 16:22
I checked in all my changes to it...
which tests are failing? 16:23
jnthn Failed tests: 4, 6, 8, 10 16:24
If they involve NaNs or Infs, then *very* likely platform issue.
In also have abs.t: 16:25
TODO passed: 9-10, 14-15, 29-30, 34-35
And sign.t:
Failed test: 29
I may try a run on my laptop at some point though...using a newer version of the compiler on there.
colomon jnthn: I have the abs.t todo passes here, too. The issue is it's a big loop and some of the values work and some fail.
jnthn Ah, OK 16:26
np then.
colomon I tried looking into again the other day.
ng: say 0.abs.WHAT
p6eval ng 00da09: OUTPUT«Num()␤»
colomon ng: say PARROT(0)
p6eval ng 00da09: OUTPUT«Integer␤»
jnthn oh, damm
Our integer constants are being made as Parrot Integer rather than Perl 6 Int? Hm.
colomon I dunno, just thought of trying that. 16:27
ng: say PARROT(0.Int)
p6eval ng 00da09: OUTPUT«Integer␤»
colomon ng: say 4.abs.WHAT
p6eval ng 00da09: OUTPUT«Num()␤»
colomon ng: my Int $a = 3; $a++; say PARROT($a); say $a.abs.WHAT 16:28
pmichaud we might be type-mapping Float->Num, but I don't think we've done that for Integer->Int. Last time I tried that, I think it made Rakudo unbearably slow.
p6eval ng 00da09: OUTPUT«ObjectRef->Integer␤Num()␤»
jnthn colomon: In Actions.pm, there's a line
if $<integer> { make PAST::Val.new( :value($<integer>.ast) ); }
Maybe add a :returns('Int') and see if that helps.
pmichaud jnthn++
jnthn We had that in master
dalek kudo/ng: f90dfa8 | jonathan++ | (5 files):
Stub in Capture, add capture and capterm in the grammar and actions for them, and add Parcel.Capture for coercing a Parcel to a Capture (capterm is implemented in terms of this; we need it anyway for other bits).
jnthn Heh, Parcel.Capture is a step towards my (siggy here) := foo(); too :-) 16:29
That said, I ain't quite figured out yet, how on earth we know that the decl is meant to return a signature rather than a list that we need for assignment. 16:30
Oh, maybe I know how we can...
Anyway, that's not on today's hit list. :-)
pmichaud the answer would have to be that it always returns a signature, and that assignment to a signature knows how to dtrt
jnthn pmichaud: I was thinking more that we could resolve it at compile time... :-| 16:31
In the reducecheck or some such.
pmichaud maybe, but that feels wrongish to me
jnthn Why?
pmichaud because then assignment is having to do additional checks of the lhs
I think it much more likely that we'll need a way to convert Signature objects into a parcel of the things in the signature 16:32
(for other operations as well)
jnthn I was pondering making it produce a PAST node that is the list of variables that list assignment needs, but tagging it with the Perl6::Compiler::Signature, and binding knows that if it gets something on the LHS tagged with one of those it should grab that and use it instead. 16:33
We can do it the other way.
pmichaud what about something like
foo(my ($a,$b));
jnthn std: foo(my ($a,$b));
p6eval std 29709: OUTPUT«Undeclared routine:␤ 'foo' used at line 1␤ok 00:01 109m␤»
jnthn Heh
What does that mean? :)
pmichaud std: say(my ($a,$b)); 16:34
p6eval std 29709: OUTPUT«ok 00:01 107m␤»
jnthn It'd want the list of variables there anyway.
pmichaud right
but it's hard to determine that syntactically, I think.
jnthn I was meaning syntactic on the :=
dalek kudo/ng: aa4e264 | pmichaud++ | (2 files):
Add "pi" and "e" constants.
kudo/ng: a3054f5 | pmichaud++ | (5 files):
Merge branch 'ng' of [email@hidden.address] into ng
jnthn That is, it's always a list apart from in that case.
pmichaud okay, then the reason I don't like it is that we'd have to do add syntactic checks on := where they aren't currently present. 16:35
perhaps we should ask TimToady++ if he thinks that signature binding is more of a syntactic construct or a runtime-thingy.
jnthn I'm tend to prefer making static decisions when we can...
Yes, good idea. 16:36
I'd been thinking of it as a syntactic one.
But that could well be wrong.
pmichaud well, "prefer making static decisions" sounds like "optimization" to me.
jnthn Optimization but also predictability. :-)
pmichaud static-as-optimization feels different to me than static-as-specification
jnthn Sure 16:37
pmichaud ooc, is it possible to get a Signature object into a scalar?
jnthn OK, we get a ruling from TimToady++. :-)
pmichaud or to have a function that returns a signature object?
jnthn I don't see why my $x = :(...); wouldn't work. 16:38
They're "just objects" in a sense.
colomon jnthn: doesn't see to compile with :returns('Int') ? I put it after :value() ...
jnthn Error?
pmichaud jnthn: if it's possible to get a non-syntactic signature on the lhs of :=, then we'd have to handle it as a runtime thingy
jnthn colomon: You did put a comma in too? :value(...), :returns('Int')
pmichaud fn-returning-signature() := .... 16:39
jnthn pmichaud: Hmm
colomon nope, that must be it.
TimToady my brane is in sideways today due to a sinus infection, but it seems to me that a reducecheck is conservative, and can be generalized later if desired
jnthn pmichaud: Well, I was planning to make that work anyway.
pmichaud jnthn: right, in which case that part isn't syntactic :-)
jnthn pmichaud: The issue I had was more that we expect my ($a, :$b) = ... and my ($a, :$b) := ... to mean differnt things.
That is, we expect a different thing on the LHS. 16:40
pmichaud jnthn: which is why I think we expect a same thing on the LHS (a signature), and simply write Signature!STORE
for assignment
jnthn I can go with that, I just didn't fancy making every list assignment slower and much more complex.
pmichaud it shouldn't be significantly slower. 16:41
and Signature!STORE can be optimized
jnthn Which it will, because the signature will have to go look in the lexpad of its caller for all of the variables.
TimToady It's not clear to me that 'my' returns a signature
pmichaud ah, good clarification :)
jnthn TimToady: Let me take a step back a bit.
colomon > say PARROT(0)
Int
> say 0.abs.WHAT
Int()
TimToady though you still have :() =
jnthn sub foo() { return 1, :a<2>; } 16:42
TimToady returns Parcel, I think
jnthn my ($a, :$b) = foo(); # list assignment of the Parcel from foo, so $a gets 1, $b gets a Pair
pmichaud why the :? 16:43
jnthn my ($a, :$b) := foo(); # signature binding, $a gets 1, $b gets 2
pmichaud: It was to contrast with the example that followed it.
pmichaud I mean the colon in :$b ?
jnthn Named parameter.
pmichaud in which case it's not bound from a positional argument
jnthn What's parsed after my is a signature.
TimToady I'm not sure we have to support assignment to any possible signature 16:44
jnthn But....we're not doing signature binding, but list assignment there.
pmichaud okay, then your second case is wrong.
jnthn I've been uncomfortable with this area of the spec before, fwiw.
No, because in the second case, we are doing binding.
pmichaud why would :$b get the :a<2> ?
TimToady I don't see why we have to support list assignment to a fancy signature
pmichaud they have different names
jnthn pmichaud: oh gah 16:45
I mean :b<2>
Sorry
TimToady list assignment shouldn't have to worry about named parameters *at all*
16:45 masak joined
jnthn TimToady: Are you saying that a signautre that has things in it other than positionals gets them discounted, or it's an error to have an excessively complex signature there if'll moan? 16:45
TimToady yes
jnthn TimToady: OK. So
16:45 TiMBuS left
jnthn sub foo() { return 1, :b<2> } 16:46
my ($a, $b) = foo(); # fine, $a has 1, $b has a Pair
TimToady yes
jnthn my ($a, :$b) = foo(); # error?
And error when if so?
TimToady reducecheck sez "Too fancy to assign to"
pmichaud what about a signature object, as opposed to a declar? 16:47
jnthn And finally, my ($a, :$b) := foo(); # $a gets 1, $b gets 2?
TimToady binding should work consistently, modulo rw concerns 16:48
lisppaste3 colomon pasted "With the return Int patch" at paste.lisp.org/display/94909
jnthn TimToady: "consistently"?
TimToady same as parameter binding
colomon split-simple2 I've been getting. abs.t has more todo passes, great. 16:49
jnthn TimToady: OK.
pmichaud what about assignment to a signature object (that has named params)?
TimToady as in, "oops, I got a Parcel, need a Capture, so .Capture it"
16:49 Su-Shee left
TimToady how the heck to you assign to a signature object? 16:49
*do you
pmichaud fn-returning-signature() = ... ?
jnthn :($a, :$b) = 1, :b<2>;
TimToady if $sig = ... it replaces the sig
colomon basic-types.t seems to be missing its last test, and pointy.t and arity.t are both quitting early.
pmichaud if not possible, no problem.
TimToady I suspect we can just outlaw that for now 16:50
jnthn I guess the above is just a "Can not write to readonly thingy"
pmichaud whatever we do to outlaw that can also be used to outlaw the my ($a, :$b) = ... thing
TimToady we can do anything conservative we like, as long as it doesn't admit possiblities that will have to be outlawed later
pmichaud granted that reducecheck can make it a compile-time check instead of a runtime one
but we'd still need the runtime check
TimToady pmichaud: I think that's different 16:51
jnthn TimToady: The one I struggle with a bit in this area too is...
my ($a, :$b) := foo(); # works, does what's expected
:($a, :$b) := foo(); # what to do here? 16:52
Since I kinda expect them both to call some kinda !BIND method on Signature or some such.
pmichaud fwiw, current rakudo-ng plan is that infix:<:=> is a standard operator (multisub) 16:53
jnthn But IIRC, the second is meant to do, well, nothing.
TimToady sure, but it's probably declaring a $a and $b inside the sig and then throwning them away
I think that's even specced somewhere
jnthn Hmm
TimToady it's the declarator that says *where* you're installing the new symbols
jnthn I can sorta see that conceptually-ish...trying to work out how to map that to an implementation is trickier. :-)
TimToady no declarator, no install 16:54
but sigs declare new variables, not referring to externals
so it all follows
jnthn I guess.
TimToady probably the only weird thing left is actually ($a,$b) := ($b,$a) # no : on front 16:55
jnthn Hmm
"List binding"?
TimToady it's liek we need a way to promote a list of lvalues to a sig 16:56
*like
probably can be done at compile time
jnthn Again, recognized syntacticly?
TimToady but it's also got to defeat the declaring of a new $a and $b 16:57
I think so
$foo := ($b,$a) is always going to clobber $foo itself, regardless of what's in $foo
pmichaud why does that have to be recognized syntactically?
jnthn TimToady: In sub foo($a, :$b) { } I'd kinda ended up with an impl where the sig can say "here are the variables declared within me".
pmichaud ($a,$b) := ($b,$a) doesn't have to be recognized syntactically 16:58
any more than we don't have to syntactically recognize ($a,$b) = ($b,$a)
TimToady well, it would be good to know at compile time that you can't say ($a,1,$b) := ($b,$a)
certainly Perl 5 takes the lvalue checks rather seriously 16:59
and knowing something's an lvalue has got to be good info for an optimizer 17:00
jnthn TimToady: What I don't get about the "promote LHS to a signature" suggestion is that this makes it like :($a, $b) := ..., which we just said didn't update $a and $b.
TimToady it promotes to something else then
an "lvalue parcel"
pmichaud we already have lvalue parcels for list assignment, fwiw
jnthn TimToady: Or we just make :($a, $b) := ... do what IMHO is the Right Thing. 17:01
(actually update things, rather than just throw away data)
I can see it becoming an FAQ, that's all.
"Why can't I update existing variables with the return values of a function if I also want to do unpacking of arguments signature-style?" 17:02
17:03 LaVolta joined
jnthn Agree if we want to keep current semantics an "lvalue parcel" makes more sense though. 17:03
masak ng passes 4k tests!? wow!
pmichaud should be a lot more, soon -- we have constant pi and constant e working again as of about 10 minutes ago
jnthn masak: Progress!
pmichaud and I'm about to fix slices, I hope 17:04
masak \o/
jnthn \o/
colomon: Thsoe new failures are...curious. :-/ 17:05
TimToady supersede ($a, $b) := ... should make for an explicit override of an existing declaration, maybe
jnthn ah, that could work.
Maybe.
:-) 17:06
colomon they look llike they might all be seg faults
TimToady std: supersede ($a, $b) := ...
p6eval std 29709: OUTPUT«ok 00:01 109m␤»
pmichaud colomon: I've been getting those for a while now
colomon and don't have anything obvious to do with
ints
17:06 lue joined
TimToady arguably, that should complain that $a and $b are missing 17:06
std: supersede Foo
p6eval std 29709: OUTPUT«===SORRY!===␤In supersede declaration, typename 'Foo' must be predeclared (or marked as declarative with :: prefix) at /tmp/GRhHo2BAUE line 1:␤------> supersede Foo⏏<EOL>␤FAILED 00:01 105m␤»
TimToady std: supersede $foo 17:07
colomon pmichaud: okay, Ill commit this then.
p6eval std 29709: OUTPUT«ok 00:01 106m␤»
TimToady hmm
jnthn colomon: commit it, we cna triage it.
TimToady well, maybe not supersede, we're mixing up composition-time declarations with other stuff 17:08
17:09 Su-Shee joined
TimToady phenny: tell masak Note that TTAGGG is not generally rendered into amino acids, but "TTAGGG" x $n is the definition of a telomere. 17:10
phenny TimToady: I'll pass that on when masak is around.
masak TimToady: I always wondered about why you chose that sequence :)
phenny masak: 17:10Z <TimToady> tell masak Note that TTAGGG is not generally rendered into amino acids, but "TTAGGG" x $n is the definition of a telomere.
masak en.wikipedia.org/wiki/Telomere 17:11
17:11 jferrero joined 17:15 Limbic_Region joined
TimToady well, vertebrates, anyway, plus some fungussesses 17:15
colomon pmichaud, jnthn: Thought: If we're releasing this week, should we be trying to update our parrot to the latest in prep for release?
pmichaud colomon: yes
jnthn pmichaud: When are you plotting the merge to master?
pmichaud jnthn: sometime today. 17:16
jnthn
.oO( what's the masterplan? )
pmichaud: OK, cool.
TimToady I don't think Parcel should promote to Capture in a scalar 17:17
it should promote when it's used as a parameter list in a binding
pmichaud agreed, it should be Seq or remain a Parcel
TimToady er, argument list
jnthn *nod*
Agree.
I figured that was fossil.
TimToady I've been digging them out whenever I've seen them, but they're a common as trilobytes 17:18
17:19 itz joined
LaVolta 1. ok, I am here just to wish you all a happy chinese year, I hope it won't be too late :-P 17:19
pmichaud jnthn: okay, I have a (I think) role-related problem for you... testing then commit in a second 17:20
LaVolta 2. it's a bit late...already bedtime, see ya, and good luck on Perl6.
17:21 LaVolta left
lue Looks like I /join ed at the wrong time... Have no idea what's going on :/ 17:21
pmichaud lue: that's true for most of us here, I fear :)
lue I come and you're talking about supersede-ing and DNA! :O 17:23
and ng becoming master! O.O
masak lue: we've always been omnivores around here. :)
lue: 'ng' and 'master' are the two most interesting Rakudo git branches.
pmichaud jnthn: just pushed 74c800c 17:24
with that, I have: 17:25
masak lue: 'master' is the old Rakudo, from 2007 up until the January release. 'ng' is the future.
pmichaud > my @a = 5..10; say @a[2,4];
No applicable candidates found to dispatch to for 'postcircumfix:<[ ]>'
lue The Future has interrupted that developement with an important announcement, coming shortly...
pmichaud it appears that @a.'postcircumfix:<[ ]>'( parcel ) isn't finding the postcircumfix:<[ ]> method from Positional
dalek kudo/ng: 74c008c | pmichaud++ | src/builtins/Positional.pir:
Update to try to enable array slices... seems to have a dispatch
17:26
lue /o\ 17:27
jnthn pmichaud: Is the postcircumfix:<[ ]> in Seq marked :multi? 17:29
pmichaud yes.
jnthn OK.
It's not an Obvious Problme then. :-(
pmichaud .sub 'postcircumfix:<[ ]>' :method :multi(_, ['Integer'])
let me check Array, though
.sub 'postcircumfix:<[ ]>' :method :multi(_, ['Integer'])
and the one from Positional.pir
.sub 'postcircumfix:<[ ]>' :method :multi(_, _) 17:30
jnthn Hmm...is that a Parrot multi-dispatch error or a Rakudo one? 17:32
(checking)
pmichaud Parrot, likely
it's invoked from Positional.pir:172
.tailcall invocant.'postcircumfix:<[ ]>'(args :flat)
jnthn oh, our Perl6Multi emits the same error. 17:33
pmichaud: I have a nasty feeling (need to verity)... 17:35
...that the problem is that with Parrot multi subs we don't go searching up the inheritance tree. 17:36
pmichaud ...but it used to work before
(in master)
..didn't it?
checking
jnthn Let me stash what I'm working on so I can pull this and see the stack trace etc... 17:37
pmichaud oh, apparently we weren't doing it in master 17:38
i.e., there was only one postcircumfix: (in Positional), not overridden by List or Array
jnthn Yeah, that's what I suspected. 17:39
I think the options are: 17:40
1) Convert those multis to be Perl6MultiSub
17:40 meppl joined
jnthn 2) I try and get our dispatcher to handle Parrot MultiSub 17:40
pmichaud I'm fine with either #1 or #2
I'm not sure how to do either at the moment, though
is there an easy way to convert to Perl6MultiSub ? 17:41
jnthn Let me see what #2 would take.
There used to be in master.
17:41 pmurias joined
pmichaud okay. can I leave it to you to work on, then? 17:41
pugs_svn r29710 | lwall++ | [S02] attempt clarification of <a b> semantics wrt parcels and assignment, jnthn++ 17:42
pmichaud it's safe to ignore the other postcircumfix:<[ ]> candidates in Positional.pir -- at the moment I've only worked on :multi(_, _) and :multi(_, ['Integer'])
jnthn OK, and the example that should work is?
TimToady caveat implementor: I probably shouldn't be speccing while my cheekbone sinus is threatening to explode. 17:43
pmichaud my @a = 5..10; say @a[2,4]; # 79
or even
jnthn TimToady++ # thanks, will review
pmichaud my @a = 5..10; say @a[4,2]; # 97
jnthn Heh heh...you were very right you didn't want to hack on this. :-) 17:45
jnthn digs in.
lue sorry, Tim. (I once had a sinus infection that came-and-went for weeks. It ended with horse pills) 17:47
dalek kudo/ng: d71e295 | (Solomon Foster)++ | src/Perl6/Actions.pm:
Add :returns('Int') to the integer action, so that we get Ints instead of Integers.
17:49
jnthn Compiling. 17:51
If this works first time, I'll be amazed.
lue /o\ *is scared of daleks 17:52
masak lue: ours is a very kind robot, considering.
jnthn Nope. 17:53
lue Impossible! Have you _watched_ Dr. Who? Ever seen a FRIENDLY dalek!? 17:54
jnthn ng: say [ 5..10 ].[2,4]; 17:56
p6eval ng d71e29: OUTPUT«No applicable candidates found to dispatch to for 'postcircumfix:<[ ]>'␤current instr.: '!postcircumfix:<[ ]>' pc 10619 (src/builtins/Iterator.pir:25)␤»
jnthn \o/
mathw They're fine if they think you're also a dalek
jnthn pmichaud: OK, that gives a different error here, so think I maybe have got it. :-) 17:57
pmichaud: Only one problem
pmichaud: We need to do transform_to_p6opaque when we do new ['Array'] for my @a;
masak lue: I've watched Dr. Who. :) just saying there's always an exception.
mathw is watching Doctor Who right now 17:58
17:58 Su-Shee left
lue On what channel are you watching Doctor Who!? 18:01
Truth be told, I've never watched that much of The Doctor...
TimToady re pi, CORE.setting uses 3.14159_26535_89793_238, which limits the denominator to 1 quintillion for a Rat64 (not that we have those yet either) 18:02
lue That won't do. I work with quattuordecillions! 18:04
TimToady you can set up your own FatRat pi then. 18:05
masak .oO( fatrat pie?! eeew! ) 18:06
jnthn masak: I was thinking just the same!
masak :)
TimToady when the pie was opened, the rats began to sing...
lue ... and all was well. Amen.
masak doesn't have that cultural hash key 18:07
TimToady look for "four and twenty blackbirds baked in a pie"
jnthn Wow, that poem involves junctions too? 18:08
:-)
masak good thing I ate already...
jnthn Lucky you! :-/
On the upside, at least I vaguely feel like eating today.
lue And in the distance, he hath been slain, for he killed His camel, and ate His onion. Amen. 18:09
masak jnthn: oh, you didn't before? :/
jnthn masak: Yesterday my stomach was has an epic ache.
masak sorry to hear that.
we need to take good care of our developers...
jnthn I get it now and then...annoying, but not a biggie. 18:10
TimToady actually, it starts "Sing a song of sixpence, a pocket full of rye"
masak ...so that they can be properly tortured by TimToady and the spec. <cackle />
jnthn pmichaud: oh hey, I has a fix, I think.
masak read 'Sing a song of :sigspace...'
jnthn pmichaud: spectesting to ensure no collateral damage
Ironically, we probably multi-method dispatch Parrot multi-methods better than Parrot now. ;-) 18:11
lue And an @ of people came, with slashed and %ed pi.
masak lue: you should go ahead and become a blog poet.
lue he considered the #, but saw that it was a die() waiting to happen. Amen. 18:13
:D
pmichaud jnthn++ # probable fix 18:14
I'm heading off for lunch in a bit 18:15
jnthn pmichaud: Tests fine.
pmichaud: Pushed.
oh no, somebody else pushed first.
now pushed.
pmichaud: It gets into a postcircumfix method in Positional. Apparently that method does have an issue. 18:16
But it makes it there now :-)
pmichaud that's possible. I'll take it from there then.
jnthn Don't read the C patch with remaining eye. ;-)
(It's actually not that bad.)
dalek kudo/ng: d4a3bc5 | jonathan++ | src/ (3 files):
Need to make sure we create Array and Seq as p6opqaues.
18:19
kudo/ng: c11b42c | jonathan++ | src/pmc/p6 (2 files):
Teach the Rakudo method dispatcher how to walk the inehritance hierarchy when considering Parrot MultiSubs as well as Perl6MultiSub.
jnthn OK, time to go acquire nom...will continue on arg unpacking and capture bits later. :-) 18:21
lue wishes to help but doesn't know where his attention is useful. 18:27
pmurias lue: you may consider helping with writing tests 18:28
lue I'll look at that.
18:31 Su-Shee joined 18:36 uniejo joined 18:37 pochi joined 18:38 rindolf joined
pmichaud jnthn: an idea 18:38
17:56 <jnthn> pmichaud: We need to do transform_to_p6opaque when we do new ['Array'] for my @a;
how about a p6opaque_new opcode that does both in a single step?
just a thought 18:39
afk, lunch
18:39 rindolf left, rindolf joined
rindolf Hi all. 18:42
So how can I fix a Rakudo/Parrot bug? Can someone assign one to me?
18:42 mssm left
pugs_svn r29711 | colomon++ | [t/spec] Unfudge todo tests which now work. 18:43
masak rindolf: things are a bit stormy right now, with the upcoming merge and all. 18:44
rindolf masak: ah.
masak rindolf: in general, it's a very welcome question, but right now it's mostly pmichaud and jnthn doing stuff.
not impossible to keep up, though. :)
I try, and colomon seems to succeed.
lue I'm trying to keep up with them, and I've been here awhile! (it's that dalek that puts me behind) 18:45
colomon masak: A lot of it is selective ignoring of things that are way over my head... 18:46
masak colomon: that's actually a good tip. I should do that more often. :P
jnthn pmichaud: That's a fine idea. 18:49
masak: It helps. :-)
masak: I tried to do that with laziness. :-)
(but ended up reading the impl anyway :-)) 18:50
masak heh :)
jnthn masak: How's enums? Any blockers? 18:51
lichtkind masak: hello, how is von doing?
lue where can I find where spectests that need to be written are?
masak jnthn: not tried yet. I'll give it a shot soon today.
jnthn lue: svn.pugscode.org/pugs/t/spec/TODO 18:52
masak lichtkind: who's 'von'?
-Ovon
lichtkind masak: ahh i mean nov
haha
masak lichtkind: it's a bit of a sitting duck right now, I guess.
lichtkind: I'm a bit of a neglecting parent...
18:53 mssm joined
jnthn hides all the guns 18:53
lue gave jnthn a faulty gun lock 18:56
pugs_svn r29712 | lichtkind++ | updated syntax in talk to recent spec 18:57
lichtkind masak: don't worry i care about tpf perl 6 wiki until it works :)
masak lichtkind: I'm glad I have you to pester me like I pester the Rakudo devs. :) 18:58
18:58 jaldhar joined
lichtkind masak: im good at annoying people ask anyone :) 18:58
lue My talent is confusion. (ask me about time travel) 18:59
rindolf rakudo: "Hello".length
p6eval rakudo 1d4928: OUTPUT«Method 'length' not found for invocant of class 'Str'␤in Main (file src/gen_setting.pm, line 324)␤»
lichtkind lue: your a time traveler too?
masak rindolf: 'length' for Str is spelled 'chars' 19:00
lue almost. I have yet to genetically reprogram myself into a 4D person.
Then I can walk through time as I please.
masak rindolf: in general, 'length' is a taboo word in Perl 6.
lichtkind lue: i am 11D :)
rindolf masak: ah.
lue O.O ubbuhbubhbuhbhbuuuhhhbhbhhuuhhbbuh... 19:01
lichtkind lue: keep cool averybody is 11D :) 19:05
just most people dont use it :)
masak do ranges and <a b c> constructions flatten in enums. for example in `enum Rank (2..9, <J Q K A>);`?
colomon is actually 13EEE
lue I can, however, travel through the WSoGMM dimensions, but I'm right now in control of only 3 base dimensions.
:)
Hang on, going to WSoGMM dimension 65536. 19:06
lue takes his laptop with him.
mberends hope it's a 16 bit machine 19:07
lue what, my TARDIS? it's 1024-bit.
well, not my TARDIS... 19:08
jnthn masak: Yes, I belive so, but everything in there should be constant.
masak yes, because of the time it's eval'ed.
jnthn Right. 19:09
lue Well, I helped reconfigure The Doctor's TARDIS to travel through WSoGMM dimensions (alternate realities, according to him)
He doesn't seem to like it...
ng: say warn('hello!'); 19:10
p6eval ng c11b42: OUTPUT«hello!␤Null PMC access in type()␤current instr.: '_block14' pc 29 (EVAL_1:0)␤»
colomon ng: say PARROT(1); say PARROT(-1); 19:11
p6eval ng c11b42: OUTPUT«Int␤Integer␤»
lue *raise eyebrow smiley* 19:12
colomon ng: my $a = 1; say PARROT($a); say PARROT(-$a) 19:13
p6eval ng c11b42: OUTPUT«ObjectRef->Int␤Integer␤»
lue ng: say PARROT(1)==Int; 19:14
p6eval ng c11b42: OUTPUT«Use of type object as value␤current instr.: 'perl6;Perl6Exception;throw' pc 13848 (src/builtins/Associative.pir:118)␤»
lue ng: say PARROT(1).WHAT==Int;
p6eval ng c11b42: OUTPUT«Use of type object as value␤current instr.: 'perl6;Perl6Exception;throw' pc 13848 (src/builtins/Associative.pir:118)␤»
lue ng: say PARROT(1).WHAT~~Int;
p6eval ng c11b42: OUTPUT«0␤»
colomon ng: say PARROT(1).WHAT
p6eval ng c11b42: OUTPUT«Str()␤»
lue ah.
ng: say PARROT(1)~~Int;
p6eval ng c11b42: OUTPUT«0␤»
jnthn lue: PARROT is just a debugging function that gives a string describing the underlying data type of something. 19:15
ng: say 1 ~~ Int
p6eval ng c11b42: OUTPUT«1␤»
jnthn :-)
colomon looks like prefix:<-> always returns a Num?
lue aaah. (WSoGMM Dimension 65536 is warping my brain a little)
colomon pir::box__PN(pir::neg__NN($a))
jnthn colomon: Probably want an overload for Int. 19:16
colomon trying that now.
masak: the other problem with following pmichaud and jnthn when they both get busy is the rest of my life seems to be running in slow motion... 19:17
19:18 jackyf joined
colomon > say PARROT(-1) 19:18
Ambiguous dispatch to multi 'prefix:<->'. Ambiguous candidates had signatures:
:(Int $a)
jnthn: you rock!!!!!
Of course, now it's a bug in PIR and I'm not sure how to handle it: 19:19
multi sub prefix:<->(Int $a) {
Q:PIR {
$P0 = find_lex '$a'
$N0 = $P0
$N0 = neg $N0
%r = '!upgrade_to_num_if_needed'($N0)
}
}
Looks like upgrade_to_num_if_needed must be the culprit? 19:21
ng: say 1!upgrade_to_num_if_needed 19:22
p6eval ng c11b42: OUTPUT«Method '!upgrade_to_num_if_needed' not found for invocant of class 'Int'␤current instr.: '_block14' pc 29 (EVAL_1:0)␤»
colomon ng: say (1.Num)!upgrade_to_num_if_needed
p6eval ng c11b42: OUTPUT«Method '!upgrade_to_num_if_needed' not found for invocant of class 'Num'␤current instr.: '_block14' pc 29 (EVAL_1:0)␤»
jnthn I think it's meant to be a sub rather than a method 19:23
colomon right.
ng: say !upgrade_to_num_if_needed(1)
p6eval ng c11b42: OUTPUT«0␤»
colomon errrrr...
jnthn wtf
colomon ng: say !upgrade_to_num_if_needed(1.Num)
p6eval ng c11b42: OUTPUT«0␤»
jnthn ng: say &upgrade_to_num_if_needed(1)
colomon maybe can only be called from PIR?
p6eval ng c11b42: OUTPUT«Symbol '&upgrade_to_num_if_needed' not predeclared in <anonymous>␤current instr.: 'perl6;PCT;HLLCompiler;panic' pc 137 (src/PCT/HLLCompiler.pir:101)␤»
jnthn ng: say upgrade_to_num_if_needed(1) 19:24
p6eval ng c11b42: OUTPUT«1␤»
jnthn ng: say upgrade_to_num_if_needed(1).WHAT
p6eval ng c11b42: OUTPUT«Int()␤»
jnthn colomon: Replace the ! with an &
Though I think that sub is...leaking. :-)
But it'll probably fix the immediate problem.
colomon were you responsible for the Ambiguous dispatch to multi 'prefix:<->'. Ambiguous candidates had signatures...
error? 19:25
because that's a thing of beauty...
jnthn Yes
colomon jnthn++ 19:26
jnthn The one I'd like to do in the future is for when you get a failed dispatch, it showhow could show how the candidates failed to match.
colomon +1
jnthn But it's kinda hard to do.
Well
colomon switching to & doesn't actually help
jnthn Oh. :-/
colomon ng: say PARROT(upgrade_to_num_if_needed(1)); 19:27
p6eval ng c11b42: OUTPUT«Integer␤»
jnthn Look up the sub - where is it defined?
colomon cheat/int-ops.pir
$I0 = test
.return ($I0)
jnthn The upgrade_to_num_if_needed one?
colomon yes
er, wait.
there's also a version of that function in Int.pm 19:28
jnthn Ah
That'll be the interesting one, is suspect
Is it marked as "our"?
colomon the two lines I posted are still how it converts to Int/Integer.
yes.
jnthn Hmm
Sounds like something is incomplete-ish there.
I'm pondering that it may be worth a refactor to make it a private method though. 19:29
Then it's not going to pollute the namespace.
colomon ng: say PARROT(1+3) 19:31
p6eval ng c11b42: OUTPUT«Integer␤»
colomon So how do you return an actual Int from PIR code? 19:32
right now, almost any operator you use on an Int will give you back an Integer.
Also, it seems like we need some sort of tests for this, but I'm not clear on how to do it -- it would be very Rakudo-specific. 19:34
afk # need to run errands. 19:36
jnthn oops, sorry, got disctracted by the latest Gas Princess news story
colomon: The issue is that making them Rakudo Ints all the way through gets kinda expensive, so we've mostly been able to get away with doing that in master. :-/ 19:37
As pmichaud mentioned earlier, it's most a performance issue.
colomon jnthn: Ah. 19:38
jnthn And I can tell you how to make an Int, sure 19:39
But I'm not sure we should be scattering it all over the codebase...
colomon jnthn: we wouldn't, we'd be putting it all in upgrade_to_num_if_needed 19:40
jnthn (If we decide we'll take the hit and go with our higher-level Int anyway, there's a way to ask Parrot to do it for us, iirc, too.
colomon but if it will kill performance... I can just kill the "is the result of that operation an Int" tests and get on with things. I dunno.
jnthn colomon: Well, true.
colomon anyway, I do need to run at the moment.
ttyl 19:41
jnthn OK, catch you later
lue is back from WSoGMM Dimension 65536 (he should fix his pan-dimensional wireless) 19:44
This line looks interesting (from t/spec TODO): * (r28208, r28210, r28213, r28215) Temporal updates 19:48
masak 's ears perk up 19:49
lue: I was finalizing a large-ish Temporal overhaul in November. never quite got it finished. it's still on github, though. 19:50
pugs_svn r29713 | lwall++ | [S02] list all the scope declarators in one spot 19:51
r29713 | further distinguish parcels bound to sigs from those bound to parameters
r29713 | some ideas on how to handle the allomorphism of literals more dwimmily
lue Just the Temporal part looked... interesting (especially seeing time travel's on the mind right now)
masak Temporal needs a lot of love. I remember focusing on the constructor, but things like arithmetic would be nice to have, too.
I believe it's a prime case where Perl 6 can manage to feel 'just right' and attract a lot of people. 19:52
handling time is very central in many apps.
oh well, with a bit of luck I'll get to have another look at it before Rakudo *.
pugs_svn r29714 | lwall++ | [S02] Rat.perl does / notation, actually 19:53
lue What exactly is the full potential of Temporal { >:) }
masak lue: right now, you mean? 19:54
lue: the spec has the details. S32/Tempotal 19:55
lue alrighty. I'll look, and see what I can do with it... [evil laugh]
masak lue++ 19:56
19:57 Limbic_Region left
lue It seems to support multiple calendars. Is this actually implemented yet? 19:58
masak no. 19:59
TimToady well, as far as I'm concerned, the first thing to do to all the Temporal type names is s/Temporal::/
masak I agree fully.
lue Perl6: the only language to worry about what calendar you use.
masak I'd prefer if Temporal::DateTime was just Time.
TimToady that works too
masak lue: no, Java does that as well.
lue: I'm not saying it's a good idea, just that Perl 6 isn't alone in doing it. :)
TimToady and use O'clock for the time of day :)
masak hides TimToady 20:00
anyway...
lue Date, by the way, is really just further group of Time.
I really don't know why we separate it as a different thing. :)
TimToady it's just a civil time with less precision than Time 20:01
masak Ruby calls it Time, even though it contains a date as well.
TimToady in p6, we can has Time == civil time
masak it seems to work for them.
TimToady Instant means atomic time
lue is looking up strange & unusual calendars
masak I remember having a longish discussion about DateTime/Time with mberends++ late last year.
maybe two, actually.
TimToady O'clocks are actually durations from midnight 20:02
(relative to a timezone) 20:03
masak is the need for such a class common?
I'm somewhat put off by that apostrophe... :/
TimToady but anything common enough to be specced doesn't want to fall into the Give::Everything::A::Long::Name trap 20:04
oh, O'clock is a joke
masak exactly.
oh phew.
lue Such as Temporal::DateTime::Format::Western::Oclock
:)
TimToady but think about 3.O'clock.pm :)
masak :) 20:05
TimToady If you're gonna use Oclock, I'd rather have the apostrophe :)
lue ooh, we should support the Darian calendar!
masak if &foo returns a list of things, and I call foo in the RHS of a scalar assignment, does the whole list end up in the scalar?
TimToady ends up a Seq 20:06
masak right, but the whole Seq ends up in the scalar, right?
TimToady sure
masak quite unline in Perl 5.
where it would just spill over.
TimToady unlike Perl, we don't throw info away willy nilly
Perl 5
masak right.
just checking.
I'm thinking whether to repeat pmichaud++'s naughty idea of making the PGE::Match object return a list of a lot of things, not just the object created. 20:07
TimToady scalar assignment is more or less the same as binding to a scalar in type semantics, as far as the argument is contextualized
masak it would break all locations in my own code where I put the new object in a scalar. 20:08
TimToady well, technically, a Match is supposed to behave more like a Capture than a Parcel
masak doesn't help me very much, I'm afraid. 20:09
TimToady a common failing wrt retroprojects :P
masak TimToady: re recent spec commit: does 'anon' really introduce a name, even one that isn't stored anywhere? I thought introduce a name was what 'anon' wasn't doing. 20:10
TimToady colomon: see latest change to S02 wrt allomorphism of rat literals
lue <tone type="mumble">I wonder what the P6 calendar would be (as a novelty of course)</tone>
masak lue: centerfold pictures of sexy operators? :P 20:11
TimToady s/change/changes/
jnthn masak: Just because something knows its name doesn't mean it has to be installed anywhere under that name.
lue I mean a calendar, like Gregorian, Hebrew...
jnthn It's like if I take a secret vacation. None of you can find me, but I still know my name. :-)
masak :) 20:12
lue pugs: say 16<16.D4>;
p6eval pugs: OUTPUT«*** Odd number of elements found where hash expected: VInt 16␤ at /tmp/JRyucczwcs line 1, column 5-14␤»
lue :(
TimToady need :
lue pugs: say :16<16.D4>;
p6eval pugs: OUTPUT«22.828125␤»
masak jnthn: but what is the name of an anon sub or role or class?
lue just realized. (Wow, big decimal)
TimToady std: anon $myname = 42; 20:13
p6eval std 29713: OUTPUT«ok 00:01 108m␤»
lue In my Hexcalendar draft, with 16 months, each month will have 22.828125 (0x16.D4) days :D
TimToady std: my $sub = anon sub Myself {...}
p6eval std 29713: OUTPUT«ok 00:01 107m␤»
jnthn masak: If you write anon sub marine() { ... } then it's name is marine. 20:14
TimToady std: my $sub = anon sub myself {...}; myself();
p6eval std 29713: OUTPUT«Undeclared routine:␤ 'myself' used at line 1␤ok 00:01 107m␤»
masak jnthn: the spec only contains examples of 'anon' without the name. I guess that's what threw me off. 20:15
jnthn Ah, OK 20:16
masak so it's a way to make an anonymous recursive routine, for example. or an anon role which contains references typed to itself. 20:18
pugs_svn r29715 | lwall++ | [S02] clarify that anon allows a name but doesn't install it for jnthn++
TimToady no, it would not work for recursion
use $?ROUTINE for that
masak ok.
right, it would not work for recursion because the call is run-time, and then the name is gone. 20:19
TimToady it's really for doc and errors
the name is in the object itself, if it cares
or you can't give run-time error messages
(with the name) 20:20
jnthn rakudo: [].ACCEPTS([])
TimToady the name is not in the symbol table even at runtime
p6eval rakudo 1d4928: ( no output )
jnthn ng: [].ACCEPTS([])
p6eval ng c11b42: OUTPUT«sh: ./perl6: No such file or directory␤»
jnthn ng: [].ACCEPTS([])
p6eval ng c11b42: OUTPUT«sh: ./perl6: No such file or directory␤»
TimToady see myself above
jnthn tssk
ah
TimToady the name is not in the symbol table even at compile time, I meant
lichtkind will there be a »ö« operator? 20:21
TimToady if there's an infix:<ö> operator, sure 20:22
jnthn lichtkind: If you write a ö one, yes.
lichtkind thats for shure
but i ment a complete »ö«
araujo happy new year!
lichtkind :) 20:23
TimToady we don't want people overriding metaoperators
jnthn If you met a metaoperator, you want to know how it's going to operate. 20:24
TimToady anything that looks like a hyperoperator should be derived from the base operator by the standard metaop
jnthn \o/
> our sub foo([$head, *@tail]) { say $head; say @tail.perl; }
> my @array = 1,2,3,4; foo(@array);
1
[2, 3, 4]
20:24 nbrown left
TimToady you could define a term:<»ö«> if you like though 20:24
masak araujo: 新年快樂!
TimToady well, technically you want a *$head 20:25
araujo masak, :D
TimToady or an initial (1,2,3) won't flatten
20:25 nbrown joined
jnthn TimToady: ? 20:26
20:26 orafu joined
jnthn TimToady: Inside it's just a subsignature, no? 20:26
TimToady: The capture that's made has the array flattened out into it.
TimToady oh, didn't see the []
jnthn :-)
TimToady that's okay then
jnthn Phew!
:-)
You had me worried then. :-P
lue rakudo: say hex(42); 20:27
TimToady though it'd work without the [] if you use *$
p6eval rakudo 1d4928: OUTPUT«Could not find non-existent sub hex␤in Main (file src/gen_setting.pm, line 324)␤»
jnthn TimToady: Sure. :-)
TimToady and then you could take foo(@a,@b)
which won't work with yours
lue rakudo: say hex("42");
p6eval rakudo 1d4928: OUTPUT«Could not find non-existent sub hex␤in Main (file src/gen_setting.pm, line 324)␤»
lue D:
jnthn TimToady: Yes, true. 20:28
I guess it's all about what you want to accept. :-)
lue how do you convert _to_ a hex number? I know from, but not to... 20:29
TimToady .fmt('%x')
lue rakudo: say 52.fmt('%x');
p6eval rakudo 1d4928: OUTPUT«34␤»
lue :D
TimToady ng: say 52.fmt('%x') 20:30
lue ng: say :16<16.D4/4>
p6eval ng c11b42: OUTPUT«Could not find non-existent sub &sprintf␤current instr.: 'perl6;Any;fmt' pc 270601 (src/gen/core.pir:23916)␤»
ng c11b42: OUTPUT«Confused at line 1, near "say :16<16"␤current instr.: 'perl6;HLL;Grammar;panic' pc 500 (src/stage0/HLL-s0.pir:328)␤»
jnthn rakudo: say "I'm only {24.fmt('%x')}!"
TimToady aww
p6eval rakudo 1d4928: OUTPUT«I'm only 18!␤»
jnthn \o/
Hex. Shaving off the years.
TimToady no beer for you
lue ng: say :16<(16.D4/4)>
jnthn TimToady: Huh?!
p6eval ng c11b42: OUTPUT«Confused at line 1, near "say :16<(1"␤current instr.: 'perl6;HLL;Grammar;panic' pc 500 (src/stage0/HLL-s0.pir:328)␤»
jnthn TimToady: Oh, it's 21 over there, ain't it. :-|
lue apparently, arithmetic in :16 is not allowed :/ 20:31
jnthn That said, I do remember when I was in Chicago when I *was* 21, and as I reached for my ID the guy was like "oh, you're clearly over 21" :-)
TimToady I got carded once when I was about 40
don't think would happen now though 20:32
dalek kudo/ng: 04a857f | jonathan++ | src/builtins/ (2 files):
Get unpacking of positional arguments working again.
20:33
lue ng: say 0x16.D4;
p6eval ng c11b42: OUTPUT«Method 'D4' not found for invocant of class 'Int'␤current instr.: '_block14' pc 29 (EVAL_1:0)␤»
lue rakudo: say 0x16.D4;
p6eval rakudo 1d4928: OUTPUT«Method 'D4' not found for invocant of class 'Int'␤in Main (file src/gen_setting.pm, line 324)␤»
TimToady no
lue pugs: say 0x16.D4;
p6eval pugs: OUTPUT«*** No such method in class Int: "&D4"␤ at /tmp/UDKLs9zbPy line 1, column 5-12␤»
TimToady have to use : form for that
otherwise too ambig with methods
lue :/ I want to do hex arithmetic with decimals, thought that would work. 20:34
TimToady what if you have a D4 method you want to call?
lue why would you name a method D4? shorthand for "divide-by-4"? :) 20:35
TimToady which reminds me, we should put a deadbeef method into Num :)
beats me, I'm just the language designer; I don't tell people how to use it
lue ng: say 0xdeadbeef;
p6eval ng c11b42: OUTPUT«3735928559␤» 20:36
lue ng: say 0xc0ffee;
TimToady ng: say 0xdeadbeef.deadbeef
p6eval ng c11b42: OUTPUT«12648430␤»
ng c11b42: OUTPUT«Method 'deadbeef' not found for invocant of class 'Int'␤current instr.: '_block14' pc 29 (EVAL_1:0)␤»
lue what would the deadbeef method do?
TimToady say Mu
lue moo
TimToady ng: say 0xdeadbeef.?deadbeef 20:37
p6eval ng c11b42: ( no output )
TimToady ng: my $result = 0xdeadbeef.?deadbeef; say $result
p6eval ng c11b42: ( no output )
TimToady rakudo: my $result = 0xdeadbeef.?deadbeef; say $result
p6eval rakudo 1d4928: OUTPUT«Undefined value returned by invocation of undefined method␤␤»
TimToady another case where rakudo returns a Failure that should probably just return Nil 20:38
jnthn TimToady: Really?
TimToady I told it the call was optional
jnthn Hmm...true. 20:39
lue ng: say 1 and 1; #ANFSCD
p6eval ng c11b42: OUTPUT«1␤»
lue ng: say 1 or 1; #ANFSCD
p6eval ng c11b42: OUTPUT«1␤»
TimToady rakudo: my $result = 0xdeadbeef.*deadbeef; say $result
p6eval rakudo 1d4928: OUTPUT«␤»
masak rakudo: my $a; say ($a.?foo).WHAT
p6eval rakudo 1d4928: OUTPUT«Failure()␤»
lue ng: say 1 xor 1;
p6eval ng c11b42: OUTPUT«1␤»
masak submits rakudobug
lue ng: say 1 nor 1;
p6eval ng c11b42: OUTPUT«Confused at line 1, near "say 1 nor "␤current instr.: 'perl6;HLL;Grammar;panic' pc 500 (src/stage0/HLL-s0.pir:328)␤»
jnthn The failure is easy to distinguish though. If I expected no results, it's harder to distinguish that from "nothing was called".
That is, a method that just did return; would return Nil too, no?
lue ng: say 1 and 1; say 1 or 1; say 1 xor 1; say 1 nand 1; say 1 nor 1; say 1 xnor 1; #simple test of implemented logic. 20:40
p6eval ng c11b42: OUTPUT«Confused at line 1, near "say 1 nand"␤current instr.: 'perl6;HLL;Grammar;panic' pc 500 (src/stage0/HLL-s0.pir:328)␤»
TimToady sure, though we could distinguish those in slice context, presumably
jnthn Or if you were interesteed in the failure I guess use . and a try/CATCH
Since presumably you want to do something on the failure anyway. 20:41
TimToady I prefer exceptions to be reserved for unexpected things
jnthn Yeah, good point.
TimToady use of Failure as a normal return value is a design smell
jnthn OK, we'll Nil it. :-)
.oO( TimToady 1 - Nil jnthn
20:42 sg__ joined
TimToady basically, .* and by extension .? should return something sliceable to get the number of successful returns as subparcels 20:42
jnthn Parcel of Parcels?
TimToady presumably
jnthn wfm
masak oh, that's an even better explanation.
it should be Nil because it's an empty list. 20:43
parallel to quantifier ? returning an empty list upon no match.
TimToady Parcel(Nil) is a real returned Nil, whille Nil is no parcels
masak: nodnod
masak likes consistency
TimToady I said it just for you :)
masak awww. you shouldn't have. :) 20:44
TimToady okay, we're both lousy liars.
lue you fooled me
masak lousy + epsilon, then. 20:45
TimToady OHNOES over the epsilon infestation
masak wishing epsilon could just go to zero already, and stay there. 20:46
TimToady the next best thing to being zero... 20:47
masak nevermind, it's negligible anyway. 20:48
jnthn: I'll see what I can come up with wrt anon enums. 20:49
food &
TimToady only for continuous functions; fortunately, Heisenberg seems to have solve that for the physical world, so that physicists can cancel their dx's and dy's
*solved
masak Heisenberg++ 20:50
20:50 masak left
lue are nand, nor, and xnor useful operators? You can emulate them with a bunch of and/or/xor commands, but... 20:52
jnthn lue: Given that you can easily define new operators in Perl 6 anyway, it'd be easy enough to pop such things in a library. 20:53
use Logical::Extras;
:-)
TimToady rakudo: say True !and True 20:55
p6eval rakudo 1d4928: OUTPUT«Confused at line 10, near "!and True"␤in Main (file <unknown>, line <unknown>)␤»
TimToady rakudo: say True !&& True
p6eval rakudo 1d4928: OUTPUT«Confused at line 10, near "!&& True"␤in Main (file <unknown>, line <unknown>)␤»
TimToady rakudo: say True !?& True
p6eval rakudo 1d4928: OUTPUT«Confused at line 10, near "!?& True"␤in Main (file <unknown>, line <unknown>)␤»
quietfanatic rakudo: sub infix:<nand> {not $^a and $^b}; say 1 nand 1
p6eval rakudo 1d4928: OUTPUT«0␤»
TimToady anyway, the ! metop is supposed to get you that already 20:56
*metaop
dalek kudo/ng: df72c91 | jonathan++ | src/ (3 files):
Unpacking of hashes works, and objects nearly works, once I fix attribute introspection.
quietfanatic perl6: say 1 !and 1
jnthn std: say True !?& True
p6eval elf 29715: OUTPUT«Parse error in: /tmp/NQQIQ7Z0hx␤panic at line 1 column 10 (pos 10): Only boolean infix operators may be negated␤WHERE: say 1 !and 1␤WHERE: /\<-- HERE␤ STD_red/prelude.rb:99:in `panic'␤ (eval):8:in `__infix_prefix_meta_operator_4861890'␤ STD_red/prelude.rb:406:in `block
..…
..pugs: OUTPUT«*** ␤ Unexpected "!"␤ expecting operator, ":" or ","␤ at /tmp/feA87eDX0z line 1, column 7␤»
..rakudo 1d4928: OUTPUT«Confused at line 10, near "!and 1"␤in Main (file <unknown>, line <unknown>)␤»
std 29715: OUTPUT«===SORRY!===␤Can't negate ?& because multiplicative operators are not iffy enough at /tmp/LMRD0Ruyjt line 1:␤------> say True !?&⏏ True␤FAILED 00:01 107m␤»
jnthn std: say True !and True
p6eval std 29715: OUTPUT«===SORRY!===␤Can't negate and because loose and operators are not iffy enough at /tmp/DsfAcMcVLH line 1:␤------> say True !and⏏ True␤FAILED 00:01 105m␤»
jnthn std: say True !&& True
p6eval std 29715: OUTPUT«===SORRY!===␤Can't negate && because tight and operators are not iffy enough at /tmp/1iq6TlwJjH line 1:␤------> say True !&&⏏ True␤FAILED 00:01 105m␤» 20:57
TimToady well, that's suboptimal :)
jnthn :-)
quietfanatic Is it because they short-circuit?
jnthn I think ng may well generate 'em...
TimToady ng: say 1 !&& 1
p6eval ng 04a857: OUTPUT«Confused at line 1, near "say 1 !&& "␤current instr.: 'perl6;HLL;Grammar;panic' pc 500 (src/stage0/HLL-s0.pir:328)␤»
jnthn ng: say True !?& True
p6eval ng 04a857: OUTPUT«Confused at line 1, near "say True !"␤current instr.: 'perl6;HLL;Grammar;panic' pc 500 (src/stage0/HLL-s0.pir:328)␤»
jnthn Oh, no. :-/
Maybe op= that I was thinking of.
TimToady we shouldn't generate on spec, mostly we should just do higher-order function calls 20:58
20:58 rindolf left
TimToady funny that % is considered iffy enough, but && isn't 20:59
21:02 snarkyboojum left
jnthn std: sub foo(|$capt) { }; 21:05
p6eval std 29715: OUTPUT«ok 00:01 106m␤»
jnthn std: sub foo(|$capt, $another_arg) { };
p6eval std 29715: OUTPUT«===SORRY!===␤Can't put required parameter after variadic parameters at /tmp/F9HaLx8val line 1:␤------> sub foo(|$capt, $another_arg⏏) { };␤ expecting any of:␤ constraint␤ parameter␤ trait␤FAILED 00:02 106m␤»
jnthn std: sub foo($blah, |$capt) { };
p6eval std 29715: OUTPUT«ok 00:01 106m␤»
jnthn TimToady: Is that last one also an error (that is, it's everything into the capture or nothing)?
std: sub foo(|$capt ($a, $b, :$c)) { } 21:06
p6eval std 29715: OUTPUT«ok 00:01 106m␤»
jnthn std: sub foo(|$capt :($a, $b, :$c)) { }
p6eval std 29715: OUTPUT«ok 00:01 106m␤»
jnthn And you unpack with a signature after it if you want both?
ash__ do grammars currently contain any mechanism for setting precedence? I know nqp has one, but i was wondering if normal grammars do
jnthn iiuc, we "promote" that signature to be the one considered by MMD too.
21:07 k23z__ joined
jnthn ash__: In Rakudo, you'd be able to inherit from HLL::Grammar I guess. 21:10
TimToady no, | is supposed to snapshot the current CaptureCursor, so you can have params before that advance the cursor 21:11
jnthn ash__: But that's not a "standard Perl 6" solution.
ash__ i suppose with MMD on a grammar you can control precedence in a way... is that how your supposed to do it?
cognominal reading js stuff, I note that for a function C<fun>, there is a fun.toString() that returns its source. Is the equivalent &fun.perl considered for Perl 6?
TimToady I suppose we could allow params after too if | is considered a zero-width parameter
jnthn TimToady: Ah, OK...I'd thought only one was allowed. :-/ 21:12
That was, it was an "all or nothing" thing.
Is there a use-case for snapshotting it part way through?
TimToady we have to have the ability to have multiple CaptureCursors anyway
jnthn It's...rather awkward from my current standpoint. :-/
Partly because CaptureCursor got invented after I did a huge overhaul of the binder. :-( 21:13
.oO( All of which would matter less to me if I didn't have a long overdue grant to wrap up that requires me to do |$args )
21:16
TimToady: The "all or nothing" was coming from current spec, FWIW: 21:19
It is allowed to rebind the parameters within the signature, but
only as a subsignature of the capture argument:
sub compare (|$args (Num $x, Num $y --> Bool)) { ... }
(from S06)
TimToady in theory, CaptureCursors would make that trivial
and also enable the correct binding semantics for grep etc
where correct means "non-introspectively" 21:20
jnthn I still don't quite get what such an invocation looks like, though.
If I have { $^n < 100 } for example 21:21
And I'm writing grep 21:22
If I have this in &condition, for example
What does the invocation look like?
&condition(|@list) would give "too many arguments", presumably.
TimToady that's what Pm-19 was all about 21:23
21:23 jackyf left
TimToady though it's only an approximation 21:23
but basically we have a way of binding that the incoming cursor knows that it's a submatch, and returns a new cursor somehow 21:24
you can tell how many things were bound by comparing before/after on cursors
ruoso and I were discussing this the other day too 21:25
irclog.perlgeek.de/search.pl?channe...tureCursor 21:27
I should probably update Pm-19 with something in terms of CaptureCursor 21:29
jnthn TimToady: That'd be helpful 21:30
TimToady: Yes, I was there watching that discussion as it happened too. :-)
I even chimed in now and then...
ash__ wouldn't some sort of precedence mechanism be useful in a grammar? 21:31
jnthn ash__: Depends what you were parsing. ;-)
ash__ well, if you wanted to make a grammar tool for say perl 6 you'd need one 21:32
jnthn Right.
TimToady what do you mean by 'grammar tool'? 21:33
ash__ something to parse the perl 6 grammar, so nqp or perl 6 itself would be an example i'd reference
TimToady um, what do you think it's doing now?
ash__ not sure, thats why i am asking 21:34
TimToady STD.pm already uses operator precedence to parse Perl 6
jnthn TimToady: I think ash__ is asking if, when writing a grammar for some other language in Perl 6, if there'd be a way to re-use the operator precedence parsing mechanism as found in STD.
TimToady sure, but somewhere you have to have a bottom-up parser installed in your grammar that can make use of it 21:35
ash__ i just can't form proper questions, thanks jnthn :p
TimToady that's EXPR in STD
precedence is just annotations on subrules that function as a lexer 21:36
any bottom-up parser or parser-generator could examine those precedence annotations and do something reasonable with 'em
though a parser-generator isn't very flexible 21:37
which is why STD doesn't
ash__ how does EXPR know the precedence? is it hard coded into it? (looking at it now, but its a bit large) 21:38
jnthn ash__: It's declared along with the operators. 21:39
TimToady it's currently set by <O()> assertions in the respective operator rules
jnthn token prefix:sym<+>
{ <sym> <O(|%symbolic_unary)> }
ash__ okay 21:40
TimToady usually by reference to a set of predefined precedence hashes defined earlier
colomon hey, how did range.t break while I was out? :\
jnthn If you look up %symbolic_unary near the top of STD, you'll see it. :-)
colomon: Not afaik. :-/
colomon oh, it's another crash.
jnthn colomon: oops, missed the "how"
colomon never mind, then.
jnthn Oh, roaming segv. :-|
colomon: Do you get one on index.t too?
colomon not this time, but I've been seeing that one about 2/3rds of the time. 21:41
TimToady ash__: and metaoperators either pass through the precedence of the base operator, or impose a new precedence of their own
21:43 hercynium joined, uniejo left 21:44 uniejo joined
TimToady most parser generators would have difficulty dealing with such dynamic precedence, which is why we stick with simple operator precedence. 21:44
ash__ so, if you defined 2 infix ops like: infix:<£> (Int $a, Int $b) {...} and infix:<∞> (Int $a, Int $b) {...} and did 1 £ 3 ∞ 6 would that be... left to right?
TimToady and because parser generators tend to give lousy error messages 21:45
ash__ or would that throw an error?
TimToady the default is addition prec, which is left associative 21:46
see also S06:1791 21:47
21:48 hercynium left
ash__ ah, okay so you can set it via the is tighter/is looser/is equiv 21:49
colomon jnthn: I think I'm going to revert the change that made a Int constant an Int instead of an Integer.
jnthn colomon: It's causing other issues? 21:50
fwiw, it caused no new failures here... 21:51
colomon jnthn: It just seems like we should be consistent (somewhat) and if most Int operations are going to return Integers, there's no sense in making one exception to the rule.
jnthn Yeah, good point.
TimToady ash__: most of the operator definitions in STD don't actually belong there, and will eventually move to CORE
ash__ CORE is the default settings, right? 21:52
TimToady yes
CORE.setting has stubs in the current STD directory
mostly to declare known type names, currently 21:53
STD implements the setting as an outer lexical scope, though rakudo hasn't got there yet
ash__ alright, that makes sense, thanks for the info, CORE.setting is pretty helpful actually 21:54
pugs_svn r29716 | colomon++ | [t/spec] Remove the 10 abs tests which were tripping up ng, in a fashion which makes them easy to add back in the future. 22:02
ash__ is Num's constant pi correct in CORE.setting? didn't it get changed into a rat? 22:03
colomon ng: say pi.WHAT 22:05
p6eval ng df72c9: OUTPUT«Num()␤»
ash__ pugs commit r29714 22:07
just asking
colomon ash__: A Rat64 that would require more than 64 bits of storage in the denominator is automatically converted either to a Num or to a lesser-precision Rat, at the discretion of the implementation. 22:09
(that's S02)
ash__ gotcha 22:10
dalek kudo/ng: da4a858 | (Solomon Foster)++ | src/Perl6/Actions.pm:
Revert "Add :returns('Int') to the integer action, so that we get Ints instead of Integers."

This reverts commit d71e295fe6d98950de698e4c7da90ded1f99bcca.
colomon ng: say abs("-10") 22:11
p6eval ng df72c9: OUTPUT«Method 'Num' not found for invocant of class 'Perl6Str'␤current instr.: 'perl6;Any;abs' pc 259401 (src/gen/core.pir:19809)␤»
pugs_svn r29717 | colomon++ | [t/spec] Unfudge three tests which work now. 22:12
ash__ ng: say "string".WHAT 22:17
p6eval ng df72c9: OUTPUT«Str()␤»
colomon ng: say PARROT("string") 22:18
p6eval ng df72c9: OUTPUT«sh: ./perl6: No such file or directory␤»
jnthn colomon: Youch. I just caught one of the segfaults in the debugger. 22:19
colomon: It's wrongly allocating memory for a string somehow, it seems. 22:20
colomon yeah? he said, optimistically...
Oh, that reminds me. I don't know if you saw my paste from a couple of days ago, but valgrind seemed to catch it referring to a couple of bytes off the edge of a long allocation. 22:22
jnthn colomon: Hm 22:23
ash__ i bet #parrot would love to see a valgrind report on misallocation of memory, thats helpful for tracking down the problem
jnthn colomon: It seems to be some GC-ish issue.
Memory pool (mis-)management or something.
colomon jnthn: how did you catch the segfault? 22:26
jnthn Ran the code under a C debugger.
colomon I mean, what file was it? maybe I can valgrind it for further useful information.
jnthn src/string/apic.c 22:27
*api.c
Line 904
->strstart gets set to something invalid in Parrot_gc_allocate_string_storage(interp, s, len);
I'm kinda too tired to go debugging memory pools code right now though. 22:29
colomon I meant, what p6 were you running to get the bug? (I assumed there was a test file involved.) 22:30
jnthn arity.t 22:31
It may be that it doesn't segv on your platform though :-/ 22:32
colomon nope, it sure does segfault here. :)
valgrind, here we go!
dalek kudo/ng: 2b06cc0 | jonathan++ | src/b (2 files):
Stub out capture snapshots in signatures. Note we can't do them as real snapshots until we get CaptureCursor style stuff in place, but we should be able to quickly get equivalent semantics in place, and when we do get CaptureCursor the infrastructure is there to use.
22:33
colomon ah, might work better if we were using the same code. :p 22:34
22:34 Su-Shee left
jnthn Well yeah, it may just be very memory sensitive... 22:34
colomon (first valgrind run is still working here. :) 22:35
jnthn Of course, it's possible the memory pool code is wrong, but something is corrupting the block sizes, etc. 22:38
cognominal please blog all the wonderful stuff you do so that beotians like me can have a vague idea of it. 22:39
colomon hmmm, works fine under valgrind. :(
jnthn :-(
colomon time to pull and try again.
22:40 sg__ left
colomon nope, still works. :( 22:44
22:47 uniejo left
jnthn :-( 22:47
22:48 masak joined
masak ok, I'm officially confused. 22:48
colomon masak: one of us! one of us! 22:49
jnthn It's official!
masak I seek clarity. hi, jnthn.
jnthn What confuseth thee, o masak?
masak anon enums, their place in the new world order, and the inner workings of Grammar and Actions. 22:50
I'll try to pose specific questions, see if that helps.
question number one: in gist.github.com/303711 , how come I haz a need for both 'token term:sym<type_declarator>' and 'token type_declarator'? 22:51
jnthn The first says that it is parsable in syntactic category of terms. 22:52
masak ok.
jnthn so if we have <term> then one of the things we can match at that point is a type_declarator
masak it's a term, I'll grant that.
so it's another entry point than via <declarator>, is that it? 22:53
jnthn Correct.
masak is the latter for 'my ...' et al?
jnthn That kinda stuff, yes. 22:54
masak \o/
masak haz a quantum of understanding
jnthn tries not to entangle it
masak question number two: ok, so it parses. I get an annoying error message. how do I know where to add incantations in Actions? 22:55
what's the thinking behind adding stuff?
the old world order has a nice, clear method enum_declarator wherein everything happens.
the new one... not so much. 22:56
jnthn You'd want a method matching the grammar rule name
lichtkind bye
jnthn method type_declarator:sym<enum>($/) { ... }
masak lichtkind: \o
jnthn o/
lichtkind :)
jnthn dobru noc, lichtkind 22:57
22:57 lichtkind left
masak jnthn: I have that. 22:57
but it's meanless.
jnthn Great, so it gets called. :-)
masak it only does make $<type_declarator>.ast;
jnthn oh wait
which does that?
masak oh wait.
jnthn Your term:sym<type_declarator> one should do that.
masak that's term:sym<type_declarator>
jnthn Right.
masak yes. why? 22:58
you seem to find that obvious.
jnthn
.oO( that's how I know I've been doing this stuff too long... )
masak what am I not seeing?
jnthn Basically, each thing that we parse in the grammar (or most of 'em, anyway) need to lead to production of some AST node.
Things that do $<term>.ast will need said node. 22:59
masak nodnod. the former part is totally clear to me as well.
jnthn All you're doing is saying "when the term matched this protoregex, then all we need to do is get the AST node made by the type_declarator's action method and pass it on up" 23:00
masak it's just the which-things-end-up-with-which-things part that's not entirely clear to me.
jnthn Maybe think of it as, you associate bits of AST that you build further down in the tree with the match nodes.
Thus the things above them in the tree - which have the match nodes to hand - can then get hold of the AST nodes that were built by calling .ast 23:01
The make function just sets what .ast will return for the match object.
masak jnthn: (by the way, I hear your Юлія is creating a bit of a FUD over not winning the election.)
jnthn: yes, the thing with the bits of AST and .ast is no issue to me. 23:02
jnthn masak: (Да, но Улия красивая...hmm...but I guess I can't finish that with "so I'm turning a blind eye" :-P)
masak but I'm still confused over why term:sym<...> should have a trivial implementation, but type_declarator:sym<enum> should not.
23:03 Guest54390 left
mberends
.oO( it's so much easier to just leave it to TimToady++ and read viv output ;)
23:03
masak jnthn: I could consume the bit of the phrase you could produce, at least. and without resorting to Google Translate :)
jnthn masak: Because it's doing something like the parse-tree equivalent of delegation. :-)
masak jnthn: ok, that does help.
jnthn masak: So looking at wht happens 23:04
Something does <term>
masak right.
doesn't much matter what.
jnthn term is a proto-regex, so we end up magically term:sym<type_declarator>
Tht contains <type_declarator> so we go and parse one of them
at this point we did not run _any_ action methods at all. 23:05
ignoring what happens to actually parse a type declarator etc, at the end of the type_declarator rule, the type_declarator action method gets run.
masak .oO( Yulia has a husky, almost spooky voice... )
www.kniivila.net/2010/tymosjenko-ta...#more-4386
23:06 payload joined
jnthn How am I meant to explain ASTs to you if you're talking about красивая Улия?! 23:06
masak sorry... :)
jnthn ...where was I... 23:07
masak we finally called a method.
jnthn Ah, OK, so actually type_declarator is also proto_regex, so we end up in the enum variant of it.
Anyway, it calls that action method.
masak yes.
jnthn It builds a chunk of AST that represents an enum. 23:08
23:08 bkeeler joined, bkeeler left
masak that part represent my question three, by the way. 23:08
23:08 bkeeler joined
masak you mentioned that it should be possible to do that in pure Perl 6. 23:08
jnthn We'll disregard how exactly to do that for now, but the point is we end up with some kind of PAST::Node (e.g. some subclass of it) and we do make $that-ast-that-we-made; 23:09
This associates the AST with the match node.
The action method returns, and the type_declarator_enum rule returns too
That leaves us back in term:sym<type_declarator>
Which is now at the end of the rule, so it calls the action method there
masak yes. 23:10
jnthn It does not need to do anything to what has been constructed, so it just gets the AST node we built already, which it gets through $<type_declarator>.ast
masak since we're in term:sym<type_declarator>, it's an anon enum, yes?
jnthn And it does make of that.
lisppaste3 colomon pasted "valgrind errors on S03-operators/basic-types.t " at paste.lisp.org/display/94920
jnthn masak: No
Not automatically.
masak the `make $<type_declarator>.ast` is a kind of delegation? it just pulls up the result from its child node. 23:11
colomon That paste has what appear to be clear errors caught by valgrind.
jnthn colomon: Oooh!
masak: It pulls up the node that the action method we ran for type_declarator set using make.
masak right. seems I get that part. 23:12
jnthn masak: It's sorta like delegation, but the result was already produced for us anyway. :-)
masak indeed.
jnthn So we just get hold of it.
I guess
masak aye.
jnthn We parse by descending
And build AST as we come back up 23:13
colomon: That matches the segv I saw.
colomon: But gives more detail.
colomon: It looks like the pool compaction is hosed.
colomon jnthn: \o/
masak jnthn: yep.
jnthn colomon: Well, unless the code that does pool compaction is fine and the memory got corrupted another way.
masak jnthn: anywhere I can read up about PAST? I'm a bit fuzzy on both the syntax and the properties of it. 23:14
jnthn Syntax wise, it's just like creating a bunch of Perl 6 objects - that's all the nodes are.
colomon jnthn: how do we get this to the parrot gang?
jnthn masak: docs.parrot.org/parrot/latest/html/...t.pod.html
masak: That documents the various AST nodes that exist. 23:15
masak thanks!
jnthn colomon: Maybe filing a Trac ticket is easiest.
masak \o/
colomon I don't know anything about the parrot bug tracking system?
masak with this new information, I think I can go back into my cocoon and try again :) 23:16
will be back tomorrow. good night!
23:16 masak left
jnthn trac.parrot.org/parrot 23:17
23:17 iblechbot left
colomon jnthn: I hate to be dense, but I don't see where to submit bugs there? 23:19
jnthn colomon: gah, needs an account 23:21
colomon: I can submit.
colomon danke.
"clarify that anon allows a name but doesn't install it for jnthn++" 23:23
I'm impressed that the language spec has special cases for jnthn.
:) 23:24
23:25 payload left
jnthn ;-) 23:25
mberends does that mean the language *does* install a name when the user is *not* jnthn ? 23:26
colomon That's how I read it, though I guess it is under-specified.
jnthn can't wait to see the code to detect if it's him. 23:27
colomon Wow, pi.t is spectacularly useless.
None of the tests actually conform to the spec.
and creating 3.14159265358979323846264338327950288419716939937510e0 so you can compare the first five digits to pi is very silly. 23:28
23:29 hercynium joined
jnthn colomon: trac.parrot.org/parrot/ticket/1443 23:31
mberends jnthn: why is the Parrot version there 1.9 and not 2.0? 23:33
(nit, nit)
jnthn mberends: It's probably not either, it's whatever PARROT_REVISION is set to.
mberends aha
jnthn mberends: We'll sync up with latest Parrot soon, I expect. 23:34
In prep for Thursday release.
If we can re-produce it again then, we can bump the version number in the ticket too. :-)
Just wanted to get the issue and valgrind output recorded.
mberends fine. I hope ng becomes master by Thursday 23:35
jnthn It will. 23:36
I think pmichaud++ is keen to get slices in place first. 23:37
mberends yes. cool!
jnthn colomon++ is doing a really great job in lots of built-ins too.
mberends absolutely. colomon++ 23:38
colomon blushes 23:44
pmurias jnthn: jnthn might end up a popular user name if it give extra language features 23:48
mberends developers: when you have contributed enough to Perl 6, queue here to have a language feature named after you ;) 23:50
23:53 payload joined, Rix left
lue Oi! You've talked a lot while I was gone :) 23:54
mberends tell me about it... as a confirmed backlog junkie, it's hard to survive off-channel 23:56
lue *twitch* *twitch* I'm fine... *TWITCCH* 23:58
diakopter <gurgle>
diakopter drowns in the backlog from several days ago until now. 23:59
lue Quick! Get diakopter out of the C++ !!!