»ö« Welcome to Perl 6! | perl6.org/ | evalbot usage: 'perl6: say 3;' or rakudo:, niecza:, std:, or /msg p6eval perl6: ... | irclog: irc.perl6.org/ | UTF-8 is our friend!
Set by sorear on 4 February 2011.
jnthn Guess I can read "within its scope" both ways... :) 00:00
masak here's the mental model I had of things. 00:01
jnthn masak: But see the langauge on a proto's "managed set" later on in S06.
masak yeah, I'm reading it now. 00:02
I see 'proto' and 'only' as the same shape of thing. 00:03
'multi' is nowadays a kind of subordinate to 'proto'.
so each time you do 'proto' or 'only', you define a new thing, hiding the old thing. 00:04
jnthn right, writing only or proto would always give you one of those
masak in explaining this, I think I see now why newbee's sub should become a multi :)
masak (because there's a proto in the setting, so 'only' isn't the default for infix:<+>) 00:05
jnthn I'm mostly curious about whether a proto means that all the places that can see it default to multi for that name.
masak right. I think it might.
in which case I agree fully.
jnthn Yeah, that's how I'd understood it so far.
masak that's actually quite nice.
jnthn Yeah, I think so.
masak because it'd be what people expect.
basically they can use multis without having to understand protos and multis :) 00:06
mdrc hello, where to get the sea-cow grammar? 00:12
Tene mdrc: eh?
mdrc the light variety of perl
mdrc minus lazy classes etc. 00:13
Tene I've never heard of that, and I'm having trouble finding anything about it on google.
mdrc me to 00:14
Tene can you give me a link?
mdrc only by the name. i don't know if the version is publically available 00:14
Tene Where did you hear about this? Can you tell me more about it? 00:15
mdrc might have been a dream. at least the probability is there 00:16
Tene Probably a dream. :)
What was it in your dream, then? I'm curious now.
mdrc some stripped version but without the strict parentheses
Tene Or, could be that you've misremembered the name, and it's a real thing just under a different name.
mdrc actually i think the bug from perl6 reminded me 00:17
just visited
masak we're glad you're here :) 00:18
mdrc thanks :)
masak I'm almost sorry there isn't a sea-cow grammar outside of your dreams... 00:19
mdrc might have been a grep script
i don't know
Tene mdrc: What would that have been? For example, if I *had* answered with "Here you go, it's right here: <link>", what would you have expected to find at the link?
mdrc some variety of the grammar, generated by a stream of feature strings filtered by the sea-cow 00:20
like a preset compilation 00:23
masak mdrc: I think you came here to be properly hugged.
masak hugs mdrc
there you go. 00:24
mdrc actually thanks , i was looking for an executable object
masak you're welcome.
in the postmodern era, I guess we're all executable objects. 00:25
mdrc seems to be available, only with whole feature set, from rakudo 00:25
masak yeah.
both. 00:26
mdrc haven't actually seen a list of extern symbols for the standard version. would be nice with something simple. 00:27
masak mdrc: most of it can be found in the spec, but some parts are slushy. 00:28
mdrc the spec seems fine, i mean, how many extern libraries are used? 00:29
masak that's dependent on the implementation, I guess. 00:31
there are some implementations for which the question doesn't make much sense.
mdrc of course. probably just the stdio interface 00:32
masak the question feels unwarrantedly C-centric. 00:36
mdrc true. the regular execution environment, you know 00:36
masak 'night, #perl6 00:45
mdrc [stdio[rakudo[application]]] alike 00:47
newbee sorry i had to go out but i read your response, masak. So, whan can i do to avoid this "double" definition of + ? 01:14
s/whan/what/
or is that i just can't use + inside a definition of an overroded + operator? 01:15
oh, never mind
i got it, i should replace sub by multi :) 01:16
thanks! :D
rakudo: use v6; class hourmin { has Int $.h is rw; has Int $.m is rw; }; multi infix:<+>(hourmin $h1, hourmin $h2) { my $r = hourmin.new(h=>0,m=>0); $r.h = $h1.h + $h2.h; $r.m = $h1.m + $h2.m; if $r.m > 60 { $r.h += 1; $r.m-=60}; return $r; }; my $H1 = hourmin.new(h=>22,m=>40); my $H2 = hourmin.new(h=>1,m=>21); say $H1.perl; say ($H1+$H2).perl; 01:20
p6eval rakudo 705435: OUTPUT«hourmin.new(h => 22, m => 40)␤hourmin.new(h => 24, m => 1)␤»
mdrc (should work like the missing chip. well, i guess i have to leave. bye) 01:30
mdrc hello again, sorry for confusing the sea-cow script. it was an old model for something completely different www.gangsterfreak.com/file:scm.png 01:57
(just found in the archive) 01:58
maybe some other time 02:00
Tene jnthn: really, looks like I want to implement ruby-doc.org/core/classes/Module.html as my first HOW 02:00
imamelia Will Perl 6 have any more settings for pack and unpack? 05:53
tadzik hello #perl6 07:44
moritz good morning 09:08
tadzik oh, moritz. I was thinking about the gsoc week #1 today, and I still have no clue about how the tests for Pod classes should look like. How about me writing the tests for the Pod parser itself? They will be needed in a later stage anyway, have no specific date (besides "make sure the test suite covers the whole spec" in the week nth), and will probably reveal some stupid things about the Pod nodes too, 09:41
what do you think?
For I don't have any good idea for testing the classes themselves, and it's a waste of effort to implement tests for containers just for the sake of writing tests
ingy seen shortcircuit 10:20
aloha shortcircuit was last seen in #perl6 34 days 7 hours ago joining the channel.
masak greetings, lolhorses. 11:02
jnthn Is a lolhorse like a seahorse, but laughing more often? 11:37
masak right. a close relative to the sea-cow, in fact. 11:42
tadzik (: 11:55
I imagine lolhorses as horses, which instead of "nihihihihi" do "ololololol!"
masak: could you backlog and tell me what you think about the question I asked moritz? 11:58
masak tadzik: the one about tests? 12:12
could it be that the question "what tests should I write?" lacks a bit of context? 12:14
after all, you don't write tests just for writing tests. you write tests for making sure the code you're about to write does what you wanted. 12:15
tadzik masak: aye
masak so... what code do you want to write, and what should it do? :)
tadzik yes. And a code I am to write is a container. Any test for that is basically testing if the classes and their attributes work 12:16
the code I'm writing are the classes representing a Pod document, and abstract syntax tree
masak it could be useful to see if the Pod classes have been populated correctly.
i.e. given this or that Pod input, the Pod nodes come out right. 12:17
the way I see it, you have an I/O filter. perfect for testing in all sorts of ways.
the power of testing filters is what ingy exploits in search.cpan.org/~ingy/Test-Base-0.6...st/Base.pm 12:18
tadzik: but I'm somewhat evading your question. 12:23
tadzik: your problem is that the classes you're about to write are mostly behaviour-less shells, so there's nothing interesting to test.
so, playing Devil's advocate for a while, I ask: why are you writing those classes in the first place? :) 12:24
tadzik so, playing the dumb for a while I answer: because that's what in my proposal, and everyone expects the "write tests" statement after every "write code" :) 12:26
masak :P 12:27
tadzik so, instead of reporting "tests were not needed", I'm planning to report "tests were not needed, but I wrote the spectests instead, they helped too, and they will be needed anyway" 12:28
masak no, I meant, do you expect these classes to be useful in some context, besides testing that their attributes work correctly?
because it's those classes that would be useful. those that use the classes in the context they were intended to. 12:29
tadzik brb, nom 12:30
okay I'm back there 12:48
tadzik masak: the classes are only useful for representing the actual pod document. If it wasn't for convenience, they could be arrays or hashes. Testing them only makes sense if you compare the pod document to the representation you get from it. At the moment we have no way to transform the pod document into its representation, so the Pod classes are only a bunch of sad pandas in the zoo, which everyone can look 12:50
at and nothing more. Now, I could write tests for the fictional parser, so once it's here (or partly here), the tests will slowly start to work
so, TDD :)
so no tests for Pod classes, but rather tests for what Pod classes will be used for 12:51
but they won't be testing anything right now, at the moment of deliverance 12:52
newbee rakudo: class test { has $.x = 0 where {(0..9)} }
masak let's say you decided to test a serializer that used the Pod classes. then the attributes in the Pod classes would *have* to work as intended, and you wouldn't have to write the boring tests.
p6eval rakudo 705435: OUTPUT«===SORRY!===␤Unable to parse blockoid, couldn't find final '}' at line 22␤»
jnthn std: class test { has $.x = 0 where {(0..9)} } 12:53
p6eval std 9f27365: OUTPUT«===SORRY!===␤Two terms in a row at /tmp/peTAuzXIHk line 1:␤------> class test { has $.x = 0 ⏏where {(0..9)} }␤ expecting any of:␤ bracketed infix␤ infix or meta-infix␤ statement modifier loop␤Parse failed␤FAILED 00:01 117m␤»
jnthn std: class test { has $.x where {(0..9)} = 0 }
p6eval std 9f27365: OUTPUT«ok 00:01 116m␤»
tadzik masak: yes
the thing is, at the moment of writing the tests, I have no serializer, so the tests don't show anything 12:54
newbee rakudo: class test { has $.x where {(0..9)} = 0 }
p6eval rakudo 705435: OUTPUT«===SORRY!===␤Unable to parse blockoid, couldn't find final '}' at line 22␤»
jnthn newbee: Pretty sure Rakudo doesn't know how to do that yet.
newbee oh well... i can use subsets in the meantime. 12:55
rakudo: subset Digit of Int where (0..9); class test { has Digit $.x = 0 } 12:57
p6eval rakudo 705435: ( no output )
masak newbee: be aware that attributes aren't typechecked in Rakudo at the moment.
rakudo: subset Even of Int where { $_ %% 2 }; class A { has Even $.e }; say A.new(:e(5)).e
p6eval rakudo 705435: OUTPUT«5␤»
masak rakudo: subset Even of Int where { $_ %% 2 }; class A { has Even $.e }; say A.new(:e("OH NOES")).e 12:58
p6eval rakudo 705435: OUTPUT«OH NOES␤»
masak myself, I'm consciously avoiding attribute typing right now, because I know how hard my apps would break when it came online if I used them everwhere :P
newbee subset Digit of Int where (0..9); class test { has Digit $.x is rw = 0 } 12:59
tadzik masak: so, did we get to any conclusion?
jnthn masak: nom will almost certainly have it.
masak: You've chosen wisely ;)
newbee i think that this syntax is too complicated, should be subset Digit of Int where (0..9); class test { has Digit $.x = 0 is rw }
jnthn newbee: But the 0 isn't rw. The attribute is. 13:00
newbee has Digit $.x is rw = 0 v/s has Digit $.x = 0 is rw
ahmmm i see 13:01
jnthn I find "has Digit $.x is rw = 0" clearer, but maybe that's just me. :)
newbee i read "is rw = 0" like saying "rw is false" 13:02
i know that perl6 does not work like that but reading it fast sounds like that
jnthn Ah, I see. 13:03
masak tadzik: good question :) 13:05
masak tadzik: don't write tests just for testing's sake. write tests that will help you move forward with implementing functionality. 13:06
fglock hmm - Perlito bootstrap was taking 5min instead of 1min, I was looking for a bug - it turned out the MacBook Air was overheating, and slowed down 13:09
putting some ice under the computer fixed it
masak :D 13:12
newbee rakudo: class Point{has $.x is rw = 0; has $.y is rw = 0}; my $p1 = Point.new; say $p1.perl;
p6eval rakudo 705435: OUTPUT«Point.new(x => 0, y => 0)␤»
newbee rakudo: class Point{has $.x is rw = 0; has $.y is rw = 0}; my Point $p1; say $p1.perl; 13:13
p6eval rakudo 705435: OUTPUT«Point␤»
newbee why the different outputs?
masak newbee: the first is an instance, the second is the type object Point.
newbee you mean that in the 2nd, $p1 is like a "clone" of the Point class? 13:14
rakudo: class Point{has $.x is rw = 0; has $.y is rw = 0}; my Point $p1; my $p2 = $p1.new; say $p2.perl; 13:15
p6eval rakudo 705435: OUTPUT«Point.new(x => 0, y => 0)␤»
newbee rakudo: class Point{has $.x is rw = 0; has $.y is rw = 0}; my Point $p1; $p1.x = 10; my $p2 = $p1.new; say $p2.perl; 13:16
p6eval rakudo 705435: OUTPUT«Type objects are abstract and have no attributes, but you tried to access $!x␤ in main program body at line 22:/tmp/EJrgoLi8zG␤»
masak newbee: not really a "clone", more like a Point object that represents the Point class itself. an uninstantiated Point object. 13:17
newbee now i understand that error message :) 13:17
masak :)
newbee thanks to all again :) going back to code some more.....
masak rakudo: class A { has $.b }; my $a = A.clone; $a.b = 42; say "alive" 13:18
p6eval rakudo 705435: OUTPUT«Type objects are abstract and have no attributes, but you tried to access $!b␤ in main program body at line 22:/tmp/SlbryIPzhK␤»
masak rakudo: class A { has $.b }; say A === A.clone
p6eval rakudo 705435: OUTPUT«Bool::True␤»
newbee mmm so, how does Int work then? You don't have to say my $x = Int.new 13:20
masak you could say that Int is a bit special-cased, since the literal syntax creates Int instances for you. 13:21
but it's slightly more involved than that, what with unboxed values and so on.
newbee rakudo: class Point{has $.x is rw = 0; has $.y is rw = 0}; class Line { has Point $p1 is rw = (x=>0, y=>0); has Point $p2 is rw = (x=>0, y=>0) }; my $L = Line.new; say $L.perl; 13:24
p6eval rakudo 705435: OUTPUT«Line.new(p1 => ("x" => 0, "y" => 0), p2 => ("x" => 0, "y" => 0))␤»
newbee rakudo: class Point{has $.x is rw = 0; has $.y is rw = 0}; class Line { has Point $p1 is rw = (x=>0, y=>0); has Point $p2 is rw = (x=>10, y=>10) }; my $L = Line.new; say $L.perl;
p6eval rakudo 705435: OUTPUT«Line.new(p1 => ("x" => 0, "y" => 0), p2 => ("x" => 10, "y" => 10))␤»
newbee cool :)
mikemol ingy: I'm around 13:29
I just don't speak much. :)
newbee rakudo: class hourmin {has Int $.h is rw; has Int $.m is rw;}; multi infix:<+>(hourmin $h1, hourmin $h2) {my $r=hourmin.new(h=>0,m=>0); $r.h=$h1.h+$h2.h; $r.m=$h1.m+$h2.m; if $r.m>60 {$r.h+=1; $r.m-=60}; return $r;}; my $H1=hourmin.new(h=>22,m=>40); my $H2=hourmin.new(h=>1,m=>21); my $H3=$H1+$H2; 13:34
newbee rakudo: class hourmin {has Int $.h is rw; has Int $.m is rw;}; multi infix:<+>(hourmin $h1, hourmin $h2) {my $r=hourmin.new(h=>0,m=>0); $r.h=$h1.h+$h2.h; $r.m=$h1.m+$h2.m; if $r.m>60 {$r.h+=1; $r.m-=60}; return $r;}; my $H1=hourmin.new(h=>22,m=>40); my $H2=hourmin.new(h=>1,m=>21); my $H3=$H1+$H2; 13:35
p6eval rakudo 705435: ( no output ) 13:36
tadzik masak: I read that as "I agree" :) 13:39
fglock: speaking of MacBook, how annoying is the heat problem in a machine like that? 13:40
ingy mikemol: you changed nicks?
masak tadzik: yes, I think I do. :) 13:41
newbee hi again :D 13:41
masak welcome back. :)
newbee i have a + operator defined inside a pm (inside a class)
mikemol ingy: Ah. Yeah, I forgot about that. :)
newbee i did a test and i can't use the operator in it 13:42
mikemol ingy: Now using my real name for my nick, since that's what I do just about everywhere else, now.
ingy mikemol: join #ingy again for a bit
masak newbee: sub declarations are lexically scoped. so it'll only be visibble inside the class if you define it there.
newbee i can only use it if i move the + definition from the .pm to the .t file
i defined as a multi
ahh i see
so i should use "method infix:....." 13:43
masak no.
you should place the sub declaration where it's visible from where you use it.
rakudo: class A {}; multi sub infix:<+>(A, A) { "OH HAI" }; say A.new + A.new 13:44
p6eval rakudo 705435: OUTPUT«OH HAI␤»
masak rakudo: class A { multi sub infix:<+>(A, A) { "OH HAI" } }; say A.new + A.new
p6eval rakudo 705435: OUTPUT«Cannot take numeric value for object of type A␤ in 'Any::Numeric' at line 1482:CORE.setting␤ in 'infix:<+>' at line 7651:CORE.setting␤ in main program body at line 22:/tmp/umUksggfP_␤»
newbee that's the error message i'm getting 13:45
benabik Wouldn't an infix method take one of the params as an invocant? So it would be infix:<+>(A) or (A: A)? 13:50
Moukeddar Hello :) 13:54
masak o/
Moukeddar how are you doing Sir?
masak good, thanks. 13:55
and you?
Moukeddar doing Fine , thank you 13:55
masak benabik: it would; but the operator isn't translated into a method call, it's translated into a sub call.
rakudo: class A { method infix:<+>(A, A) { "OH HAI" } }; say A.new + A.new
p6eval rakudo 705435: OUTPUT«Cannot take numeric value for object of type A␤ in 'Any::Numeric' at line 1482:CORE.setting␤ in 'infix:<+>' at line 7651:CORE.setting␤ in main program body at line 22:/tmp/8iMgcjd1G7␤» 13:56
masak (doesn't work, because the method is never called)
Moukeddar rakudo : What?
rakudo: What?
p6eval rakudo 705435: OUTPUT«===SORRY!===␤Confused at line 22, near "What?"␤»
Moukeddar masak, i wanted your opinion , 13:57
me and my friends are about to build a website
kinda like this : dotnet.dzone.com/
Moukeddar and we were agueing wether we should Use the MVC architectur or not 13:58
what do you think ?
masak Moukeddar: I think it sounds slightly off-topic for #perl6. mind if we take it through privmsg? 13:58
Moukeddar ok :) 13:59
dalek kudo/nom: 4128e6a | jnthn++ | / (4 files):
Toss some PMCs that we'll no longer need.
14:30
kudo/nom: 7e411b3 | jnthn++ | src/Perl6/Metamodel/EXPORTHOW.pm:
Correct HOW exports.
kudo/nom: b659333 | jnthn++ | / (3 files):
Add lexpad and lexinfo PMCs. Copies of the NQP ones, but I expect we'll end up with a bit more in the Rakudo ones.
14:46
kudo/nom: 6664726 | jnthn++ | src/Perl6/SymbolTable.pm:
Make sure we always do the LexPad => Perl6LexPad mapping.
kudo/nom: 7ab4a55 | jnthn++ | src/pmc/perl6lexinfo.pmc:
Simplify static lexical installation.
kudo/nom: 3eb5ba0 | jnthn++ | src/Perl6/SymbolTable.pm:
Compile-time lexical installation.
newbee rakudo: use v6; class Point { has $.x is rw = 0; has $.y is rw = 0; }; multi sub infix:<+>(Point $P1, Point $P2) {my $R = Point.new; $R.x = $P1.x + $P2.x; $R.y = $P1.x + $P2.x; return $R;} use v6; use Test; my $P1=Point.new(x=>5 ,y=>5); my $P2=Point.new(x=>10,y=>10); my $P3=$P1+$P2; ok($P3.x==15 && $P3.y==15, "Add points"); 15:09
p6eval rakudo 705435: OUTPUT«===SORRY!===␤Confused at line 22, near "multi sub "␤» 15:10
sorear newbee: what are you trying to do? you seem to have been stuck on the same stuff for a week. 15:14
newbee: "use v6" is unnecessary with Rakudo, also, there's a bug which requires operator overloads to be declared "our multi sub" 15:15
newbee: you need a ; after the sub-ending }
dalek kudo/nom: b56c1b3 | jnthn++ | src/Perl6/SymbolTable.pm:
Add a way to track stub packages that we need to check get defined at some point.
15:18
kudo/nom: 097725c | jnthn++ | src/Perl6/Grammar.pm:
Install lexical packages.
kudo/nom: 630af7d | jnthn++ | src/Perl6/Actions.pm:
Toss existing package_def action and start to fill it out with compile time meta-object handling and other basic bits.
kudo/nom: ea005f4 | jnthn++ | src/Perl6/Actions.pm:
Typo.
masak rakudo: multi sub infix:<+>(Rat $a, Rat $b) { "OH HAI" }; say 2.5 + 2.5 15:42
p6eval rakudo 705435: OUTPUT«Ambiguous dispatch to multi 'infix:<+>'. Ambiguous candidates had signatures:␤:(Rat $a, Rat $b)␤:(Rat $a, Rat $b)␤␤ in main program body at line 22:/tmp/Wok6SJmL1Y␤»
masak sorear: no, it seems to work without the 'our'. 15:43
rakudo: multi sub infix:<+>(Str $a, Str $b) { $a ~ $b }; say "OH" + " " + "HAI"
p6eval rakudo 705435: OUTPUT«OH HAI␤»
masak sorear: it's just some other things that don't work without it, such as metaoperators.
rakudo: multi sub infix:<+>(Str $a, Str $b) { $a ~ $b }; say [+] "OH", " ", "HAI" 15:44
p6eval rakudo 705435: OUTPUT«0␤»
masak rakudo: our multi sub infix:<+>(Str $a, Str $b) { $a ~ $b }; say [+] "OH", " ", "HAI"
p6eval rakudo 705435: OUTPUT«OH HAI␤»
PhatEddy rakudo: class A { has $.b;}; class B is A { proto method b{}}; 15:47
p6eval rakudo 705435: ( no output )
PhatEddy rakudo: class A { has $.b; proto method b{}}; 15:48
p6eval rakudo 705435: OUTPUT«===SORRY!===␤A method named 'b' already exists in class 'A'. It may have been supplied by a role.␤»
PhatEddy masak: do you have a moment to chat about rt #76298 ? 15:49
moritz tadzik: I'd be fine with you writing tests for combined parser + pod classes first, and spend some effort on getting the first test pass early 15:54
even if that's a small deviation from the schedule
tadzik good 15:55
moritz: it's nothing wrong if I modify the classes designed in the week #1 later on, while implementing stuff?
I think I already asked that
moritz tadzik: setting things in stone early on is considered harmful 15:56
tadzik yeah. The spec is not frozen either 15:57
moritz exactly 15:58
or to put it another way, working code in the end is more important than particular milestones or than sticking to early results
newbee sorry, i was afk.. 15:59
rakudo: class Point { has $.x is rw = 0; has $.y is rw = 0; }; our multi sub infix:<+>(Point $P1, Point $P2) {my $R = Point.new; $R.x=$P1.x+$P2.x; $R.y =$P1.y+$P2.y; return $R;}; my $p1 = Point.new(x=>30,y=>0); my $p2=$p1; ;my $P3=$p2 + $p1; say $P3.perl; 16:00
p6eval rakudo 705435: OUTPUT«Point.new(x => 60, y => 0)␤»
newbee this works well... but
if i kame two files like that:
s/kame/name/
file Point.pm : class Point { has $.x is rw = 0; has $.y is rw = 0; }; our multi sub infix:<+>(Point $P1, Point $P2) {my $R = Point.new; $R.x=$P1.x+$P2.x; $R.y =$P1.y+$P2.y; return $R;};
file Test.pl : use Point; my $p1 = Point.new(x=>30,y=>0); my $p2=$p1; ;my $P3=$p2 + $p1; say $P3.perl;
i got this error: "Cannot take numeric value for object of type Point" 16:01
moritz newbee: you didn't export your infix:<+> 16:02
newbee: and even if you did, I think exporting of overloaded operators in very fragile in rakudo :( 16:03
newbee export? mmmm like an EXPORT array at the beggining of Point.pm ? 16:04
moritz multi infix:<+>(...) is export { ... } 16:05
newbee didn't work either,, i guess i'll stick to "normal" subs for the moment :( 16:06
thanks moritz :)
masak PhatEddy: yes, sure. 16:07
PhatEddy rakudo: class A { has $.b; method b{}}; 16:08
p6eval rakudo 705435: OUTPUT«===SORRY!===␤A method named 'b' already exists in class 'A'. It may have been supplied by a role.␤»
newbee sorear: I'm trying to do a "TimeOfDay" class. Hours minutes and seconds, completely unrelated to the day.
masak PhatEddy: that's wrong too, AFAIU.
rakudo: class TimeOfDay { has $.hour; has $.minute; has $.second }; say "done" 16:09
jnthn maybe.
p6eval rakudo 705435: OUTPUT«done␤»
PhatEddy It doesn't just seem to be about proto's and if you back up a bit on the channel you might notice that I have a workaround based on inheritance.
masak backs up a bit
newbee i want to add Durations and other "TimeOfDay" instances, that's why i olverload operators 16:10
PhatEddy rakudo: class A { has $.b;}; class B is A { method b{}};
p6eval rakudo 705435: ( no output )
masak jnthn: shouldn't 'has $.b' only generate an accessor method if there isn't already one in the class declaration?
jnthn masak: Probably, yes 16:11
masak I even seem to recall reading that in some synopsis somewhere. 16:11
jnthn Though you could use has $!b; then :)
masak :)
jnthn That'd seem like the simple workaround if you want to write your own accessor. 16:12
masak aye.
jnthn Will try and remember to add that check when implementing the attribute meta-object in nom, anyway.
masak \o/
tadzik why is #= currently Rakudo-illegal? 16:15
jnthn tadzik: I thought it was no longer in the spec? 16:16
masak tadzik: it's #=[]
or some other set of parenthetical characters.
PhatEddy Is there really a point in allowing the override of the accessor if declaring private and your own accessor is just as good? 16:17
tadzik it's in the S26
jnthn Oh, I thought we were taking about {*} #= open in a regex.
Mostly because I tossed one of the few remaining usages of it a couple of days ago in package_def... :)
tadzik :) 16:18
jnthn PhatEddy: Things that want to see has_accessor being true when doing introspection would benefit from it.
tadzik so, what about #=?
PhatEddy Thanks everyone ... 16:19
masak tadzik: I'll look into it. 16:20
masak tadzik: oh, you're right. 16:24
tadzik: by the way, I have a pending addition to S26 concerning exactly this feature. 16:25
tadzik changing #= to #=[]?
masak no. 16:25
dalek kudo/nom: 4aab825 | jnthn++ | NOMMAP.markdown:
Update NOMMAP.
16:26
kudo/nom: f2dd8a5 | jnthn++ | src/Perl6/Metamodel/ (4 files):
A bit more fleshing stuff out in the metamodel.
kudo/nom: eacc9e9 | jnthn++ | src/Perl6/ (2 files):
{YOU_ARE_HERE} handling fixes.
kudo/nom: ddeadfd | jnthn++ | src/CORE.setting/BOOTSTRAP.pm:
Simplify BOOTSTRAP.pm so it's something we can at least produce code for now.
kudo/nom: 31a098b | jnthn++ | src/Perl6/ (2 files):
Check for undefined package stubs. Compiling CORE.setting now complains (correctly) about these.
kudo/nom: 7767bf4 | jnthn++ | / (3 files):
Stub in natives.
masak tadzik: I believe both exist already.
tadzik: no, the change is to replace the magical attachment behavior of #= with two constructs: #= and #^ 16:28
masak tadzik: please read this: irclog.perlgeek.de/perl6/2010-06-18#i_2453615 16:31
tadzik: up until 14:28 or so. 16:32
tadzik oh, I think I remember sorear talking about this
masak hm, seems the two alternatives we settled on were #= and #|
Moukeddar Heyoo 16:33
why the compiler is called rakudo? 16:34
japanses?
japanese* 16:35
PhatEddy Quick though on paperwork - does it make sense to add a reference to the discussion here to rt76298 - fine with me to do it ... 16:36
tadzik I see 16:37
masak Moukeddar: the name 'rakudo' is derived from the Japanese phrase 'rakudado', meaning 'the way of the camel'. 16:44
Moukeddar: 'rakudo' itself means 'paradise'.
masak ok, I tried changing S26 into #| and #= 16:59
masak it's not as trivial as just putting them there, because much of the explanation that's there now is spent clarifying the silly system of attaching doc comments to the right declaration. 17:00
a slightly bigger rewrite is needed. 17:01
tadzik (: 17:02
well, my second mentor...
I can do it if you're not in a hurry
masak hey, thanks! :) 17:03
tadzik (:
but I suppose that's not until July :P
for .WHY is quite far on my list 17:04
and there's plenty of things not so far
moritz returns and backlogs 17:11
jnthn std: sub foo is bar$('wtf') { } 17:12
p6eval std 9f27365: OUTPUT«ok 00:01 113m␤»
sorear phenny: tell Moukeddar mail.pm.org/pipermail/chicago-talk/...04726.html 17:20
phenny sorear: I'll pass that on when Moukeddar is around.
masak tadzik: ok, I might beat you to it, but no promises either way :) 17:28
tadzik :) 17:29
jnthn TimToady: Since we need to evaluate trait parameters at parse/compile time, is there any reason at all to just parse some generic circumfix that could contain just about anything for the parameter? Can we not somehow parse a far more restrictive set of things? 17:36
jnthn Like, literal values and type names... :) 17:36
moritz why not just wrap an implicit BEGIN block around it, and allow arbitrary expressions? 17:37
jnthn meh
could do
moritz ok, wouldn't make your life easier :-)
jnthn Well, it'll make everyone's life slower too 17:38
And it's not so simple because of circularity issues 17:39
It'd probably "work" though, I guess. 17:40
jnthn starts to realize that the whole thing is ridiculously circular. 17:41
You can't define inheritance hierarchy until you can call a trait, which needs multi-dispatch. But you can't do multi-dispatch until you have an inheritance hierarchy in place. :) 17:43
moritz so, time for our circularity chainsaw, which can define inheritance without traits 17:44
jnthn Yeah
I think I'm just going to make Mu/Any etc initially exist and be related by doing a bunch of manual meta-object calls. 17:45
PhatEddy Synopsis 12 says: Every dot declaration also declares a corresponding private exclamation storage location, and the exclamation form may be used only in the actual class, not in derived classes. 18:00
rakudo: class A { has $.b;}; class B is A { method set_p_b{ $!b = 'x'}; method say_p_b{say $!b}}; my $b = B.new; $b.set_p_b; $b.say_p_b;
p6eval rakudo 705435: OUTPUT«x␤»
PhatEddy Is the sample I just ran a (new?) bug?
jnthn It's not a new bug, it's one of the oldest ones in rT. 18:01
PhatEddy Sorry - I did check rt and missed it. 18:02
jnthn nqp: class A { has $.b; }; class B is A { method set_p_b() { $!b := 'x' } }
p6eval nqp: OUTPUT«Unable to parse blockoid, couldn't find final '}' at line 1␤current instr.: 'nqp;Regex;Cursor;FAILGOAL' pc 3863 (src/Regex/Cursor.pir:239)␤»
moritz rt is not easy to search for
jnthn nqp: class A { has $!b; }; class B is A { method set_p_b() { $!b := 'x' } } 18:03
p6eval nqp: OUTPUT«Attribute '$!b' not declared at line 1, near " := 'x' } "␤current instr.: 'nqp;HLL;Grammar;panic' pc 26292 (src/stage2/gen/NQPHLL.pir:7011)␤»
jnthn That's how it should work.
sorear jnthn: You're only just realizing the circularity? :) 18:04
jnthn sorear: Just having to deal with different bits of it. :) 18:05
sorear: When your compilation model is Perl 6 in ==> PIR out, it's kinda easier. ;) 18:06
When it's Perl 6 in ==(build the world)==> PIR out that uses objects built during compilation, there's some new things to worry about. :)
sorear niecza solves that problem by building the world in compilerspace 18:07
though this is likely to become a problem when I implement trait_mod
jnthn Yes.
sorear How do you plan to handle separate compilation + BEGIN interaction in ctmo? 18:08
jnthn And all the BEGIN fun in general, I guess.
jnthn The only thing a BEGIN block can reach is either symbols in the dynamic scope or symbols in the current understanding of GLOBAL 18:09
sorear that's the #1 blocker for BEGIN in Niecza; I can't afford to lose separate compilation when it takes 20 seconds just to build a setting 1/6 the size of Rakudo's
jnthn (Note, not using Parrot namespaces any more, so not tied to any single view of what is GLOBAL).
I had to fix that so NQP could actually keep on bootstrapping itself and I could statically resolve symbols
Was getting into situations where it was linking symbols against the compiler, not the the ones beloning to the thing being compiled. Then you ran the compiled output and it was like "oh noes, where are my symbols" :) 18:10
That took days to untangle. :/ 18:11
sorear What would you do for something like use A; my $x; BEGIN { $x = $A::y; $x.[0] = 42 } ?
jnthn If you do that by just compile-n-run it'd probably end up OK, but you're hosed if you do that with --target=pir and then expect $A::y to show up differently when running that. 18:12
It's no different to BEGIN { $A::y.[0] = 42 } 18:13
Potentially you'd screw up the whole separate compilation thing too, but only within the current process. 18:15
jnthn Dunno what we can really do about that, short of a load of extra copying, which'll cause other issues. 18:16
Or trying to track object changes or something
But...it's silly.
Can only go so far to stop people shooting themselves in the foot.
And BEGIN kinda is a shotgun. :) 18:17
sorear has vague desires of being able to run Niecza on Rakudo/Yapsi someday 18:18
heh, I guess 18:19
Have you figured out how to do away with the sc field yet? Adding an extra pointer to P6any just for separate compilation+BEGIN does not amuse me
jnthn Well, it's for bounded serialization too 18:20
I didn't work out how to do away with it but I'm not really planning to either. 18:21
sorear Bounded serialization "too"?
jnthn heh. That was the primary motivation. :) 18:22
For now I'm getting most of the stuff in line to actually do some kind of "real serialization" 18:23
jnthn But I'll probably go on with the current stop-gap until after rakudo/nom. 18:23
Want to give folks at least some of the new nice stuffs. :) 18:24
dinner, bbl
sorear What is "the current stop-gap"? 18:27
What is "real serialization"
masak rakudo: say "OH HAI @a<" 18:53
p6eval rakudo 705435: OUTPUT«OH HAI @a<␤»
masak rakudo: say "OH HAI @a["
p6eval rakudo 705435: OUTPUT«===SORRY!===␤Unable to parse postcircumfix:sym<[ ]>, couldn't find final ']' at line 22␤»
sorear hi masak!
masak why is < OK but not [ ?
oh hai sorear
sorear std: say "OH HAI @a<"
p6eval std 9f27365: OUTPUT«===SORRY!===␤Unable to parse quote-words subscript; couldn't find right angle quote at /tmp/SFvtOOnNLU line 1:␤------> say "OH HAI @a<⏏"␤ expecting escape␤Parse failed␤FAILED 00:01 114m␤»
masak submits rakudobug 18:54
masak already found a use for .base in real-world code 19:03
though in this case .fmt('%b') wouldn't worked too ;)
imamelia Will pack() get changed at all in Perl 6? 19:04
masak imamelia: yes, a little bit. 19:05
imamelia: mostly because we now have Str and Buf, not just Str.
imamelia: but all the changes I've seen have been about that.
imamelia Hm. 19:06
I don't recall hearing about any new developments for that, but...
masak I started on it last summer during GSoC.
imamelia The fact that it has no option for 24-bit character strings has come up a couple of times.
masak hm, back up a bit. :) 19:07
what has no option for 24-bit character strings?
imamelia The pack and unpack functions.
n and v are 16-bit, N and V are 32-bit...but there's nothing for 24-bit.
masak huh.
imamelia And using C* or the like forces big-endian mode. 19:08
masak this is the first time I've heard that complaint about pack and unpack.
imamelia Huh.
sorear me too
masak have you discussed this with the Perl 5 people?
imamelia What Perl 5 people?
I've mentioned in on #perl, and at least one other person knows about it...
Currently, I've just been using the 32-bit one and adding or removing a leading \x00, but that seems rather...workaround-ish? 19:09
(Nothing bigger than 32-bit either, but that hasn't come up yet anyway.) 19:10
*mentioned it
But would it be useful enough to have in Perl 6, I guess... 19:12
Maybe a special character sequence for any character length in either big- or little-endian mode? That would be the most flexible option. 19:13
Might be useful for more people.
masak noted. 19:14
given a list of zeroes and ones, how do I get a list of the indices with ones? 19:16
masak this is the shortest I can come up with: 19:18
rakudo: my @a = 0, 1, 1, 0, 1, 0, 1; say (map *.key, grep *.value == 1, @a.pairs).perl
p6eval rakudo 705435: OUTPUT«(1, 2, 4, 6)␤»
masak oh wait.
rakudo: my @a = 0, 1, 1, 0, 1, 0, 1; say (grep *.value == 1, @a.pairs)>>.key.perl
p6eval rakudo 705435: OUTPUT«(1, 2, 4, 6)␤»
sorear ; my @a = 0,1,1,0,1,0,1; say @a.pairs>>.invert.hash.[1] 19:19
rakudo: my @a = 0,1,1,0,1,0,1; say @a.pairs>>.invert.hash.[1]
p6eval rakudo 705435: ( no output )
sorear rakudo: my @a = 0,1,1,0,1,0,1; say @a.pairs>>.invert.perl
p6eval rakudo 705435: OUTPUT«(0 => 0, 1 => 1, 1 => 2, 0 => 3, 1 => 4, 0 => 5, 1 => 6)␤»
sorear rakudo: my @a = 0,1,1,0,1,0,1; say @a.pairs>>.invert.hash.perl 19:20
p6eval rakudo 705435: OUTPUT«{"0" => 5, "1" => 6}␤»
masak sorear: one has to push the values onto a hash.
sorear rakudo: my @a = 0,1,1,0,1,0,1; say @a.pairs.hash.invert.perl
masak I make that mistake a lot.
p6eval rakudo 705435: OUTPUT«(0 => "0", 1 => "1", 1 => "2", 0 => "3", 1 => "4", 0 => "5", 1 => "6")␤»
masak rakudo: my @a = 0,1,1,0,1,0,1; say {}.push(@a.pairs.invert)
p6eval rakudo 705435: OUTPUT«Method 'invert' not found for invocant of class 'List'␤ in main program body at line 22:/tmp/iaew_5UI9N␤» 19:21
masak rakudo: my @a = 0,1,1,0,1,0,1; say {}.push(@a.pairs.hash.invert).perl
p6eval rakudo 705435: OUTPUT«{"0" => ["0", "3", "5"], "1" => ["1", "2", "4", "6"]}␤»
masak rakudo: my @a = 0,1,1,0,1,0,1; say {}.push(@a.pairs.hash.invert)[1].perl
sorear rakudo: my @a = 0,1,1,0,1,0,1; say @a.pairs.classify(*.value).[1]
masak sorear++
p6eval rakudo 705435: OUTPUT«undef␤»
rakudo 705435: OUTPUT«1 1 1 2 1 4 1 6 1␤»
masak rakudo: my @a = 0,1,1,0,1,0,1; say {}.push(@a.pairs.hash.invert)<1>.perl
p6eval rakudo 705435: OUTPUT«["1", "2", "4", "6"]␤»
sorear rakudo: my @a = 0,1,1,0,1,0,1; say @a.pairs.classify(*.value).[1].perl
p6eval rakudo 705435: OUTPUT«"1" => [1 => 1, 2 => 1, 4 => 1, 6 => 1]␤»
sorear rakudo: my @a = 0,1,1,0,1,0,1; say @a.pairs.classify(*.value)<1>.perl
p6eval rakudo 705435: OUTPUT«undef␤» 19:22
benabik p6golf
sorear rakudo: my @a = 0,1,1,0,1,0,1; say @a.pairs.classify(*.value).hash<1>.perl
p6eval rakudo 705435: OUTPUT«[1 => 1, 2 => 1, 4 => 1, 6 => 1]␤»
sorear rakudo: my @a = 0,1,1,0,1,0,1; say @a.pairs.grep(*.value)».key.perl 19:23
p6eval rakudo 705435: OUTPUT«(1, 2, 4, 6)␤»
masak rakudo: my $n = 5; for 0 ..^ 2 ** $n -> $bitmask { my @r = ({}.push($bitmask.fmt('%0' ~ $n ~ 'b').flip.comb.pairs.hash.invert)<1> // []).list; say @r } 19:27
p6eval rakudo 705435: OUTPUT«␤0␤1␤01␤2␤02␤12␤012␤3␤03␤13␤013␤23␤023␤123␤0123␤4␤04␤14␤014␤24␤024␤124␤0124␤34␤034␤134␤0134␤234␤0234␤1234␤01234␤» 19:28
masak all possible subsets of the set {0, 1, 2, 3, 4, 5}.
sorear niecza: .say for &[X~](('', '0'), ('', '1'), ('', '2'), ('', '3'), ('', '4'), ('', '5')) 19:35
p6eval niecza v5: OUTPUT«===SORRY!===␤␤Non-simple variables NYI at /tmp/gSm0pmwb8O line 1:␤------> .say for &[X~]⏏(('', '0'), ('', '1'), ('', '2'), ('', '␤␤Unhandled exception: Check failed␤␤ at /home/p6eval/niecza/boot/lib/CORE.setting line 413 (CORE die @ 2)␤ at
../ho…
sorear niecza: .say for ('', '0') X~ ('', '1') X~ ('', '2') X~ ('', '3') X~ ('', '4') X~ ('', '5') 19:36
p6eval niecza v5: OUTPUT«␤5␤4␤45␤3␤35␤34␤345␤2␤25␤24␤245␤23␤235␤234␤2345␤1␤15␤14␤145␤13␤135␤134␤1345␤12␤125␤124␤1245␤123␤1235␤1234␤12345␤0␤05␤04␤045␤03␤035␤034␤0345␤02␤025␤024␤0245␤023␤0235␤0234␤02345␤01␤015␤014␤0145␤013␤0135␤0134␤01345␤012␤0125␤0124␤01245␤0123␤01235␤01234␤012345␤»
masak :)
sorear this would work even better if I had a working ||
needs more lols 19:40
jnthn sorear: Real as in data driven. Current stop-gap is "all compile time meta-object actions are events, and the "serialization" is running through that event stream.
tadzik wonders if 12 pages is enough for S26 19:45
any ideas how many lines does lp(1) print on one page?
TimToady usually about 60 (out of 66)
on an old fashioned line printer 19:46
sorear people still use lp?
TimToady on a modern printer, depends on the font size
sorear I guess it's like how in high school I did all my English-class submissions using troff 19:47
tadzik I quite like the archaism in the act of printing a text file in the command line. I only need a pipe and a... 19:48
phenny: "melonik"?
phenny tadzik: Language guessing failed, so try suggesting one!
tadzik phenny: pl "melonik"?
phenny tadzik: "bowler" (pl to en, translate.google.com)
flussence rakudo: my @a = 0,1,1,0,1,0,1; say (0..@a Z=> @a).classify(*.value).pop.value.hash.keys.perl # I couldn't make it shorter, but I can make it horrible no problem :)
p6eval rakudo 705435: OUTPUT«("1", "2", "4", "6")␤»
TimToady ^@a would work just as well 19:49
sorear tadzik: hat?
TimToady @a.pairs
tadzik sorear: yes
bleh, OOWriter wants to print me this on 108 pages
sorear tadzik: have you tried using pod2man and groff -Tps ? 19:51
tadzik sorear: I don't think pod2man will help with pod6
I guess I'll just visit a xero point 19:52
sorear jnthn: What do you mean when you say that (the purpose of SerializationContext is not BEGIN)? 19:56
jnthn sorear: Well, depends if you mean "stuff that happens at begin time" or just BEGIN explicitly. If you mean "stuff that happens at BEGIN time" then yes, that's primarily what it's for. 19:58
lue hello world! o/ 20:05
masak \o
tadzik hello lue1 20:06
1
damn this, shift
moritz \o
tadzik hello lue!
masak tadzik: it's slightly ironic that you're now performing a step (printing Pod6) that would benefit by your GSoC work ;)
s/by/from/
tadzik masak: yeah, that's this bootstraping problem :)
I see the pod 6 source, but I have no idea how it should really look about :) 20:07
sorear jnthn: I mean BEGIN specifically 20:10
masak tadzik: :)
sorear jnthn: stuff that happens at BEGIN time can be serialized with non-bounded and otherwise ad-hoc methods. Niecza uses JSON to serialize class meta objects
masak tadzik: Damian proudly asserts that S26 is written in Pod6. in his CPAN module, he bitterly laments that the documentation has to be written in plain ol' POD. :) 20:11
tadzik masak: yeah, I saw that :)
masak he names it "cruel irony" or something like that...
tadzik "The Cruel Irony", or something
hehe :)
sorear jnthn: BEGIN itself seems to want to be bounded though, if we want BEGIN { $x = Num } to work well
benabik I thought BEGIN was "start of program" not "compile time"
sorear benabik: you're thinking of INIT
excuse me - BEGIN { $x = Num }; ok $x === Num 20:12
lue gets the idea he should continue work on SUPERNOVA, when he has time.
masak I've come to think of BEGIN as "as early as possible", which often means at compile time.
moritz it should really be called ASAP 20:13
lue tadzik: ooc, what is your GSoC project? 20:14
tadzik lue: we may be able to combine manpower regarding my GSoC project
sorear hmm, it just occurred to me that rakudo-ng = event sourcing, rakudo-nom = data sourcing
sorear blows the masak-whistle
tadzik tee-hee. The Pod parser for Rakudo :)
tadzik wonders whose whistle makes the "beeeer!" sound 20:15
lue do you even have to ask? It's jnthn's of course :)
masak sorear: :) 20:18
benabik sorear: Ah. I thought BEGIN was INIT and COMPILE was BEGIN. BEGIN seems like an odd name for it, but I'll get used to it. :-)
masak sorear: I think "state sourcing" is a more apt term.
moritz benabik: hysteric raisins, and all that
benabik moritz: ... ? 20:19
masak well, as early as possible might as well be called BEGIN :) 20:19
benabik didn't get anywhere near enough sleep. 20:19
moritz benabik: "historic reasons", a bit misspelled 20:20
masak benabik: see www.jargondb.org/soundalike_slang
benabik moritz: Oh! My grandma says "hysterical buildings" all the time... I'm too tired.
lue I feel your GSoC project is Pod6 related... /me investigates further 20:24
tadzik lue: 2214 tadzik | tee-hee. The Pod parser for Rakudo :) 20:25
lue: www.google-melange.com/gsoc/proposa...1/tadzik/1 20:26
moritz std: 'a' =~ /a/ 20:32
p6eval std 9f27365: OUTPUT«===SORRY!===␤Unsupported use of =~ to do pattern matching; in Perl 6 please use ~~ at /tmp/vQylQfDv5v line 1:␤------> 'a' =~⏏ /a/␤Parse failed␤FAILED 00:01 113m␤»
sorear std: my $x; $x=~1;
p6eval std 9f27365: OUTPUT«===SORRY!===␤Unsupported use of =~ to do pattern matching; in Perl 6 please use ~~ at /tmp/cksxAqn4XX line 1:␤------> my $x; $x=~⏏1;␤Parse failed␤FAILED 00:01 114m␤»
lue tadzik: looks cool, esp. considering there are some things about Pod6 I'll be purposely delaying (e.g. #=<> declarator blocks) or not doing without decent arguments (e.g. all the Pod6:: classes S26 implies are necessary.) 20:35
dalek ecs: 15b1a49 | moritz++ | S32-setting-library/Exception.pod:
[S32/Exceptions] add a few syntax errors
20:37
sorear Normally I see people make commits like "Remove a few syntax errors"/
.
masak: Why is event sourcing a good thing for web apps but bad for Perl 6? 20:38
moritz what's a nice way to supply the default error message programmatically?
sorear moritz: What do you mean by default error message? 20:39
moritz if I do a "has $.message = 'default string';", I'll get a conflict with X::Base
sorear: X::Syntax::Obsolete.message should default to 'Unsupported use of $<old>;$<when> please use $<new>' 20:40
tylercurtis BUILD?
moritz BUILD is an idea, yes
tadzik lue: my project does not aim for a complete Pod 6 implementation
sorear I think you want to override new() for this
moritz why new and not a BUILD? 20:41
masak sorear: huh? I didn't say it was.
sorear masak: YOU didn't, JNTHN does
masak oh!
that's funny, only yesterday jnthn described the things he's doing with serialization as event-based. 20:42
lue ah. So it only does as much as it needs to be useful as a part of Rakudo?
sorear What Rakudo does now is event-based
jnthn sorear: Not really... 20:43
sorear: Not in a formal way.
masak I'm afraid I don't know enough about the Rakudo internals to have an opinion...
jnthn sorear: nom is still event-driven but with a bunch of cross-referencing already worked out.
It's half way to being data-driven.
Becasue going all the way is another hard chunk of work that I don't want to take on just yet. :) 20:44
tadzik lue: it aims to be a base on which it will be more like a LHF than a hellofahardwork to implement something Pod-related. Also the most exciting bit is of course the .WHY :)
moritz WHY? :-)
lue
.oO(say .WHEREFORE # 'art thou Romeo?')
20:46
tadzik I feel that we have an alias .BECAUSE :)
oh that will be something reversed 20:47
it could add the explanations in runtime :)
lue That reminds me of a why/because conditional I've thought about (e.g. why {$x += $y; say $z;} because $q = 5) which would just be a reverse if/then. 20:48
tadzik augment class Tea { has $.more.BECAUSE('I can') }
moritz event sourcing might a good idea for a time-traveling debugger 20:54
masak that's basically what Tardis does. 20:57
oh wait. no, it isn't.
:)
so yes, that would be a good place to apply it. :)
lue
.oO(IIUC event sourcing from what I've just looked up, then Tardis would actually use event editing)
20:59
masak lue: events are append-only. 21:03
but I guess with a time-traveling debugger, one could choose to "restart" from some point in the event stream, discarding all the events after that point as belonging to a false future. 21:04
masak 'night, #perl6 21:11
PhatEddy rakudo: my @a = (1); @a ||= (); say @a 21:43
p6eval rakudo 705435: ( no output )
PhatEddy rakudo: my @a = (1); @a ||= (); say ~@a 21:44
p6eval rakudo 705435: OUTPUT«(timeout)»
PhatEddy if anyone is around to second and no objection maybe a bug report? 21:47
PhatEddy rakudo: my @a = (); say @a.perl; @a ||= (); say @a.perl 21:52
p6eval rakudo 705435: OUTPUT«[]␤[()]␤»
tadzik rakudo: my @a = (1); @a ||= (); say @a.perl 21:56
p6eval rakudo 705435: OUTPUT«maximum recursion depth exceeded␤ in 'Block::count' at line 6342:CORE.setting␤ in 'Block::count' at line 6342:CORE.setting␤ in 'Any::join' at line 1␤ in 'Array::perl' at line 3161:CORE.setting␤ in <anon> at line 3161:CORE.setting␤ in 'Any::join' at line 1␤ in
..'Array::perl' a…
dalek kudo/nom: fc60b90 | jnthn++ | src/Perl6/ (2 files):
Rip out existing traits handling, as it needs to be done very differently. Get natives to parse/compile.
23:20
kudo/nom: a8702a4 | jnthn++ | / (2 files):
Start sketching out circularity-sawing object system bootstrap.
kudo/nom: b2fea87 | jnthn++ | src/Perl6/Metamodel/MultipleInheritance.pm:
Fix inheritance bug.
kudo/nom: e020635 | jnthn++ | / (6 files):
Start fleshing out the setting a bit. Doesn't build - getting it to do so is the next target.
jnthn sleep & 23:25