»ö« Welcome to Perl 6! | perl6.org/ | evalbot usage: 'perl6: say 3;' or rakudo:, niecza:, std:, or /msg camelia perl6: ... | irclog: irc.perl6.org | UTF-8 is our friend!
Set by sorear on 25 June 2013.
00:05 jnap left 00:06 rurban joined, stevan_ joined, ajr_ left 00:07 stevan_ left 00:08 stevan_ joined 00:10 rurban left 00:12 Psyche^ joined 00:16 [particle] joined, Psyche^_ left 00:17 [particle]1 left 00:25 imrudbu left 00:26 imrudbu joined 00:29 BenGoldberg left 00:32 Guest18828 left 00:35 BenGoldberg joined 00:47 Guest18828 joined
japhb__ r: 01:06
01:06 rurban joined
japhb__ r: my $f = "foo"; my $b = "BAR"; << $f is a $b >>.perl.say; 01:06
camelia rakudo d7e5e1: OUTPUT«(("foo",).list, ("is", "a"), ("BAR",).list)␤»
japhb__ Is that ^^^ intended? 01:07
I would have expected a flattened version.
01:11 rurban left 01:19 prevost joined 01:24 benabik joined
dalek rl6-roast-data: 16f58c2 | coke++ | / (5 files):
today (automated commit)
01:39
01:43 fridim_ joined 01:44 _ilbot left 01:45 _ilbot joined 01:47 hypolin joined
Util Looking for Camelia source art or stickers. Request did not make it to Perl 6 mailing list. 01:51
In re: lists.parrot.org/pipermail/parrot-d...07592.html
01:55 btyler_ left
geekosaur um, I got it 01:55
Util geekosaur: You got it via parrot-dev, or via perl6-users ? 01:56
01:57 woosley joined
geekosaur I am not on any parrot lists 01:57
Util geekosaur: OK, then I was in error about it not making it to the Perl 6 list, probably because my ISP is non-optimal. Thanks! 01:58
02:02 ssutch left
geekosaur so checking headers, I (as I expected) got it via the perl6-all.perl.org list 02:02
I don't know how you read mail, but some mail systems (for example gmail and cyrus imapd) suppress duplicates in such a way that you don't get your own list messages back 02:04
(in the case of cyrus, only if you save outgoing messages; it considers that the master copy and drops the incoming list copies as duplicates of it) 02:06
02:06 gyutyuglf joined 02:07 rurban joined 02:11 rurban left 02:14 REPLeffect left
Util geekosaur: Thanks for the info. 02:22
02:25 gyutyuglf left 02:34 REPLeffect joined 02:46 rurban joined
[Coke] enjoys some perl(er) wine, lizmat++ woolfy++ 02:47
02:47 rurban left 02:48 prevost left 03:03 ssutch joined 03:04 LlamaRider joined
LlamaRider Hi. Some of my rakudo code has regressed. Turns out the regex capture variables $0, $1 ... are now of type Match, rather than Str (which is what my old code assumed them to be). 03:07
I take it I always have to explicitly say "$0.Str" now? I was doing an @array.push($0); where @array was of Str type, which no longer compiles. $0.Str compiles again of course. 03:10
[Coke] ~$0 should do the trick.
or .Str, same thing.
[Coke] wonders how to iterate over the result of an opendir.
(in nqp0
03:11 araujo left
LlamaRider what is the point of the Match type? and shouldn't it be somehow more compatible with Str ? I need to find a resource to read on that. Will add a note to my P5-to-P6 porting guide. 03:11
[Coke] the match is capturing all the information about the match. 03:12
r: ("asdf" ~~ "s"); say $0.perl 03:13
camelia rakudo d7e5e1: OUTPUT«Any␤»
[Coke] r: ("asdf" ~~ "s").perl.say
camelia rakudo d7e5e1: OUTPUT«Bool::False␤»
[Coke] ... I need sleep. ;)
LlamaRider r: ("asdf" ~~ "s"); say $0.WHAT;
camelia rakudo d7e5e1: OUTPUT«(Any)␤»
LlamaRider r: ("asdf" ~~ /./); say $0.WHAT;
camelia rakudo d7e5e1: OUTPUT«(Any)␤»
LlamaRider of course, no capture 03:15
r: ("asdf" ~~ /(.)/); say $0.WHAT; 03:16
camelia rakudo d7e5e1: OUTPUT«(Match)␤»
LlamaRider r: ("asdf" ~~ /(<[s]>)/); say $0.perl;
camelia rakudo d7e5e1: OUTPUT«Match.new(orig => "asdf", from => 1, to => 2, ast => Any, list => ().list, hash => EnumMap.new())␤»
LlamaRider better :)
03:17 colomon joined
LlamaRider what I am practically whining about is that I was expecting " @string_array.push($0) " to just work, without an explicit cast to $0.Str. But anyway, thanks for the input :) 03:17
03:19 dayangkun left
LlamaRider And yay, my P6 port of Lingua::EN::Sentence has been successively built with Rakudo on JVM for the first time. 03:20
[Coke]++ 03:21
successfully* (I need sleep too)
03:22 REPLeffect left 03:33 cognominal left 03:35 fridim_ left 03:38 LlamaRider left 03:43 havenwood left, havenwood joined 03:44 REPLeffect joined 03:48 havenwood left 03:55 preflex left 03:56 preflex_ joined, ChanServ sets mode: +v preflex_, preflex_ is now known as preflex 03:58 havenwood joined 04:04 havenwood left 04:21 [Sno] left 04:23 ksh joined 04:51 daniel-s_ joined 04:54 daniel-s left 05:06 ksh left 05:07 zby_home_ joined, zby_home_ left 05:16 BenGoldberg left 05:22 baest left 05:27 logie left
moritz \o 05:29
yoleaux 7 Oct 2013 17:29Z <[Coke]> moritz: did you fix pugs on host07?
7 Oct 2013 20:47Z <lizmat> moritz: simply adding "is default" didn't work (Could not find sub &infix:<does>). too tired now to try doing mixins by hand
moritz p: say 42
camelia pugs: OUTPUT«42␤»
moritz [Coke]: what exactly needs (or needed) fixing? I simply did a 'cabal install Pugs'
05:30 xinming left 05:31 [Sno] joined 05:32 xinming joined 05:34 FROGGS left 05:37 SamuraiJack__ joined, ssutch left 05:53 xenoterracide_ left 05:58 zakharyas joined 06:09 kaleem joined 06:11 jlaire_ is now known as jlaire 06:13 imrudbu is now known as ivanshmakov
masak mood gorning, #perl6 06:14
oh, and @gitinfo over at git also responds to things such as 'man git push'. 06:16
06:17 darutoko joined 06:21 SamuraiJack__ left 06:22 SamuraiJack joined
masak the bug at irclog.perlgeek.de/perl6/2013-10-07#i_7684699 has been submitted years ago. 06:25
it's the WAT part of unifying declarations and signatures.
06:27 ssutch joined
masak japhb__: I don't know if irclog.perlgeek.de/perl6/2013-10-08#i_7685424 is intended. would be interesting to have it flatten and see if any spectests break. 06:29
LlamaRider: $0 did not become of type Match overnight -- it's been that way for... always. 06:30
LlamaRider: something else must have changed from under you, not that.
06:31 denis_boyun joined 06:34 denis_boyun left 06:36 denis_boyun joined 06:42 xinming left 06:43 xinming joined
moritz I think what changed is that typed arrays are more strictly checked these days 06:54
there used to be many loophole through which you could add elements of the wrong type 06:55
lizmat++ fixed (nearly?) all of them
lizmat good *, #perl6! 07:05
pretty sure not all of them
r: my Int @a=^10; @a[5]:delete; say @a
camelia rakudo d7e5e1: OUTPUT«0 1 2 3 4 (Any) 6 7 8 9␤»
lizmat r: my Int @a=^10; @a[5]:delete; say @a; say @a[5] 07:06
camelia rakudo d7e5e1: OUTPUT«0 1 2 3 4 (Any) 6 7 8 9␤(Int)␤»
lizmat iterating over deleted entries in an array, always returns Any atm
07:08 pochi joined, lizmat_ joined 07:11 Timbus|Away joined, __sri joined 07:12 broquain1 joined 07:13 nine_ joined 07:15 yeltzooo6 joined, denis_boyun left 07:16 mtj_ joined 07:17 lizmat left, nine left, Timbus left, denysonique left, Khisanth left, broquaint left, mtj_- left, tipdbmp left, yeltzooo left, Timbus|Away is now known as Timbus
lizmat_ fwiw, it's not yet clear what the solution would need to be 07:23
my feeling is that if you're using :delete on an array, you're using it as a hash
and thus, when iterating over it, you would not see deleted elements
just like you wouldn't see deleted keys in a hash when iterating over the hash 07:24
07:24 lizmat_ is now known as lizmat
lizmat the coming days I will most likely be offline most of the time 07:24
will attempt to backlog when connected
07:24 lizmat left 07:25 Khisanth joined
masak the difference between the hash and the array, though, is that the array has an ordering. 07:35
more exactly, the indices are always 0..N-1.
a condition which has no correspondence in the hash case.
which (IMO) explains why there's a "hole" left when you delete something.
now, granted, there's a way to argue for :delete on arrays working more like .splice 07:36
but that would be "extra semantics out of nowhere" if you ask me. the hole comes from the fact that non-last elements still need to have an index due to the 0..N-1 thing, even after being removed.
07:44 araujo joined 07:47 PZt left 07:48 woolfy left 07:49 PZt joined
masak or, viewed from a slightly different angle: there are two behaviors here: leave a hole or don't leave a hole. reasonable use cases could be drawn up for both of these. 07:50
.splice is what we use for the "don't leave a hole" use case.
if :delete is made not to leave a hole, what operation will? 07:51
07:52 sqirrel joined
moritz assignment of Nil 07:53
or maybe the empty list 07:54
@a[1,3,5] = ()
hoelzro ahoy #perl6
preflex hoelzro: you have 1 new message. '/msg preflex messages' to read it.
08:00 berekuk left 08:04 PZt left
masak moritz: fair enough. 08:06
but there's also the performance argument: "leave a hole" is cheap, collapsing is O(.elems)
08:06 tipdbmp joined 08:07 iSlug joined
moritz agreed 08:07
masak in our JavaScript course, I lightly ridicule 'delete somearray[5]' for the leaving-a-hole semantics. but after this discussion, it kind of makes sense. 08:15
it's not that it's a useless operation. it's that it's an uncommon operation, and most of the time you want to splice. 08:16
TimToady: www.bbc.co.uk/news/science-environment-24429621 # whoa, we'd better hurry! :P
hehe, and on 08:17
first comment on HN: "It is an important milestone. But to have a commercially viable fusion reactor, you'll need a factor of 50-100 more energy [...]"
that's exactly like Perl 6 :P
08:19 xinming left, donaldh left 08:21 xinming joined 08:23 donaldh joined 08:26 FROGGS joined 08:28 zakharyas left 08:31 tipdbmp left 08:33 tipdbmp joined 08:42 denysonique joined, zamolxes_ left 08:49 zamolxes joined 08:51 dakkar joined 08:57 ivanshmakov left, ivanshmakov joined 08:59 gyutyuglf joined 09:01 fhelmberger joined 09:08 PZt joined 09:12 xinming left 09:13 xinming joined 09:14 iSlug left 09:31 zamolxes left 09:34 zamolxes joined 09:35 daxim joined 09:37 zakharyas joined 10:10 dmol joined 10:13 stevan_ left 10:14 sqirrel left, wsri left 10:15 wsri joined
mathw It's interesting that someone bothered to comment with that, because I'm pretty sure the researchers know. 10:23
But then people seem to think that you guys don't know that Rakudo isn't fast enough yet, so... 10:24
10:25 gyutyuglf left 10:30 gyutyuglf joined 10:48 gyutyuglf left
moritz is david wheeler on irc, and if yes, does anybody know his nick? 10:55
hoelzro moritz: Theory 11:06
or JustATheory
some variation on that theme
moritz hoelzro: thanks 11:07
11:10 grondilu joined 11:27 sqirrel joined 11:28 berekuk joined 11:37 pmurias joined 11:39 rindolf joined
pmurias if I want to write a tool which bundles a bunch of modules (in node format) into a single script is there a good reason to write it in full Perl6 instead of NQP? 11:39
dalek rlito: ab2e61c | (Flavio S. Glock)++ | / (3 files):
Perlito5 - perl6 - operators
timotimo perl6 gives you simpler file i/o and string manipulation and handling of lists of things 11:41
11:49 pmurias left 11:56 pmurias joined 12:11 denis_boyun joined 12:15 denis_boyun left 12:18 skids left 12:20 sqirrel left
grondilu r: class Foo { method postcircumfix:<( )>($i) { "ok" } }; say Foo.new()(pi) 12:20
camelia rakudo d7e5e1: OUTPUT«ok␤»
grondilu r: class Foo { method postcircumfix:<( )>($i, $j) { "ok" } }; say Foo.new()(pi, 1)
camelia rakudo d7e5e1: OUTPUT«Not enough positional parameters passed; got 2 but expected 3␤ in method postcircumfix:<( )> at /tmp/uqBfHyo5Bt:1␤ in block at /tmp/uqBfHyo5Bt:1␤␤»
grondilu n: class Foo { method postcircumfix:<( )>($i, $j) { "ok" } }; say Foo.new()(pi, 1) 12:21
camelia niecza v24-98-g473bd20: OUTPUT«Potential difficulties:␤ $i is declared but not used at /tmp/4R06k_JLJg line 1:␤------> class Foo { method postcircumfix:<( )>(⏏$i, $j) { "ok" } }; say Foo.new()(pi, 1)␤ $j is declared but not used at /tmp/4R06k_JLJg line 1…»
grondilu n: class Foo { method postcircumfix:<( )>($i, $j) { "$i $j" } }; say Foo.new()(pi, 1)
camelia niecza v24-98-g473bd20: OUTPUT«3.1415926535897931 1␤»
grondilu rakudobug?
gfldex grondilu: known rakudobug 12:25
grondilu ok 12:26
pmurias what is the recommened rakudo atm, the parrot or jvm one?
12:27 pmurias left 12:28 denis_boyun joined 12:31 denis_boyun left 12:32 denisboyun joined
nwc10 come back pmurias 12:34
12:38 SmokeMachine left 13:05 PacoAir joined 13:06 zakharyas left 13:09 kay joined, kay is now known as Guest65723
dalek rlito: 5f06d56 | (Flavio S. Glock)++ | / (3 files):
Perlito5 - perl6 - operators
13:11
arnsholt [Coke]: Could you add some more in-depth comments to NQP #126? 13:14
The bug as it stands is a bit hard to decipher for those of us who didn't attend the workshop =)
timotimo: I've looked a bit at NQP #104, and it turns out NQP doesn't have temp at all. Do you mind if I close the bug? 13:15
13:16 kaleem left
pmichaud nqp will need :tmp 13:17
er, :temp
if only because STD.pm6 uses it.
nwc10 good *, pmichaud
pmichaud good morning, #perl6
moritz \o *
FROGGS hi pmichaud 13:18
pmichaud (so no, don't close #104) 13:19
timotimo hi pm :) 13:20
arnsholt That makes sense. In that case, I guess we'll also want temp for normal NQP code as well as regexes 13:21
pmichaud no, not necessarily. 13:22
NQP's phillosophy is never "add a feature because we might want it"
arnsholt Right
pmichaud Also, I'm not sure that :temp and statement-level 'temp' do precisely the same thing. (They might... I just would want to verify that before automatically conjoining them) 13:23
dalek p/buglet: 90050fd | (Tobias Leich)++ | / (13 files):
buglet
13:24
13:25 hummeleB1 joined
arnsholt S05 says :<scope declarator> is "parsed as normal Perl 6 code", so I think it should be identical 13:25
pmichaud yeah, but NQP's grammar stuff is bootstrappy, so sometimes things end up being not exactly identical. 13:26
arnsholt :my is parsed by delegating back to MAIN's statement as well, which is part of the reason I assumed we'd add temp to running code as well. Keeping :temp and :my the same
Yeah, that's true 13:27
Bootstrapping has bitten me a couple of times the last few days as I've tried to close various bugs
pmichaud oooh, :my is implemented oddly in NQP's grammar. 13:29
13:29 donaldh left
pmichaud seems like it ought to be part of mod_ident: instead of metachar: (so that it matches :dba, :ratchet, :sigspace, etc.) 13:30
arnsholt How so? Rakudo does the same thing, AFAICT
13:31 lowpro30 joined
pmichaud Rakudo could be wrong also. 13:31
13:31 lowpro30_ joined
pmichaud otoh, it looks like some chap named 'pmichaud' is the one that put the <:my> handling into metachar: ... so perhaps it's right. 13:32
it just strikes me as being inconsistent with the others somehow.
13:33 denisboyun left 13:34 kaare_ joined
arnsholt Why is that? If it's supposed to be parsed the same as the corresponding declaration in non-regex code, it makes sense to use the same code path, no? 13:34
13:35 lowpro30 left
pmichaud I think we're talking about two different things now. 13:35
Yes, I'm fine with :my calling into the main language parser. 13:36
I'm pointing out an inconsistency with where <:my> itself is being handled, not the way in which it works.
arnsholt Indeed. Turns out there's a line I missed in between your first comment about the oddness and my first reply 13:37
(My bad
13:40 bluescreen10 joined 13:44 benabik left 13:59 grondilu left 14:01 skids joined 14:02 stevan_ joined 14:04 ajr joined, ajr is now known as Guest31368, Guest31368 is now known as ajr_ 14:08 dmol left, logie joined 14:10 Guest18828 left 14:15 btyler joined, broquain1 is now known as broquaint 14:21 cognominal joined
dalek rlito: 92acb9d | (Flavio S. Glock)++ | / (3 files):
Perlito5 - perl6 - operators
14:26
14:33 Guest18828 joined 14:34 Guest18828 left, denis_boyun joined 14:42 PacoAir left, denis_boyun left 14:43 colomon left, donaldh joined
dalek rlito: 1d2c1c6 | (Flavio S. Glock)++ | / (4 files):
Perlito5 - perl6 - special vars
14:44
14:46 sqirrel joined 14:47 xinming left 14:48 xinming joined 14:50 colomon joined 14:55 dayangkun joined 14:56 benabik joined 15:01 xenoterracide_ joined
japhb__ r: say "foo".subst(/(o)/, "a"); for "foo" -> $l { say $l.subst(/(o)/, {"a" ~ $0}) } 15:04
camelia rakudo d7e5e1: OUTPUT«fao␤faoo␤»
japhb__ r: say "foo".subst(/o/, "a"); for "foo" -> $l { say $l.subst(/(o)/, {"a" ~ $0}) }
camelia rakudo d7e5e1: OUTPUT«fao␤use of uninitialized value of type Any in string context in block at /tmp/PbRK0SUjoF:1␤␤fao␤»
japhb__ Yeah. There's a bug for ya.
diakopter r: $11111111111111111111111111111111111 15:05
camelia rakudo d7e5e1: OUTPUT«Cannot use negative index -9223372036854775808 on Nil␤current instr.: 'throw' pc 402455 (src/gen/CORE.setting.pir:169079) (src/gen/CORE.setting:10512)␤called from Sub 'sink' pc 438520 (src/gen/CORE.setting.pir:182308) (src/gen/CORE.setting:11902)␤called f…»
diakopter that's still my fav
japhb__ hates "spooky action at a distance" bugs even more than localized bugs
diakopter: although yep, that one is a crazy one. 15:06
TimToady well, it's getting closer to Halloween...
15:06 benabik left
diakopter TimToady: note that now that camelia is using a 64-bit parrot, the number is negativer 15:06
JimmyZ nqp-m: $11111111111111111111111111111111111 15:07
camelia nqp-moarvm: OUTPUT«Confused at line 2, near "$111111111"␤panic»
japhb__ I'm not even sure how the bug I posted *could* be happening
diakopter it's thinking it's redeclaring $1, but not
timotimo will Parrot_str_to_cstring stop after a nullbyte is encountered? will a STR register's ->strlen stop at the first nullbyte? is there a length that will not do so? 15:08
diakopter oh, that's $l
japhb__: it's confusing $1 and $l, like I did
15:08 dayangkun left
JimmyZ n: $11111111111111111111111111111111111 15:08
camelia niecza v24-98-g473bd20: OUTPUT«Unhandled exception: weird object in sub_finish Int␤ at /home/p6eval/niecza/src/NieczaBackendDotnet.pm6 line 242 (StaticSub.finish @ 11) ␤ at /home/p6eval/niecza/src/NieczaActions.pm6 line 4257 (NieczaActions.comp_unit @ 15) ␤ at /home/p6eval/…»
japhb__ Yeah, sorry about that confusion, diakopter. The result of golfing the bug. 15:09
15:10 jnap joined, dayangkun joined
japhb__ But in any case, why would whether or not the left subst has a capture in its regex have any effect on the subst on the right? 15:10
diakopter blames the optimizer
15:10 jnap left 15:11 denis_boyun joined
masak .oO( spooky pumpkin at a distance ) 15:12
japhb__ wonders how the hell to work around the bug in his current code
diakopter probbaly putting it in an eval() would work. :) 15:14
japhb__ >.<
TimToady use -> $/ { "a" ~ $0 } 15:15
japhb__ r: say "foo".subst(/o/, "a"); for "foo" -> $l { say $l.subst(/(o)/, -> $/ {"a" ~ $0}) }
camelia rakudo d7e5e1: OUTPUT«fao␤faoo␤»
japhb__ ooh.
diakopter mwahaha
TimToady .subst doesn't set $/ for the RGH like s/// does
japhb__ But, um, WTF
TimToady it's just a normal method 15:16
japhb__ Ah!
15:16 cognominal left, cognominal joined
japhb__
.oO( The problem with magic is you get used to it. )
15:16
colomon seems to recall a lot of debate about whether .subst should set $/ 15:17
colomon is very happy if it doesn't.
diakopter TimToady: are macro-methods spec'd? 15:21
TimToady but it will be a FAQ if we leave it as is
timotimo oh crap, now my nqp segfaults :o
TimToady we already have some, like .VAR 15:22
diakopter r: macro method marco { }
camelia rakudo d7e5e1: OUTPUT«===SORRY!=== Error while compiling /tmp/mWeqoXVZWw␤Missing block␤at /tmp/mWeqoXVZWw:1␤------> macro method ⏏marco { }␤ expecting any of:␤ statement list␤ prefix or term␤ prefix or meta…»
TimToady .subst(...) could be parsed as a postcircumfix 15:23
yoleaux TimToady: Sorry: that command is a web-service, but it didn't respond in plain text.
timotimo haha, what
TimToady yoleaux: you're out of your gourd
15:23 [Sno] left
TimToady r: say $_.VAR.WHAT 15:24
camelia rakudo d7e5e1: OUTPUT«(Scalar)␤»
15:24 xenoterracide_ left
diakopter r: class Foo { macro marco { method boo { } }; method foo { marco() } }; Foo.foo() 15:25
camelia rakudo d7e5e1: OUTPUT«===SORRY!===␤too few positional arguments: 2 passed, 3 (or more) expected␤»
TimToady well, I guess .VAR can simply be a postfix, so it's not terribly macroey
timotimo just adding a new function into nqp.ops shouldn't cause a segfault somewhere later in compilation, no?
diakopter yeah if there's a missing Makefile dependency
timotimo but i'm not using the op anywhere, and i make clean'd 15:26
diakopter or you didn't do it right
timotimo stashed the changes and rebuilds nqp to make sure master does compile no-problemo
diakopter but make clean might not be very cleanly
timotimo weird, that helped.
gist.github.com/timo/b69047cf2b97b7819f16 - anything very obviously wrong about this? 15:27
masak is still flummoxed/amused by the first comment on gist.github.com/masak/5768668
pmichaud anyone know how long it takes email replies to github issues to show up on github? 15:29
timotimo shouldn't take longer than a few minutes, eh?
pmichaud I sent a reply 30 mins ago and it's still not there. :-/
timotimo huh.
pmichaud I think I'll just post directly to github then... hopefully it won't end up there twice.
TimToady masak: obviously you should've used .fmt intentionally to thwart such abuse :) 15:30
arnsholt Better twice than no times =)
pmichaud comment added. 15:31
masak TimToady: I like sprintf on the statement level... :) it's a bit more up-front. 15:33
diakopter masak: I don't know about that code.. :) the answer is plainly 2 hours.
masak diakopter: :P
TimToady: I found, to my surprise, that I really liked Python 3's formatting syntax. 15:34
TimToady: the main reason being that you can "change your mind" mid-string and just start adding directives, and then "...".format() at the end. 15:35
timotimo i can get no info whatsoever out of this core dump :(
diakopter timotimo: I'm sure the problem is in the to_cstring calls 15:36
TimToady masak: that's writer-centric, not reader-centric
diakopter timotimo: wait.
timotimo: why do you think going to cstrings is how to do it?
TimToady most readers want to know what you're formatting; the actual format is kinda beside the point 15:37
timotimo i looked at another function right next to it and that used that, so ...
if you can tell me how to do it better, i will do it better instead :)
diakopter well it's just the point is to do it without allocations
timotimo well, i can do it on java and moarvm without extra allocations, i don't know how to do it on parrot 15:38
diakopter show th ejava one?
timotimo will do
gist.github.com/timo/b69047cf2b97b...tfile2-txt
masak TimToady: granted, but the {} things stand out pretty well too. 15:39
diakopter ok
timotimo i don't know what interface the parrot string offers, so ...
masak TimToady: I have long since concluded that no formatting language will ever make everyone happy, but py3k's is pretty non-bad. and it feels more modern than the old C one.
diakopter commutestrationesquelism&
timotimo where should i look to find out?
15:40 benabik joined
TimToady on reordering things from the reader's perspective, I wish Rxx reversed the thunkiness 15:40
timotimo that would be amazing, but also pretty WAT, imo.
TimToady r: say 10 Rxx rand
camelia rakudo d7e5e1: OUTPUT«0.258589441280009 0.258589441280009 0.258589441280009 0.258589441280009 0.258589441280009 0.258589441280009 0.258589441280009 0.258589441280009 0.258589441280009 0.258589441280009␤»
TimToady WAT
timotimo wait. which way do you mean that? 15:41
15:41 donaldh left
TimToady I mean I want 10 different rands 15:41
arnsholt masak: Based on that comment, I assume you frown upon things like %#5.4g? =)
timotimo oh, that way
15:41 sqirrel left 15:42 jnap joined
masak arnsholt: I... I don't find it as black-and-white as "frown upon". hm. I think dedicated DSLs definitely have their place. and it's hard to get more bang for the buck than '%#5.4g'. 15:42
TimToady wonders if we can get away with simply saying "this set of operators is thunky, so thunk all the arguments and let the operator sort it out"
masak arnsholt: just... I feel we might no longer live in the world that spawned that syntax.
TimToady so something like [||] would just thunk all the args
masak TimToady: I thought the spec had wording saying something like "metaops de-magic some magic ops" 15:43
TimToady that's just a "we haven't figured out how to de-WAT this yet"
masak ok 15:44
TimToady but maybe we're making it too hard
pmichaud the spec's wording is to give implementor's cover so that users don't expect the WAT behavior :)
s/'s/s/
TimToady if xx thunks both sides, and the xx op knows to eval its right side automatically first, it would just work out
otoh, maybe it makes constant folding harder 15:45
it's all very well to special case the ops we know are thunky, but it'd be nice if it generalized to user-defineds
arguably xx is an infix macro 15:46
and metaops of macros might make sense to keep macroey
arnsholt masak: Yeah, you're probably right on this not being those same times. I've just learnt to do so many neat tricks like that 15:47
masak arnsholt: sprintf syntax is the Makefile of formatting languages :P
TimToady it's back to that notion of mixed-arg macros I was talking about the day--not every arg to a macro has to be an AST
in the case of infix:<xx>, a thunk and a mundane would do it
masak arnsholt: i.e. ugly/non-optimal, but Not Going Away Anytime Soon.
arnsholt Incidentally, I have also learnt to do fun things with make =) 15:48
masak TimToady: we're running up a huge stack of (recurring) wishlist items for macros and macro-like things.
TimToady: I suggest we set aside half a day or so sometime to go through them and write them down.
TimToady I just said this is pretty much the same wish I had the other day :) 15:49
masak not anything as heavyweight as a *meeting*, mind. just an increased focus :)
I'm very happy to have it here on #perl6, and act as a secretary.
anyone who's interested is invited. 15:50
PerlJam hands masak a magnifying glass
masak the goal isn't to propose solutions, just to enumerate the desires.
TimToady For near-sighted people, a magnifying glass decreases focus. :P
PerlJam are macros a blocker for 6.0.0 ?
pmichaud macros have been one of those places where a lot of hand-wavy magic gets shuttled 15:51
GlitchMr PerlJam, macros already are implemented in Rakudo Perl.
pmichaud "...we don't know how to do this hard thing...it probably belongs in macros somewhere." :-) :-)
GlitchMr But yes, they are needed. 15:52
TimToady PerlJam: let me make this argument: when 6.0.0 comes out, we're gonna have a lot of people saying "Ooh, macros!", and twisting them into brain pretzels--it would be nice if they didn't have the Wrong Semantics at that point.
japhb__ Is there any way to get an exit code from a read pipe?
TimToady or from the other direction, if things like Rxx have the wrong semantics, it's gonna be terribly difficult to retrofit the correct semantics 15:53
PerlJam GlitchMr: "implemented" is a strong word :) 15:54
GlitchMr Sort of
TimToady and I would like to carp a little bit about characterizing these as new-fangled ideas; I've been talking about infix macros for roughly a decade now
dalek rlito: b55f1ec | (Flavio S. Glock)++ | / (2 files):
Perlito5 - perl6 - $# => .end
TimToady from the standpoint of normal macros, the only difference with an infix macro is that it can't retroactively change the parsing of the AST on the left 15:55
15:57 sqirrel joined
TimToady (ignoring the operational difference that the parse has to recognized that it has reduced a macro and do something about that immediately) 15:57
benabik Macros can affect the parse of their arguments? I thought they received ASTs as arguments, which means their arguments are already parsed. 15:58
TimToady but if infix:<xx> is really a macro, I see no reason in principle that infix:<Rxx> is not also a macro
benabik: with the NYI 'is parsed'
benabik Using R with an infix macros means it can no longer affect the parse on the right. Compile time error if is has an is parsed on the rhs, I guess? 15:59
TimToady well, thunky macros like xx don't change the parse 16:00
so yeah, R shouldn't work on a fancier macro
benabik Heh. I had parsed xx as a placeholder not as a concrete example. D'oh.
TimToady I dunno, maybe we want a term for thunky operators that is weaker than "macro" 16:01
thunky ops just need to control time of evaluation, not AST restructuring 16:02
PerlJam that sounds vaguely phaserish 16:03
timotimo if i want to add another op to the nqp.ops, do i have to do something to another file, too?
TimToady I don't think it has to be so inside-out as phasers
timotimo i put in an op and i'm not even using it anywhere, yet it crashes
TimToady it's just three types of arguments to an immediately called subroutine
benabik Scala does that via "pass-by-name" parameters. def lazyFunc(x : => Int) only evaluates x if it gets used.
TimToady AST arg, thunk arg, normal pre-evaluated value 16:04
benabik Although here I guess we want something that gets re-evaluated on each usage?
TimToady but as I said the other day, if everything comes in as AST, you can emulate the others with methods to compile and eval an AST
16:05 denis_boyun left
TimToady BEGIN reduces to a macro that evaluates its AST immediately for a value 16:05
benabik And can write a macro to simplify writing the other macros...
16:07 denisboyun joined, FROGGS left
masak <TimToady> I dunno, maybe we want a term for thunky operators that is weaker than "macro" 16:09
+1
timotimo "thub" 16:10
and "methub"
"methud"?
TimToady inthunk, postthunk... 16:11
16:12 jnap1 joined, jnap left
PerlJam that wouldn't work better as a trait? infix:<xx>($a,$b) is thunky { ... } 16:13
masak "thop"?
PerlJam Or is that just too late in the parse
masak but it'd be nice if the term worked for functions, too.
TimToady the salient feature is that the parameters are not needing all the power of ASTs
moritz thunky sub foo($x) { }
masak moritz++ # nice! 16:14
moritz (and needs to be declared befure usage
)
TimToady and that the parameters can differ in that regard
masak and we could have thunky macros.
I'm sorry, I must &
please don't say interesting things for an hour or so :P
TimToady so attaching traits to the entire thing is hanging them on the wrong peg
masak &
PerlJam ok
benabik more `sub infix:<xx>($a is thunky, $b)`?
TimToady one could also view it on the laziness spectrum 16:16
TimToady goes back to backlogging so as not to violate masak++'s dictum
timotimo what are the consequences of the "parsing nqp.ops" stage? 16:18
TimToady (but I'm guessing this should be type-based, not trait-based)
16:18 grondilu joined 16:20 fhelmberger left
timotimo oh damnit 16:21
i think the segfault was because i was writing "invar INT" and "invar STR" rather than "in INT" and "in STR"
great >_<
i think i made this mistake at least once before 16:22
TimToady
.oO(an invariant mistake)
timotimo oh, i was wrong 16:23
it still segfaults even though it doesn't actually use my code at all
TimToady \o/ oh wait
timotimo parrot confuses me and my ignorance makes me mad at it. 16:25
16:30 FROGGS joined 16:36 [Sno] joined
timotimo bah! 16:36
even if the op contains nothing but $1 = 0
it *still* causes trouble somewhere else
FROGGS: you know a little bit about parrot, right? 16:39
what's wrong with this: op nqp_string_equal_at(out INT, in STR, in STR, in INT) { $1 = 0; }
benabik timotimo: looks okay to me... 16:41
timotimo maybe the name collides and somebody already implemented that op? that might cause trouble
FROGGS don't you have INTVAL at some point rather than INT?
or is this in C ?
timotimo this is nqp.ops
benabik Name collisions should cause compile or linker errors. 16:42
timotimo didn't
FROGGS no name collision
timotimo it seems to cause nqp::exists to fail
too few positional arguments: 0 passed, 1 (or more) expected 16:43
which makes no bloody sense at all 16:44
diakopter twitter.com/sheeshee/status/387513133134139393 16:46
timotimo well, chromatic doesn't disappoint 16:47
16:47 kaleem joined, dmol joined 16:48 sqirrel left
diakopter timotimo: I thought chromatic's comment was plenty fair 16:49
timotimo it is fair, yes. 16:50
the eqat implementation on the jvm works
and parrot just blows up completely when i try the simplest little bit of implementation of it 16:51
16:52 fhelmberger joined
[Coke] chromatic++ 17:00
17:02 PacoAir joined 17:03 dakkar left
PerlJam TimToady++ :-) 17:04
17:06 havenwood joined
[Coke] today's very slow rakudo.jvm will try without the eval server. 17:08
arnsholt [Coke]: Could you flesh out NQP #126 a bit? So that those of us who didn't attend RaNOW know what's going on =) 17:12
[Coke] saw that in backscroll. there were some magic constants.... I have to dig. 17:13
17:23 Rotwang joined 17:24 kaleem left
arnsholt 'k 17:24
Also, I'm guessing we can close #114? 17:25
17:25 denisboyun left
arnsholt And what's the state of #129? AFAICT, there seems to be some kind of eval server stuff going on, but not sure whether that's what #129 is about or not 17:26
17:26 ajr_ left
timotimo our evalserver seems to only be for perl6, no? 17:27
moritz I think there's one for nqp too
timotimo then we can point it out in the bug and close it :)
moritz but verify that first please :-) 17:28
[Coke] closed #114
moritz hm
p6eval@host07:~$ find rakudo-jvm/ -name '*eval*'
rakudo-jvm/bin/perl6-eval-server
rakudo-jvm/bin/eval-client.pl
[Coke] 129 has had no discussion or work.
moritz: that's -rakudo-, not -nqp-
moritz so if there is an nqp eval server, it's not being installed
arnsholt \o/ # Single page of NQP bugs
moritz [Coke]: that's what I was about to say
[Coke] ah, we're agreeing.
FROGGS arnsholt++
[Coke] arnsholt: great, now I can open all my "this opcode needs a test" tickets. ;) 17:29
arnsholt =ppppppppp
Although those sound like good, actionable tickets
[Coke] arnsholt: github.com/perl6/nqp/issues/103 sounds familiar. worth a test.
arnsholt Yeah, that one's on my hit-list 17:30
[Coke] arnsholt++
arnsholt Looks to be reasonably LHF
I'm not unhappy if people snipe the LHF though =)
FROGGS can you tag it LHF if it is not already? 17:31
arnsholt Good idea!
17:33 daxim left, FROGGS left
arnsholt #110 is similar to some stuff I'd been pondering before I started bug-wrangling as well 17:33
17:35 jeffreykegler joined
TimToady .tell LlamaRider an array with a declared type of Str only takes strings; you're probably expecting semantics more like the specced but not-yet-implemented Str() type, which would coerce to Str 17:35
yoleaux TimToady: I'll pass your message to LlamaRider.
timotimo i bet this optimization i'm about to implement will not change a thing at all :) 17:36
actually. i could just as well replace the few spots where nqp::substr($foo, $num, $num2) eq $otherstr appears with explicit nqp::eqat calls
instead of teaching the optimizer to do the transformation 17:37
opinions?
TimToady (optimizer + pessimizer)/2 === nominalizer :)
17:38 jnap1 left 17:40 xenoterracide_ joined
[Coke] how does one check to see if something is a dir in nqp? we have "fileisreadable", etc., but no "fileisdir". is stat the only way 17:43
?
TimToady this is #perl6, you should ask on #nqp :P
[Coke] sadly, there's no one there. 17:44
TimToady well, you could get back to yourself later when you know the answer... :)
since there was at least one person there... 17:45
timotimo [Coke]: perl6 does it somehow using nqp, you should look there for the answer 17:46
TimToady 's absurdity generator is today never the whatever against a frog beautifully sofa ungood 17:47
timotimo hm. updating the bootstrap files in two branches will probably prove problematic ...
17:47 havenwood left
[Coke] stat is doable. just wondering if we need to cleanup nqp ops at some point. 17:47
diakopter mm sofa frog 17:48
[Coke] Oy, here's a fun error: use // Comment in nqp. :P 17:50
diakopter std: // urp 17:51
camelia std a0bcfb1: OUTPUT«===SORRY!===␤Null regex not allowed at /tmp/lTUx60qD5s line 1:␤------> //⏏ urp␤Two terms in a row at /tmp/lTUx60qD5s line 1:␤------> // ⏏urp␤ expecting any of:␤ feed_separator␤ infix or …»
[Coke] esp. nice since it's highlighted by whatever syntax parser as a comment. :)
diakopter std: {}␤// urp
camelia std a0bcfb1: OUTPUT«===SORRY!===␤Null regex not allowed at /tmp/C0UM1c1NCx line 2:␤------> //⏏ urp␤Two terms in a row at /tmp/C0UM1c1NCx line 2:␤------> // ⏏urp␤ expecting any of:␤ feed_separator␤ infix or …»
diakopter std: say {}␤// urp 17:52
camelia std a0bcfb1: OUTPUT«===SORRY!===␤Null regex not allowed at /tmp/JsNJiz9CV0 line 2:␤------> //⏏ urp␤Two terms in a row at /tmp/JsNJiz9CV0 line 2:␤------> // ⏏urp␤ expecting any of:␤ feed_separator␤ infix or …»
diakopter o_O
I expected that to work
[Coke] nqp: my $a := nqp::stat("/etc/motd",2); // Use a constant here. 17:53
camelia nqp: OUTPUT«Null regex not allowed at line 2, near "/ Use a co"␤current instr.: 'panic' pc 14748 (src/stage2/gen/NQPHLL.pir:5229) (src/stage2/gen/NQPHLL.nqp:279)␤»
[Coke] weird. not the error I'm getting locally. :)
diakopter r: say {}␤// urp
camelia rakudo d7e5e1: OUTPUT«===SORRY!=== Error while compiling /tmp/oguZx8esiQ␤Null regex not allowed␤at /tmp/oguZx8esiQ:2␤------> //⏏ urp␤»
diakopter o_O
TimToady why? line-ending } terminates as statement
17:53 ajr joined
TimToady *a 17:53
diakopter n: say {}␤// urp
camelia niecza v24-98-g473bd20: OUTPUT«===SORRY!===␤␤Null regex not allowed at /tmp/74CjDeoSu5 line 2:␤------> //⏏ urp␤␤Action method quote:sym<//> not yet implemented at /tmp/74CjDeoSu5 line 2:␤------> //⏏ urp␤␤Two…»
diakopter really!!?!
that's, um, news
TimToady no it isn't
diakopter I thought it was just for block declarations
17:53 ajr is now known as Guest45348
TimToady that is a block 17:54
17:54 Guest45348 is now known as ajr_
diakopter top-level block declarations, I mean 17:54
TimToady no, it's never been like that
the whole point is to allow user-defined constructs to parse the same way
diakopter p5eval: {}␤// urp
p5eval diakopter: ERROR: Unrecognized character \xE2; marked by <-- HERE after {}<-- HERE near column 3 at (eval 7) line 1.
diakopter oh yeah :)
TimToady *always been that way in p6 17:55
diakopter oh yeah, p5eval doesn't translate newlines
timotimo i'm using eqat in three places in QRegex/Cursor.nqp, so hopefully we gain a tiny shred of parsing performance by sometimes not having to do a substring allocation for some parsings
diakopter mebbe
timotimo 4 places actually
17:58 rindolf left 18:02 denisboyun joined 18:04 LlamaRider joined, bluescreen10 left
LlamaRider moritz++ thanks for explaining the bug-as-feature situation with pushing Match objects in Str arrays. I'm still wondering if there shouldn't be some automagic type-casting that invokes the .Str method of an object if it is being pushed in a Str array. 18:05
yoleaux 17:35Z <TimToady> LlamaRider: an array with a declared type of Str only takes strings; you're probably expecting semantics more like the specced but not-yet-implemented Str() type, which would coerce to Str
LlamaRider oh, there you go. I probably do. 18:06
18:07 fhelmberger left 18:08 darutoko left
[Coke] gist.github.com/coke/6888956 - documented ops that do not appear in the test suite 18:11
(nqp)
LlamaRider .tell TimToady I guess the interesting question is which operations should do type-coercion by default (if any). In my example, @string_array.push($0) really feels like coercing to Str would be the DWIM behaviour.
yoleaux LlamaRider: I'll pass your message to TimToady.
[Coke] ^^ in case anyone is bored. :)
(very simplistic test which I will check in later) 18:12
18:14 SamuraiJack left
LlamaRider interesting soup of ops there :) 18:15
diakopter [Coke]: which test suite? 18:18
18:19 rurban joined
PerlJam Higgs finally got a Nobel prize www.nobelprize.org/nobel_prizes/phy...ates/2013/ 18:20
pmichaud well, if Higgs hadn't been hiding out for so long, it might've occurred sooner. :-) 18:22
rurban I'm working on github.com/perl6/nqp/pull/76 new-packfile-api. Can someone familiar with latest nqp rebase new-packfile-api? I'll merge parrot also then
pmichaud I mean, how long did the search take?
rurban new parrot/new-packfile-api with old nqp/new-packfile-api passes all tests
There are several nqp conflicts which I feel not being able to merge 18:23
18:26 not_gerd joined
not_gerd o/ 18:26
diakopter o/ 18:27
rurban hi not_gerd: I just finished your parrot/new-packfile-api and am now waiting on an updated nqp/new-packfile-api rebase. Could you do that or should we wait for Pm?
pmichaud I already said I would re-do the nqp version of the patch. 18:28
rurban super
pmichaud (so no, please don't merge the existing patch)
also, we need to coordinate any nqp patch with a parrot release 18:29
rurban I'll wait a bit then. The nqp rebase looked too tricky to me. There are also unrelated g++ strictness issues
pmichaud right.
I just needed an up-to-date parrot branch to work from. 18:30
not_gerd I remember the bootstrapping being somewhat tricky
I did not really understand what I was doing at the time
pmichaud the bootstrapping can indeed be tricky.
not_gerd trial&error until it worked ;)
I think I finally succeeded by bootstrapping the bootstrap via whiteknight's bootrstrap files 18:31
or something along these lines
pmichaud it's one of those things that requires getting all the way to a working Rakudo before we can fully commit 18:32
diakopter ah, so that's how the backdoor-injector sneaked in...
pmichaud was there a September (5.8.0) release? 18:34
timotimo what's the benefits of the new packfile api?
not_gerd it was the first step on whiteknight's internals refactor 18:35
pmichaud timotimo: main benefit will be that we can compile hll source directly to .pbc without having to generate a separate .pir file
not_gerd basically, less magic
pmichaud (we still go through PIR internally, but don't have to save it to a separate file and then recompile that with Parrot to get a .pbc)
not_gerd eg you can just annotate subs with arbitrary tags and let a higher layer decide what it wants to do with that information
I removed the ->pir->pbc as an indentive to get whiteknight'S work merged ;) 18:36
timotimo that sounds nice 18:37
18:39 benabik left, sqirrel joined
not_gerd personally, I always wodered why there weren't more complaints about the extremely unfriendly module build process 18:39
I guess everyone was happily using panda
pmichaud We can create a nqp branch that works with the parrot/new-packfile-api branch, but I don't want nqp to merge that to master until after there's a parrot release with its branch merged.
18:40 nyuszika7h left
pmichaud not_gerd: I suspect it's a bizarre case where people that knew enough to complain didn't want the responsibility of having to do something about it :) 18:40
18:40 nyuszika7h joined
timotimo my eqat implementation seems to actually be slower than taking a substr and eq-ing it 18:42
TimToady does substr know that strings are immutable and avoid copying? 18:43
yoleaux 18:11Z <LlamaRider> TimToady: I guess the interesting question is which operations should do type-coercion by default (if any). In my example, @string_array.push($0) really feels like coercing to Str would be the DWIM behaviour.
TimToady LlamaRider: not if you're expecting it to intuit that only from its name
people seem to want to put numbers into their arrays occasionally too... 18:44
so really only an explicit declaration can produce those results 18:45
timotimo i think he means a my Str @string_array
pmichaud TimToady: in Parrot the substr op knows that it can avoid copying, yes.
Util pmichaud: There was *not* a September release. (My fault) There is an October release scheduled on the 15th. 18:46
dalek albot/host07: 5126e0a | moritz++ | evalbot.pl:
use evalserver for rakudo-jvm
pmichaud timotimo: your eqat implementation is for Parrot or JVM or ... ?
18:46 camelia left
timotimo for parrot 18:46
the jvm version uses regionMatches method of String objects
and moarvm has its own implementation, which is the prior art for this 18:47
pmichaud good for the jvm version
dalek albot/host07: 7529097 | moritz++ | evalbot.pl:
fix string terminator
timotimo where do i have to look for the eq implementation atop parrot?
moritz r: say 1
18:47 camelia joined
moritz r: say 1 18:47
Util pmichaud: If it follows the patten of last year, then it will be a Supported release.
pmichaud I'd need to look at the parrot implementation a bit. I worked on a version of eqat once before for Parrot but had to abort due to time constraints
Util: okay, good.
18:47 ChanServ sets mode: +v camelia
camelia rakudo d7e5e1: OUTPUT«1␤» 18:48
moritz do we still care to pretend that some releases are more supported than others?
timotimo pmichaud: my current version of eqat has two STRING_ITER's running at the same time and i'm just comparing the advance_and_get return values against each other
and i'm short-circuiting on failure
moritz rakudo-jvm: say 42
camelia rakudo-jvm: OUTPUT«Can't exec "/home/p6eval/jvm-rakudo/eval-client.pl": Permission denied at lib/EvalbotExecuter.pm line 183.␤exec (/home/p6eval/jvm-rakudo/eval-client.pl /home/p6eval_eval/p6eval-token run -e /tmp/IBJYwuEISQ) failed: Permission denied␤»
18:48 jnap joined 18:49 camelia left
dalek albot/host07: bea1487 | moritz++ | evalbot.pl:
need perl 5 to run the eval-client
18:49
pmichaud I'll try to have an nqp branch with the new packfile api changes in the next couple of days, so that parrot can make a decision about merging its packfile api branch to master
moritz nqp: say(42)
18:49 camelia joined
pmichaud timotimo: I think the STRING_ITERs might be a little on the slow side. Also it's important to know what string encoding lies underneath. 18:49
18:49 ChanServ sets mode: +v camelia
moritz nqp: say(42) 18:50
camelia nqp: OUTPUT«42␤»
moritz rakudo-jvm: say 42
camelia rakudo-jvm: OUTPUT«Error while reading '/home/p6eval_eval/p6eval-token': Permission denied at /home/p6eval/jvm-rakudo/eval-client.pl line 10.␤»
moritz rakudo-jvm: say 42 18:51
camelia rakudo-jvm: OUTPUT«===SORRY!=== Error while compiling -e␤Two terms in a row␤at -e:1␤------> /tmp/⏏MG_ENJRCWj␤ expecting any of:␤ postfix␤ infix stopper␤ infix or meta-infix␤ statement end␤ …»
18:52 camelia left
dalek albot/host07: 2e7952d | moritz++ | evalbot.pl:
do not mix -e and file name
18:52
moritz rakudo-jvm: say 42
rakudo-jvm: say 42 18:53
18:53 camelia joined, jeffreykegler left, ChanServ sets mode: +v camelia
moritz nqp: say(42) 18:53
camelia nqp: OUTPUT«42␤»
moritz rakudo-jvm: say 42
camelia rakudo-jvm: OUTPUT«Could not open /tmp/IMTMMZn4mW. java.nio.file.AccessDeniedException: /tmp/IMTMMZn4mW␤»
pmichaud timotimo: Parrot's version of testing for string equality is src/string/encoding/shared.c:149
timotimo thank you 18:54
i was trying to find that, but failing
pmichaud it only falls back to STRING_ITER if the two encodings are different.
which means that for most comparisons, it just does a memcmp
timotimo the memcmp is probably much faster, yeah
18:55 camelia left
dalek albot/host07: 17cda89 | moritz++ | lib/EvalbotExecuter.pm:
make temp files world-reable

they just contain code that codes through IRC anyway
18:55
pmichaud is your version checked in somewhere that I can look at it?
I might see something quick and obvious
18:56 camelia joined
pmichaud (if not, no biggie) 18:56
moritz rakudo-jvm: say 42
timotimo i can push it into a nqp branch right now, hold on a sec
LlamaRider TimToady, as timotimo suggested I meant a predeclared "my Str @string_array"; Then the .push($0) could figure out to coerce to $0.Str
18:56 ChanServ sets mode: +v camelia
camelia rakudo-jvm: OUTPUT«Could not open /tmp/ZvCrQ8TnYT. java.nio.file.AccessDeniedException: /tmp/ZvCrQ8TnYT␤» 18:56
pmichaud unless things have changed, my Str @array specifies a constraint, not a coercion
moritz BUT I CHMOD'ed IT!
pmichaud thus @array.push(42) should throw an exception. 18:57
dalek p/eqat_op: aa949a8 | (Timo Paulssen)++ | src/vm/ (4 files):
add nqp::eqat to jvm and parrot.
p/eqat_op: d0a8aad | (Timo Paulssen)++ | src/vm/parrot/stage0/ (9 files):
update bootstrap files
p/eqat_op: 9bbc310 | (Timo Paulssen)++ | src/ (5 files):
use the new nqp::eqat op in a couple of places
lue hello world o/
pmichaud oh, ouch ouch ouch 18:58
- if nqp::substr($spec, $pos, 1) eq '!' { 18:59
that's much faster using ord, I suspect.
(as would any single-char comparison)
oh, but that's not on a hotpath. never mind.
timotimo won't eqat give at least a bit of speedup there, though?
pmichaud only if it's on a hotpath. 19:00
timotimo it should be able to skip a bit of initialisation of string boxes
pmichaud also, I would prefer any form of eqat to be able to handle case insensitivity
LlamaRider pmichaud that's exactly what I meant by "the tricky part is to figure out when coercions are DWIM and when they're a problem". Never doing implicit coercion is certainly a nice purist position. But coercing a Match to a Str seems generally a DWIM behaviour.
timotimo how does an implementation of eqat that can do that look like?
pmichaud basically, I think that eqat ought to expose the same sorts of features that regionMatches does in java 19:01
moritz LlamaRider: that's what coercion types (NYI) are for
LlamaRider: or more to the point, when you want coercion to Str, most likely what you actually want is a type constraint of Cool, not Str
timotimo i can make a second op that is insensitive to case, that's no problem
but how do i do it in one op without pessimizing every use of it?
pmichaud I'm fine if they're separate ops for now. 19:02
LlamaRider moritz: I have to learn what Cool is first, then I can grock what you've said :)
timotimo very well 19:03
pmichaud it's bugged me for a long time that Parrot doesn't offer a case-insensitive compare op
timotimo how do i properly get the offset turned into whatever i need to add to ->strstart?
i'll need some kind of skipping/scanning operation for that
pmichaud timotimo: I don't know that part off the top of my head. :-/
timotimo that's all right, i'll look at the source code or pester #parrot :) 19:04
pmichaud but that's where the eqat operation might want to go lower-level than a parrot op -- i.e., down to the string encoding level.
or, if you want to leave it at the level of a parrot op, then just optimize for known encoding types, such as ucs4
i.e., if the target strings are ucs4, then you can calculate the offset directly and call memcmp 19:05
timotimo there seems to be something called STRING_scan
it turns into a ->scan on the encoding 19:06
pmichaud there is a way to advance STRING_ITER, yes, and it (should be) already optimized for fixed with encodings
*fixed width
dalek albot/host07: 85fbf79 | moritz++ | lib/EvalbotExecuter.pm:
another chmod
19:07
timotimo that gives the number of codepoints in a string, that's not the right thing it seems
dalek albot/host07: c4fb432 | moritz++ | build.pl:
no need to sync on host07
19:08
19:08 camelia left
TimToady r: say fc("foo") eq fc("FOO") 19:08
dalek albot/host07: 7fb4b53 | moritz++ | lib/EvalbotExecuter.pm:
fix syntax error, moritz--
TimToady enobot 19:09
moritz TimToady: sorry, I'm breaking camelia right now :-)
19:09 camelia joined
TimToady r: say fc("foo") eq fc("FOO") 19:09
19:09 ChanServ sets mode: +v camelia
camelia rakudo d7e5e1: OUTPUT«===SORRY!=== Error while compiling /tmp/P1ygZwbHJH␤Undeclared routine:␤ fc used at line 1. Did you mean '&lc', '&uc', '&tc'?␤␤» 19:09
timotimo indeed, i can extract the bytepos of the iter and memcmp with that
moritz rakudo-jvm: say 42 19:10
TimToady that is the correct way to do caseless comparison, Unicodically speaking
camelia rakudo-jvm: OUTPUT«42␤»
dalek albot/host07: ed7a1ff | moritz++ | evalbot.pl:
rj as alias for rakudo-jvm
19:11
timotimo TimToady: all over the code i see comparisons that use lc and eq ...
TimToady fc is S32/StA:96r 19:12
bleh
fc is S32/Str:96
timotimo pmichaud: how do you feel about turning substr + eq/ne into eqat automatically using the optimizer? 19:13
(that could also do the ordat + a number comparison at optimize time for single-character strings)
pmichaud timotimo: I'm not too fond of that. 19:14
timotimo roger
pmichaud that feels like a little too much magic.
timotimo i've replaced all instances that don't have an lc forced around it for now anyway
so there'd only be wins from new code from here on out
pmichaud now then, eqat could do the ordat optimization whenever the length is constant 1
timotimo is that something the op would do or the optimizer?
pmichaud either, although having the op do it seems straightforward enough. 19:15
timotimo depends. that could very well cause a pessimization at run-time because it has to check all the time 19:17
at least now i got a compile run where the time was slightly less than in the unmodified version
19:18 havenwood joined
timotimo nqp: say(nqp::ordat("hello", 1)) 19:18
camelia nqp: OUTPUT«101␤»
pmichaud ...why would that be a runtime pessimization?
timotimo r: say chr(101);
camelia rakudo d7e5e1: OUTPUT«e␤»
pmichaud eqat can do the ordat optimization whenever the length is *constant 1* 19:19
at compile time
timotimo pmichaud: because a check if the string is length-1 could already have been done at compile-time
oh? i don't have to do anything for that?
pmichaud depends on how the nqp::eqat op is constructed.
timotimo ah, you mean the part where i add_pirop_mapping?
pmichaud right, it doesn't have to be a straight-to-pir-op. 19:20
although the check for length 1 could easily be done inside the Parrot op, too.
and that might be faster than anything else.
anyway, as long as the nqp::eqat API is sane, it's easy to move the optimizations around underneath.
dalek albot/host07: 59088e0 | moritz++ | build-scripts/rebuild-rakudo-jvm.sh:
rebuild script for rakudo jvm
timotimo ord already knows stuff about encodings and byte lengths and such, right? so i wouldn't have to muck about with encodings manually? 19:22
of course it does.
19:25 LlamaRider left
pmichaud 18:48 <moritz> do we still care to pretend that some releases are more supported than others? 19:26
Whether we pretend it or not, the Parrot website still discusses such things, and Debian packagers may still care about it -- which means we have to be aware of it. 19:27
We don't want to paint ourselves into a corner of having Rakudo releases for which a "supported Parrot" won't ever be available. 19:28
dalek p/eqat_op: 4cc669c | (Timo Paulssen)++ | src/vm/parrot/ops/nqp.ops:
special case same-encoding strings, length-1 needles.
19:33
timotimo pmichaud: could you look at the branch that starts with 0 && for the strlen == 1 thing? it caused a strange error to occur which tells me eqat was wrong somewhere and caused a bad decision to be made in a regex or something
i wasn't sure if STRING_ord takes a byte or character index 19:34
pmichaud character, almost certainly.
timotimo good, in that case i don't have to do the iterator trick, but it was wrong before i added that as well
oh, haha
i didn't set the offset local variable. 19:35
19:43 cognominal__ joined
dalek albot/host07: 4c128a7 | moritz++ | runtime/run-rakudo-jvm-evalserver:
tool for running the rakudo-jvm evalserver
19:43
moritz can somebody with a bit of p5 fu tell me why this script produces a syntax error?
Scalar found where operator expected at run-rakudo-jvm-evalserver line 26, near "wait $pid" (Do you need to predeclare wait?) 19:44
but isn't wait a builtin?
pmichaud I don't think the builtin wait takes an argument. 19:46
you might be looking for waitpid
moritz oh right
pmichaud++
19:46 cognominal left
dalek albot/host07: 4e0ce55 | moritz++ | runtime/run-rakudo-jvm-evalserver:
fix run-rakudo-jvm-evalserver, pmichaud++
19:47
timotimo pmichaud: from my current approach, i cannot get visible speed improvements in parsing the rakudo setting (which is my benchmark for this) 19:49
dalek albot/host07: 761e5b9 | moritz++ | runtime/run-rakudo-jvm-evalserver:
need to delete cookie first
moritz r-j: say 42 19:50
camelia rakudo-jvm: OUTPUT«42␤»
moritz \o/
pmichaud timotimo: when I did my early experiments with eqat, I also wasn't seeing significant improvements.
timotimo though, i could do the thing now that completely replaces the eqat code by an ordat
pmichaud I suspect they exist... we just haven't found the magic place for the speedup.
TimToady still thinks that should just be j anymore, with p for parrot and m for moar
timotimo heh :) 19:51
pmichaud: should i leave the replacements in? i can revert the commit so that later it could be dug out again :)
lue and N for NQP :) 19:52
pmichaud timotimo: whatever you and/or jnthn++ think is best
dalek albot/host07: fb918f7 | moritz++ | evalbot.pl:
report revision for rakudo-jvm
19:52 camelia left
timotimo at this point i'd just leave them in 19:52
19:53 camelia joined, ChanServ sets mode: +v camelia
moritz j: say 'lot its me!' 19:54
camelia rakudo-jvm d7e5e1: OUTPUT«lot its me!␤»
TimToady
.oO(LOTCATS THESE DAZE)
19:55
19:55 sqirrel left
moritz TimToady: they don't even both to shout anymore :-) 19:55
timotimo okay, going to test my ordat replacement trick now ... 20:00
oh, no return in the qastcomp 20:01
er, rather, Operations.nqp
er ...
moritz s/both/bother/
timotimo Error while compiling op eqat (source text: "nqp::eqat($name, '!', 0)"): Could not find sub RETURN - ...?! 20:02
what might i have messed up there?
source text: "return 0 if nqp::eqat($name, '!', 0)" - that may be more helpful 20:03
not using return in the operation helped compiling, huh 20:04
moritz enough camelia hacking for today, g'night everybody 20:05
TimToady o/
20:06 xinming left 20:07 slava left 20:08 xinming joined 20:09 lowpro30__ joined 20:12 lowpro30_ left
diakopter pmichaud: right, the benefit of the eqat on moar is it knows the internals 20:18
er, forgot I was backlogging
pmichaud diakopter: yes, we should be able to do something similar for Parrot, but haven't found the magic place for it yet. 20:19
timotimo huh, what 20:20
i have a debug say($op.dump) in the beginning of the add_core_op code block for eqat, that is not getting executed
oh! 20:21
that gets executed *after* stage ast, of course
diakopter er
no, it gets executed in BEGIN of nqp... so it's already run when you launch nqp 20:22
dalek p/eqat_op: ec7c8fc | (Timo Paulssen)++ | src/vm/parrot/ops/nqp.ops:
STRING_ord takes chars, not bytes. local var thinko.
p/eqat_op: d60ae78 | (Timo Paulssen)++ | src/vm/parrot/QAST/Operations.nqp:
replace some eqat with ordat at compiletime.
20:23 Timbus left, Timbus joined 20:24 berekuk left, berekuk joined
dalek p/eqat_op: 2c6e75b | (Timo Paulssen)++ | src/vm/jvm/runtime/org/perl6/nqp/runtime/Ops.java:
fix comment.
20:25
timotimo i'll run a spectest to see if anything b0rked 20:26
20:31 lowpro30 joined 20:33 lowpro30 left, Rotwang left 20:35 lowpro30__ left 20:36 lizmat joined 20:39 kaare_ left
timotimo some tests are failing, but i'll go to bed in order to get a fresh look at all this tomorrow 20:40
i'm guessing "Cannot get character past end of string" comes from the guts of parrot? 20:43
not_gerd bye, #perl6 20:45
20:45 not_gerd left
timotimo probably just have to check for ranges and bail out if necessary 20:45
nqp: nqp::ordat("hi", 100) 20:46
camelia nqp: OUTPUT«Cannot get character past end of string␤current instr.: '' pc 40 ((file unknown):36113271) (/tmp/9pLSwLi6sM:2)␤»
timotimo oh, that needs a range check now, too ...
nqp: nqp::substr("hi", 100, 1)
camelia nqp: OUTPUT«Cannot take substr outside string␤current instr.: '' pc 40 ((file unknown):55417111) (/tmp/3LEbFrm_g0:0)␤»
timotimo nqp: nqp::substr("hi", 1, 100)
camelia ( no output )
timotimo hm.
not as bad as i feared
anyway. off to bed i go :)
20:49 ssutch left 20:52 PacoAir left 20:59 donaldh joined 21:04 btyler left 21:06 bbkr_ left, sivoais left, skids left, sivoais joined 21:07 rom1504 joined 21:10 lowpro30 joined 21:12 FROGGS joined
FROGGS o/ 21:13
mental not: drinking beer with uk-ppl is challenging 21:14
note*
21:15 lowpro30_ joined 21:16 btyler joined 21:19 LlamaRider joined, lowpro30 left
lizmat FROGGS: fwiw, I have the same with a lot of German beer drinking :-) 21:27
donaldh hmm, yes, culturally predisposed to volume drinking. 21:29
21:29 stevan_ left
lizmat zum Wohl! 21:36
masak: re irclog.perlgeek.de/perl6/2013-10-08#i_7686276, :delete on an array should *not* be like splice, because that would be changing the "keys" on the array 21:41
if you delete a key from a hash, the implementation might decide to keep the entry in place and just mark it as deleted 21:43
I see doing :delete on an array as the same
also: "normal" users of arrays, would never use :delete on an array, unless they would know what they're doing 21:44
the question to me is, *if* iterating over an array with deleted elements would skip those, should .elems not be reflecting that as well? 21:45
in other words: .elems would be the number of undeleted elements
.end would still show the last element index
and perhaps we should have a "is sparse" trait on arrays to allow :delete to work 21:46
donaldh is failing to grok the priorInvocation replacement in MoarVM. Or rather, failing to map it across to JVM. 21:47
rurban The challenge with uk/us-ppl and beer is to avoid ale and stout. We germans are used to lager and pils
pmichaud lizmat: the analogous case would be something like my @a; @a[3] = 'abc'; say @a.elems 21:48
I'd expect that to be 4, not 1.
(so no, don't skip over empty elems)
lizmat r: my @a; @a[3]=1; say @a[1,2,3]:exists 21:49
camelia rakudo d7e5e1: OUTPUT«False False True␤»
diakopter donaldh: point me to the relevant diff(s) and I'll explain
lizmat r: my @a; @a[3]=1; say @a[^3]:exists
camelia rakudo d7e5e1: OUTPUT«False False False␤»
pmichaud r: my @a; @a[3] = 1; say @a[^4]:exists
camelia rakudo d7e5e1: OUTPUT«False False False True␤»
lizmat pmichaud: hence maybe the "is sparse" trait ? 21:50
pmichaud I think S09 already addresses something like this.
but I could be wrong about that.
donaldh diakopter: tbh, I've run out of time before a week's vacation so will need to leave it 'til I return. 21:51
21:51 sqirrel joined
donaldh diakopter: unless someone else gets there first :-) 21:51
21:53 ajr_ left 21:56 lowpro30_ left
lizmat pmichaud: S09:589 "The C<.keys> method also returns the keys of all existing elements." 21:58
synopsebot Link: perlcabal.org/syn/S09.html#line_589
lizmat but that seems to apply to arrays with predefined element lists
but I wonder why those should be different from "normal" arrays, really
on the other other hand, I guess it's not too much problem to say "@a[]:v" instead of @a when iterating 22:01
r: my @a; @a[3]=42; .say for @a[]:v 22:02
camelia rakudo d7e5e1: OUTPUT« 42␤»
lizmat r: my @a; @a[3]=42; .say for @a
camelia rakudo d7e5e1: OUTPUT«(Any)␤(Any)␤(Any)␤42␤»
lizmat r: my @a; @a[3]=42; .WHAT..say for @a # whoa! 22:05
camelia rakudo d7e5e1: OUTPUT«(timeout)␤␤␤␤use of uninitialized value of type Any in string context in block at /tmp/5yqRh05VK4:1␤␤»
lizmat not sure this warrants a rakudobug
grondilu can not parse .WHAT..say for @a
lizmat it was a typo 22:06
but the result parsed apparently in a way that hangs
22:06 BenGoldberg joined
grondilu std: .WHAT..say for my @ 22:06
camelia std a0bcfb1: OUTPUT«===SORRY!===␤Unsupported use of bare 'say'; in Perl 6 please use .say if you meant $_, or use an explicit invocant or argument at /tmp/1IcZTrCCr2 line 1:␤------> .WHAT..say⏏ for my @␤Check failed␤FAILED 00:01 124m␤»
lizmat 100% CPU usage and slow memory growth
grondilu std: .WHAT..say(Mu) for my @ 22:07
camelia std a0bcfb1: OUTPUT«ok 00:01 124m␤»
grondilu std: .WHAT .. say(Mu) for my @
camelia std a0bcfb1: OUTPUT«ok 00:01 124m␤»
grondilu std: .WHAT .. say(Mu)
camelia std a0bcfb1: OUTPUT«ok 00:01 123m␤»
grondilu yeah, why not.
lizmat the bar is closing, later& 22:09
22:09 lizmat left 22:12 denisboyun left 22:17 LlamaRider left 22:27 BenGoldberg left 22:35 BenGoldberg joined
jnthn evening, #perl5 22:37
yoleaux 22:27Z <diakopter> jnthn: I saw this, which led me to notice that TCC is almost done switching its license from lgpl to mit-style...! easy assembler! blogs.perl.org/users/david_mertens/...-perl.html
jnthn uh
#perl6
22:38 pecastro_ joined, jnap left 22:39 lizmat joined 22:41 pecastro left, woolfy joined 22:43 donaldh left 22:46 jnap joined 22:47 PZt left 22:54 LlamaRider joined 22:56 LlamaRider left 23:01 btyler left 23:02 sqirrel left
[Coke] waves. 23:08
23:11 grondilu left 23:16 grondilu joined
dalek p: 4c66315 | coke++ | t/docs/opcodes.t:
remove unneeded use.
23:18
p: 23768fd | coke++ | t/docs/tests.t:
Add test to see if opcodes are tested
23:18 sqirrel joined
[Coke] that new test is braindead, but an ok start. (many opcodes are untested) 23:23
23:23 colomon left
dalek p/eqat_op: 84eac7b | coke++ | docs/ops.markdown:
add docs for eqat opcode
23:24
[Coke] ^^ there is also an "eqat_internal" op. what's up with that?
23:25 woolfy left
jnthn has no idea... 23:26
TimToady it's internal, so you're not supposed to know about it
[Coke] it's just /called/ internal. :P 23:27
23:28 havenwood left, sqirrel left
[Coke] I suspect we might want to rename the internal one "parroteqat". 23:28
to go along with the jvm* ones.
TimToady The question is, who's to be encapsulated, that's all. --The Encapsulated One
</splat> 23:29
[Coke] jnthn: when testing to see if an opcode is tested, I'm checking to see if "nqp::<op>" appears in t/ - would adding a check for ":op('<op>')" be a good second approximation? 23:30
23:31 airdisa joined
jnthn [Coke]: If we rely on it as part of the bootstrap then it's at least tested that way 23:31
23:32 BenGoldberg left
[Coke] sure, that's fine for this level of testing. 23:32
can you point me at a set of dirs to poke at for the bootstrap file? src/NQP? 23:33
jnthn src/NQP, src/how, src/core, src/HLL, src/QRegex 23:34
23:35 colomon joined 23:37 slavik left 23:38 BenGoldberg joined
[Coke] jnthn++ #forgot to do it in the commit. 23:41
dalek p: 3e2c825 | coke++ | t/docs/tests.t:
consider bootstrap and QAST as testing.

  jnthn++
[Coke] (managed to sneak it in .)
jnthn :) 23:42
23:44 BenGoldberg left 23:46 slavik joined
[Coke] blogs.perl.org/users/blindluke/2013...ences.html - waiting for the followup perl6 post 23:47
jnthn: are the boot* opcodes intended to be x-platform? 23:53
or jvm specific?
jnthn [Coke]: No, Moar has them also 23:54
[Coke]: Parrot doesn't however. 23:55
[Coke] ponders how to document that. 23:56
diakopter [Coke]: actually 23:57
jnthn [Coke]: "Should be provided by any non-Parrot backend" :P
diakopter you can test if all the nqp ops are used in the --dump output of the *.moarvm in nqp
[Coke] diakopter: that doesn't help running the tests on a parrot nqp. 23:58
23:58 dayangkun left
[Coke] (nor that that's not in master yet. ;) 23:58
I do like the idea of checking based on the executables, though. 23:59
23:59 BenGoldberg joined