»ö« 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:01
Chillance left,
cognominal left
00:04
cognominal_ left
00:06
adu joined
|
|||
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: 3Parse 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 | ||
00:33
UncleFester6 joined
|
|||
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!===Confusedat /tmp/OJK4HLivLg:1» | ||
[Coke] | r: my @a = [[]]; say(+@a); | ||
p6eval | rakudo c1bfbb: OUTPUT«1» | ||
00:38
tokuhiro_ joined
|
|||
diakopter uses 3 nested gathers/take for something; whee | 00:42 | ||
colomon | diakopter++ | 00:46 | |
00:47
cognominal_ joined
|
|||
[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» | ||
00:52
raiph joined
|
|||
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 | ||
01:03
scott___ joined
|
|||
TimToady | course now I've *really* broken STD: Unrecognized regex metacharacter < (must be quoted to match literally) | 01:07 | |
01:07
tokuhiro_ left
|
|||
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 | ||
01:44
cognominal_ left
01:46
Entonian joined
|
|||
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 | ||
01:55
Entonian left
|
|||
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 | ||
02:08
lucas_ left
|
|||
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 | ||
02:36
Psyche^ joined
02:38
mikemol joined
|
|||
sorear | having to design a parser, mostly | 02:39 | |
02:39
UncleFester6 left
|
|||
sorear | questions like whehter to bring in something like 'jay' and how much to reuse the regex mident | 02:39 | |
EBRAINOVERFLOW | |||
02:40
Patterner left,
Psyche^ is now known as Patterner
|
|||
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 | |
02:42
cognominal joined,
crab2313 joined
|
|||
[Coke] | ... I think my stomach just made an angry birds noise. wtf? | 02:43 | |
02:44
gongyiliao joined
|
|||
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? | ||
02:53
sftp left
|
|||
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 | ||
02:57
orafu left
02:59
orafu joined
|
|||
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 | |
03:01
cognominal left
|
|||
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«1100010000001000000000100000000000010000000000000001000000000000000000100000000000000000000010000000000000000000000001000000000000000000000000000100000000000000000000000000000010000000000000000000000000000000001000000000000000000000000000000000000100000000000000… | ||
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 | ||
03:10
crab2313 left
|
|||
diakopter | (but alas, merely pipe dreams..) | 03:13 | |
03:14
crab2313 joined
03:25
lue joined
|
|||
benabik | diakopter: Just meant to point out the similarities. :-) | 03:34 | |
03:54
crab2313 left
|
|||
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 | |
04:15
kaare_ joined
04:23
telex left,
telex joined
04:29
skids left
04:34
telex left
04:36
telex joined
04:51
SamuraiJack joined
04:56
alc joined
05:11
alc left
05:26
alc joined
05:43
SamuraiJack left
|
|||
moritz | \o | 05:43 | |
05:46
adu left
05:52
wtw joined
05:59
birdwindupbird joined
06:09
telex left
06:10
telex joined
06:11
kaleem joined
|
|||
arnsholt | o/ | 06:12 | |
06:21
kaare_ left
06:30
alc left
06:34
thou left,
cognominal joined
06:36
cognominal left
|
|||
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 | ||
07:10
GlitchMr joined
|
|||
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 | |
07:15
fhelmberger joined
07:16
crab2313 joined
07:18
crab2313 left
|
|||
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 | |
07:28
xinming left
07:29
xinming joined
|
|||
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 | |
07:38
cognominal joined
07:40
cognominal left
|
|||
moritz | r: say Block.^mro | 07:45 | |
p6eval | rakudo c1bfbb: OUTPUT«Block() Code() Any() Mu()» | ||
07:51
alc joined
07:55
alc left
|
|||
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 | |
08:14
jdrab joined
|
|||
masak | sorear++ # v20 | 08:18 | |
08:20
fgomez left
|
|||
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 | ||
08:24
dakkar joined
|
|||
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 | |||
08:30
xinming_ joined
|
|||
moritz | it seems that +@*MODULES is always at least 1 | 08:31 | |
masak .oO( 412 ) | 08:32 | ||
08:32
xinming left
|
|||
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 | |||
08:36
mscha joined
|
|||
jnthn | Yeah. It looks right at least. | 08:37 | |
08:38
SamuraiJack joined
|
|||
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 | ||
08:40
cognominal joined
08:42
cognominal left
|
|||
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. | ||
09:37
cognominal joined
09:44
daxim joined
|
|||
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 | ||
10:03
Bzek joined
|
|||
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 | |||
10:17
cognominal left
|
|||
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 | |||
10:25
cognominal joined
|
|||
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 | ||
10:29
cognominal left
|
|||
GlitchMr | This list looks interesting | 10:29 | |
10:29
cognominal joined
|
|||
GlitchMr | (aside of that Inf .. 1 won't work in Perl 6) | 10:30 | |
10:30
scott___ left
|
|||
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 | ||
10:45
Bzek left
10:52
JimmyZ joined
|
|||
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 | ||
11:04
cognominal left
11:14
SamuraiJack left
11:18
eiswar joined,
SamuraiJack joined
11:25
cognominal joined
11:30
sergot joined
|
|||
sergot | hi o/ | 11:30 | |
masak | sergocie! \o/ | 11:31 | |
sergot | masaku \o/ | ||
11:33
bruges left
11:35
fhelmberger left,
mtk joined
11:36
sergot1 joined,
sergot left
11:37
mtk left
11:38
mtk joined
11:42
jdrab left
11:43
sergot joined
11:45
sergot1 left
11:46
sftp joined
12:00
cognominal left
12:01
kaleem left
12:02
fhelmberger joined
12:10
gongyiliao left
12:18
jaldhar left
|
|||
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 :) | ||
12:28
spider-mario joined
|
|||
masak submits rakudobug | 12:28 | ||
oh, felher is on it. | |||
masak unsubmits :) | |||
12:29
mucker joined
|
|||
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 | |
12:37
jaldhar joined
|
|||
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» | ||
12:39
cognominal joined
|
|||
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» | |||
12:42
kaleem joined
|
|||
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 | |
12:50
tokuhiro_ joined
|
|||
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 | |||
12:52
PacoAir joined
12:56
pdurbin joined
|
|||
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 | |||
13:07
nightlord joined
|
|||
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 | |
13:10
bruges joined
|
|||
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 | |
13:13
crab2313 joined
13:15
bluescreen10 joined,
atrodo joined
|
|||
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 | |
13:19
GlitchMr left
13:20
sergot1 joined,
wtw left,
GlitchMr joined
|
|||
moritz just compiles from source | 13:21 | ||
13:21
Chillance joined
13:22
skids joined
|
|||
JimmyZ too | 13:22 | ||
13:22
sergot left
|
|||
PerlJam is compiling from source right now. | 13:23 | ||
13:25
GlitchMr left
|
|||
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. | |||
13:31
eiswar left
|
|||
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 | |
13:51
JimmyZ left
|
|||
pmichaud | first b | 13:51 | |
oh, final b | |||
moritz | actually, empty string | ||
pmichaud | correct. | ||
moritz | with + it would match the final b | 13:52 | |
13:52
JimmyZ joined
|
|||
pmichaud | right. | 13:52 | |
13:52
fhelmberger left
|
|||
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 | ||
14:08
thou joined
|
|||
pmichaud | i.e., it's rewritten to / [ <element> <.ws> ] * % [ ',' <.ws> ] <.ws> / and all of the <.ws>'s are needed. | 14:10 | |
14:11
zhutingting joined
14:14
tokuhiro_ left,
sergot joined,
pdurbin left
14:16
sergot1 left
|
|||
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 | |
14:21
bruges left
|
|||
pmichaud | jnthn: ping | 14:28 | |
14:28
GlitchMr joined
|
|||
[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. | ||
14:33
kaare_ joined
|
|||
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 | |
14:37
cognominal left
|
|||
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 | ||
14:42
cognominal joined
14:44
jaldhar left
14:45
sergot1 joined
14:47
sergot2 joined
|
|||
[Coke] | should the specific to parrot stuff be in rakudo, though? | 14:47 | |
14:47
sergot left
|
|||
pmichaud | I suspect rakudo will have some parrot-specific stuff for a while, yes. | 14:49 | |
14:49
sergot joined
|
|||
pmichaud | rakudo-specific stuff probably shouldn't go into nqp | 14:49 | |
14:49
sergot1 left
|
|||
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 | |
14:51
sergot2 left
|
|||
[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 | ||
14:54
mucker left
|
|||
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 | ||
14:55
mucker joined
|
|||
JimmyZ | somebody said the ruby community is so unitive that they only have one framework :) | 14:56 | |
14:56
kaleem left
15:01
sergot left
15:03
crab2313_ joined
|
|||
zhutingting | dancer was inspired by sinatra | 15:03 | |
JimmyZ | 朱婷婷你好 | ||
zhutingting | ;-) | ||
many projects were inspired by ruby and python and etc | 15:05 | ||
15:05
crab2313 left
15:06
sergot joined
|
|||
pmichaud | I'm afk again... bbl | 15:07 | |
zhutingting | just rip off have fun | 15:08 | |
15:15
sergot1 joined
15:18
sergot left
15:21
kaleem joined
15:23
kaleem left
15:27
nightlord left
|
|||
TimToady | masak: \x2028 is discussed in S02:64 | 15:36 | |
15:39
cognominal left
|
|||
TimToady | arnsholt: re irclog.perlgeek.de/perl6/2012-08-01#i_5865547, "Sink me!" --The Scarlet Pimpernel | 15:42 | |
15:45
cognominal joined,
adu joined,
thelazydeveloper joined
|
|||
jnthn | pmichaud: pong, though I see you already left | 15:45 | |
15:50
JimmyZ left
15:53
cognominal left
15:58
Ex joined,
Ex left,
Ex joined
16:02
cognominal joined
16:08
flussence left,
flussence_ joined
16:09
flussence_ is now known as flussence
16:11
Ex left
16:14
am0c joined
16:25
flussence left
16:27
SamuraiJack left
16:28
SamuraiJack joined
16:29
flussence joined
|
|||
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 | |
16:41
zhutingting left
16:43
Ex joined
16:52
SamuraiJack left,
spider-mario left
|
|||
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 | |
16:55
daxim left,
SamuraiJack joined
16:57
birdwindupbird left
16:58
dakkar left
|
|||
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/ | ||
17:12
cognominal left,
bluescreen10 left
|
|||
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 | |
17:27
mucker left
|
|||
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 | ||
17:34
sergot joined
|
|||
jnthn | dinner; bbl | 17:35 | |
17:35
xinming_ left
17:36
sergot1 left
17:39
am0c left
17:41
am0c joined
|
|||
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» | ||
17:42
xinming joined
|
|||
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 |
|||
17:47
fgomez joined,
fgomez left
17:49
GlitchMr left,
cognominal joined
17:52
fgomez joined
|
|||
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()» | ||
17:57
cognominal left
|
|||
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» | ||
18:18
sergot left
18:19
sergot joined
18:35
Coleoid left,
sergot1 joined
18:37
sergot left,
crab2313_ left
18:47
cognominal joined
18:56
cognominal left,
cognominal joined
19:01
sergot joined
|
|||
[Coke] | .u * | 19:02 | |
phenny | U+0001 - () | ||
U+0002 - () | |||
U+0003 - () [...] | |||
[Coke] | .u * | ||
phenny | U+002A ASTERISK (*) | ||
19:03
sergot1 left,
sergot1 joined
|
|||
[Coke] | .u * | 19:04 | |
phenny | U+002A ASTERISK (*) | ||
[Coke] | whew. | ||
19:05
sergot left
19:08
sergot joined
19:09
sergot1 left
19:12
sergot left,
sergot1 joined
19:14
brrt joined
19:15
brrt1 joined
|
|||
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... | ||
19:16
sergot joined,
GlitchMr joined
19:18
sergot1 left,
brrt left
19:20
sergot1 joined
19:21
sergot left
|
|||
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 | ||
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 |
||
19:26
dalek left
|
|||
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... | ||
19:26
dalek joined,
ChanServ sets mode: +v dalek
|
|||
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" | |||
19:29
birdwindupbird joined
|
|||
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 | ||
19:33
GlitchMr left
|
|||
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 ;) | ||
19:35
sergot joined
19:37
sergot1 left
|
|||
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 | |
20:03
fibo joined
|
|||
lue | hello world o/ | 20:03 | |
jnthn | arnsholt: ah, yes, then add it with the other nativecall ops | 20:05 | |
masak | lue! \o/ | ||
20:06
cognominal left
20:08
SamuraiJack left
|
|||
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) | |||
20:23
cognominal joined
|
|||
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 :) | |||
20:26
brrt1 left
|
|||
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 | ||
20:31
brrt joined,
sergot1 joined
|
|||
masak | lue: in the final for @events, you need to handle Adventure::GameRemarked. see crypt. | 20:32 | |
20:32
sergot left
|
|||
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 | |||
20:33
sergot joined
|
|||
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 | |
20:35
cognominal left
|
|||
masak | yay. | 20:35 | |
20:35
sergot1 left
|
|||
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. | |||
20:36
cognominal joined
|
|||
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 | |
20:39
sergot left
|
|||
masak | aye, good idea. | 20:39 | |
20:39
brrt left
20:42
adu left
|
|||
dalek | Heuristic branch merge: pushed 55 commits to nqp/toqast by jnthn | 20:51 | |
20:52
birdwindupbird left
|
|||
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 | |||
20:59
fibo_ joined
|
|||
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 | |
21:00
fibo left
|
|||
masak | moritz: dream of duplicate removals of duplicate things. | 21:00 | |
21:00
fibo_ is now known as fibo
21:04
skids left
|
|||
fibo | hi! works only on chrome : tris3d.com/ | 21:04 | |
21:04
fibo left
|
|||
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 | |
21:17
kaare_ left
|
|||
dalek | kudo/nom: eb46da2 | jnthn++ | src/Perl6/Actions.pm: Toss a use statement that we no longer need. |
21:18 | |
21:19
atrodo left
|
|||
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 | |
21:34
benabik left
|
|||
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 | ||
21:56
bluescreen10 joined
|
|||
jnthn | Well, NQP was initially Perl 6 like syntax on top of Parrot primitives, and times have kinda changed since. | 21:56 | |
22:04
benabik joined
22:05
bluescreen100 joined
22:06
bluescreen100 left,
bluescreen10 left
22:10
cognominal left
22:15
PacoAir left
22:20
cognominal joined
|
|||
jnthn | rest & | 22:22 | |
22:23
am0c left
|
|||
masak | 'night, #perl6 | 22:44 | |
22:45
skids joined
22:58
mscha left
23:03
cognominal left,
cognominal joined
23:10
cognominal left
23:14
ggoebel joined
23:19
whiteknight joined
23:20
whiteknight is now known as Guest21411
23:22
thou left
23:31
raiph left
23:39
MayDaniel left
23:55
cognominal joined
23:58
thelazydeveloper left
|