»ö« Welcome to Perl 6! | perl6.org/ | evalbot usage: 'perl6: say 3;' or rakudo:, niecza:, std:, or /msg camelia perl6: ... | irclog: irc.perl6.org | UTF-8 is our friend! Set by sorear on 25 June 2013. |
|||
00:02
daniel-s joined
00:08
thou joined
00:12
Psyche^_ joined
00:13
ajr_ left,
Entonian joined
00:16
Psyche^ left,
Entonian left
00:20
rurban1 joined
00:24
rurban1 left
00:29
raiph left
00:46
raiph joined
|
|||
woolfy and lizmat back from NPW pre-conf social at Fermentoren. It was nice. Seven people (ehm was it eight?) and lots and lots of special beers. | 00:49 | ||
jnthn | mmm...beers :) | 00:50 | |
That to oel imperial stout was very nice indeed. | |||
woolfy | Hmm, I did not like that one very much. | 00:51 | |
But it is good to see you found your hotel! | |||
I did like the tripel-style beer, and the gueuze beer as well. | |||
I had six beers and I gave away two because I did not like them and I traded another one for another beer. | 00:52 | ||
This was an interesting evening. And somebody might have a surprise for jnthn++ tomorrow. Not me. jnthn should watch the lightning talks for signs of NQP. | 00:53 | ||
jnthn | o.O | ||
00:55
beastd left
01:14
sizz joined
01:20
rurban1 joined
01:24
raiph left
01:25
rurban1 left
01:26
thou left
01:36
FROGGS left,
prevost joined
01:37
FROGGS joined
01:38
DrEeevil left,
bonsaikitten joined,
bonsaikitten left,
bonsaikitten joined
01:53
tgt left
02:08
btyler left
02:13
berekuk left
02:19
pdurbin joined
02:35
btyler joined
02:45
raiph joined
02:49
araujo left
02:50
araujo joined
02:53
prevost left
03:01
btyler left
03:04
ssutch left
03:12
lizmat_ joined
|
|||
dalek | kudo-star-daily: 1f5d4c0 | coke++ | log/ (5 files): today (automated commit) |
03:13 | |
rl6-roast-data: c43e34a | coke++ | p (2 files): today (automated commit) |
|||
rl6-roast-data: 8021c58 | coke++ | / (3 files): today (automated commit) |
|||
03:15
lizmat left
03:21
dwarring left
03:22
rurban1 joined
03:27
rurban1 left
03:41
araujo left
03:47
lowpro30 joined
03:49
raiph left
03:52
lowpro30 left
04:05
preflex left
04:07
preflex joined,
ChanServ sets mode: +v preflex
|
|||
dalek | -pb: 60c6698 | (Geoffrey Broadwell)++ | lib/Metamodel/Perlable.pm: Fix type rendering in PerlableAttribute.perl() Switch to showing the container_descriptor's .of type instead of the attribute's .type, so that array attributes will render correctly. For example, an Int array attribute will now render as 'has Int @.array' rather than 'has Positional @.array'. |
04:21 | |
-pb: 34fcd84 | (Geoffrey Broadwell)++ | lib/PB/Binary/Writer.pm: Packed repeated fields are always LENGTH_DELIMITED |
|||
-pb: 593e24f | (Geoffrey Broadwell)++ | lib/PB/Model/Generator.pm: Display boolean pb_packed trait without redundant '(True)' |
|||
-pb: f0f3e45 | (Geoffrey Broadwell)++ | lib/PB/Model/Generator.pm: Rename generic $name variable to $class-name |
|||
-pb: ef8832c | (Geoffrey Broadwell)++ | lib/PB/Model/Generator.pm: Properly handle repeated field attribute generation Create our own container_descriptor and auto_viv_container to properly handle array-valued (repeated field) attributes. |
|||
04:31
BenGoldberg left
04:51
xinming left
04:52
xinming joined
04:53
rurban1 joined
04:57
xinming left,
xinming joined
05:03
xinming left,
xinming joined
05:06
benabik joined
05:13
xinming left,
nopzi joined,
xinming joined
05:15
nopzi left
05:41
MikeFair___ is now known as MikeFair
05:48
btyler joined
|
|||
dalek | -pb: 88ab375 | (Geoffrey Broadwell)++ | t/data/google-docs/test (4 files): Add test protos from Google's offical encoding doc |
05:53 | |
-pb: 2c3c677 | (Geoffrey Broadwell)++ | t/generator.t: Replace stub t/generator.t with a new one Test parsing of encoding doc test messages, and subsequent message class generation, .^perl()ization, and use to write real protobufs. |
|||
japhb_ | preflex: ask jnthn In github.com/samuraisam/p6-pb/commit/2c3c67740b , the "nok ::('Test1') ~~ Failure" style tests don't work right, even though Test1.new() works fine. What am I doing wrong in gen-class() ( github.com/samuraisam/p6-pb/blob/m...tor.pm#L39 )? | 05:56 | |
preflex | Consider it noted. | ||
japhb_ | ... and with that, I'm AFK to let my brain rest. :-) | 05:57 | |
06:04
hummeleB1 joined
06:29
SamuraiJack joined
06:45
xenoterracide joined
06:51
xenoterracide left,
bloonix left
06:52
Entonian joined,
Bucciarati left
06:53
bloonix joined
06:54
Bucciarati joined
06:56
Entonian left,
Bucciarati left
|
|||
timotimo | the urbit person found my mention of them in the irclog and liked it :) posted it on their blog | 06:57 | |
timotimo waves | |||
06:57
darutoko joined,
woolfy left
06:58
sahadev left,
woolfy1 joined
07:00
bloonix left
07:01
bloonix joined
07:04
kaare_ joined
07:05
Bucciarati joined
|
|||
moritz | japhb_: what does ::('Test1').^mro.perl say? | 07:23 | |
07:37
dylanwh left,
dylanwh joined
07:39
Lorn joined
07:40
simcop2387 left
07:41
simcop2387 joined
07:43
daveec_ joined,
davecc_ joined
07:46
daveec left,
davecc left
|
|||
japhb_ | moritz: (Failure, Any, Mu) -- it is indeed a Failure, which indicates that the symbolic lookup is failing. | 07:46 | |
Actually, I wonder if github.com/samuraisam/p6-pb/blob/m...or.pm#L154 is wrong. | 07:47 | ||
That was some of the original code, and I never looked at it carefully. | |||
On the other hand, I'm still weirded out that Test1.new() works even though ::('Test1') doesn't. | 07:48 | ||
FROGGS | japhb: you should export it without the amp, no? | 07:57 | |
at least classnames | |||
japhb_ tries just removing that bit | 07:58 | ||
dalek | -pb: 49c7d75 | (Geoffrey Broadwell)++ | lib/PB/Model/Generator.pm: Fix a Generator export bug moritz++ and FROGGS++ for reminding me to look at ancient code critically. |
08:02 | |
FROGGS | \o/ | ||
japhb_ | preflex: tell jnthn Nevermind, bug found. | 08:03 | |
preflex | Consider it noted. | ||
japhb_ wonders why it was ever like that in the first place. Working around an old Rakudo bug, perhaps? | |||
FROGGS | possible, but I don't know such a bug :o) | 08:04 | |
and, well, we don't have EXPORT that long I think | |||
08:04
davecc_ left,
daveec_ left
|
|||
japhb_ shrugs | 08:05 | ||
In any case, with that stuff worked out, I think the basics of writing binary protobufs is done except for the float/double stuff. | 08:06 | ||
FROGGS | ui | ||
08:06
daveec joined
|
|||
japhb_ | Time to shift back to reading the binary PBs next time I have tuits. | 08:06 | |
08:06
davecc joined
|
|||
japhb_ | sleep & # Much happier for not having a bug nagging me, moritz++ and FROGGS++ for getting me better sleep. ;-) | 08:07 | |
timotimo | :) | 08:08 | |
08:08
ssutch joined
|
|||
FROGGS | I just don't know how I could use your module (or for what I'd needed it), but it sounds interesting :o) | 08:11 | |
timotimo | well what do you use protocol buffers for? | 08:12 | |
serializing data and reading it back | |||
FROGGS | but that one is a google specific protocol? | 08:13 | |
timotimo | no | 08:14 | |
Google makes the library | |||
many people use it | |||
FROGGS | ahh | ||
timotimo | you specify the protocol and it generates code | ||
FROGGS | but I guess it is used in some google APIs ? | ||
timotimo | i believe so | ||
08:14
[particle] joined
|
|||
timotimo | internally at least | 08:14 | |
08:15
nnunley left
|
|||
timotimo | will there be recordings of the npw talks on the net? | 08:15 | |
08:16
araujo joined
|
|||
FROGGS | I guess not | 08:17 | |
08:25
kivutar left,
Rotwang joined
|
|||
FROGGS | jnthn: I dunno how to code-gen! /o\ | 08:25 | |
jnthn: for next/redo/last LABEL in while: I think I should have to goto to the next/redo/done-label that is already in place for the while loop | 08:27 | ||
jnthn: the problem is that goto only supports an identifier after the keyword, so I have to stash the label somewhere, but where? | 08:28 | ||
jnthn: the control:: next/redo/last is hit first, so that would create a new label, emit a "goto label_last16" for example and need to stash it, so the while loop can emit that label name too | 08:29 | ||
08:29
sqirrel joined
|
|||
FROGGS | jnthn: I just fail to stash that label | 08:30 | |
08:32
woolfy1 left
08:33
kaare_ left
|
|||
FROGGS | at least I am to 97% sure that this is the correct approach | 08:41 | |
08:42
lizmat_ left
08:47
slavik left
08:48
sqirrel left
08:49
btyler left
08:50
daveec left,
davecc left
08:53
xinming left,
xinming joined
08:57
MikeFair left
09:02
xinming left,
xinming joined
09:03
telex left,
daveec joined,
davecc joined
09:04
telex joined,
FROGGS[mobile] joined
09:07
slavik joined,
rurban1 left
|
|||
nwc10 | quick, everyone change S17 | 09:08 | |
diakopter | O_O | ||
timotimo | is jnthns talk happening at this moment? | ||
nwc10 | the scheudle thinks so: act.yapc.eu/npw2013/talk/5187 | 09:09 | |
09:09
xenoterracide joined
|
|||
timotimo | there are no live streams, right? | 09:12 | |
09:29
sqirrel joined
09:34
lizmat joined
09:39
ssutch left
|
|||
masak | good antenoon, #perl6 | 09:42 | |
masak just realized that Perl 6 follows Bertrand Meyer's "Uniform Access Principle" | 09:43 | ||
09:44
rindolf joined
|
|||
masak | "All services offered by a module should be available through a uniform notation, which does not betray whether they are implemented through storage or through computation." -- martinfowler.com/bliki/UniformAcces...ciple.html | 09:44 | |
that's exactly what the '$o.attr = 42' syntax does. | |||
timotimo | yup | ||
moritz | and, IMHO more importantly, that you access attributes as methods | 09:45 | |
unlike js, where you have to know whether to write obj.thing or obj.thing() | |||
masak | I... I both like and dislike that distinction. | 09:47 | |
it's *very* nice sometimes to be able to talk about the method as a noun. | |||
but I can agree with you that obj.think may not be the right huff length for it. | 09:48 | ||
timotimo | it would be nifty if we could just write $foobar.&method | ||
masak | that... doesn't really fit, though. | ||
timotimo | i was about to write &foobar.method, but that's just as wrong | ||
moritz | the problem with talking about methods as nouns is that it can break a classes contract | 09:55 | |
you can do my $meth = $obj1.^can('meth')[0]; $meth($obj2) | |||
where $obj2 is a subclass of the class of $obj1 and has overwritten 'meth' | 09:56 | ||
masak | that's equally possible with upcasts. | ||
moritz | and now you're calling the parent's method on the child, and break polymorphism | ||
masak | Rectangle r = (Rectangle)square; | ||
et voila | |||
if you are overriding methods in that way, and end up in trouble for it, you are breaking Liskov. | 09:57 | ||
moritz | but that's still polymorphic | ||
masak | I honestly don't see the difference. | ||
09:57
berekuk joined
|
|||
masak | r is now a Rectangle "view" of the Square. | 09:57 | |
moritz | if you call r.area(), it will still call square's area() method, not Rectangle's area() method | ||
masak | I contest that. | 09:58 | |
then what would be the point of upcasts? | |||
moritz | which language are we talking about now? | ||
09:58
aindilis left
|
|||
masak | Java. | 09:58 | |
or any other statically typed language. | |||
C# works the same. | |||
moritz | I'm pretty sure that in C++ for virtual classes you still get the most derived virtual method | ||
masak | interesting. | ||
moritz | *virtual methods | ||
sorry | |||
that's the whole point of OO polymorphism, no? | 09:59 | ||
masak | well, I won't know how C++ behaves until I've tried it. | ||
but I'm 100% sure if you upcast something in Java, it calls Rectangle's method, not Square's. | 10:00 | ||
you're basically saying "OK, let's make fewer assumptions about the type of this object for a while". | |||
and Liskov is meant to make you safely be able to do that. | |||
10:01
aindilis joined
|
|||
moritz | no | 10:01 | |
that's not what Liskov says | |||
Liskov says that if you subclass, it must be save to call the subclassed metho | |||
d | |||
not "If you subclass, and there is a more specific method, it's fine to call the more general method" | 10:02 | ||
masak | define "safe". | 10:04 | |
"It states that, in a computer program, if S is a subtype of T, then objects of type T may be replaced with objects of type S [...] without altering any of the desirable properties of that program (correctness, task performed, etc.)." | 10:05 | ||
what that description is talking about is (quite directly) an upcast. | |||
i.e. Rectangles should behave like Squares (if the former subclasses the latter) | 10:06 | ||
moritz | doesn't it say "Squares should behave like Rectangles"? | ||
masak | yeah. | 10:07 | |
if they subclass Rectangles. | |||
moritz | let my try a different approach | 10:08 | |
the normal API for calling a method in Perl 6 is $obj.area | |||
10:08
rurban1 joined
|
|||
moritz | so I interpret Liskov's principle as saying $square.area should return the same as $rect.area | 10:08 | |
jnthn | ohhai | 10:09 | |
preflex | jnthn: you have 2 new messages. '/msg preflex messages' to read them. | ||
masak | jnthn! \o/ | ||
jnthn | Grrr...busted winner failed one of my live demos! | ||
moritz | not as $square.Rectangle::area must return the same as $rect.area | ||
masak | jnthn: "busted winner"? | ||
moritz | sounds like loser to me :-) | 10:10 | |
jnthn | masak: When winner was implemented based on the select thing I did (well, not based enough on the select thing I did ;)) seems we got a race cond... :( | ||
masak | moritz: a restatement I like of Liskov is "if you think you have a T, it should not matter in any way that you actually have an S" | ||
jnthn | Will have to hunt it down... | ||
And also try and boil my example down to a test case... | |||
masak | jnthn: that's just a negative result in research... :) | ||
that's a good thing. | |||
moritz: do you agree with that restatement? | 10:11 | ||
moritz | masak: the "in any way" is too strict, IMHO. That would mean that $obj.^name would have to return the same thing too | ||
masak: so there must be some kind of "for certain desirable operations" restriction | |||
masak: and our whole discussion boils down to: are upcasts part of the set of desirable operations | 10:12 | ||
masak | moritz: ok, for the sake of discussion, let's exclude meta things. | ||
but upcasts should be OK. | |||
moritz | upcasts are a meta thing | ||
masak | because they are just making fewer type assumptions about an object. | ||
no, not as in MOP. | |||
moritz | well, let's stay at the Perl 6 example | ||
10:13
rurban1 left
|
|||
moritz | if you have a sub dealwith(Rect $x) { ... } | 10:13 | |
masak | Perl 6 behaves like you say, actually calling the method based on the dynamic type. | ||
moritz | then if that does an upcast, it needs to go meta | ||
masak | Perl 6 doesn't really have upcasts in that sense. | ||
in the Java sense. | 10:14 | ||
moritz | well, it has $x.Rect::area | ||
masak | because Java distinguishes between "static type" and "runtime type". | ||
moritz | and if &dealwith used that instead of .area, people would say "that's stupid, you break subclassing" | ||
masak | p: class Rect { method area { say "rect" } }; class Square is Rect { method area { say "square" } }; Square.new.Rect::area | 10:15 | |
camelia | rakudo-parrot 796969: OUTPUT«rect» | ||
moritz | so my point is that explicit upcasing in a language that doesn't distingiuish static types and runtime types is likely to mess things up | 10:16 | |
and that say "Liskov" is no good defense for such behavior | |||
*upcasting | |||
*saying | |||
jnthn | FROGGS: On labels, I'd pondered using a QAST::WVal to refer to the label object, maybe making it an extra child or something for while/repeat/whatever... | 10:17 | |
Upcasts imply that you're doing some static compile-time decision making by type... | 10:19 | ||
masak | moritz: yes, it *is* likely to mess things up. | ||
jnthn | Not sure there's a use otherwise... | ||
jnthn doesn't quite see Square.new.Rect::area as an upcast... | |||
masak | moritz: more exactly, the Rectangle/Square example doesn't have a nice solution (with inheritance), unless you make the objects immutable. | ||
10:20
rindolf left
|
|||
moritz | masak: right | 10:22 | |
jnthn: well, it's the closest we can get to an upcast in Perl 6 | 10:23 | ||
jnthn | *nod* | ||
It plays the same kinda role. | |||
10:23
kivutar joined
|
|||
dalek | ast: bcdb5a5 | (Elizabeth Mattijsen)++ | S17-concurrency/channel.t: .for now is a Supply method |
10:25 | |
jnthn | timotimo: Oops. Looks like I may have introduced the bug while fixing the other bug... | 10:29 | |
FROGGS[mobile] | jnthn: ahh, I should create the unique label name in the actions already... that would solve it! | 10:30 | |
jnthn | FROGGS[mobile]: Well, you need an object I think so you can shove it in a WVal... | 10:31 | |
And then your uniqueness is just normal object referene semantics... | |||
timotimo | jnthn: glad to know i'm not 100% at fault :) | 10:33 | |
jnthn | timotimo: Why is invoke_right not used for the wild case? | ||
Seems we get a channel test failing due to that... | |||
$action = { $wild_done(:k($_)); } # is the one I mean | 10:34 | ||
dalek | kudo/nom: 0b79cb9 | jonathan++ | src/vm/jvm/core/asyncops.pm: Fix another winner bug. |
10:36 | |
10:37
sqirrel left
10:39
daniel-s left
|
|||
timotimo | jnthn: oh, good question. must have overlooked it :( | 10:47 | |
10:47
tgt joined
|
|||
jnthn | timotimo: Got a fix here | 10:50 | |
dalek | kudo/nom: b6eee1f | jonathan++ | src/vm/jvm/core/asyncops.pm: Fix done * { last }. |
10:51 | |
timotimo | jnthn: the talk's finished, right? | 10:52 | |
jnthn | aye :) | ||
.oO( no, I'm patching live on stage :P ) |
|||
masak | stranger things have happened. | 10:54 | |
timotimo | was it good, despite my bug-ridden implementaiton of WINNER? | ||
sjn | jnthn, lizmat: pad.hackeriet.no/p/p6-deploy | 10:55 | |
10:55
xenoterracide left
10:56
xenoterracide joined
|
|||
sjn | jnthn, lizmat: those are the notes tadzik and I made this summer when he was in Oslo and discussed deployment things | 10:57 | |
lizmat | cool, will have a look when I'm awake again | ||
jnthn | timotimo: Well, it was first talk of the day so...earrrly :P | ||
But I think it was OK | |||
lizmat | it was :-) | 11:02 | |
masak | jnthn++ # OK talk | 11:04 | |
tadzik | ok 1 - talk | 11:05 | |
Woodi | hej, hej :) | 11:07 | |
jnthn | masak: If you'd hopped on the train over the bridge, you coulda seen it :P | ||
um, assuming that's where you are :) | |||
Woodi | I wonder if $meth = $obj1.^can('meth')[0]; $meth($obj2) should be allowed to extract method CODE and do not do things via virtual methods table... | 11:08 | |
hmm, in Perl it should be allowed but not respecting inheritance is strange... | 11:10 | ||
jnthn | Woodi: It uses the method table to give you back the code... | ||
Woodi | yes, exactly :) | ||
jnthn | So you'll get most derived... | ||
oh, two different objects... | 11:11 | ||
Yeah, I can kinda see what you're saying. But if you've gone out of your way to not do a virtual dispatch... :) | |||
Woodi | probably in meta-reflection-things presence all is allowed, just not pure OO style... | 11:12 | |
anyway 'upcasting' means reaching up to the roots ? | 11:13 | ||
jnthn | Mostly, viewing an object as if it was one of its parent types | 11:14 | |
tadzik encounters www.pmichaud.com/toast/ | 11:15 | ||
Woodi | hej, Mrs. B.Liskov had "promise piplining" in 1982! and atomic ops too? lol? | 11:26 | |
lizmat | ".... cause the flaming SPTs to suddenly eject from the toaster. Unfortunately, this did not occur. " :-) | ||
jnthn | It's still a funny mental image... :) | 11:28 | |
11:28
gfldex left
11:29
gfldex joined
11:37
xenoterracide left
11:43
eternaleye left,
eternaleye joined
11:44
kurahaupo joined
11:46
rindolf joined
|
|||
masak | Woodi: I don't think that's how the word "lol" is used... ;) | 11:47 | |
jnthn: re bridge -- I considered it. but I can haz a cold :/ | |||
jnthn | masak: awww | 11:48 | |
lizmat | ah, so it was *you* who infected me! | ||
jnthn | masak: Though, you'd be in good company... | ||
lizmat | :-) | ||
11:50
berekuk left
|
|||
FROGGS | humm, that seems not all to bad... Error while compiling op control: get_bool() not implemented in class 'LABEL' | 11:52 | |
FROGGS .oO( "To boldly go where no man has gone before... " ) | 11:53 | ||
jnthn | FROGGS: We may want to put label on as a named arg | ||
Like xor gets false | |||
FROGGS: 'cus while and friedds are already var-arg (2 or 3 args) | |||
FROGGS | it is passed as a named, yes | ||
jnthn | oh, cool | 11:54 | |
FROGGS | :o) | ||
11:57
berekuk joined
12:04
spider-mario joined
12:10
rurban1 joined
12:14
rurban1 left
12:16
sqirrel joined
|
|||
dalek | kudo/nom: ea77e4f | (Elizabeth Mattijsen)++ | src/vm/jvm/core/Supply (2 files): .tap now has done/quit named parameters |
12:31 | |
ast: 635b34a | (Elizabeth Mattijsen)++ | S17-concurrency/ (2 files): Bring .tap tests up to spec |
12:44 | ||
12:46
denis_boyun joined
|
|||
dalek | kudo/moar-support: 23777bb | jonathan++ | src/vm/moar/ (2 files): Implement p6store for MoarVM. |
13:00 | |
FROGGS | \o/ | ||
jnthn | damn, I want hostmaster dk's internets... | 13:01 | |
so fast! | |||
FROGGS | *g* | 13:05 | |
jnthn: I thought I can use that as a hash, but apparently not... my $LABEL := $*W.pkg_create_mo(%*HOW<knowhow>, :name('VMHash')); | 13:06 | ||
what am I doing wrong? | 13:07 | ||
jnthn | Did you mean :repr? But anyways, not available on Parrot... | 13:10 | |
Wait, what are you doing? | |||
Creating a new *type* per label? | |||
FROGGS | hold on | 13:11 | |
jnthn | I'd just declare a class NQPLabel { } or so in the NQP core setting.... | ||
FROGGS | gist.github.com/FROGGS/e03e0b067431a23b790c | ||
ahh | |||
jnthn | Why'd you need a hash, though? | ||
FROGGS | yeah | ||
just to stash the labels... | |||
but I guess the NQPLabel is a better idea :o) | 13:12 | ||
jnthn | yeah, 'cus then you can check if it's the right one in the exception handler by reference equality... | ||
FROGGS | hmmm, I'm not sure I understand | 13:13 | |
bbiab, lunch | 13:14 | ||
jnthn | Well, when you have an exception handler for next/last exceptions, we need to check we got the right label? | ||
And keep going if not? | |||
timotimo | tadzik: you hvae an unmerged branch in nqp, "jvm-sockets", is that obsolete? | 13:26 | |
tadzik | timotimo: yeah, I think so | 13:28 | |
timotimo | should i delete it for you? | ||
tadzik | yeah, thanks :) | ||
timotimo | you probably have a local copy anyway | ||
tadzik | probably | ||
doesn't matter, we have sockets in jvm now :) | 13:29 | ||
timotimo | yeah | ||
maybe they're sucky? ;) | |||
13:30
renormalist left
|
|||
dalek | p: 2339be2 | jonathan++ | src/vm/moar/QAST/QASTOperationsMAST.nqp: Unboxers should decont. |
13:30 | |
tadzik | as apposed to mine? :P | ||
timotimo | yeah | ||
what do i know? ;) | |||
tadzik | unlike me, donaldh seemed to have some idea on what he was doing with them :P | 13:31 | |
timotimo | okay, great :) | 13:32 | |
tadzik | I made them work, he made them good | 13:33 | |
timotimo | jnthn: your old branch "repo-bug" has two commits, Get serialized object ownership model in place. and Add missing repossession barriers. - are they obsolete? | ||
tadzik | now, if we had some Perl 6 side spec on them, that'd be great | ||
other than "yeah, there should be recv, read, send, and something" | |||
jnthn | timotimo: How old is the branch? | ||
timotimo: and was it merged? | |||
timotimo | unmerged, 5 months old | 13:34 | |
but perhaps you cherry-picked the commits somewhere | |||
jnthn | hm, I've no idea what it was for :) | ||
sjn | tadzik: any thoughts/additions on the pad we made? | ||
dalek | kudo/moar-support: 673c790 | jonathan++ | src/vm/moar/ops/container.c: Stub in scalar store. |
||
timotimo | it touched java code | ||
13:34
renormalist joined
|
|||
lizmat | yikes! | 13:35 | |
jnthn | timotimo: Oh my, it's dirty | ||
timotimo | :) | 13:36 | |
jnthn | timotimo: I suspect I fixed the issue given we pass 99%+ spectests on JVM :) | ||
lizmat | only thing still really borked on JVM are backtraces | ||
jnthn | yeah, and I didn't immediately see why... | ||
timotimo | probably :) | ||
there's still a moarboot branch and it wasn't merged directly | 13:38 | ||
jnthn | that can go | 13:39 | |
I rebased | 13:40 | ||
13:40
berekuk left
|
|||
timotimo | there's also the cursless branch that i believe was somehow twiddled into master, but not "officially" merged to git. should i kill that as well? | 13:42 | |
jnthn | Yeah | ||
timotimo | now the branch list fits on one screen again for my terminal :) | 13:43 | |
13:43
xinming left,
xinming joined
13:49
berekuk joined
|
|||
moritz | today's mini-challenge: colinm.org/language_checklist.html make the appropriate check marks for Perl 6 | 13:52 | |
dalek | ast: 3e24470 | (Elizabeth Mattijsen)++ | S17-concurrency/channel.t: Remove tests for .peek |
||
timotimo | hm. how does using from NQP work? | 13:55 | |
i put a QRegex::Optimizer into QRegex/Optimizer.nqp, added that to the QREGEX_SOURCES and would like to use it from NQP/Optimizer.nqp | |||
just "use QRegex;" at the beginning of NQP::Optimizer gives me Lexical 'NQPCursorRole' already declared | 13:56 | ||
jnthn | timotimo: QRegex is already imported by default | ||
timotimo | having no use QRegex, though, gives me "no method for invocant of type NQPMu" because QRegex::Optimizer evaluates to NQPMu | ||
or at least i thought that was what it was | |||
jnthn | timotimo: I think it should live in the NQPP6Qregex lib, not the QRegex one, though... | 13:57 | |
timotimo | i can do that | ||
jnthn | QRegex is the runtime bits, the other one is the compile time bits | ||
timotimo | so i'll have to use NQPP6QRegex? | ||
ah, that's a good distinction | |||
so it should go into P6Regex/, too? | |||
jnthn | Yeah. But we already do that in NQP somewhere I think | ||
Yeah, I would. | |||
timotimo | i think i made it work, thanks! | 14:02 | |
jnthn | yayz | 14:03 | |
timotimo | more like QYay | ||
moritz | invented by qmichaud :-) | 14:04 | |
lizmat++ # non-ASCII release tag | 14:06 | ||
the first of its kind | |||
jnthn | Yeah, my console shoved the dots to the right of the o, though. Fail! | ||
dalek | kudo/nom: c64efea | (Elizabeth Mattijsen)++ | src/vm/jvm/core/Channel.pm: Make Channel.peek private, as it is not specced |
||
lizmat | hehe | ||
so, how much did I break ? | 14:07 | ||
14:11
rurban1 joined
14:16
MikeFair joined,
rurban1 left
|
|||
FROGGS compiles moar | 14:17 | ||
timotimo | so ... i've been thinking | 14:18 | |
since substr and findcclass and friends are pretty darn slow on utf8 when they have to scan the whole string to turn character offsets into byte offsets | |||
how about storing a little skip table for strings longer than 1kb? or something of that sort? | |||
14:21
raiph joined
|
|||
jnthn | timotimo: On Parrot we match the regex against ucs4 already when possible | 14:21 | |
FROGGS | "cannot numify this" | 14:22 | |
jnthn: is that where you are? | |||
jnthn | FROGGS: That means you haven't picked up the latest NQP patch I did too | ||
timotimo | right, i'm thinking of the cases where we don't have that | 14:23 | |
FROGGS | ahh, yes, very true | ||
timotimo | the problem is very visible when compiling the Actions and Grammar. | ||
dalek | kudo/nom: f276f25 | (Elizabeth Mattijsen)++ | src/vm/jvm/core/Channel.pm: last works again inside winner, jnthn++ |
||
timotimo | the line pos cache takes about 5 seconds for Actions.nqp, but only 0.002s for the whole of the setting. | ||
and Actions and Grammar have « and » in them. | |||
so we're taking a *crazy* performance hit there (i guess in that case it's because after each findcclass call where it finds a newline, it has to scan from the very beginning of the string again) | |||
dalek | ast: 9c17d2a | (Elizabeth Mattijsen)++ | S17-concurrency/channel.t: Magically, the "last" fix removes the hang |
||
timotimo | i wonder how long the lineposcache alone would take if the setting had one of those in it! not to mention the rest of the regex matching ... | 14:25 | |
lizmat | timotimo: but the setting *does* have « in them | 14:26 | |
*it | |||
timotimo | oh? | ||
is « and » still in ucs4? | |||
r: '«»'.ords.perl.say | |||
camelia | rakudo-jvm ea77e4: OUTPUT«(timeout)» | 14:27 | |
..rakudo-parrot ea77e4: OUTPUT«(171, 187).list» | |||
timotimo | seems like they are | ||
so something else must be in actions and gramar that prevents it from being represented as ucs4 | |||
p: '¢'.ords.perl.say | 14:28 | ||
camelia | rakudo-parrot c64efe: OUTPUT«(162,).list» | ||
jnthn | ucs4 = 32-bit, so yeah, all the unicode fits in it | ||
I guess the issue is that when we pick out substrings we do it on orig | |||
timotimo | hm. if i take a substr after each findcclass, i could perhaps remove one power of complexity | 14:29 | |
i'll copy the later parts lots of times, but i'll cut off from the beginning each time, rather than letting the scanning add up | |||
jnthn | timotimo: Well, trouble is that we only have the problem on one backend (Parrot) | 14:30 | |
timotimo: We don't keep strings around as UTF-8 anywhere else. | 14:31 | ||
So if you do anything, please make sure you mark it out as Parrot only, otherwise it's a pessimization for everything else. | |||
timotimo | oh, OK | 14:32 | |
my first idea for an approach to this was just having static variables in findcclass that will remember the last character->byte position that it was called on | 14:33 | ||
that would already cause a big boost in that specific case and gives me a ~7s faster compile (all in all) on my machine. | |||
jnthn | um...what if you call it on a different string next time? | ||
timotimo | it has to remember which string it was called on, of course | 14:34 | |
is there something smarter to recognize a string by than its address? parrot probably has a moving GC, right? | 14:35 | ||
FROGGS | "No registered operation handler for 'p6parcel'" <--- jnthn: this? | 14:36 | |
dalek | kudo/moar-support: 3afeb7f | jonathan++ | src/vm/moar/ (2 files): Implement p6parcel. |
14:38 | |
jnthn | FROGGS: was that :) | 14:40 | |
timotimo: Parrot GC doesn't move | |||
FROGGS | gah! | 14:41 | |
jnthn | Or at least, PMCs sure don't which I guess must mean nothing does... | ||
timotimo | that sounds helpful | ||
FROGGS | jnthn: I can't work that way! | ||
:P | |||
jnthn | fails in something enum related now | 14:42 | |
I'm guessing the enum TimeUnit at 14099 or so | |||
FROGGS | that'd be masak's fault then | 14:43 | |
jnthn | :P | ||
FROGGS | he's not meant to implement Stolpersteine :o) | ||
jnthn | yeah, it is in there...hm | 14:46 | |
dalek | kudo/nom: 5175adf | (Elizabeth Mattijsen)++ | src/core/Any.pm: Implement listless map provisionally |
14:47 | |
FROGGS | ahh, yes | 14:50 | |
Cannot find method 'key' | |||
at src/gen/m-Metamodel.nqp:2838 (blib/Perl6/Metamodel.moarvm:add_enum_value:17) | |||
jnthn | Yeah. Hmm | 14:52 | |
But there's an enum that worked earlier on... | |||
FROGGS | I'd guess that rebless or clone are buggy | ||
hmmm | |||
dalek | kudo/nom: b063f81 | (Elizabeth Mattijsen)++ | src/vm/jvm/core/Channel.pm: Implement Channel.list using a listless map |
||
jnthn | FROGGS: Why, ooc? | 14:58 | |
FROGGS | because it tries to call .key on $val which is created using nqp::rebless(nqp::clone(... in world line 1589 | 14:59 | |
I am printing now nqp::can($value, 'key') and nqp::can($val, 'key') | 15:00 | ||
ohh, humm | |||
jnthn | yeah, not a bad idea.. | ||
FROGGS | it already created three enum values, and nqp::can($value, 'key') was false-ish where nqp::can($val, 'key') was true | ||
timotimo | i have the "remove scan before BOS anchor" optimization done | 15:01 | |
FROGGS | I guess the $value we get is intended to not have a key method | ||
jnthn | Right, that's just an integer thingy | ||
Whereas we rebless it to get the enumeration related things | 15:02 | ||
FROGGS | ahh | ||
jnthn | r: enum Foo<a b>; say a ~~ Int; say a.WHAT | ||
camelia | rakudo-parrot c64efe, rakudo-jvm c64efe: OUTPUT«True(Foo)» | ||
jnthn | r: enum Foo<a b>; say a.^mro | ||
camelia | rakudo-parrot c64efe, rakudo-jvm c64efe: OUTPUT«(Foo) (Int) (Cool) (Any) (Mu)» | ||
15:05
kivutar left
|
|||
FROGGS | yeah, for the fourth enum value nqp::can($val, 'key') is false... | 15:05 | |
jnthn | odd, it's first time for me... | ||
timotimo | jnthn: were there any other super simple optimizations i could put into the regex engine for now? | 15:07 | |
moritz | not scan when a regex starts with ^ ? | 15:08 | |
timotimo | yup. | ||
that's the one i just implemented | |||
FROGGS | jnthn: the three things that work are of type Order btw | 15:10 | |
15:12
rurban1 joined
|
|||
jnthn | FROGGS: oh...ok, yes, they work for me too... | 15:12 | |
FROGGS: So we're seeing same. | 15:13 | ||
I meant first one of TimeUnit... | |||
dalek | ar: a2682c7 | moritz++ | README: [README] bump version, and memory requirement |
||
jnthn | ooh, I see a bug... | ||
diakopter grimaces ;) | |||
moritz | jnthn: when I look into RT, I see hundreds of bugs :-) | 15:14 | |
diakopter | moritz: 2GB on both parrot and jvm? | ||
moritz | diakopter: dunno; star is still parrot-only, mostly | 15:15 | |
diakopter | er, or do the instructions only apply to parrot (duh) | ||
diakopter throws the 'make star work on jvm backend' task at someone [else] | |||
[.. as if I would've/could've done it anyway :( ] | 15:16 | ||
15:16
rurban1 left
|
|||
timotimo | we're still blocking on arnsholt and/or jnthn finishing up jvm-nativecall? | 15:16 | |
FROGGS | jnthn: yes, TimeUnit fails | 15:17 | |
jnthn | Ain't nobody got timeunit for that... | ||
FROGGS | hehe | ||
dalek | ar: f554958 | moritz++ | modules/ (3 files): Upgrade json, panda and http-status |
15:18 | |
moritz | r: say 'foo'.ucfirst | 15:21 | |
camelia | rakudo-jvm c64efe: OUTPUT«No such method 'package' for invocant of type 'Any' in sub DEPRECATED at gen/jvm/CORE.setting:16745 in block at /tmp/sepRe6AsuQ:1 in any eval at gen/jvm/stage2/NQPHLL.nqp:1086 in any evalfiles at gen/jvm/stage2/NQPHLL.nqp:1292 in any co…» | ||
..rakudo-parrot c64efe: OUTPUT«FooSaw 1 call to deprecated code during execution.================================================================================Method ucfirst (from Cool) called at: /tmp/0SKP5WzTZ2, line 1Please use 'tc' instead.--------------------…» | |||
jnthn | Sadly, fixing the Moar bug didn't fix it... | 15:22 | |
FROGGS | :( | ||
I don't see where TimeUnit is so different from Order | |||
dalek | ar: 68b2d8c | moritz++ | docs/announce/2013.11.md: add initial release announcement |
15:23 | |
timotimo | so, is there some magic stuff on parrot that we can use to implement non-blocking IO? | 15:25 | |
or are we going to skip doing it on parrot and just have it on moar and jvm? | |||
diakopter | timotimo: well, did we even want to do it apart from slightly-preemptive threads for now? | 15:27 | |
moritz | timotimo: parrot doesn't have non-blocking IO, afaict | ||
timotimo: the docs are full with it, but it's not implemented at all | |||
timotimo | aaw | ||
jnthn | nqp::say(nqp::can($enum_type_obj, 'key')); # also 0... | 15:31 | |
timotimo | i'm wondering how to make the "if there's a literal at a known offset from here, use an boyer-moore to find it and step backwards" optimization elegant | 15:32 | |
i could create an rxtype peek that will advance the cursor by a given amount, do its sub-nodes and then move the cursor back a bit again | 15:33 | ||
does that sound sane? | |||
FROGGS | jnthn: yeah, I guessed that | ||
15:36
denis_boyun left
|
|||
timotimo | that could, imo, work well with the Want idea i had ... | 15:40 | |
15:43
daxim left
15:44
[Sno] left
15:45
[Sno] joined
|
|||
jnthn | FROGGS: well, seems it's not the method cache's fault. | 15:49 | |
15:55
denis_boyun joined
15:56
Rotwang left
|
|||
dalek | p/simplify_before: 4f8a8c0 | (Timo Paulssen)++ | / (3 files): QRegex::Optimizer lives in NQPP6QRegex now. |
15:58 | |
p/simplify_before: b7e33f0 | (Elizabeth Mattijsen)++ | VERSION: bump VERSION to 2013.11 |
|||
p/simplify_before: 1d3e6b1 | (Timo Paulssen)++ | src/QRegex/P6Regex/Optimizer.nqp: optimize the topmost regex node as well ... |
|||
p/simplify_before: 8cfd4c9 | (Timo Paulssen)++ | src/QRegex/P6Regex/Optimizer.nqp: a scan followed by a BOS anchor is useless. |
|||
moritz | Testing modules/jsonrpc... | 15:59 | |
===SORRY!=== | |||
Missing or wrong version of dependency '/home/moritz/p6/star/rakudo-star-2013.11/install/lib/parrot/5.9.0/languages/perl6/lib/MIME/Base64/PIR.pm6' | |||
(when testing R*) | |||
lizmat | something I did in the release ? | 16:01 | |
16:02
sqirrel left
|
|||
jnthn | FROGGS: Heh. The method table contains a couple of entries like Str<39311992>... | 16:02 | |
timotimo | heh heh | ||
that's a little wrong | |||
lizmat | isn't that a .WHICH value ? | ||
timotimo | looks like, yeah | 16:03 | |
jnthn | No, it's the default stringification | ||
retupmoca | moritz: is that something broken inside of MIME::Base64? | 16:04 | |
moritz | retupmoca: I don't know yet, might also be order of precompilation that's broken | 16:05 | |
16:10
xinming left
16:12
xinming joined
|
|||
timotimo | so i'm thinking we could optimize .* 'foobar' to do a from-the-end literal search for 'foobar'. does that seem sensible? | 16:12 | |
16:12
Rotwang joined
|
|||
timotimo | well, it seems safe to me, but how often will it be applicable? | 16:13 | |
jnthn | I agree on safe; I'm questioning applicability... :) | ||
timotimo | i mean, how often do you actually have .* | ||
and i was thinking that we can do a literal-scan even if we don't know the precise length of the prefix, if we have a minimum and maximum | 16:14 | ||
like in ...? foobar it could scan for foobar, go back 3, try to match, if it fails once, go back 2 instead of 3 and try again | 16:15 | ||
for ...? it doesn't make very much sense, but if it had something a tiny bit more complicated, it could help | |||
also a bit hairy to analyze :p | 16:17 | ||
16:18
dr_df0 joined,
dr_df0 left
16:36
dr_df0 joined
16:38
dr_df0 left
16:44
sqirrel joined
|
|||
timotimo | merging in the newest nqp changes gets me a Confused :( | 16:44 | |
16:59
rurban1 joined
|
|||
dalek | kudo/moar-support: 3ca2699 | jonathan++ | src/Perl6/Actions.nqp: Don't emit bindassert when constraint is Mu. |
17:16 | |
17:20
sqirrel left
17:23
ajr joined
17:24
ajr is now known as Guest28658,
Guest28658 is now known as ajr_
|
|||
dalek | kudo/moar-support: 6123c77 | jonathan++ | src/core/terms.pm: Add Moar sections in terms.pm. |
17:27 | |
jnthn | j: class A { ... } | 17:38 | |
camelia | rakudo-jvm b063f8: OUTPUT«===SORRY!=== Error while compiling /tmp/i0McVMGdnKThe following packages were stubbed but not defined: Aat /tmp/i0McVMGdnK:1------> class A { ... }⏏<EOL> expecting any of: argument list…» | ||
17:46
benabik left
17:50
nnunley joined
17:53
adu joined
|
|||
adu | I don't remember the last time I was in this channel | 17:55 | |
FROGGS | hi adu :o) | ||
adu | I FROGGS :) I remember you | ||
FROGGS | hehe | ||
dito | |||
adu | s/I/hi/ | ||
s/I F/hi F/ | 17:56 | ||
anyways | |||
I vaugely recall trying to help with nqp-jvm or something a couple months ago | 17:57 | ||
is jnthn around? | |||
moritz | hello | ||
adu | o hi moritz! | ||
18:04
raiph left
|
|||
adu | wooohooo! there is a "Building Rakudo on JVM" section in the readme! | 18:04 | |
TimToady | jnthn++ is currently at dinner | ||
adu | I'm so excited about JVM | ||
dalek | kudo/moar-support: b170926 | (Tobias Leich)++ | tools/build/Makefile-Moar.in: add new core source file |
18:05 | |
TimToady | and the implementation on moarvm has just passed the milestone of parsing the setting, so now is just a Small Matter of Semantics | ||
adu | is that a reference to www.brcommunity.com/b632.php ? | 18:06 | |
TimToady | nope | 18:07 | |
18:10
raiph joined
18:12
zakharyas joined
18:14
berekuk left
|
|||
timotimo | it seems like i have to go into parrot to make find_cclass and friends faster like that | 18:19 | |
how do i skip a known number of bytes for a string iterator without breaking things horribly? | 18:20 | ||
18:21
benabik joined
|
|||
timotimo | parrot doesn't offer that in its string API, i'm pretty sure if i patched it the way i'm thinking right now, the patch won't get accepted | 18:23 | |
moritz | I have a commit bit. I can accept it :-) | 18:24 | |
FROGGS | hehe | ||
moritz | not saying it would be a good idea... :-) | ||
dalek | ar: 71e7a14 | moritz++ | tools/build/Makefile.in: bump version |
18:26 | |
ar: ab71d00 | moritz++ | modules/Template-Mojo: Update Template-Mojo to a version that doesn't warn about .bless(*) |
|||
timotimo | i suppose i could implement a special version of find_cclass for utf8 that does the caching of the byte positions | ||
that way i can (but shouldn't) rely on internals of the utf8 string stuff | 18:27 | ||
lizmat | NPW shutting down, social to come& | ||
18:27
lizmat left
18:33
berekuk joined
18:35
slavik left
18:39
darutoko left
|
|||
TimToady | p: my @a = (); .say for map {}, @a; | 18:39 | |
camelia | rakudo-parrot b063f8: OUTPUT«Cannot call 'map'; none of these signatures match::(&code, *@values):(&code) in any at gen/parrot/BOOTSTRAP.nqp:1218 in any at gen/parrot/BOOTSTRAP.nqp:1209 in sub map at gen/parrot/CORE.setting:1770 in block at /tmp/4JZg8MYboA:1…» | ||
TimToady | p: my @a = (); .say for map {;}, @a; | ||
camelia | ( no output ) | ||
TimToady | p: my @a = (); .say for map {$_}, @a; | 18:40 | |
camelia | ( no output ) | ||
18:41
denis_boyun left
|
|||
TimToady doesn't quite believe in listless map | 18:41 | ||
p: my @a = (); .say for map {$_}; | |||
18:42
adu left
|
|||
camelia | rakudo-parrot b063f8: OUTPUT«(timeout)» | 18:42 | |
18:43
btyler joined
|
|||
TimToady | if we want that functionality, it should be named something else | 18:43 | |
diakopter | what does listless map iterate | 18:44 | |
TimToady had thought it iterated over 0..*, but apparently not | 18:45 | ||
p: my @a = (); .say for map {$_}, ^*; | |||
camelia | rakudo-parrot b063f8: OUTPUT«WhateverCode.new()» | ||
diakopter | ^* | ||
TimToady | hah | 18:46 | |
that's...probably a bug | |||
can argue it both ways | |||
diakopter | p: say ^* | 18:47 | |
camelia | rakudo-parrot b063f8: OUTPUT«WhateverCode.new()» | 18:48 | |
diakopter | p: say (^*)(44) | ||
camelia | rakudo-parrot b063f8: OUTPUT«0..^44» | ||
diakopter | p: say (^*)(^*) | ||
camelia | rakudo-parrot b063f8: OUTPUT«Cannot call 'Numeric'; none of these signatures match::(Mu:U \v: Mu *%_) in any at gen/parrot/BOOTSTRAP.nqp:1218 in any at gen/parrot/BOOTSTRAP.nqp:1209 in method Numeric at gen/parrot/CORE.setting:985 in sub prefix:<^> at gen/parrot…» | ||
TimToady | p: say (^*)(*) | 18:49 | |
camelia | rakudo-parrot b063f8: OUTPUT«Cannot call 'Numeric'; none of these signatures match::(Mu:U \v: Mu *%_) in any at gen/parrot/BOOTSTRAP.nqp:1218 in any at gen/parrot/BOOTSTRAP.nqp:1209 in method Numeric at gen/parrot/CORE.setting:985 in sub prefix:<^> at gen/parrot…» | ||
timotimo | oh, i can actually cache the iterator itself! wow, that's evil :) | ||
18:50
kaare_ joined
|
|||
timotimo | i meant clever! | 18:52 | |
FROGGS[mobile] | hehe | ||
timotimo | additionally: safe! :) | 18:55 | |
timotimo compiles a parrot to see how his code does | |||
18:58
lizmat joined,
dr_df0 joined
|
|||
timotimo | i made it only cache the iterator and stuff if it's more than 512 characters in, so that it only/mostly caches positions in source code files | 18:59 | |
for shorter strings the time growth due to endless rescans isn't terribly big | |||
19:01
woolfy joined
|
|||
TimToady doesn't undestand what "cache the iterator" means...does it mean caching the results of one? | 19:02 | ||
timotimo | it seems like my cache didn't get hit :\ | ||
i should debug this. | |||
TimToady | nwc10: does p5 still just cache the last used position on UTF-8? | 19:04 | |
TimToady cannot configure the JVM build right now; is that a known failure? | 19:08 | ||
19:09
xenoterracide joined
|
|||
FROGGS | TimToady: unknown to me at least... what happens (not)? | 19:16 | |
TimToady | gist.github.com/TimToady/7618709 | ||
this is after removing install, parrot, and nqp | |||
timotimo | i got it sped up by a factor of about 2 | 19:17 | |
maybe if i use 128 instead of 512 as the starting offset it'll be a tiny bit better still | 19:18 | ||
diakopter | TimToady: try real jvm? ;) | ||
timotimo | .o(still a horrid time, 2.5 seconds) | ||
19:18
raiph left
|
|||
diakopter | TimToady: seriously though, looks like a jvm problem | 19:20 | |
FROGGS | TimToady: I can build nqp-j HEAD on my box | 19:21 | |
java version "1.7.0_25" | |||
OpenJDK Runtime Environment (IcedTea 2.3.12) (7u25-2.3.12-4ubuntu3) | |||
OpenJDK 64-Bit Server VM (build 23.7-b01, mixed mode) | |||
TimToady | "If you would like to submit a bug report, please include instructions on how to reproduce the bug..." | ||
TimToady wonders if it's the sort of thing a reboot would fix... | 19:22 | ||
19:22
dr_df0 left
|
|||
timotimo | yup, i get a factor of 2 improvement. does that sound like something the parrot folks would be interested in? | 19:23 | |
19:24
fridim_ joined
|
|||
TimToady | nah, they're more interested in 5% improvements :P | 19:24 | |
19:25
btyler left
|
|||
timotimo | well, that's the kind of improvement i usually come up with, i'm not used to such big wins ;) | 19:26 | |
timotimo added the cache do find_notcclass just for symmetry | |||
TimToady | I think if we judge by appearances, every project is more interested in 5% wins :) | ||
what are you attaching this cache to? | 19:27 | ||
timotimo | C static variable | ||
(that's why i thought it was so elegant) | |||
TimToady | p5 stores it in the string itself | ||
well, in it's headers | |||
timotimo | then different operations could make use of it | 19:28 | |
hmm. | |||
TimToady | well, it's in a "magic" iirc | ||
but there's a long tradition of allowing caching mutability on otherwise immutable values, since the cache isn't officially part of the value | 19:29 | ||
timotimo | right. | 19:31 | |
19:31
btyler joined
|
|||
TimToady thinks p5 caches both the last positoin and the position of the end, and just picks whatever is closer to navigate from, since you can count utf-8 easily in either direction | 19:32 | ||
well, and position 0 of course | |||
but you don't have to cache that mapping :) | |||
timotimo | mhh, backwards | 19:33 | |
TimToady | utf8 has nice self-clocking characteristics that way | 19:34 | |
otoh, dunno how much effort we should put into supporting utf8 when we'll be moving to nfg soon | 19:35 | ||
well, it's apples and oranges, really, since nfg is an abstraction that could sit on top of any encoding | |||
and utf8 position is still codepoint position, which is bogus in the grapheme view | 19:36 | ||
timotimo | yup | ||
TimToady | "there are no plans to desupport parrot" but I don't know how long that can last once moar becomes a better parrot, and we introduce things that are "hard" in parrot | 19:38 | |
arguably, that has already happened with threading | |||
(albeit wrt the jvm, not moar) | |||
timotimo | i hope threading will be as easy on moar as it was on jvm ... but probably won't be :( | 19:39 | |
TimToady | it's...planned to be :) | ||
FROGGS | but we won't rip out the parrot glue code, even when other backends might support more and moar features | ||
timotimo | not for a long time, yeah | ||
nwc10 | TimToady: last two. Recent commit fixed something I got wrong - IIRC it was that for performance, it was best to always remember the most recent position you've been told to cache, and throw away one of the earlier ones | 19:40 | |
but that was because often it's a match or something else marching through the string linearly, so the next posisition requested is soon after the last one asked for | |||
TimToady | well, yes, most usage patterns are left-to-right | 19:41 | |
19:41
raiph joined
|
|||
nwc10 | the end is also cached | 19:41 | |
TimToady | yes, I suspected that above | ||
thanks | 19:42 | ||
nwc10 | this is as best I can remmeber - davem was the most recent person to deal with that code, and fixed the thing I got wrong | ||
19:43
sqirrel joined
|
|||
nwc10 | the p5 code assumes that you can walk forwards twice as fast as walking backwards, but I don't think that anyone has ever measured that | 19:43 | |
19:44
rindolf left
19:45
tgt left
|
|||
masak can walk forwards at least twice as fast as he can walk backwards... | 19:47 | ||
19:47
SL-RHanson left
|
|||
TimToady | nwc10: it'll be highly data dependent | 19:48 | |
masak | well, it depends on the exact parameters, actually. | ||
19:48
kivutar joined
|
|||
TimToady | ASCII will be about the same in either direction | 19:48 | |
masak | does running count? am I disqualified if I trip and fall? :P | ||
moritz call fall backwards twice as fast as he can talk forwards | |||
erm... | |||
s/call/can/ | |||
nwc10 | yes, it will depend on byte size. | ||
er, number of octets needed for a char | |||
TimToady | CJK will only have to visit 1 in every 3 bytes going forwards | ||
masak | btw, an autopun spotting from the other day: twitter.com/LeynerMark/status/4028...9535970304 | 19:49 | |
also by the way, I noticed "masak's fault" in the backlog... | 19:51 | ||
moritz | lizmat: (re 'make realclean' yesterday) I've fixed that in branch moar-support, and forgot to cherry-pick to nom | ||
masak | FROGGS: anything I can help with re TimeUnit? | ||
moritz | and now I kinda hope that moar-support lands soon enough that I don't have to bother :-) | ||
timotimo | ah, you can say "ah, i've had 100 CJK now, i'll just skip 2 bytes and see if it's a non-continuation byte!" | ||
that's pretty nifty. | |||
TimToady | timotimo: it's better than that, the first byte encodes the length | 19:52 | |
timotimo | oh! | ||
of course it does, i forgot about that | |||
parrot already does that with a table | 19:53 | ||
TimToady | you could do a speculative scan backwards that way though | ||
check position - 3 for a 3-byte codepoint | |||
would probably work nicely in CJK langauges | 19:54 | ||
well, as nicely as any variable length encoding can | |||
19:54
hummeleB1 left
|
|||
TimToady | we'll still hoping for a very fast conversion to NFG at the boundaries, and just vary the int size needed to support the current string, or piece of rope, or whatever | 19:55 | |
*we're | 19:56 | ||
timotimo | uh oh | 19:57 | |
nwc10 | Yes. and even without NFG I'm wondering if optimising traversal of things stored as UTF-8 is the best thing to attack | 19:58 | |
timotimo | building nqp on the newest parrot gives me unshift_string() not implemented in class 'Hash' in the src/vm/parrot/stage0/NQPMO-s0.pir | ||
nwc10 | compared with implementing storage as conversion to fixed 8, 32 (or 16) bit storage of code points. | ||
19:59
tgt joined
|
|||
TimToady | it's a pity more machines don't support 24-bit integers :) | 19:59 | |
FROGGS | masak: already fixed :o) | 20:00 | |
masak | \o/ | 20:01 | |
also, phew | |||
FROGGS | masak: this was the fix btw: github.com/MoarVM/MoarVM/commit/ab...b9e5a86118 | ||
:o) | |||
masak | I see. nice. | 20:02 | |
moritz | moritz.faui2k3.org/tmp/m-i.log that's what I get when running 'make modules-install' in the R* that I made locally | 20:05 | |
Missing or wrong version of dependency '/home/moritz/p6/star/rakudo-star-2013.11/install/lib/parrot/5.9.0/languages/perl6/lib/MIME/Base64/PIR.pm6' | |||
while building LWP::Simple | |||
but | 20:06 | ||
MIME::Base64::PIR is precompiled first (line 315, vs. error at line 325) | |||
so I have no clue what's wrong | 20:07 | ||
any ideas? | 20:11 | ||
moritz hates, hates, hates that error | 20:12 | ||
arnsholt | Me too | 20:15 | |
I usually end up rebuilding things, starting at the top and working my way towards NQP | |||
20:16
sqirrel left
|
|||
retupmoca | it looks like precompilation is breaking it somehow | 20:17 | |
moritz | retupmoca: aye, the question is just how to avoid it | ||
retupmoca | if I manually precompile the 3 .pm6 files in the MIME::Base64 repo, running a 'prove -e perl6-p' still throws the error | ||
moritz | retupmoca: if $*VM<name> eq 'parrot' { $default-backend | 20:18 | |
= MIME::Base64::PIR; | |||
retupmoca: how does that even compile on non-parrot backends? | |||
it should stumble over the undeclared class name, no? | 20:19 | ||
retupmoca | I have no idea | ||
but last time I tried, perl6-j ate it just fine | |||
and passed the tests | |||
FROGGS | it should be looked up indirectly | 20:20 | |
::('MIME::Base64::PIR') or so | |||
moritz | FROGGS: that's what I thought too | ||
20:21
xenoterracide left
20:22
MikeFair left
|
|||
retupmoca | if I change the 'require' to a 'use' it runs withtout that error | 20:22 | |
without* | |||
20:22
SamuraiJack left
|
|||
moritz | that fixes it for parrot, but will fail on the JVM | 20:24 | |
retupmoca | right | ||
since then it's not included conditionally | |||
if I comment out all the ::PIR stuff, it throws the same error for ::Perl | |||
FROGGS | you could stub a M::B::PIR class | ||
and then use require | 20:25 | ||
moritz | FROGGS: the problem with require is that it breaks precompilation, somehow, it seems | ||
FROGGS | r: try { require Hurz }; say GLOBAL:: | ||
camelia | rakudo-parrot b063f8, rakudo-jvm b063f8: OUTPUT«().hash» | ||
retupmoca | yeah, the require is what's messing it up somehow | 20:26 | |
and now that I look at it, I'm not sure how the JVM isn't barfing on that = MIME::Base64::PIR line | |||
but it still passes all the tests | |||
20:26
btyler left
|
|||
moritz | retupmoca: can you try with BEGIN eval 'use MIME::Base64::PIR' if $*VM<name> eq 'parrot' please? | 20:27 | |
20:27
MikeFair_ joined
|
|||
moritz | and then refer to the class as ::('MIME::Base64::PIR') | 20:27 | |
retupmoca | will do | ||
timotimo | gnite friends! | 20:29 | |
TimToady | o/ | ||
FROGGS | gnight timotimo | ||
retupmoca | moritz: works on JVM and parrot without any precompilation, but after precompilation on parrot: "t/basic.t .. ===SORRY!=== Missing or wrong version of dependency 'PIR.pm6'" | 20:31 | |
FROGGS | should it report the .pm6 at all? I would think it will complain about .pir | 20:32 | |
or .bpc | |||
pbc* | |||
retupmoca | gist.github.com/retupmoca/7619564 | ||
^-- what the file looks like after the BEGIN eval change | |||
20:33
berekuk left
|
|||
retupmoca | and comment added with the error I get | 20:34 | |
if I precompile ::PIR and ::Perl, but not the main MIME::Base64 file, it tests just fine | 20:35 | ||
moritz | but then dependent modules can't be precompiled either | 20:37 | |
which is, like, bad for star. Very bad. | |||
retupmoca | right, I'm just poking it to see what works since I don't know how precompilation works | 20:38 | |
moritz | ok, my idea for now is to create a branch in Perl6-MIME-Base64 | ||
which unconditionally uses ::PIR | |||
and use that in star | 20:39 | ||
for now | |||
TimToady | after a roboot, my parrot compilation fails, nqp_ops.c says "nqp_ops.c:12645:5: error: unknown type name ‘uint32_t’ | ||
moritz | that gives us another month to fix precompilaton + conditional use | 20:40 | |
retupmoca | oh, this is interesting | ||
if I remove the "fake use" comment, I get a slightly different error: "Missing or wrong version of dependency 'eval_0' | |||
moritz | oh | 20:41 | |
FROGGS | rp: #`[ use blarg ] | ||
camelia | ( no output ) | ||
FROGGS | rp: #`[use blarg;] | ||
camelia | ( no output ) | ||
moritz | jnthn: does rakudo still have this thing where module loading pre-parses the file somehow? | ||
FROGGS | well, yes | 20:42 | |
it evals it to capture its context, if you mean that | |||
retupmoca | moritz: do you want me to make a 'precompile-fix' branch for now then? | 20:43 | |
moritz | retupmoca: that would be helpful, yes | ||
moritz tries another thing: make the precompiler recognize 'require', and remove the fake-use comment | 20:45 | ||
nope, doesn't work :( | 20:46 | ||
retupmoca | moritz: branch precompile-fix now exists on github | 20:50 | |
moritz | retupmoca: thank you | ||
20:51
tgt left
20:52
tgt joined
20:53
raiph left
|
|||
dalek | ar: 5fc3b97 | moritz++ | modules/Perl6-MIME-Base64: use Perl6::MIME branch precompile-fix, retupmoca++ |
20:53 | |
ar: a0934a6 | moritz++ | tools/build/module-install.pl: precompilation order: consider require |
20:55 | ||
20:56
benabik left,
benabik joined
|
|||
moritz | moritz.faui2k3.org/tmp/rakudo-star-...RC0.tar.gz please test! | 20:58 | |
masak | moritz++ | 20:59 | |
retupmoca | I've also added a precompile-fix-pponly branch that only tries to load the pure perl version | 21:04 | |
just in case someone needs to run the precompile-fix version on a non-parrot rakudo | 21:05 | ||
(of MIME::Base64, of course) | |||
dalek | kudo/nom: 8d994cf | moritz++ | tools/build/check-versions.pl: adapt check-versions.pl error message to current Configure.pl realities |
21:06 | |
21:10
woolfy left
|
|||
moritz | ok, installation of RC0 went without any errors here | 21:12 | |
FROGGS tries to throw a label now | 21:13 | ||
retupmoca | I've never done a rakudo star install before - I can just do a make && make install, and it'll stay self-contained in $CWD, right? | 21:16 | |
moritz | yes, it installs to install/ | 21:18 | |
FROGGS .oO( To Install Or Not To Install? ) | 21:19 | ||
masak | ...that is the query. | 21:22 | |
itz_ | with that RC0 I get | ||
qp_ops.c: In function ‘Parrot_nqp_string_equal_at_i_s_s_i’: | |||
nqp_ops.c:12645:5: error: unknown type name ‘uint32_t’ | |||
moritz | itz_: is that with the parrot 5.9.0 that was shipped with the RC0? | ||
TimToady++ mentioned the same error earlier, but somehow I thought it was a new parrot | 21:23 | ||
FROGGS | that might even be a compiler-specific issue | 21:24 | |
itz_ | moritz: yes I did check I didn't have a different in my PATH | ||
moritz | LWP::Simple fails a test in t/basic-auth.t | 21:27 | |
because the URL it asks for has stopped working | |||
TimToady | it's just whatever parrot is being generated by: perl Configure.pl --backends='jvm,parrot' --gen-nqp --gen-parrot | 21:30 | |
after rm'ing install, nqp and parrot dirs | |||
dalek | ar: 7835615 | moritz++ | modules/perl6-lwp-simple: update LWP::Simple to a version that does not fail its tests |
||
TimToady | from HEAD | ||
moritz | TimToady: weird thing is, it's been that parrot for a month now | 21:31 | |
TimToady | not even making it to the "make" | ||
TimToady wonders if there's been header file movement on linux | |||
but you'd think it'd fail an include if so | 21:32 | ||
FROGGS | Parrot_nqp_string_equal_at_i_s_s_i is an improvement by timotimo and should live in nqp | ||
TimToady | well, it's compiling nqp_ops, wherever that lives | ||
FROGGS | nqp, yes | ||
moritz | commit c726cd58f3ab3a1dc27191496b4cee26aa752a69 | 21:33 | |
Author: Timo Paulssen <timonator@perpetuum-immobile.de> | |||
Date: 2013-10-08 19:46:02 +0200 | |||
add nqp::eqat to jvm and parrot. | |||
that's the first commit that git log -S uint32_t finds | |||
FROGGS | right | 21:34 | |
can't we just use INTVAL instead of uint32_t? | |||
uint32_t only appears once in nqp | 21:35 | ||
moritz | or we can use int32_t | ||
benabik | If uint32_t doesn't exist, I rather doubt int32_t will. | ||
moritz | but int32_t occurs first | 21:36 | |
21:36
stevan_ left
|
|||
FROGGS | right, one line before the failing one | 21:36 | |
moritz | so why should the compiler complain about uint32_t? | ||
21:36
stevan_ joined
|
|||
moritz | and int32_t is also used once in code from 2011 | 21:37 | |
ok, trying with INTVAL now | |||
arnsholt | I'm pretty sure Parrot extension could should just use INTVAL | 21:39 | |
That'll be signed, not unsigned, but more portable than uint32_t | 21:40 | ||
dalek | p: bdc22b9 | moritz++ | src/vm/parrot/ops/nqp.ops: try to fix the build on some systems |
||
moritz | TimToady: please try again with --gen-nqp=master | ||
arnsholt | IIRC uint32_t and friends are missing on MSVC | ||
moritz | if it works, I'll make a nqp-2013.11.1 point release | 21:42 | |
FROGGS | "Not a throwable object" arghhh! | ||
that sounds like me talking to my kids | |||
moritz | lol | ||
TimToady | trying... | 21:44 | |
21:56
ajr_ left
21:57
raiph joined
|
|||
TimToady | appears to have got past nqp_ops this time | 21:57 | |
moritz | \o/ | ||
TimToady | oh, funny thing, it got the same JVM failure, but rerunning the config immediately with the exact same command succeeded | 21:58 | |
dalek | p: 2ad90ea | moritz++ | VERSION: bump VERSION to 2013.11.1 seems we had build failures on some platforms, so a point release is in order to ensure a reliable Rakudo Star build |
||
TimToady | so probably an out-of-memory thing | ||
21:59
kaare_ left
|
|||
moritz | ok, nqp point release tagged and uploaded | 21:59 | |
TimToady | okay, finally got all the way through a: perl Configure.pl --backends='jvm,parrot' --gen-nqp=master --gen-parrot | 22:00 | |
now to make, finally | |||
dalek | ar: 0b7ee80 | moritz++ | tools/star/Makefile: we need NQP 2013.11.1 |
22:01 | |
moritz | R* RC1 will have to wait until tomorrow, time for the regularly scheduled downtime | ||
FROGGS | moritz: have a nice downtime :o) | 22:02 | |
TimToady | \o \o/ o/ | ||
22:08
zakharyas left
|
|||
TimToady | hmm parsing the setting with perl6-j only takes about 45% of the time of perl6-p now | 22:18 | |
FROGGS | that seems familiar | ||
TimToady checks out the inside of his eyelids to see if they're familiar & | 22:20 | ||
FROGGS | o/ | 22:23 | |
22:23
raiph left
|
|||
raydiak | r: {foo => (1,2,3).map: {$_}} | 22:24 | |
rakudo: {foo => (1,2,3).map: {$_}} | |||
camelia | rakudo-jvm 8d994c: OUTPUT«(timeout)» | ||
( no output ) | |||
( no output ) | |||
raydiak | what am I doing wrong? | 22:25 | |
r: {foo => (1,2,3).map: {$_}}.perl | |||
camelia | ( no output ) | ||
raydiak | r: {foo => (1,2,3)} | 22:26 | |
camelia | ( no output ) | ||
raydiak | r: say {foo => (1,2,3)}.perl | ||
camelia | rakudo-parrot 8d994c, rakudo-jvm 8d994c: OUTPUT«{"foo" => $(1, 2, 3)}» | ||
raydiak | r: say {foo => (1,2,3).map: {$_}}.perl | ||
camelia | rakudo-parrot 8d994c, rakudo-jvm 8d994c: OUTPUT«{"foo" => ().list.item}» | 22:27 | |
22:27
raiph joined
|
|||
raydiak | there we go. that demonstrates my problem. lazy lists in hashes don't seem to work. or something. | 22:28 | |
r: say [(1,2,3).map: {$_}].perl | |||
camelia | rakudo-parrot 8d994c, rakudo-jvm 8d994c: OUTPUT«[1, 2, 3]» | ||
raydiak | r: say {foo => (1,2,3).map: {$_}}.perl | 22:29 | |
camelia | rakudo-parrot 8d994c, rakudo-jvm 8d994c: OUTPUT«{"foo" => ().list.item}» | ||
raydiak | is it broken? or is it me? anyone? | 22:30 | |
r: say [[(1,2,3).map: {$_}]].perl | 22:32 | ||
camelia | rakudo-parrot 8d994c, rakudo-jvm 8d994c: OUTPUT«[[1, 2, 3]]» | ||
FROGGS | rp: say ((1,2,3).map: {$_}).perl | 22:33 | |
camelia | rakudo-parrot 8d994c: OUTPUT«(1, 2, 3).list» | ||
FROGGS | seems you hit a bug, yes | ||
rp: say (foo => ((1,2,3).map: {$_})).perl | |||
camelia | rakudo-parrot 8d994c: OUTPUT«"foo" => (1, 2, 3).list.item» | ||
raydiak | JSON::Unmarshal was failing tests...this turned out to be why | 22:34 | |
FROGGS | star: say {foo => (1,2,3).map: {$_}}.perl | 22:35 | |
camelia | star 2013-09: OUTPUT«{"foo" => ().list.item}» | ||
FROGGS | raydiak: did it work before? | ||
I mean, is that a regression? | |||
raydiak | FROGGS: never tried it before, I'm new...but I'm assuming it worked at some point in the last 4 months (latest commit) | 22:36 | |
FROGGS | then we might need to bisect it | 22:38 | |
raydiak | I'll file a bug report | 22:39 | |
22:39
adu joined
|
|||
FROGGS | raydiak++ | 22:41 | |
raydiak | thanks FROGGS++ I can finally stop banging my head against that wall :) | 22:43 | |
22:44
raiph left
|
|||
FROGGS | :o) | 22:44 | |
22:48
berekuk joined
23:10
adu left
23:11
sqirrel joined
23:12
adu joined
23:22
sqirrel left
23:38
kst` joined
|
|||
adu | hmm | 23:39 | |
pastie.org/8504195 | 23:40 | ||
23:40
kst left
|
|||
adu | perhapsn rakudo-jvm isn't quite working yet | 23:41 | |
FROGGS | adu: increase java's max memory? | 23:43 | |
adu | how do I do that? -d64? | ||
but what if it's an infinite loop, then increasing it to a finite amount of memory won't help | 23:44 | ||
This is the test: | 23:46 | ||
pastie.org/8504203 | |||
23:49
raiph joined
|
|||
FROGGS | more like -Xmx1600m, I think you need to edit perl6-j | 23:50 | |
well, if the C grammar is huge (what I' expect), then you need a bit of ram | 23:51 | ||
23:52
kst`` joined
|
|||
adu | it's only around 1KLOC | 23:53 | |
23:54
kst` left
|
|||
adu | github.com/andydude/c2drox/tree/master/lib/C | 23:54 | |
it was working quite well on parrot | |||
FROGGS | jvm is memory hungry... | 23:55 | |
adu | perhaps I should try a json parser first | ||
FROGGS | I have no working rakudo atm, so I can't test | ||
adu | or datauris | 23:56 | |
'data:' <content-type>? (';' <key> ('=' <value>)? )* ',' <any-chars> | 23:58 | ||
or something like that |