»ö« Welcome to Perl 6! | perl6.org/ | evalbot usage: 'perl6: say 3;' or rakudo:, niecza:, std:, or /msg p6eval perl6: ... | irclog: irc.perl6.org/ | UTF-8 is our friend!
Set by sorear on 4 February 2011.
00:00 smash left 00:10 ranguard left 00:15 benabik joined 00:23 replore joined
dalek ecza: 0f30c0b | (Solomon Foster)++ | t/spectest.data:
Turned on S16-filehandles/io_in_while_loops.t.
00:25
00:32 bacek_at_work left 00:33 aloha left 00:43 Woodi left, lestrrat left, Woodi joined 00:44 aloha joined, tokuhiro_ left, pnu left, lestrrat joined 00:45 japhb_ left, jferrero left 00:51 imarcusthis left, Vlavv_ left, Exodist left, Tene left, yath left, _ilbot left, lumi_ left, sjn left, tomaw left, cxreg left, miso2217 left, daemon left, BooK left, bloonix left, broquaint left, felipe left, mdxi_ left, Bucciarati left, yahooooo left, literal left, cognominal left, flussence left, buubot_backup left, risou_awy left, jevin left, tokuhirom3 left, Gothmog_ left, betterworld left, cosimo left, revdiablo left, krakan_ left, eiro left, arthur-_ left, soh_cah_toa left, huf left, pyrimidine left, tewk left, BinGOs left, ascent__ left, jfried left, ruz left, TimToady left, sbp left, nsh left
dalek ecza: c851cf8 | (Solomon Foster)++ | t/spectest.data:
Add open.t and filetest.t.
00:53
diakopter ooo filetest 00:55
00:55 cognominal joined, pnu_ joined, eiro joined, arthur-_ joined, soh_cah_toa joined, imarcusthis joined, flussence joined, tokuhirom3 joined, Vlavv_ joined, buubot_backup joined, risou_awy joined, Exodist joined, Tene joined, jevin joined, huf joined, pyrimidine joined, AAABKJS joined, _ilbot joined, yath joined, tewk joined, Gothmog_ joined, betterworld joined, cosimo joined, revdiablo joined, BinGOs joined, literal joined, yahooooo joined, Bucciarati joined, mdxi_ joined, broquaint joined, felipe joined, bloonix joined, BooK joined, daemon joined, miso2217 joined, cxreg joined, tomaw joined, sjn joined, krakan_ joined, ascent__ joined, nsh joined, sbp joined, TimToady joined, ruz joined, jfried joined
diakopter had a bit of a hand in that (though sorear had to redo it) 00:55
colomon diakopter++
diakopter heh sorear++
01:14 skangas joined 01:16 wolfman2000 joined 01:20 ranguard joined 01:23 skangas left 01:25 thou left 01:26 skangas joined 01:27 miso2217_ joined 01:29 miso2217 left 01:36 whiteknight left
dalek rixel: ba9ce21 | diakopter++ | src/ (6 files):
refactor variable storage/retrieval to use arrays instead of hashtables.
01:49
rixel: b9a09fd | diakopter++ | src/ (2 files):
eliminate unnecessary cast
01:54
diakopter nom: 1 while (my $a++) < 100; 01:56
p6eval nom 4e4390: OUTPUT«===SORRY!===␤Redeclaration of symbol $a at line 1, near "++) < 100;"␤»
diakopter ! 01:57
TimToady those parens are unneeded 01:59
the ++ already blew it out of the my declaration
diakopter nom: 1 while my $a++ < 100;
p6eval nom 4e4390: OUTPUT«===SORRY!===␤Redeclaration of symbol $a at line 1, near "++ < 100;"␤»
TimToady doesn't fix the bug, of course :) 02:00
diakopter niecza: 1 while my $a++ < 100;
p6eval niecza v10-58-gc851cf8: OUTPUT«Potential difficulties:␤ $a is declared but not used at /tmp/0cYfZvC7zz line 1:␤------> 1 while my ⏏$a++ < 100;␤␤»
TimToady Nil
(already tried it :)
should be (1,1,1,1,1,1...1) of course 02:01
diakopter niecza: 1 while my $a++ < 100; say $a
p6eval niecza v10-58-gc851cf8: OUTPUT«101␤»
diakopter er... shouldn't that be 100
TimToady niecza: say (1 while my $a++ < 100)
p6eval niecza v10-58-gc851cf8: OUTPUT«Potential difficulties:␤ $a is declared but not used at /tmp/fyOTpqVjPB line 1:␤------> say (1 while my ⏏$a++ < 100)␤␤Nil␤»
TimToady it's a postincrement 02:02
benabik diakopter: No, it increments after returning the value.
diakopter right, and the last time through it's 99
oh, no
OFFBYONE
02:06 uasi joined
diakopter tries to think of something non-snippy to reply to benabik 02:06
benabik sorry?
TimToady yes, "sorry?" would be non-snippy :) 02:07
diakopter sorry, I shouldn't feel affronted that someone thought I didn't know what a postincrement was. 02:08
benabik Just because you know what it is doesn't mean you're thinking about it right then. :-D 02:09
TimToady you'll note that I pointed out the same thing, and I'm sure you know what a postincrement is too :) 02:11
but I have many times mistaken a postincrement for a preincrement, so I'm sure other people can too
diakopter niecza: 1 while ++my $a < 100; say $a 02:12
benabik Generally when I make that mistake I'll go "of course it's a postincrement" but not realize _what that means_.
p6eval niecza v10-58-gc851cf8: OUTPUT«100␤»
diakopter std: 1 while ++my $a++ < 100; say $a 02:14
p6eval std 580b69a: OUTPUT«===SORRY!===␤"++" and "++" are not associative at /tmp/1xoZO_vo4O line 1:␤------> 1 while ++my $a++⏏ < 100; say $a␤"++" and "++" are not associative at /tmp/1xoZO_vo4O line 1:␤------> 1 while ++my $a++⏏ < 100; say $…
diakopter eh
02:14 ranguard left, ranguard joined
soh_cah_toa are rt tickets rendered as plain text only? i just opened a ticket that contained some code samples but the lack of indentation and brackets make it a little less readable 02:26
02:52 jferrero joined 02:56 agentzh joined 03:01 plobsing_ left 03:02 plobsing joined
diakopter agentzh: haven't seen you in a while; hi 03:05
agentzh diakopter: halo :) 03:09
diakopter: been busy with nginx related C & Lua hacking :P
03:16 xinming left 03:17 yuryss joined, yuryss left
sorear diakopter: I constantly forget the simplest things too 03:18
diakopter argh. I didn't forget about the post-increment. I confused myself with the while 03:19
03:34 envi_ joined
TimToady well, that's a simple thing too :P 03:46
sorear notes that /serialize is about 3x slower to compile large files than /master 03:52
TimToady maybe it's a simple thing :) 03:55
04:01 thou joined 04:10 sivoais left, sivoais joined 04:15 daniel-s joined, lateau__ left 04:18 satyavvd joined 04:41 shinobicl_ joined
dalek ecza/serialize: 7ae298f | sorear++ | / (5 files):
Make CC, LIHint serializable
04:47
moritz nqp: my %h := nqp::atpos(pir::getinterp, pir::const::IGLOBALS_CONFIG_HASH); say(%h<osname>); 04:50
p6eval nqp: OUTPUT«linux␤»
04:59 GlitchMr joined 05:01 shinobicl_ left, cognominal left 05:10 cognominal joined 05:12 orafu left, orafu joined 05:13 SHODAN joined 05:16 pyrimidine left 05:17 SHODAN left, pyrimidine joined 05:19 SHODAN joined
dalek ecza/serialize: 19ada5b | sorear++ | lib/ (2 files):
Implement variable-length coding for serialization
05:21
05:22 cyfi left 05:29 soh_cah_toa left 05:30 shinobicl_ joined
masak morning, #perl6 05:30
moritz good morning masak 05:36
sorear good morning masak y moritz. 05:37
masak sorear: "'najt" was no more than English pronunciation expressed in sane-ish spelling. sorry to lead you on a goose chase ;) 05:38
masak commutes 05:41
05:41 dual left
sorear "j" should not be confused with sanity, between French Jean, Spanish abajo, German ja, and English jar I count four entirely different phonemes 05:41
seems you used the German phoneme there. Does Swedish use the same one? 05:42
05:49 cyfi joined
SHODAN pretty much, yes (sort of like the y in yes) 05:50
06:01 kaleem joined 06:05 kaare_ joined 06:06 daniel-s left
mberends morning m* s* 06:10
06:10 wtw joined
sorear o/ mberends 06:10
mberends I plan to improve the functionality of niecza/examples/gtk-tetris.pl a little and then do a talk about its workings in London at conferences.yapceurope.org/lpw2011. It will be completely off-topic of the Industrial Strength Perl theme. 06:14
sorear hehee 06:17
06:20 mberends left
Woodi mberends: how you think - what should go to multi-GUI (abstract) base package ? something like DBI for GUIs. probably DBI wasn't limited by smallest common denominator... 06:21
06:27 mberends joined
dalek ecza/serialize: 054561b | sorear++ | lib/ (4 files):
Thaw code for all LAD, Variable, ViviHook subclasses
06:30
sorear Woodi: +1, but next time say it while mberends++ is actually in the room.
mberends: you may want to check teh clogs... 06:31
mberends is about 3.5 days behind on clogs
sorear /serialize can now thaw the true setting, but it fails while running the constant pi = ... INIT 06:32
06:34 koban joined
sorear "You can use any aspect of Perl such as Camelia, Rakudo, Raptor, etc." what. 06:35
06:37 sayu joined
mberends sorear: that is the attitude of mst trickling through 06:38
sorear mst is cluefuller than that
06:44 im2ee joined
mberends 20 minute talk proposal submitted :) 06:55
dalek ecza/serialize: 46c5be5 | sorear++ | lib/Kernel.cs:
Serialize exception-handling tables too (oops)
06:56
sorear \o/ mberends
mberends wow, the other talks are mainly 90 minutes or longer
moritz mberends: not completely off-topic. Perl 6 compilers approaching industrial strength... :-) 06:57
mberends :-) and -Ofun for sure
masak sorear: correct, German phoneme. and I didn't aim to imply any objective/global spelling -- it's just that most things are saner than English orthography. 07:01
sorear: where did you read that "any aspect of Perl" quote?
sorear masak: mberends's lpw link
masak guessed as much, followed it. 07:03
ah, I see it now.
dalek ecza/serialize: deaa100 | sorear++ | lib/Kernel.cs:
When we run the mainline code, GLOBAL is MAIN's GLOBAL at first
masak yes, mst is pushing the distinction Camelia/Raptor for 5/6.
sorear \o/ "Hello World" 07:04
masak: but Rakudo does not belong in that list.
masak the fact that Rakudo got thrown in there probably means there's a Telephone Game going on.
sorear Rakudo \in Camelia
masak nodnod
sorear or is that \subset
masak it's \in
oh wait, I see what you mean :)
it's really a category error, I think :P
Rakudo R Camelia, where 'R' is defined as "aims to implement" 07:05
sorear calling it a night. next week aims to get multiple-unit programs working, including the all-important special case of "-L CORE" 07:06
masak shall I email the organizers about the "aspects" phrasing? 07:07
sorear single-unit case now appears to be mostly-working
sorear -> sleep
masak sorear++ # steady progress with /serialize 07:09
07:10 GlitchMr left
masak I don't know who to contact about the "Rakudo, Camelia aspects" phrasing, so leaving it be for now. 07:13
it's worth remembering that the sentiment is friendly. they're saying people from our camp are welcome ;) 07:14
07:17 shinobicl_ left 07:21 im2ee left, am0c joined
tadzik dzień dobry 07:26
masak 'bry 07:27
07:30 thou left 07:32 koban left
masak moritz: re your "rearranging furniture" post to parrot-dev: whoa. 07:37
it was... honest.
specifically, "You're not fixing the deep issues with parrot (slow calling conventions, no JIT compiler, very limited NCI, ...), you're rearranging furniture." 07:38
07:40 Chat2454 joined 07:41 Chat2454 left 07:43 sayu left
masak let's hope the Parrot people decide to take that as constructive criticism... :) 07:43
cotto: ping
diakopter looks for said thread 07:46
masak groups.google.com/group/parrot-dev/...f893798fa5 07:48
diakopter has any rakudo person tried rakudo out on the green_threads branch of parrot/parrot at github? I'm curious whether it noticeably affects performance. 07:54
diakopter finds the "Parrot is a foundering project on top of a wonderful vision." thread from last month 07:56
07:56 mj41 joined
diakopter "We're going to be gutting PIR" 07:57
masak I was thinking of that one too.
07:58 risou_awy is now known as risou
diakopter hunh. 08:03
masak that thread, I mean. 08:06
diakopter yeah
moritz masak: I usually refrain from such frank answers, but ... not this time. The balance of that thread just felt so wrong.
diakopter I really wonder what "We're going to be gutting PIR" means 08:07
snarkyboojum "I don't want to hear the straw man" seems to be a popular phrase in both threads too :)
diakopter if I were a rakudo developer, "We're going to be gutting PIR" would make me shiver in my boots 08:08
masak moritz: it was refreshing to read. I sure woke up a bit and realized "hey, yeah, this isn't important!"
moritz why? We've been working on reducing the dependence on PIR
diakopter having recently read through lots of jnthn's code in 6model and MetaModel
moritz and that's mostly in C and nqp, no? 08:09
diakopter nqp that calls pir:: routines. would those interfaces stay the same?
snarkyboojum gutting PIR would affect Rakudo via NQP though right?
tadzik mostly 08:10
moritz diakopter: well, pir:: is just a way to access opcodes. If PIR goes away, we'll need to access the opcodes without going through PIR explicitly, but we can still use the pir:: form in our source code
diakopter: and just have the compiler translate them to something else
diakopter oh 08:11
moritz diakopter: yes, it's going to be a lot of work, but we rely much less on PIR than we used to
diakopter that makes me hypothetically shiver less
moritz and I'm quite sure we'll be able to convince the parrot folks to *first* provide alternatives, and wait with the gutting until we've had time to switch 08:12
masak otherwise we'd simply have to stay with an older Parrot. 08:13
to no-ones joy. 08:14
*no-one's
diakopter continues plowing through all the variants of 6model trying to make heads or tails. 08:20
masak moritz: maybe the effects of cotto++'s firebrand speech have worn off, and rearranging furniture starts to seem like a good thing to do again. 08:21
08:27 dakkar joined
diakopter oooo I'm starting to grok P6Opaque, barely 08:34
moritz diakopter: are you planning to steal bits of it for sprixel? 08:35
masak idly wonders if there are many Frank answers on the Sinatra mailing list
diakopter moritz: yep, I'd like to steal AMAP 08:36
of 6model, that is
moritz diakopter: you should really join up with mberends; he's working on a C runtime for Perl 6 too (though with slightly different goals, iiuc)
diakopter yes; his will depend on a C compiler at runtime 08:37
moritz it will?
diakopter yes; he told me today
moritz for eval()?
diakopter yesterday for you :)
for compiling all code; he's planning to emit C for everything
very similar to how his vill project did it 08:38
I'm taking the exact opposite tack; not wanting to optimize hardly anything from the get-go... going with an inefficient interpreter design on purpose. 08:39
moritz: mberends++ has been teaching me C the last month or so; you can consider this 4th or 5th reuse of the sprixel name my grand attempt to learn lots more C. 08:42
moritz diakopter: sounds nice
diakopter still though, I read jnthn's source to 6model in nqp, and I just get lost in all the parrot-specific stuff
so many defines and macros that I'm sure jnthn has memorized but I don't even know where to begin to look up 08:43
mberends I like the idea of having different irons in the fire 08:44
diakopter the overall gist of what's going on at a high level is documented in jnthn's code, but I'm having trouble picturing how I would implement the same thing in my interpreter design... which means I don't have a good understanding of the details of 6model. 08:45
08:46 pnu_ left
masak I like the idea of more people getting a good understanding of the details of 6model. 08:47
08:47 pnu joined
moritz wow, I never realized how much stuff is inside an s-table 08:48
and at least sixmodelobject.h is really well commented
08:50 wk joined
diakopter jnthn tells me an s-table is simply a pairing of a HOW and a REPR (but those obviously contains lots each) 08:51
moritz well, an s-table also hold the method cache, a method finder and various flags 08:53
diakopter oh yeah; :( forgot
in my eyes and out the other side after 1-2 days 08:54
mls_ morning perl6!
masak morn', mls_!
mberends btw, working on 6model/C gives me new hope for vill, except that indeed 6model/C needs a C compiler at runtime, whilst vill would use llvm for runtime code generation. 08:55
masak hihi -- github.com/jnthn/6model/commit/8f6...9c73daa26d 08:56
cognominal vill?
moritz masak: :-)
mberends cognominal: a stalled project to connect viv to llvm
cognominal I am dizzy with all these v6 related project 08:57
moritz too
but the important ones get mentioned often enough that you keep their names at least :-) 08:58
masak consider it a living example of Zips's law :)
argh, *Zipf's 08:59
en.wikipedia.org/wiki/Zipf%27s_law
09:02 packetknife joined 09:05 Mowah_ joined
flussence perl6: my $a = 5; my $text = "abcdefg"; say ($text ~~ /. ** {$a}/).perl 09:08
p6eval rakudo 4e4390: OUTPUT«Match.new(orig => "abcdefg", from => 0, to => 7, ast => Mu, list => ().list, hash => EnumMap.new())␤»
..niecza v10-58-gc851cf8: OUTPUT«#<match from(0) to(5) text(abcde) pos([].list) named({}.hash)>␤»
..pugs c943eeb: OUTPUT«Error eval perl5: "if (!$INC{'Pugs/Runtime/Match/HsBridge.pm'}) {␤ unshift @INC, '/home/p6eval/.cabal/share/Pugs-6.2.13.20111008/blib6/pugs/perl5/lib';␤ eval q[require 'Pugs/Runtime/Match/HsBridge.pm'] or die $@;␤}␤'Pugs::Runtime::Match::HsBridge'␤"␤*** '<HAND…
flussence oh, nombug. Thought I was going insane for a minute... 09:09
masak submits rakudobug
flussence b: my $a = 5; my $text = "abcdefg"; say ($text ~~ /. ** {$a}/).perl
moritz uhm
p6eval b 1b7dd1: OUTPUT«Match.new(␤ from => 0,␤ orig => "abcdefg",␤ to => 7,␤)␤»
moritz what's the bug exactly? 09:10
flussence or maybe it's a nieczabug and I *am* insane
masak moritz: that it matches 7 chars in nom and not 5.
moritz {$a} is just executed for its side effects
masak yes...?
moritz so it's just . ** ''
masak what? no.
the return value of {$a} is $a is 5. 09:11
that's what's used.
moritz but doesn't it need to return a range?
masak nope.
moritz ok, then it's a known bug
masak :)
but is it tikkited?
moritz (that rakudo doesn't implement the closure form of the range quantifier)
masak: I think so
masak dang!
someone already submitted all the good ones! :P 09:12
curse you, unknown bug predecessor!
moritz rt.perl.org/rt3/Ticket/Display.html?id=73172 09:13
moritz feels cursed
rakudo: * + * * *
p6eval rakudo 4e4390: ( no output )
moritz nom: my $c; my $name; BEGIN { $c = { say "OH HAI $name" } }; $name = "masak"; $c() 09:15
p6eval nom 4e4390: OUTPUT«Use of uninitialized value in string context␤OH HAI ␤»
masak nom: my $c; my $name; BEGIN { $c = { say $name.WHICH } }; say $name.WHICH; $c() 09:19
p6eval nom 4e4390: OUTPUT«6798962962383454502␤6798962962383454502␤»
masak hm, no, wasn't that easy. 09:20
nom: my $c; my $foo = 1; BEGIN { $c = { $foo = 42 } }; say $foo; $c(); say $foo
p6eval nom 4e4390: OUTPUT«1␤1␤»
masak but the $foo in the closure in the BEGIN block clearly points somewhere else than the $foo in the mainline. 09:21
moritz nom: my $c; my $foo = 1; BEGIN $c = { $foo = 42 }; say $foo; $c(); say $foo 09:22
p6eval nom 4e4390: OUTPUT«1␤42␤»
masak interesting post: neugierig.org/software/blog/2011/10...skell.html 09:27
moritz: I find I can't account for the difference in behaviour above. any ideas? 09:28
moritz masak: does "some weird bug" count? 09:29
masak oh, I just assumed there was some goodish reason. 09:32
ah well, it's bugtracked.
moritz wonders if he should re-read the infamous "when is a closure not a closure" section 09:34
masak it does mention BEGIN in some slightly unsettling way, doesn't it? 09:35
moritz I think so 09:36
masak I remember reading it thinking "well, that makes BEGIN and END rather useless, doesn't it?"
moritz nom: use Test; is BEGIN { 'foo' }, 'foo'
09:36 xinming joined
p6eval nom 4e4390: OUTPUT«===SORRY!===␤CHECK FAILED:␤Calling 'is' will never work with argument types (str) (line 1)␤ Expected any of:␤ :(Mu $got, Mu $expected, Any $desc)␤ :(Mu $got, Mu $expected)␤» 09:36
moritz nom: use Test; is (BEGIN 'foo' ), 'foo' 09:37
p6eval nom 4e4390: OUTPUT«===SORRY!===␤Method 'returns' not found for invocant of class 'Undef'␤»
masak huh. 09:38
nom: say (BEGIN { 'foo' }) eq 'foo'
p6eval nom 4e4390: OUTPUT«===SORRY!===␤Method 'returns' not found for invocant of class 'Undef'␤»
masak nom: say (BEGIN 'foo') eq 'foo'
p6eval nom 4e4390: OUTPUT«===SORRY!===␤Method 'returns' not found for invocant of class 'Undef'␤»
moritz nom: say (BEGIN 'foo') 09:39
p6eval nom 4e4390: OUTPUT«===SORRY!===␤Method 'returns' not found for invocant of class 'Undef'␤»
moritz nom: BEGIN 'foo'
masak nom: say (BEGIN)
p6eval nom 4e4390: ( no output )
nom 4e4390: OUTPUT«===SORRY!===␤CHECK FAILED:␤Undefined routine '&BEGIN' called (line 1)␤»
masak hasn't gotten used to CHECK FAILED in Rakudo yet ;)
moritz nom: our $x; BEGIN { $x = 3 } 09:41
p6eval nom 4e4390: OUTPUT«===SORRY!===␤Cannot assign to a non-container␤»
moritz writes a few tests
masak: oh, read that section again, the fourth paragraph sounds relevant to macros 09:47
you might notice that I've made it to the 4th paragraph without giving up :-)
masak \o/
masak makes an attempt, too 09:48
mls_ ("returns" is a PAST method)
(could also be POST, actually) 09:51
moritz Some closures produce Block objects at compile time that cannot be cloned, because they're not attached to any runtime code that can actually clone them. BEGIN, CHECK, INIT, and END blocks fall into this category. Therefore you can't reliably refer to run-time variables from these closures even if they appear to be in the scope.
moritz wonders if he should reject masak's bug report 09:52
masak dang.
I knew it says that. I just don't viscerally accept it. :/
so sometimes I "forget" it. 09:53
moritz still hasn't understood it at a gut level either 09:54
cognominal masak/moritz what document are you talking about?
masak S04, last section.
moritz cognominal: S04, last section
masak spooky :)
cognominal in cauda venenum 09:55
masak it's like, Perl 6 proudly proclaims that the boundary between compile time and run time has been erased. and then, in a place where it would matter most, suddenly one can't count on that fact any more... 09:56
moritz let's try to walk through this, and sees if it makes any sense
masak cognominal: "poison in the tail"?
cognominal fr.wiktionary.org/wiki/in_cauda_venenum 09:57
moritz normally if I do my $shared; my $c; do { $c = { $shared } }
the closure is "cloned" on entering the 'do {' block
and with "clone", we mean that a snapshot of the current outer lexical scope is attached to the Code object 09:58
so if we do s/do/BEGIN/, the outer scope's lexpad isn't available 09:59
just a static lexpad under construction 10:00
so, what happens then? no cloning? or does the "cloning" stop to clone, and attaches the static lexpad? 10:01
cognominal what is a static lexpad? 10:02
moritz the compiler needs to keep track of all the lexicals that are in scope (but not of their values) 10:03
it does that in the static lexpad
10:04 daniel-s joined
cognominal so that's the compiling time counterpart of a lexpad? 10:04
moritz yes
10:06 lateau__ joined
moritz masak: does that make any sense so far? 10:06
masak reads 10:07
mls_ (actually the static lexpad is used at runtime to initialize the lexpad) 10:08
10:08 uasi left
masak makes sense. 10:08
yes, static lexpads are a sort of early form of lexpads, mostly used during compilation. 10:09
moritz: your hypothesis so far matches the one I had, but doesn't explain the different results from BEGIN { $c = {...} } and BEGIN $c = {...} 10:10
or maybe it does, I'm not sure :)
moritz masak: well, having those extra { } results in triggering a clone operation that doesn't work 10:11
masak: though I don't understand why it works without it in the case without the extra {}
masak: and why whatever mechanism is used to make it work doesn't work in the block case
masak right. 10:12
that's the weird bug, I guess.
10:19 daxim joined
flussence just before I go updating nom on my netbook - did the fix for `now` get merged? 10:24
moritz no
10:24 kfo_ joined
moritz the algorithm sometimes converged on *really* wrong values, and I didn't have tuits/energy to fix it 10:25
and nothing happened on the other proposed fixes
flussence ah well, I'm only doing text-munging stuff at the moment anyway. I'll live without it :) 10:26
10:28 kfo left 10:30 skangas left, skangas joined 10:33 dakkar left 10:37 dakkar joined 10:42 benabik left 10:48 mj41 left 11:03 mj41 joined 11:07 tewk left 11:08 tewk joined 11:10 smash joined
smash hello everyone 11:12
11:12 smash left 11:14 smash joined
sjn on behalf of everyone, hello smash :) 11:14
smash sjn: thank you :)
11:18 replore left 11:20 Mowah_ left 11:25 am0c left 11:26 xinming left 11:27 xinming joined 11:32 Guest9002 joined
moritz nom: say Range ~~ Positional 11:32
p6eval nom 4e4390: OUTPUT«Bool::True␤»
masak nom: say Range ~~ List 11:34
p6eval nom 4e4390: OUTPUT«Bool::False␤»
masak nom: say Range ~~ KitchenSink
p6eval nom 4e4390: OUTPUT«===SORRY!===␤CHECK FAILED:␤Undefined routine '&KitchenSink' called (line 1)␤»
11:34 kaare_ left
masak std: say Range ~~ KitchenSink 11:34
p6eval std 580b69a: OUTPUT«ok 00:01 120m␤»
masak std: BathroomSink 11:35
p6eval std 580b69a: OUTPUT«===SORRY!===␤Undeclared name:␤ 'BathroomSink' used at line 1␤Check failed␤FAILED 00:01 118m␤»
moritz nom: sub a(@a) { say @a.WHAT }; a 1..5
p6eval nom 4e4390: OUTPUT«Range()␤»
moritz that is kinda funny, but not really wrong afaict
11:35 Guest9002 left 11:36 leprevost joined
masak we should probably take STD's cue and go with "Undeclared name" for identifiers starting with a capital. 11:36
11:38 Guest9002 joined, Guest9002 left 11:39 Patterner left 11:42 Psyche^ joined 11:43 Psyche^ is now known as Patterner
moritz nom: Foo 11:47
p6eval nom 4e4390: OUTPUT«===SORRY!===␤CHECK FAILED:␤Undefined routine '&Foo' called (line 1)␤»
mberends masak: you lost me there. Should identifiers starting with a capital be treated differently from identifiers starting with a lowercase letter?
masak mberends: only in error messages.
moritz mberends: only in error messages
moritz too slow 11:48
masak hey, stop that! :P
mberends mberends: only in error messages.
moritz mberends: you're not half as creepy as masak :-)
masak mberends: it's a heuristic to make the compiler appear less clueless.
oh, I'm the creepy one? :) 11:49
moritz already wrote two "in Perl 6 this is not a problem" answers on perlmonks today
masak that interpretation requires an interesting view on causality...
moritz and now you're going to bring that causality strawman... 11:50
masak moritz: I read a TimToady talk from 2005 where he says that the then Perl 6 adherents had gotten tired of writing "fixed in Perl 6" perlmonks replies ;)
moritz: *lol*
moritz masak: well, it's just too tempting to write such replies when you can provide running runing code :-) 11:51
masak moritz: extra points for giving that retort before I even mention causality ;)
moritz: running code FTW.
11:51 benabik joined
mberends "using no-longer-vaporware Perl 6, it's no-longer-problem." 11:53
masak only some relatively uninteresting parts of Perl 6 are vaporware. 11:54
moritz like, concurrency and IPC?
and NCI?
moritz wouldn't discount them as "relatively uninteresting"
mberends perl as army knife and duct tape needs all the interoperability it can get 11:56
moritz aye
which is why I did a Buf sprint some weeks ago
mberends that reminds me to try to reactivate the favicon code in my Perl 6 webserver 11:57
moritz mberends: if you encounter any missing Buf operations in nom, please let me know 11:58
mberends moritz: will do, thanks :)
masak moritz++ # Buf sprint 11:59
of course, I initially read that as "Buf sprintf"...
11:59 uasi joined
mberends moritz: will you be at home for a possible visit on Saturday evening? 11:59
moritz mberends: yes, but the house is full :/ (Signe's birthday) 12:00
mberends \o/
masak and by the way, I agree that IPC and NCI and concurrency and parallelism shouldn't be discounted. on the other hand, I'm glad that we're now at the point where we can start paying attention to such things.
getting events and concurrency and parallelism in place will be a big thing. 12:01
mberends will find something birthday-nommable to bring
masak mberends: it's your birthday?
perl6: say "three cheers for mberends:"; say "hooray!" xx 3 12:02
p6eval pugs c943eeb: OUTPUT«three cheers for mberends:␤hooray!hooray!hooray!␤»
..rakudo 4e4390, niecza v10-58-gc851cf8: OUTPUT«three cheers for mberends:␤hooray! hooray! hooray!␤»
moritz thinks that masak missed a part of the discussion
masak oh wait. I fail at backlogging :)
perl6: say "three cheers for Signe:"; say "hooray!" xx 3
p6eval pugs c943eeb: OUTPUT«three cheers for Signe:␤hooray!hooray!hooray!␤» 12:03
..rakudo 4e4390, niecza v10-58-gc851cf8: OUTPUT«three cheers for Signe:␤hooray! hooray! hooray!␤»
moritz :-)
mberends hooray for masak++'s hoorays :)
masak Pugs hoorays a bit more tersely than the other implementations...
moritz well, it predates several hundred spec changes :-) 12:04
(though only about one relevant for this case) 12:05
12:06 odoacre left, donri joined 12:08 Maddingue left
masak I hope to be able to fix such things soonish. 12:08
what was the conclusion of the Great Pugs Build Hubub, by the way? 12:09
is there now a set of unambiguous instructions for building Pugs on a modern normalish Debian install? 12:10
moritz on a modern normalish Debian installation, ghc 7.0.3 + haskell-platform should[tm] work
ingy also posted an url to a gist which contained instructions (including patches) to get the relevant cabal stuff running on ghc 7.2.1 12:11
mberends will try building Pugs again Real Soon™
moritz pugs: say 'now from git'
p6eval pugs c943eeb: OUTPUT«now from git␤»
donri people trying to revive pugs? 12:12
mberends whistles, apropos of nothing 12:13
masak whistles in tune with mberends
I'm not sure [Coke] is here to whistle, but I'm sure he would...
moritz whistels the tune of "scotland the brave" 12:14
donri revivePugs :: [Coke] -> Maybe whistle
moritz that's one of the most contagious ear catchers I know
masak phenny: de en "orenwurm"? 12:16
phenny masak: "orenwurm" (de to en, translate.google.com)
masak phenny: de en "ohrenwurm"?
phenny masak: "ear worm" (de to en, translate.google.com)
moritz "ohrwurm"
masak phenny: de en "ohrwurm"?
phenny masak: "earwig" (de to en, translate.google.com)
masak huh!
donri :D 12:17
moritz oh, dict.leo.org suggests "haunting melody"
moritz likes that one
masak I've come to think of it as "jukebox sabotage", at least when it's done by someone else. 12:19
12:19 mdxi_ is now known as mdxi
moritz curious, in school we learned that you can say both "ear catcher" and "eye catcher" in English 12:19
it seems I need to retroactively question more stuff I've been taught 12:20
masak indeed.
one of my favorite such stories is about a Japanese school where some Western didacticians went to observe. they spent a full hour in a class without figuring out what the subject was. at the end they had to ask the teacher, who looked flustered and said "English!" 12:21
moritz ouch. 12:22
masak yeah. kinda shows the echo chamber effect of language learning/teaching. 12:23
moritz iirc the teacher in question was married to a native English speaker 12:25
which makes it even odder
erm, "more odd" probably?
masak both are fine, but... 12:26
donri odditarian
masak ...suddenly I don't dare trust my instincts either! :P
moritz en.wikipedia.org/wiki/Odder
we've learned that for words with only one syllable, you can append the -er 12:27
benabik The Odder Otter. 12:28
donri the utterly odd otter
masak moritz: that sounds wronger. 12:29
moritz (... with the exception of some irregular adjectives, like good/better, bad/worse) 12:30
snarkyboojum true - for those you should append -era e.g. goodera 12:31
benabik More gooder ain't proper English?
moritz benabik: no, it's either "more good" or "gooder" :-)
snarkyboojum it's "more goodera" down here
mux more bestest
mdxi "odder" is fine, but has a bit of a colloquial feel. if you wanted to sound academic, i'd go with something like "makes it all the more surprising" :)
snarkyboojum heh, or "much more bestest"
mdxi english is just a ramshackle collection of grammatical fragments at this point, anyway :) 12:32
moritz www.englisch-hilfen.de/grammar/adje..._steig.htm # that's one example that says one syllable => append -er
masak mdxi: I'll have a go. "makes it not conform to conventional expectations" ;) 12:34
12:34 satyavvd left
snarkyboojum "much more goodera" is often followed by "but then I've never been larned proper" 12:34
without the punctuation
masak rakudo: sub without-punctuation($s) { $s.comb(/ \w | \s/).join }; say without-punctuation "but then I've never been larned proper" 12:37
p6eval rakudo 4e4390: OUTPUT«but then Ive never been larned proper␤»
flussence
.oO( Perl 5 emulates bits of English grammar, PHP emulates the size of its vocabulary... )
12:38 TimTitiesToady joined
TimTitiesToady ladies 12:38
donri in case it interests anyone, pugs fails to cabal install for me on fedora 16 with: * Missing (or bad) header file: perl5/p5embed.h 12:39
moritz donri: you need libperl-devel or perl-devel or whatever that package is called on your platform 12:40
and also the ncurses devel files
donri have it, but p5embed is bundled with hsperl5, a hackage
i'll try ncurses
moritz ncurses won't help you when it carps on perl5/p5embed.h
donri already installed too
masak donri++ # Pugs build explorations 12:42
donri ^_^
let's try a clean ~/.ghc ~/.cabal environment
12:43 replore joined 12:44 TimTitiesToady left
dalek ast: dff3691 | moritz++ | S04-phasers/begin.t:
test file for BEGIN phasers
12:45
donri nope hpaste.org/52793 12:48
oh wait it's this Embed.pm business isn't it 12:49
masak a nice read. moritz++
donri: what Embed.pm business
donri Can't locate ExtUtils/Embed.pm in @INC
moritz $ corelist ExtUtils::Embed 12:50
ExtUtils::Embed was first released with perl 5.00307
donri perl-ExtUtils-Embed.noarch : Utilities for embedding Perl in C/C++ applications
moritz if your perl installation misses core modules, I declare it broken.
if it's older than 5.3.something, I declare it broken too 12:51
donri that may well be the case, since fedora 16 is beta
but it might also be that they split up the perl install
moritz might be
donri 5.14.1
moritz maybe there's a perl-modules package or so that draws in all the core modules
if so, I'd recommend to install it
masak www.merriam-webster.com/dictionary/do-gooder is interesting, not because of the article about the word "do-gooder", but because it's followed by comments by 8 commenters about how "gooder" (standalone) is not a word, and how hearing it used as such in commercials annoys them. 12:52
12:52 packetknife left
masak I find word rage slightly fascinating as a phenomenon. 12:53
moritz well, I used to label new mainstream grammar patterns as "wrong" 12:54
donri $ pugs -V
This is Perl6 User's Golfing System, version 6.2.13.20111008, October 8, 2011 built for darwin-2level
\o/
moritz it took me quite some time to grok that language is a living thing, and if enough people speak it, it becomes "right" by definition, even if I don't like it
masak donri: \o/
donri sourcedir: /Users/audreyt/work/pugs # artifact? :P 12:55
masak moritz: then you've graduated from prescriptivist to descriptivist.
donri i mean i just compiled it myself, but there's all sorts of references to audrey's install
masak donri: that sounds ungood, yes. 12:56
donri maybe accidentally bundling a build config?
benabik Some languages have an official definition. French has the Académie française, for example.
moritz donri: quite possible
benabik There is no such institution for English, however.
(And I imagine many French-speakers ignore the Académie, but have no proof of that.) 12:57
moritz German has the Duden, which is then as a very authorotative dictionary and grammar collection
s/then/seen/
masak benabik: still, even for the French (who really try IIUC), it's a bit of a fiction to attempt to control language that way.
benabik masak: Very agreed.
moritz benabik: it seems to work surpringly well on the account of keeping anglicisms out of the language
masak most likely no-one "approved" the new words for "satellite" or "Internet" in any given language.
moritz: only because the French care in the first place ;) 12:58
it's a cultural thing.
benabik There are a couple English dictionaries (OED, M-W) widely viewed as authoritative. But the people who write them generally simply grab words that are commonly used and add them to the list.
Every year or so there's a pile of news articles about such-and-such word being added to English, when they really mean "these words have been used long enough that they're getting added to a Dictionary". 12:59
masak you mean the big headlines about "MILLIONTH WORD ADDED" are basically bogus? :P
donri what's some standard p6 lib that should be "use"-able?
moritz donri: Test 13:00
masak Test.pm?
dang! :)
moritz masak: stop doing that! :-)
masak yeah, you were first this time...
donri huh, that worked 13:02
moritz pugs: use Test; plan 1; ok 1, 'foo';
p6eval pugs c943eeb: OUTPUT«pugs: *** Unsafe function 'use' called under safe mode␤ at /tmp/JCz8WT7ZFG line 1, column 1␤»
donri well my @*INC is messed up so i wanted to "prove" that it's an issue
but then it isn't ... :D
masak wonders whether donating money at this point will cause another HPMoR episode to materialize... :/ 13:03
moritz donri: mkdir -p /Users/audreyt/work/pugs; touch /Users/audreyt/work/pugs/Test.pm; pugs -e 'use Test;'
masak: I know that sounds creepy, but I asked myself the same thing (though I wouldn't donate) 13:04
13:04 Holy_Cow joined
donri no it's actually all /usr/local but i have a non-root install 13:04
moritz probably just ENOTUITS on EY's part
13:05 Holy_Cow left
masak moritz: I've gotten vibes that he has trouble tying arcs together somehow. though maybe he's past that stage. 13:07
donri can't "use" anything in the pugs/perl6/lib directory anyway
13:12 GlitchMr joined 13:26 [Coke] left 13:27 pnu left 13:32 localhost left
dalek gs.hs: b927740 | au++ | Pugs/src/Pugs/Prim/Numeric.hs:
* Fixed (8 ** 8 ** 8) by courtesy of ingy++
13:33
gs.hs: 039bfa7 | (Ingy dot Net)++ | Pugs/src/Pugs/Prim/Numeric.hs:
Merge branch 'master' of github.com/audreyt/Pugs.hs
13:33 localhost joined
masak \o/ 13:34
moritz pugs: say 2 ** 3 ** 4 13:35
p6eval pugs c943eeb: OUTPUT«2417851639229258349412352␤»
moritz niecza: say 2 ** 3 ** 4
p6eval niecza v10-58-gc851cf8: OUTPUT«2417851639229258349412352␤»
ingy I should add instructions for getting 7.2.1 working 13:36
13:38 pnu joined
masak please do. 13:39
13:41 kaleem left
GlitchMr perl6: print pi * 7 - pi - pi - pi - pi - pi - pi - pi 13:49
p6eval pugs c943eeb, rakudo 4e4390: OUTPUT«0»
..niecza v10-58-gc851cf8: OUTPUT«2.66453525910038E-15»
moritz niezca: say pi.WHAT 13:51
niecza: say pi.WHAT
p6eval niecza v10-58-gc851cf8: OUTPUT«Num()␤»
13:52 SHODAN left
GlitchMr perl6: print 0.3333333333333333333333333333333333-0.333333333333333333333 13:53
p6eval niecza v10-58-gc851cf8: OUTPUT«5.55111512312578E-17»
..rakudo 4e4390: OUTPUT«===SORRY!===␤bigint_get_long: number too big␤»
..pugs c943eeb: OUTPUT«0.0000000000000000000003333333333333»
GlitchMr I love abusing floats! :)
number too big... what\
moritz no floats involved here 13:54
masak GlitchMr: you keep assuming that 0.33333 et as are floats in Perl 6. they're not. 13:55
benabik GlitchMr: You're abusing rats, good sir. :-D
masak et al*
benabik … Which just sounds wierd.
GlitchMr 5.55111512312578E-17
... there is no way it could be this... 13:56
benabik I guess niecza is actually using floats. :-/
moritz for pi, yes
but nto for 0.333... 13:57
*not
benabik Numbers like that usually mean "0 as far as the FPU can tell"
moritz you can easily find out
benabik niecza: say 0.3333333333333333333333333333333333.WHAT
p6eval niecza v10-58-gc851cf8: OUTPUT«Num()␤»
benabik Not Rat(). :-(
moritz loses
niezca: say 0.33333.WHAT
niecza: say 0.33333.WHAT 13:58
gree
p6eval niecza v10-58-gc851cf8: OUTPUT«Rat()␤»
moritz gree
I'm going to install an alias one day
GlitchMr ...
moritz it just implements overflow-to-Num as specced
read S02 for the gory details
benabik It's overflowing int and going to Num. Bleh, but acceptable.
colomon huh? 13:59
oh, because it's bigint over bigint
that's spec, actually
benabik niecza: say 0.333333.numerator.WHAT
13:59 pnu left
p6eval niecza v10-58-gc851cf8: OUTPUT«Int()␤» 13:59
colomon not just "acceptable", but what p6 is supposed to do
donri ah, the sdist includes src/Pugs/Config.hs which maybe it should not
moritz it's Rat[Int, uint64] or some such
dalek gs.hs: 3d86197 | (Ingy dot Net)++ | HACKING:
Add GHC 7.2.1 instructions to HACKING
14:00
moritz check S02
benabik niecza: say 0.333333.denominator.WHAT
p6eval niecza v10-58-gc851cf8: OUTPUT«Int()␤»
colomon moritz: but the denominator is much bigger than an uint64 in 0.3333333333333333333333333333333333
(errr... I think? how big can a uint64 get?)
moritz colomon: that's why it returns a Num 14:01
colomon: and not a Rat
benabik nom: say 2**64-1
p6eval nom 4e4390: OUTPUT«9223372036854775807␤»
flussence perl6: say 2**63
p6eval pugs c943eeb, niecza v10-58-gc851cf8: OUTPUT«9223372036854775808␤»
..rakudo 4e4390: OUTPUT«-9223372036854775808␤»
donri github.com/audreyt/Pugs.hs/blob/ma.../Config.hs even in git
dalek gs.hs: c5840ed | (Ingy dot Net)++ | HACKING:
Note sources for the new instructions.
colomon right, so by spec, 0.3333333333333333333333333333333333 should be a Num 14:02
flussence rakudo: say 2**33
p6eval rakudo 4e4390: OUTPUT«8589934592␤»
flussence rakudo: say 2**63 # wtf?
masak nom: say 2 ** 64
p6eval rakudo 4e4390: OUTPUT«-9223372036854775808␤»
nom 4e4390: OUTPUT«-9223372036854775808␤»
GlitchMr -9223372036854775808
masak flussence: yeah, was just thinking the same.
GlitchMr ...
colomon :\
masak ENOBIGINT 14:03
colomon perl6: say 2**62
p6eval pugs c943eeb, rakudo 4e4390, niecza v10-58-gc851cf8: OUTPUT«4611686018427387904␤»
GlitchMr > 2**64
1.84467440737096e+19
...
colomon perl6: say 2**63
p6eval pugs c943eeb, niecza v10-58-gc851cf8: OUTPUT«9223372036854775808␤»
..rakudo 4e4390: OUTPUT«-9223372036854775808␤»
colomon perl6: say 2**64
p6eval pugs c943eeb, niecza v10-58-gc851cf8: OUTPUT«18446744073709551616␤»
..rakudo 4e4390: OUTPUT«-9223372036854775808␤»
colomon perl6: say 2**65
p6eval pugs c943eeb, niecza v10-58-gc851cf8: OUTPUT«36893488147419103232␤»
..rakudo 4e4390: OUTPUT«-9223372036854775808␤»
14:04 pnu joined
colomon I guess as long as it's broken, it can be broken that way. 14:04
masak that's the spirit!
ingy masak: instructions in HACKING. good luck. 14:05
GlitchMr perl6: print <2/6>+1
p6eval rakudo 4e4390: OUTPUT«1.33333333333333»
..niecza v10-58-gc851cf8: OUTPUT«␤Unhandled Exception: System.FormatException: Unknown char: /␤ at System.Double.Parse (System.String s, NumberStyles style, IFormatProvider provider) [0x00000] in <filename unknown>:0 ␤ at System.Double.Parse (System.String s, IFormatProvider provider) […
..pugs c943eeb: OUTPUT«3»
GlitchMr rakudo print (<2/6>+1).WHAT
rakudo: print (<2/6>+1).WHAT 14:06
masak ingy: thank you sir. will try tonight after $dayjob.
p6eval rakudo 4e4390: OUTPUT«Use of uninitialized value in string context␤»
GlitchMr oh right
donri ingy, should Pugs/Config.hs be there?
14:07 daniel-s left
GlitchMr perl6: print 'NY' if 1<3 14:09
p6eval niecza v10-58-gc851cf8: OUTPUT«␤Unhandled Exception: System.IndexOutOfRangeException: Array index is out of range.␤ at Lexer.Run (System.String from, Int32 pos) [0x00000] in <filename unknown>:0 ␤ at Lexer.RunDispatch (Niecza.Frame fromf, Niecza.P6any cursor) [0x00000] in <filename un…
..pugs b927740, rakudo 4e4390: OUTPUT«NY»
14:09 arnsholt joined
GlitchMr ... 14:10
ingy donri: I believe so
14:10 daniel-s joined
colomon so, I'm renewing my call for a postifx:<F> which makes interprets a numeric token as a FatRat. Otherwise there's no reasonable way to get 0.33333333333333333333333333333 exactly as a FatRat. 14:10
Guess I should do a blog post on it. :)
moritz FatRat.new(1, 3)
not very hard :-)
or (1/3) # doesn't need to be Fat
colomon not exact 14:11
benabik "0.3333333333333333333333333333333333".FatRat?
moritz colomon: point taken
colomon benabik: nope
ingy donri: well not sure, we just forked from au
donri ingy, but it's an autogenerated file specifically for audrey's system (as it were in 2010 even)
benabik colomon: Yeah, I didn't like it either.
ingy nod
GlitchMr More like FatRat.new(3333333333333333333333333333333333, 10000000000000000000000000000000000)
colomon it's not a matter of like, I'm pretty sure it won't work
ingy just looked
colomon Well, we could make it work
GlitchMr If it's done this way, it works... 14:12
At least on Niecza...
perl6: print FatRat.new(3333333333333333333333333333333333, 10000000000000000000000000000000000) - 0.33333333333333333333333
p6eval niecza v10-58-gc851cf8: OUTPUT«0»
..rakudo 4e4390: OUTPUT«===SORRY!===␤bigint_get_long: number too big␤»
..pugs b927740: OUTPUT«*** No such subroutine: "&FatRat"␤ at /tmp/AxTqM3YlNP line 1, column 7 - line 2, column 1␤»
colomon GlitchMr: right, but see "reasonable" in my prior statement
GlitchMr ... I see...
benabik Rakudo's bigints need to get bigger. 14:13
moritz well, I do think we should have a way to write high precision literals
14:13 SHODAN joined
moritz not sure if a postfix is the solution 14:13
ingy donri: I can look into adding it into the Makefile
or you can
colomon at a bare minimum, we should have a FatRat constructor which takes a string. (which is another way of looking at benabik's suggestion.)
ingy doesn't seem to be breaking things over here :\
colomon afk # gotta rake :(
moritz though TimToady++ will probably propose to not lose precision as the default, and create a FatRat from the start if the conversion to Rat would lose precision 14:14
... it can be detected at compile time, after all
GlitchMr perl6: print (1..26 Z 'a'..'z').perl
p6eval niecza v10-58-gc851cf8: OUTPUT«(1, "a", 2, "b", 3, "c", 4, "d", 5, "e", 6, "f", 7, "g", 8, "h", 9, "i", 10, "j", 11, "k", 12, "l", 13, "m", 14, "n", 15, "o", 16, "p", 17, "q", 18, "r", 19, "s", 20, "t", 21, "u", 22, "v", 23, "w", 24, "x", 25, "y", 26, "z").list»
..rakudo 4e4390: OUTPUT«((1, "a"), (2, "b"), (3, "c"), (4, "d"), (5, "e"), (6, "f"), (7, "g"), (8, "h"), (9, "i"), (10, "j"), (11, "k"), (12, "l"), (13, "m"), (14, "n"), (15, "o"), (16, "p"), (17, "q"), (18, "r"), (19, "s"), (20, "t"), (21, "u"), (22, "v"), (23, "w"), (24, "x"), (25, "y")…
..pugs b927740: OUTPUT«((1, "a"), (2, "b"), (3, "c"), (4, "d"), (5, "e"), (6, "f"), (7, "g"), (8, "h"), (9, "i"), (10, "j"), (11, "k"), (12, "l"), (13, "m"), (14, "n"), (15, "o"), (16, "p"), (17, "q"), (18, "r"), (19, "s"), (20, "t"), (21, "u"), (22, "v"), (23, "w"), (24, "x"), (25, "y"),…
donri ingy, well it builds but @*INC ends up focused on /usr/local where my install is nto
GlitchMr ... ok...
donri not
moritz GlitchMr: please chose examples that produce less output when experimenting with p6eval.
GlitchMr ok
sorry
perl6: print (1..4 Z 'a'..'d').perl 14:15
p6eval pugs b927740: OUTPUT«((1, "a"), (2, "b"), (3, "c"), (4, "d"))»
..rakudo 4e4390: OUTPUT«((1, "a"), (2, "b"), (3, "c"), (4e0, "d")).list»
..niecza v10-58-gc851cf8: OUTPUT«(1, "a", 2, "b", 3, "c", 4, "d").list»
GlitchMr 4e0?
I know it's 4, but why "e0". It's useless in this case.
benabik nom: 4e0.WHAT
p6eval nom 4e4390: ( no output )
moritz looks like a bug
benabik nom: 4e0.WHAT.say
p6eval nom 4e4390: OUTPUT«Num()␤»
benabik It's not useless, it changes the type.
Still a bug. 14:16
GlitchMr Makes sense...
I was wondering why rakudo and pugs produces different output...
And last position looked interesting...
benabik pugs will often be slightly different than everything else. 14:17
14:17 wtw left, wolfman2000 left
ingy donri: I can't loacte util/PugsConfig.pm 14:19
donri me either :(
the repo is supposedly an import from hackage, maybe it's in the original (svn?) repo 14:20
(and then why isn't it an import from that?)
or am i missing something
ingy donri: audrey sez it needs to be redone :) 14:30
14:31 arnsholt_ joined, arnsholt_ left
ingy in Configure.PL preferably 14:32
I wonder if we can find the old svn version...
moritz cd perl6/mu
git checkout 6f0203060f
cat util/PugsConfig.pm
benabik github.com/perl6/mu/blob/6f0203060...sConfig.pm 14:34
moritz benabik++ 14:35
(keeping information)++
ingy github.com/audreyt/pugs/blob/maste...sConfig.pm
14:40 risou is now known as risou_awy, SHODAN left
masak ooh, got HN'd! :) news.ycombinator.com/item?id=3124920 14:47
that's a great question -- how *would* we code do-in-reverse with Perl 6 macros? suggestions welcome. 14:49
(the point of the question being, of course, that Lisp has it easy modifying ASTs, since they're just more lists)
flussence $thing.ast.reverse? ;) 14:50
moritz well, that's where the need for an introspection and construction API for ASTs comes up
is there a practical application for do-in-reverse?
sorear good * #perl6 14:52
masak no, but the principle is important, I would say.
sorear: *
moritz the best I can come up with is 14:54
$ast.clone(statemnts => $ast.statements.reverse);
14:55 tty234 left 14:56 tty234 joined
moritz otoh if we pass a list to do-in-reverse, you can just do @asts.reverse.map(*.execute) or so 14:56
masak well, "pass a list to do-in-reverse", I'm not sure that's possible through the common macro mechanism. 14:57
moritz a list of statements in Perl 6 is really a block
masak hm, maybe if the macro takes a slurpy.
but no, you meant it at that level. so no. 14:58
moritz: as far as I can tell, the only things you can even macro over in the first place are things that can be operands and funcall arguments.
you can't macro over a bunch of statements.
moritz masak: you can macro over anything with 'is parsed' 14:59
masak that's why I won't go near 'is parsed' :P
moritz so can we get the AST of a block in a macro?
masak aye. 15:00
eiro a 15:02
oops
masak wouldn't mind reading a longish treatise on in-band vs out-of-band values in domain modeling 15:04
in-band: "no-one will ever use this value in actual practice!" (later: "d'oh!")
out-of-band: "this extra bit of abstractionality won't hurt..." (later: "d'oh!") 15:05
moritz see also: XML. "XML is great, because we can just stuff more data into attributes later on" (later: "d'oh!") 15:06
15:06 Maddingue joined
masak :D 15:10
moritz fwiw I've replied: news.ycombinator.com/item?id=3125489 15:11
masak I've never really seen the use of attributes in XML. they're like storing values directly in the markup, except that you don't get the choice of nesting. and suddenly you have to decide for every new thing whether to make it an attribute or a subelement.
moritz: nice reply. 15:12
and yes, it's already turned out not to be that simple.
mux there is one legitimate use of attributes: id="" 15:13
masak moritz: a Perl6::AST is an implementation-independent wrapper, containing the actual AST as an attribute.
moritz masak: well, attributes make a lot of sense if you view it as a markup language, not as a serialization or data storage format
masak that is true. 15:14
moritz and that's the ML in XML stand for
everything else is abuse
masak it's just that there's a lot of abuse.
donri pugs: quasi { say "O HAI" }
p6eval pugs b927740: ( no output )
donri pugs: say quasi { say "O HAI" }
p6eval pugs b927740: OUTPUT«<obj:Code::Exp>␤»
sorear pugs: say quasi { 5 } 15:20
p6eval pugs b927740: OUTPUT«<obj:Code::Exp>␤»
sorear masak: how much do you ant to allow the user to manipulate ast objects? 15:21
masak: is quasi { has $.x is rw } a possible thing in your model?
the first thing I wanted to use quasi for was methods, actually
moritz isn't that what roles are for? 15:22
15:23 im2ee joined
donri perl6: say quasi { 5 } 15:28
p6eval niecza v10-58-gc851cf8: OUTPUT«===SORRY!===␤␤Action method quasiquibble not yet implemented at /tmp/BLUhETKGiK line 1 (EOF):␤------> say quasi { 5 }⏏<EOL>␤␤Action method quote:quasi not yet implemented at /tmp/BLUhETKGiK line 1 (EOF):␤------> sa…
..pugs b927740: OUTPUT«<obj:Code::Exp>␤»
..rakudo 4e4390: OUTPUT«===SORRY!===␤CHECK FAILED:␤Undefined routine '&quasi' called (line 1)␤»
donri quasiquibble? :D
masak donri: STD.pm6 terminology. 15:29
expect it to be exactly as silly as the situation calls for :P 15:30
donri :)
masak sorear: I don't think that would do what you want it to, no.
sorear: because parsing the 'has' will probably go looking for a metaclass object *immediately* at parse time. 15:31
which is too early for what you want.
sorear: as to how much I want to allow the user to manipulate AST objects -- 100%. but I fear we'll run up against implementation-dependencies pretty fast. :/ 15:32
perl6: has $.x is rw 15:42
p6eval niecza v10-58-gc851cf8: OUTPUT«===SORRY!===␤␤Attribute x declared outside of any class at /tmp/aTjnVZW8th line 1 (EOF):␤------> has $.x is rw⏏<EOL>␤␤Potential difficulties:␤ 'has' declaration outside of class at /tmp/aTjnVZW8th line 1:␤------> …
..rakudo 4e4390: OUTPUT«===SORRY!===␤A cannot have attributes at line 1, near ""␤»
..pugs b927740: OUTPUT«pugs: *** Can't modify constant item: VUndef␤ at /tmp/TaLvVl4XWg line 1, column 1␤»
masak sorear: the rule is something like "if it fails standalone, it probably won't make it inside a quasi either". 15:43
15:45 risou_awy is now known as risou
moritz pugs: quasi { has $.x } 15:46
p6eval pugs b927740: OUTPUT«pugs: *** Can't modify constant item: VUndef␤ at /tmp/dR8OFxaRD9 line 1, column 1␤»
donri why does anything look for any sort of object at parse time? 15:47
that sounds so wrong i'm obviously missing something
masak donri: welcome to how Perl 6 parses things :)
TimToady because declarations always take effect as soon as possible
donri xD
masak donri: all the declaration-y bits in OO actually trigger method calls on various HOW objects in the background. 15:48
donri at parse time?
masak sure, why not?
you might do a BEGIN right after and use the class.
PerlJam donri: "as soon as possible" :)
donri or am i misinterpreting what "parse time" means
masak donri: when you reach the '}' of a class, it's "composed" with a ClassHOW.compose method call. that's when all the roles are flattened in, etc. 15:49
donri isn't "parse time" where you turn strings into "dumb" ASTs?
TimToady anything in the quasi that has to be generic needs a COMPILING:: style declaration to make it so
masak donri: not just ASTs. 15:50
TimToady that would include the current class
moritz rakudo: class A { has $.x = 4 }; BEGIN { say A.new.x }
p6eval rakudo 4e4390: OUTPUT«4␤»
TimToady which is automatically generic in a role, but not in a macro
masak donri: ASTs, action method calls, World method calls.
moritz BEGIN is run directly after it is parsed
donri but that's still post-parse-time?
masak no :)
BEGIN runs during parse time.
well, it takes a short break from parse time, I guess... :) 15:51
but then it gets right back to it.
donri weird :) but i'm sure for good reasons
TimToady anything that might change the current language *must* happen synchronously in Perl 6, or you've subtly introduced multiple pass parsing
PerlJam donri: during "parse-time" for the whole program, but "immediately after it's parsed" for things like BEGIN
TimToady and certainly introducing a new symbol into the symbol table changes the language 15:52
15:52 packetknife joined
masak donri: in the past year or two, I've had my view of "parse time" as being something pure and syntax-only thoroughly smashed by the Perl 6 view of things. 15:53
donri hehe
masak donri: it's not only very sensible, it's probably necessary.
moritz it is necessary when you want a language to be as mallable as Perl 6 is 15:54
PerlJam masak: But "parse time" has never been that in Perl. Why would you start from that position?
donri but at least you seem to understand my confusion and i'm not just being completely stupid :)
masak PerlJam: because it works in so many other places?
TimToady PerlJam: eh? Perl 5's BEGIN is also immediate
use is immediate
and that's how you change the language in Perl 5
GlitchMr __halt_compiler() in PHP is also processed in parse time... 15:55
PerlJam TimToady: certainly not "pure and syntax-only"
TimToady P6 is just taking that to its logical conclusion
masak GlitchMr: :D
GlitchMr: way to go with "different things should look different"...
*two* underscores!
then it must not be a regular function call... ;) 15:56
PerlJam masak: it's *ultra* private :)
TimToady which is why 'my $x = $x' means very different things in Perl 5 and 6
GlitchMr php.net/manual/en/function.halt-compiler.php
Yeah...
masak the PHP compiler is so wild you have to have a special keyword with two underscores to get it to halt... 15:57
GlitchMr Exactly.
moritz BEGIN exit;
TimToady immediate introduction of symbols is why you can refer to previous formal parameters in signatures 15:58
but I can see why it causes a bit of a conundrum for macros
donri i suppose python's __future__ imports are "parse-time" but those are compiler pragmas basically
moritz nom: say .chars for ('BEGIN exit;', '__halt_compiler()')
p6eval nom 4e4390: OUTPUT«11␤17␤»
PerlJam TimToady: the only problem with "my $x = $x" is that people (in general) find the P5 semantics more sensible :)
moritz so even there Perl 6 is shorter, even though PHP has introduce an extra feature for it
GlitchMr It's not as bad as (Perl 5): 15:59
TimToady only because that's what they've been trained to expect
GlitchMr whatever / 25 ; # / ; die "this dies!";
masak when I get home to my macros branch, I will try to define 'macro __halt_compiler() { exit }' :)
PerlJam TimToady: indeed, and not just by perl
TimToady PerlJam: I've always been the tail trying to wag the dog; you only just now noticed? :)
moritz PerlJam: no. Think of my $fib = sub { ... recurse into $fib ... }
PerlJam: people do expect that to work, even in perl 5 16:00
TimToady in fact, I think that's a FAQ in Perl 5
GlitchMr masak, not exactly. __halt_compiler(); works more like parser stops to take more data.
masak oh, ok.
moritz like __END__ in p5?
GlitchMr Yeah
moritz hey, even that is shorter :-)
PerlJam moritz: I don't know how many people tend to do that though. 16:01
GlitchMr I found __halt_compiler() trick interesting when I've found it
PerlJam er, want to do that
GlitchMr Also list() in PHP which works like our() in Perl 5...
moritz PerlJam: all those who read HOP :-)
GlitchMr list($hello, $world) = array('Hello', 'World'); 16:02
...
PerlJam I know *I* have wanted it a few times, but I tend to think that it's the "power users" who want it and the general population are just confused.
masak I don't think you can use =END in a macro either... :/
maybe there's a way to build the AST for it, though...
maybe.
masak decommutes
PerlJam GlitchMr: list() doesn't work at all like our. It just does grouping.
GlitchMr ... well... 16:03
our() also does it
PerlJam GlitchMr: our has nothing to do with grouping :)
TimToady masak: perhaps the sane thing for your current project is to say that generic declarations may only be done as textual macros for now
GlitchMr Can you do $var, $bar = $foo;
(even without strict mode)?
our($hello, $world) = ('Hello', 'World'); 16:04
...
TimToady our is not a function in Perl
GlitchMr It's not in PHP too...
list() isn't function in PHP... it's trick made on parser level... 16:05
16:05 mj41 left
PerlJam GlitchMr: but all list() does is grouping a bunch of things together. our doesn't do that. 16:05
GlitchMr ...
Yeah, PHP doesn't really have local variables... 16:06
So there is no our() or my() like words...
PerlJam GlitchMr: it's the parens in your examples that have handled grouping.
GlitchMr ok, ok
I haven't really programmed in Perl 5 16:07
16:07 bluescreen10 joined, mkramer1 joined
TimToady because of certain mental idiosyncracies on the part of its designer, Perl 6 won't allow you to say our() if you really mean our () 16:08
perl6: our($hello, $world) = ('Hello', 'World');
p6eval rakudo 4e4390: OUTPUT«===SORRY!===␤CHECK FAILED:␤Undefined routine '&our' called (line 1)␤»
..pugs b927740: ( no output )
..niecza v10-58-gc851cf8: OUTPUT«===SORRY!===␤␤Variable $hello is not predeclared at /tmp/TqiPfaugaE line 1:␤------> our(⏏$hello, $world) = ('Hello', 'World');␤␤Variable $world is not predeclared at /tmp/TqiPfaugaE line 1:␤------> our($hello, [33…
TimToady perl6: our ($hello, $world) = ('Hello', 'World');
p6eval pugs b927740, niecza v10-58-gc851cf8: ( no output )
..rakudo 4e4390: OUTPUT«Use of uninitialized value in string context␤Use of uninitialized value in string context␤===SORRY!===␤error:imcc:Multiple declarations of lexical '$hello'␤␤ in file '(file unknown)' line 158␤»
GlitchMr I really don't care. I haven't really used list().
TimToady eh, what's up with rakudo there? 16:09
PerlJam rakudo's interpretation is ... interesting :)
GlitchMr And the only time I've used grouping in Perl 5 is subroutine arguments.
TimToady perl6: our ($hello, $world);
p6eval rakudo 4e4390: OUTPUT«Use of uninitialized value in string context␤Use of uninitialized value in string context␤===SORRY!===␤error:imcc:Multiple declarations of lexical '$hello'␤␤ in file '(file unknown)' line 10519434␤»
..pugs b927740, niecza v10-58-gc851cf8: ( no output )
GlitchMr I only use grouping for subroutine arguments.*
TimToady perl6: my ($hello, $world);
p6eval niecza v10-58-gc851cf8: OUTPUT«Potential difficulties:␤ $hello is declared but not used at /tmp/kyDDtgmX70 line 1:␤------> my ⏏($hello, $world);␤ $world is declared but not used at /tmp/kyDDtgmX70 line 1:␤------> my ⏏($hello, $world);␤␤»… 16:10
..pugs b927740, rakudo 4e4390: ( no output )
GlitchMr Perl 6 can specify arguments of function like in C++ or PHP, so I guess I won't have to use grouping in Perl 6.
TimToady I think you're using the term "grouping" more specifically than most folks here would 16:11
(1+2)*3 is also grouping
not just the optional function parens
perl6: state ($hello, $world); 16:12
p6eval niecza v10-58-gc851cf8: OUTPUT«Potential difficulties:␤ $hello is declared but not used at /tmp/WJ88virKia line 1:␤------> state ⏏($hello, $world);␤ $world is declared but not used at /tmp/WJ88virKia line 1:␤------> state ⏏($hello, $world);␤␤»…
..pugs b927740, rakudo 4e4390: ( no output )
TimToady rakudo: our($hello, $world) = 1,2; 16:13
p6eval rakudo 4e4390: OUTPUT«===SORRY!===␤CHECK FAILED:␤Undefined routine '&our' called (line 1)␤»
TimToady why doesn't that die of defined $hello first? 16:14
*undef
variables aren't allowed to be postdeclared like 'our' is
16:14 MayDaniel joined
TimToady niecza: our($hello, $world) = 1,2; 16:15
p6eval niecza v10-58-gc851cf8: OUTPUT«===SORRY!===␤␤Variable $hello is not predeclared at /tmp/SQ7zuXgOja line 1:␤------> our(⏏$hello, $world) = 1,2;␤␤Variable $world is not predeclared at /tmp/SQ7zuXgOja line 1:␤------> our($hello, ⏏$world) …
PerlJam nom: say $a; my $a = 1; # same problem 16:16
p6eval nom 4e4390: OUTPUT«Any()␤»
TimToady oh, maybe it's just that rakudo does not correctly dump its accumulated 'sorry's
16:16 agentzh left
PerlJam (at least I think it's the same) 16:16
TimToady ah, right, I'd forgotten about that bug
otoh, as a language designer one can certainly imagine postdeclaration of variables for things like list comprehensions 16:17
and Haskell makes a virtue of it
(with where clauses)
donri also www.python.org/dev/peps/pep-3150/ 16:21
16:21 GlitchMr left
PerlJam I think "self declaration" makes more sense ($^a and friends) 16:25
(granted that doesn't help list comprehensions) 16:26
TimToady well, mathematicians are actually lousy language designers, I think :)
Woodi depends on language definition :) 16:30
donri they tend to be lousy at language anyway, at least math teachers
TimToady masak: otoh, there might be an easyish way to make macros generic in the current class; obviously roles can do that already
Woodi btw. earlier was talking about Parrot guts-something in PIR context... it was about refactoring or removing or... ? 16:31
16:33 thou joined
TimToady rakudo is trying to get rid of the PIR abstraction layer, which is both too low-level and too high-level 16:35
npq is the new intended abstraction layer 16:36
this will make it more portable to new VMs, including whatever Parrot will become eventually
Woodi PIR was bytecode, so looks for me Parrot without bytecode will be Perl6 backend 16:39
16:39 kaleem joined
TimToady I was interested above that there was an imcc error, which is even lower-level than pir 16:40
rakudo: our ($hello, $world);
p6eval rakudo 4e4390: OUTPUT«Use of uninitialized value in string context␤Use of uninitialized value in string context␤===SORRY!===␤error:imcc:Multiple declarations of lexical '$hello'␤␤ in file '(file unknown)' line 18924426␤»
benabik PIR isn't bytecode. PIR is a layer of magic on top of bytecode.
Woodi hmm, ok. 16:41
16:41 wk left
Woodi is it hard to just write Perl6 -> C translator ? :) 16:41
benabik TimToady: That is odd. Rakudo is doing something bad there.
TimToady Woodi: various people are thinking about that :) 16:42
Woodi stop yesterday :)
err, stoped dreaming about trying to do it. not thinking :) 16:43
TimToady whew!
but in all honesty we should point out that, yes, it is likely to be hard, for various reasons 16:44
Woodi can part of Perl6 spec be declared stable ?
TimToady the P6 spec does JIT stability 16:45
implement it, and it becomes stable :)
well, stabler... :)
PerlJam How to build a Perl 6 compiler, step 1: First, find or build a VM that mostly does what you need
Woodi ok, you wanted it :)
step 1. write Perl6 spec in PEBNF 16:46
PerlJam P for perl ? 16:47
TimToady Problem Exists Between New Friends?
Woodi (BNF with Perl scripts where needed) :)
Perl Extended BNF :)
PerlJam Woodi: I guess that's what NQP is 16:48
TimToady there are probably easier ways to bootstrap that then writing your own Perl6 parser
Woodi step 2. ask TimToady how big/small part of spec require to be writed in Perl :)
TimToady *than
Woodi PerlJam: problems is: if someone want to learn Perl spec then he must spend few years on #perl6 or memoize STD.pm... 16:49
TimToady at this point it would be much easier to retarget the backend of an existing compiler
Woodi and STD.pm realy exploded in size in last 2 years...
so PEBNF would be just 'manual'... 16:50
STD.pm: line 1068: grammar P6 is STD { 16:51
PerlJam It's really amazing how tasty this chicken is seasoned with tomato sauce, cumin, salt, pepper, and garlic 16:52
Woodi it is not textual point of reference...
TimToady I don't know what you mean by that; you need to learn to unpack just a bit more for those of us who are slow
Woodi ok. I just try to point problems and, as usual. i can be wrong :) 16:53
16:54 thou left
PerlJam Woodi: and the problem is ... ? 16:54
16:54 daniel-s left
Woodi it is hard to implement Perl6 becouse it is no 'big picture' in any form 16:55
PerlJam Woodi: Perl 6 is fractal. It looks the same from 50,000 feet as it does from 10 feet
mls_ heh, 12% speedup on perl6 startup by adding a Hash.update method to parrot
Woodi eg.: do Perl6 if/elsif/else can be wroted as EBNF ?
how many points in spec are type "can be parsed only by Perl" ? 16:56
PerlJam mls++
Woodi classes ?
PerlJam Woodi: everything?
benabik mls_: %h1.update(%h2) ? 16:57
mls_ PerlJam: (I know this is optimizing the wrong pieces of code, as it all is moot when jnthn++ does the serialization change)
yes, %h1.update(%h2)
Woodi PerlJam: just was writing question about this...
PerlJam Woodi: so, you think Perl 6 is too complex? 16:58
benabik mls_: 12% faster now is nicer than X% faster at some point in the future.
tadzik 'evening
colomon \o
PerlJam mls_: what benabik said. :)
diakopter benabik: that's a great point. 16:59
Woodi PerlJam: no. i would like to find easy way to implement perl6 :)
diakopter Woodi: it's impossible; the spec is huge; there's no easy way about it. 17:00
Woodi PerlJam: by abstracting standard functionalities like if/while/class and marking few (hope) things as 'only can be done in Perl itself)
17:00 GlitchMr joined
PerlJam Woodi: See NQP :) 17:00
mberends Woodi: there is no easy way, because of the complexity of Perl 6. I would suggest searching for an easy way to implement a useful subset of Perl 6.
Woodi NQP is such thing that it is git clone longer then rakudo.... so i think about BNF for standard things with perl additions... 17:01
mberends: i just do this by wanting picture in BNF notation :) 17:02
17:02 molaf joined, dakkar left
benabik The fun thing about parsing P6 is that the spec requires a _dynamic_ parser instead of a static one. There are not a lot of existing tools or types that do such a thing. 17:02
Woodi it is imposible ! 17:03
PerlJam benabik: yet! :)
Woodi few language things must be easier 17:04
17:05 daxim left
Woodi ok, then NQP is answer. but it less documented then Perl6 17:05
diakopter tries to backlog
benabik The nice part is that, AFAICT, all the dynamic bits are protos and symbol table lookups. Makes life easier.
I wonder if I could get a paper out of extending bison or parser derivatives with protos. 17:06
Woodi so what features NEED to be in Perl tself ?
PerlJam benabik: you include object construction in that?
Woodi: all of them! ;)
benabik PerlJam: Object construction is orthogonal to parsing, I think... 17:07
Woodi pls, understand me, just looking a way to write teoretical plan for writing Perl6 compilers
benabik Woodi: I'm off on a digression, don't mind me.
17:08 mkramer1 left
Woodi benabik: volontires only :) 17:08
volunteers :) 17:09
benabik Hm, wait… the is parsed trait is an issue. :-/
Although that only triggers wherever the method would fit into the grammar naturally, no?
Woodi PerlJam: i read somewhere: there are two kind of ppls: humanists and 'strict mind' ppls. humanists like to finish with questions or unknow and strict ppls like answers or plan to do... 17:15
saying Perl is like fractal kills every hope... 17:16
benabik Ah, well. My thesis is on optimization, not parsing, so moving on.
PerlJam Woodi: I think you're just looking down the wrong axis :) 17:18
Woodi not think so - just trying to place things in hierarchy... 17:19
17:20 Chillance joined
TimToady note that tools like yacc assume a fixed lexer, while Perl 6 requires JIT lexers to be autogenerated 17:21
Woodi TimToady: on every language feature ? 17:22
PerlJam Woodi: sounds like you're one of those "strict mind" people :)
TimToady I don't know what you mean by "feature", but Perl 6 requires a new lexer every time there a new alternation with a different set of "longest tokens"
diakopter would love some elucidation on that 17:23
TimToady what *do* you mean by "feature", anyway?
Woodi feature == syntax, eg.: if/else or while {...} 17:24
such things require change language lexer ?
statement
just want to abstract statements rwquiring dynamic parsing 17:25
jasonmay masak++ # never having done any functional stuff, your post was quite effective for enlightening me on macros
TimToady okay, Perl 6 parsing is based on the notion of "syntactic category", which some folks refer to as "protos" 17:26
when you add a feature like if/else, you likely add it into a particular syntactic category
in this case the statement_control category
that category is effectively an alteration of the | kind 17:27
and P6 guarantees LTM (longest token matching) semantics across all | alternations
including the implicit alt for categories
but note that statement_control is just one category 17:28
it gets subsumed into larger alternative, when you include statements that are not controls, for instance
at the start of a statement, you can have various nouns or prefix operators as well as controls 17:29
all of those participate in a JIT lexer that knows all those possible longest terms, and does the right thing
if you derive a new grammar, and add entries to any of those categories, a new lexer must be calculated 17:30
in theory, if you even add a symbol to the symbol table, you effectively have a new language, but we cheat on that, since it's inefficient to change your lexer that frequently
does any of that make sense to you? 17:31
Woodi i look for way to simplify a bit :)
assume grammar P6...
17:31 lateau__ left
TimToady most such simplifications produce something that isn't quite P6 :) 17:32
Woodi can lexer can be static + var names + function names ?
TimToady it's okay for practical purpose to program in a subset, of course
PerlJam (See NQP ;) 17:33
Woodi just want perl6 in practice...
TimToady but you can't call it Perl 6 if it isn't, is all :) 17:34
Standard Perl 6 requires the ability to create non-standard Perl 6 17:35
Woodi TimToady: but maybe do this in small steps ?
TimToady all steps are created equal, but some are more equal than others 17:36
Woodi first working subset to start system-programming...
TimToady I strongly suggest using an existing parser, and retargeting it
diakopter Woodi: hint: viv 17:37
TimToady trying to write your own P6 grammar to do what you want is probably an XY problem
diakopter: or niecza, or nom
but niecza is closer to the STD parser so far 17:38
Woodi actual compilers are haevy...
diakopter hm, maybe I should use niecza instead of viv for the initial front-end to sprixel.
Woodi will not replace Perl5 in Linux distro
TimToady we don't plan to
tadzik none will
TimToady we do plan to replace python and ruby though :P 17:39
and hopefully JS, Java, and PHP while we're at it
Woodi raw speed is needed... and niche
PerlJam that'll never happen due to the large group of people who are allergic to sigils
TimToady modules will happen :) 17:40
and sigilless will be one of the first attempted :)
tadzik that'd be fun
Woodi btw. got idea today: can Perl6 be better buildtools then actual ./configure --prefix=....
TimToady we're actually not so far from sigilless right now, if we assume that foo can look for $foo internally 17:41
you can program sigilless now, if sub foo() is rw { $foo }
PerlJam That's an odd way to declare vars though
diakopter one could use a macro to replace..
17:42 packetknife left
TimToady diakopter: precisely 17:42
I don't know what standard perl 6 will look like 50 years from now, other than "different"
tadzik it will be "this thing we use for 20 years waiting for Perl 7 to actually be implemented" 17:43
TimToady Woodi: sure, all current build tools suck dead gerbils through a garden hose
diakopter masak: that's a good test for your macro project: whether it can make same-named rw subs from variables
we need a TimToady quote bot
TimToady not original with me, that one
diakopter just imagine how many hours it would take to backlog all of #perl6 to find all the quotable gems 17:44
I suppose moritz could make a TimToady-only view of the clogs 17:45
TimToady in fact, it gets 62,000 hits on google
Woodi realy want to have high performance Perl6 compiler with grammars NIY :)
TimToady well, starting at "suck"
Woodi tee (flee!) 17:46
17:46 shi joined
PerlJam Woodi: We'll likely need a few more decades to get to "high performance" just like fortran did :) 17:46
17:48 donri left
dalek p: 514d0fe | mls++ | / (2 files):
use parrot's new Hash.update method to speed up method cache generation
17:48
17:48 wk joined 17:49 static_perl left
moritz diakopter: you can already filter the IRC logs by nick, if you have JS enabled 17:54
17:55 risou is now known as risou_awy
diakopter oo 17:57
moritz and there's also the search (though it's slow) 18:00
TimToady any proposed rules for -er in English are stupider than most native speakers, who know English betterer than that :) 18:01
18:04 shi is now known as ksi, benabik_ joined
mls_ moritz: the update patch for rakudo: gist.github.com/1296162 18:04
(you must also update to the latest nqp version) 18:05
TimToady Rat should probably mean Rat[Int, Uint64], to avoid assuming that the denominator must be stored in 64 bits no matter how small 18:07
note, Uint64, not uint64
to at least allow for space/time tradeoffs 18:08
18:08 benabik left, benabik_ is now known as benabik
TimToady implementation of Uint64 as uint64 is of course acceptable 18:08
18:10 wk left 18:16 libertyprime joined
masak jasonmay: thanks for the encouragement. I will write more on macros ;) 18:18
dalek ecs: 5e98222 | larry++ | S02-bits.pod:
Rat has Uint64 for a denom, for repr flexibility
18:21
diakopter niecza: class A { ... }; BEGIN { say A.new }; class A { has $!x; }; 18:22
p6eval niecza v10-58-gc851cf8: OUTPUT«===SORRY!===␤␤Package was stubbed but not defined at /tmp/rBqTECgFr5 line 1:␤------> class A { ... }⏏; BEGIN { say A.new }; class A { has $!x␤␤␤Unhandled Exception: Check failed␤␤ at /home/p6eval/niecza/boot/lib/CORE.s…
18:24 cognominal_ joined
diakopter niecza: class A { ... }; BEGIN { class A { has $!x; }; say A.new } 18:25
p6eval niecza v10-58-gc851cf8: OUTPUT«===SORRY!===␤␤Two definitions found for symbol ::GLOBAL::A␤␤ first at /tmp/hcdACDuK5C line 1␤ second at /tmp/hcdACDuK5C line 1 at /tmp/hcdACDuK5C line 1:␤------> class A { ... }; BEGIN { class A ⏏{ has $!x; }; say A.new }…
18:27 cognominal left
diakopter nom: class A { ... }; BEGIN { class A { has $!x; }; say A.new } 18:28
p6eval nom 4e4390: OUTPUT«A.new()␤»
diakopter nom: class A { ... }; { class A { has $!x } }; say A.new 18:29
p6eval nom 4e4390: OUTPUT«A.new()␤»
Woodi found nice looking NQP docs... 18:30
tadzik im2ee: ping 18:32
im2ee hello tadzik ! :) 18:33
tadzik oh, hey
I tried to examine your TCP server using Select today
18:34 wamba joined
tadzik I have a feeling that Select in Parrot is broken possibly at C level 18:34
18:34 envi_ left
benabik hah 18:34
tadzik I may dive at some deep level, possibly hack in Pir/winxed and see if the behaviour is similar. For now it's segfaulting randomly, and randomly spewing something that reminds me of GC bugs I've seen this summer
although there _were_ cases when it worked, like "returned the filehandles it should have", so maybe there's hope :) 18:36
im2ee tadzik, thanks. So there is a hope. :)
tadzik aye
18:36 wk joined
tadzik I now have to learn winxed, parrot's sockets and try to write a server like yours :) 18:36
may be a cure for my recent programming stagnation 18:37
18:41 uasi left
diakopter std: sub checklastval ($passwd) is rw { return new Proxy: FETCH => method { return lastval() }, STORE => method ($val) { die unless $passwd); lastval() = $val } } # TimToady this is an example from S06 18:46
p6eval std 580b69a: OUTPUT«===SORRY!===␤Unable to parse block at /tmp/CtokvkNI0B line 1:␤------> urn lastval() }, STORE => method ($val) ⏏{ die unless $passwd); lastval() = $val ␤Couldn't find final '}'; gave up at /tmp/CtokvkNI0B line 1:␤------> RE =>… 18:47
diakopter er
oops
nm
tadzik eww, you know what?
Parrot's Socket already has poll() method, which, as far as I understand, gives us non-blocking IO capabilities for I don't know how long 18:48
Watches the socket for sec seconds and usec milliseconds. which is a bitmask representing the states you want to watch for. Or together 1 for readable, two for writeable, and four for exceptions
18:51 im2ee left
TimToady Anyone using select for anything has already got an XY problem on their hands... :) 18:51
18:51 im2ee joined
TimToady with the possible exception of anyone struggling to implement a sane interface on top of it 18:53
diakopter niecza: say hash pair 1 18:54
p6eval niecza v10-58-gc851cf8: OUTPUT«===SORRY!===␤␤Undeclared routine:␤ 'pair' used at line 1␤␤␤Unhandled Exception: Check failed␤␤ at /home/p6eval/niecza/boot/lib/CORE.setting line 766 (CORE die @ 2) ␤ at /home/p6eval/niecza/src/STD.pm6 line 1136 (STD P6.comp_unit @ 36) ␤…
18:56 wk left 18:58 molaf left
diakopter niecza: dispatch sub foo { } 18:58
p6eval niecza v10-58-gc851cf8: OUTPUT«===SORRY!===␤␤Undeclared routine:␤ 'dispatch' used at line 1␤␤Potential difficulties:␤ &foo is declared but not used at /tmp/K5SKfnHFHU line 1:␤------> dispatch sub foo ⏏{ }␤␤␤Unhandled Exception: Check failed␤␤ at /h… 18:59
diakopter eh
std: dispatch sub foo { }
p6eval std 580b69a: OUTPUT«===SORRY!===␤Undeclared routine:␤ 'dispatch' used at line 1␤Check failed␤FAILED 00:01 119m␤»
diakopter TimToady: should the above parse? S06 has that example 19:00
tadzik im2ee: yay! Got something working 19:02
im2ee: gist.github.com/1296356 19:03
im2ee: it's still blocking on $a.recv, but that I leave as an exercise for the reader :)
who opposes to implementing a real IO::Socket::poll?
19:06 wooden left
masak oppose? what's the downside? 19:08
tadzik thank you
I'll just check if it really solves all problems I can think of :)
19:09 [Coke] joined
tadzik I find it quite funny for how long we did have a non-blocking sockets in Parrot, and no one noticed, heck, we spent like half a year arguing over Select 19:09
flussence I'm sure there's a technical reason to use something else instead of poll(), but right now there's no "something else" :)
tadzik _sri prefers epoll() istr
flussence libev, that way you get half a dozen things-better-than-poll through one interface 19:10
_sri or even libuv
then you get windows too 19:11
benabik ISTR that several platforms implement poll on top of epoll these days.
flussence hadn't heard of libuv until now
TimToady events from registered objects are much saner than anything poll based
_sri mozillas Rust language uses libuv
and of course node.js
19:12 leprevost left 19:13 benabik_ joined, benabik left, benabik_ is now known as benabik 19:15 donri joined
tadzik nom: say Rat.^methods # bleh 19:19
p6eval nom 4e4390: OUTPUT«Method.new() Submethod.new() Method.new() Method.new() Method.new() Method.new() Method.new() Method.new() Method.new() Method.new() Method.new() Method.new() Method.new() Method.new() Method.new() Method.new() Method.new() Method.new() Method.new() Method.new() Metho…
tadzik nom: say Rat.^methods.sort
p6eval nom 4e4390: OUTPUT«No applicable candidates found to dispatch to for 'Numeric'. Available candidates are:␤:(Mu, Mu %_)␤␤ in method Numeric at src/gen/CORE.setting:604␤ in sub infix:<==> at src/gen/CORE.setting:2003␤ in sub infix:<cmp> at src/gen/CORE.setting:1043␤ in method sort at …
flussence nom: say Rat.^methods».name 19:20
p6eval nom 4e4390: OUTPUT«new BUILD nude Num Int Bridge Rat succ pred Str perl numerator denominator Rat abs sign conjugate sqrt sin asin cos acos tan atan atan2 sec asec cosec acosec cotan acotan sinh asinh cosh acosh tanh atanh sech asech cosech acosech cotanh acotanh floor ceiling unpolar c…
flussence don't they stringify that way any more?
moritz tadzik: easy to fix
19:20 mj41 joined
moritz tadzik: just needs a multi method Str(Method:D:) { self.name } in Method.pm 19:21
(probably fallout from my earlier Mu.perl changes)
19:22 jlaire left
masak if someone promises to patch it immediately, I won't file a ticket. 19:22
unless someone feels it needs a spectest... 19:23
dalek rixel: e591a06 | diakopter++ | src/ (4 files):
optimize pre- and post- increment a bit more
19:24
19:24 jlaire joined
19:25 ggoebel left
cotto masak++ for getting some hacker news love 19:28
tadzik nom: my $seconds = 0.25; my $usecs = (($seconds - $seconds.floor) * 1000).Int; pir::say(nqp::unbox_i($usecs)) 19:29
p6eval nom 4e4390: OUTPUT«250␤»
tadzik huh
19:29 bluescreen10 left
tadzik oh, nvm 19:29
19:31 thou joined
masak tadzik: 'u' is generally an ASCIIfication of μ, which stands for 10 ** -6, not 10 ** -3. 19:38
19:39 saaki left, uasi joined
tadzik masak: an opportunity to fix Parrot docs :) 19:40
benabik There is no dearth of opportunities to improve those. :-/
tadzik poll(INTVAL which, INTVAL sec, INTVAL usec) 19:42
Watches the socket for sec seconds and usec milliseconds
oh, ok, I'm wrong
im2ee: gist.github.com/1296356 looks way better, and like what you might want to do 19:44
masak what, why?
19:44 bluescreen10 joined
masak it's either "usec" or "milliseconds". not both. 19:45
tadzik oh, so I'm not wrong, ok
masak you wrongly thought you were wrong.
19:46 wk joined 19:48 kaleem left 19:50 SHODAN joined 19:54 MayDaniel left 19:57 uasi left 20:01 GlitchMr left
im2ee tadzik++, i'll check it tomorrow! Thank You 20:01
What is PIR exactly?
tadzik Parrot intermediate representation 20:02
some sort of Parrot assembly
I managed to live w/o it
im2ee And how to use it? :) 20:03
tadzik do not :)
I'll try to write a Perl 6 poll() on IO::Socket, to remove the need for crappy workarounds like this one in the gist 20:05
20:08 soh_cah_toa joined 20:09 im2ee left 20:10 im2ee joined
[Coke] soh_cah_toa: my copy of nqp is so old I apparently don't have $*OSNAME. 20:10
C:\sandbox\nqp>.\nqp -e "say($*OSNAME)"
Contextual $*OSNAME not found 20:11
20:18 slavik1 left
soh_cah_toa [Coke]: wow 20:22
that's ok. i think it's MSWin32 anyway
20:23 xinming left, sivoais left, cotto left, jdhore left, s1n1 left, spacebat left, mattp_ left
masak argh. tired. need to regenerate. 20:23
'branoc, #perl6.
20:24 xinming joined, sivoais joined, cotto joined, jdhore joined, s1n1 joined, spacebat joined
sjohnson masak: cya 20:29
20:36 mberends left 20:42 skangas left 20:47 tokuhiro_ joined 20:48 slavik1 joined, dual joined 20:50 mberends joined 21:00 mkramer joined 21:01 benabik_ joined, benabik left, benabik_ is now known as benabik 21:05 mkramer1 joined 21:06 SHODAN left 21:08 [Coke] left, mkramer left 21:10 [Coke] joined
benabik nom Q: Is perl6 --target=pir file.pl6 > file.pir && parrot file.pir expected to work? 21:18
I get Contextual $*ST not found
tadzik that may be broken, yes
benabik "Fun"
im2ee Good night!
21:19 im2ee left
tadzik dobranoc imarcusthis 21:19
eeps, sorry imarcusthis
ETOOSMARTTAB
21:23 thou left
dalek kudo/nom: bed705e | tadzik++ | src/core/IO/Socket.pm:
Implement IO::Socket.poll (unspecced)
21:42
tadzik phenny: tell im2ee gist.github.com/1296356 is the best I've got, works with rakudo bed705e
phenny tadzik: I'll pass that on when im2ee is around.
21:44 ggoebel joined 21:45 aindilis joined 22:00 bluescreen10 left 22:09 mj41 left 22:14 tokuhiro_ left 22:15 tokuhiro_ joined 22:22 libertyprime left, mattp_ joined 22:23 ksi left 22:27 dual left 22:28 benabik left 22:47 replore left 22:53 whiteknight joined 23:01 am0c joined 23:08 benabik joined 23:37 Chillance left
diakopter .. 23:47