»ö« 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.
skids Probably it's more useful to throw the user's failure, whether the throw is immediate on typecheck, or whether the failure is passed through lazily, either way. 00:10
diakopter pmichaud: on the latest rakudo, I'm getting some failed spectests, and some loop forever eating all my memory 00:13
owait. 00:14
[Coke] +# 07/31/2012 - rakudo++ (22941); niecza (89.88%); pugs (40.99%)
diakopter I'm still on toqast branch..... oops.
[Coke] huh. the pugs failures on the specrun... vanished.
p: say 40.99/89.88 00:15
p6eval pugs: OUTPUT«0.4560525144637294170004450378282153983089␤»
[Coke] niecza: 8 failures; rakudo: 3
p6eval niecza v19-15-g051783d: OUTPUT«===SORRY!===␤␤Two terms in a row at /tmp/q0Y6oAArXq line 1:␤------> 8 ⏏failures; rakudo: 3␤␤Parse failed␤␤»
skids
.oO(evalbot gets the colon)
00:18
[Coke] I think that's the 2nd time I've done that. whoops. 00:19
dalek ecs: 12ee078 | larry++ | S05-regex.pod:
relationship of :sigspace with %

The rules follow from the way sigspace is enabled by previous matcher. fixes #22
00:21
diakopter TimToady: signicant typo 00:22
diakopter slowly races to fix.. 00:23
TimToady now I have to figure out how to implement it in STD as specced 00:25
basically ms/ <atom> * / needs to turn into / [<atom><.ws>]* / 00:26
adu woah 00:27
TimToady and ms/ <atom>* / turns into / <atom>* <.ws> 00:28
adu I would expect the latter
the former is unexpected
TimToady well, it's either that or force everyone to write [<atom> ]+ % ',' al over the place 00:29
*all
dalek ecs: 00da791 | u11++ | S05-regex.pod:
S05 - insignicant typo
TimToady I think <atom> +% ',' works better
diakopter hrm. how am I now named u11
oh. 00:30
TimToady but it means overhauling STD not to treat sigspace as its own atom 00:32
std: / :s <ident> * / 00:33
p6eval std f43a358: OUTPUT«ok 00:00 41m␤»
TimToady I'm a little surpised that parses
diakopter nqp: my @a := [[]]; say(@a); 00:34
p6eval nqp: OUTPUT«1␤»
benabik r: my @a = [[]]; say(@a) 00:35
p6eval rakudo c1bfbb: OUTPUT«␤»
diakopter r: my @a := [[]]; say(@a.perl); 00:36
p6eval rakudo c1bfbb: OUTPUT«Array.new([])␤»
diakopter r: my @a := [[[]]]; say(@a.perl);
p6eval rakudo c1bfbb: OUTPUT«Array.new([[]])␤»
diakopter heh
[Coke] r: r: my @a = [[]]; say(+@a);
p6eval rakudo c1bfbb: OUTPUT«===SORRY!===␤Confused␤at /tmp/OJK4HLivLg:1␤»
[Coke] r: my @a = [[]]; say(+@a);
p6eval rakudo c1bfbb: OUTPUT«1␤»
diakopter uses 3 nested gathers/take for something; whee 00:42
colomon diakopter++ 00:46
[Coke] colomon,sorear: gist.github.com/3222097 00:47
I cannot remember current fudging rules, so I leave it to you.
colomon oh, right, forgot to finish those changes....
diakopter r: say join(" a ", gather { for [1,2] { take join(" $_ ", gather { for [3,4] { take join(" $_ ", gather { for [5,6] { take "$_" } }) } }) } }) # halp 00:49
p6eval rakudo c1bfbb: OUTPUT«5 6␤»
diakopter r: say join(" a ", gather { for (1,2) { take join(" $_ ", gather { for (3,4) { take join(" $_ ", gather { for (5,6) { take "$_" } }) } }) } }) # halp 00:50
p6eval rakudo c1bfbb: OUTPUT«5 3 6 1 5 4 6 a 5 3 6 2 5 4 6␤»
diakopter doesn't seem right to me 00:52
oh hm, it's right 00:53
nm; sry
dalek ast: 88d6e1d | (Solomon Foster)++ | S32-str/substr.t:
Fudge for niecza.
00:55
ast: fedb957 | (Solomon Foster)++ | S05-interpolation/regex-in-variable.t:
Fudge for niecza.
01:01
TimToady course now I've *really* broken STD: Unrecognized regex metacharacter < (must be quoted to match literally) 01:07
diakopter uh oh; do we now have to go through gimme5 again? 01:08
dalek ast: f5b1f2e | (Solomon Foster)++ | S02-lexical-conventions/comments.t:
Fudge for niecza.
ecza: ddf93f9 | (Solomon Foster)++ | t/spectest.data:
Turn off obsolete lcfirst and ucfirst tests.
01:09
TimToady nah, it's not that broken
TimToady crosses his fingers 01:10
diakopter std: /a***/ 01:16
p6eval std f43a358: OUTPUT«Can't bless non-reference value at CursorBase.pm line 1163.␤FAILED 00:00 41m␤»
diakopter O_O 01:17
std: /a/ 01:30
p6eval std f43a358: OUTPUT«Can't bless non-reference value at CursorBase.pm line 1163.␤FAILED 00:00 41m␤»
diakopter :J
diakopter sorear: what makes you think the nobootstrap branch has failed? I'm curious what insurmountable difficulties you've struck 01:54
sorear diakopter: I can't think of any way to move the parser forward
diakopter forward.. on what axis 01:56
(I mean, I assume you don't mean forward in the input) 01:58
(or do you merely mean make progress on the parser?) 02:01
sorear I merely mean progress 02:02
there are ... issues ... because the parser is written in Perl 6
diakopter my first thought is the hardest problem will be mimicking the continuable RxFrame 02:03
.. or were you planning to use RxFrame 02:06
(and the trampoline) 02:07
pmichaud TimToady: thanks for speedy issue #22 update 02:09
now I have to implement it also :)
sorear diakopter: I was kind of thinking of using RxFrame 02:10
something broke in my head and I started ranking designs in a non-transitive way
design 2 beats 1, 3 beats 2, 4 beats 3, 5 beats 4, 6 beats 5, but 6 is identical to 1 02:11
I stopped when I realized I was going in circles
diakopter oh.
I've experienced that a few times 02:12
except I usually don't notice I'm looping until a few times around the cycle
sorear: why would niecza not have a future just because the nobootstrap branch currently appears ill-fated 02:15
(I mean, what hope were you pinning on the nobootstrap branch?) 02:16
sorear diakopter: macros, slangs, fast startup
diakopter sorear: I suspect at least one of the "beats" in "design 2 beats 1, 3 beats 2, 4 beats 3, 5 beats 4, 6 beats 5, but 6 is identical to 1" has another interpretation 02:17
I'd be curious to hear about those designs 02:18
pmichaud I think I should stop asking questions; every time I do, the spec changes. :) 02:20
on the other hand, when people ask "why is Perl 6 taking so long", I guess we can say "it's Pm's fault." :-P
diakopter Perl 6: where our standards are so high, we keep tweaking the standards. 02:22
sorear diakopter: ok 02:24
diakopter: this will be a bit rambly, I apologize in advance 02:25
there are two major goals here:
- .net metadata is demand-loaded using C code and is generally a lot more efficient than trying to load our Perl6 metadata, so reducing the amount of P6 code in the compiler will speed up starting 02:26
- using a Perl 6 compiler requires isolating the compiler from user code in order to make bootstrapping not explode; the isolation layer makes it impossible for things like slangs and 'is parsed' macros to link directly into the parser, and is itself a large amount of awkward to maintain code 02:27
in the nobootstrap branch, I've already moved almost all of the compiler midend to C# 02:28
the parser, however-
we need the parser to be implemented using RxFrame/Cursor in order for it to integrate with user macros
there are then a couple choices
* hand written RxFrame/Cursor parser 02:29
* use STD, but write a MiniParser that can parse about the same fraction of Perl6 as gimme5
* use STD, and do bootstrapping just for STD
* translate a minimal subset of STD to C# and have it dynamically parse the rest of itself as augments 02:30
complicating issues include coping with binary-incompatible changes to the runtime support code
__END__ 02:31
diakopter hm
what are the detriments to option #2 02:33
slash relative costs 02:34
er, option #2, 1-indexed 02:35
sorear having to design a parser, mostly 02:39
sorear questions like whehter to bring in something like 'jay' and how much to reuse the regex mident 02:39
EBRAINOVERFLOW
diakopter goes to read a bit about Jay 02:40
sorear all I really know about jay is that mcs uses it 02:41
[Coke] pmichaud: I'd blame larry, not you. If he'd just get the spec right /first/, we could go much faster. ;) 02:42
[Coke] ... I think my stomach just made an angry birds noise. wtf? 02:43
diakopter sorear: oh. berkeley yacc to C# 02:44
sorear: I asked about option #2 because it was the option I preferred and planned to use ... several times (in several abortive projects) 02:48
like, the minimal subset of P6 in which STD *can be* reasonably readably/concisely written 02:50
... as strongly-typed as possible 02:51
strongly/primitively
'course, that'd be a lot of work. 02:52
(to get an edition of STD like that) 02:53
benabik diakopter: something like NQP?
diakopter benabik: NQP will be quite close once it gets native/primitive locals/lexicals 02:53
and compact arrays 02:54
it already has native attributes (yay) 02:55
diakopter benabik: I assume you mean NQP's subset of P6, not the NQP implementation. .. because we're talking about writing a parser for a language implementation written in C#.. (not looking for an existing parser) 03:00
sorear nqp: my int $x; 03:01
p6eval nqp: ( no output )
sorear nqp: my int $x := 1; my int $y := 0; while ($y < 20) { say($x); $x := $x * 1000; $y := $y + 1; } 03:03
p6eval nqp: OUTPUT«1␤1000␤1000000␤1000000000␤1000000000000␤1000000000000000␤1000000000000000000␤1000000000000000000000␤1000000000000000000000000␤1000000000000000000000000000␤1000000000000000000000000000000␤1000000000000000000000000000000000␤1000000000000000000000000000000000000␤100000000000000…
sorear wonders if nqp ints are bigints now
diakopter ah, I didn't know it got them
sorear: does option #3 involve viv? 03:05
sorear probably not, that's an idea I had not considered 03:08
diakopter one of the options I considered was to write a (C in my case) emitter in viv
diakopter (but alas, merely pipe dreams..) 03:13
benabik diakopter: Just meant to point out the similarities. :-) 03:34
skids What's the specced behavior of something like int8(256)? A failure, or does that constitute "treating it as an object" and result in an Int? 03:55
sorear skids: per spec it has to coerce to int8, and native types don't support failures 04:00
so it either coerces to int8 somehow, or dies 04:01
I don't think the actual method of coercion is specced
it probably shouldn't be, for the same sorts of reasons that led C to not spec signed overflow
skids sorear++. That sounds like an interesting dilemma :-) 04:03
moritz \o 05:43
arnsholt o/ 06:12
masak morning, #perl6 06:40
sorear o/ masak 06:44
masak final blog post in place now: strangelyconsistent.org/blog/july-3...ished-game 06:45
oh, and I found a MAIN-related bug yesterday when splitting things up into modules. reported it now: rt.perl.org/rt3/Ticket/Display.html?id=114354 06:53
sorear RFC period starts. 06:57
dalek ecza: 2d14b99 | sorear++ | docs/announce.v20:
Add v20 announce
masak reads 07:09
masak sorry to hear about non-bootstrap running into a dead end. it seemed like an interesting direction. 07:10
shachaf ingy: Ping? 07:11
masak sorear: announcement looks good. 07:13
moritz aye, it does 07:19
sorear: why did non-bootstrap run into a dead end? tuit starvation? or technical problems? or both? 07:20
seedmagazine.com/content/article/se..._the_dark/ woah, subconscious-only seeing after a stroke damaged the visual cortex 07:22
sorear moritz: I guess you could call it technical problems 07:23
moritz: the technical problems mounted to a point where I lost all motivation to continue. So my weekend tuits went to other things.
moritz sorear: that does sound like a good time to rething the direction, yes 07:25
sorear looks like niecza's makefile is not best friends with BSD cp 07:30
dalek ecza: 7f550a2 | sorear++ | Makefile:
Fix package generation with BSD cp
07:35
moritz r: say Block.^mro 07:45
p6eval rakudo c1bfbb: OUTPUT«Block() Code() Any() Mu()␤»
masak rn: say "\x2028 \x2029" 07:55
p6eval rakudo c1bfbb, niecza v19-15-g051783d: OUTPUT«
 
␤»
masak .u 
 
 07:56
phenny U+2028 LINE SEPARATOR (
)
U+0020 SPACE ( )
U+2029 PARAGRAPH SEPARATOR (
)
masak JavaScript considers "\u2028" and "\u2029" to be line terminators.
I was thinking of things like .lines; how should it behave in the face of such characters? 07:57
GlitchMr \u2028?
I remember this. It's reason why JSON isn't subset of JavaScript.
masak er? how can JavaScript's support of \u2028 be a reason JSON isn't a subset? 07:58
sorear masak: I think because JSON allows \u2028 to appear unescaped in a string 07:59
masak ah. 08:00
GlitchMr But, I guess it's just small detail that Crockford hasn't noticed 08:02
moritz rn: say Routine ~~ Block
p6eval rakudo c1bfbb, niecza v19-15-g051783d: OUTPUT«True␤»
masak GlitchMr: probably. 08:06
rn: say Method ~~ Routine
p6eval rakudo c1bfbb, niecza v19-15-g051783d: OUTPUT«True␤»
masak I noticed today that S06 says that MAIN should be a Routine, which implies that it can be a Method. which I think isn't so.
moritz I think it must be a Sub 08:08
masak: and I might have a patch for MAIN being executed in modules 08:10
unles $*W.is_precompilation_mode { ... }
oh wait, that's not quite enough
sorear yay, looks like my message went through 08:13
masak sorear++ # v20 08:18
masak moritz: 'unles' is not quite enough, no. it's missing an 's' :P 08:21
moritz masak: I meant, a simple use MyModule; doesn't put MyModule in precompilationi mode 08:23
jnthn: or does it? 08:24
masak "the compilation unit was directly invoked rather than by being required by another compilation unit" -- this is what we want to test. 08:25
if that's called $*W.is_precompilation_mode or not, I don't know. 08:26
moritz unfortunately for patching rakudo, I need to know if it's spelled that way :-)
or how to spell it
jnthn moritz: No, is_precompilation_mode just means "Rakudo was run with --target=pir" I think. 08:27
moritz I've now tried if !$*W.is_precompilation_mode && +@*MODULES == 0 && $unit.symbol('&MAIN') { ... } 08:28
and now it never runs MAIN :/
I need to debug which of those conditions failed
moritz it seems that +@*MODULES is always at least 1 08:31
masak .oO( 412 ) 08:32
moritz which is very odd, given that the only place that adds to @*MODULES is the module loader 08:33
masak what does it contain? 08:35
moritz the module loading backtrace, so to say
jnthn moritz: Does it pop off again? 08:36
moritz jnthn: there's code for popping off it
jnthn: not sure if I've tested it properly
jnthn Yeah. It looks right at least. 08:37
moritz I'm now trying to create a new my @*MODULES in the loader instead 08:39
which should be more robust
my current theory is that loading the setting populates @*MODULES somehow
and doesn't clean up properly 08:40
moritz ok, that seems to fix things 08:43
oh, I now see why
for the first module, there are *two* hashes pushed onto @*MODULES
one for the calling location, one for the module itself 08:44
jnthn The setting does use Perl6::BOOTSTRAP or so.
dalek kudo/nom: 558ea68 | moritz++ | src/core/IO.pm:
remove IO::Path and IO::Dir

as the deprecation notice predicted
09:02
kudo/nom: 85b7789 | moritz++ | src/core/IO.pm:
fixup
kudo/nom: 2cdf1c6 | moritz++ | src/Perl6/ (2 files):
Only run MAIN in the mainline. Closes RT #114354

Includes a small refactoring of @*MODULES handling, which avoids leaving traces in @*MODULES after the first module load (which is always the setting)
moritz forgot to rebase -i before committing. Sadface :(
I'm now trying to write tests for that patch 09:19
and it's surprisingly hard 09:20
I don't know how to propagate state through 'use' or 'require' boundaries
I've tried package variables and dynamic variables
masak dynamicals?
oh, of course you tried that already.
even package vars don't work? :/ 09:21
moritz and I got a dispatch failure for ++$*tracker in the module
masak did you declare it?
moritz in the caller, sure
masak r: sub foo { say ++$*tracker }; my $*tracker = 0; foo
p6eval rakudo c1bfbb: OUTPUT«1␤»
masak my intuition tells me dynamicals should survive a 'use' or 'require'. 09:22
moritz ok, one more idea 09:23
I die() in sub MAIN
and do a lives_ok { require TestMOdule; }
\o/ that works 09:24
masak moritz++
arnsholt "Like the famous mad philosopher said, when you stare into the void, the void stares also; but if you cast into the void, you get a type conversion error. (Which just goes to show Nietzsche wasn’t a C++ programmer.)" 09:25
Figured that quote might amuse some of you =)
moritz :-)
dalek ast: 95987ec | moritz++ | / (2 files):
sub MAIN in modules should not run. RT #114354
09:26
masak moritz: I can get dynamicals and require to work locally. 09:28
moritz: my guess is you couldn't get 'use' to work because you used BEGIN blocks and the dynamical went out of (lexical) scope.
moritz I did not 09:29
masak I should know better than to underestimate you :)
anyway, dynamicals+'require' works here. 09:30
moritz well, I did do something wrong 09:33
hm, I might have an idea 09:34
maybe MAIN ran *after* the require
so the dynvar wasn't in scope anymore at all
masak maybe. :)
moritz but I thought it didn't run at all :/
masak is again reminded of HPMoR today
moritz no new episode so far :( 09:35
just a new episode of the podcast
masak too early in the day yet.
mscha perl6: say reverse 0..Inf; 09:53
p6eval rakudo c1bfbb: OUTPUT«Cannot reverse an infinite list␤ in method gist at src/gen/CORE.setting:9624␤ in sub say at src/gen/CORE.setting:7024␤ in block at /tmp/oCOFAIOTpZ:1␤␤» 09:54
..niecza v19-15-g051783d: OUTPUT«(timeout)»
mscha (My copy of Rakudo Star 2012.4 said "Cannot reverse and infinite list", which has apparently been fixed. 09:55
)
masak X::Infinite::YouKnowWhatIMean 09:56
GlitchMr Reversing infinite list would require knowing its last position 09:58
moritz but we know it. It's Inf :-) 09:59
GlitchMr So, reverse 0 .. Inf should return infinite list of Inf
masak this is the danger of confusing actual numbers with concepts representing limits.
Inf isn't a natural number.
moritz nr: say Inf.WHAT 10:00
p6eval rakudo c1bfbb, niecza v19-15-g051783d: OUTPUT«Num()␤»
masak it's the limit towards which natural numbers tend.
moritz rakudo and niecza agrees that it's not a natural number :-)
GlitchMr gather for ^Inf { take Inf }
Is there better way of representing such list?
jnthn 1..* 10:01
moritz GlitchMr: Inf xx Inf
jnthn Oh, you wanted all Infs...
moritz or Inf xx *
GlitchMr > Inf xx Inf
moritz shorter :-)
GlitchMr Cannot coerce Inf to an Int
huh
jnthn Sorry, I thought we were doing useful things :)
moritz yes, xx wants an Int on the RHS
GlitchMr Inf xx * seems to work
Actually, reversing infinite list would be possible, but it's impossible 10:03
GlitchMr or something 10:04
The list 0 xx * could be easily reversed
Just wondering, does reverse return iterator? 10:05
moritz a lazy list
iterators aren't exposed to the user
GlitchMr > pop 0 xx *
.pop from an infinite list NYI
huh?
So, if somehow .pop will be implemented on infinite list, reverse will be possible too 10:06
But... why .pop on infinite list would be possible?
moritz I guess I just wasn't sure if it might be possible oneday 10:07
feel free to submit a patch for a better error message 10:08
GlitchMr Wouldn't getting last element from infinite list require getting every element before?
I can see it possible with shift or unshift... but with pop() 10:11
(by the way, push() on infinite list could be nop)
But error is better
arnsholt I don't really see how pop on an infinite list would be impossible 10:13
moritz it's possible for a potentially-infinite list 10:14
but for a really infinite list?
masak I think it's a bad idea.
GlitchMr paste.uk.to/22f651a2
So, I have unshift() for infinite arrays 10:15
moritz unshift is already implemented 10:16
GlitchMr oh, ok
moritz and it's the same for finite and infinite lists
because it just works on the reified part
moritz r: my @a = 1, 2; @a.unshift: <a b>.list: @a[0] = 4; say @a 10:18
p6eval rakudo c1bfbb: OUTPUT«Too many positional parameters passed; got 2 but expected 1␤ in method list at src/gen/CORE.setting:4614␤ in block at /tmp/8zypWOWaui:1␤␤»
moritz r: my @a = 1, 2; @a.unshift: <a b>.list; @a[0] = 4; say @a 10:19
p6eval rakudo c1bfbb: OUTPUT«4 b 1 2␤»
moritz has no idea where the container in @a[0] comes from
masak arrays provide containers. 10:22
arnsholt fails to spot the difference between moritz's two snippets
masak arnsholt: colon vs semicolon 10:23
moritz just a few pixels
masak yes, it was subtle :)
arnsholt Oh, now I see it =)
GlitchMr pop and push should be errors on infinite lists 10:25
pop because it's impossible
push because it's useless
arnsholt Durr, of course. I had things confused >.< 10:27
Of course pop is impossible =)
Coleoid But what if it's only infinite in the middle?
GlitchMr Infinite in the middle? 10:28
Coleoid :D
GlitchMr What?
But, well, I don't think we plan infinite reverse lists.
Timbus 1 .. Inf .. 1 10:29
GlitchMr (read: end is known, but beginning isn't)
arnsholt But there's a different problem. We can't detect all possible infinite lists, so sometimes we'll just have to be satisfied with an infinite loop/recursion
GlitchMr This list looks interesting 10:29
GlitchMr (aside of that Inf .. 1 won't work in Perl 6) 10:30
Timbus i wanted perl 6 to just assume lists were infinite unless provably finite, but it went the other way =/ 10:30
arnsholt Depends on which is worse I suppose. Not being able to do something on a list that you can do it on, or hanging because you're asking for something infinite 10:31
Coleoid Timbus: That surprises me--are there many benefits to infinite lists that we'd gain from their... pervasivity? Defaultitude? 10:33
masak GlitchMr: and aside from that infix:<..> doesn't chain.
s/from/from the fact/ 10:35
Coleoid No problem--If I ever need such behavior, I can write a class. Technically I see no hitches, the hard part will be naming it. 10:36
Timbus Coleoid, i guess the benefit is mostly that there are no surprises. if everyone knows lists are lazy there's no issues. if the computer knows the list is finite, or you know the list is finite, you can force finiteness. 10:39
it means you can avoid hanging yourself ;] 10:40
Coleoid That makes some sense. I haven't worked in an area where I didn't know (at coding time) whether a list was infinite or not... 10:55
Timbus i think its more likely if the language enables it. gather/take for example. I am predicting that libraries will be returning infinite lists from time to time 10:59
Coleoid So I don't expect them to look as similar as they do--in a way I still don't 'get' how one can say "infinite list", instead of "infinite sequence generator". 11:00
Timbus by making them look the same :p
Coleoid :D
sergot hi o/ 11:30
masak sergocie! \o/ 11:31
sergot masaku \o/
felher r: say "BLAR" ~~ /:ignorecase blar/ 12:23
p6eval rakudo c1bfbb: OUTPUT«q[BLAR]␤␤»
felher r: say "BLAR" ~~ /:ignorecase [blar | blubb]/
p6eval rakudo c1bfbb: OUTPUT«#<failed match>␤»
felher Is it supposed to work that way?
moritz it's supposed to match 12:24
r: say "BLAR" ~~ /:ignorecase [blar || blubb]/
p6eval rakudo c1bfbb: OUTPUT«q[BLAR]␤␤»
moritz seems it's an NFA issue
jnthn Hm
moritz nqp: say('BLAR' ~~ /:ignorecase [blar || blubb]/)
jnthn Yeah, guess the NFA builder doesn't know anything about :i
p6eval nqp: OUTPUT«BLAR␤»
moritz nqp: say('BLAR' ~~ /:ignorecase [blar | blubb]/)
p6eval nqp: OUTPUT«␤»
moritz felher: please submit rakudobug 12:25
jnthn
.oO( well, this'll be fun to fix... )
felher moritz: will do :)
masak submits rakudobug 12:28
oh, felher is on it.
masak unsubmits :)
pmichaud ...nfabuilder is supposed to know about :i 12:32
I mean, there's an ignorecase opcode for it (or at least, I thought there was!)
anyway, I'll look at it a bit, since I'm already in the regex engine guts working on sigsp 12:33
jnthn ++pmichaud
I don't remember seeing such a thing, but maybe I suppressed memories of the NFA builder... :) 12:34
moritz what strikes me is that we didn't have tests for it
jnthn Aye, that is a bit surprising. 12:36
moritz nqp: say('BLAR' ~~ /:ignorecase blar | blubb/) 12:37
p6eval nqp: OUTPUT«␤»
moritz is the :i scoped to the left branch in this case? 12:38
jnthn Don't think so
%*RX is localized per nibbler.
moritz nr: say so 'a' ~~ /:i b | A/ 12:39
jnthn oh, it's possible it still is...
p6eval rakudo c1bfbb: OUTPUT«False␤»
..niecza v19-15-g051783d: OUTPUT«True␤»
moritz nr: say so 'a' ~~ /:i b || A/
p6eval rakudo c1bfbb, niecza v19-15-g051783d: OUTPUT«True␤»
jnthn Yeah, think that's right. 12:39
(the || result, taht is)
moritz and niecza in both cases
jnthn yeah
gfldex p6: sub foo(Str $s){ return "$s</$s>" }; say foo 'abc'; 12:40
p6eval niecza v19-15-g051783d: OUTPUT«Unhandled exception: Cannot use hash access on an object of type Str␤ at <unknown> line 0 (ExitRunloop @ 0) ␤ at /home/p6eval/niecza/lib/CORE.setting line 354 (Any.at_key @ 9) ␤ at <unknown> line 0 (ExitRunloop @ 0) ␤ at /tmp/RSUkojt_Zn line 1 (foo @ 3…
..rakudo c1bfbb: OUTPUT«postcircumfix:<{ }> not defined for type Str␤ in method Str at src/gen/CORE.setting:9623␤ in method Stringy at src/gen/CORE.setting:717␤ in sub foo at /tmp/9lE75RDJra:1␤ in block at /tmp/9lE75RDJra:1␤␤»
dalek ast: ca2353f | moritz++ | S05-modifier/ignorecase.t:
test LTM + :ignorecase
12:42
pmichaud nqp: say('BLAR' ~~ /:ignorecase [ blar | blubb]/) 12:43
p6eval nqp: OUTPUT«␤»
pmichaud nqp: say('BLAR' ~~ /:ignorecase [ blar || blubb]/)
p6eval nqp: OUTPUT«BLAR␤»
pmichaud nqp: say('blar' ~~ /:ignorecase [ blar | blubb]/) 12:44
p6eval nqp: OUTPUT«blar␤»
pmichaud yeah, okay.
I remember; I didn't do a lowercase nfa opcode; the idea is to generate a node containing x|X
moritz that approach won't scale for :ignoremark 12:45
there might be only two or three cases for each letter, but there can be quite many marked variants of a letter 12:46
pmichaud well, until we have an opcode that can handle ignoremark'ed comparisons, it's a moot point anyway :) 12:50
pmichaud regardless, ignorecase (or cases with small numbers of options) is far better handled by multiple nodes that can do codepoint (integer) compares than by (sub)string compares 12:51
moritz wonders how far one can get to :ignoremark by converting to NFD and comparing base characters only 12:52
pmichaud that may be possible also
anyway, time to leave here; bbiaw
pdurbin moritz: i enjoyed this article of yours. thanks. From Iterative to Functional Perl 6 Code - perl6maven.com/from-iterative-to-fu...perl6-code 12:57
jnthn walk &
moritz pdurbin: nice to hear, thanks 12:59
pdurbin: what other Perl 6 related topics would you like to read about?
that question goes out to everyone else too 13:00
pdurbin hmm, well, i'm only a beginner. i was trying to do a couple katas. parsing json for example. i have perl5, ruby, and python working. but i was having trouble with perl6. as if it was hung or something...
moritz you'll get an infinite loop when quantifying a rule that can match zero characters 13:02
pdurbin huh. ok
moritz pdurbin: do you realize that the "Using Perl 6" book has a JSON parser as an example of the grammar chapter? 13:03
(it's not meant to be that way, it's just something that's not easy to guard against in the regex engine)
pdurbin nope
moritz github.com/perl6/book/downloads
and yes, I do value input from beginners on what to write 13:04
pdurbin moritz: i used this as a starting point for how to parse json with perl6: github.com/moritz/json/blob/master...tructure.t 13:05
moritz ah yes, that repo served as a template for the book chapter too
pdurbin but i'm not really interested in (or experienced enough) to write a grammar. i'm more interested in using your json library 13:06
moritz ah 13:07
that's easy
moritz star: use JSON::Tiny; say to-json({ nick => 'pdurbin', state => 'advancing'}) 13:07
p6eval star 2012.07: OUTPUT«{ "nick" : "pdurbin", "state" : "advancing" }␤»
moritz star: use JSON::Tiny; say from-json('{ "nick" : "pdurbin", "state" : "advancing" }')<state> 13:08
p6eval star 2012.07: OUTPUT«advancing␤»
pdurbin just "advancing"? is there supposed to be more output from from-json()? 13:09
JimmyZ star: use JSON::Tiny; say from-json('{ "nick" : "pdurbin", "state" : "advancing" }') 13:10
p6eval star 2012.07: OUTPUT«("nick" => "pdurbin", "state" => "advancing").hash␤»
tadzik note the <state> at the very end
moritz pdurbin: I only print the value of the 'state' key
JimmyZ star: use JSON::Tiny; say from-json('{ "nick" : "pdurbin", "state" : "advancing" }').perl
moritz star: use JSON::Tiny; say from-json('{ "nick" : "pdurbin", "state" : "advancing" }').perl
p6eval star 2012.07: OUTPUT«{"nick" => "pdurbin", "state" => "advancing"}␤»
JimmyZ oh my
pdurbin ah, i see what you mean. thanks 13:11
pdurbin hmm, having a bit of trouble getting a rakudo-star rpm to build on centos 6 but i'm planning on switching to fedora anyway, where the rpm installs fine. admin.fedoraproject.org/pkgdb/acls...akudo-star 13:18
moritz just compiles from source 13:21
JimmyZ too 13:22
PerlJam is compiling from source right now. 13:23
dalek kudo/nom: e3d4092 | moritz++ | docs/ChangeLog:
update ChangeLog with IO::{File,Dir} removal
13:26
pmichaud back again, for another morning of perl 6 hacking in the park :) 13:29
[Coke] pmichaud: sounds like fun!
pmichaud it'd be more fun if it was just slightly cooler outside 13:30
PerlJam sounds like a YAPC event or somethign
[Coke] ponders putting a day in at the library on a day when he has no phone calls to do.
pdurbin moritz and JimmyZ: i added some notes to myself here: wiki.greptilian.com/perl6 . thanks! 13:31
JimmyZ pmichaud: trac.parrot.org/parrot/wiki/WhyDoes...icientCode is still a problem after 6model ? 13:32
pmichaud JimmyZ: I'm not sure how to answer that. Yes, 6model (and Rakudo's new container storage model) changes a lot of the axioms that were affecting nqp code generation. 13:35
I don't entirely agree that NQP's code generation before was "inefficient" -- it did what it had to do within the constraints of the vm.
JimmyZ pmichaud: thanks 13:38
moritz but we still have two GCables for every element of an array of Int, right?
pmichaud yes. not sure how to avoid that, though. 13:39
moritz wow, I've managed to put setting compilation into an infinite loop 13:43
that hasn't happened to me in quite a while
r: class A { has $.x; submethod BUILD(:X(:$!x)) { } }; say A.new(:X<ofo>).x 13:47
p6eval rakudo c1bfbb: OUTPUT«ofo␤»
pmichaud r: say 'b b b b' ~~ /:sigspace b * / 13:49
p6eval rakudo c1bfbb: OUTPUT«q[b ]␤␤»
moritz
.oO( dark matter is really the invisible part of Chuck Norris' muscle matter )
pmichaud Am I correct that this changes under github.com/perl6/specs/commit/12ee...5808fd40b9 ?
and also 13:50
moritz yes
it's supposed to match the whole string now
pmichaud r: say 'bbbb' ~~ /:sigspace b * / # will now be different too
p6eval rakudo c1bfbb: OUTPUT«q[bbbb]␤␤»
moritz will match just the final b now 13:51
pmichaud first b 13:51
oh, final b
moritz actually, empty string
pmichaud correct.
moritz with + it would match the final b 13:52
pmichaud right. 13:52
moritz the fun of matching regexes in your head :-) 13:54
it's a good thing we teach machines how to do it, because it's really hard to get right when done by hand :-)
s/hand/head/ 13:55
pmichaud when I first saw the commit I thought "okay, that works", but now that I see some of the effects I'm not so sure.
I kind of think that "[b ]*" is superior to "b *" in this case.
dalek ast: 279df78 | moritz++ | S32-io/io-path.t:
initial tests for IO::Path
13:56
pmichaud looks at some JSON::Tiny code 13:58
masak explain to me how /:sigspace b * / matches the *final* 'b'?
aloha positive: nothing; negative: nothing; overall: 0.
masak aloha: shut. up.
moritz masak: :s b * is like [b<.ws>]* now
tadzik explain yourself!
aloha positive: nothing; negative: nothing; overall: 0.
masak moritz: yes...?
pmichaud actually, that should be /:sigspace b + / to match the final b.
moritz masak: and <.ws> doesn't match between b's
right
so the only b after which <.ws> matches is the final one 13:59
pmichaud with the * it will be the null string
(as moritz++ said)
masak oh, <.ws> doesn't match between b's?
pmichaud <.ws> doesn't match between word chars
masak right, because it's 'bbbbb'. I see.
moritz masak: no. <.ws> desguars to <.ww> | \s+
masak rightright.
I see it now.
moritz++ pmichaud++
pmichaud <!ww>
moritz erm, yes 14:00
pmichaud oh yeah, <.www> might work. Anyway, it checks for word chars
(I'm on a laggy connection this morning, pardon typos please) 14:01
well, in the case of something like <pair> * % ',' I agree that the brackets aren't an improvement.
[<pair> ]* % [',' ] 14:02
for / <element> + % ',' / S05:1138 claims a redundancy for the whitespace between <element> and '+' and the '+' and the '%', but I'm not sure it's redundant if the quantifier is '*' 14:07
i.e., in / <element> * % ',' / the whitespace isn't redundant. 14:08
pmichaud i.e., it's rewritten to / [ <element> <.ws> ] * % [ ',' <.ws> ] <.ws> / and all of the <.ws>'s are needed. 14:10
pmichaud I'm also wondering if some of the smarts about when to call consecutive <.ws>'s should be moved into the regex engine itself. 14:19
masak sounds like a good idea.
pmichaud i.e., to eliminate Rakudo's <MARKED(...)> rule and the equivalents for STD
well, perhaps not eliminate, but definitely to hotpath it
masak & 14:20
pmichaud jnthn: ping 14:28
[Coke] ack -ic pir src | awk -F: '{sum +=$2} END{print sum}' 14:30
637
I assume the eventual goal is to move that to 0ish. (by hiding things in NQP instead.)
pmichaud that number is way too high 14:31
sicne it includes src/pmc 14:32
*since
[Coke] pmichaud: only one instance of "pir" in that dir. 14:33
pmichaud yeah, I'm checking that too
[Coke] (ina comment)
pmichaud a *lot* of the pir::'s look like they could be converted to nqp:: now.
pmichaud try \bpir\b instead, though. 14:34
so you don't get all of the _pirop_mapping calls, and others 14:35
and the comments that have words like "expires" :-)
[Coke] ack -icw pir | sort -t: -n -k2 # shows 5 files with 30 or more references 14:36
pmichaud anyway, yes, the goal is to move the pir:: stuff to nqp, but only for stuff that isn't vm-specific. If it's specific to Parrot, it should remain pir:: 14:39
i.e, nqp:: shouldn't just be a renaming of parrot opcodes 14:40
[Coke] should the specific to parrot stuff be in rakudo, though? 14:47
pmichaud I suspect rakudo will have some parrot-specific stuff for a while, yes. 14:49
pmichaud rakudo-specific stuff probably shouldn't go into nqp 14:49
JimmyZ thinks it's better to improve parrot other than target other vms 14:49
pmichaud JimmyZ: who will be doing the improving, though? 14:51
[Coke] I agree. faster/better rakudo with no work on rakudo would be awesome, though. ;) 14:52
s/though// 14:53
JimmyZ wonders who will do work to target other vms
[Coke] Oh, I'd probably work on a JVM target.
Be nice to be able to use perl6 at work. 14:54
hoelzro [Coke]: or on Android =) 14:54
[Coke] JimmyZ: making nqp generate something other than PIR sounds much easier to me than writing C code for parrot.
if writing C code for parrot was easy for me, I'd do more of it, for sure. 14:55
JimmyZ somebody said the ruby community is so unitive that they only have one framework :) 14:56
zhutingting dancer was inspired by sinatra 15:03
JimmyZ 朱婷婷你好
zhutingting ;-)
many projects were inspired by ruby and python and etc 15:05
pmichaud I'm afk again... bbl 15:07
zhutingting just rip off have fun 15:08
TimToady masak: \x2028 is discussed in S02:64 15:36
TimToady arnsholt: re irclog.perlgeek.de/perl6/2012-08-01#i_5865547, "Sink me!" --The Scarlet Pimpernel 15:42
jnthn pmichaud: pong, though I see you already left 15:45
dalek ecs: 0d42d6c | larry++ | S05-regex.pod:
The spaces are not redundant under *, pmichaud++
16:30
sorear good * #perl6 16:35
spider-mario hi
jnthn o/ sorear 16:38
crab2313_ o/ sorear 16:40
masak TimToady: yes, but that's the source code. I was talking about .lines 16:53
arnsholt jnthn: When I'm adding a new opcode in NQP to be exposed as an nqp:: does it go in src/PAST/NQP.pir, src/QAST/Operations.nqp or both? 16:54
pmichaud arnsholt: definitely src/QAST/Operations.nqp . If the opcode is needed for building nqp itself, then it also needs to go into src/PAST/NQP.pir until we get nqp switched over to QAST 16:59
arnsholt Right. Not gonna bother with PAST then. Cheers 17:04
pmichaud jnthn: ping (re-attempt :) 17:07
jnthn pmichaud: o/
pmichaud how much would it be worth to save an attribute in Cursor? ;-) 17:12
a lot? a little? 17:13
jnthn pmichaud: Every time I shaved an attribute off QAST::Node we won a measurable amount of memory.
pmichaud so, worth a fair bit, then?
jnthn pmichaud: Er, saved a measurable amount.
pmichaud: It's worth something, yes. 17:14
Which one are you thinking we can lose?
pmichaud I'm thinking we can combine $!orig and $!target
(and possibly others, but those are the obvious ones) 17:15
jnthn Hmm...how'd we do that?
pmichaud if we create a struct to hold both of those attributes, since they're invariant over a match, we can keep track of them with a single object reference in each cursor object instead of two
jnthn Every problem can be solved by... :)
pmichaud class NQPCursorSource { has $!orig; has str $!target; } 17:16
jnthn Right :)
Probably a net win.
pmichaud then each Cursor just keeps a reference to $!source
we have to do an extra attribute lookup for each subrule invocation, but ....
we also lose an attribute lookup and bind operation for each cursor creation
jnthn Right, so probably it ties in that regard. 17:17
pmichaud (because we can do a single bind when creating the cursor instead of two)
the NQPCursorSource can also cache information about the overall match
for example, it's an obvious place to keep track of line offsets
(the starting position of each line) 17:18
lastly, we could even attach something like STD.pm6's @*MEMOS array there, to be able to optimize rule stuff
jnthn Ooh 17:19
pmichaud i.e., we could let the regex engine itself decide not to even call the <.ws> rule when it knows that it's already matched.
jnthn Are you pondering putting the MARKED thing there? :) 17:20
pmichaud or things like that.
GlitchMr perl6: :2<1.0011101111100111011011001000101101000011100101011>.print
p6eval niecza v19-15-g051783d: OUTPUT«1.234»
..rakudo c1bfbb: OUTPUT«1.2340000000000000»
pmichaud well, being able to wisely handle consecutive <.ws> calls is what led me to it, yes.
STD.pm6 uses @*MEMOS for quite a bit of stuff, though, so it might not be a way to eliminate everything. But if we can cache some per-match information that lets us prune subrule calls, it might be a really good optimization. 17:21
dalek p: df6015a | jnthn++ | src/QAST/Compiler.nqp:
Provide a way to let a HLL specify that returned values should always be boxed. Outsourcing this to QAST has various benefits, including keeping this out of the QAST tree itself. Then inlining doesn't have to worry over this detail.
17:22
pmichaud and having a separate struct to hold $!orig might be a natural place for such per-match scratchpad stuff.
anyway, I think it would be a simple change to make, so I'll go ahead and prototype it. 17:23
it will save one str attribute per Cursor, and one bind operation per subrule invocation
dalek kudo/nom: 6956baf | jnthn++ | tools/build/NQP_REVISION:
Bump to latest NQP_REVISION for QAST improvements.
17:24
kudo/nom: 7adef40 | jnthn++ | src/Perl6/ (2 files):
Kill off box_native_if_needed; QAST having HLL-configurable boxing means that we don't need to do it any more. Results: cleaner code, less QAST nodes needed, slight performance/memory win.
jnthn pmichaud: Sounds good to me.
TimToady masak: I see nothing in that section that limits "and has consistent Unicode semantics" to the source code. 17:25
PerlJam pmichaud: random peanut gallery question ... would the thing you just proposed also be usable for quantified quantifiers ? (i.e. so that you know when you've already matched the inner match of something like (a*)* zero times and so can fail faster) 17:26
pmichaud PerlJam: I think I already figured out how to break that loop, using the bstack.
PerlJam ok
pmichaud but yes, if my other approach ends up not working then the scratchpad might help. 17:27
pmichaud essentially, I'm thinking that push_mark can refuse to push a duplicate mark onto the bstack 17:28
or, it can signal "I already have this mark" and the caller can figure out "oh, I should not loop here" 17:29
jnthn dinner; bbl 17:35
moritz r: my @a = 1..4; say @a[1..*] 17:41
p6eval rakudo c1bfbb: OUTPUT«2 3 4␤»
moritz r: my @a = 1..4; say @a[1..*-2] 17:42
p6eval rakudo c1bfbb: OUTPUT«2 3␤»
dalek c: e0b2b30 | moritz++ | lib/WhateverCode.pod:
WhateverCode
17:44
c: c73b3cb | moritz++ | lib/Whatever.pod:
explain that Range operators curry WhateverCode but not Whatever
c: e1ffe9b | moritz++ | lib/Whatever.pod:
emphasize that Whatever-currying is syntactic
moritz jnthn: I'm curious about sub istype in Actions.pm. In what cases does nqp::istype die? 17:54
if $type isn't a type?
seems most usages of it have $Pair or so as type, which was retrieved as $*W.find_symbol(['Pair']) 17:56
r: say ObjAt.^mro
p6eval rakudo c1bfbb: OUTPUT«ObjAt() Any() Mu()␤»
dalek c: a878b89 | moritz++ | lib/Mu.pod:
Mu.WHICH, ObjAt
18:02
jnthn moritz: Type variables 18:03
moritz jnthn: ah 18:05
jnthn: so where the type is clearly not a type variable, we can change it to nqp::istype? 18:06
for example if istype($type_obj, $*W.find_symbol(['Numeric'])) { 18:07
or does it die $type_obj is a type variable?
jnthn It's about the LHS too.
moritz r: role A[::T] { my T enum B <C D> } 18:08
p6eval rakudo c1bfbb: OUTPUT«===SORRY!===␤Cannot auto-generate a proto method for 'Numeric' in the setting␤»
jnthn ...wow
moritz I guess that would need the same declaration deferal as declarations in quasi 18:09
jnthn To the degree we care to make roles that macro-ish, yes
moritz submits LTA error rakudo bug, justin case 18:10
r: role A[::T] { my T $x }
p6eval rakudo c1bfbb: ( no output )
moritz r: role A[::T] { class B is T { } } 18:12
p6eval rakudo c1bfbb: OUTPUT«===SORRY!===␤Cannot type check against type variable T␤»
[Coke] .u * 19:02
phenny U+0001 - ()
U+0002 - ()
U+0003 - () [...]
[Coke] .u *
phenny U+002A ASTERISK (*)
[Coke] .u * 19:04
phenny U+002A ASTERISK (*)
[Coke] whew.
shachaf preflex: seen ingy 19:16
preflex ingy was last seen on #perl6 1 day, 21 hours and 44 seconds ago, saying: I think people will get it...
GlitchMr robert.duckduckgo.com/?q=perl6+lcfirst 19:22
ok...
moritz robert.duckduckgo.com/?q=perl6+tc 19:23
misses a linebreak between the two method signature lines 19:24
GlitchMr I know
moritz otherwise very cool
GlitchMr It seems that DuckDuckGo doesn't understand &#10;
I already have pushed a commit to use <br> instead 19:25
But it might take a while to be pulled into experimental version of DuckDuckGo
crazedpsyc it's in a <pre>
use \n?
GlitchMr This is so confusing and there is no real documentation 19:26
dalek kudo/inliner: 558ea68 | moritz++ | src/core/IO.pm:
remove IO::Path and IO::Dir

as the deprecation notice predicted
GlitchMr Also: 19:26
robert.duckduckgo.com/?q=Perl+6+Str
crazedpsyc yeah, fathead is the next in line to get refactored and documented
GlitchMr Except something went wrong...
GlitchMr I guess I've found a bug in DuckDuckGo 19:27
moritz happens :-)
GlitchMr robert.duckduckgo.com/?q=Perl+6+Mu
:)
crazedpsyc hah
crazedpsyc adds to bug list
dalek kudo/inliner: 4c3f769 | jnthn++ | src/Perl6/ (2 files):
Elimination of boxable_native, and better handling of literal allomorphy.
19:28
moritz GlitchMr: it would also make sense to show the first paragraph of the description of a type
GlitchMr Hmmm... yeah... 19:29
That probably could be done by adding generic "Str"
GlitchMr github.com/GlitchMr/zeroclickinfo-...output.txt 19:29
Well, there is also problem with disambig 19:30
It ought to work, but doesn't (I don't know why) 19:31
masak I don't think 'role A[::T] { my T enum B <C D> }' should be made to work, no. 19:33
jnthn phew ;) 19:34
masak not sure why I think so. I've never seen roles as being that macro-like, I guess.
better to use a macro if that's what you want.
jnthn Aye
masak and leave roles to be simple.
jnthn "simple" :P
masak well, "si..." what jnthn said ;)
arnsholt jnthn: Is QAST/Operations.nqp the place to expose things as nqp::? It seems I didn't get beyond pir:: 19:54
jnthn arnsholt: Yes, but maybe run what you're adding by Pm or me first :) 19:56
Also if it's very Perl 6 specific it may belong in src/Perl6/Ops.pm 19:57
arnsholt It's exposing the dyncall writebarrier stuff, so I'm pretty sure it has to be in NQP first 20:02
lue hello world o/ 20:03
jnthn arnsholt: ah, yes, then add it with the other nativecall ops 20:05
masak lue! \o/
arnsholt jnthn: Cool. I'll see if I can figure out why it's not working then =) 20:09
lue masak: I can't get my demo game to work, would you like to take a look at it? 20:18
moritz arnsholt: are you using it in rakudo or in nqp? 20:19
arnsholt Using it from Rakudo 20:22
Doesn't work from the NQP REPL either, actually
moritz did you install nqp? 20:23
(stupid question, I know)
jnthn Wait, using it in Perl 6 code or in NQP code? 20:24
masak lue: sure.
lue github.com/lue/skytemple/blob/mast...mo/demo.p6 20:25
masak lue: BUILD sybmethod looks good. 20:26
sub*
lue: oh, but you need .place_player, too
lue Specifically it's a "Cannot look up attributes in a type object" error once you try to type in a command :/
oh. That would help :)
arnsholt moritz: Yeah, it's installed 20:27
masak lue: my $game = IFGame::Demo;
lue: need .new there.
that's why you get the "type object" error. 20:28
lue Alright, got everything fixed (although going north from the bunker doesn't cause the remarks. At least I can play now :) ) 20:30
moritz that error always means a method isn't strict enough on its invocant
masak lue: in the final for @events, you need to handle Adventure::GameRemarked. see crypt. 20:32
lue masak: just saw that poking through crypt. 20:32
arnsholt Hmm. Looks like I might've forgotten to rebuild Rakudo 20:33
Thought I'd done it
masak lue: the CLI is a "read side", with "event listeners" that mostly print updates for the user. 20:33
lue OK. I feel I'm starting to get the hang of how to use Adventure::Engine. 20:34
masak yay. 20:35
masak lue++ # Adventure::Engine's first downstream! 20:35
let me know of any feature requests, and we'll discuss them. 20:36
I haven't forgotten about your noun synonym one.
and feedback from other sources tells me I want something like that.
lue I feel I'll get more used to it when I write a sub MAIN without any stolen^Wborrowed code from crypt. :) 20:36
masak aye, good idea. 20:39
dalek Heuristic branch merge: pushed 55 commits to nqp/toqast by jnthn 20:51
moritz toqast? 20:53
jnthn: are you reviving that branch?
dalek c: 2b6e4f4 | (Felix Herrmann)++ | lib/Date.pod:
[Date] fix duplicated text
20:54
jnthn moritz: Yes, for its original purpose :) 20:56
dalek c: d864a34 | moritz++ | lib/Date.pod:
[Date] fix duplicate word
moritz jnthn: oh, moving nqp to qast
jnthn Right :)
Initial bits of the work are quite mechanical, so just picking off a little of it. 20:57
(Inliner is coming along, but I need some time to ponder literal allomorphism stuff...) 20:58
felher :/ ... the commit at least got moritz to fix it ...
* moritz++ to fix it
moritz felher: I found it quite amusing, you removed duplicate sentence fragment, I removed duplicate word :-) 20:59
moritz -> sleep
felher moritz: sleep well :) 21:00
masak moritz: dream of duplicate removals of duplicate things. 21:00
fibo hi! works only on chrome : tris3d.com/ 21:04
dalek p/toqast: ae3c767 | jnthn++ | / (5 files):
Add a temporary NQPQ to do the initial bits of QAST migration; yes, the missing dependency in the Makefile is deliberate.
21:12
dalek kudo/nom: eb46da2 | jnthn++ | src/Perl6/Actions.pm:
Toss a use statement that we no longer need.
21:18
masak ...a 'use' statement that we no longer 'need'... :P 21:20
jnthn We totally don't require it any more, dude!
Totally unimportant. 21:21
masak ;) 21:26
dalek p/toqast: 077f198 | jnthn++ | src/NQPQ/ (2 files):
Translate PAST::Stmt/PAST::Stmts to QAST::Stmt/QAST::Stmts.
21:47
p/toqast: c58ae6d | jnthn++ | src/NQPQ/Actions.pm:
Do a bunch of the easy PAST => QAST translations.
jnthn Well, there's that little project started.
masak jnthn++ 21:50
jnthn The good thing: NQP is rather smaller than Rakudo. The bad thing: NQP relies much more heavily on things I tossed in QAST that will not be coming back. 21:52
sorear NQPQ is the part where we convert NQP to use QAST and drop PAST for good? 21:54
jnthn Right.
I also get to kill off use of Parrot Undef along the way.
That will...have some fallout.
(Like, less suckage in the codebase...) 21:55
sorear we use parrot undef?
jnthn NQP does, sadly.
sorear ++jnthn
jnthn Well, NQP was initially Perl 6 like syntax on top of Parrot primitives, and times have kinda changed since. 21:56
jnthn rest & 22:22
masak 'night, #perl6 22:44