»ö« | perl6.org/ | evalbot usage: 'perl6: say 3;' or rakudo:, alpha:, pugs:, std:, or /msg p6eval perl6: ... | irclog: irc.pugscode.org/ | UTF-8 is our friend! Set by moritz_ on 25 June 2010. |
|||
jnthn | lue: I should probably write a post explaining that a bit more some day. :-) | 00:00 | |
lue: It's not a stupid question either, fwiw. It's a kinda esoteric area. | |||
lue: It kinda boils down to, consider "class Foo { method bar() { } }" and "role Foo { method bar() { } }". | |||
Those apart from the keywords look kinda similar. | 00:01 | ||
00:01
Psyche^ joined
|
|||
jnthn | Then think along the lines of, "so what makes a class behave like I'd expect a class to, and a role to behave like I'd expect a role to?" | 00:01 | |
Those semantics have to be implemented somewhere. | 00:02 | ||
In Perl 6, we have "meta-objects" which are objects that describe the behavior of other objects. | |||
So we have a "meta-class" (called ClassHOW) that describes how classes work. | |||
Those things are pretty much the meta-model. | |||
Plus dealing with issues like the API for adding new types of packages. | 00:03 | ||
And introspection. | |||
And meta-circularity (which is a fancy word for, we can re-use parts of the meta-model as it exists so far to define new things). | |||
Plus sometimes, making sure that it's introspectable "all the way down". | 00:04 | ||
jnthn wonders if that explanation made any sense :-) | |||
lue: You may also find these slides interesting: www.jnthn.net/papers/2010-nlpw-metamodels.pdf | |||
00:05
Patterner left,
Psyche^ is now known as Patterner
|
|||
TimToady is testing a patch to relax where's EXPR precedence limiter from %chaining to %item_assignment (can't be looser than that or we misparse defaults in sigs) | 00:05 | ||
I dunno why it was limited to tighter than %chaining | 00:06 | ||
jnthn | TimToady: Nice, let me know how it works out. | ||
TimToady: I think it'd be an improvement, if it doesn't cause other issues. | |||
TimToady | well, it's only an issue if it interferes with other signature components, but == shouldn't bother = defaults | 00:07 | |
jnthn | Shouldn't, no. | ||
lue | "A Little Reflection on Metamodels" (next slide) "OH HAI!" :) | ||
jnthn | lue: Oh, those slides get worse. | ||
I can only conclude I'd found some REALLY great beer the week I wrote those. :-) | 00:08 | ||
00:09
sftp joined
|
|||
lue | .oO(At least there are no business-style graphs) |
00:10 | |
jnthn | There actually are some graphs later :-) | ||
There's also a bad pun and a picture of a bear about to eat golfers, iirc. | |||
lue | I would hate to eat a large Stroopwafel in Perl 6 :) | ||
jnthn | ;-) | 00:12 | |
lue | .oO(apparently you think highly of stroopwafels. .oO(There needs to be someplace I can add annontations that don't cause an IRC flood)) |
||
ah! I got to the politics pun! | 00:18 | ||
00:27
meppl left
|
|||
pugssvn | r32080 | lwall++ | [STD] relax where expressions to only require tighter than item assignment | 00:30 | |
jnthn | TimToady: Will do that in Rakudo tomorrow unless I'm beaten to it. | 00:31 | |
TimToady++ | |||
Now I can delete some parens from my slides too, for next time I give 'em. :-) | |||
tylercurtis | TimToady++ | 00:32 | |
jnthn | tylercurtis: I twiddled the STable a little today (additive changes). Know you borrowed it, dunno how close you're tracking it. | 00:35 | |
tylercurtis | jnthn: I haven't started on that bit in Bennu yet. I'm waiting until I better understand a few things. Also, I have to write a YAML parser before I can start on the rewrite anyway. | 00:38 | |
jnthn | tylercurtis: Aha, OK. :-) | ||
tylercurtis: Today I did a high-level project planny blog post, but I plan to make some more that explain the design somewhat. | 00:39 | ||
tylercurtis: Let me know if there's any area that's particularly unclear and I can try and do a post on it. | |||
tylercurtis | jnthn: will do. I haven't read all of the prototype yet. Reading those slides you linked earlier was helpful(especially the bit about building meta-objects at compile time). | 00:43 | |
jnthn | tylercurtis: Yeah, that's going to be quite a big change for Rakudo. | ||
It's also something I can't do in the prototype really. | 00:44 | ||
Well, maybe it's doable with enough effort | |||
But it gets way easier if you can bootstrap. | |||
(On Parrot I already have the luxury of a bootstrapped nqp-rx...) | 00:45 | ||
sorear | jnthn: when I started... there was much less overlap | ||
jnthn | Oh, I guess I could look at a portable serialization format... | ||
But then I have to write a serializer from scratch and it'll just hurt. | 00:46 | ||
lue | jnthn: good post | 00:48 | |
jnthn | lue: Thanks. :-) | 00:49 | |
lue | sometimes I feel I came in too late, and the only things left to do are big and complicated features, the kind of stuff that requires you to have experience in coding new features :D | ||
sorear | lue: It would help if you tried to implement stuff that actually is specified.. | 00:50 | |
me? I thought optimization research, static metaobject analysis, vtables, representation polymorphism, gradual typing, and CLR embedding would be fun things that I could do and not immediately be rendered irrelevant by established folk like jnthn++ | 00:51 | ||
lue | Well, I suppose part of the problem is that I can't find some specific area to work on, so I end up finding random bits that, after looking into it, I can see why they haven't been implemented yet. | 00:53 | |
.oO(although macros is something that keeps popping into my mind) |
00:55 | ||
jnthn | sorear: I don't want to spoil your -Ofun. :-( All I've ever wanted to do since I joined in with Perl 6 compiler dev is make a great compiler for a really awesome language. I've been pondering refactorings to the object model to supprot some of those things for quite a while, and almost dug in before, before realizing that Rakudo wasn't quite ready for them, or that there were higher priorities from user's perspective. | 00:59 | |
I'd figured that you were focusing on the CLR and optimization in a more general sense than object model stuff, e.g. on the regex engine side of things. | 01:04 | ||
lue | .oO(I just found something unicode-related in the ROADMAP!) |
01:05 | |
sorear | no, it's not your fault... I think this place is just too popular | 01:08 | |
01:24
test34 joined
|
|||
jnthn takes some sleep, night all | 01:24 | ||
01:33
justatheory joined
01:49
test34 left
01:53
justatheory left
02:10
mmmpork_ joined
02:12
mmmpork left
02:37
colomon joined
02:40
Alias joined
02:46
takadonet1 joined
|
|||
takadonet1 | hey everyone | 02:47 | |
sorear | hello | ||
takadonet1 | sorear: how are u? | 02:48 | |
02:49
takadonet1 left
03:03
fod left
03:17
Italian_Plumber left
03:24
sftp left
04:32
azert0x left
04:52
mmmpork_ left,
mmmpork joined
04:54
shade_ left
04:56
Lorn left
04:57
Lorn joined
|
|||
tylercurtis | phenny: ask jnthn Shouldn't Rakudo.Runtime.Ops.logical_not_int box the result into TC.DefaultBoolBoxType? | 05:12 | |
phenny | tylercurtis: I'll pass that on when jnthn is around. | ||
05:13
drbean joined
05:28
achromic left
05:30
envi^home joined
05:50
shade_ joined
05:53
barika left
05:56
shade_ left
06:00
shade_ joined
06:06
shade_ left
|
|||
risou_ | どう考えてもあつい | 06:09 | |
06:09
risou_ left
06:12
[particle] left
06:13
[particle] joined
06:14
yahooooo left
06:16
yahooooo joined,
xiaolongxia left
06:17
xiaolongxia joined
06:18
mmmpork left
06:19
mmmpork joined
06:21
shade_ joined
06:36
lasse_ joined
06:37
achromic joined
06:54
shade_ left
07:13
rang joined
|
|||
rang | hi - is anyone updating: www.perlfoundation.org/perl6/index....sentations ? | 07:13 | |
sorear | doesn't look like it | 07:19 | |
07:37
tylercurtis left
07:46
Mowah joined,
Guest23195 joined
07:50
mberends joined
|
|||
rang | sorear: cheers - I've removed the link from dev.perl.org/perl6/ | 08:03 | |
just pointing to the wiki directly now | |||
ttfn | 08:05 | ||
08:05
rang left
08:08
Eevee left
08:11
Eevee joined
08:16
zulon joined
08:21
meppl joined
08:26
ruoso left
08:33
wamba joined
08:43
ruoso joined
08:45
Su-Shee joined
|
|||
Tene | lue: Don't be too intimidated by macros. They're definitely doable in Rakudo. | 08:48 | |
09:03
zulon left
09:08
shade_ joined
09:09
szabgab left
09:10
dju left
09:14
szabgab joined
09:15
drbean left
|
|||
moritz_ | in fact sorear had a proof of concept macro implementation for rakuo | 09:20 | |
09:24
masak joined,
achromic left
|
|||
masak | oh hai, #perl6 | 09:24 | |
moritz_ | oh hai | ||
09:24
shade_ left
|
|||
moritz_ | 6guts.wordpress.com/2010/08/22/raku...oad-ahead/ interesting read, jnthn++ | 09:25 | |
09:26
zulon joined,
achromic joined
|
|||
masak | ooh | 09:26 | |
moritz_ | oom | ||
masak | I liked blogs.perl.org/users/tyler_curtis/2...patch.html as well. | 09:27 | |
I'm starting to think Perl 6's whatever-currying syntax is a sort of gateway drug for people to start thinking naturally about closures. | |||
jnthn: you blog looks so much nicer than that last one you had, with the gray 90s background and the blocky 90s widgets! :/ | 09:28 | ||
09:29
shade_ joined
|
|||
masak | "Today in Rakudo, writing type annotations may make your program slower rather than faster, even though you give more information. I want to fix that." -- jnthn++ | 09:30 | |
both for the intent, and for the quote itself. | |||
mberends | masak: good day! I've finally got a round tuit for our planned discussion, after you finish reading jnthn++'s article three times, as I have :) | 09:32 | |
masak | :) | ||
mberends: actually, I'm trying to make a very short visit here today. big exam on Tuesday. need to dive into big book with hidden clues in it. | |||
mberends | oh. ok. | 09:33 | |
masak | mberends: what I can do, though, is send along the patch for you to look at. | ||
mberends | ok2. | ||
masak | and then we can talk on Wednesday :) | ||
mberends | ok3. | ||
masak | which do you prefer, email or gist? | 09:34 | |
mberends | masak: gist please | ||
masak | gist.github.com/543580 | ||
mberends | masak: thanks, and good luck with the exam. | ||
09:35
Mowah left
|
|||
masak | let me just say a thing about the intent of this patch: it is to make IO::Socket IO inherently Buffy. :) | 09:35 | |
(instead of inherently Stringly, as it is now) | |||
(or should I say Strly) | |||
mberends | good idea, I want to try getting WebSockets into a web server. | ||
Buf will probably help | 09:36 | ||
masak | mberends: the patch applies cleanly, apart from some tests which it *exposes* as being wrong in the first place. | ||
oha++ | |||
mberends: I mainly wanted a second opinion from a downstream consumer before I applied this. | |||
mberends | masak: I'll apply the patch and try the various webserver implementations. thanks. | 09:37 | |
masak | \o/ | 09:38 | |
sorear | I need a new project | ||
masak | sorear: I'd like for someone to write a real LTM gramamr engine. | ||
preferably in Perl 6. | 09:39 | ||
sorear | conveniently, I already have one of those. | ||
masak | :) | ||
sorear | niecza: "fooo" ~~ / foo { say "A" } | fo* { say "B" } / | ||
p6eval | niecza 1801379: OUTPUT«B» | ||
masak | wow! | 09:40 | |
sorear++ | |||
seriously, someone write an FAQ page or blog post or wiki entry somewhere about how to input » on various systems: twitter.com/juanpabloaj/status/21805082345 | 09:42 | ||
it's not that hard... | |||
09:43
mberends left
|
|||
masak replies with the ways he knows | 09:43 | ||
moritz_ | compose > > on linux | ||
masak | what about Windows? | ||
moritz_ | or AltrGr x # on my machine | ||
09:43
shade\ joined
|
|||
masak | right, something similar on Windows ISTR. | 09:43 | |
moritz_ | (but it's some default, nothiing that i configured myself) | ||
09:45
shade\ left
09:46
shade\ joined,
shade\ left,
shade\ joined
|
|||
masak | tylercurtis++ made HN: news.ycombinator.com/item?id=1624027 | 09:50 | |
09:55
zulon left
09:56
mberends joined
|
|||
masak | and the HN discussion is lucid, open-minded and mostly friendly, much thanks to tylercurtis++ participating in it. impressive. | 09:58 | |
10:03
shade_ left
10:21
risou joined
10:23
azawawi joined
|
|||
azawawi | hi | 10:23 | |
sorear: ping | |||
sorear | I thought I handed you off to pmurias | 10:32 | |
pong | |||
azawawi | sorear: ok i'll follow up with him then... cya :) | 10:33 | |
sorear | well, maybe it is my fault. | 10:34 | |
azawawi | anyway, STD is not working when trying a simple STD->parse()... | 10:35 | |
masak | sorear: what do you consider the performance of STD to be, compared to the fastest port of STD you can imagine? | ||
azawawi: I got it working in the backlog. hold on, I'll find it for you. | |||
azawawi: there's a trick to it. | |||
azawawi | masak: ok | ||
sorear | azawawi: you need to install a setting | 10:36 | |
masak | right. | ||
10:36
Italian_Plumber joined
|
|||
sorear | try STD->parse("2", setting => "NULL") | 10:36 | |
masak | irclog.perlgeek.de is slow today... :/ | 10:37 | |
sorear | there's a LTA error message for "setting not found" | ||
azawawi | sorear: i know ... i was wondering why it is not part of the STD package... | ||
sorear | (ironically, it was added to be user friendly) | ||
masak | sorear: that's not very uncommon for ironically LTA error messages... | ||
s/ironically // | 10:38 | ||
sorear | azawawi: the 'CORE.setting' in src/perl6 is the viv setting, and it doesn't make a whole lot of sense for general use | ||
Syntax::Highlight::Perl6 could probably get away with it, but niecza and mildew can't | |||
masak | why not? | 10:40 | |
azawawi | sorear: ok but what's the use of an STD package when STD->parse() doesnt work? | ||
masak | there should be a big sign somewhere saying "you need a setting for this to work. batteries not included" | 10:43 | |
azawawi | that and im seeing a lot of uninitialized errors in CursorBase.pmc when parsing a wrong Perl 6 code. | 10:45 | |
after installing the setting that is | |||
sorear | that should never happen | 10:50 | |
what exactly are you doing and ow did you "install" the setting | |||
moritz_ wonders why people always confuse warnings and error messages | |||
masak | mberends: you're probably already on the Dancer mailing list, but today they're discussing building a Plack::Middleware::Websocket. seems very connected to what you want to do, except it's in Perl 5. | 10:51 | |
moritz_ | maybe they aren't sufficiently distinct | ||
masak | moritz_: maybe people haven't felt sufficient need to distinguish them in their heads. both signify something wrong with their programs. | 10:52 | |
10:53
whiteknight joined
|
|||
azawawi | sorear: I added a syml_search_path => ['parent-folder-of-syml/CORE.syml'] to STD->parse and installed syml/CORE.syml | 10:53 | |
sorear | What CORE.syml? | 10:56 | |
Like I said, there is no usable standard one | |||
Any that you install is wrong | 10:57 | ||
x3nU | is there changelog for latest rakudo? | 10:58 | |
sorear | git log is good enough for me | ||
masak | rakudo: say (16 < * < 66)(5) # tylercurtis++ discovered this one, but didn't submit it as far as I can see | ||
p6eval | rakudo 928836: OUTPUT«1» | ||
moritz_ | x3nU: docs/ChangeLog | 10:59 | |
araujo cannot understand women | |||
masak | rakudo: say 16 < 5 < 66 | ||
p6eval | rakudo 928836: OUTPUT«0» | ||
masak submits rakudobug | |||
araujo | whoever asked here that wanted to have a gf .... I envy you | ||
araujo wants to get back to his previous single-lonely life | |||
masak | araujo: that can be arranged. | 11:00 | |
huf | or why not try a boyfriend? | ||
araujo | masak, yeah, I will arrange that | 11:01 | |
11:01
azawawi left
|
|||
araujo | huf, will wait for AI to come | 11:02 | |
design your own android | |||
that is the future | |||
so hurry up with perl6 guys, it might be the answer | |||
moritz_ | hurrying is a good way to delay things | 11:03 | |
araujo: but of course you can help make it happen faster | |||
araujo | finally that bible thing about adam out of paradise and struggling for living is starting to make sense for me | 11:04 | |
moritz_, :) | |||
masak | rakudo: sub foo($a) { True; }; subset Foo of Mu where -> $foo { foo($foo) }; say 5 ~~ Foo # also found and unreported by tylercurtis++ | 11:09 | |
p6eval | rakudo 928836: OUTPUT«Could not find sub &foo in <anon> at line 22:/tmp/NatSYeFo2Q in 'Block::ACCEPTS' at line 5775:CORE.setting in 'infix:<~~>' at line 402:CORE.setting in <anon> at line 1:/tmp/NatSYeFo2Q in 'Block::ACCEPTS' at line 5775:CORE.setting in 'ACCEPTS' at line | ||
..984:CORE.setting … | |||
masak submits rakudobug | |||
<pmichaud> probably the same one that caused (causes) roles to not see lexical subs. | |||
moritz_ | another fun not-in-the-right-lexical-context bug | ||
masak | right. | ||
moritz_ | they seem to be quite a problem in rakudo | 11:10 | |
masak | I haven't figured out a model that works in my head either. | ||
how *do* the inner workings of a metaoperator see a lexical user-defined operator, for example? | 11:11 | ||
moritz_ | masak: [+] desugars to reduce_helper(&infix<+>, @args) or so | 11:13 | |
masak: so it just gets a reference to a routine (or multi), which it calls | |||
11:14
redicaps joined,
redicaps left
|
|||
masak | moritz_: right, but the desugaring takes place in a lexical scope unrelated to that of the user's script. so how can the desugaring code "see" the user's 'my'-declared operator sub? | 11:22 | |
11:22
rokoteko joined
|
|||
moritz_ | masak: the "desugaring" is the process of compiling [+]. That inserts the helper code in lexical scope of the user script | 11:23 | |
in rakudo, that's roughly | |||
PAST::Op.new(:pirop('call'), '&reduce_helper', Past::Var.new(:name('&infix:<+>), :scope('&lexical')), @args) | 11:24 | ||
masak | ah, with the desugaring taking place at parse time, I get it. thanks. | ||
moritz_ | if it were not parse time, I'd need lift() | 11:25 | |
s/I/It | 11:27 | ||
rakudo: my $x = 5; subset A of Int where { $_ < $x }; say 2 ~~ A | 11:28 | ||
p6eval | rakudo 928836: OUTPUT«Null PMC access in can() in <anon> at line 1:/tmp/DDVdqI7ocJ in <anon> at line 22:/tmp/DDVdqI7ocJ in 'Block::ACCEPTS' at line 5775:CORE.setting in 'infix:<~~>' at line 402:CORE.setting in <anon> at line 1:/tmp/DDVdqI7ocJ in 'Block::ACCEPTS' at line | ||
..5775:CORE.setting i… | |||
moritz_ | I'm so sure that worked once | 11:29 | |
masak submits rakudobug | |||
I also think it worked once. | |||
rakudo: my $x; subset A where { $x }; 2 ~~ A; say "alive" | 11:30 | ||
p6eval | rakudo 928836: OUTPUT«alive» | 11:31 | |
masak | rakudo: my $x; subset A where { $_ < $x }; 2 ~~ A; say "alive" | ||
p6eval | rakudo 928836: OUTPUT«Null PMC access in can() in <anon> at line 1:/tmp/lqVft7Zeo5 in <anon> at line 22:/tmp/lqVft7Zeo5 in 'Block::ACCEPTS' at line 5775:CORE.setting in 'infix:<~~>' at line 402:CORE.setting in <anon> at line 1:/tmp/lqVft7Zeo5 in 'Block::ACCEPTS' at line | ||
..5775:CORE.setting i… | |||
masak | rakudo: my $x; subset A where { $_ }; 2 ~~ A; say "alive" | ||
p6eval | rakudo 928836: OUTPUT«alive» | ||
masak | rakudo: my $x; subset A where { say $x }; 2 ~~ A; say "alive" | ||
p6eval | rakudo 928836: OUTPUT«Could not find sub &say in <anon> at line 22:/tmp/9mQi5DLi64 in 'Block::ACCEPTS' at line 5775:CORE.setting in 'infix:<~~>' at line 402:CORE.setting in <anon> at line 1:/tmp/9mQi5DLi64 in 'Block::ACCEPTS' at line 5775:CORE.setting in 'ACCEPTS' at line | ||
..984:CORE.setting … | |||
masak | ah :) | ||
colomon | rakudo: my sub infix:<++++>($a, $b) { -$a + $b }; say [++++] 1, 2, 3, 4 | 11:33 | |
p6eval | rakudo 928836: OUTPUT«===SORRY!===Could not find sub &infix:<++++>» | ||
colomon | rakudo: our sub infix:<++++>($a, $b) { -$a + $b }; say [++++] 1, 2, 3, 4 | 11:34 | |
p6eval | rakudo 928836: OUTPUT«2» | ||
11:36
zulon joined
|
|||
moritz_ | that's unfortunate :/ | 11:36 | |
masak | now that moritz_ has explained the simple desugaring process, I don't understand why the error occurs... :) | 11:37 | |
it's just a simple lexical lookup in the same scope, no? | |||
colomon | I don't think moritz_'s explanation is actually correct | ||
moritz_ | PAST::Op.new( :pirop('find_sub_not_null__Ps'), $base_op ), | ||
does that look into lexical scopes too? | 11:38 | ||
colomon | but I may be wrong on that, too. :\ | 11:39 | |
moritz_ | colomon: do you think it's not what happens now, or not what's supposed to happen? | 11:40 | |
colomon | okay, the first problem (which may not actually affect this one) is that it's generating the code for the metaop that way. | ||
so basically, the first time you call [+], it generates a new [+] sub which does the reducewith call. | 11:41 | ||
so if you later define a new infix:<+> and then call [+] wanting to use it, you definitely do NOT get the lexical scope at that point. | |||
may very well be that you never get the correct lexical scope. | |||
moritz_ | then that design is flawed | ||
colomon | my guess (based on watching these things happen) is that you never get the correct lexical scope. But that's strictly a guess. | 11:42 | |
I certainly agree that it's not supposed to work that way. | 11:43 | ||
masak | jnthn: www.jnthn.net/papers/2010-nlpw-metamodels.pdf is AWESOME! massive kudos! | ||
masak can't believe he missed that one till now | |||
num & | 11:46 | ||
er, *nom | |||
12:12
molaf joined
12:17
molaf left
12:23
cogno joined
12:30
azert0x joined
12:37
Italian_Plumber left
|
|||
jnthn | morning, 6folk | 12:37 | |
phenny | jnthn: 05:12Z <tylercurtis> ask jnthn Shouldn't Rakudo.Runtime.Ops.logical_not_int box the result into TC.DefaultBoolBoxType? | ||
jnthn | masak: I only gave it once and had a lot of fun doing so...maybe I should do it again some day. :-) | 12:39 | |
moritz_ | jnthn: is there a good reason for caching things like prefix [+] ? | 12:41 | |
it seems to mess up things when there are lexical ops | 12:42 | ||
jnthn | moritz_: Mostly it means that we can just generate the op calls as normal calls to &prefix:<[+]> | 12:43 | |
12:43
drbean joined
|
|||
jnthn | I think the lexical issue is a more general one fwiw. | 12:44 | |
Though yes, we could do the meta-ops differently to avoid the issue. | |||
moritz_ | do we gain anything from it? the logic for calling reducewith with the right arguments is already in there | ||
jnthn | Feel free to try out a non-caching version. | ||
12:44
cogno left
|
|||
moritz_ does | 12:44 | ||
jnthn | I'm not especially attached to it. | ||
It just made code-gen a bit easier. | |||
moritz_ | $ ./perl6 -e 'multi sub infix:<+++>($a, $b) { $a + $b }; say [+++] 1, 2' | ||
3 | |||
works when I remove the cache | |||
let's see what spectest has to say | 12:45 | ||
jnthn | And when instead of emitting the op you emit the call? | ||
Rather than currying it? | |||
12:45
wamba left
|
|||
jnthn | I guess it'd work. | 12:45 | |
moritz_ | that's what I'm trying now | 12:47 | |
it's nearly only deleting code | |||
... and breaks some tests .( | |||
ah, we need the cache for combining it with other meta ops | 12:48 | ||
unless we tweak their codegen too... not sure if that works | |||
jnthn | Yes, you may need to refactor the bunch. | 12:49 | |
moritz_ | huh | 12:51 | |
my @result = [~]«( <a b> X, <1 2> ); | |||
which colomon++ commented with #?rakudo todo "Not at all clear if this test is correct or not" | 12:53 | ||
jnthn | OK, that just makes me want more coffee. :-) | 12:54 | |
moritz_ | if that's the only test that breaks, I'll consider s/todo/skip/ | 12:55 | |
12:56
cogno joined
|
|||
colomon | have you considered nested metaops? | 12:57 | |
jnthn | I'd hope we have tests for those... :-) | ||
colomon | I'm not sure if it's a problem with [op], but it's an issue in general with this approach | ||
cogno | Limechat++ # irc on the go | 12:58 | |
jnthn | But yes, there was a sense in that what we have now gets the nesting right by just passing in higher order function references. | ||
moritz_ | colomon: yes, those are a problem | 13:00 | |
colomon | the specific case to worry about (I think) is what happens to [R-] if R- no longer generates a R- sub. | ||
moritz_ | hm | ||
colomon | though can you use [op] in a hyper-op? then you'd run into the same issue here. | ||
afk | |||
moritz_ | maybe we can make all the helper subs always return closures | 13:01 | |
and emit a call to it in the end | |||
jnthn | moritz_: Yes, it'd need to be something like that. | 13:02 | |
colomon | won't a closure have the same lexical issues? | ||
afk for real | |||
jnthn | moritz_: Or just .assuming everything apart from the "top" one in the chain, which you just call. | ||
13:02
dju joined
|
|||
moritz_ | hm | 13:03 | |
remains the question of how to find out which one is the top one, at compile time | 13:04 | ||
jnthn | Yes. :-) | ||
moritz_ | currently we have only one test for a reduce meta op being used by another meta op | 13:05 | |
and that is borked :-) | |||
dalek | odel: 03bf0be | jnthn++ | dotnet/runtime/Runtime/Ops.cs: Fix a nit noticed by tylercurtis++. |
13:06 | |
odel: b4f8465 | jnthn++ | dotnet/runtime/Metamodel/SharedTable.cs: Fix a jnthn-- fail. |
|||
13:07
dju left
13:08
dju joined
13:09
orafu left,
orafu joined
13:12
sftp joined
13:15
sftp left
13:21
cogno left
13:31
lala joined
|
|||
lala | Other Syntax for Calling by Name | 13:33 | |
cloud.github.com/downloads/perl6/bo...010-04.pdf | |||
moritz_ | don't look at the PDF from April - take a newer one | ||
lala | announce-time(dinner => '9pm'); the '>' appearing as an upside down question mark | ||
moritz_ | we do fix bugs sometimes. Which is why it's worth to look at a newer version. | 13:35 | |
lala | i was going to play with it abit, but I couldn't find any examples of using event loops or tcp sockets | 13:36 | |
13:36
Colb-Seton joined
|
|||
lala | was an eventloop like libevent etc decided on? | 13:37 | |
moritz_ | I think the plan is to implement eventloops with feeds | ||
lala | i'd love to see code cleaner using events, right now my code imports a C library, and its just a big mess of functions calling functions never going back to main | 13:42 | |
13:46
cogno joined
13:49
dual left
|
|||
lala | in perl5 the socket connects were not truely non blocking i had to set socket to non blocking then manually use connect($sock, $saddr) to get it to work | 13:54 | |
13:56
cogno left
14:02
Colb-Seton left
14:04
guidj0s joined
|
|||
guidj0s | Hi guys. | 14:04 | |
Im excited about perl6, but why the change in the ternary operator? | 14:05 | ||
14:11
Mahmoud joined
|
|||
Mahmoud | I don't get why do we need Perl6 | 14:11 | |
lala | I asked myself that question alot as well, but it seems we can compile our source code, that will be main reason i think | 14:12 | |
be nice not to have to install 50 modules to put program on another box | 14:13 | ||
Mahmoud | aren't there existing languages that already do so | 14:14 | |
Juerd | guidj0s: Because ? and : could be used so much better | ||
guidj0s | Juerd: oh... ok | ||
Juerd | guidj0s: And it gave the nice opportunity to change it to something more consistent throughout the language: ? is the opposite of !, which negates. Now we get ?? and !! for if-true and if-false of the ternary. | ||
jnthn | guidj0s: Several reasons, of those I remember: ! had a clear association with negation, signle characters were felt a bit too flimsy for control flow operators, and I think partly that because : is used to mean quite a few other things in Perl 6, it might have caused some parsing-y trickiness. | ||
Juerd | And it looks a bit more consistent with && and || | 14:15 | |
guidj0s | Juerd: yeah, i was reading some Perl6 documentation, and I saw the change, that's what made me ask here | ||
moritz_ | guidj0s: another reason is that having single characters for control is a bit a hard to read, they can easily be overloooked | 14:16 | |
Juerd | jnthn: Maybe the documentation should be grouped per codepoint ;) | ||
jnthn | Mahmoud: I think you just made an argument against ever making anything that does something better than a tool that already exists today... :-) | ||
moritz_ | Mahmoud: Perl 6 unifies a lot of concept that aren't present in this combination in other language | ||
Juerd | jnthn: ":", U+003A, COLON: Used in the following operators: (...) | ||
moritz_ | Juerd: actually I have long planned such a project | ||
jnthn | Juerd: www.perlfoundation.org/perl6/index.cgi?witch | 14:17 | |
moritz_ | Juerd: and I started to write some documentation for it too | ||
Juerd | Oh my :) | ||
14:17
Sarten-X2 is now known as Sarten-X
|
|||
Juerd | I thought I was being silly but that actually looks useful. | 14:17 | |
guidj0s | is there any idea when Perl6 is coming out? | ||
Juerd | www.perlfoundation.org/perl6/index....itch_colon | ||
guidj0s | i was just starting to delve into more advanced Perl 5 usage... | 14:18 | |
jnthn | Mahmoud: Seriously though, Perl 6 does have various new things to offer. See for example grammars and junctions. | ||
guidj0s | and the stuff I was learning seems to be about to disappear | ||
moritz_ | "coming out" is a process | 14:19 | |
jnthn | guidj0s: Perl 5 is most certainly not going to disappear. :-) | ||
moritz_ | which is in progress | ||
guidj0s | jnthn: what do you mean? | ||
Juerd | guidj0s: Knowing multiple languages will give you a more solid understanding of programming in general. | ||
lala | if your talking about production i'd stick to perl5 till perl6 has enough cpan modules to make life easier, and I'm guessing that will take 2 years | 14:20 | |
Juerd | Sometimes learning differences is more effective than learning specific aspects of a single language. | ||
jnthn | guidj0s: Perl 6 "coming out" will not mean Perl 5 development ceases, or that people who are using Perl 5 will all suddenly stop doing so and use Perl 6 instead. :-) | ||
guidj0s | mmmkay... | ||
Juerd | Where will it come out from? | ||
s/from/of/ | |||
guidj0s | I just feel a tad bit insecure because something I like in Perl (5) is the fact that it's not completely abstract.... | 14:21 | |
i.e., you build complex data structures out of very fundamental ones | |||
14:21
sftp joined
14:22
risou_ joined
|
|||
guidj0s | I just like how you build big things out of just scalars, lists and references to them. | 14:22 | |
which just seems likely to disappear in Perl 6 | 14:24 | ||
Juerd | You'll still be able to do all the same things | ||
jnthn | rakudo: my @people = { name => 'jnthn', likes => 'beer' }, { name => 'masak', likes => 'strange loops' }; say "@people[0]<name> likes @people[0]<likes>"; # you still can in Perl 6. | ||
Juerd | And often even in the same way, even if the underlying techniques change. | ||
p6eval | rakudo 928836: OUTPUT«jnthn likes beer» | ||
moritz_ | jnthn++ # nice example | ||
14:25
risou left
|
|||
moritz_ | perl 5 only needed references for nested data structures because arras and hashes can only hold scalars | 14:25 | |
guidj0s | are there lots of changes in the way references are treated? | ||
jnthn | rakudo: my @people = { name => 'jnthn', likes => 'beer' }, { name => 'masak', likes => 'strange loops' }; for ^people -> { say "@people[$i]<name> likes @people[$i]<likes>"; } # :-) | ||
moritz_ | that limitation is gone | ||
p6eval | rakudo 928836: OUTPUT«===SORRY!===Missing block at line 22, near ""» | ||
jnthn | grr! | ||
Juerd | guidj0s: Yes. References are gone. | ||
guidj0s | %somehash{name} actually calls name() now, doesnt it? | ||
jnthn | rakudo: my @people = { name => 'jnthn', likes => 'beer' }, { name => 'masak', likes => 'strange loops' }; for ^@people -> $i { say "@people[$i]<name> likes @people[$i]<likes>"; } # :-) | ||
guidj0s | Juerd: oh man | ||
p6eval | rakudo 928836: OUTPUT«jnthn likes beermasak likes strange loops» | ||
Juerd | guidj0s: Don't let it scare you :) | ||
moritz_ | actually not quite true | ||
everything is a reference, more or lesss | 14:26 | ||
it's just that explicit usage of references is gone | |||
guidj0s | i just dont want my sweet lovely perl to turn into java :( | ||
jnthn | guidj0s: See the exmple I just ran. Note that you can have an array of hashes just like in Perl 5. The only difference is that when you go to access the data, you don't have to write -> any more. | ||
guidj0s | jnthn: i noticed. | ||
how about closures though? | 14:27 | ||
Juerd | guidj0s: my $closure = { say "Hello, $world!" }; | ||
jnthn | rakudo: my $x = { say "oh hai I'm a closure" }; $x(); | ||
p6eval | rakudo 928836: OUTPUT«oh hai I'm a closure» | ||
guidj0s | $closure calls it? | ||
or $closure()? | |||
jnthn | $closure() | ||
moritz_ | or .() if you prefer | ||
guidj0s | ah, nice. | ||
Juerd | $closure.() or $closure(); | ||
s/;// | |||
14:28
tadzik joined
|
|||
tadzik | oh hello | 14:28 | |
Juerd | O hai | ||
jnthn | ahoj, tadzik | ||
guidj0s | thanks guys, i needed the comforting | 14:29 | |
guess i shouldn't be scared of change :P | |||
lala | you like new pussy don't you? | ||
guidj0s | lala: im quite happy with my girl man ;) | ||
think ill like new perl though :P | 14:30 | ||
jnthn | "Perl 6. It's a new pussy." | ||
Juerd | p6ssy | ||
guidj0s | how deeply is L.W. involved in the making of Perl 6? | 14:31 | |
moritz_ | hey, we're supposed to be a family frindly channel | ||
guidj0s: as deep as possible | |||
jnthn | moritz_: wtf, I was thinking of lolcats! | ||
Juerd | guidj0s: Deeper does not exist. | ||
guidj0s | nice. | ||
gfldex | rakudo: say "purr"; | ||
p6eval | rakudo 928836: OUTPUT«purr» | ||
guidj0s | btw, anybody here got pumpking status? :) | ||
Juerd | guidj0s: He's known as TimToady here, though :) | ||
tadzik | oh, new faces | 14:32 | |
guidj0s | awesome :| | ||
Mahmoud | any plans to make perl 6 faster than perl 5 | ||
moritz_ | guidj0s: pmichaud is the Rakudo pumpking | ||
Mahmoud: we'll make it as fast as we can | 14:33 | ||
guidj0s | nice. | ||
tadzik | Mahmoud: it's alredy happening, rakudo 2010.08 is like 2-20 times faster than the last release | ||
14:33
drbean left
|
|||
guidj0s | i would've thought the heavt object orientation would have made it at least a little bit slower... | 14:34 | |
heavy* | |||
awesome though. | |||
Juerd | guidj0s: Slower than what? | ||
Mahmoud | i read that perl 6 can't get faster than perl 5 | ||
gfldex | guidj0s: as slow as c++? | ||
lala | more syscalls that necessary you mean | ||
Juerd | lala: OO does not involve system calls. | ||
tadzik | Mahmoud: where? | ||
guidj0s | Juerd: than Perl 5 | ||
Juerd | guidj0s: For now, it still is. | 14:35 | |
guidj0s | at least its initial versions | ||
Mahmoud | tadzik, youtube comment www.youtube.com/watch?v=ZKmUZVKIdKg | ||
14:35
s1n joined
|
|||
tadzik | Mahmoud: oh come on, please | 14:35 | |
Mahmoud | heh | ||
Juerd | guidj0s: Everyone hopes to see it get faster, though! | ||
guidj0s | yeah. | ||
Mahmoud | 2-20 times faster is really good | ||
guidj0s | i just love Perl man. I want it to kick ass and you freaks usually manage to make it do it. | ||
Juerd | 20? | ||
tadzik | Mahmoud: don't say you took this troll seriously :) | ||
gfldex | yes, it was that slow :) | 14:36 | |
lala | Well if we can compile our programs on a unix box, then just ftp it over to another one and use it i;m all for it, however wouldn;t there be issues if something was compile on linux vs freebsd vs solaris? | ||
tadzik | Juerd: one of my tests ran 20 times faster, yes | ||
it consisted mainly of iterating and adding Nums :) | |||
14:37
blogometer joined
|
|||
jnthn | guidj0s: For what it's worth, the new OO syntax being more declarative actually provides more information to the compiler. Once we have a compiler that knows how to make good use of that information, we've a good chance of being able to do OO stuff pretty fast in the common cases. | 14:37 | |
14:37
blogometer left
|
|||
tadzik | jnthn: sounds interesting to me. How can a compiler benefit, and from what? | 14:38 | |
guidj0s | jnthn: I just figured the compiler would have to change so much | 14:39 | |
jnthn: and I'm thinking that Perl 5's constant improvement since 1987 is one friggen good reason why it's fast :) | 14:40 | ||
jnthn | tadzik: For example, consider class Beer { has $!name; has $!type; method describe() { say "$!name is a $!type" } } | ||
tadzik: We're not committing to any particular storage strategy for the attributes here. | 14:41 | ||
tadzik: They're also private to the class. | |||
lala | well if we go overboard on having to declare every variable as a float int or whatever, then we're no better than c/c++ | ||
gfldex | lala, you imply that you have to provide types | ||
you further imply that you cant have dynamic types in c/c++ | 14:42 | ||
jnthn | tadzik: So we could choose to just have a chunk of memory where we store them in our object. | ||
gfldex | you can but nobody is using it, because the syntax is so ugly | ||
jnthn | tadzik: And then look them up using offsets. | ||
tadzik | jnthn: like a structin C? | ||
jnthn | tadzik: Yes | ||
tadzik | s/tin/t in/ | ||
jnthn: how is it different from other languages? | 14:43 | ||
jnthn | tadzik: It's not different from a lot of languages. It is a change from Perl 5, for example, where a lot of storage is based on hashes, so an attribute lookup = a hash lookup. | ||
tadzik | oh, so it's just different from Perl 5's approach? | 14:44 | |
gfldex | tadzik: it _can_ be different but don't has to | ||
jnthn | tadzik: Well, and probably some other dynamic languages. | ||
guidj0s | is there any change on hashes' implementation? | ||
lala | One thing I do hate about google is they are favoring python, I read this compiler will work with both languages, meaning we may even be able to write programs for android etc that has python support down the road if this is the case | 14:45 | |
tadzik | gfldex: yep, I know that | ||
jnthn | tadzik: The important thing is that we're not locked into just one way of representing objects. | ||
tadzik | lala: is liking a language a reason to hate? | ||
moritz_ | guidj0s: Perl 6 is a specification. The internals can be wildly different from Perl 5 | ||
guidj0s | moritz_: then i guess i uderstand, even if feebly, how much work you guys are doing | 14:46 | |
lala | tadzik: your always going to favor the language your know the most in | 14:47 | |
tadzik | lala: maybe. Then why do you hate google? :) | ||
lala | should be interesting moving forward to mod_perl etc | ||
Mahmoud | if mod_perl6 is limited like mod_php, we would see more of it in shared webhosts env | 14:48 | |
Juerd | Mahmoud: Embedding into Apache isn't necessary for serving web pages. | ||
Mahmoud: FastCGI is a much better approach, and easier to implement | |||
lala | tadzik: i hate them mostly because i envisioned their company something out of the terminator movies, only thing they have left for world dominance is creating their own windows OS | 14:49 | |
i had a dream where its going to be hackers vs google one day | |||
tadzik | lala: that's one of the reason I avoid using their products. But that doesn't matter, I was just curious about your python point | 14:50 | |
guidj0s | I've heard google sticks with python for hystorical reasons | 14:51 | |
Juerd | hysterical | ||
guidj0s | because they started using it on a time when it was a good choice, and now they've just too much in it to port to other languages (PERL!) | ||
kinda like COBOL | 14:52 | ||
Juerd | guidj0s: You make it sound like Google uses *only* Python. They use a whole lot of languages. | ||
guidj0s | Juerd: sorry, I didnt mean that. I meant they use "a lot of" | ||
lala | they favor python look at all their new programming API's from last few months, java, python | ||
Juerd | A company can have its prefenences | 14:53 | |
gfldex | google serves the masses | ||
i can't see what would be wrong about that :-> | |||
lala | i looked at that language, i didn't like its code at all | ||
14:55
mikehh_ joined
|
|||
guidj0s | gfldex: if you wanna make money, you have to. | 14:56 | |
14:56
mikehh left
14:58
sftp left
|
|||
gfldex | guidj0s: like rolls-royce? | 14:58 | |
14:59
_twitch joined
|
|||
guidj0s | gfldex: I didnt know Google was in the auto industry | 14:59 | |
_twitch | hi guidj0s | ||
guidj0s | heya | ||
_twitch | hi god of perl | ||
14:59
sftp joined
|
|||
_twitch wonders which one the god of perl is.. | 14:59 | ||
14:59
tohen joined
|
|||
lala | fucked up articles in last few days, of how a guy hacked into a guys car on the freeway through his tire pressure guage and took over his brakes, engine etc | 15:00 | |
_twitch | hey tohen | ||
tadzik | you know why python has so much whitespace in it? | ||
tohen | sup ;] | ||
_twitch | not much | 15:01 | |
guidj0s | Juerd: I expect there are big changes to globs and the way we manipulate them? | 15:02 | |
lala | lets face it biggest reason we all use these type of languages is because it would take us 10 times as long to do it in low level language, and we prefer not working on same shit all the time | ||
15:04
dual joined
|
|||
guidj0s | lala: you forgot to mention worrying about endianness and the other gazillion aspects that differ from architecture to architecture. | 15:04 | |
15:04
masak left
|
|||
pmichaud | good morning, #perl6 | 15:04 | |
guidj0s | heya | 15:05 | |
tadzik | 'afternoon pmichaud | ||
15:05
macroron joined
|
|||
_twitch | hello pmichaud | 15:06 | |
15:06
justatheory joined
|
|||
jnthn | hi, pmichaud | 15:06 | |
15:08
risou_ left
|
|||
lala | guidj0s: I guess it depends what your purpose is, I guess if you want to be on top end of programming you have no choice but to use c++ or some language you can make nice GUI programs/games for windows, but alot more focus on web based stuff than that, I would love to see game programming one day in a higher language with self-installers etc | 15:11 | |
tohen | lala, does GameMaker count? :[ | 15:12 | |
lala | yeah well i doubt gamemaker could make something liek WOW, or final fantasy | 15:13 | |
tohen | you have a fair point there | ||
mberends | hi pmichaud, I've just run test_summary.pl and have the "'plan *;' could become 'plan 101;'" output before me. I'm thinking of putting the actual test counts into the spectests in Synopsis-sized batches. Is that ok with you? | ||
pmichaud | mberends: I'm okay with it... but based on discussion yesterday I'm not sure it'll be needed, unless we're aiming to get "really accurate" spectest sizes | 15:17 | |
mberends | I just hope to improve what we've got a little. 97% accuracy would be nice. | 15:18 | |
lala | hey on an interesting note: game developpers now have the highest divorce rate, sleeping/eating/breathing a game until completion | 15:19 | |
pmichaud | mberends: sounds great, then :-) | ||
guidj0s | does Benchmark work for Perl 6? | 15:21 | |
Juerd | guidj0s: Typeglobs? I'm not sure if Perl 6 even has those. | ||
guidj0s | Juerd: hmmm, ok | 15:22 | |
Juerd | I can't remember having heard of globs in Perl 6 context. | ||
guidj0s | me neither, that's why I asked here tbh :) | ||
tadzik | guidj0s: no one knows, it has no tests | 15:24 | |
guidj0s: here tjs.azalayah.net/ser.html are some (a bit old) tests results for everything from modules.perl6.org | 15:25 | ||
15:48
cogno joined
|
|||
jnthn | TimToady: proto lol($x) { * }; multi lol(Int $x) { 1 }; { multi lol(Str $x) { 2 } }; say lol("cat") # error, or 2? Under the current model, it's an error. Under my first cut implementation at the moment, we go looking for a proto to associate the multi with and just give it to the candidate list that proto will manage, so it'd print 2. | 15:50 | |
TimToady: er, where "the current model" = what Rakudo implements | |||
TimToady: And "my first cut implementation" is my first crack at trying to do the new style multi-dispatch in 6model. | 15:51 | ||
15:51
fod joined
|
|||
dalek | odel: bfac235 | jnthn++ | dotnet/ (2 files): Build signature objects a bit later. This will allow us to add type information to them. |
15:52 | |
jnthn | pmichaud: nqp-rx parses proto-regexen specially rather than falling through multi_declarator rule to get to them. Deliberate or just hysterical raisons? | 15:54 | |
pmichaud | jnthn: deliberate | 15:56 | |
jnthn | pmichaud: OK | ||
pmichaud | jnthn: at least, at the time it was deliberate. it might be possible to work with them falling through. | ||
15:57
justatheory left
|
|||
jnthn | pmichaud: I've no immediate need to seek unification, just noticed it and got curious. | 15:57 | |
15:57
Guest23195 left
|
|||
pmichaud | it's very likely fossil, now that I think of it. Until bacek++ did multis for nqp, we didn't even have a multi_declarator rule, I don't think. | 15:57 | |
jnthn | pmichaud: Yes, that's my guess too. | ||
15:58
masak joined
|
|||
jnthn | pmichaud: How do proto-regexes find all of their variants today, btw? | 15:58 | |
pmichaud | when a protoregex is invoked, it introspects the class to find all of the methods in the protoregex | ||
jnthn | OK | ||
pmichaud | (and caches that information) | ||
jnthn | I'm looking at a push model rather than a pull model at the moment. | ||
pmichaud | ...push model? | 15:59 | |
jnthn | That is, add_multi_method goes looking for a proto that the candidate can be associated with. | ||
And associates it. | |||
Rather than the proto going looking down the tree for candidates. | |||
pmichaud | I'm not sure that quite works for regexes. | ||
jnthn | Oh | ||
It may not for methods either | |||
Hmm. | |||
No, it probably doesn't. :-( | |||
pmichaud | (will have to depart shortly) | 16:00 | |
jnthn | I do think the multi variants maybe want to live in a separate place in the meta-object than everyday methods. | ||
I'll see how things work out. | 16:01 | ||
16:02
cogno left,
justatheory joined
16:03
Su-Shee left
16:09
tylercurtis joined,
tohen left
|
|||
tylercurtis | masak: thanks for reporting those. | 16:10 | |
tylercurtis forgot. | |||
masak | no prob. | ||
16:15
Mahmoud left
16:23
tylercurtis left
16:25
tylercurtis joined,
zulon left
|
|||
masak | lala, guidj0s: hi, new kids on the block! | 16:28 | |
guidj0s | masak: heya ;) | 16:29 | |
masak | just wanted to say that I enjoyed reading your questions, and their answers. | ||
hope you'll like it here. :) | |||
guidj0s | <3 | ||
masak | I see lala++ has a potty mouth. that's not unheard of here, but a bit unusual. I hope e'll stick around, so I can observe whether the channel changes lala, or vice versa. | 16:33 | |
TimToady | protos of any type have to consider both downward context and upward, so the multi defined in the sub-block is not part of the candidate list for the outer call. i.e. the proto may need to manage different candidate lists in different scopes (or different child classes, for proto methods) | 16:38 | |
masak | ok, folks. after a bit of downtime november-wiki.org/ is back up! | ||
TimToady: I got all of that except the part where protos have to consider upward context. to me it looks like only the things in the same scope as or lower than a proto are affected. | 16:40 | ||
TimToady | jnthn, so your example should be an error, as it is now; it's just that this is decided by the proto looking at the appropriate candidate list | ||
jnthn | TimToady: OK. :S | 16:41 | |
TimToady | and in the case of a bare proto like {*} there, it devolves to your current system, except that &lol is allowed to refer to the proto | ||
tadzik | masak: november-wiki.org/Perl_6 works for you? | ||
dalek | odel: f324cbc | jnthn++ | dotnet/runtime/Metamodel/Representations/RakudoCodeRef.cs: Add a slot that we'll be able to stick dispatchees in (where dispatchee = something that a sub that's going to serve as a dispatcher will have in its candidate list). |
||
odel: e21ef65 | jnthn++ | dotnet/compiler/ (2 files): Stash types in signature objects. |
|||
masak tries | |||
dalek | odel: c5ba12f | jnthn++ | dotnet/runtime/Init.cs: Give low level code objects a HOW and a !add_dispatchee method that will add to its dispatchee list. |
||
jnthn | TimToady: *sigh* Took me ages to work out how to get thees things right in the last design. :/ | 16:42 | |
masak | tadzik: no, getting an internal error for that one. | ||
TimToady | S06:126 discusses how the candidate lists are defined | ||
masak | tadzik: November is in need of quite some de-bitrotting these days. I'm glad it runs, but it does so on quite an old Rakudo and with quite a few fixes needed. | ||
tadzik: fwiw, it seems to give an error on all not-found pages. | 16:43 | ||
so it's mostly a question of LTA there, I think. | |||
TimToady | jnthn: maybe think of it this way; instead of an anonymous multi dispatcher, the proto is the name of the multi dispatcher you're going to use | ||
and most of them will be the same dispatcher | 16:44 | ||
jnthn | TimToady: Well, the model I'm pondering at the moment is that every routine has a candidate list that it presides over. | ||
TimToady: For many routines that slot will be null. | 16:45 | ||
rokoteko | howdi. | ||
TimToady | that doesn't seem quite right to me | ||
jnthn | TimToady: Why? | ||
TimToady | lambdas shouldn't care about candidates | ||
jnthn | TimToady: Any routine could be wrapped. | ||
TimToady | only protos have to care anymore | ||
jnthn | TimToady: Huh? | ||
I said *Routine*. | |||
Not Code. | |||
TimToady | ah | ||
jnthn | That was deliberate. :-) | ||
I guess though that this falls apart if somebody tries to wrap a proto... | 16:46 | ||
masak | rokoteko: hi! | ||
TimToady | sorry, distracted... | ||
jnthn | Since they'd both fight over that slot. | ||
TimToady | surely the wrapper is an only around the proto | ||
jnthn | Oh, good point | ||
So the wrapper owns the candidate list. | |||
masak | oh wow. wrapping a proto. | ||
jnthn | Yeah, this could work. | ||
TimToady | that's one of the reasons I wanted &lol to refer to the proto | 16:47 | |
jnthn | The thing is that it can't really refer to just *a* candidate list. | ||
erm | |||
Not the &lol | |||
TimToady | that's correct | ||
jnthn | I mean, I can't have a slot that just holds *a* candidate list. | ||
16:47
cogno joined
|
|||
TimToady | the candidate list it uses still belongs in the scope of the caller somehow | 16:47 | |
jnthn | It needs to have some mapping of handle => candidate list. | ||
Oh, hmm. | |||
guidj0s | TimToady: are you considering anything similar to symbolic references for Perl 6? | ||
16:48
am0c joined
|
|||
TimToady | $::($name) | 16:48 | |
masak | guidj0s: they're in the spec already. | ||
TimToady | it has a separate syntax | ||
jnthn | TimToady: That doesn't feel quite right. | ||
TimToady: I want the same mechanism that we use for multi-method candidate lists at different levels to also work for inner/outer scopes ideally. | 16:49 | ||
16:49
envi^home left
|
|||
jnthn | TimToady: I guess maybe they shouldn't live in the proto though, otherwise we may memory leak. | 16:49 | |
TimToady | you still want to cache them (or at least a reference) with the call | 16:50 | |
jnthn | (e.g. in anonymous subclasses) | ||
Yeah, quite. | |||
As well as the dispatch cache. | |||
TimToady | I'm trying to drive the semantics of nested lexical scopes and inheritance as close together as I can, wrt proto | 16:51 | |
so you can think of inner scopes as derived classes | |||
jnthn | Right, which fits with me wanting the same underlying mechanism for both. | ||
16:52
cogno left
|
|||
jnthn | TimToady: In a sense, we don't only want to invoke the proto with the arguments, we also want to invoke it with the current caller's view of the candidate list or something. | 16:52 | |
Though for objects it's not really caller as such | 16:53 | ||
It's more invocant type | |||
16:53
Trashlord joined
|
|||
TimToady | for sure the candidate list builder needs to know the identity of the target scope/class somehow or other | 16:54 | |
if only to keep a hash of candidate lists per target scope/class | |||
jnthn | I don't think that's a good idea. | 16:55 | |
It'll leak memory on anonymous subclasses that we then GC. | |||
masak | the chief difference between nested scopes and inherited classes is multi inheritance. | ||
TimToady | yes, it should be put into the target object to avoid leaking | ||
16:56
hudnix left
|
|||
jnthn | masak: That's not really relevant here. | 16:56 | |
TimToady | you still have an ordering even under MI | ||
jnthn | masak: With multi-inheritance you have an MRO and can use that linerarization. | ||
masak | jnthn: I suppose so. I'm still thinking about it. | 16:57 | |
TimToady | which is why nextsame can work for either | ||
masak 's brane hurts | |||
I think the two of you are right. it's not a problem with MI. | 16:58 | ||
jnthn | TimToady: Define "the target object" though | ||
TimToady | you're beating your head against a Wall :P | ||
scope or class | |||
jnthn | What's a class? | ||
:-) | |||
Oh | |||
masak makes the sound of one that stops doing that :) | |||
masak goes away to study | |||
jnthn | I wonder if I can shove it in the STable. | 16:59 | |
Yes, I can. | |||
Maybe. | |||
TimToady | what is an STable | ||
jnthn | TimToady: It's a table of stuff that exists per (HOW, REPR) pair | ||
Or at least, per one that we ever instantiate. | |||
TimToady: Internal implementation detail | |||
Rather than Perl 6 space thing | 17:00 | ||
TimToady | assuming each class has a unique .HOW instance, it can go there | ||
jnthn | I'm still not sure that's right though | ||
TimToady | if it's not unique, then some place per-meta-class instance needs to exist | ||
jnthn | Yeah but that's going to play really badly if people want to write prototype-y stuff | ||
TimToady | well, it's probably not in the type object | ||
jnthn | No, it's certainly not in the type object. | 17:01 | |
TimToady | well, a prototype-y knowhow will probably have to stuff it in the actual object | 17:02 | |
jnthn | So are we saying that this lookup needs to be part of the HOW API? | ||
e.g. a meta-object needs to know how to manage these things? | |||
(We're making life a bit harder for the meta-programmer here. OTOH we can always provide this in a role that they can compose.) | 17:03 | ||
TimToady | probably, but I'm fuzzy on the exact handshake looks like | 17:04 | |
*waht | |||
*ha | |||
jnthn | WHAT | ||
Yeah. Hmm. | |||
I guess what is clear from this is that the proto doesn't actually own the candidate list(s). It either just knows how to obtain them, or should be curried with them. | 17:05 | ||
Figuring out how to make this work at all is hard enough without even starting on how to make it really fast... | 17:06 | ||
The other difference between scopes and objects is that in a scope, the candidate list is fixed at compile time, whereas in an object, we could get new candidates monkey-patched in. | 17:07 | ||
TimToady | curry, yum | ||
jnthn | So we'll need to make sure invalidation is done right to. | ||
*too | |||
17:07
molaf joined
|
|||
TimToady | yes, though even there, we can start to guarantee lack of monkeying at CHECK time and finalize classes | 17:07 | |
or at least close them | 17:08 | ||
jnthn | We can close them perhaps. Can't seal 'em though | ||
Well | |||
What happens if I compile some class in a module, close the class, and then somebody uses it from a script? | |||
And monkey patches it from there? | 17:09 | ||
TimToady | aggressive inlining in the absence of declarative pessimization will (I hope) save our bacon someday | ||
this determination is made on an application level | |||
a predefined module may not assume it, or must at least provide both closed and open options | |||
or some way to pry it open again | 17:10 | ||
when I say CHECK time, I mean the CHECK of the main application, not the CHECK of the module | |||
jnthn | Yes but if you pre-compiled the module... | ||
Well, I guess you still have the meta-objects in memory and can twiddle them. | |||
TimToady | then you have to take it into account that you might have to recompile it to be open if someone monkey patches it | 17:11 | |
we don't have to make monkey patching efficient | |||
jnthn | True | ||
TimToady | it's the lack of monkey typing that needs to be detectable at CHECK time and aggressive optimization enabled | 17:12 | |
jnthn | Like, "Pre-compiled modules can close classes. If you use a module and are monkey typing, the pre-compiled version will be ignored and we will always re-compile with source." | ||
TimToady | nobody can close classes, according to spec | ||
only the application as a whole may do so | 17:13 | ||
mere mortal code may only request that a particular class remain open | |||
jnthn | Yes, but the spec says precious little afair about how that plays with pre-compilation. | ||
TimToady | one may certainly precompile both ways on spec, if we want to factor out some optimization to before CHECK time | 17:14 | |
jnthn | By the time you freeze bytecode, didn't you already have that module's CHECK time, though? | ||
TimToady | turning $.foo into $!foo will be a large optmization | ||
when I say CHECK time, I mean the CHECK of the main application, not the CHECK of the module | 17:15 | ||
17:15
felliott__ left
|
|||
jnthn | Anyway, I think I've got a few more hints on what this multi stuff needs to look like. | 17:15 | |
Though more questions than answers yet. | |||
(On how to implement it.) | 17:16 | ||
TimToady | hopefully they're bad questions, meaning the kind I can answer :) | ||
jnthn | It's mostly "how do I factor this", "how do I make this fast" and so on. | ||
TimToady is still thinking about $/ and $! | |||
jnthn | We had to do some trickery in current Rakudo to get closure semantics + multis right, which is yet another thing to try and factor into this. | 17:17 | |
TimToady | to best enable optimization, we have to hang every piece of data at the right spot (kinda like database normalization) and make sure we don't throw away any useful information as to when to optimize/pessimize | 17:18 | |
jnthn | I suspect I should probably try and get the new model in place while doing the meta-model stuff and NQP refactors...otherwise it's just asking for another round of painful refactors later. | 17:19 | |
TimToady | well, in a real sense there are no multis anymore, except as a tag for collection; everything is a lambda down under | ||
17:19
guidj0s left
|
|||
jnthn | Well, yeah, my current model for multis is "go find a place to install this" | 17:19 | |
Rather than "install something in the symbol table right away" | 17:20 | ||
Oh, I wonder | |||
Maybe I can just stick the candidate lists in the lexpad for the lexicals case | |||
So in | |||
TimToady | that's where I thought it would go | 17:21 | |
jnthn | Yeah | ||
I guess I can just pick a weird sigil-y name :-) | |||
TimToady | I was using .<!FOO> for hidden names | ||
Juerd | I can see your hidden name :) | 17:22 | |
jnthn | proto foo($x) { {*} }; multi foo(Int $x) { 1 } | ||
That would actually install two things | |||
The &foo | |||
TimToady | otoh maybe there's a scope object separate from the symbol table | ||
jnthn | And a &!foo-candidates | ||
Or something like that. | |||
TimToady | STD currently has two objects, mostly because p5 doesn't like to mix normal hash with object hash | 17:23 | |
jnthn | Yeah, I heard mixing different types of hash can really mess you up. | ||
Oh, wait...different topics. | |||
ingy | o/ | ||
ingy waves from the Boston->NYC bus | |||
TimToady | well, you can't install the foo-candidates until you have to inner scope | ||
\o | 17:24 | ||
how's my favorite iterant acmeist? | |||
*itinerant | |||
jnthn | TimToady: I was thinking more that a multi in the inner scope would just go and add things in each scope down to the one with the proto in. | ||
er, wait | 17:25 | ||
The other way round | |||
Oh, damm | |||
I see your point. | |||
:| | |||
tylercurtis | rakudo: sub postfix:<?>($thing) { $thing.Bool }; say (::ingy does Iterator)? | 17:26 | |
p6eval | rakudo 928836: OUTPUT«0» | ||
jnthn | TimToady: The language about downward candidates for lexically scoped multis is pretty clear, but what's the upwards bit? | 17:27 | |
TimToady: Is that saying that if I declare a proto foo($x) { * } and a bunch of multis in inner (downward) scopes, then that proto controls them, but also incorporates things from its outer scopes too? | 17:28 | ||
proto foo($x) { * }; multi foo(Int $x) { 1 }; { proto foo($x) { * }; multi foo($x) { 2 }; foo(); } # 1 or 2? | |||
And | 17:29 | ||
oops, above I meant foo(42) | |||
And | |||
proto foo($x) { * }; multi foo(Int $x) { 1 }; { proto foo($x) { * }; multi foo(Str $x) { 2 }; foo(42); } # 1 or error? | |||
That is, is the proto marking the end of an "extent" of scopes, and hiding the ones beneath it? | 17:30 | ||
From S06 I'm guessing 1 and 1. | |||
masak | I thought a proto was like saying "I'll handle this scope and those inside it". | 17:31 | |
can dispatch reach above a declared proto? | |||
jnthn | masak: And thus hides the things above it? | ||
tylercurtis would expect error, from a intuitive perspective. | |||
jnthn | masak: I could argue for that. | ||
I'd actually *like* that. | 17:32 | ||
masak | jnthn: that's how I grokked it so far. | ||
jnthn: thus, a proto is very much like an only. except that it has multies. :) | |||
jnthn | masak: I'm not sure it's what S06 says though. | ||
masak | neither am I. | ||
jnthn | We used the term "managed" loosely above to indicate the set of C<multi>s in | ||
question; the "managed set" is more accurately defined as the intersection | |||
of all the C<multi>s in the C<proto>'s downward scope with all the C<multi>s that | |||
are visible to the caller's upward-looking scope. | |||
-- love, S06 | |||
masak | I think we're in agreement. you, me, and S06. | 17:33 | |
jnthn | Erm, huh? | ||
masak | so here's how I read it. | ||
you have two cones going on. | |||
one cone is the things downwards from the proto. | |||
the other cone is the things upwards from where you're calling. | |||
the set of multis in the dispatch is simply the intersection of those two cones. | |||
jnthn | You're saying that | 17:34 | |
masak | in a scopes setting, the latter cone is boring. think of it as a line. in a MI setting, the latter cone is interesting. | ||
sorry for somewhat mixed metaphors. :) | |||
I love the fact that I think I grok this. | |||
jnthn | Grr...it's hard to come up with an example...wait a moment... | 17:35 | |
tylercurtis | On the topic of multis, what does "Named arguments that bind to positionals in the proto sig will become positionals for all subsequent calls to its managed multis." mean. How does a named argument bind to a positional? | 17:36 | |
masak | rakudo: sub foo($x) { say $x }; foo( x => "OH HAI" ) | 17:37 | |
p6eval | rakudo 928836: OUTPUT«OH HAI» | ||
masak | tylercurtis: does that answer your question? | ||
tylercurtis | masak: yes, it does. I knew that that sort of thing applied to BUILD, but I had no idea it worked in general. | 17:38 | |
masak | tylercurtis: BUILD contains absolutely no magic, save for being automatically called by .bless via BUILDALL. | ||
jnthn | OK, I guess what I'm curious about is if there's a case where the caller's upward looking scope is ever also not the multi we're calling's upward looking scope. | 17:39 | |
masak | can't think of any. | 17:40 | |
because in order for us to see the multi we're calling, we have to be below it. | |||
TimToady | the managed list is the intersection of downward and upward views, not the union | ||
jnthn | TimToady: I think I need a few examples. First, what are the outputs of the two things I pasted above? | 17:41 | |
17:42
xinming left
|
|||
TimToady | 2 and error | 17:42 | |
jnthn | TimToady: OK, good. :-) | 17:43 | |
TimToady: But I'm still struggling a little on what the "downward and upward" bits mean. | |||
masak | yes; good. | ||
jnthn: the proto defines things downward. multis are visible upward. | 17:44 | ||
jnthn | TimToady: Because as I'm seeing it, the multi candidates that you might end up calling are those situated between your current scope and the outer scope containing the proto, inclusive. | ||
Which is kind of one "cone". | |||
TimToady | multis don't look, they're passive | ||
the call looks upward, and the proto looks downward | |||
and multies they both see are valid candidates | |||
jnthn | Aha, OK | 17:45 | |
That makes it much less foncusing. | |||
oh ffs | |||
*confusing | |||
.oO( I guess one coffee this morning wasn't enough... ) |
|||
masak | "funcusing" is when you try to focus, and almost succeed :) | ||
er, *foncusing | 17:46 | ||
jnthn | :P | ||
masak | -Ofuncusing | ||
jnthn | -Ofuncusing | ||
... | |||
masak | \o/ :) | ||
jnthn: the upwards cone is a line, because the scope inclusion relation is one-to-many. that's why I thought MI would be more problematic, because it's many-to-many and creates funnier upwards cones. | 17:47 | ||
jnthn | TimToady: OK, I think I see what you mean by intersecting views now | 17:48 | |
masak | but it's admittedly not more problematic, because of the MRO. | ||
jnthn | TimToady: Though I guess it's manageable in a sense by the call "collecting" all of the multis it can see on its way to the proto, and then saying "oh hey, I found these candidates, how about you pick one for me?" | ||
masak | it's a really pretty interaction between the calling scope and the proto. hopefully one that can be cached at scope level, too. | 17:50 | |
ingy | TimToady: doing well thanks! I think it's my net connection that is itinerant :] | ||
17:50
Mowah joined
|
|||
masak | I wonder if anyone is ever going to make use of the fact that multis define and undefine themselves at scope limits. in serious code, I mean. | 17:51 | |
masak stops babbling and goes back to studying again | |||
TimToady | for overloadings of operators, perhaps | 17:52 | |
drums & | |||
ingy | I had a few acmeist days of hacking with path++ nd sartak++ in which they knocked my pegex back a few pegs, but with a little backtracking it should all be fine... | ||
*patch++ | 17:53 | ||
17:54
ggoebel joined
17:55
jhuni joined
|
|||
ggoebel | I've got 2 1/2 hours of "me" time... where does one get niezca? instructions? website? wiki? | 17:55 | |
[Coke] | is rakudo having any trouble with compiler infrastructure bleeding into user-visible areas? | 17:56 | |
tylercurtis | Is the invocant at all privileged over the other parameters in multimethod dispatch? For example, "class A { multi method foo(::B $b) { #`(do I need a proto, btw?) 1 } }; class B is A { multi method foo(A $a) { 2 } }; say B.new.foo(B.new);" Is that an error or 2? | ||
rakudo: .say for ClassHOW.^methods | |||
p6eval | rakudo 928836: OUTPUT«Method 'methods' not found for invocant of class '' in main program body at line 22:/tmp/iBifVtQvVm» | ||
tylercurtis | [Coke]: ^^ | ||
jnthn | ClassHOW isn't leakage - it should be there. | 17:57 | |
mberends | ggoebel: github.com/sorear/niecza | ||
17:57
colomon left
|
|||
tylercurtis | jnthn: Right. But shouldn't it be introspectable, ideally? | 17:57 | |
jnthn | tylercurtis: Yes | ||
tylercurtis: (6model will get that right.) | |||
[Coke] | For example, in partcl, I can see the Grammar in the top level Tcl namespace, which I shouldn't. | 17:58 | |
tylercurtis | rakudo: say Perl6::Compiler; say PAST::Compiler; say PAST::Block.new | ||
p6eval | rakudo 928836: OUTPUT«Perl6::Compiler()PAST::Compiler()Capture[0x5a77490]» | ||
jnthn | [Coke]: Yeah, we have that too. | ||
As tylercurtis just showed | |||
ggoebel | mberends: thanks | 17:59 | |
pmichaud | in rakudo's case, Perl6::Compiler is as much feature as bug, though. | ||
jnthn | True :-) | ||
But PAST is harder to argue. ;-) | |||
[Coke] | is there a way to force "module" in nqp to be absolute instead of relative to the hll? | 18:00 | |
pmichaud | it should be very possible to get PAST and the like to live in their own private hll namespace -- just nobody's done it yet. | ||
jnthn | tylercurtis: (multi) At the moment we always look class by class up the hierarchy. | 18:01 | |
tylercurtis: In the future, we will look at all candidates between the invocant type and the nearest proto. | |||
And yes, you will have to write a proto. | |||
ggoebel | niezca readme states that mono v2.6.4 is recommended. Should I assume that the current v2.6.7 is discouraged? | ||
dalek | odel: ab1b7bc | ++ | java/runtime/ (8 files): globally rename IRakudoObject to RakudoObject etc, catch up with some dotnet/ changes |
||
pmichaud | [Coke]: (absolute instead of hll-relative) no, but one could put a .HLL directive before the line of the compiler that includes the NQP-generated .pir files | ||
that would cause all of the methods to appear in that alternate HLL space | 18:02 | ||
I've also considered having a 'use hll' pragma but not gotten there yet. | |||
jnthn | mberends++ # karma fel? | ||
mberends seems to have gone anonymous | |||
masak | or, as we say in automata theory, ε | 18:04 | |
[Coke] blearghs. | 18:05 | ||
it's not a blocker, it's just annoying. I'll see what I can do to route around. | |||
masak | [Coke]: you just summarized my past 2 years with Rakudo. :P | 18:09 | |
pmichaud | and my past 4-5 years with Parrot. :P | 18:14 | |
18:15
justatheory left
18:17
am0c left,
colomon joined
|
|||
jnthn | o/ colomon | 18:19 | |
[Coke] | I am doubly annoyed as I had already worked around most of this stuff BEFORE pct/nqp. =-) | ||
colomon | \o | ||
ggoebel | scruffy:~/src/niecza ggoebel$ xbuild | 18:23 | |
dyld: Library not loaded: /usr/lib/libiconv.2.dylib | |||
Referenced from: /Library/Frameworks/Mono.framework/Versions/2.6.7/bin/mono | |||
Reason: Incompatible library version: mono requires version 7.0.0 or later, but libiconv.2.dylib provides version 5.0.0 | |||
scruffy:~/src/niecza ggoebel$ xbuild | |||
dyld: Library not loaded: /usr/lib/libiconv.2.dylib | |||
Referenced from: /Library/Frameworks/Mono.framework/Versions/2.6.7/bin/mono | |||
Reason: Incompatible library version: mono requires version 7.0.0 or later, but libiconv.2.dylib provides version 5.0.0 | |||
getting an xbuild libiconv error trying to build niecza... pastebin.com/eKjE3Bva | |||
on osx 10.4 | |||
sorry about the double paste... | |||
mberends | ggoebel: so your libiconv is too old | 18:26 | |
ggoebel | mberends: figured... installing current (1.13.1) from www.gnu.org/software/libiconv/#TOCdownloading | 18:29 | |
18:30
justatheory joined
|
|||
ggoebel | still trying to compile niecza. With updated libiconv I now get: | 18:33 | |
$xbuild | |||
Bus Error | |||
thoughts? | |||
diakopter | hm | 18:34 | |
18:36
maja joined
18:37
justatheory left,
cogno joined
18:38
maja left
|
|||
ggoebel | downgrading mono to 2.6.4... | 18:38 | |
masak | ggoebel: generally, using a nopaste service is appreciated. just so you know till next time. :) | 18:44 | |
today's word: dehierarchicalization. that's what roles do. :) | 18:45 | ||
gfldex stares in awe at the new word | 18:46 | ||
masak | I wasn't aware that you could summarize what roles do in one word. but apparently you can. | 18:47 | |
jnthn | So ar people that promote multiple inheritance instead antidehierachicalizationists? | 18:48 | |
tylercurtis | I think it's more accurate to suggest that MI's proponents are anticommutativists. | ||
Or linearizationalists, if you prefer. | |||
masak | jnthn: only if they're aware of the dehierarchicalization that roles provide and reject it. | 18:49 | |
mberends | that word looks a little bit shorter each time you read it ;) | 18:50 | |
jnthn | .oO( must use this in a talk ) |
18:51 | |
18:51
cogno left
|
|||
tylercurtis | masak: I'm not sure I agree that roles dehierarchicalize. You can have hierarchies of roles. The difference is that hierarchies of roles have sane semantics. | 18:52 | |
masak | tylercurtis: well, some kinds of hierarchies disappear, and other kinds remain when using roles. | 18:53 | |
jnthn | tylercurtis: Yes, but the hierarchy has to be collapsed before you cna ever use any of the things in the roles. | ||
That's what happens in role compositon. | |||
And you can't call a method in a role without it being composed into a class first. | |||
masak | it's the role composition that does the actual dehierarchicalization. | ||
jnthn | Right. | ||
masak | I've stopped typing out the word now, and just paste it in. :) | 18:54 | |
jnthn | So yes, you can have a hierarchy of roles, but the thing that makes roles interesting is the composition algorithm. | ||
masak | is it the ClassHOW that does the composition, or the RoleHOW? or neither? | ||
jnthn | Neither. | ||
ggoebel | phenny: tell sorear two suggestions for niecza's readme: 1) state the minimum libiconv requirement (I installed 1.13.1 from www.gnu.org/software/libiconv/) and 2) Mention that mono v2.6.4 isn't just a recommendation (v2.6.7 is known to have problems on OSX 10.4) | 18:55 | |
phenny | ggoebel: I'll pass that on when sorear is around. | ||
jnthn | The composer is factored out. | ||
.oO( Like in a lot of pop music. ) |
|||
tylercurtis | Right. I think the thing to focus on is the behavior of composition and sum, though, not so much the lack of hierarchies, since there is still the option of conceptual hierarchies. | ||
jnthn | tylercurtis: But the result of composition is to flatten the hierarchy out. Thus the name "flattening composition". | 18:56 | |
gfldex | can we adapt this for perl 6 propaganda? gfldex.files.wordpress.com/2010/08/....jpg?w=436 | ||
jnthn | And I think that is in many senses what makes roles interesting. | ||
By the time you get to the point of dispatch, there's no hierarchy to consider and the fact that the methods came from roles is a mere historical artefact, mostly interesting to the introspectionist. | 18:57 | ||
ggoebel | getting further compiling niecza on OSX 10.4. Now I'm getting 'mono --aot obj/Kernel.dll' exited with code:1 (pastebin.com/nrG4Kji1) | ||
mberends | dehierarchicalizationintrospectionist # copy, paste, copy, paste | 18:58 | |
jnthn | gfldex: we scantily woman dressed use not should! | 18:59 | |
ggoebel | phenny: tell sorear I get a "Bus error" executing xbuild on osx 10.4 with mono 2.6.7... which goes away with a downgrade to 2.6.4 | ||
phenny | ggoebel: I'll pass that on when sorear is around. | ||
jnthn | .oO( it's actually quite hard to write English in reverse polish notation... ) |
19:00 | |
.oO( "ovip mam aj" is my favorite reverse polish saying... ) |
19:01 | ||
tylercurtis | I think the commutativity and associativity of trait sum is more important. If roles flattened but role sum linearized instead of being commutative, roles would be significantly less useful, IMO. | ||
jnthn | Yes, that is also important too. | 19:02 | |
masak | jnthn++ # real reverse Polish! | 19:03 | |
19:04
offby1 joined,
_twitch left
|
|||
tylercurtis | I think that I'd prefer roles that didn't flatten to roles that linearized. Of course, roles that flatten and don't linearize are even better. :) | 19:05 | |
offby1 | I'm playing with rakudo "Pisa" at the command line, and notice that (10 * 10).WHAT => Int(), as I'd expect, but (109999 * 109999).WHAT => Num, which is not what I'd expected. How can I force the multiplication to return an exact integer? | ||
19:05
cono left
|
|||
colomon | offby1: you cannot | 19:05 | |
offby1 | oh. | ||
jnthn | offby1: We don't have big-int support yet | 19:06 | |
colomon | right now in Rakudo, Ints are limited to 32-bits of precision. | ||
offby1 | jnthn: oh. | ||
bummer. | |||
colomon | (though occasionally 64-bits sneaks through on 64-bit machines.) | ||
jnthn | offby1: So if they overflow we promote 'em to Nums. That should change at some point. | ||
offby1 | ah well. | ||
thanks | |||
tylercurtis | colomon: as long as you don't perform any actual operations on them. | ||
19:06
offby1 left
|
|||
pmichaud | s/should/will | 19:06 | |
19:06
cono joined
|
|||
ggoebel | Found a niecza reference to mono AOT failures in irc logs at (irclog.perlgeek.de/perl6/2010-08-06#i_2670473) | 19:06 | |
penny tell sorear One more osx addition for readme... I got neicza to build without error using: xbuild /property:UseAOT=N | 19:07 | ||
masak | "that should change at some point" is in some ways a dangerous stance. we might risk ending up with a spec that says one thing, and a number of implementations that do another, simpler thing. | ||
may it'd be better in that sense for Rakudo to die on int overflow. | 19:08 | ||
jnthn | masak: That fails the "being useful" test. :-) | ||
gfldex | ggoebel: you misspelled phenny | ||
masak | in some cases demoting to nums can be a lot less useful than giving fair warning. | 19:09 | |
ggoebel | phenny tell sorear One more osx addition for readme... I got neicza to build without error using: xbuild /property:UseAOT=N | ||
gfldex: thanks | |||
success! | |||
masak | jnthn: it's not like you won't be able to represent large Nums under such a regime. just multiply by 1.0 | ||
colomon | masak: nope, 1.0 is a Rat | 19:10 | |
masak | oh, indeed. | ||
well, .Num, then. | |||
rakudo: say 5.Num.WHAT; say 5.Num | 19:11 | ||
p6eval | rakudo 928836: OUTPUT«Num()5» | ||
masak | rakudo: say 5.Num.perl | ||
p6eval | rakudo 928836: OUTPUT«5» | ||
masak | hm. wonder if that should be something else. | ||
colomon | .perl doesn't work well on numbers. | ||
I believe that's already in RT | 19:12 | ||
masak | std: FIRST {} | 19:14 | |
p6eval | std 32080: OUTPUT«ok 00:01 115m» | ||
masak | std: if 5 { FIRST {} } | 19:15 | |
p6eval | std 32080: OUTPUT«ok 00:03 116m» | ||
masak | TimToady: shouldn't the first be illegal in a non-loopy setting, and the second always? | ||
decommute & | |||
19:15
masak left
19:19
wamba joined
19:22
Mowah left
19:26
tadzik left
19:27
M_o_C joined
19:31
jhuni left
|
|||
gfldex | $gfldex.blog.post('gfldex.wordpress.com/2010/08/22/cal...perl-6/'); | 19:31 | |
dalek | odel: 98196e3 | jnthn++ | dotnet/ (2 files): Stash capture in current context. Also fix a viviself code-gen bug. |
19:34 | |
odel: 7d9fec6 | jnthn++ | dotnet/runtime/Metamodel/SharedTable.cs: Fix bug noticed by mberends++. |
|||
odel: a389552 | jnthn++ | dotnet/ (7 files): A fresh start at prototyping the new multi-dispatch, after discussions with TimToady++. Nothing working yet, but this starts us storing the candidates per scope and stubs in some logic for us to go looking for them. Needs a first crack at lists before we can make this work at all, though. |
|||
19:36
tadzik joined
19:44
patrickas joined
|
|||
patrickas | Ola! | 19:45 | |
tadzik | hello! | 19:46 | |
patrickas | tadzik: what's up? | 19:47 | |
do you have a page with the speed tests you were doing ? I was curious about the tests and the pseed improv for each one | |||
tadzik | patrickas: fine, just updated/updating my system :) | 19:48 | |
patrickas | s/pseed/speed/ | ||
ggoebel | Are announcements for development releases of Rakudo gone by the wayside now that R* releases are coming out? I.e. there is no release announcement for rakudo development release #32 at www.rakudo.org | 19:49 | |
tadzik | ggoebel: only Star will be announced now | ||
it's the main Marketing Hit now :) | 19:50 | ||
jnthn | ggoebel: The compiler releases are just announced on the perl6-compiler mailing list now; the Star releases will be announced more widely, as tadzik mentioned. | 19:51 | |
ggoebel: Trying to avoid confusing people with too many release announcements. :-) | |||
patrickas | jnthn++ (blog post), can't wait for all the goodies you'll be working on to land :-) | 19:52 | |
tadzik | a blog post? | ||
jnthn: mind sharing a link? | 19:57 | ||
moritz_ | planetsix.perl.org | 19:58 | |
tadzik | thanks moritz_++ | ||
jnthn | tadzik: 6guts.wordpress.com/2010/08/22/raku...oad-ahead/ | ||
oh, also where moritz_++ said :-) | |||
moritz_ | planetsix is a must-read for 6ers :-) | 20:01 | |
jnthn | Aye | 20:02 | |
dalek | odel: eae223f | jnthn++ | / (4 files): Add a first cut of a P6list representation and a list sub that makes one (hardcoded rather than in the setting for now). Stub in NQPList in the setting; expect we'll base NQPArray on this representation too. |
20:04 | |
odel: e1bf4d3 | jnthn++ | dotnet/compiler/Actions.pm: Name fix. Seems that we now manage to build per-scope candidate lists. |
|||
20:07
jaldhar left,
jaldhar joined
20:11
masak joined
|
|||
tadzik | jnthn: nice post :) Though, I'm curious about one thing. You mention putting some things into compile time when possible. I remember Allison Randall's Parrot talk, when she said that the way to optimize dynamic languages is to make them more dynamic, rather than more static. How does it go with your approach, can I see your opinion here? | 20:13 | |
masak | was that allison's point? I'm not sure it was... | 20:15 | |
tadzik | she mentioned that, she was also talking about late evaluation and stuff. I remember it for I was quite suprised with it | ||
masak | I think one of the things in Perl 6 that might be slightly revolutionary is a kind of dynamic-when-necessary/static-when-possible thinking. | 20:20 | |
a bit like the grammar engine switches between declarative and procedural behind the scenes, static and dynamic bits might be interchanged behind the scenes as well. | 20:21 | ||
patrickas | tadzik: sorry I got ditracted ... yes I read the post on planetsix too .... | 20:23 | |
jnthn | tadzik: I think the "work done at compile time is work that doesn't need to be done at runtime" mantra still holds up, and a lot of what I'm advocating is generating better code when compiling our dynamic language rather than pushing the language itself in a more static direction. It's true that making information available to the runtime to let it do dynamic optimization is a good think, and I'm not proposing we take that information away (as if we could anyway, si | ||
*good thing | 20:24 | ||
masak | 'anyway, si' | ||
truncated. | |||
jnthn | ", since everything is runtime introspectable in Perl 6). | ||
Everything is a slight exaggeration, but a heck of a lot is. :-) | |||
masak | you tl;dr people should either adapt to IRC or, you know, write emails. :P | ||
jnthn | masak: I joined the Twitter School of Brevity this year, I'm trying. :P | 20:26 | |
masak | omit needless, you know, words. :) | 20:28 | |
jnthn | tadzik: Yes. No. | ||
;-) | |||
masak | heh. :) | 20:29 | |
patrickas often needed words. | |||
masak | patrickas: accidentally? :) | ||
jnthn | The *whole* words? | ||
patrickas | maska: just not this time :-p | ||
masak | you accidentally my nick, too :P | 20:30 | |
tadzik | :) | ||
patrickas | there must be a bug in my tab completion :-P | ||
20:31
cheeps joined
|
|||
masak | for some reason that made me think about routine protos again. strange association. | 20:32 | |
20:34
ggoebel left
|
|||
jnthn looks forward to runtime pls | 20:35 | ||
tadzik | I see proto, pls, but I guess it's not about module installation :) | ||
masak | I think that was the attempted pun. :P | 20:36 | |
tadzik | with #perl6 came #pun6 | 20:37 | |
masak | well, we do have a tradition of optimizing for pun in here. | ||
tadzik | -Opun | 20:38 | |
jnthn | Yeah, we're very -Opun to them. | ||
masak | haven't had any punic wars yet, though. | ||
tadzik | but we have puntastic conversations | 20:39 | |
masak | yeah, they're punderful. | ||
sorear | good * #perl6 | 20:44 | |
phenny | sorear: 18:55Z <ggoebel> tell sorear two suggestions for niecza's readme: 1) state the minimum libiconv requirement (I installed 1.13.1 from www.gnu.org/software/libiconv/) and 2) Mention that mono v2.6.4 isn't just a recommendation (v2.6.7 is known to have problems on OSX 10.4) | ||
sorear: 18:59Z <ggoebel> tell sorear I get a "Bus error" executing xbuild on osx 10.4 with mono 2.6.7... which goes away with a downgrade to 2.6.4 | |||
jnthn | *, sorear | 20:45 | |
masak | **, sorear | 20:46 | |
I have a question. is there a need for a special "package lexpad" containing 'our'-declared variables, or can the package lexpad simply be equated to the topmost lexpad in the package? | 20:48 | ||
my suspicion is the latter, but I might be missing something. | |||
pmichaud | "omit needless^W words" | 20:51 | |
masak | "needless" isn't needless. | 20:52 | |
pmichaud | the package lexpad can't be the same as the top most lexical | ||
module XYZ { my sub abc() { ... } }; # abc should not appear in the package | |||
masak | oh! | 20:53 | |
right. | |||
so, separate one, then. | |||
jnthn | Additionally, lexpads are meant to be static by the time we hit runtime, and you're allowed to shove stuff into the package dynamically. Not quite sure how those two hold together. | ||
pmichaud | well, module XYZ { ... } creates a lexical XYZ entry that holds the package entries | ||
jnthn | Aha! | 20:54 | |
pmichaud | and it's just a hash, really. | ||
jnthn | And the XYZ entry is a stash or somehting | ||
OK | |||
pmichaud | and rakudo's use of Parrot NameSpace PMCs hopefully goes away at some point. | ||
either that or the namespace PMCs just get anonymous internal names | 20:55 | ||
jnthn | *nod* | ||
heh | |||
Rakudo's development plan: "use of Parrot <INSERT FEATURE HERE> goes away" ;-) | 20:56 | ||
But not the GC. :P | |||
masak | does inserting the package lexpad below the outside lexpad (and above the topmost lexpad) make sense? that way, Yapsi wouldn't need any special opcodes for doing 'our'-variable lookups. | 20:57 | |
hm, not sure that question has a boolean answer. | |||
jnthn | 0.5 :-) | 20:58 | |
pmichaud | the package lexpad is an entry in the outside lexpad, yes. | ||
I'm not sure it encapsulates the nested lexpad, though. | |||
masak | hm. | ||
if it doesn't, I don't really see how it's visible from inside the package. | 20:59 | ||
I've more or less convinced myself that sandwiching it between outer and topmost is what I want to do for Yapsi. | |||
pmichaud | our &xyz can make an entry in both the package and in the lexical. | 21:00 | |
this is what rakudo does now. | |||
we have to do similar things for methods already, too. | |||
masak | sure. it makes entries in both. | ||
and methods make entries in two places, too. | |||
(as you said) | |||
pmichaud | by having entries in both, that's how it's visible inside the package | ||
masak | hm, indeed. | 21:01 | |
no need to have the package lexpad visible from inside. | |||
pmichaud | anyway, sandwiching might work too. haven't quite gotten to that point in Rakudo thinking yet. And it can get a bit tricky with multis. | ||
masak | no need to sandwich it in, either. it can sit in limbo outside the tree of scopes. | ||
pmichaud | oh, I know why it perhaps shouldn't (or should) be visible: | 21:02 | |
my $x = 'lexical'; module XYZ { say $x; { our $x = 'package'; } } | |||
masak | ...yes? | 21:03 | |
pmichaud | I'm pretty sure "say $x" needs to grab the 'lexical' $x, not the one that might be "sandwiched" in a package. | ||
masak | of course. | ||
that falls out from ordinary scope nesting and shadowing. | |||
innermost block binds its lexical to the container in the package lexpad. | |||
so, that speaks out against sandwiching. | 21:04 | ||
pmichaud++ | |||
21:17
ggoebel joined
|
|||
sorear | hello ggoebel | 21:18 | |
21:29
patrickas left
|
|||
sorear | ggoebel: x86 or ppc? | 21:35 | |
pugssvn | r32081 | mberends++ | replace plan *; with number of tests | 21:36 | |
masak | the eradication of whatever for the betterment of statistics. | 21:37 | |
I'm thinking maybe there's a lesson to be learned here. though perhaps not. | |||
jnthn | There's cake, dammed cake and statistics. :-) | 21:40 | |
colomon | mmmmm, statistics. | ||
masak | lol | ||
I blogged our discussion of 'our' scoping. use.perl.org/~masak/journal/40511 | 21:41 | ||
jnthn: by the way, I made pizza today. trying to recreate the one I had in Bologna. | |||
jnthn | masak: How did it work out? | ||
masak | better than I had feared. I know which knobs to tweak next time. | 21:42 | |
(it was good) | |||
(but not the same) | |||
21:42
lasse_ left
|
|||
masak | Mozzarella di Buffala is a scary thing. all I know is that now the one I bought is gone, and I need, somehow, to get another one. | 21:43 | |
colomon | it says something about what I've been cooking lately that I don't even know if I can get fresh mozz in town. :( | 21:45 | |
masak | having arrived back home from Italy, that's one of the first things I found out. | 21:46 | |
turns out one place in town haz it. | |||
21:46
lichtkind joined
|
|||
colomon | there's one place in town that probably does. | 21:47 | |
but I have to make it by their crazy single malt collection to find out. | |||
;) | |||
masak | jnthn: btw, I think in the slide with the first code sample in www.jnthn.net/papers/2010-nlpw-metamodels.pdf , $area is missing a bang ('!'). | ||
colomon | (they have three different bottlings of Talisker! I can't afford any of them!) | ||
masak | jnthn: or can that be left out nowadays? | 21:48 | |
jnthn | masak: oh noes, you're right | ||
masak | jnthn: if it can, I hereby declare that sloppy coding :P | ||
jnthn | masak: I was distracted by the flava. :-) | ||
masak | :0 | ||
:) | |||
jnthn | That talk is 10 minutes of joking around and 5 minutes of actually talking about meta-models. :-) | 21:49 | |
masak | that's a decent proportion. | ||
jnthn | :P | ||
21:49
payload joined
|
|||
jnthn | Maybe I should submit it for OSDC.fr | 21:49 | |
masak thinks so | 21:50 | ||
I'm thinking I might submit one 20min talk about Druid, and one 40min talk about Yapsi. | 21:53 | ||
but not decided yet. | |||
it's for a relatively non-Perl audience, so the Yapsi one might not be advisable. | |||
masak sleeps | 21:55 | ||
21:55
payload left,
masak left
|
|||
dalek | odel: 2d77d23 | jnthn++ | dotnet/runtime/Runtime/ (4 files): A little baby multi-dispatcher is born. It hasn't learned to do topological sorting yet, but it has the organs that will allow it to do so some day soon. :-) |
21:55 | |
22:03
wamba left
|
|||
sorear watches jnthn race ahead | 22:03 | ||
jnthn | sorear: Heh. Though given I'm caching *nothing* at the moment, the runtime is hardly going to race anywhere yet. :-) | 22:06 | |
pugssvn | r32082 | mberends++ | replace plan *; with number of tests S03 | 22:08 | |
colomon | mberends++ | 22:09 | |
mberends | S32 or bust! | 22:10 | |
sorear | jnthn: You just beat me to multi-dispatch. | 22:14 | |
22:14
Gothmog_ left
22:19
shade\ left
22:20
shade\ joined
|
|||
pugssvn | r32083 | mberends++ | replace plan *; with number of tests S03-S06 | 22:20 | |
22:24
macroron left
|
|||
pugssvn | r32084 | mberends++ | replace plan *; with number of tests S09-S16 | 22:26 | |
r32085 | mberends++ | replace plan *; with number of tests S32 | 22:31 | ||
r32086 | mberends++ | replace plan *; with number of tests integration/ | 22:34 | ||
r32087 | mberends++ | replace plan *; with number of tests split.t | 22:36 | ||
22:40
drbean joined
22:43
M_o_C left
|
|||
dalek | kudo: b958a10 | ++ | tools/test_summary.pl: [tools/test_summary.pl] add S19 to the list of synopses being tested |
22:45 | |
mberends | hmm, ack still finds many 'plan *' lines in t/spec, so they must be files that are not being called from spectest.data. I'll look at them later, jnthn++ has put me on a series of turtles to translate into Java first. | 22:46 | |
all: if cases of (tested > spec) arise, please let me know, I'm keen to get test_summary.pl as accurate and useful as possible. | 22:49 | ||
22:51
hudnix joined,
cggoebel joined
22:52
ggoebel left
22:59
jedai_ left,
gfldex left,
gfldex joined,
jedai joined
|
|||
jnthn | Sheesh, even a crappy cache-less multi dispatcher beats the hell out of doing coercions. | 23:09 | |
cggoebel | phenny tell sorear: x86... One more osx addition for readme... I got neicza to build without error using: xbuild /property:UseAOT=N | 23:10 | |
phenny tell sorear x86... One more osx addition for readme... I got neicza to build without error using: xbuild /property:UseAOT=N | |||
23:11
lestrrat is now known as lest_away
|
|||
jnthn | cggoebel: You need a colon after the phenny | 23:11 | |
dalek | odel: 8876bee | jnthn++ | dotnet/ (2 files): Refactors to get signatures built in the right lexical scope (e.g. so they find the types in the right lexical scope). |
23:16 | |
odel: 10019ac | jnthn++ | common/NQP/NQPSetting.pm: Start to add multi variants to the NQPSetting. Seems that even though we've no inlining or caching, we still manage to win over the coercions from before. |
|||
tylercurtis | jnthn: I started working on a Go runtime for your prototype. Unfortunately, I can't figure out how to sanely write a Makefile for complicated Go projects. Also, Go doesn't support dynamic loading so I'm not really sure how I could load a setting anyway. | ||
jnthn | tylercurtis: Oh. :-( | ||
tylercurtis | Oh, well. It's been informative. :) | ||
23:16
tadzik left
|
|||
jnthn | Well, I guess that approach...doesn't Go. :-/ | 23:16 | |
Yes, having to work out early on how to handle having a setting is kind of a man or boy test for targets. | 23:17 | ||
23:17
orafu left
|
|||
jnthn | I wonder how much mberends++ will have at that point. :-) | 23:17 | |
23:17
orafu joined
|
|||
sorear | there's something kind of funny about an IRC discussion mediated entirely by tellbots. | 23:23 | |
jnthn | Email is just not cool though. ;-) | 23:24 | |
sorear | I thought the cool kids were using Twitter and SMS these days | 23:27 | |
23:27
Trashlord left
|
|||
jnthn | Oh, heck knows. I'm just not cool enough any more. :-) | 23:28 | |
tylercurtis | ingy: Are you around? | ||
23:34
moritz__ joined,
moritz_ left
|
|||
dalek | odel: 3446bc2 | jnthn++ | dotnet/runtime/ (3 files): Optimize a couple of hot-paths, also reducing in less code. :-) |
23:53 | |
sorear | Maybe I should go back into the modules business. | 23:58 | |
dalek | ecza: 16c4aaa | sorear++ | / (2 files): A few tweaks for ggoebel (Who may not rest until he actually reports these bugs) |