»ö« 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. |
|||
00:00
replore joined
00:18
fgomez joined
00:20
replore left
00:28
silug left
00:29
spider-mario left
00:47
replore joined,
replore left
00:57
mucker left
01:04
cognominal left,
cognominal joined
|
|||
MikeFair | I have a rule stat_or_block { <block> | <statement> } -- I've been using say messages to watch as it's being parsed. What I've noticed is the <statement> part of the rule never seems to get tested | 01:06 | |
any ideas? | |||
TimToady | whitespace messing up LTM maybe | 01:08 | |
MikeFair | LTM? | ||
TimToady | longest token matching | ||
MikeFair | Well I'm getting a "can't parse" failure | ||
01:08
replore_ joined,
replore_ left
|
|||
MikeFair | so clearly the <block> is failing | 01:08 | |
Would whitespace cause the <statement> not to be evaluated? | 01:09 | ||
TimToady | I can't vouch for rakudo's parser in that regard | ||
but | should be a parallel LTM-ish match, not sequential like || | 01:10 | ||
MikeFair | I've seen references to a Grammar Tracer thing of some kind, is there something like that I can use in Parrot's Compiler Toolkit | ||
TimToady | oh, what are you using to parse? | ||
MikeFair | TimToady: oh sorry about that, I'm using parrot | ||
TimToady | I have even less to say about parrot | ||
that almost certainly does not do LTM correctly | |||
01:11
benabik left
|
|||
MikeFair | if 1 then say 1 | 01:11 | |
So where can I read up on how the LTM is getting created? | 01:12 | ||
It's going through all the various <block> matches, then just giving up | 01:13 | ||
TimToady | parrot doesn't do LTM | ||
I only know how Perl 6 works (or is supposed to (or I'm supposed to)) | 01:14 | ||
MikeFair nods. | |||
Well Parrot is using NQP | |||
Grammar rules | 01:15 | ||
At least that's the part I'm using | |||
atm | |||
if I reserve the order of them and do <statement> | <block> I get a different error :) | 01:16 | ||
(the one I'm expecting) | |||
01:18
benabik joined
|
|||
MikeFair | I'm off for a bit! | 01:18 | |
bbl | |||
TimToady: thx! | |||
TimToady was in a funny jetlag state earlier today--could program, but couldn't backlog... | 01:20 | ||
TimToady tries again to backlog | |||
01:26
_jaldhar left
01:29
replore joined
01:30
replore left
01:35
_jaldhar joined
01:41
benabik left
01:42
benabik joined
01:53
FROGGS_ left
01:55
dju left
02:00
jeffreykegler joined,
dju joined
|
|||
jeffreykegler | I have a question about semantics in grammar rules | 02:01 | |
S05 says you set the AST element via make | 02:02 | ||
But looking at STD.pm, it seems to be almost never used | |||
I'm thinking in terms fo the traditional parse tree semantics -- you know, parent takes child as arguments .... | 02:03 | ||
and passes result up to its own parent ... | |||
benabik | STD.pm doesn't really generate an AST, just a parse tree. | ||
(IIRC) | 02:04 | ||
jeffreykegler | In other words, I'm looking for the semantics in the wrong place? It's not in STD.pm | ||
TimToady | it does generate an ast, but its action routines are written in Perl 5 (in viv), so it just emulates make, without using that feature of Perl 6 directly | 02:05 | |
jeffreykegler | OK | ||
TimToady | and I believe that niecza just uses the match tree directly | ||
despite being STD-based | |||
jeffreykegler | I'm trying to imitate Perl 6 for the semantics of "Sixish", a Perl 6-like Marpa interface | ||
How might I say that the semantics are in routine &do_x()? | 02:06 | ||
TimToady | STD is in kind of a funny place, because it's trying not to commit to any particlar AST representation | ||
jeffreykegler | <&do_x()> ? | ||
02:07
FROGGS_ joined,
xdbr left
|
|||
TimToady | STD uses an Action package that dispatches to the same name as the rule that is being reduced | 02:07 | |
jeffreykegler | Which explains why my study of STD.pm from the semantics point of view was so frustrating | ||
TimToady: Aha! | |||
TimToady | which actually doesn't scale terribly well to derived grammars... | 02:08 | |
jeffreykegler | So the semantics is by rule name, and is elsewhere | ||
TimToady | we'd need to derive Action modules in parallel with the languages, but we don't try to | ||
or somehow derived grammars need to give their rules a derived identity | 02:09 | ||
jeffreykegler | So right now, semantics is separate from grammar and the connection is made by rule name | ||
TimToady | yes | ||
though, in fact, derived grammars are represented in P5-land with nested packages, so the info is kinda there | 02:10 | ||
jeffreykegler | I'm kind of torn -- semantics often looks cool right next to the rule, but ... | 02:11 | |
it does clutter, and it's not clear which is nicest | |||
TimToady | it tends to prevent the grammar from being re-used for other purposes though | ||
ingy | seen mberends | ||
aloha | mberends was last seen in #perl6 18 days 1 hours ago joining the channel. | ||
jeffreykegler | I take it's your opinion that as a general matter, it is best to separate the two | 02:12 | |
02:12
replore_ joined
|
|||
TimToady | for the STD5 grammar (a Perl 5 grammar I've been working on), it's partially derived from STD, and it seems to have worked out okayish | 02:12 | |
albeit with a bit of copy/paste for some rules | 02:13 | ||
the spec intends 'make' to be useful from within the rules, though rakudo at one point interpreted it as only in action rules; dunno if that's still the case | |||
so as usual we try to have it both ways | 02:14 | ||
at the expense of not having AST building be the default in the main grammar | |||
since we want to degrade gracefully to simple match trees | |||
if you have any ideas for how to make that transition more gracefully, I'm all ears | 02:15 | ||
jeffreykegler | So I could just express the semantics via rule name and :dba | ||
TimToady | well, :dba is primarily for error messages | 02:16 | |
I seem to recall some other use once, but it has slipped my mind what the details were | |||
jeffreykegler | Is there a more appropriate way of aliasing for semantic purposes than :dba ? | ||
TimToady | or whether we still use :dba for something else | ||
02:17
replore_ left
|
|||
jeffreykegler | TimToady: Re the transition, I don't think I'd have any useful ideas | 02:18 | |
As my questions indicate, I'm trying to learn to feel my way through this area | 02:19 | ||
TimToady | :dba is primarily intended to be enlightening to the recipient of the error message; dunno whether that's compatible with semantic markup that is interesting to the writer | ||
well, all of us are still trying to learn our way through this :) | |||
diakopter | (some several times over) | 02:20 | |
MikeFair | TimToady: What's the transition you're thinking of? | ||
TimToady | erasing the boundary between regex and grammar | ||
we've made that fairly seemless on the parsing end of things, but it's a bit clunky to add in an AST still | 02:21 | ||
jeffreykegler | OK. I won't use :dba, because I don't want to have the Sixish syntax have jarring differences with that of Perl 6 | ||
Perhaps I might as well make up my own adverb, such as :action("action | |||
TimToady | the colonpair notation is meant to be an extension mechanism in any case, so you can make up your own | ||
MikeFair | TimToady: I'm working on building up to establishing the AST as a service and using zmq's zero-copy mechanisms as a sort of in process SOA | 02:22 | |
02:23
orafu left,
orafu joined
|
|||
MikeFair | TimToady: I don't know if it will work, but mentally it makes me completely abstract the the concepts of Grammar and semantics | 02:23 | |
TimToady | well, certainly there are aspects of it that may be amenable to inversion of control | 02:24 | |
MikeFair | TimToady: Eventually it will give me an execution pipeline 'Grammar parser thread' <-> 'AST'/language binging <-> Execution module | ||
sorear | TimToady: niecza uses "make" heavily in the action package | ||
TimToady | but as usual it comes down to a question of identity | ||
MikeFair | TimToady: SQL in postgres has the same sort of idea, the postgres engine specifically executes a query plan, which is the same thing as AST like thing | 02:25 | |
So there's clearly a pattern | |||
TimToady | mostly I just try to get this stuff close enough that smarter people can take it in various directions :) | 02:26 | |
MikeFair | TimToady: identity how? I think of it like a web session, where the AST side of things will track a cookie for each "Grammar" socket/client | 02:27 | |
TimToady: Every time a particular client (a Grammar parser) makes an API call, the "current context" of that call will be known | 02:28 | ||
At least I've failed in every attempt to explain to myself why it's not a good idea, and ZMQ will make the network part pretty simple | 02:29 | ||
TimToady | there are usually several kinds of context floating around, and it's not always trivial to know which parts contribute to a given entity's uniqueness | 02:30 | |
(that's Tagmemics 101, basically) | 02:31 | ||
MikeFair | TimToady: Another approach I was considering was registering named sockets, which we can also do. | 02:32 | |
02:32
Circlepuller_ joined
|
|||
MikeFair | ack -- interuptted | 02:32 | |
bl | |||
bbl | |||
TimToady | linguistically speaking, that's the whole etic vs emic distinction; which features contribute to identity, and which are merely epiphenominal in this current language | 02:33 | |
02:34
replore_ joined,
Circlepuller left
|
|||
jeffreykegler | TimToady: I went off & tried to look up "colonpair" notation | 02:34 | |
I'm not really sure what you meant | 02:35 | ||
diakopter | the replacement for the fat arrow pair | ||
:key(value) | |||
jeffreykegler | diakopter: why "colonpair"? there's just one colon :-) | 02:36 | |
TimToady | see S02:Adverbial_Pair_forms | ||
jeffreykegler | TimToady: Thanks, will do | ||
diakopter | the colon introduces the pair | ||
TimToady | and a colon is a pair of dots :) | 02:37 | |
jeffreykegler | TimToady, diakopter: OK, sure :-) | ||
02:38
replore_ left
02:45
tokuhiro_ left
02:50
replore joined
|
|||
diakopter watched the first episode of the new documentary on the life of the conjoined twins who share a whole body. they had a documentary when they were 16; now they are 22 | 02:53 | ||
it ... boggles the mind, continously. | 02:54 | ||
somehow they both control most of the body; the head on the right controls the arm on the right and the head on the left controls the arm on the left. it showed them dribbling a basketball back and forth between hands, *without*looking* | 02:56 | ||
sorry for the OT. tlc.howstuffworks.com/tv/abby-and-b...any/videos | 02:59 | ||
03:05
erkan left
03:06
popl left
03:09
jeffreykegler left
03:12
erkan joined,
erkan left,
erkan joined
03:15
immortal joined,
immortal left,
immortal joined,
erkan left
03:19
replore left
03:23
replore joined
03:47
replore left
|
|||
MikeFair | TimToady: Still about? | 04:38 | |
If I'm understanding the emic and etic descriptions right then emic => class and etic=> interface that class implements | 04:42 | ||
It's also really well described by the Entity Framework pattern that real time video games have come up with | |||
04:43
kaare_ joined
|
|||
MikeFair | They break their framework into multiple "Systems" (which I think of as the verticals dimension), and orthoganal to the "Systems" are "Entities" (which I consider the horizontal dimension) | 04:44 | |
04:45
telex left
|
|||
MikeFair | There's on other piece I can't recall the name of which is basically the equivalent to an "Interfaces"/"Types"/"Class" like thing | 04:46 | |
An entity is a specific instance of an object that binds together a specific set of Interfaces which the "Systems" require from the Entity in order to perform their work | |||
An "Entity" instance might actually have bits and pieces of itself stored all over the place in each of the various "Systems" because it's the Systems that know how to keep track and operate on the Entities values | 04:48 | ||
If two "Systems" are operating on the same value they can synchronize information via the instances given Entity ID | 04:49 | ||
It's really easy to see how this works in a complex 3D game like system because each "Entity" really has many domains of data, for instance, the sound track / sounds the object makes have almost nothing to do with the visuals | 04:50 | ||
Just like the visuals have almost nothing to with say the entities AI algorithm | 04:51 | ||
But all three of those systems have to share the "Point in 3D space" information about the same object | 04:52 | ||
04:56
telex joined
|
|||
MikeFair | So the theory I have for the programming I want to put into the langauge I'm working on fits really nicely with all these ideas because I'm working on treating the "threads" of a program as part of a distributed system | 04:58 | |
So that gives my execution model. Each class is a separate thread that keeps track of the properties for instances of its objects | 05:00 | ||
(a factory) | |||
but also a worker | |||
Now these of these "vertical" threads can be chained together "horizontally" via message queues (using libzmq) | 05:02 | ||
Now when I say "thread" I say it because it creates the right image for separation, but likely it won't be implemented that way (at least not until I move it onto the GPU :) ) | 05:03 | ||
Now since I want to allow anyone to be able to program for this system, rather than making them learn a new language for this system, I'm planning on using native language-like syntax | 05:05 | ||
05:07
telex left
|
|||
MikeFair | The first language is English, implementing/copying the constructs from the xTalk family of languages (like hyperCard/SuperCard and others) | 05:08 | |
because they've been at this for so long, they've got some really good ideas/cheats/experience in what it's like to use the english language to do this | 05:09 | ||
They don't try and be extensible with the language though and that's where Perl6 can make all the difference | |||
Perl6 is basically all the semantics of xTalk, with none of the syntax | |||
(Well Perl6 is missing a couple, like messagePath for instance, but that can be added) | 05:10 | ||
05:10
telex joined
|
|||
MikeFair | TimToady: So that's it - that's why I'm here, and why I'm really keen on making sure the Grammar/Actions present a really clean abstraction layer, so that other native languages can be ported | 05:11 | |
TimToady: So summing all that up into a simple recommendation of how to go about simplifying/cleaning up the separation, imagine there's a programming language that has a structured, well defined, english-like almost natural syntax | 05:13 | ||
What can be described in English, can also be described in other native languages, at least for the purposes of programming | |||
So the framework/API needs to be such that a small set of contirbutors can "localize" the syntax of the language into their native tongue | 05:14 | ||
Wash/Rinse/Repeat for other DSLs (like SQL) | 05:15 | ||
moritz | good morning * | 05:18 | |
MikeFair | TimToady: I didn't recognize that this was really that import and core design goal for Perl6 so I'm glad you said something about it, otherwise i'd just have kept quite. Thanks | 05:19 | |
moritz: Hey there! Good morning | |||
like my little tirade? | 05:21 | ||
moritz | I haven#t backlogged yet | 05:23 | |
MikeFair | ahh :) | 05:24 | |
05:33
isBEKaml joined
|
|||
isBEKaml | OHHAI, pugs-compat cabal build with GHC 7.4.1 shows failure. Seems to depend on haskell98 but is unable to locate it. gist.github.com/3595096 | 05:34 | |
05:45
drbean joined
|
|||
isBEKaml | slow day today. =) | 06:04 | |
sorear | huh. I *just* received the 2012.08 p6l announce | 06:05 | |
isBEKaml | For anyone that's interested in my Pugs issue, it was due to incompatibilities between base and haskell98 packages. I think the way to fix this would be to migrate code using IO module to using System.IO module. | ||
sorear | I got two copies of it on the day of | ||
isBEKaml | (that's in pugs-compat) | ||
hello, sorear | |||
sorear | hello, isBEKaml. | 06:06 | |
isBEKaml | how's things with niecza? | 06:07 | |
sorear | (were you at yapc::eu?) | 06:14 | |
isBEKaml | No, I have never been outside country. :) | 06:15 | |
sorear | niecza is losing -Ofun for me, so I'm probably not going to be doing too much with it; my Perl 6 involvement in the future is likely to be with the Rakudo/NQP porting efforts | ||
I have this idea that you're German | |||
oh, mumbai | |||
06:15
fgomez left,
fgomez joined
|
|||
isBEKaml | Oh, I'm sad to see that - I have been trying to follow niecza with some interest (time permitting) | 06:16 | |
Yes, I'm from India | |||
06:16
PZt left
|
|||
isBEKaml | I think changing direction towards Rakudo/NQP to CLR environment won't hurt anything. | 06:17 | |
That's an equally worthy goal | |||
sorear | niecza is really feeling the pain of some design decisions I made in early 2011 | ||
moritz | fwiw rakudo has had several such pain points too | 06:18 | |
which lead to some of the famous rewrites | |||
isBEKaml | Like ? From what I have seen, no project every goes smoothly without any rewrites. | ||
s/every/every/ | 06:19 | ||
gah, ever! (muscle memory, sorry) | |||
sorear | i've been on IRC for 7 years, I'm pretty good at reading mangled text | 06:20 | |
isBEKaml | hello, moritz | ||
FROGGS_ | morning | ||
sorear | hello FROGGS_. also, moritz | ||
isBEKaml | o/ FROGGS_ | ||
moritz | \o | ||
n: constant name = 'a'; sub ::(name) { 42 }; say a() | 06:21 | ||
p6eval | niecza v21-1-ga8aa70b: OUTPUT«42» | ||
sorear | n: BEGIN my $name = 'a'; sub ::($name) { 42 }; say a() | ||
p6eval | niecza v21-1-ga8aa70b: OUTPUT«42» | ||
FROGGS_ | do I have to wrap them with a sub? can't I import a constant directly from a module? | 06:25 | |
sorear | importing constants from modules is allowed by spec | 06:26 | |
you may be hitting a bug | |||
moritz | the two are mostly unrelated | 06:29 | |
dalek | ast: eb6e664 | moritz++ | S02-names/indirect.t: basic test for declarations with indirect names |
06:32 | |
06:33
PZt joined
|
|||
dalek | kudo/nom: 1f86d22 | moritz++ | t/spectest.data: run indirect name declaration tests |
06:37 | |
d: 36c6322 | larry++ | / (2 files): parse <<END with correct quote language |
06:39 | ||
06:44
marmay joined
06:46
krunen left
06:50
krunen joined
06:51
PZt left
06:52
PZt joined
|
|||
dalek | d: 2f65afc | larry++ | STD_P5.pm6: allow p5 code to switch back to p6 |
07:01 | |
07:08
thou left,
immortal left
07:10
thou joined,
erkan joined,
erkan left,
erkan joined
07:12
isBEKaml left
|
|||
ingy | what's the p6rules syntax for committing to a rule? | 07:15 | |
07:15
isBEKaml joined
07:22
replore_ joined
|
|||
ingy | :: looks promising | 07:22 | |
sorear | ::: | 07:23 | |
wait, what exactly do you want? | 07:24 | ||
::: commits all choice points in the current rule | |||
:: commits all choice points up to and including the last | | |||
07:25
mucker joined
|
|||
ingy | sorear: I'm really just looking for a syntax token for Pegex to say, don't back up | 07:27 | |
it's nice when it roughly follows p6 | |||
07:28
isBEKaml left
|
|||
sorear | ingy: if the stuff after the token fails to match, how far back should pegex skip? | 07:29 | |
ingy | sorear: I'm thinking it should fail at that point | 07:31 | |
07:32
replore_ left
|
|||
sorear | ingy: fail the rule? (:::) fail the entire matching process? (<commit>) | 07:33 | |
07:33
SamuraiJack joined
|
|||
sorear | we don't like <commit> very much here because you can't recover from it | 07:33 | |
07:35
GlitchMr joined
|
|||
ingy | sorear: I'm trying to get the error handling more elegant. I don't really have enough test cases yet, though. | 07:36 | |
a: b | c | `error msg for rule a` | 07:38 | ||
same as | |||
a: b | c | ERR_a; ERR_A: `error msg for rule a` | |||
it might be nice to have implicit calls to ERR_a | 07:39 | ||
anyway just ruminating and wondering what p6 did... | 07:40 | ||
sorear | so, you haven't clarified how far you want the commit to fail to | 07:42 | |
there's also <commit('RULE_NAME')> in p6, which does what it sounds like | |||
ingy | I guess I don't grok why I wouldn't want to fail completley | 07:43 | |
reading through the relevant s05 | 07:48 | ||
sorear | ingy: If you fail completely there is no chance for error recovery. | 07:51 | |
ingy | understood | 07:53 | |
masak | morning, #perl6 | 08:02 | |
ingy | sorear: I'm leaning towards: | 08:05 | |
a: b :: c | |||
means | |||
a: b ( c | ERROR_a ) | 08:06 | ||
so :: is a nice syntax that effectively means <commit> | |||
masak | GlitchMr: for looping backwards along a range, I'd really recommend doing `for reverse ^.chars` or equivalent. | 08:07 | |
ingy | but I don't really need anything except to make grammars more succinct, afaik | ||
masak | GlitchMr: it's very readable. and it circumvents the "limitation" that ranges have of not going backwards. maybe in the future it'll be a very optimized case too, who knows? | ||
ingy | hi masak | ||
GlitchMr | The problem is that 0 shouldn't be in range | 08:08 | |
So, I'm using .chars ... 1 | |||
08:09
thou left
08:10
birdwindupbird joined
|
|||
masak | GlitchMr: then, `reverse 1 .. .chars` | 08:12 | |
GlitchMr | But what's wrong with ... | ||
(aside of that it's sequence operator?) | |||
masak | nothing wrong with it. it just doesn't follow the Principle of Least Power in this case. | ||
nothing wrong with it being the sequence operator either. that's what it is. | 08:13 | ||
GlitchMr | With two arguments, it's a range | ||
masak | no, it's still a sequence of items. | 08:14 | |
a Range is a type in the type system. | |||
r: say (1..5).^name; say (1 ... 5).^name | |||
p6eval | rakudo 1f86d2: OUTPUT«RangeList» | ||
masak | a Range is *one* item. the List consists of five items. | ||
GlitchMr | Hmmm, yeah | 08:15 | |
masak | as long as you have a Range, it's in an unexpanded state, and only contains information about its endpoints. | 08:16 | |
which is why this is a very cheap operation: | |||
r: say (0 .. 1_000_000_000).perl | |||
p6eval | rakudo 1f86d2: OUTPUT«0..1000000000» | ||
GlitchMr | reverse doesn't really seem clear... but range(1, 11, -1) in Python doesn't either | 08:17 | |
masak | and that's why I said 'reverse $min..$max' may some day be optimized. because the elements still haven't expanded. | ||
what's not clear about 'reverse 1..5'? | |||
I think it reads extremely well. | |||
GlitchMr | That end point is star point? | ||
masak | right. because it was reversed. | 08:18 | |
GlitchMr | start* | ||
08:19
birdwindupbird left
|
|||
masak | it doesn't seem that unclear to me. at least, no more unclear than `abs -5`, which removes the minus sign and produces +5. | 08:20 | |
GlitchMr | But why somebody would use abs with constant value? | ||
08:23
Patterner left
|
|||
masak | this one was just an example. the example still holds if you put a variable there: `abs $v`. | 08:23 | |
if you know the semantics of &abs, you know that the result will be a positive value. | |||
if you know the semantics of &reverse, you know that the result will be a reversed list of values. | 08:24 | ||
08:24
Psyche^ joined
08:25
Psyche^ is now known as Patterner
|
|||
GlitchMr | Well, at least it's more explicit than similar operator in CoffeeScript which makes unoptimized code... | 08:25 | |
'for i in [$_.length .. 1]' generates 'for (i = _i = _ref = $_.length; _ref <= 1 ? _i <= 1 : _i >= 1; i = _ref <= 1 ? ++_i : --_i) {}' | 08:26 | ||
huf | their range operator goes both up and down? /o\ | ||
masak | I'm glad I'm not using a language where the range operator can go downwards... :/ | 08:27 | |
GlitchMr | The problem being that you don't know when it will go down | 08:28 | |
huf | for it to be useful, the range operator must be able to return empty lists | ||
or empty ranges | |||
or empty somethings | |||
GlitchMr | If $_.length is smaller than 1 (let's say that string is empty), it iterates for 0 and 1 | ||
Not really useful | |||
And probably good reason why I should use reverse instead | 08:29 | ||
masak | yes. | ||
GlitchMr: because of -- exactly -- what huf just said. | 08:30 | ||
GlitchMr | I just have noticed this after I've ran similar code in CoffeeScript | 08:31 | |
huf | php's range() function is broken like that too... webby languages :) | 08:32 | |
GlitchMr | Not only that, range() in PHP isn't iterator ;) | 08:33 | |
But... | |||
huf | there's that too, but that's an optimization in a sense | ||
GlitchMr | And being explicit with $step doesn't help. $step always uses abs() on itself | 08:34 | |
That could be fun | |||
In Python, if you want to have reverse range, you have to specify $step of -1 | 08:35 | ||
step* | |||
gist.github.com/3595918 | 08:36 | ||
panda not found | |||
That could be fun | |||
08:40
replore joined
|
|||
GlitchMr | Also, I think I forgot about this, but in CoffeeScript you CAN be explicit. | 08:44 | |
MikeFair | Is "the name of my function" available as a perl6 variable somehow? | ||
GlitchMr | 'for i in [$_.length .. 1] by -1' generates 'for (i = _i = _ref = $_.length; _i >= 1; i = _i += -1) {}' | ||
masak | we used to have the :by adverb for ranges (in the spec). it got tossed by the wayside for philosophical reasons. | ||
basically, where we had :by previously, we now have infix:<...> | 08:45 | ||
(though I still prefer to reverse ranges in the :by(-1) case) | |||
GlitchMr | MikeFair: I guess no (but I'm not sure) - function could have multiple names or it could be nameless | 08:46 | |
But you can reference to current subroutine using &?ROUTINE | 08:47 | ||
08:47
replore left
|
|||
MikeFair | Hmm, that's a start | 08:47 | |
sorear | sleep& | 08:48 | |
GlitchMr | oh, wait, you can | ||
perl6: sub abc { &?ROUTINE.name }; print "<{abc}>" | |||
p6eval | rakudo 1f86d2, niecza v21-1-ga8aa70b: OUTPUT«<abc>» | ||
GlitchMr | But I wouldn't depend on this | ||
08:50
replore joined
|
|||
masak | why not? | 08:50 | |
GlitchMr | What is .name for anyways? | 08:51 | |
perl6: my &subroutine = do { my sub this-is-not-a-subroutine { } }; say &subroutine.name; | 08:52 | ||
p6eval | niecza v21-1-ga8aa70b: OUTPUT«Potential difficulties: &this-is-not-a-subroutine is declared but not used at /tmp/STSNbvHIN_ line 1:------> = do { my sub this-is-not-a-subroutine ⏏{ } }; say &subroutine.name;this-is-not-a-subroutine» | ||
..rakudo 1f86d2: OUTPUT«this-is-not-a-subroutine» | |||
GlitchMr | It returns 'this-is-not-a-subroutine' even if you cannot call sub {} with this name | 08:53 | |
When you have first-class functions, even if you can get name, it won't help you much | 08:54 | ||
Is there any good reason to have .name aside of "other languages have it?" | 08:56 | ||
arnsholt | Because sometimes, you do need it | 09:00 | |
09:02
birdwindupbird joined
09:03
MayDaniel joined
|
|||
GlitchMr | It simply doesn't work in anything more complex than PHP. | 09:04 | |
(in PHP, function references are function names) | |||
huf | doesnt work for what? | 09:06 | |
(also, not entirely true for php) | |||
GlitchMr | I know, PHP has closures since PHP 5.3 | ||
09:08
replore left
|
|||
GlitchMr | perl6: (1 .. 5).map(&sin).perl.say | 09:09 | |
p6eval | rakudo 1f86d2: OUTPUT«This type cannot unbox to a native integer in method reify at src/gen/CORE.setting:5187 in method reify at src/gen/CORE.setting:5089 in method gimme at src/gen/CORE.setting:5467 in method perl at src/gen/CORE.setting:5687 in block at /tmp/XC4UqGsuB7:1»… | ||
..niecza v21-1-ga8aa70b: OUTPUT«(0.8414709848078965e0, 0.90929742682568171e0, 0.14112000805986721e0, -0.7568024953079282e0, -0.95892427466313845e0).list» | |||
GlitchMr | Another Rakudo bug? | ||
09:10
birdwindupbird left
|
|||
moritz | looks like it, yes | 09:15 | |
nr: say &sin.arity | 09:16 | ||
p6eval | niecza v21-1-ga8aa70b: OUTPUT«1» | ||
..rakudo 1f86d2: OUTPUT«0» | |||
moritz | nr: say &sin.count | ||
p6eval | niecza v21-1-ga8aa70b: OUTPUT«1» | ||
..rakudo 1f86d2: OUTPUT«Inf» | |||
moritz | oh. | ||
GlitchMr | Why &sin doesn't have arity? | 09:17 | |
moritz | cause it's declared as proto sub sin(|) {*} in rakudo | ||
which is the most extensible thing to do | 09:18 | ||
GlitchMr | Numeric multi method sin ( Numeric $x ) is export | ||
This is in synopsis | |||
moritz | and wrong | 09:19 | |
GlitchMr | It should be Cool, isn't it? | ||
This is so confusing | |||
09:21
kaare_ left
09:26
marmay left
|
|||
moritz | that would declare a method with the invocant plus another argument | 09:27 | |
and yes, there should be a Cool variant too | |||
09:32
tokuhiro_ joined
|
|||
moritz | nqp: say(nqp::index('a', 'b')) | 09:33 | |
p6eval | nqp: OUTPUT«-1» | ||
moritz | nqp: say(nqp::index('abc', 'b')) | ||
p6eval | nqp: OUTPUT«1» | ||
GlitchMr | > so index 'a', 'a' | 09:35 | |
False | |||
Why? | |||
Couldn't index have something like "but True"? | 09:36 | ||
moritz | rakudo doesn't implement StrPos yet, which should do that part | 09:37 | |
just use s/so/defined/ | |||
r: class DYNAMIC { }; say DYNAMIC | |||
p6eval | rakudo 1f86d2: OUTPUT«===SORRY!===Cannot use pseudo-package DYNAMIC in a package name» | ||
tadzik | good morning #perl6 | 09:39 | |
GlitchMr | * MATCH ":moorcock.freenode.net 004 SixtySixBot moorcock.freenode.net" | 09:41 | |
But... it matches | |||
Now I'm really confused | |||
If it matches, why it doesn't | |||
or | |||
moritz | GlitchMr: your question doesn't make any sense to somebody who doesn't see exactly what you do | ||
GlitchMr | print so RawEvent.parse(':moorcock.freenode.net 004 SixtySixBot moorcock.freenode.net ircd-seven-1.1.3 DOQRSZaghilopswz CFILMPQbcefgijklmnopqrstvz bkloveqjfI') | 09:42 | |
I see... | |||
moritz | n: sub DYNAMIC() { }; DYNAMIC() | ||
p6eval | niecza v21-1-ga8aa70b: ( no output ) | ||
GlitchMr | gist.github.com/3596274 | ||
How it could match if TOP rule has ^ and $ | |||
moritz | r: gist.github.com/3596274 | 09:43 | |
p6eval | rakudo 1f86d2: OUTPUT«===SORRY!===Confusedat /tmp/5XRFKGwNbd:1» | ||
GlitchMr | It's probably glitchmr@strawberry ~> cat debug.p6 | ||
moritz | right | ||
GlitchMr | r: gist.github.com/3596277 | 09:44 | |
p6eval | rakudo 1f86d2: OUTPUT«===SORRY!===Could not find Grammar::Tracer in any of: /home/p6eval/.perl6/lib, /home/p6eval/nom-inst/lib/parrot/4.7.0-devel/languages/perl6/lib» | ||
moritz | star: gist.github.com/3596277 | ||
GlitchMr | r: gist.github.com/3596279 | ||
p6eval | star 2012.07: OUTPUT«TOP| user| * [37;41mFAIL| host| | space| | * [37;41mFAIL| | space| | * [37;41mFAIL| | space| | * [37;41mFAIL| | space| | * [37;41mFAIL| | space… | ||
rakudo 1f86d2: OUTPUT«True» | |||
GlitchMr | * MATCH ":moorcock.freenode.net 004 SixtySixBot moorcock.freenode.net" | 09:45 | |
I still wonder how it matched when it shouldn't | |||
moritz | remove the 'so' | ||
and s/print/say/ | 09:46 | ||
GlitchMr | r: gist.github.com/3596279 | ||
p6eval | rakudo 1f86d2: OUTPUT«:moorcock.freenode.net 004 SixtySixBot moorcock.freenode.net ircd-seven-1.1.3 DOQRSZaghilopswz CFILMPQbcefgijklmnopqrstvz bkloveqjfI» | ||
GlitchMr | what? | ||
moritz | it parses all the trailing garbage as params | ||
params => 「bkloveqjfI」 | |||
$<params>=<-space>+ | 09:47 | ||
GlitchMr | gist.github.com/3596287 | ||
What? | |||
As for bot itself, it looks like gist.github.com/3596290 | 09:48 | ||
moritz | looks like a bug in the bot module | 09:49 | |
GlitchMr | my $event = Net::IRC::Parser::RawEvent.parse($line) | 09:51 | |
or $*ERR.say("Could not parse the following IRC event: $line") and next; | |||
huh? | |||
It parsed except it didn't? | 09:52 | ||
moritz | GlitchMr: I can't make any sense of what you say | ||
what do you mean by "It parsed except it didn't?"? | |||
GlitchMr | ok, I've enabled debug mode | 09:53 | |
gist.github.com/3596312 | |||
It crashed just after MOTD | |||
github.com/TiMBuS/Net--IRC/blob/ma...Bot.pm#L55 | 09:54 | ||
hmm... | |||
\c is decimal escape? | 09:55 | ||
That looks like \xD\xA for me | |||
In method .sendln... | 09:57 | ||
.send in CORE.setting attempted to call .seek | |||
Except .seek is... not implemented? | |||
arnsholt | moritz: Could you take a look at the libnames branch in Zavolaj? | ||
The new test works on OS X, but because Linux does weird stuff with library names it doesn't work there. If you have any good ideas that'd be awesome | 09:58 | ||
moritz | arnsholt: yes. What exactly should I look at? | ||
moritz git fetches | 09:59 | ||
my $realname = !$libname.DEFINITE ?? "" !! $libname; | 10:01 | ||
why not write that as my $realname = $libname // ""; ? | |||
arnsholt | Because it's been reduced from code that actually needed the ternary, and I just mechanically reduced it =) | ||
moritz | arnsholt: does this require any extra rakudo or nqp branches/commits? | 10:02 | |
arnsholt | Yeah | 10:03 | |
nqp/dyncall-libnames | |||
moritz | arnsholt: is that branch just one patch? | 10:04 | |
arnsholt | So far, yeah | 10:06 | |
But since it breaks old versions of Zavolaj and is kinda experimental in general I kept it in a branch | 10:07 | ||
moritz | well | ||
I have only glanced at the C code | |||
does PARROT_LOAD_EXT and PARROT_SHARE_EXT contain the dot? | 10:08 | ||
arnsholt | Yup | ||
moritz hopes so | |||
arnsholt | They do =) | 10:09 | |
moritz | aye | ||
arnsholt | But the real problem is the new test in Zavolaj. On my Linux machine, it fails because the C library is libc.so.6 and not libc.so >.< | ||
GlitchMr | Perhaps github.com/TiMBuS/Net--IRC/tree/use-muevent will work | ||
arnsholt | On OS X it's just libc.dylib | ||
GlitchMr | But can panda install from alternate git branch? | ||
Timbus | hi | ||
no it wont | 10:10 | ||
tadzik | I never taught it to :) | ||
oh, use-muevent | |||
and I ended up with my own fork :) | |||
Timbus | muevent chokes after a few dozen lines | ||
tadzik | yeah, then unchokes | ||
Timbus | oh? | ||
GlitchMr | Timbus: I cannot get your Net::IRC::Bot module to work | 10:11 | |
This is code: gist.github.com/3596290 | |||
tadzik | Timbus: yeah, it's sort of funny | ||
GlitchMr | And this is result: gist.github.com/3596312 | ||
tadzik | it either unchokes after ~30 seconds, or... | ||
or you can set up another socket (listener, via MuEvent), and then when you send anything to it, the IRC socket "unchokes" | |||
I have no idea how this works | |||
Timbus | :I | ||
GlitchMr | I've tried using Freenodebot.pl, but it also doesn't work | 10:12 | |
In similar way | |||
Timbus | might be worth looking at wrapping libev in zavolaj | ||
moritz | arnsholt: isn't that why, by convention, the empty string as a library name looks into libc? | ||
tadzik | my wild guess was that we're too slow at receiving packets, and freenode stops sending them after a while | 10:13 | |
Timbus | GlitchMr, dunno, 'seek' doesnt exist? | ||
strange | |||
GlitchMr | This is newest Rakudo by the way | ||
glitchmr@strawberry ~/g/SixtySixBot> perl6 -v | |||
This is perl6 version 2012.08-63-g1f86d22 built on parrot 4.7.0 revision RELEASE_4_7_0-165-g29796c6 | |||
Or perhaps... | 10:14 | ||
moritz | arnsholt: at least I dimly recall reading that, and I'm afraid that's my only contribution to that topic :( | ||
Timbus | GlitchMr, cant seem to reproduce this on a slightly older rakudo. | 10:15 | |
moritz | recently a branch was merged in parrot that re-did much of the IO subsystem | 10:16 | |
Timbus | o | ||
moritz | after the 2012.08 release | ||
Timbus | i.. couuuld look into that | 10:17 | |
tadzik | hm | 10:18 | |
10:20
Moukeddar joined
|
|||
tadzik | hm, this now fails on new rakudo: gist.github.com/3596516 | 10:22 | |
(foo is the input) | 10:23 | ||
GlitchMr | I wonder why people use complicated prompts ;) | ||
tadzik | just for the sake of having a two-line prompt | ||
arnsholt | moritz: No, dlopen(NULL) lets you dig into the libraries already loaded by the executable | 10:24 | |
Not quite the same, but since pretty much any program will link against libc it works for getting at that stuff | |||
But since I want to make sure both dylibs and bundles work on OS X, I have to load a library I can be reasonably sure exists everywhere | 10:25 | ||
Maybe I'll just make it a test run only on OS X | |||
GlitchMr | This prompt actually reminds me my very old prompt | 10:29 | |
dl.dropbox.com/u/63913412/dos.png | |||
lizmat | jnthn: ping | 10:31 | |
phenny | lizmat: 01 Sep 18:11Z <jnthn> tell lizmat le NQP branch merge is done, which unblocks your ops work :) | ||
lizmat | getting on that now | 10:35 | |
jnthn | lizmat: pong | 10:38 | |
lizmat | you left the answer I wanted to ask | 10:39 | |
:-) | |||
10:40
spider-mario joined
|
|||
jnthn | aha :) | 10:40 | |
GlitchMr | If I want stability, I should use stable release | 10:42 | |
Except some modules aren't so stable | 10:43 | ||
Moukeddar | guys, sorry to bother you, but how do you plan your project , we're talking here about a single developer project ? any suggestions ? | ||
GlitchMr | Moukeddar: uhmmm... what project? | ||
Moukeddar | it's a pet project, a mix of web and desktop stuff | 10:44 | |
10:46
MayDaniel left
10:47
DarthGandalf left
|
|||
Moukeddar | so ? | 10:48 | |
lizmat | hhmmm… make test generates errors *after* it seems done? | 10:49 | |
jnthn | lizmat: ? | 10:50 | |
lizmat: nopaste? | |||
lizmat | gist.github.com/3596762 | ||
moritz | Moukeddar: 1) be clear on what you want to do 2) identify a minimally useful subset of functionality 3) implement that 4) grow from there | 10:51 | |
Moukeddar | moritz, i can do that using a spreadsheet :) , thanks :) | 10:52 | |
lizmat | jnthn: there is more if you want | ||
lizmat pasted the whole thing now | |||
jnthn | lizmat: I'm guessing it invokes prove mutliple times | ||
huh, t/setting... | 10:53 | ||
10:53
DarthGandalf joined
|
|||
jnthn | hm, that lot looks bitrotten. | 10:53 | |
lizmat | jnthn: after git pull this morning, make test did: | 10:54 | |
$ make test | |||
make: *** No rule to make target `src/pmc/dispatchersub.pmc', needed by `src/pmc/nqp_group.bundle'. Stop. | |||
jnthn | lizmat: Did you just make? | 10:55 | |
lizmat | I figured I needed to run Configure.pl again | ||
jnthn | lizmat: Right. | ||
lizmat | make came up with the same error | ||
jnthn | lizmat: That's expected. Configure.pl generates the Makefile | ||
lizmat | then ran make again, then make test gave these errors | ||
jnthn | If something gets removed, the makefile has to be re-generated | ||
lizmat | that's what I figured :-) | ||
jnthn | I can't see how these tests could ever have worked for...a while | ||
10:55
Moukeddar left
|
|||
jnthn | (the t/setting ones) | 10:55 | |
lizmat | so I guess the reason is: why are they being tested now? | 10:56 | |
I don't think they were before | |||
jnthn | That's weird | ||
They don't run for me when I "nmake test" | |||
jnthn checks again | |||
lizmat will start with a fresh repo and see what it gives | 10:57 | ||
moritz | jnthn: moritz.faui2k3.org/tmp/0001-fix-dec...name.patch seems to work, but it's somewhat ugly | 10:58 | |
and probably not correct in corner cases | |||
n: sub CALLER::foo() { } | |||
p6eval | niecza v21-1-ga8aa70b: OUTPUT«===SORRY!===Pseudo package CALLER may not be used in compile time reference at /tmp/ZtyDslPwV7 line 1:------> sub CALLER::foo⏏() { }Potential difficulties: &foo is declared but not used at /tmp/ZtyDslPwV7 line 1:… | ||
moritz | nr: sub CALLER() { say 42 }; CALLER() | 10:59 | |
p6eval | niecza v21-1-ga8aa70b: ( no output ) | ||
..rakudo 1f86d2: OUTPUT«42» | |||
moritz | nr: sub a::b() { } | 11:00 | |
p6eval | rakudo 1f86d2, niecza v21-1-ga8aa70b: ( no output ) | ||
moritz | nr: sub a::b() { }; a::b() | ||
p6eval | rakudo 1f86d2: OUTPUT«Could not find symbol '&b' in method <anon> at src/gen/CORE.setting:9796 in at src/gen/Metamodel.pm:2317 in any find_method_fallback at src/gen/Metamodel.pm:2305 in any find_method at src/gen/Metamodel.pm:859 in at src/gen/BOOTSTRAP.pm:826 in any at … | ||
..niecza v21-1-ga8aa70b: ( no output ) | |||
jnthn | lizmat: Here, nmake test only runs t/nqp, t/qast and t/hll | 11:03 | |
moritz | no regex tests? | ||
jnthn | No | ||
It...does for you? | |||
well, wtf | |||
moritz | it did last I tried | ||
jnthn | test: all core-test setting-test qregex-test | ||
moritz | does one of them fail for you? | 11:04 | |
jnthn | I get the usual 46 fail due to no ICU | ||
moritz | well | ||
that will lead to the rest of the tests not being run | 11:05 | ||
jnthn | oh. | ||
why the heck is it set up to do all these different invocations of prove? | |||
proposal: make test just calls prove with all the things? | |||
Apart from t/setting, which I'm somewhat inclined to nuke. | |||
11:06
JimmyZ joined
|
|||
moritz | iirc the background is that if you simply invoke the harness, a failure on the top can scroll by, and at the end you don't see that anything failed | 11:07 | |
well, if you do it in one line, it would work | |||
jnthn | Right, that's my idea | ||
moritz | +1 then | ||
jnthn | Yeah, that way gets you one summary at the end | 11:08 | |
11:08
lizmat left
11:09
lizmat joined
11:13
kaare_ joined
|
|||
lizmat | jnthn: a fresh clone gives the same errors | 11:19 | |
should I look at fixing the tests? | |||
dalek | p: 1801844 | jnthn++ | tools/build/Makefile.in: Clean up test targets so they actually run all of the tests they're expected to and give a single summary at the end of doing so. |
11:21 | |
p: e4db73c | jnthn++ | t/ (7 files): Steal a couple of the tests that still makes sense from t/setting into t/nqp, then toss t/setting, which was largely bit-rotten. |
|||
jnthn | lizmat: Those commits should clean things up | 11:22 | |
lizmat | ack | ||
many errors less, but a new one appeared | 11:23 | ||
gist.github.com/3597242 | 11:24 | ||
jnthn | Did you re-Configure? | ||
(I updated the Makefile.in)... | 11:25 | ||
lizmat | no, will do now :-) | 11:26 | |
All tests successful :-) | 11:31 | ||
jnthn | \o/ | ||
Time to break stuff! | 11:32 | ||
;) | |||
lizmat | working on it :-) | ||
11:35
birdwindupbird joined
|
|||
lizmat | r: .say for 1 .. 5 | 11:35 | |
p6eval | rakudo 1f86d2: OUTPUT«12345» | ||
lizmat | rn: .say for 1 .. 5 | ||
p6eval | rakudo 1f86d2, niecza v21-1-ga8aa70b: OUTPUT«12345» | ||
dalek | p: 9dc2b8d | (Elizabeth Mattijsen)++ | / (2 files): Eradicated pir::does(...,'hash') for nqp::ishash |
11:37 | |
11:40
birdwindupbird left
|
|||
dalek | p: 237fae7 | (Elizabeth Mattijsen)++ | / (2 files): Eradicated pir::get_who__PP for nqp::who |
11:43 | |
GlitchMr | gist.github.com/3597564 | 11:49 | |
Am I doing something incorrectly? | |||
And why %*ENV is readonly? | 11:51 | ||
lizmat | jnthn: Can only use repr_defined on a SixModelObject | 11:59 | |
ring a bell? | |||
this is about s/nqp::defined/nqp::isconcrete/ | 12:00 | ||
jnthn | lizmat: Yeh | 12:06 | |
*Yeah | |||
That's why we need nqp::defined I guess | |||
lizmat | so pir::defined -> nqp::defined? | ||
for now, then? | 12:07 | ||
or are there some nqp::defined's that should become nqp::isconcrete? | |||
GlitchMr | glitchmr@feather ~> perl6 -v | 12:08 | |
This is Rakudo Perl 6, version 2010.08 built on parrot 2.7.0 | |||
oh | |||
I read it as 2012.08 | |||
12:09
Timbus|Away joined
|
|||
GlitchMr | But... why Perl 6 development server would have two years old version of Rakudo | 12:10 | |
lizmat is pinging juerd | 12:11 | ||
bonsaikitten | because no one upgraded? :) | ||
lizmat | it appears that the one responsible for upgrading did not upgrade | 12:14 | |
trying to find out who that was | |||
GlitchMr | But at least they haven't lied with "A recent version of pugs to work with". pugs is recent enough. | ||
It says "Copyright 2005-2012" | 12:15 | ||
12:15
Timbus left,
Timbus|Away is now known as Timbus
|
|||
lizmat | GlitchMr: could it be that your perl6 is a symlink to someone's home dir | 12:15 | |
GlitchMr | glitchmr@feather ~> which perl6 | 12:16 | |
/usr/local/bin/perl6 | |||
Not really | |||
lizmat | after checking with Juerd, he says that it was basically the idea that everybody would compile their own | ||
GlitchMr | I see... | 12:17 | |
lizmat | and that the system one was just something that you could use as a very basic bootstrap | ||
12:17
erkan left,
immortal joined,
immortal left,
immortal joined
|
|||
lizmat | I'll be seeing juerd IRL next Tuesday at the Amsterdam PM meeting, and discuss how to take feather onwards | 12:17 | |
GlitchMr | I hope that compiling Perl 6 myself won't be too problematic for server ;) | 12:21 | |
lizmat | only one way to find out, I guess | 12:22 | |
jnthn | lizmat: nqp::isconcrete is safe only when you know you always have some kind of 6model object to hand. In NQP, arrays, hashes etc are still not that. | 12:23 | |
dalek | p: 2019842 | (Elizabeth Mattijsen)++ | / (2 files): Eradicated pir::defined__IP for nqp::defined The original plan was to s/nqp::defined/nqp::isconcrete/ but this gave errors on 6model objects: Can only use repr_defined on a SixModelObject So only did pir::defined__IP -> nqp::defined migration. And moved the possible nqp::defined -> nqp::isconcrete migration to jnthn's list |
12:25 | |
lizmat | but they will be? so this is just a matter of delay? | 12:26 | |
GlitchMr | 26502 glitchmr 20 0 34536 22m 6372 R 28,2 1,9 0:00.85 cc1 | 12:28 | |
28,2% of CPU usage | |||
ok | |||
jnthn | lizmat: On @next-vm almost certainly. | ||
lizmat will try to recognize 6model objects from bare arrays/hashes and see what will work | 12:29 | ||
btw: NQP/Actions.pm:993: || pir::isa__IPs($_.returns, 'Undef') # XXX hack, goes away after QAST migration | |||
jnthn | ooh | ||
Try deleting it. :) | |||
iirc, the other half of the || does what's really needed now | 12:30 | ||
lizmat | testing | 12:31 | |
for pir::isa__IPs I see <Namespace Sub String> as 2nd parameter | 12:32 | ||
12:32
breakEM left
|
|||
lizmat | I assume Namespace/Sub are hashes, and String is list ? | 12:33 | |
test ok | 12:35 | ||
jnthn | er | ||
where is that code? :) | 12:36 | ||
Namespace doesn't even make sense any more in NQP | |||
dalek | p: dae38f0 | (Elizabeth Mattijsen)++ | / (2 files): Removed now superfluous call to pir::isa__IPS(..,'Undef'), per jnhtn's instructions |
||
lizmat | HLL/Compiler.pm:46: pir::isa__IPs($value, 'NameSpace') | ||
jnthn | oh my | 12:37 | |
moritz | oh my indeed | ||
jnthn | I wonder if we even encounter that code path any more. | ||
EXPORT doesn't work that way any more for example | 12:38 | ||
moritz | r: sub GLOBAL() { }; say GLOBAL() | ||
p6eval | rakudo 1f86d2: OUTPUT«invoke() not implemented in class 'GLOBAL' in block at /tmp/wx1VGIt9hJ:1» | ||
jnthn | moritz: By the Type(...) rule I guess it's attempting to turn that into a coercion... | 12:39 | |
get_module in HLL::Compiler also looks very suspect | |||
lizmat | shall I drop get_exports / value_type and get_module and see what happens? | 12:40 | |
jnthn | lizmat: Yeah. | ||
I can't imagine them doing anything useful any more. | |||
lizmat | testing | 12:41 | |
jnthn | I think they may have been part of a previous HLL interop thing. | ||
But are bitrotten to the extent that they're not worth keeping. | |||
12:42
immortal left,
erkan joined,
erkan left,
erkan joined
|
|||
moritz | jnthn: any feedback on moritz.faui2k3.org/tmp/0001-fix-dec...name.patch ? | 12:42 | |
jnthn: I realize it's incredibly hacking, but I don't quite know what do about it | |||
*hacky | 12:44 | ||
lizmat | jnthn: tests ok | ||
jnthn | moritz: Is there no way we can communicate the DYNAMIC thing into disect_longname (pass it a named arg or something)? | 12:45 | |
So that it leaves the DYNAMIC alone? | |||
moritz | jnthn: well, I experimented with passing :decl<routine> to it | 12:46 | |
and be more permissive in that case | |||
but all I got was a NPMCA | |||
dalek | p: 25fcb3f | (Elizabeth Mattijsen)++ | src/HLL/Compiler.pm: Dropped some bitrotten code from previous HLL interop thing It was referencing pir::isa__IP(..,'Namespace') which was obsolete |
12:47 | |
moritz | jnthn: I'll nopaste a patch, wait a second.. | ||
jnthn | moritz: OK. I'm mostly tied up with sorting out some $dayjob stuff I've been putting off at the moment, though. | 12:48 | |
lizmat will stop bothering jnthn and enjoy the nice weather with bike ride | 12:49 | ||
moritz | jnthn: moritz.faui2k3.org/tmp/0001-clean-u...ling.patch (and don't hurry :-) | 12:50 | |
jnthn | OK, will look in a bit... :) | 12:51 | |
12:56
hoelzro|away is now known as hoelzro
12:57
JimmyZ left
13:10
JimmyZ joined
|
|||
moritz | taking a second look, one bug is obvious | 13:18 | |
a return after a die is almost certainly wrong :-) | 13:20 | ||
13:22
benabik left
13:23
benabik joined
|
|||
moritz | patch updated | 13:23 | |
(under the same URL) | |||
now it dies with Method 'orig' not found for invocant of class 'NQPMu' | |||
current instr.: 'add_deadly' pc 9181 (src/gen/perl6-optimizer.pir:3416) (src/Perl6/Optimizer.pm:536) | |||
which probably means it installed something as the wrong name, and then the optimizer died while adding the memo about the missing subroutine | 13:24 | ||
sergot | Who is responsible for planetsix.perl.org? :) | ||
moritz | sergot: the perl.org admins, but for example [Coke] has enough privs to add feeds | 13:25 | |
(and remove them) | |||
sergot | moritz++ thanks. :) | ||
moritz adds some debug statements | 13:29 | ||
GlitchMr | export PATH="`perl -l72e'print for reverse sort </home/glitchmr/rakudo-star/*.*/bin>'`$PATH" | 13:34 | |
Because I'm bored... | |||
moritz | dammit, it's DYNAMIC again | 13:35 | |
13:39
benabik left
|
|||
pmichaud | good morning, #perl6 | 13:41 | |
colomon | \o, pm | ||
moritz | good am, pm and colomon | 13:42 | |
jnthn | good afty, pmichaud | ||
colomon | o/ | ||
13:49
benabik joined
|
|||
moritz discovers another bug | 14:00 | ||
\o/ it build the setting again | 14:07 | ||
14:09
fgomez left
14:10
skids joined
|
|||
moritz | the code is now a bit longer and more robust | 14:11 | |
and as a plus: | |||
./perl6 -e 'sub CALLER::foo() { }' | |||
===SORRY!=== | |||
Cannot use pseudo-package CALLER in a sub declaration | |||
r: sub CALLER::foo() ·{ }; say MY::.keys | 14:12 | ||
p6eval | rakudo 1f86d2: OUTPUT«===SORRY!===Missing blockat /tmp/KgnK3jrUq1:1» | ||
moritz | r: sub CALLER::foo() { }; say MY::.keys | ||
p6eval | rakudo 1f86d2: OUTPUT«!UNIT_MARKER GLOBALish EXPORT $?PACKAGE ::?PACKAGE $_ $/ $! &CALLER::foo $=pod» | ||
jnthn | Oops ;) | 14:13 | |
moritz++ | |||
14:15
araujo left
|
|||
moritz | jnthn: do you have a feeling how many LongName objects we carry around? | 14:24 | |
thing is, for better error messages I'd like to store a Match object per LongName. Is that OK? or too expensive? | |||
14:25
moises joined
|
|||
jnthn | moritz: I think LongName objects are fairly short lived. | 14:28 | |
moritz | ok, great | ||
jnthn | They shouldn't make it into the AST ever, for example. | ||
moritz | nqp: say(1) if !NQPMu | 14:35 | |
p6eval | nqp: OUTPUT«1» | ||
moritz | nqp: say(1) if NQPMu | ||
p6eval | nqp: ( no output ) | ||
moritz | nqp: nqp::die(42) | 14:36 | |
p6eval | nqp: OUTPUT«42current instr.: '' pc 52 ((file unknown):40) (/tmp/xC3hcm2Abd:1)» | ||
14:36
MayDaniel joined
|
|||
moritz | hm, that line number is correct | 14:36 | |
nqp: 1 || say(42) | 14:37 | ||
p6eval | nqp: ( no output ) | ||
14:38
marmay joined
|
|||
spider-mario | aw, why does Rakudo repeat itself in some error messages? | 14:38 | |
lumi_ | Would it be possible to run a grammar, and emit HTML with the original text surrounded by a tag with the matching rulename as a class? | ||
spider-mario | ===SORRY!=== | ||
Error while compiling block : Error while compiling block hello: Error while compiling block : Error while compiling block : Unknown QAST node type QAST::Unquote | |||
lumi_ | For cheap and fun syntax highlighting, I was thinking | 14:39 | |
spider-mario | r: macro hello($name) {quasi { say "Hello { {{{$name}}} } !"; };} hello("Rakudo"); | ||
p6eval | rakudo 1f86d2: OUTPUT«===SORRY!===Confusedat /tmp/e_VUo1yinr:1» | ||
spider-mario | r: macro hello($name) {quasi { say "Hello { {{{$name}}} } !"; };}; hello("Rakudo"); | ||
p6eval | rakudo 1f86d2: OUTPUT«===SORRY!===Error while compiling block : Error while compiling block hello: Error while compiling block : Error while compiling block : Unknown QAST node type QAST::Unquote» | ||
spider-mario | here, reproduced | ||
jnthn | spider-mario: That's an internal error from the compiler toolchain. | 14:41 | |
spider-mario | ok. | ||
jnthn | spider-mario: The macros implementing is really rather new. | ||
spider-mario: So it'll be a bug in that. | |||
moritz | spider-mario: please submit | 14:42 | |
jnthn | The messages are often pretty handy for tracking down the issue. :) | ||
r: macro hello($name) {quasi { say "Hello { {{{$name}}} } !"; };}; | 14:43 | ||
p6eval | rakudo 1f86d2: OUTPUT«===SORRY!===Error while compiling block : Error while compiling op call: Error while compiling block : Error while compiling block hello: Error while compiling block : Error while compiling block : Unknown QAST node type QAST::Unquote» | ||
jnthn | Golfed. | ||
spider-mario | sorry, I have forgotten the procedure to submit a rakudo bug? | 14:44 | |
14:45
benabik left
|
|||
jnthn | [email@hidden.address] | 14:46 | |
(some other hints in README) | |||
spider-mario | thanks | 14:47 | |
GlitchMr | Error while compiling block : Error while compiling block : Error while compiling block load_module: Error while compiling op lexotic: Error while compiling op if: Error while compiling block : Error while compiling op handle: Error while compiling op if: Error while compiling block : Error while compiling op bind: Error while compiling op associative_bind: Cannot infer type from '' | ||
that could be fun | |||
lumi_ | Maybe I'll try doing it, but I only have tuits in 2 weeks | 14:49 | |
14:50
nebuchadnezzar left
|
|||
jnthn | o.O | 14:52 | |
GlitchMr: How'd you get that one? | |||
14:53
benabik joined
|
|||
GlitchMr | I've tried to compile perl6 | 14:53 | |
But I probably do it incorreclt | |||
incorrectly* | |||
t/nqp/60-bigint.t ............... Failed 3/34 subtests | |||
wait... | |||
14:54
birdwindupbird joined,
hoelzro is now known as hoelzro|away
15:00
nebuchadnezzar joined
15:03
HotJessicaBOOBS joined
15:04
HotJessicaBOOBS left
15:12
yarp left
|
|||
dalek | p: 6b8b4a6 | jnthn++ | src/ (2 files): Move CTXSAVE and EXPR that were temporarily subclassed in NQP::Actions back up into HLL::Actions (taking the QAST-using versions). |
15:14 | |
p: 899659e | jnthn++ | src/ (2 files): Move QAST versions of quote_EXPR and quote_delimited up into HLL::Actions, eliminating them from NQP::Actions. |
|||
p: ed02bcc | jnthn++ | src/HLL/World.pm: Toss a bunch of now-dead code (replaced by a combination of QAST::WVal, bs and some of the logic moving into QAST::Compiler itself). |
|||
spider-mario | bug reported, it’s #114708 | 15:23 | |
rt.perl.org:443/rt3/Public/Bug/Dis...?id=114708 | 15:24 | ||
15:26
benabik left
15:27
birdwindupbird left
15:30
skids left
15:33
Moukeddar joined,
benabik joined
15:35
Moukeddar left
15:36
thou joined
15:42
benabik left
15:44
JimmyZ left
15:49
JimmyZ joined
15:55
JimmyZ left
15:59
tokuhiro_ left
|
|||
dalek | p: 694af0d | jnthn++ | src/QRegex/P5Regex/Actions.nqp: Various P5Regex de-PASTifications. |
15:59 | |
p: fb79576 | jnthn++ | src/QRegex/P6Regex/Actions.nqp: Start updating P6Regex to eliminate use of buildsub (now always uses qbuildsub) and turn some other PAST usages into QAST. |
|||
p: d7054fa | jnthn++ | src/QRegex/P6Regex/Actions.nqp: Toss some now-dead code in P6Regex. |
|||
p: dd2cd29 | jnthn++ | src/QRegex/NFA.nqp: Toss NFA.past. |
|||
p: 211d5b3 | jnthn++ | src/HLL/Compiler.pm: Eliminate a couple of mentions of PAST from HLL::Compiler. |
|||
GlitchMr | That's lots of commits | ||
jnthn | Lot of deleted code too :) | 16:00 | |
dalek | kudo/indirect-subs: a59d2f3 | moritz++ | src/Perl6/ (3 files): fix declaration of subs with indirect name |
16:07 | |
kudo/indirect-subs: 989d8b2 | moritz++ | src/ (2 files): typed exception for illegal use of pseudo packages in other names |
|||
moritz | that branch now mostly works | 16:08 | |
but module MY { } | 16:09 | ||
now dies with Null PMC access in get_string() | |||
the offending line is if !$decl || ($decl eq 'routine') { if the backtrace can be trusted | |||
which is kinda weird, because if $decl is Null, I'd expect the ($decl eq 'routine') to never run | 16:10 | ||
jnthn | Well, I'd expect the NPMCA to be in the if $decl and it to complain about get_bool too... | 16:11 | |
moritz | oh, the line annotations are off | ||
looking at the PIR, it actually comes from if $_ eq 'GLOBAL' { | |||
a few lines below | |||
GlitchMr | I've Perl6 in ~/rakudo-star/ in case somebody would want to use it | ||
moritz | which makes much more sense, since $_ is never assigned | 16:12 | |
stupid copy-pasto | |||
jnthn: so, line numbers in NQP are off :( | |||
jnthn | moritz: Wonder if it's just insufficient :node($/)-ing... | 16:13 | |
moritz | $ast := QAST::Stmts.new($ast) if nqp::istype($ast, QAST::Node); | 16:15 | |
from method statementlist | |||
jnthn | hm | ||
moritz | does that propagate the .node properly? | ||
jnthn | Well, if the thing below got one, yes | ||
But for safety we could attach it again there. | |||
dalek | p: 061f7f7 | jnthn++ | src/QRegex/P6Regex/Actions.nqp: Clear up most remaining PAST usages in P6Regex. |
16:18 | |
p: f17f978 | jnthn++ | src/QRegex/P6Regex/Actions.nqp: Final PAST eliminations in P6Regex. |
|||
p: 2158891 | jnthn++ | src/QRegex/P5Regex/Actions.nqp: Final PAST eliminations in P5Regex. |
|||
p: 5ba6925 | jnthn++ | src/ (2 files): Various cleanups and simplifications to QAST::Compiler and HLL::Compiler now that it no longer has to cope with PAST and POST. |
|||
kudo/indirect-subs: c1aac0d | moritz++ | src/Perl6/World.pm: avoid a Null PMC Access |
16:19 | ||
GlitchMr | glitchmr@feather ~> perl6 | 16:21 | |
perl6 perl6-2012.07 perl6-2012.08 perl6-debug perl6-debug-2012.08 | |||
good | |||
16:23
fibo joined
16:35
SamuraiJack_ joined
16:36
SamuraiJack left
|
|||
thou | tadzik: hi, is $=data implemented in rakudo? | 16:37 | |
16:38
nodmonkey joined
16:46
nodmonkey left,
crab2313 joined
|
|||
dalek | kudo/nom: 821d6a0 | jnthn++ | src/Perl6/Grammar.pm: Eliminate final PAST::Node usages in Perl6::Grammar's op generation, and update it to tall the QAST compiler rather than PAST::Compiler, use qbuildsub instead of buildsub, etc. |
16:47 | |
kudo/nom: a55950d | jnthn++ | tools/build/NQP_REVISION: Bump to latest NQP, with muchly reduced PAST usage. |
|||
kudo/nom: 1f1378e | jnthn++ | src/Perl6/Actions.pm: Unbust /< a aa >/. |
|||
GlitchMr | Timbus: would you consider this to be abuse of your module: gist.github.com/3601377 | ||
oops, it should be negative check | 16:48 | ||
s/if/unless/ | |||
oh, wait... I forgot that .subst returns its value | 16:49 | ||
perl6: lass blah { has $.regex = /a/; method replace($a is copy) { $a ~~ s/$.regex/b/; $a } }; blah.new.replace('cake').perl.say | 16:51 | ||
p6eval | niecza v21-1-ga8aa70b: OUTPUT«===SORRY!===Attribute $!regex declared outside of any class at /tmp/YaA_jWp3wj line 1:------> lass blah { has $.regex ⏏= /a/; method replace($a is copy) { $a ~Methods must be used in some kind of package at /tmp/YaA… | ||
..rakudo 1f86d2: OUTPUT«===SORRY!===You cannot declare attribute '$.regex' here; maybe you'd like a class or a role?at /tmp/qjWdTTg28s:1» | |||
GlitchMr | perl6: class blah { has $.regex = /a/; method replace($a is copy) { $a ~~ s/$.regex/b/; $a } }; blah.new.replace('cake').perl.say | ||
p6eval | niecza v21-1-ga8aa70b: OUTPUT«Unhandled exception: Unable to resolve method regex in type Cursor at <unknown> line 0 (ExitRunloop @ 0)  at /home/p6eval/niecza/lib/CORE.setting line 566 (Cool.subst @ 37)  at /tmp/UW7pC_Zppv line 1 (blah.replace @ 4)  at /tmp/UW7pC_Zppv line 1 (ma… | ||
..rakudo 1f86d2: OUTPUT«No such method 'regex' for invocant of type 'Cursor' in regex at /tmp/JCt62h5bHR:1 in method match at src/gen/CORE.setting:4021 in method subst at src/gen/CORE.setting:4083 in method replace at /tmp/JCt62h5bHR:1 in block at /tmp/JCt62h5bHR:1»… | |||
GlitchMr | Cursor? | ||
jnthn | GlitchMr: A regex is a kind of method. | 16:52 | |
GlitchMr: Thus any time you're in a regex, self is the cursor. | |||
GlitchMr | So, I have to make copy of $.regex if I want to use it? | ||
jnthn | Yes | ||
GlitchMr | or use .subst()? | 16:53 | |
jnthn | I don't see how that'd help here. You'd still be passing a regex to subst I guess? | ||
GlitchMr | Well, yes | ||
That regex would be | |||
/$.regex/ | |||
So I can simply type $.regex | 16:54 | ||
jnthn | ah | ||
yes, you can do that. :) | |||
dalek | kudo/nom: a59d2f3 | moritz++ | src/Perl6/ (3 files): fix declaration of subs with indirect name |
16:58 | |
kudo/nom: 989d8b2 | moritz++ | src/ (2 files): typed exception for illegal use of pseudo packages in other names |
|||
kudo/nom: c1aac0d | moritz++ | src/Perl6/World.pm: avoid a Null PMC Access |
|||
kudo/nom: 9cdf452 | moritz++ | src/ (4 files): Merge remote branch 'origin/indirect-subs' into nom |
|||
kudo/nom: 91e9725 | moritz++ | docs/ChangeLog: update ChangeLog |
|||
ast: c32c4d0 | moritz++ | S02-names/indirect.t: unfudge tests for indirect sub name declarations |
17:08 | ||
17:09
sftp left
17:10
sftp joined
|
|||
GlitchMr | Just wondering, is there opposite of slurp which would save content to file? | 17:11 | |
jnthn | spurt | ||
afk for a bit | 17:13 | ||
dalek | kudo/nom: 54030c3 | jnthn++ | docs/ChangeLog: Add a note about having QAST-based NQP to the ChangeLog. |
||
17:20
benabik joined
|
|||
GlitchMr | 19:20:54 @GlitchMr | 66: add future The future is already here — it's just not very evenly distributed. | 17:21 | |
19:20:57 @GlitchMr | 66: future | |||
19:20:57 SixtySixBot | GlitchMr: The future is already here — it's just not very evenly distributed. | |||
ok, it seems to work :) | |||
17:22
varnie joined
17:28
daniel-s_ joined
17:31
daniel-s left
|
|||
tadzik | thou: no, I don't think so | 17:33 | |
I can give a try tomorrows | |||
17:35
moises left
|
|||
GlitchMr | Just wondering, is 'Z,' operator identical to 'Z' operator? | 17:36 | |
And identical to 'ZZZ' operator | |||
17:40
birdwindupbird joined
17:41
thou left
17:42
thou joined
17:44
thou left
|
|||
moritz | std: class Foo:: { } | 17:46 | |
p6eval | std 2f65afc: OUTPUT«ok 00:00 40m» | ||
moritz | nr: class Foo:: { } | ||
p6eval | niecza v21-1-ga8aa70b: OUTPUT«===SORRY!===Illegal explicit declaration of a symbol table at /tmp/K1aZm9UNYd line 1:------> class Foo::⏏ { }Unhandled exception: Check failed at /home/p6eval/niecza/boot/lib/CORE.setting line 1435 (die @ 5)  a… | ||
..rakudo 91e972: OUTPUT«===SORRY!===Name Foo:: ends with '::' and cannot be used as a package name» | |||
17:47
thou joined
|
|||
moritz | which error message do you like better? | 17:48 | |
17:51
thou_ joined
|
|||
jnthn | Rakudo's gives you a better idea of what to do about the problem, Niecza's is more technically detailed. | 17:51 | |
jnthn tries to think of a good union of the two | 17:52 | ||
moritz | "Illegal use of trailing :: in name 'Foo::', which denotes a symbol table rather than a type' | 17:53 | |
17:53
xinming left
|
|||
jnthn | Something like that, yes. | 17:53 | |
17:53
thou left
17:54
xinming joined
18:01
hoelzro|away is now known as hoelzro
|
|||
sorear | good * #perl6 | 18:04 | |
diakopter | o/ | ||
18:05
thou_ left
18:06
fibo left
18:09
birdwindupbird left
|
|||
pmichaud | jnthn: ping | 18:12 | |
jnthn | pmichaud: pong | ||
pmichaud | jnthn: I'm working on reducing the number of return values from !cursor_start; I can do all of them easily except I'm not sure how to efficiently get $?CLASS back | 18:13 | |
jnthn | pmichaud: If you were doing this after the $!orig/$!target refactor I'd have an answer... :) | 18:14 | |
pmichaud | what would your answer be then? | ||
Circlepuller_ | i like those ansi colors :3 | ||
jnthn | Put it in the thing you move $!orig/$!target into | 18:15 | |
pmichaud | store it there? I'm not sure that works if we re-use the $!orig/$!target thing across multiple cursor types. | ||
jnthn | Hm | ||
pmichaud | I suppose we could say "don't reuse it"... but that's not really what happens now. | ||
jnthn | Do we know the boundary? | ||
pmichaud | I suspect perhaps not always. | ||
jnthn | er, that was badly phrased | ||
ah, you understood it anyway :) | |||
Yeah, at first I thought it may be easily knowable but I can see it being more subtle... | 18:16 | ||
pmichaud | anyway, putting it in $!orig/$!target feels like the wrong place. | ||
jnthn | $!cstack is always free at !cursor_start time ;-) | ||
pmichaud | because $!orig/$!target are about the thing being parsed, not the cursors doing the parcing | ||
*parsing | |||
$!cstack isn't free on a restart. | |||
jnthn | ah, dang. | ||
yes. | |||
GlitchMr | I should make Acme::ChuckNorris module. It will remove every bug in program. | 18:17 | |
Code: exit | |||
pmichaud | I can of course do it with a method call to the newly returned Cursor... but... dang. | 18:18 | |
jnthn | Yes, that would suck. | ||
pmichaud | I can return a low-level list and grab things out of that. Still icky because of the PMC allocation, though. | 18:20 | |
jnthn | A hack is to have a !CUR_CLASS lexical that !cursor_start binds. | ||
pmichaud | ...via outer? | ||
jnthn | Caller. | ||
pmichaud | er, yes, caller | ||
jnthn | Of course, all uses of it are done on the register. | ||
pmichaud | lexical wouldn't be bad | 18:21 | |
jnthn | it's the least bad option so far. | ||
pmichaud | could do some of that for the other registers too | ||
it increases the size of the lexpad, though | |||
jnthn | Yeah | 18:22 | |
MikeFair | Anyone know how I can express if <EXPR> then <EXPR> [else <EXPR>] as "'if' is the prefix to a 'then' ternary operator?" | ||
It's the equivalent to the ternary operator (test) ? true : false , but will only work if prefixed by 'if' | 18:23 | ||
jnthn | And you really want to parse the 'if' as a prefix? | ||
Maybe nextterm helps | |||
moritz | MikeFair: express on what level? | ||
grammar? AST? bytecode? | |||
MikeFair | jnthn: Well I don't really care the if is prefix | 18:24 | |
GlitchMr | But Perl 6 already has fine ternary operator | ||
test ?? true !! false | |||
MikeFair | jnthn: I think it was more the case that 'operator' was the hammer tool atm | ||
jnthn | pmichaud: In the long run, I expect the attribute lookups could be faster, mind. | ||
MikeFair | GlitchMr: Sorry, i'm writing some Grammar rules for parrot | ||
GlitchMr | oh, ok | 18:25 | |
jnthn | MikeFair: You could always look at how we parse our if/else construct in NQP | ||
pmichaud | well, I suppose I could pass it through the $!orig/$!target object... it just seems weird to do that | ||
GlitchMr | I find it interesting that CoffeeScript has if something then true else false construct | 18:26 | |
pmichaud | even there, though, I have to do a couple of extra lookups (namely get the .WHAT of the $!orig/$!target object so that I can do the lexical lookups) | ||
jnthn | pmichaud: Yeah, to me too. I prefer the lexical | ||
pmichaud | s/lexical/attribute/ | ||
jnthn | (for the cur_class case) | ||
pmichaud | well, setting the lexical would likely be via store_dynamic_lex | ||
and should I just do the one lexical, or should I do all of the registers that way? | 18:27 | ||
probably just the one, to keep the size down | |||
the downside of setting the lexical is that it really tightly couples !cursor_start to regexes even more than they currently are | |||
jnthn | Just the one, in my view | 18:29 | |
Yes, true. OTOH, the current factoring couples the code tightly to Parrot... | |||
18:30
erkan left,
erkan joined,
erkan left,
erkan joined
|
|||
pmichaud | at the moment I think I'm more comfortable passing it through the extra structure | 18:30 | |
I think it'll be faster that way and use a lot less memory | |||
one other possibility would be to use a "static" nqp::list to pass the values | 18:31 | ||
so, just return the list object, and then grab the individual things out via ::atpos. That's similar to returning a Parcel, at any rate. | 18:32 | ||
jnthn | So long as that's only done for objects, so we don't go boxing the other bits | ||
pmichaud | yes, of course | ||
jnthn mumbles something about the static list and thread safety :) | 18:33 | ||
pmichaud | yeah, that too. It might not be too bad to create a list on each invocation; that's pretty much what happens now, iiuc | ||
i.e., the return values go into a pmc of some sort | |||
18:34
thou joined
|
|||
pmichaud | does .return (foo, bar, baz) in PIR result in a PMC allocation? | 18:34 | |
jnthn | No, it populates the existing CallContext. May well be some lower level allocation(s) though. | ||
18:35
varnie left
|
|||
pmichaud | ...populates the existing CallContext? that sounds... odd. | 18:35 | |
jnthn | Hm, I thought it was used for args one way and returns the other | ||
oh, maybe not... | 18:36 | ||
pmichaud | well, I think that doing it via a separate QRPA (Parcel) sounds sanest at the moment; can try that and see if it has an impact on performance. | 18:37 | |
it's closest to what Perl 6 would expect anyway. | |||
and yes, for the objects only; the natives will be fetched from the appropriate objects | 18:38 | ||
18:38
araujo joined,
araujo left,
araujo joined
|
|||
pmichaud | I suspect going via QRPA is also more portable to other machines when we get there. | 18:39 | |
or at least simpler to follow. | |||
passing via $!orig/$!target might have the same sort of thread-safety issues as using a shared QRPA | |||
jnthn | true | 18:40 | |
pmichaud | okay, that gives me a good place to start. | ||
18:41
thou left
|
|||
GlitchMr | gist.github.com/3602814 | 18:47 | |
I'm thinking too recursively | |||
18:57
_jaldhar left
19:03
GlitchMr left
|
|||
pmichaud | jnthn: did you already put in the nohandler optimization for while/until/for/etc loops? | 19:09 | |
looks like "yes" | 19:10 | ||
jnthn++ | 19:18 | ||
cognominal | what is the meaning of the box_target trait? | 19:19 | |
19:21
_jaldhar joined,
stepnem left
|
|||
jnthn | pmichaud: yes | 19:21 | |
pmichaud: CORE.setting parse time and spectest times are currently at their lowest for quite a while :) | 19:22 | ||
cognominal: If you're declaring a type that boxes a native type, it indicates the attribute that holds the boxed value. | |||
pmichaud | jnthn: I'm thinking of changing :nohandler to be :loopcontrol(0|1) | 19:23 | |
moritz | r: class A { has str $a; has str $b is box_target; method Str { "$a|$b" } }; say nqp::box_s(A, 'foo').Str | ||
p6eval | rakudo 54030c: OUTPUT«Cannot look up attributes in a type object in method Str at /tmp/5pcFkmopzV:1 in any at src/gen/BOOTSTRAP.pm:105 in block at /tmp/5pcFkmopzV:1» | ||
pmichaud | then the dynvar can be $*LOOPCONTROL or something like that | ||
19:23
_jaldhar is now known as jaldhar
|
|||
moritz | r: class A { has str $a; has str $b is box_target; method Str { "$a|$b" } }; say nqp::box_s('foo', A).Str | 19:23 | |
p6eval | rakudo 54030c: OUTPUT«|foo» | ||
moritz | cognominal: see above | ||
19:23
cognominal left
19:24
nwc10 joined
|
|||
nwc10 | jnthn++ | 19:24 | |
19:24
cognominal joined
|
|||
pmichaud | anyway, I'm afk to pickup lunch | 19:24 | |
19:24
cognominal left
|
|||
jnthn | pmichaud: handlecontrol or so is maybe expliciter. | 19:24 | |
pmichaud | loophandler, maybe? | ||
moritz | nwc10: I was confused by your latest p6c email, it looked like parsing took much longer (?) than before? | ||
nwc10 | yes, it did seem to | 19:25 | |
no, I don't know why | |||
pmichaud | we're using more memory, yes? that could be why. | ||
19:25
cognominal joined
|
|||
nwc10 | it's reliable. Well, two runs both had similar numbers | 19:25 | |
cognominal | thx jnthn | ||
moritz | nwc10: but still the overall build was faster? | ||
jnthn | That's odd; here parsing is somewhat faster. | ||
19:25
Moukeddar joined
|
|||
moritz | that is... surprising | 19:26 | |
nwc10 | we're using a bit more memory than when just Rakudo was on QAST | ||
pmichaud | the raspberry pi is extremely memory/swap bound | ||
nwc10 | but yes, the overal build is faster | ||
pmichaud | so anytime we use a bit more memory, things slow down a lot | ||
nwc10 | jnthn: you're not swapping like a crazy swappy thing | ||
jnthn | nwc10: True. | ||
nwc10 | apparently there's a "network block device" in Linux, but I've not found it yet | ||
which would permit sane(r) network swap | 19:27 | ||
I couldn't reliably get swapping over NFS to work | |||
well, to keep working | |||
I have this suspicion that the kernel needed to swap something out in order to be able to free a bit more memory up in order to talk to the swap device. | |||
"Oh, bother." | |||
moritz | nwc10: I know I've exported an encrypted disc via the network block device | 19:28 | |
19:29
Moukeddar_ joined
|
|||
sorear | nwc10: linux doesn't swap to filesystems, it swaps directly to block devices | 19:29 | |
19:29
Moukeddar_ left
|
|||
nwc10 | sorear: yes, so I had to make a swap file on the NFS mounted file system, then make a loopback something, and then swapon that | 19:29 | |
sorear | when you set up a swap file, the VM subsystem asks the file system to allocate blocks for the file and then don't reallocate them for a while | ||
nwc10 | which seemed to "work" | 19:30 | |
but actually didn't, when it mattered, after I'd gone to bed | |||
sorear | loopback swap is a Bad Idea for the reason you just mentioned, deadlocks | ||
nwc10 | ah OK. :-) | ||
19:30
sirrobert joined
|
|||
sorear | it _is_ safe to swap to the network block device | 19:30 | |
nwc10 | ah OK | 19:31 | |
sorear | you're looking for www.kernel.org/doc/Documentation/b...ev/nbd.txt | ||
nwc10 | thanks | ||
sirrobert | how can I load a module at runtime (with, say, $module = "Foo::Bar") and check if anything gets loaded into the Foo::Bar space? | ||
pmichaud | okay, I'm really afk this time. @child[1] needs lunch. | ||
bbl | |||
jnthn | sirrobert: require | ||
sirrobert: Then a late-bound lookup (maybe the ::('Foo::Bar') way) | 19:32 | ||
sirrobert | hm thanks. (weird... I had trouble with require a long time ago | ||
19:32
Moukeddar left
|
|||
jnthn | Occasionally stuff gets fixed ;) | 19:32 | |
sirrobert | yeah, the ::($module) was working, but I had to do an explicit use | ||
jnthn: heh nod =) | |||
I should have just checked again =) | |||
sorear | Current state: It currently works. Network block device seems to be pretty stable. It was originaly thought that it is impossible to swap over TCP. This turned out not to be true, though the patch required to make it safe has not been forward-ported to any reasonably recent kernel. | ||
sirrobert | require works for me now | ||
jnthn | I think moritz++ did a bunch of require improvements not terribly long ago. | 19:33 | |
sirrobert | ok, nice | ||
saves me some headache, for sure | |||
jnthn | :) | ||
jnthn digs back into the $dayjob task he procrastinated | 19:34 | ||
sorear | looks like it actually is somewhat used, sourceforge.net/mailarchive/forum.p...nth=201208 | 19:37 | |
dalek | kudo/nom: 962b9b1 | moritz++ | src/ (3 files): typed exception for import name clashes |
||
19:38
stepnem joined
|
|||
sorear | chrome sees the large volume of Russian spam and offered to translate the list menu page for me :D | 19:38 | |
jnthn | Russian spam is handy for maintaining one's ability to parse cyrillic... :) | 19:40 | |
sirrobert | heh | ||
jnthn | Most of the Russian spam I get is spam about services for sending spam... | ||
moritz | how recursive | 19:44 | |
if you have an email address linked to a scientific research institute, you'll soon get spam for silicon wafers | 19:45 | ||
19:45
stepnem left
19:46
szabgab joined
|
|||
szabgab | hi | 19:46 | |
moritz | \o szabgab | ||
what brings you to IRC? | 19:47 | ||
sorear | o/ szabgab | ||
19:47
stepnem joined
|
|||
szabgab | I am so lonely :) | 19:47 | |
sorear | I got your email but I haven't figure out what to do with it yet | ||
szabgab | also I am trying to figure out when is blogs.perl.org/users/perl_6_reports/ going to be published? | 19:48 | |
sorear: say OK and I go ahead with it | |||
sorear | published? | ||
szabgab | sorear: I mean updated | ||
the next one | |||
moritz | szabgab: raiph has been doing that in the past | ||
19:48
immortal joined,
immortal left,
immortal joined
|
|||
szabgab | but taiph is not here now, right? | 19:48 | |
sorear | raiph? | 19:49 | |
szabgab | and I'd like to include it in the Perl Weekly that goes out in about 12 hours from now | ||
19:49
erkan left
|
|||
szabgab | and the p5p weekly is also missing | 19:49 | |
what is this? summer holiday? | |||
moritz | seems like :-) | ||
szabgab | I was wondering if I should keep this tab open :) | 19:50 | |
on the channel, just in case, but I have not done any Perl 6 in a week now | |||
benabik | In the US, Monday is Labor Day. Many people head out on vacation for the long weekend. | 19:51 | |
szabgab | this monday? | ||
so no one will read the news :| | |||
jnthn | There are people outside of the US :P | ||
19:52
wk_ left
|
|||
nwc10 | jnthn: I'm sure that's a myth created to scare small children | 19:52 | |
(just a myth) | |||
szabgab | according to my stats, that's just a myth :) | 19:53 | |
19:58
wk joined
20:01
Pleiades` left,
Pleiades` joined
20:11
crab2313 left
20:13
crab2313 joined
20:15
marmay left
|
|||
sirrobert | any docs on try/catch? didn't see any on doc.perl6.or | 20:24 | |
g | |||
20:25
Pleiades` left
|
|||
jnthn | sirrobert: I gave a talk on it recently: jnthn.net/papers/2012-yapceu-exceptions.pdf | 20:25 | |
moritz | S04 probably | ||
sirrobert | thanks | 20:26 | |
MikeFair | given grammar G { proto rule stuff { <*> }; rule stuff:sym<version1> { }; rule stuff:sym<version2> } | ||
is there some way I can specifically request a match on stuff:sym<version2> or can I only match <stuff> | 20:27 | ||
moritz | you can only match <stuff> | ||
another layer of indirection solves the problem | |||
20:28
Pleiades` joined
|
|||
MikeFair | ok, what was the "match but do not consume" operator on <> again | 20:28 | |
moritz: hehe ;) | |||
moritz | <?foo> is look-ahead (match but do not consume) | ||
<.foo> is match-but-do-not-record-in$/ | |||
MikeFair | Right!! | 20:29 | |
there's a distinction there!! | |||
MikeFair is learning! | 20:30 | ||
20:31
popl joined
|
|||
sirrobert | why is CATCH in all caps? (ooc) | 20:31 | |
moritz | because that makes it stand out | ||
all of our phasers are all-caps | |||
sirrobert | hmm... phasers? | 20:32 | |
moritz | also it's kind of a mini-namespace | ||
sirrobert: blocks or statements that are run at special times during the execution | |||
sirrobert | ahh | ||
phase-based blocks | |||
ok, cool | |||
thanks | |||
moritz | BEGIN, INIT, START, FIRST, NEXT, END, ENTER, LEAVE, PRE, POST | ||
etc. | |||
sirrobert | makes good sense =) I'm glad to be able to put it into a semantically meaningful bucket | 20:33 | |
20:36
kaare_ left
20:38
nwc10 left
20:40
crab2313 left
|
|||
sirrobert | how would I add new tokens to a grammar dynamically? (runtime) | 20:44 | |
and corresponding actions to the grammar's action class, I guess | |||
jnthn | Whoa. :) | ||
sirrobert | heh | ||
jnthn | Well, they're just classes | ||
So, same way you normally add methods to things | |||
.^add_method and then remember to .^compose | |||
sirrobert | ok | 20:45 | |
jnthn | (and tokens are just methods really) | ||
sirrobert | if I .^add_method and .^compose, do existing instances get affected? | ||
jnthn | Yes | ||
sirrobert | so there's no .^add_token? | ||
jnthn | If you want to do stuff per instance, use mixins | ||
No, because a token is just a method. | |||
sirrobert | (might be a good addition, just for parallelism) | ||
jnthn | Just one written in regex language. | ||
sirrobert | ok cool... trying it | ||
pmichaud | yay, my lightning talk is (finally) online! | 20:48 | |
sirrobert | I guess I have to re-write TOP to be able to handle the new token ... | ||
pmichaud: nice =) | |||
where? | |||
20:48
PacoAir left
|
|||
pmichaud | www.youtube.com/watch?v=ILWrbvI8Qfg...ature=plcp starting at 27:30 | 20:48 | |
20:51
tokuhiro_ joined
|
|||
sirrobert | pmichaud++: good talk =) nice work | 20:55 | |
jnthn wonders if they video'd the lightning talks at YAPC::EU :) | 20:56 | ||
sirrobert | is there any sandboxing work being done in p6? | ||
or I guess you could replace the main grammar with a crippled version? | |||
jnthn | A crippled setting is more likely to be useful | ||
sirrobert | woops, gotta go... later, p6 =) | 20:57 | |
sorear | rakudo and niecza both have sandboxes | 20:58 | |
and both sandboxes have holes big enough to drive trucks through | |||
FROGGS_ | pmichaud++ #awesome talk | 21:05 | |
pmichaud | gabor also gives a really good talk at 45:15 | 21:06 | |
er, szabgab++ :) | |||
make that 45:50 | 21:07 | ||
21:13
thou joined
|
|||
sorear | pmichaud++ great | 21:13 | |
21:14
SamuraiJack_ left
|
|||
szabgab | pmichaud: either way thanks :) | 21:34 | |
21:36
MayDaniel left
21:49
hoelzro is now known as hoelzro|away
|
|||
pmichaud | szabgab: you're welcome... I really enjoyed that talk :) | 21:49 | |
21:50
szabgab left
|
|||
masak | o/ | 21:51 | |
pmichaud | masak: o/ | 21:52 | |
masak has been busy with @friends in the weekend | |||
I'm actually eager to dive back into macros, but sometimes being social takes precedence :) | |||
pmichaud | masak++ # enjoying the big blue room a bit | ||
21:55
average_drifter joined
|
|||
tadzik | masak! \o/ | 21:55 | |
average_drifter | hello | ||
I came here today to ask you guys some questions | |||
tadzik | welcome | ||
average_drifter | as you may know, I'm a known and big troll. but today I am going to pose some serious questions | ||
recently I've read on perlmonks a thread | 21:56 | ||
masak | sorry, we didn't know you were a troll. | ||
at least I didn't. | |||
average_drifter | well only sometimes | ||
masak: I am sometimes. but I have not been on #perl6 | |||
masak | anyway, welcome. | ||
average_drifter | masak: on #perl however, I go there and bash them sometimes | ||
masak | we hug trolls here. | ||
average_drifter | anyway | ||
back to my question | |||
masak | :) | ||
average_drifter | masak: yes, but I take my troll shoes off today | 21:57 | |
because I want to ask some serious question | |||
so as I was saying I read a thread on perlmonks about a possible implementation of Perl5 using LLVM and Clang | |||
and that was considered a very interesting idea because both LLVM and Clang are abundantly funded by Intel | |||
and many other companies | |||
so my question is: What do you guys think the lifetime and possibilities of development of Parrot are | 21:58 | ||
masak | that is a good question. | ||
average_drifter | and why you did not choose LLVM and Clang as the primary tools to build Rakudo | ||
pmichaud | several years ago, a number of people looked at LLVM as a possibility for a backend for Perl 6 in general and the consensus was that it wasn't yet sophisticated enough to be able to handle it. | 21:59 | |
diakopter | because building rakudo grew out of a desire to implement Perl 6 on parrot. | ||
pmichaud | that may no longer be the case, but certainly it was the case in 2007/2008 when we were working on Rakudo. | ||
today we're looking at making Rakudo work on multiple backends, and a few people have expressed an interest in LLVM as one of the backends. | 22:00 | ||
average_drifter | pmichaud: I understand. and now, looking on LLVM, how do you feel about the decision to use Parrot ? and may that change in the future ? | ||
pmichaud | I don't have any comment about our decision to use parrot then; there really wasn't a "decision" to make. | 22:01 | |
diakopter | see the "Lessons about LLVM" section of qinsb.blogspot.com/2011/03/unladen-...ctive.html | ||
"Unfortunately, LLVM in its current state is really designed as a static compiler optimizer and back end. LLVM code generation and optimization is good but expensive. The optimizations are all designed to work on IR generated by static C-like languages." | 22:02 | ||
average_drifter | ok, so I take it that LLVM isn't really geared towards dyanmic languages | 22:03 | |
pmichaud | I don't have any plans to abandon Parrot in the future; we'll simply be supporting multiple backends. It's entirely possible that people will tend to prefer the backends other than Parrot, but we're waiting to see what actually happens rather than speculating at this point. | ||
from discussions at yapc::eu a couple of weeks ago I'm led to believe that llvm may have better support for dynamic languages than it did previously, but I haven't had a chance to investigate that myself. | 22:05 | ||
also, I'll be watching keenly to see what happens with the p5 on llvm effort (if one happens :) | |||
22:06
xinming left
|
|||
average_drifter | pmichaud: from the discussion on perlmonks it seems that there was a person who attempted this | 22:06 | |
22:06
bruges left
|
|||
average_drifter | pmichaud: and the people on perlmonks were taking guesses as to why that person's code has disappeared | 22:06 | |
pmichaud: or what difficulties he/she encountered | |||
22:06
bruges joined
22:07
dju left
|
|||
average_drifter | it's somewhat of a mistery to me at this point what exactly happened | 22:07 | |
pmichaud: have a look www.perlmonks.org/?node_id=989940 | |||
pmichaud | as a general rule, all of the people I know who work with the p5 codebase in any detail talk about how incredibly difficult it is likely to be to port perl 5 to another runtime platform. This isn't to say it can't be done, just that it will require a lot of work. | 22:08 | |
22:08
xinming joined
|
|||
average_drifter | pmichaud: I know what you mean. I've dived in p5 guts a bit and feel like it's a huuuge "thing".. I can't find a different word to describe it | 22:08 | |
I'm actually afraid that at some point it will become so *complex* that people will be so scared of it and run away | 22:09 | ||
including myself | |||
but at the moment it's still documented, it's still manageable.. | |||
in some ways.. | |||
22:09
dju joined
|
|||
pmichaud | oh, I'm certain things will happen (more) | 22:12 | |
average_drifter | let me give a small example of what I mean | ||
pmichaud | one of the things that happened at the perl reunification summit two weeks ago was to find ways that we can get perl 5 and perl 6 talking together; and one (of several) approaches will be to write a perl 5 system using perl 6 tools | 22:13 | |
TimToady++ already has a pretty good start on a perl 5 grammar | |||
diakopter | from the author: "Despite its name, LLVM has little to do with traditional virtual machines, though it does provide helpful libraries that can be used to build them." just JIT. no GC; no object system; no interpreter. | ||
average_drifter | let's suppose someone wanted to make an asynchronous callback mechanism in p5. That stuff is highly non-trivial, you get to deal with multiple Perl interpreters running in different threads, a lot of Internal Perl API, a lot of macros, a lot of debugging, gdb gdb gdb.. | ||
22:14
ast joined
|
|||
diakopter | the title of the commit message where he added that text? "llvm is not a vm" | 22:15 | |
pmichaud | average_drifter: right. I'm expecting that there will be a number of efforts to improve asynchronous event handling in p5. | ||
with the eventual goal of having something saner that can be emulated/ported to other environments (and something that p6 can start to build to as well) | 22:16 | ||
sorear | diakopter: at yapc someone tried to tell me that LLVM, in terms of features, was a drop-in replacement for the CLR | 22:17 | |
diakopter | omg. | ||
sorear | I thanked him while privately thinking "you have no idea what you are talking about, do you" | ||
pmichaud | sorear: heh, I had the same thought. Of course, I'd heard similar things from this person before so I already discounted it. :) | ||
geekosaur | ...wat | 22:23 | |
22:24
stepnem left
22:48
yarp joined
22:59
am0c joined
|
|||
jnthn | 'night, #perl6 | 22:59 | |
masak | 'night, #perl6 | 23:00 | |
23:01
tokuhiro_ left
23:02
tokuhiro_ joined
23:05
shachaf is now known as SHACHAF
23:06
tokuhiro_ left
23:18
jeffreykegler joined
23:19
c1sung left
23:21
benabik left
23:22
benabik joined
23:23
tokuhiro_ joined
23:27
c1sung joined
23:28
tokuhiro_ left
23:37
yarp left
|
|||
sjn | 's funny and sad, named parameters have been mentioned as a todo | 23:41 | |
in perlsub.pod since the 90s | |||
23:45
Circlepuller joined
23:46
Circlepuller_ left
|