»ö« 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:02 pjcj joined, jasonmay joined 00:03 envi left 00:05 kaydsoft left 00:08 gdey left, gdey joined 00:10 MayDaniel left 00:12 icwiener left 00:13 gdey left 00:20 masonkramer joined
AzaToth rakudo: my $ⓨ = "alloha"; say $ⓨ 00:29
p6eval rakudo 6f9116: OUTPUT«===SORRY!===␤Confused at line 22, near "my $\u24e8 = \"a"␤»
donri rakudo: my $börk-börk = "Swedish chef!"; say $börk-börk 00:30
p6eval rakudo 6f9116: OUTPUT«Swedish chef!␤»
AzaToth donri: so, why aint $ⓨ ok?
00:31 moosenewbie joined
AzaToth imo, it's unicode 00:31
jnthn rakudo: say 'ⓨ' ~~ /<ident>/
AzaToth or did I miss something?
p6eval rakudo 6f9116: OUTPUT«␤»
jnthn rakudo: say ?('ⓨ' ~~ /<ident>/)
p6eval rakudo 6f9116: OUTPUT«Bool::False␤» 00:32
donri maybe it makes distinction between punctuation etc
jnthn It's not an identifier character, it seems.
donri: Yes.
donri maybe it can be used infix?
jnthn Yes, it's probably fine for an infix.
AzaToth rakudo: say ?('ⓔ' ~~ /<ident>/)
p6eval rakudo 6f9116: OUTPUT«Bool::False␤»
jnthn .u ⓔ 00:33
phenny U+24D4 CIRCLED LATIN SMALL LETTER E (ⓔ)
jnthn Hmm
rakudo: say ?('ⓔ' ~~ /\w/) 00:34
p6eval rakudo 6f9116: OUTPUT«Bool::False␤»
AzaToth using compose it's Compose + ( + e + )
da Super key
it _looks_ like a letter at least ツ
plobsing rakudo: my $GoodThing™ = "shiny"; say $GoodThing™; 00:35
p6eval rakudo 6f9116: OUTPUT«===SORRY!===␤Confused at line 22, near "my $GoodTh"␤»
AzaToth hehe
plobsing but I want to trademark my variable names!
jnthn AzaToth: Looking at www.fileformat.info/info/unicode/ch.../index.htm suggests it doesn't have a bunch of properties.
AzaToth rakudo: my $℠ = "alloha"; say $℠ 00:36
p6eval rakudo 6f9116: OUTPUT«===SORRY!===␤Confused at line 22, near "my $\u2120 = \"a"␤»
AzaToth .u ℠
phenny U+2120 SERVICE MARK (℠)
AzaToth jnthn: so symbols are not good for identifiers then I assume 00:37
jnthn: does the specification spe cify anywhere what is valid for identifier? 00:39
jnthn AzaToth: I'd suspect in S02 00:40
AzaToth I so suspected too
00:40 stifynsemons left
arnsholt Anything that Unicode says is alpha-numeric is a good first-approximation, IIRC 00:40
AzaToth but perlcabal.org/syn/S02.html#Lexical_Conventions doesn't really specify that deeply
"In the abstract, Perl is written in Unicode, and has consistent Unicode semantics regardless of the underlying text representations. By default Perl presents Unicode in "NFG" formation, where each grapheme counts as one character. A grapheme is what the novice user would think of as a character in their normal everyday life, including any diacritics. " 00:41
00:41 mfollett left, moosenewbie left
jnthn AzaToth: It says: 00:41
An I<identifier> is composed of an alphabetic character followed by
any sequence of alphanumeric characters. The definitions of alphabetic
and numeric include appropriate Unicode characters.
AzaToth ah, down there 00:42
plobsing rakudo: my @ℕ := 1, 2, 3, ... *; say @ℕ[100]; 00:45
p6eval rakudo 6f9116: OUTPUT«===SORRY!===␤Comma found before apparent series operator; please remove comma (or put parens␤ around the ... listop, or use 'fail' instead of ...) at line 22, near " ... *; sa"␤»
plobsing rakudo: my @ℕ := 1, 2, 3 ... *; say @ℕ[100];
p6eval rakudo 6f9116: OUTPUT«101␤»
dalek p/ctmo: 8b83fce | jonathan++ | / (4 files):
First cut of storing/looking things up in the SC. Will need something for putting one assembled at compile time in place too.
00:47
p/ctmo: 8b1576b | jonathan++ | src/HLL/SerializationContextBuilder.pm:
Fill out get_slot_past method in SC builder.
p/ctmo: 9d84745 | jonathan++ | src/HLL/SerializationContextBuilder.pm:
Start to fill out some of the SC builder bits.
00:54 envi joined
jnthn sleep & 01:01
01:05 kanishka joined
AzaToth rakudo: class aq { method a { return class { method b { return 3; } } }; }; say(aq.a.b); 01:08
p6eval rakudo 6f9116: OUTPUT«3␤»
AzaToth rakudo: class q { method a { return class { method b { return 3; } } }; }; say(q.a.b);
p6eval rakudo 6f9116: OUTPUT«===SORRY!===␤Unable to parse postcircumfix:sym<( )>, couldn't find final ')' at line 22␤»
AzaToth feature or bug?
donri I wish take would use $_ 01:12
flussence std: class q { method a { return class { method b { return 3; } } }; }; say(q.a.b);
p6eval std 625303c: OUTPUT«===SORRY!===␤Unable to parse argument list at /tmp/BzWtgg41gn line 1:␤------> ass { method b { return 3; } } }; }; say⏏(q.a.b);␤Couldn't find final ')'; gave up at /tmp/BzWtgg41gn line 1:␤------> method b { return 3; } } }; };
..say(q.a.[33…
AzaToth rakudo: class c { method a { return class { method b { return 3; } } }; }; say(c.a.b); 01:16
p6eval rakudo 6f9116: OUTPUT«3␤»
AzaToth I assume q.XXX. overrules here
donri Duno if anyone here uses Convore but convore.com/perl-6/ 01:22
jdhore ew, convore :(
plobsing donri: never seen it before. is there much if any of an advantage over gchat or irc? 01:23
donri plobsing: threaded live-chats 01:24
plobsing I don't know what that means, but it sounds a lot like IRC
jdhore It's basically like really crappy IRC 01:25
donri IRC isn't threaded, logged and searchable etc
The only good thing about IRC is that everyone uses it 01:26
plobsing irclog.perlgeek.de/perl6/2011-02-18#i_3308184
jdhore It's logged and searchable
Yep, what he just linked
donri Yea that just works and requires no setup 01:27
plobsing all hail the perl geek
donri Anyway, ignore Convore if you like, just thought there should be a Perl 6 group. 01:28
There is a Perl one but I dislike when they're grouped together
Like on Reddit.
sorear good * #perl6
plobsing Perl? on Reddit? isn't that the very definition of "glutton for punishment"? 01:29
jdhore surprisingly, no 01:30
sorear When people here say "ツ", I hear "tsu". It's not a smilie at *all*. 01:36
donri Is it a smiley though? 01:37
sorear hello AzaToth
01:41 mfollett joined 01:45 stkowski left 01:53 ab5tract left 01:56 DarkWolf84 joined
DarkWolf84 hello #perl6 01:56
01:57 mfollett left
DarkWolf84 rakudo: "alive".say 01:58
p6eval rakudo 6f9116: OUTPUT«alive␤»
02:01 noganex joined
DarkWolf84 too bad ;( 02:01
I think I've done something nasty (stupid) to try.rakudo.org bot 02:02
02:05 noganex_ left
donri that thing never works when I try it 02:05
coldhead try.rakudo.org is throwing a "serious" error 02:06
:\
DarkWolf84 yeah 02:12
02:12 shi left
DarkWolf84 I tried to get some lines from $*IN 02:13
I just forgot that it's just cgi
sorear hi DarkWolf84 02:14
DarkWolf84 hi sorear
sorear, do you know someone who has access to try.rakudo.org 02:16
sorear ask moritz_ 02:17
maybe alester
DarkWolf84 ok
I hate when do something like that 02:18
plobsing hmmm... isn't try.rakudo.org partially sandboxed?
DarkWolf84 maybe
plobsing should $*IN really mess it up?
DarkWolf84 yeah 02:19
maybe it's waiting for input 02:20
sorear try.rakudo.org uses $*IN and $*OUT internally
there are 3 programs running - Rakudo, a CGI script, and a server thingy which accepts commands from the CGI script and runs instances of Rakudo 02:21
$*IN is used to communicate between the first and the third
DarkWolf84 I'm sure it broke during my tests 02:22
and the last line was $*IN.get
plobsing the visibility is the problem. it should stash away a private reference to STDIN and then set the globally visible handle to /dev/null or somesuch. 02:23
02:24 stifynsemons joined
AzaToth raduko: $ツ=":)" 02:25
rakudo: $ツ=":)"
DarkWolf84 nice :)
p6eval rakudo 6f9116: OUTPUT«===SORRY!===␤Symbol '$ツ' not predeclared in <anonymous> (/tmp/t5U3lYR3Ia:22)␤»
AzaToth lol? 02:26
DarkWolf84 bug
02:27 mfollett joined
plobsing rakudo: my $ツ =":)"; say $ツ; 02:27
p6eval rakudo 6f9116: OUTPUT«:)␤»
DarkWolf84 rakudo: $a = "epic fail" 02:29
p6eval rakudo 6f9116: OUTPUT«===SORRY!===␤Symbol '$a' not predeclared in <anonymous> (/tmp/LPeU6hJ1K5:22)␤»
DarkWolf84 I got it
it's the strict pragma :)
AzaToth haha 02:31
rakudo: no strict; $ツ=":)"
p6eval rakudo 6f9116: OUTPUT«===SORRY!===␤Symbol '$ツ' not predeclared in <anonymous> (/tmp/9rIJnUEP1H:22)␤»
DarkWolf84 lol
AzaToth rakudo: say .perl 02:32
p6eval rakudo 6f9116: OUTPUT«Any␤»
02:35 cdarroch left
DarkWolf84 bye, I have to go to bed or soon will become insomniac 02:38
02:39 DarkWolf84 left
donri rakudo: sub postfix:<☺>($s) { say "$s! :)" }; "Hello"☺ 02:43
p6eval rakudo 6f9116: OUTPUT«Hello! :)␤»
02:44 stifynsemons left
Tene AzaToth: Rakudo doesn't yet implement 'no strict' 02:52
02:53 mfollett left, mfollett joined 02:55 mfollett_ joined, donri left 02:57 whiteknight left, stifynsemons joined 02:58 mfollett left, mfollett_ is now known as mfollett 03:05 pjcj left
sorear perl6: class A { }; class B { method succ() { A } }; my $x = B; $x++; say $x.WHAT 03:06
p6eval niecza v2-68-ga938d4c: OUTPUT«(timeout)»
..pugs: OUTPUT«Int␤»
..rakudo 6f9116: OUTPUT«Int()␤»
sorear perl6: class A { }; class B { method succ() { A } }; my $x = B; $x++; say $x.WHAT
p6eval pugs: OUTPUT«Int␤»
..rakudo 6f9116: OUTPUT«Int()␤»
..niecza v2-68-ga938d4c: OUTPUT«␤»
sorear perl6: class A { }; class B { method succ() { A.new } }; my $x = B.new; $x++; say $x.WHAT 03:07
p6eval pugs: OUTPUT«*** Cannot cast from VObject (MkObject {objType = (mkType "B"), objAttrs = <Hash:0x7ff40a63b169>, objOpaque = Nothing, objId = MkObjectId {unObjectId = 5}}) to Double (VNum)␤ at /tmp/CVi7s2qu7b line 1, column 66-70␤»
..rakudo 6f9116: OUTPUT«A()␤»
..niecza v2-68-ga938d4c: OUTPUT«␤»
03:08 Rotwang left
sorear niecza: class A { }; class B { method succ() { A.new } }; my $x = B.new; $x++; say $x.typename 03:08
p6eval niecza v2-68-ga938d4c: OUTPUT«A␤»
sorear I guess WHAT.Str is broken
03:09 woosley joined 03:10 cognominal left 03:11 cognominal joined
dalek ecza: 1b13b31 | sorear++ | Makefile:
Auto-compile setting on make to end p6eval timeouts
03:12
03:13 stifynsemons left 03:14 felipe left 03:21 pjcj joined 03:22 AzaToth left, rbuels left 03:23 rbuels joined 03:27 mfollett left
diakopter seen TimToady 03:34
aloha TimToady was last seen in #perl6 17 hours 27 mins ago saying "okay, say goodbye now".
diakopter orly
03:37 dolmen left
colomon He was also on as TimToady_it or something like that today. 03:37
03:49 ponbiki left, ponbiki joined 04:03 envi left 04:17 hudnix left 04:20 stifynsemons joined, jaldhar joined 04:21 hudnix joined 04:23 Su-Shee_ joined 04:27 Su-Shee left 04:35 sftp left 04:42 fith joined
dalek ecza: b4c48f4 | sorear++ | lib/SAFE.setting:
Fix .join for lists starting with an undefined value
04:49
05:00 cognominal left 05:04 mtk left
dalek ecza: dfdfc66 | sorear++ | / (6 files):
Implement the % operator
05:10
05:12 mtk joined
dalek p: 549d447 | bacek++ | / (3 files):
Create attribute accessors. Mostly stolen from nqpclr
05:21
05:39 agentzh joined 05:40 wooden joined, wooden left, wooden joined 05:44 ponbiki left, ponbiki joined 06:06 stifynsemons left 06:27 y3llow_ joined 06:28 kcwu left 06:29 pothos left 06:30 y3llow left, y3llow_ is now known as y3llow 06:33 kanishka left 06:34 coldhead left, coldhead joined 06:36 cjk101010 joined 06:37 kcwu joined 06:41 pothos joined
dalek ecza: 7f006be | sorear++ | lib/ (2 files):
Add a general upcall/downcall mechanism
06:42
sorear next month I'll be using that to implement eval 06:47
rakudo: say \1 06:50
p6eval rakudo 6f9116: OUTPUT«Capture()<0x3d070d0>␤»
sorear rakudo: say (\1).perl
p6eval rakudo 6f9116: OUTPUT«\(1)␤»
sorear rakudo: say (\:foo).perl
p6eval rakudo 6f9116: OUTPUT«\("foo" => Bool::True)␤»
sorear rakudo: say (\(:foo)).perl
p6eval rakudo 6f9116: OUTPUT«\("foo" => Bool::True)␤»
sorear rakudo: say (\(:foo, 5)).perl 06:51
p6eval rakudo 6f9116: OUTPUT«\(5, "foo" => Bool::True)␤»
06:58 pothos left, pothos joined 06:59 kaare_ joined
sorear out 07:03
moritz_ phenny: tell AzaToth see www.perlmonks.org/?node_id=846772 07:08
phenny moritz_: I'll pass that on when AzaToth is around.
07:11 Mowah joined 07:20 nadim__ left 07:28 pothos left 07:29 pothos joined 07:32 wtw joined, cotto left 07:55 cotto joined 08:00 felipe joined 08:02 Su-Shee_ is now known as Su-Shee 08:23 kanishka joined 08:24 byzas joined 08:30 envi joined 08:34 ruoso left, shortcircuit left 08:41 justatheory left 08:42 avuserow left 08:43 avuserow joined 08:53 daxim joined 08:55 ruoso joined 09:11 TiMBuS left, TiMBuS joined
moritz_ good morning zebras 09:14
any volunteers for rakudo releases?
09:23 cognominal joined
coldhead what would that involve? 09:24
moritz_ coldhead: following a release guide; notably writing a release announcement (70% copy&paste), running automated test, running make release VERSION=... and finally writing an email with the announcement 09:25
typically about 1 to 2 hours of work, plus some time waiting for the spectest runs to finish 09:26
see github.com/rakudo/rakudo/blob/mast..._guide.pod for the full instructions
09:32 kanishka left
jdhore moritz_, I'm not really involved with Rakudo (i suppose), but i'd be up for doing one. 09:41
moritz_ jdhore: great! Which month do you want to take? 09:46
jdhore I'm generally free enough to handle it, but just for ease of things, mark me down for March, if that works. 09:47
moritz_ sure, thanks a lot 09:48
09:48 orafu left
tadzik rakudo: my $a = 1, 2, 3; my $b = 1, 2, 3; my $c = [ $a, $b ]; $c.perl.say # why? 09:48
p6eval rakudo 6f9116: OUTPUT«[1, 1]␤»
moritz_ tadzik: because $a = is item assignment precedence 09:49
rakudo: my $a = 1, 2, 3; say $a.perl
benabik rakudo: my @a = 1,2,3; my @b = 1,2,3; my @c = [ @a, @b ]; @c.perl.say
p6eval rakudo 6f9116: OUTPUT«1␤»
rakudo 6f9116: OUTPUT«[[1, 2, 3, 1, 2, 3]]␤»
jdhore no worries :)
moritz_ std: my $a = 1, 2, 3;
p6eval std 625303c: OUTPUT«ok 00:01 122m␤»
dalek kudo: 498950f | moritz++ | docs/release_guide.pod:
jdhore++ makes the March release
09:50
jdhore :D
tadzik moritz_: I'm thinking about stackoverflow.com/questions/5038918...-variables
jdhore Mind if i ask, what's with the whole ++ thing? 09:51
TiMBuS karma jdhore
aloha jdhore has karma of 1.
moritz_ jdhore: karma
TiMBuS karma TiMBuS
aloha TiMBuS has karma of 0.
TiMBuS :<
flussence that's a pretty low bus factor 09:52
jdhore ah, i didn't know there was a karma bot in here
flussence karma flussence
aloha flussence has karma of 35.
flussence whoa
jdhore for a bit of fun: 09:53
karma C
aloha C has karma of 286.
Tene karma tene
aloha tene has karma of 34.
Tene karma C++
aloha C++ has karma of 0.
Tene (C++)--
karma C++
aloha C++ has karma of 0.
Tene goes to bed.
09:54 am0c left
jdhore C++++ 09:54
karma C++
aloha C++ has karma of 0.
jdhore damn :(
moritz_ tadzik: I wrote a reply now 09:55
tadzik good
jdhore moritz_, There's a small typo in release_guide.pod...For the upcoming 2011 releases, it still says: "Planned 2010 Releases" 09:56
moritz_ jdhore: thanks, will fix 09:57
jdhore no worries :)
10:02 donri joined 10:05 woosley left 10:06 cotto left
dalek kudo: fe2b4e1 | moritz++ | docs/release_guide.pod:
[docs] update years in release_guide.pod, jdhore++. Also add the rest of the planned release dates for 2011
10:06
10:09 am0c joined 10:11 Chillance joined
dalek tpfwiki: (Andrew Tvardzik)++ | www.perlfoundation.org/perl6/index.cgi?socia 10:22
10:28 volpe joined 10:29 zenog joined
zenog Hi, I read somewhere that shuffling an array should be done like @array.pick(*). What is the asymptotic runtime of this command? Sorry, I have no ideas about the inner workings of that idiom ... 10:33
phenny zenog: 16 Feb 23:52Z <colomon> tell zenog I certainly wasn't annoyed with his program. I just ran out of tuits to look at the longer version....
zenog phenny: thx 10:34
colomon: no problem ;-)
Also, does @array = @array.pick(*) happen in situ? Quite important for big data. 10:35
moritz_ zenog: iirc .pick(*) uses Fisher-Yates shuffle. If not, it should be changed to do that 10:37
zenog: and .= isn't really in-place yet :/
zenog moritz_: OK, thanks. Fisher-Yates is good.
moritz_: Does that mean one would have to use .=, or would @a = @a. do exactly the same? 10:38
moritz_ zenog: I think that depends on the cleverness of the compiler 10:39
10:40 awoodland joined
zenog moritz_: OK, thanks for the info ;-) ... maybe it should become part of the language definition that such things are guaranteed ... would help people to write readable code without fearing performance penalties ;-) 10:40
moritz_ zenog: maybe. But I guess that's to be a goal for a later Perl 6 revision, not 6.0.0 10:41
zenog moritz_: OK. 10:42
donri @array .= pick(*, :replace) #? 10:56
moritz_ pick(, :replace) has been renamed to .roll 10:57
donri well, @array.pick(*, :replace)
ok
isn't that then what zenog wants
moritz_ rakudo: .print for <do re mi fa so lo>.roll.[^5]
p6eval rakudo 6f9116: OUTPUT«lo»
moritz_ rakudo: .print for <do re mi fa so lo>.roll(*).[^5]
p6eval rakudo 6f9116: OUTPUT«dolorefaso»
moritz_ donri: not at all
:replace is not in-place 10:58
donri ok
moritz_ (but it was replaced because it was confusing)
11:01 awoodland left
donri so what it do? 11:01
moritz_ what the name says :-) 11:02
think of rolling dice
rakudo: .print for <a b c>.roll(10)
p6eval rakudo 6f9116: OUTPUT«baaabcaabc»
donri > dir test => /^D/ 11:03
Desktop Downloads Documents
> dir.grep: /^D/
Desktop Downloads Documents
what's the point of dir test?
moritz_ donri: the default value 11:04
of none <. ..>
donri aha
huf neat! 11:06
moritz_ I noticed that much of my directory processing code immediately excluded those two anyway 11:07
huf yeah 11:08
flussence the difference between dir(:test) and .grep is the former's allowed to optimise using low-level filesystem tricks, while the latter doesn't have full knowledge of the data so can't do much with it. Also the <. ..> thing. 11:19
( i.e. it can use scandir() ) 11:26
11:41 coldhead left, tomaw left
donri isn't dir.grep lazy? 11:42
11:42 MayDaniel joined
flussence yes but it still has to read the entire directory into perl6 to figure out which ones to throw away 11:43
donri but if test allows perl stuff like regex? 11:44
flussence depends on the implementation 11:45
it can create a regex callback to pass to scandir or do it at whatever level is appropriate 11:46
donri hokay 11:47
flussence the point is that a specialised interface can be optimised easier than a general one
donri sure
I mostly agree with the Zen of Python: Consistency is good, but practicality beats purity. 11:48
11:49 tzhs joined
flussence that sounds like a specialised case of TMTOWTDI :) 11:49
donri Yea I'm agreeing less lately with the "one way to do it"
Well, it only says one *obvious* way, which is still a good thing 11:50
flussence (there's more than one way to do it wrong...)
donri :D 11:51
11:51 masonkramer left, masonkramer joined
donri docs.pylonsproject.org/projects/pyr...y-to-do-it 11:51
11:52 masak joined
masak guten après-midi, zebras. 11:52
flussence o/
arnsholt Hey masak
bacek o/
donri Perl 6 seems to usually provide an obvious way to do it, from what I've seen so far. 11:54
While still verily TIMTOWTDI
arnsholt masak: Read your latest blog post with interest last night 11:55
donri Though I think the point of "one obvious way to do it" is more for reading code than writing it
arnsholt It was especially fitting considering I was discovering quite a few of the ways Prolog exception handling can be done wrong =) 11:56
donri Easier to follow others' code if they use obvious solutions
But Perl 6's expressiveness is usually intentional, not hacked on top of the language as Ruby people like to do (&:foo for example) 11:57
So I think WhateverCode for example is still an "obvious solution" even though there are many other ways to do the same 11:58
(Am I rambling?)
masak arnsholt: nice to hear ;)
11:58 volpe left
masak arnsholt: come to think of it, PGE/GGE also checks what went wrong when things went wrong in their test suites. 11:59
arnsholt Probably a good idea. I try to make my tests robust 12:00
But since it's Prolog, a failing test often means that the test program starts backtracking all over the place =)
Which results in weirdness. But then the TAP harness will throw a fit, at least 12:01
donri TAP: I'm the author of a Python testing framework, would it benefit from a TAP outputter?
Sorry for the channel hijack ;) 12:02
flussence well, I've been running my perl6 tests with a test harness that was never designed for perl6, so I'd say it's a good idea :) 12:03
arnsholt That's a good question. But primarily one for the Python community I think
donri Then I can codename the release "Tap dancer" 12:04
12:06 tomaw joined 12:07 Hackbinary left 12:15 Mowah left 12:21 agentzh left
masak donri: sometimes I'm surprised that TAP isn't more widely adopted in other language communities. it's such a simple, straightforward protocol. 12:26
arnsholt Yeah, I really like it as well. The most important part is that it has an extremely low startup cost 12:28
All you need is to be able to run a program and write to a terminal
moritz_ and you don't need an XML writer :-) 12:29
arnsholt TAP really was an asset for my Prolog project, especially in the fledgling state it's in 12:30
s/was/is
masak in the past few years, I've picked up some Java testing framework or other, looked at its API, and then gone "screw it" and re-implemented a subset of TAP.
arnsholt I don't have all the needed control structures well-implemented enough to be able to reliably test all in Prolog
masak it's happened three or four times.
moritz_ masak: one would think that the second time, you have made the reimplementation reusable :-) 12:31
masak hm, maybe I did. don't remember :P
"copying over to the new project and modifying the copy" counts as re-use, right? :P 12:32
moritz_ to the first order, yes :-)
arnsholt testanything.org lists two TAP libs for Java, but only one looks really useful
tap4j
masak ooh 12:33
12:38 simon___ joined 12:39 gfldex left 12:43 cjk101010 left
masak one of the search hits that led people to my blog: "find out if a point is in a polygon with perl" 12:43
\o/
another: "the looting of manila" :P
moritz_ masak is having fun with log file analysis :-) 12:44
12:44 xinming left
masak yeah, sometimes when I remember that I have them. :) 12:45
12:45 xinming joined 12:51 mtk left
masak "can it be seen different ways by different people? frankenstein" -- someone must've been either disappointed, or shocked, or both. strangelyconsistent.org/blog/perl-6...-operators 12:57
mux I have to say it seems Perl 6 went a bit operator-crazy; and coming from someone deep in haskell-land, I think that tells a lot 12:59
while I don't know them very well, it seems to me that the so-called hyper-operator would have been advantageously replaced by the usual functional combinators
13:00 mtk joined
moritz_ but then you'd have to write &infix:<+> or &[+] to refer to a simple addition 13:00
masak mux: the hyper operators *are* functional combinators. 13:01
it's just a matter of representing them as meta-operators.
by the way, is there any reasonable use for [[+]] ?
mux masak: yes, they are combinators; my point is that I would have just had functions for those 13:02
masak (since [+] already recurses, I mean)
moritz_ std: 1 [+] 2
mux moritz_: I don't know about that
p6eval std 625303c: OUTPUT«ok 00:01 119m␤»
masak mux: they are sugar for functions.
huf does the actual name matter that much? it's a rose by any other name
13:02 gfldex joined
mux masak: yes, they are infix functions. still, you get my point, I hope. 13:02
masak huf: I'd rather write 'a + b' than 'add-numbers(a, b)' 13:03
mux infix functions of arity 2 if we want to be extra pedantic
huf masak: yeah, i didnt mean that well-chosen names dont matter,
masak mux: I think I get your point.
huf rather, why do people expect the name of everything to match \w+?
mux masak: but would you rather write zipWith (+) xs ys or xs <<+>> ys or whatever the hyper-operator for this is?
masak my point is that the hyperops are well-chosen names.
13:03 Vlavv left
moritz_ it' nicer to write @a Z+ @b than zipwith(&[+], @a; @b) 13:03
mux ah, Z+
masak mux: I think I prefer the latter. 13:04
mux moritz_: well, it's true that Perl's syntax for function application makes this a bit messy
moritz_ mux: that's why we have meta operators :-)
masak right. they're "just" sugar.
mux anyways, it's not like I think this is a major problem or anything
masak but they're sugar in the right place.
mux so, for instance, Z+ makes sense mostly because it is so ugly to write &[+] :-) 13:05
now, if I could write &[+] in a less noisy way...
moritz_ then you'd be programming haskell :-) 13:07
13:07 pmurias joined
moritz_ don't they use `+` for that? 13:08
pmurias no
they use `foo` to make an op out of a function
mux yeah, it's (+)
moritz_ ah, right 13:09
mux you enclose operators in brackets to use them prefix
and inversely, you enclose functions in backticks to make them infix
pmurias what i dislike about hyperops is that we have both a bunch of hyperops and a bunch of higher order functions
mux ie 3 `elem` [1..10] == True
mux starts a rakudo build for great justice 13:10
what, finished already?! 13:12
donri Does Perl 6 have something like Haskell `foo`? 13:16
13:17 Vlavv joined, stifynsemons joined
donri Surprised me that e.g. [say] 1,2,3 doesn't work 13:18
or for 1,2,3 &say 13:19
huf wouldnt [say] .... expand to 1 say 2 say 3 ?
which is nonsense 13:20
donri true, bad example
13:22 orafu joined
jnthn Operators have a bunch of associated meta-data that lets us know what makes sense to use in a meta-operator. 13:25
masak what's nice about the meta-data is that it's the *same* data that the parser uses. 13:26
13:26 nymacro left
masak thus, to learn Perl 6 is in a sense to learn how to make a programming language. 13:26
it's very meta.
13:31 jaldhar left
mathw Well, kind of 13:36
I do like the way Perl 6 doesn't shovel the details of things like how operators work under the carpet
you can pick them up and play with them right there in Perl 6
quite haskellish :) 13:37
13:38 skangas left, skangas joined, pmurias left 13:41 uvtc joined 13:43 plainhao joined
masak I see it play out in a couple of places in the language. 13:49
donri rakudo: say ([,] [1,2,3]).WHAT
say WHAT!
p6eval rakudo 6f9116: OUTPUT«Parcel()␤»
donri I love it when stuff is not just syntax
masak someone wants to muck with the OO system. Perl 6 says "here's how I do things through MOPs. feel free to tinker around".
someone wants to muck with sublanguages. Perl 6 goes "here are the primitives I use, things like grammars and operators and ASTs. feel free to extend and subclass as much as you want." 13:50
same thing with metaops. all the components for making a new one are already expressen through the language. 13:51
in fact, the language has evolved around those concepts.
daxim I want "dynamic views" on the source. one view is source code, another one class diagrams, another one flow control boxes.
or whatever people can come up with how to media-lise the underlying abstract source
programming is still so primitive :( 13:52
masak daxim: have you come across Boomerang and lenses yet? 13:53
daxim nope
masak that sounds like it could be the missing piece of that puzzle.
13:53 awoodland joined
masak I would like such views much better if they were intelligent enough to feed changes back to the model. 13:53
lenses give you that.
pyrimidine rakudo: (1,2,3)>>.say 13:58
p6eval rakudo 6f9116: OUTPUT«1␤2␤3␤»
masak pyrimidine: yes, that works. but don't do that unless you really don't care about the order of the output. 14:00
rakudo: .say for 1,2,3 # guarantees the order
p6eval rakudo 6f9116: OUTPUT«1␤2␤3␤»
pyrimidine yeah, that's what I was thinking as well, possibly running in parallel 14:01
masak indeed.
pyrimidine now just needs a keyboard shortcut for french quotes :)
masak it doesn't in Rakudo (yet), but it could, and then you'd have introduced undefined behaviour.
pyrimidine yep 14:02
masak ^K > > in vim.
C-u \ latin-1-postfix > > in Emacs.
er, C-u \ latin-1-postfix RET > > in Emacs.
pyrimidine likes the vim form better 14:03
mathw compose > > if you're running X and have a compose key in your keyboard layout
mathw likes compose keys
donri I predict `say .WHAT` will be a common debugging idiom 14:04
masak it already is :)
moritz_ or .perl 14:05
masak say .perl is useful, too.
moritz_ eveny say :$x.perl
s/y//
masak I tend to do say ($value1, $value2, $value3).perl a bit, too.
donri But those are not funny
masak oh, you wanted punniness? :P 14:06
uvtc With Emacs, "M-x ucs-insert bb <Ret>" seems to provide a 􏿽xBB
moritz_ all these emacs users must love typing... 14:07
masak warning! non-utf8 character detected! :)
uvtc: your client seems to be on latin-1.
moritz_: actually, much of it gets folded in by tabbing.
the tabbing in M-x is really good, and customizable. 14:08
uvtc The minibuffer pointed out to me that "C-x 8 RET bb RET" also works.
daxim compose, >, >
masak uvtc: cool! 14:09
daxim running emacs without taking advantage of X is… counter-productive
uvtc masak: I'm using xchat. (...looking for pref to tell it to use utf-8 encoded unicode...)
daxim xchat.org/encoding/ 14:10
uvtc 􏿽xABhm...􏿽xBB
daxim: thanks for the link! 14:11
masak can anything be done about the intermittent failure in t/spec/S02-builtin_data_types/instants-and-durations.t ? 14:12
moritz_ yes. 14:13
donri Wouldn't it be better if .perl was implied in the interactive rakudo 14:14
moritz_ nope
donri why?
moritz_ some .perl output is pretty huge
for example from nested match objects
14:14 fhelmberger joined
donri so then you add a say 14:15
moritz_ then you first get 20 pages full of output
because you didn't remember to add a say()
14:16 uvtc left, plobsing left
donri I guess .perl isn't exactly like Ruby's .inspect or Python's repr() 14:16
14:16 gimix left 14:17 uvtc joined
uvtc «test» 14:17
«test2»
14:18 masonkramer left
masak uvtc++ 14:19
donri Is there something more like repr() then?
moritz_ what does repr() do? 14:20
masak moritz_: in all fairness, the "lots of output" scenario could (and maybe should) be caught before outputting screenfuls of stuff.
donri Represent what an object is as a string, but not string adaption 14:21
moritz_ donri: what does that mean?
donri moritz_: Usually either like .perl, or for complex/large objects something less ambiguous than string adaption but not valid code, usually some variant of <TypeName extra info> 14:23
14:23 Vlavv left
moritz_ hm, we have a .dump method on Match objects which do roughly that 14:24
donri This works on anything though
14:24 rhr left
donri By calling __repr__ on the object, either overridden or inherited from "object" 14:24
moritz_ that's how .perl works too 14:25
donri <__main__.Foo object at 0x7ff3fa5c2bd0> # instance of custom noop class
Method 'perl' not found for invocant of class 'FileHandle' 14:26
moritz_ rakudo: class A { }; say A.new
p6eval rakudo 6f9116: OUTPUT«A()<0x3cf22f0>␤»
moritz_ donri: well, you can't serialize file handles. Still it should give something better
donri That's .Str though right?
moritz_: Yea, that's the point. 14:27
moritz_ that's .Str, yes
14:27 Axius joined
moritz_ so... .Str does the same as python's repr by default? 14:27
donri Python: <open file 'Perl 6/002.pl', mode 'r' at 0x7fe5ebb83c90>
moritz_: .Str seems more like str() in Python 14:28
repr() is more for debugging and str() for adaption/coercion 14:29
So, more like .perl but sensible for non-constant objects like file handles and complex objects like custom classes 14:30
14:30 tzhs left
donri .inspect in Ruby is the same as repr() 14:31
14:31 shortcircuit joined
uvtc moritz_: what are you using to syntax highlight Perl 6 snippets on your blog? 14:31
moritz_ uvtc: Text::VimColor 14:32
+ perl6.vim
uvtc moritz_: Ah. Thanks. 14:33
Incidentally, I notice that the Perl 6 Rosetta Code samples are syntax highlighted.
The site says they use GeSHi.
donri So do you agree that something more similar to repr and inspect might be useful, and if so what might should it be called?
uvtc Though I don't see Perl 6 listed in their Supported Languages list.
moritz_ I think shortcircuit adapted the p5 hilighter a bit
14:34 wtw left
moritz_ donri: I don't see why .perl shouldn't be up to the task, when modified to give sensible output on non-serializable data 14:34
donri moritz_: <moritz_> some .perl output is pretty huge 14:35
uvtc moritz_: I see. Thanks.
donri The point is that defaulting to .Str for the interactive shell is bad, but you say defaulting to .perl isn't good either 14:36
moritz_ I don't see why defaulting .Str is bad per se
donri 1, "1" and [1] all output the same
It's confusing.
And then sometimes you have to add parenthesis for .perl 14:37
moritz_ well, 1, "1" and [1] also behave similarly
14:37 Vlavv joined
donri Still, rather confusing for exploration as a beginner 14:38
At least some way to make it default to .perl would be useful
moritz_ but maybe a case could be made for a .pretty method that re-dispatches to .perl by default
shortcircuit moritz_: I didn't personally do anything with the p6 highlighter implementation. I started writing a langfile for it, but got pulled aside into other things and forgot.
donri .pretty sounds like it implies formatted .perl 14:39
14:39 mtk left
donri e.g. indentation and line wrapping 14:39
moritz_ shortcircuit: so are you using the p5 one right now?
donri which might be a good thing to have too
TimToady maybe we should have .python and .ruby methods too, which is why we have a .perl method, after all... :)
donri :D 14:40
shortcircuit moritz_: I don't think so; each language tag name goes to a separate rules file. I'll look to see what the story is, though. Sec.
donri A Perl 6 lexer for Pygments would be useful
Used on GitHub and many others
moritz_ agreed 14:41
donri: want to write one?
donri Not really, but I want one written, which may or may not lead to something
shortcircuit FWIW, the highlighter on RC doesn't do [much] actual syntactic analysis. I think its awareness is limited to whitespace and some custom per-language regex rules. 14:42
TimToady could add a switch to viv to emit various highlighter languages
arnsholt donri: A lexer for Perl 6 isn't an impossible task
shortcircuit Ah, yeah. Looks like the perl6 language file was adapted 2009/12/25 from the existing Perl5 language file.
arnsholt I think, at least
masak :) 14:43
donri resources for me or whoever: pygments.org/docs/lexerdevelopment/ and bitbucket.org/birkenfeld/pygments-....py#cl-811
shortcircuit moritz_: ^^
14:43 mtk joined
arnsholt And you can probably get a fair amount of inspiration from Rakudo and STD's grammars 14:43
moritz_ shortcircuit: thanks
masak lexing double-quoted strings is about as hard as parsing double-quoted strings.
moritz_ and a proper lexer must keep track of terms vs. operators 14:44
so it needs a symbol table too
masak and LTM.
donri Is that important for simple syntax highlighting?
moritz_ I guess it can cheat wrt LTM 14:45
TimToady if a highlight language is turing complete you could write a Perl 6 VM in it... :)
shortcircuit moritz_: If you're interested in the specifics: geshi.svn.sourceforge.net/viewvc/ge...iew=markup
masak donri: depends how much you care about it making mistakes.
zenog One question about Rakudo Star: Is there a reason why there is no readline support?
14:45 stifynsemons left
masak zenog: there is readline support. 14:45
moritz_ donri: well, if it doesn't keep track of term vs. operators, it doesn't get regex boundaries right
zenog masak: Hm. 14:46
donri zenog: install libreadline-dev
uvtc shortcircuit++
shortcircuit: thanks
moritz_ and then configure rakudo again
and parrot
well, the other way round :-)
donri moritz_: is that true for perl5 too?
moritz_ donri: yes
zenog donri: Thanks, did not have that ... 14:47
donri i mean if bitbucket.org/birkenfeld/pygments-....py#cl-811 is enough, maybe it's enough to adapt that
that's for perl5
shortcircuit uvtc: rosettacode.org is used as a guinnea pig/testing environment for BenBE (the guy behind GeSHi) to get real testing and coverage, so it tends to get patches and updates before official releases.
zenog moritz_: Devel::REPL works for me.
shortcircuit Also saves me from having to maintain that particular nightmare. :)
uvtc shortcircuit: ha. :) 14:48
masak donri: by experience, I'd say a syntax highlighter that can't correctly find the ends of strings is almost completely worthless.
14:48 MayDaniel left
donri masak: so is the highlighting of perl5 on github etc useless? 14:48
masak donri: I don't know. I haven't paid much attention to it.
donri I even find it helpful for perl *6* :P 14:49
masak I generally pay attention when I have to edit code in it :)
donri yea but pygments isn't really for editors 14:50
more for pastebins, blogs, source previews, documentation
masak it would seem to me that the basic problem is the same. 14:51
but I might be mistaken.
donri point is that it's not end of the world if it gets something complicated and rare wrong
uvtc I use Pandoc mostly for writing documentation. It provides source code highlighting for a number of languages. 14:52
14:52 ymasory joined
masak donri: for some reason, cperl-mode does a really decent job syntax-highlighting Perl 6, even though it wasn't designed for it. 14:53
donri: my guess is that they spent a good deal of effort thinking about failure modes, and it paid off.
donri Likely pandoc uses Kate's parser
uvtc I think it uses "highlighting-kate" to do syntax highlighting.
donri: yes 14:54
14:55 mkramer joined
donri I wonder if a generic Kate lexer could be written for Pygments 14:55
uvtc: does it do perl6?
uvtc donri: no 14:56
Oh, highlighting-kate is a Haskell lib written by the author of Pandoc. johnmacfarlane.net/highlighting-kate/ 15:01
zenog Another question: Is there something equivalent to my "@sorted = @unsorted.sort: { .lc };", but for hash keys instead of methods?
15:01 Chillance left
moritz_ .sort: { %lookup{$_} } 15:02
donri uvtc: yea but it's merely a binding to the parser used by the kate editor 15:04
uvtc So, it would seem that what's required for highlighting-kate to support Perl 6 is a Kate description file for it.
zenog moritz_: Thanks!
15:07 kaare_ left
zenog moritz_: Oops I guess I meant something different: I have hashes in the array, and I always want to get the value denoted by a certain key. 15:09
e.g. this does not work: ( { key => 1 }, { key => 2 }).max: { $_{key} 15:10
neither this: ( { key => 1 }, { key => 2 }).max: { $_->{key}
(forgot the closing })
masak rakudo: my @a = { foo => 2 }, { foo => 1 }; say (@a.max: { .<foo> }).perl 15:11
p6eval rakudo 6f9116: OUTPUT«{"foo" => 2}␤»
moritz_ rakudo: say ( { key => 1 }, { key => 2 } ).max: { .<key> }.perl
p6eval rakudo 6f9116: OUTPUT«Unable to handle non-closure Ordering yet␤ in 'Any::max' at line 1567:CORE.setting␤ in main program body at line 22:/tmp/sQWHSo_c_3␤»
moritz_ rakudo: say ( { key => 1 }, { key => 2 } ).max( { .<key> }).perl
p6eval rakudo 6f9116: OUTPUT«{"key" => 2}␤»
moritz_ ah, masak++ was faster
aka "seems to work here"
zenog: the problem is that you didn't read the error message, I guess :-) 15:12
zenog yeah!
moritz_ rakudo: key
p6eval rakudo 6f9116: OUTPUT«Could not find sub &key␤ in main program body at line 22:/tmp/xIIsY4Qpml␤»
moritz_ my %h = key => 2; %h{key}
rakudo: my %h = key => 2; %h{key}
p6eval rakudo 6f9116: OUTPUT«Could not find sub &key␤ in main program body at line 22:/tmp/L8ZpxUilBu␤»
mathw nooooo
take away the barewords
moritz_ rakudo: my %h = key => 2; %h{'key'}
mathw I'll talk!
p6eval rakudo 6f9116: ( no output )
zenog moritz_: Well. The problems was more that I could not make anything out of it. 15:13
moritz_ rakudo: my %h = key => 2; %h<key>
p6eval rakudo 6f9116: ( no output )
moritz_ std: my %h; %h{key}
p6eval std 625303c: OUTPUT«ok 00:01 120m␤»
zenog rakudo: ( { key => 1 }, { key => 2 }).max: { .<key> }
p6eval rakudo 6f9116: ( no output )
moritz_ std: key
p6eval std 625303c: OUTPUT«ok 00:01 117m␤»
moritz_ std: fooobar
p6eval std 625303c: OUTPUT«===SORRY!===␤Undeclared routine:␤ 'fooobar' used at line 1␤Check failed␤FAILED 00:01 117m␤»
15:14 risou joined
moritz_ why is key() a known routine to std? 15:14
what does it do?
zenog rakudo: say ( { key => 1 }, { key => 2 }).max: { .<key> }.perl
p6eval rakudo 6f9116: OUTPUT«Unable to handle non-closure Ordering yet␤ in 'Any::max' at line 1567:CORE.setting␤ in main program body at line 22:/tmp/PJ0wdKrBJA␤»
moritz_ precedence.
mathw zenog: I think it's parsing it differently to how you want it to, and that's why it works oddly.
moritz_ rakudo: say { .key }.perl 15:15
zenog Hm. It works on the Rakudo Star I have installed, but not here on the channel.
p6eval rakudo 6f9116: OUTPUT«{ ... }␤»
masak std: value
p6eval std 625303c: OUTPUT«ok 00:01 117m␤»
mathw this string doth not a good sorting routine make 15:16
zenog this here works with Rakudo Star 2011.01: (( { key => 1 }, { key => 2 }).max: { .<key> })<key>
moritz_ rakudo: (( { key => 1 }, { key => 2 }).max: { .<key> })<key> 15:17
masak IIRC, the syntax max: { ... }.perl *should* work by spec, but doesn't in Rakudo yet.
p6eval rakudo 6f9116: ( no output )
moritz_ rakudo: say (( { key => 1 }, { key => 2 }).max: { .<key> })<key>
p6eval rakudo 6f9116: OUTPUT«2␤»
moritz_ zenog: and it works here too.
star: say (( { key => 1 }, { key => 2 }).max: { .<key> })<key>
p6eval star 2010.09: ( no output )
moritz_ hm
it's a bit old-ish :-)
zenog moritz_: The one that returned the hash instead of the value did not ... 15:18
moritz_: But that could be the version then ;-)
15:19 cotto joined 15:21 mfollett joined 15:27 stifynsemons joined 15:31 sftp joined
sorear good * #perl6 15:31
zenog: hi!
zenog: are you still going to do 1.5? 15:32
15:34 perlpilot joined
zenog sorear: Same answer as last time :-( 15:34
sorear masak: perl6.vim is fine for static higlighting, but is unusably slow if I want to type code in the middle of STD.pm6. 400+ ms lag per character. Usually I use :set ft=perl while editing... 15:42
zenog: I'm planning to do it myself today, sorry. 15:43
15:43 V15170R joined 15:44 mfollett left
zenog sorear: No problem, I'd be actually happy about it. 15:47
sorear TimToady: have you read use.perl.org/~Alias/journal/35508 yet? 15:48
15:48 Axius left 15:51 mfollett joined, flw_ joined 15:52 mfollett left 15:53 mfollett joined 15:54 flw_ is now known as flw, flw left 15:55 kaare_ joined
TimToady sorear: um, yeah, I read it something like 3 years ago... 15:55
moritz_
.oO( Alias scares the hell out of me ) :-)
15:57
15:57 risou_ joined
perlpilot moritz_: Must be an Australian thing ;) 15:58
(unless you are one of the few people who isn't scared by Damian) 15:59
15:59 bemjb joined
uvtc I've seen a lot of "Perl 6 scares me" comments online, but most seem to be centered around syntax (ex. sequence ops, meta ops, hyper ops). 15:59
masak Perl 6 has a Smalltalk-esque streak of not being handleable by anything other than Perl 6. I guess that's what Alias is talking about, wrt parsing.
(and it's true)
flussence aaaahhhh! new things! panic!
moritz_ perlpilot: I never met Damian 16:00
perlpilot I'm giving a lightning talk later today to some college students on a few of the things I think are cool in Perl 6. I'll see how scared they are vs. excited.
V15170R i kinda like the idea behind grammars but i don't quite get it...
16:00 risou left
V15170R if i want to parse an XML, grammars should be the way to do it? 16:00
moritz_ yes
perlpilot V15170R: A way. yes
uvtc I think people will be a lot less frightened of Perl 6 if they first see the "baby Perl 6" way of doing things, before being shown the fancier acrobatics that are possible. 16:01
That is, the "Perl 6 as a better Perl 5" way of doing things. 16:02
perlpilot uvtc: people are strange.
colomon V15170R: are you familiar with things like lex, yacc, bison, antlr? 16:03
perlpilot half of them will be scared and the other half will be excited. When you show them baby perl 6, half of them will be happy and half of them will ask "that's it?"
donri V15170R: if you're parsing with "pure perl 6", grammars is the best way to handle complexity.
masak V15170R: people tend to want to use gramamrs for parsing XML. and while grammar are very-well suited for parsing XML (much better than regexes alone), it's probably not the best way to parse XML. :)
depending on your requirements, of course. 16:04
donri Binding libxml2 is perhaps the "best" way 16:05
uvtc perlpilot: The impression I get online is that a non-trivial number of people see some Perl 6 syntax and think/write "Yikes! Those Perl 6 people have gone off the deep end".
[Coke] lots of people think that about much of perl6. 16:06
TimToady someone has to go off the deep end occasionally
donri When I see Perl 6 code, even before, my reaction was usually "that looks much more sane than Perl 5" (speaking as someone who don't really use Perl 5)
TimToady yes, the deep end we go off of is (we hope) deeply sane 16:07
V15170R no, colomon, i've never worked with those tools...
16:07 plobsing joined
donri TimToady: :D 16:08
colomon V15170R: ah. Well, grammars amount to making that sort of tool an integral part of the language, instead of an ugly, hard-to-use add-on. 16:09
perlpilot uvtc: greatness is rarely apprehended universally or even by a majority at first. People need time to understand it.
[Coke] perlpilot: haugtiness, however, is caught right out. 16:10
sorear uvtc: the difference is that Alias has been vindicated by history
[Coke] thinks that might be missing an aitch.
uvtc Quick example: the 99 bottles of beer RC sample. rosettacode.org/wiki/99_Bottles_of_Beer#Perl_6
sorear "You end up with a language which is expressive as hell, but where the most sophisticated editor you can create is vi (with no syntax highlighting allowed)." # THIS IS MY LIFE TODAY
donri I said the other day, it's probably easy to abuse Perl 6 ("Why Perl 6 scares the hell out of me") but probably also easier to write quality code with it vs others like perl5
It's about culture and best practices 16:11
An expressive language allows exploring and discovering good practices
uvtc I think that scares people. It could use a simple "normal code" example shown first.
perlpilot sorear: that's funny given Alias helped make Padre.
masak sorear: mine too.
but I do believe that Perl 6 allows for Eclipse-style refactoring. and I intend to explore that avenue at some point. 16:12
sorear perlpilot: Alias' relationship to Padre is a good a-priori reason to trust him on toolchain issues
donri I mainly use Python, which supposedly tries to keep you from abusing the language. But the reality is, you can abuse the shits out of Python; it's mainly culture that prevents people from doing so.
[Coke] doesn't know anyone who actually uses refactoring tools.
perlpilot [Coke]: I use some of the simple ones available in Padre.
[Coke] tends to hand roll that. but then, I often use vi with no syntax highlighting.
colomon neither (what [Coke] said)
donri The result instead is that when there's a proper use case for "abusing" Python, it might require what is arguably a hack 16:13
zenog [Coke]: I use them for Perl, Java, and C#. It is way more productive than doing that by hand or search and replace. You never want to go back.
[Coke]: It is the same thing as with version control.
perlpilot sorear: except that you're looking at a snapshot in time from before Padre existed. :)
16:13 byzas left
masak uvtc: that is not at all how I'd implement "99 bottles" in Perl 6, fwiw. 16:13
colomon I thought I established yesterday that using Z like that didn't work in Rakudo atm? 16:14
masak uvtc: it's a very extravagant solution, in that it reaches for sequence operators and parallel looping.
but it used to.
as evidenced by the comment above that code.
zenog Question: Is there a thing that I can call after BUILD, without having to rewrite BUILD?
sorear Question not understood. 16:15
masak ditto.
perlpilot zenog: sounds like you want to .wrap BUILD ?
colomon masak: when was Thousand Oaks?
masak why wrap a submethod?
colomon: dunno. a year or so ago?
16:15 pigdude joined
TimToady is this an XY problem? 16:15
masak colomon: October 2009. 16:16
perlpilot colomon: Oct 2009
16:16 Patterner left
colomon masak: ah, so alpha, then. 16:16
perlpilot (I released it :)
colomon perlpilot++
masak perlpilot++
colomon: yes. it worked on alpha.
zenog perlpilot: Not sure. 16:17
perlpilot zenog: Why do you want to call something after BUILD?
16:18 Psyche^ joined, Psyche^ is now known as Patterner
zenog perlpilot: I just want to set some attributes depending on the value of some others. 16:18
uvtc I think the Rosetta Code Perl 6 samples need to have both easily-digestible Perl-5-ish examples as well as more modern Perl-6-ish ones. Yes, I know, "well-volunteered".
zenog perlpilot: Say the object gets passed some data, and some attributes are the statistics of that data.
perlpilot: Is there lazy building of objects in Perl 6, like in Moose? 16:19
flussence
.oO( vague project suggestion for 2011: make a faster vim )
dalek ecza: dc52195 | sorear++ | lib/SAFE.setting:
Implement Capture.perl
16:20
ecza: c2ca536 | sorear++ | lib/CLRBackend.cs:
[clr] Generate verifiable code by default (these segfaults are getting irritating)
perlpilot zenog: "lazy object building" is in my mental model of Perl 6, but I don't think anyone has implemented it 16:21
16:22 V15170R left
zenog perlpilot: Anyway, I coded around it ... just reimplemented BUILD from scratch. 16:23
16:24 simon___ left
masak rakudo: my $b = 2; sub b($b) { "$b bottle{$b == 1 ?? "" !! "s"} of beer" }; repeat while --$b { .say for "&b($b) on the wall", b($b), "Take one down, pass it around", "&b($b-1) on the wall", "" } 16:24
perlpilot zenog: that sounds wrong.
p6eval rakudo 6f9116: OUTPUT«2 bottles of beer on the wall␤2 bottles of beer␤Take one down, pass it around␤1 bottle of beer on the wall␤␤1 bottle of beer on the wall␤1 bottle of beer␤Take one down, pass it around␤0 bottles of beer on the wall␤␤»
masak there, that's my submission.
16:25 domidumont1 left
masak rakudo: my $b = 2; sub b($b) { "$b bottle{"s".substr($b == 1)} of beer" }; repeat while --$b { .say for "&b($b) on the wall", b($b), "Take one down, pass it around", "&b($b-1) on the wall", "" } 16:26
p6eval rakudo 6f9116: OUTPUT«2 bottles of beer on the wall␤2 bottles of beer␤Take one down, pass it around␤1 bottle of beer on the wall␤␤1 bottle of beer on the wall␤1 bottle of beer␤Take one down, pass it around␤0 bottles of beer on the wall␤␤»
flussence {'s' if $b != 1}
masak I could do it that way, but Randal Schwartz might shoot me :P
colomon masak++
masak flussence: that would give a Nil, I think.
donri "In the case of variables, this means that in scripts and modules, lexical variables (à la strict) are the default, but in those -e one-liners the default is package variables." -- is there a "use nonstrict;"? :P
masak donri: 'no strict' 16:27
flussence hm
masak donri: NYI in Rakudo.
donri aha, what specifically is 'no'?
zenog perlpilot: Well ... the code needs to run somehow ...
masak donri: 'no' cancels out a 'use'.
donri masak: does that work for anything?
16:27 sftp left
masak donri: to a first approximation, yes. 16:28
flussence {"s"[$b==1]}
perlpilot zenog: Are you talking about inheriting from another class except that the derived class wants to set some attributes based on the value of others? 16:29
16:29 nymacro joined
masak flussence: no .[] on Str. 16:30
zenog perlpilot: No inheritance, I just want to have method to set up my data, i.e., implement the constructor myself.
flussence rakudo: say ("s"[$_==1]).perl for 0..4
p6eval rakudo 6f9116: OUTPUT«"s"␤undef␤"s"␤"s"␤"s"␤»
flussence rakudo: say ("s"[$_==1]) for 0..4 16:31
p6eval rakudo 6f9116: OUTPUT«s␤s␤s␤s␤»
[Coke] gets his first perl6 bug sent to perl5-porters.
zenog perlpilot: Ah, there is also new that I can define ... so forget what I said ...
flussence rakudo: say "bottle{"s"[$_==1]}" for 0..4
p6eval rakudo 6f9116: OUTPUT«bottles␤.[Bool::True] out of range for type Str()␤ in <anon> at line 1␤ in <anon> at line 22:/tmp/6v3XUEO89o␤ in main program body at line 1␤»
perlpilot zenog: so, I don't understand in what context you're rewriting BUILD then. IF it's your class, you already wrote BUILD and would just add a bit of extra code at the end.
flussence oh, thought so
(and it looked so promising with perl6 -e ...)
rakudo: say "bottle{"s "[$_==1].trim}" for 0..4 16:32
p6eval rakudo 6f9116: OUTPUT«bottles␤Method 'trim' not found for invocant of class 'Failure'␤ in <anon> at line 22:/tmp/1mapvnWJf2␤ in main program body at line 1␤»
perlpilot zenog: Also ... it's a good thing you said "no inheritance" because I had my "YOU'RE DOING IT WRONG" all ready to go if you hadn't :)
masak notice, people, how easily we get "bottle{"s"[$_==1]}". now write a lexer that finds the right ending " :) 16:33
TimToady One-Pass Parsers "Я" Us! 16:34
masak ;)
16:34 neroxx joined
masak Ya. 16:34
TimToady Right you ᴚ. 16:35
[Coke] you square box, you. :P 16:37
perlpilot zenog: you still may be doing it wrong if you're going to write your own .new() BUILD is for "setting up your data"
zenog perlpilot: Yeah but BUILD complains that the data does not exist. 16:38
Perl 6 may still not be the perfect thing for impatient people like me ;-) 16:39
masak zenog: time for a nopaste!
I tend to write my own .new when I want to override the way arguments are passed.
zenog nopaste.info/5210b5d0b0.html 16:41
16:41 estrabd_afk is now known as estrabd
zenog You have all seen that beast already ;-) 16:41
sorry, it is not a minimal example
perlpilot zenog: so, the stuff from lines 62-73 is what you want to happen at .new-time? 16:42
i.e. it would be in a BUILD?
masak line 60 looks suspicious. 16:43
16:43 s1n left
masak first argument to .bless should be self.CREATE 16:43
and then you need to | the %args
[Coke] zeong;is it really teh IO that take 60s, or is it that plus the data manipulation?
zenog masak: I "copied" it from the Perl 6 book.
perlpilot [Coke]: I'd wager it's really the IO
zenog [Coke]: IO. Data manipulation is also _dead_ slow. 16:44
masak zenog: huh.
[Coke] even raw parrot IO ain't that slow, is it?
zenog [Coke]: I am not sure whether it is actually the IO, or some slow-down due to problem with memory management etc. 16:46
[Coke]: to be honest, I have no idea ;-)
perlpilot [Coke]: the slowness could come from the Perl 6 wrapper around the Parrot IO, but I've noticed that IO in Rakudo seems alt slower than it should as well. 16:47
s/alt/alot/
masak s/alot/a lot/ :)
plobsing there's stuff other than reading going on in those loops. instance creation and/or array.push could be the choke point. 16:48
zenog plobsing: indeed
masak hyperboleandahalf.blogspot.com/2010...thing.html
[Coke] builds a copy of rakudo to play with this.
plobsing zenog: You should try to isolate which of these is the problem. Try just reading, or reading + pushing, or reading + instantiating. Figure out where the cost is. I highly doubt IO accounts for all of it. 16:49
[Coke] zenog: can you give me a URL to the dataset so I don't have to guess? 16:50
zenog [Coke]: www.grouplens.org/system/files/ml-data.tar__0.gz
perlpilot masak: We are the music makers and we are the dreamer of dreams. :) 16:51
zenog I now side-stepped the problem and do the computation of num_users/num_items it externally (out of the class code): nopaste.info/cd9e033893.html 16:52
16:52 neroxx left
zenog It is also more correct, because there may be new users/items in the test data, so I am basically not able to set it correctly just using the data that is passed to the object. So forget about that constructor issue ... 16:53
[Coke] just saw 'perl6.1' go by in the install logs and was freaked out for a sec. 16:56
zenog: ... what's the command line invocation needed? takes 2 args, but help only mentions 1 file. 16:57
16:58 risou joined
zenog [Coke]: use the same file twice 16:58
[Coke]: don't use the complete file, but only say 1K or 10K lines ;-)
[Coke] k.
No such attribute '@!rating_data' in class 'MatrixFactorization' 17:00
dalek ecza: ca96dd2 | sorear++ | / (2 files):
Implement \(1) capture syntax
17:00 risou_ left
sorear now I just need it to stop segfaulting 17:01
zenog [Coke]: Try this one: nopaste.info/cd9e033893.html 17:02
17:02 perlpilot left 17:05 fhelmberger left
[Coke] zenog: ok. that one's getting further... 17:09
17:10 skangas_ joined
sbp rakudo: my token abc { example }; say 'example' ~~ /<&abc>/ 17:10
p6eval rakudo 6f9116: OUTPUT«example␤»
sbp why <&abc> there? why not <abc>?
rakudo.org/status doesn't mention this, it seems 17:11
17:11 MayDaniel joined
[Coke] so you can refer to it as abc when interrogating the match, I think. 17:11
17:12 skangas left, lopaway left, robinsmidsrod left, lopaway joined, skangas_ is now known as skangas
[Coke] whoops. misread S05. 17:12
S05 //"a leading & unambiguously calls a routine instead." 17:13
sbp rakudo: my token abc { example }; say 'example' ~~ /<abc>/
p6eval rakudo 6f9116: OUTPUT«Method 'abc' not found for invocant of class 'Cursor'␤ in <anon> at line 22:/tmp/isUu8Y2Afl␤ in 'Cool::match' at line 2637:CORE.setting␤ in 'Regex::ACCEPTS' at line 6202:CORE.setting␤ in main program body at line 22:/tmp/isUu8Y2Afl␤»
sbp a token is not a routine, no?
17:13 robinsmidsrod joined 17:14 s1n joined
jnthn rakudo: my token abc { example }; say 'example' ~~ /<&abc>/ 17:14
p6eval rakudo 6f9116: OUTPUT«example␤» 17:15
jnthn If you're finding it in the lexical scope rather than as a method, need to say so.
sorear rakudo: say [\>] 1, 2;
p6eval rakudo 6f9116: OUTPUT«Bool::TrueBool::False␤»
sorear hi jnthn
jnthn o/ sorear
sbp jnthn: than as a method of a grammar?
jnthn sbp: Yeah. Though grammars are just classes really :) 17:16
sbp gotcha, makes sense. thanks!
jnthn And regex/token/rule are just methods with a different syntax on the inside.
17:17 awoodland left
TimToady well, we're about to wander off from COSBI toward Africa, so it's likely a couple days till we have internet again 17:20
Tene rakudo: grammar Foo { token fu { ^ f+ u+ $ } }; say 'fffffffuuuuuuuuuuu' ~~ /<&Foo::fu>/;
p6eval rakudo 6f9116: OUTPUT«Null PMC access in invoke()␤ in <anon> at line 1␤ in 'Cool::match' at line 2637:CORE.setting␤ in 'Regex::ACCEPTS' at line 6202:CORE.setting␤ in main program body at line 22:/tmp/zQG25C_RKG␤»
jnthn Crappy error, but it shouldn't work.
TimToady: Have a safe journey
[Coke] TimToady: have fun! 17:21
jnthn Yes, that too :)
[Coke] ... assuming it's that kind of trip.
TimToady from time to time
[Coke] .g COSBI
phenny [Coke]: www.cosbi.eu/
Tene jnthn: what's the right way to do that, then?
TimToady y'all be good 17:22
Tene jnthn: I mean, there's Foo.parse(,:rule<fu>), but then I can't do anything else inside my match. Does that mean that I have to write a grammar that inherits from Foo?
TimToady ciao &
jnthn Tene: <Foo::fu> in theory should work, but I think pmichaud had some implementation questions/concerns about it. 17:23
sbp takes a peek at github.com/masak/perl6-literate
17:23 pigdude left, pigdude joined
Tene Yeah, I remember that too. I didn't know if that had been discussed further or not. 17:24
17:24 rhr joined
sorear I don't like <Foo::fu>; it falls apart if <fu> wants to use subrules expecting grammar Foo 17:24
[ :lang(Foo) <fu> ] makes more sense, and has the advantage of working in at least two implementations of p6regex 17:25
Tene sorear: I think that was included in pm's concerns.
sbp rakudo: grammar Foo { token fu { ^ f+ u+ $ } }; say 'fffffffuuuuuuuuuuu' ~~ /[ :lang(Foo) <fu> ]/;
Tene rakudo: grammar Foo { token fu { ^ f+ u+ $ } }; say 'fffffffuuuuuuuuuuu' ~~ /[ :lang(Foo) <fu> ]/;
p6eval rakudo 6f9116: OUTPUT«===SORRY!===␤Confused at line 22, near "say 'fffff"␤»
Tene ^5 sbp
⁵ might be better 17:26
sbp heheh
sorear niecza: grammar Foo { token fu { ^ f+ u+ $ } }; say 'fffffffuuuuuuuuuuu' ~~ /[ :lang(Foo) <fu> ]/;
p6eval niecza v2-74-gc2ca536: OUTPUT«fffffffuuuuuuuuuuu␤»
Tene :D
17:27 justatheory joined 17:28 kjeldahl left
colomon sorear++ 17:31
17:33 qwkl joined
qwkl hello 17:33
colomon \o
17:33 Bzek left 17:34 V15170R joined
sorear hello 17:34
qwkl is this the correct syntax to pass-through an indeterminate number of arguments:
-> *@args { g(|@args) }
17:34 sftp joined
masak qwkl: looks right. 17:35
17:35 MayDaniel left, stifynsemons left
sorear qwkl: better to use -> |$args { g(|$args) } 17:35
17:35 cdarroch joined, cdarroch left, cdarroch joined
sorear a slurpy array will 1. not pass-through named arguments 2. lose parcel structure 17:35
suppose you have a call func(@a, @b) and a definition sub func(@x, @y) { ... } 17:36
using a slurpy in the middle breaks that
a capture won't
qwkl thanks, I got it..
rakudo: sub Y(&f) { my &g = do { f(-> |$args { g(|$args) }) } }; say Y(-> &fac { -> $n { $n > 1 ?? $n * fac($n - 1) !! 1 } })(6);
p6eval rakudo 6f9116: OUTPUT«720␤»
qwkl ^^ a Y combinator in Perl 6 17:37
sorear You could probably make that more elegant with .assuming 17:38
colomon woah, -> |$args already works in rakudo? jnthn++
sorear colomon: it hasn't worked basically forever? 17:39
rakudo: say ~[\>] 3,2,1,1,2,3
colomon sorear: it's news to me. I assumed you were doing something that only worked in niecza.
p6eval rakudo 6f9116: OUTPUT«Bool::True Bool::True Bool::True Bool::False Bool::False Bool::False␤»
sorear hah
sigs and stuff are a LOT further along in Rakudo atm
jnthn |$args has worked since quite a while. :) 17:40
[Coke] jnthn++ 17:41
17:41 takadonet joined
takadonet hey all 17:41
17:41 takadonet left
[Coke] is interested to look more at zenog's speed issues but $dayjob calls. 17:42
jnthn ...short visit!
PerlJam drive by greeting
masak his client got overloaded by the greeting...
17:42 takadonet joined
takadonet lets try this again... 17:42
masak takadonet: \o
17:42 stifynsemons joined
PerlJam takadonet: we didn't even get a chance to hug you the first time! 17:43
takadonet PerlJam: I know. I just saw the irc log
I been reading it all morning
zenog [Coke]: I tried different variants of IO/data structure creation, here are some results: nopaste.info/90763f2c7b.html
takadonet should just join the channel instead of refreshing the page 17:44
17:47 Guest57743 left 17:48 daxim left, ymasory left 17:51 nadim joined
zenog Is it a feature that arrays are not interpolated any more? 17:51
moritz_ zenog: see S02 on string literals
masak rakudo: my @a = 1,2,3; say "OH @a[] HAI" 17:52
p6eval rakudo 6f9116: OUTPUT«OH 1 2 3 HAI␤»
jnthn rakudo: my @a = 1,2,3; say "OH @a HAI"
p6eval rakudo 6f9116: OUTPUT«OH @a HAI␤»
jnthn :)
zenog ah
jnthn No email addresses in double quoted strings won't get screwed up :) 17:53
*Now
dukeleto rakudo: my @a = 1,2,3; say "OH @a() HAI"
p6eval rakudo 6f9116: OUTPUT«invoke() not implemented in class 'Array'␤ in main program body at line 22:/tmp/3k3bg2bEQf␤»
dukeleto hmm, that used to work, methinks
sorear you can also use {@a}
jnthn dukeleto: It's correct.
dukeleto: You tried to invoke it.
rakudo: my @a = 1,2,3; @a() # just like this 17:54
p6eval rakudo 6f9116: OUTPUT«invoke() not implemented in class 'Array'␤ in main program body at line 22:/tmp/0ibgbyfkbN␤»
sorear niecza: my @a = 1,2,3; say "OH @a() HAI"
p6eval niecza v2-75-gca96dd2: OUTPUT«Unhandled exception: Unable to resolve method INVOKE in class Array␤ at /tmp/KbPGUNxUix line 1 (MAIN mainline @ 4)␤ at /home/p6eval/niecza/lib/SAFE.setting line 1106 (SAFE C467_ANON @ 2)␤ at /home/p6eval/niecza/lib/SAFE.setting line 1107 (SAFE module-SAFE @ 32)␤ at
../home/p6eval…
sorear huh. niecza seems to be parsing [!=] as [![=]] 17:59
17:59 kjeldahl joined
moritz_ niecza: say 1 != 3 17:59
p6eval niecza v2-75-gca96dd2: OUTPUT«Bool::True␤» 18:00
moritz_ niecza: 1 = 2
p6eval niecza v2-75-gca96dd2: OUTPUT«Unhandled exception: assigning to readonly value␤ at /tmp/QeFFg8oufT line 1 (MAIN mainline @ 1)␤ at /home/p6eval/niecza/lib/SAFE.setting line 1106 (SAFE C467_ANON @ 2)␤ at /home/p6eval/niecza/lib/SAFE.setting line 1107 (SAFE module-SAFE @ 32)␤ at
../home/p6eval/niecza/lib/SAFE.se…
sorear moritz_: it's only happening inside reduce metaops
moritz_ ah
18:01 envi left
moritz_ niecza: say [!=] 1, 1 18:01
p6eval niecza v2-75-gca96dd2: OUTPUT«===SORRY!===␤␤This macro cannot be used as a function at /tmp/cwE4ah2GQE line 1:␤------> say [!=]⏏ 1, 1␤␤Unhandled exception: Check failed␤␤ at /home/p6eval/niecza/boot/lib/SAFE.setting line 377 (SAFE die @ 2)␤ at
../home/p6eval/niecza/src/STD.p…
sorear if you insist
dalek ecza: ef92f25 | sorear++ | / (3 files):
Test mergeback
ecza: 81aba73 | sorear++ | lib/SAFE.setting:
Add the reduce metaoperator
ecza: f79241a | sorear++ | src/Operator.pm6:
Fix [!%%] et al
qwkl actually, my Y had an unnecessary closure; afaict, sub Y(&f) { my &g = f({ g(|$^args) }) } is a valid fixed-point combinator, fully equivalent to the default implementation of Y... 18:07
18:09 gdey joined
moritz_ nothing a &?BLOCK or &?ROUTINE wouldn't solve, once that's implemented :-) 18:11
dalek tpfwiki: (Herbert Breunung)++ | www.perlfoundation.org/perl6/index....dex_tablet 18:12
18:15 V15170R left
dalek ecza: ace95a1 | sorear++ | lib/SAFE.setting:
Fix right-associative triangle reduce, decontainerization
18:20
ecza: 8bd6b3b | sorear++ | / (2 files):
Add reduce.t to run_spectests
ast: c8e9e01 | sorear++ | S03-metaops/reduce.t:
Fudge reduce.t for niecza
zenog & 18:21
18:21 zenog left
dalek ast: ae2a2d8 | sorear++ | S02-builtin_data_types/autovivification.t:
Unfudge autovivification.t for niecza a bit more
18:34
ecza: 0668028 | sorear++ | src/niecza:
Implement is readonly parameter trait
moritz_ sorear: are you aware of autounfudge and update_passing_test_data in the rakudo repo? 18:38
sorear: should be quite easy to adapt for niecza 18:39
sorear vaguely
I'll check them out
moritz_ in fact I once ran update_passing_test_data against niecza, which provided the first batch of passing spectests
sorear oh, niece! 18:40
moritz_ both expect a t/spectest.data
sorear er. nice. can't spell :)
moritz_ and I wanted to write the corresponding harness in perl6
which is why I want run() in niecza :-)
18:40 tty234_ is now known as tty234
sorear How is the top level $UNIT::_ initialized? Does it bind to $SETTING::_ ? 18:41
sorear would vaguely prefer separate units to not share globals like that
moritz_ I think $UINT::* can be copied from $SETTING::* 18:42
and since all the routines are immutable, you can cheat there 18:43
hm, but classes are mutable...
sorear Copied, or bound?
moritz_ i thought of assignment actually
not sure if that works out
sorear I think $_ is supposed to alias $OUTER::_; it's is rw etc
I think the sensible thing for &run to do is a runtime probe for Mono.Posix, and use execve if available, otherwise we must be on Windows with .NET, so emulate perlwin32's system emulation :) 18:44
moritz_ niecza: use fatal; 18:47
p6eval niecza v2-80-g8bd6b3b: ( no output )
18:47 gdey left 18:48 risou left 18:52 qwkl left 19:00 ymasory joined 19:01 REPLeffect joined 19:24 gbacon_ left 19:26 uvtc left
moritz_ niecza: $_ = 'a'; .say if /b/ 19:27
p6eval niecza v2-80-g8bd6b3b: OUTPUT«a␤»
moritz_ niecza: $_ = 'a'; .say if m/b/
p6eval niecza v2-80-g8bd6b3b: OUTPUT«===SORRY!===␤␤Action method quote:m not yet implemented at /tmp/Ldt_yRfSNN line 1 (EOF):␤------> $_ = 'a'; .say if m/b/⏏<EOL>␤␤Unhandled exception: Check failed␤␤ at /home/p6eval/niecza/boot/lib/SAFE.setting line 377 (SAFE die @
..2)␤ at /home/p…
moritz_ opens a bug report
19:31 nymacro left, pigdude left
moritz_ niecza: say 'ab cd foo'.words.perl 19:40
p6eval niecza v2-81-g0668028: OUTPUT«["ab", "cd", "foo"]␤»
dalek tpfwiki: (Herbert Breunung)++ | www.perlfoundation.org/perl6/index....dex_tablet 19:47
20:05 Mowah joined 20:07 ymasory left
sorear moritz_: unlikely to be fixed soon 20:10
until I come up with some nice bit of cleverness, allowing $CALLER::_ to work will completely break loop inlining 20:11
since every block *needs* a distinct $_
niecza doesn't guarantee distinct $/ or $! per block and can mostly get away with it, but nested $_ aliasing idioms show up a lot more 20:12
20:19 cotto_work left 20:25 cotto_work joined 20:28 jevin joined
masak Perl 6 hacking time! \o/ 20:30
benabik \o/
20:30 plainhao left 20:31 MayDaniel joined 20:32 dorlamm joined
masak puts on some Jonathan Coulton and digs in 20:32
colomon \o/ (that's for p6 hacking, not Coulton. :) 20:33
20:34 y3llow_ joined, pothos_ joined
sorear hello masak !!! 20:35
20:35 y3llow left, y3llow_ is now known as y3llow
sorear is working out plans for OUTER 20:35
masak hello, sorear of Three Exclamation Marks. :)
20:35 pothos left 20:36 pothos_ is now known as pothos 20:38 mtk left
Tene masak: I have a vague memory of wanting to talk with you about something, but I have no idea what it was. Are you aware of anything pending from me? 20:43
masak Tene: we have a couple of recurring topics: macros, operator overloading, HLL interop... 20:45
but no, I don't have any continuations lying around. 20:46
Tene 'k, thanks.
20:46 mtk joined
masak it's not always easy to write Just One More Test... :) 20:48
20:53 kst left
masak I've been assuming all day that perl6 -e implies 'no strict'... for some reason. 20:55
too much Perl 5 exposure, I guess. :) 20:56
20:56 dorlamm left
sorear I don't really see the use of 'no strict' 21:00
masak there's not much logic behind it, I guess.
just convenient for one-liners.
in this case, it was just in my fingers. nothing really conscious.
sorear use strict smells like, to use one of TimToady++'s analogies, an EXTEND 21:01
it was put in to maintain backward compatibility
masak which is why Perl 6 assumes 'use strict', I guess.
since it's really the right default.
21:03 mkramer left
colomon amen. 21:04
21:05 MayDaniel left 21:12 Tedd1^ joined
masak ok, I now officially Don't Like that &dir returns strings whose paths are relative to the directory sent in, not to the current directory. 21:13
flussence './' X~ dir; # would be nicer if I knew how to get the current dir in p6... 21:15
colomon it seems like the thing is it is easier to add the path to the directory sent in than it is to remove it. 21:16
21:16 Tedd1 left
flussence Text-Tabs-Wrap has a bunch of files containing test input/output, I do something horrible with $*PROGRAM_NAME to get at them 21:16
21:16 molaf joined
jnthn rakudo: say cwd 21:17
p6eval rakudo 6f9116: OUTPUT«/home/p6eval/rakudo␤»
flussence I tried pwd and gave up looking when it didn't work :( 21:18
masak cwd does make a bit more sense here... 21:23
flussence stuck in bash-mode 21:25
masak rakudo: for dir() { .say } 21:27
p6eval rakudo 6f9116: OUTPUT«Operation not permitted in safe mode␤ in 'Safe::forbidden' at line 2:/tmp/lnat35BzSe␤ in main program body at line 22:/tmp/lnat35BzSe␤»
masak aww :)
could someone please try and reproduce this? gist.github.com/834440 21:28
Tene masak: Yes, I've been complaining about problems with rakudo's IO class and associated functions for a while now.
flussence no output here too 21:29
jnthn masak: take doesn't default to $_, does it?
masak oh!
Tene we don't have "default to $_" in Perl 6
jnthn: no, it definitely doesn't
masak jnthn: d'oh! :)
now it works...
jnthn :) 21:30
masak jnthn++ masak--
Tene well, not for function calls, at least. There are a few constructs that work with $_.
masak sometimes I want .take
Tene masak: that sounds reasonable
flussence rakudo: my $basepath = do given $*PROGRAM_NAME.split('/') { .pop; .join('/') || '.' }; say $basepath; 21:31
p6eval rakudo 6f9116: OUTPUT«/tmp␤»
Tene masak: That's a lot more reasonable than .say is
flussence I wonder if that could be shorter...
masak Tene: what do you say we change &dir to return cwd-relative paths in the spec, and see what falls out of it?
21:31 shortcircuit left
Tene masak: or dir could return IO objects. 21:31
21:31 shortcircuit joined
masak or that. 21:32
Tene and IO objects could have a useful .Str method
masak they have .path
21:32 kst joined
flussence that's a string, make it .Str! 21:32
masak sure, why not?
flussence (what would an INET stringify to?)
jnthn if all(dir('foo/bar')>>.modtime) > $five_mins_ago { ... } \ could be useful...
Or such things. :) 21:33
masak jnthn: nod.
(it's called .changed) :)
jnthn worreva :P
Tene masak: *also*, IO objects are currently broken, as they store the path when first instantiated, but don't open the file until they're accessed, so if you make a bunch of IOs, then chdir, then access your IOs, they don't work
masak jnthn: we had a productive bikeshed session over .changed et al. I'm proud of it :)
jnthn IOHNOES!
21:33 pyrimidine left
masak Tene: yes, that's decidedly RONG. 21:34
jnthn Agree
Doesn't dwim.
masak ok, how about this one? my @l = gather for dir>>.IO { take $_ }; .say for @l 21:35
could anyone confirm that it doesn't give any output, even in a directory with files? 21:36
it's the >>.IO that does it, it seems.
Tene masak: IMO, .say is very broken
flussence they should store the absolute path instead, right? (also .relative(cwd) would be a nice addition)
masak Tene: I've been convinced it isn't. but I used to be suspicious as well.
jnthn masak: How do IO objects stringify?
Tene masak: compare the .say on most objects to the .say on IO objects
masak jnthn: ah. you solved that one too :) 21:37
jnthn: say .path for @l works :)
jnthn :)
colomon jnthn++
masak Tene: I know. it breaks Liskov.
jnthn masak: Can you solve some of my problems for me in return? ;)
masak jnthn: you'd like that, wouldn't you :P
Tene masak: for example, your example up there calling .say on each IO object would write newlines to the files, and nothing to stdout
masak Tene: oh! 21:38
Tene: yes, I fell into that one :(
that explains it all.
Tene masak: I've seen that more than once; I'm rather unhappy with say as both a method and a standard function. 21:39
masak: I'm similarly-but-less-so uncomfortable with the two variants of map, grep, etc. that take different arguments.
masak Tene: I don't think it's likely to change. it'll just remain an FAQ until Perl 7, which will have user-friendly monads :P
Tene any-list.map accepts a Code, but Code.map accepts a list. 21:40
So your "generic function" that will work on whatever you pass to it can mysteriously break when you pass it a Code object.
masak :(
jnthn didn't realize Code.map was different... 21:41
masak hadn't really realized that
jnthn I'm trying to remember if I've ever seen that used.
sorear niecza has a completely different handling of filenames
you can for instance say ".".IO.realpath;
jnthn rakudo: my @a = 1,2,3; say ({ 2 * $_ }).map(@a).perl
p6eval rakudo 6f9116: OUTPUT«No candidates found to invoke for method 'map' on object of type 'Block'; available candidates have signatures:␤:(Mu : &block;; *%_)␤:(Mu : %block;; *%_)␤␤ in main program body at line 22:/tmp/JpXv2AOsGi␤» 21:42
Tene jnthn: what about grep? I thought there was a Code.grep, at least
sorear Tene: there is an Any.grep
jnthn rakudo: my @a = 1,2,3; say ({ 2 == $_ }).grep(@a).perl
p6eval rakudo 6f9116: OUTPUT«()␤»
Tene Hmm. Looks like I'm misinformed here. 21:43
sorear: I've never actually understood why there was Any.grep, Any.map, etc. I don't understand the utility of single items acting like lists in some cases. I expect that's my ignorance, though.
colomon Tene: Any.grep is the array grep. 21:45
I mean, Any.grep takes .list on the object, and then greps on the list.
Tene Hmm. 21:46
colomon It works on single objects because there is an Any.list which turns a single object into a list.
but it works on anything array-like as well. 21:47
it also means that if you define a new type with a meaningful .list method on it, all the built-in list methods will work on your type.
Tene Ahh, okay. 21:48
masak I'd also like not only .path on IO, but also .filename or some such.
Tene masak: not all IOs have filenames 21:49
or paths
masak that's not my fault.
colomon +1 to Tene
masak that just means we have the wrong abstraction somewhere :)
Tene ... or do they? I can't remember what things TimToady agreed with me on, and which he disagreed on.
masak I'd like .path and .filename on File objects, OK? :)
Tene I had a notable conversation about it a while back, where I rather disagreed with him about the abstractions involved.
sorear Rakudo makes the mistake of treating paths and filehandles as the same thing 21:50
flussence I've done some pretty horrible (and useful) things in perl5 by passing filehandles where paths are expected 21:51
masak Tene: the IO spec is still up for grabs. 21:53
all it's looking for is some caring soul to nurture it back into sanity.
Tene Hmm. 21:54
Tempting.
21:55 mfollett_ joined 21:56 frodwith left 21:57 frodwith joined 21:59 mfollett left, mfollett_ is now known as mfollett, MayDaniel joined
masak hey, I just created this little tool: gist.github.com/834500 22:02
it's a mini-tote.
I'd very much like for someone to try it for one of his projects and be as hooked by the technology as I am :) 22:03
what it does is keep track of .pm and .t files, noting when they change. then it re-runs all the tests. 22:04
Tene masak: you could use $dir as IO, and then $dir.dir
;)
22:04 donaldh joined
masak Tene: it felt more sensible to send in string paths for some reason. 22:04
sorear inotify. 22:05
Tene masak: Ahh, I see you're a fan of tools breaking when you have fiels with spaces in the name. ;)
colomon So that's a p6 script that just sits there, monitoring the files and launching tests?
22:05 molaf left
Tene I'd very much prefer that 'run' didn't do any shell processing, and you had to ask for that specifically, with a different function 22:06
colomon is imagining 90% of his computer's resources going to that script after a few hours of running it...
masak colomon: exactly.
jnthn colomon: It's cold in Sweden. This helps keep houses warm. :P
Tene masak: I personally use 'keep', from here: conway.rutgers.edu/~ccshan/wiki/blo...der_shell/
masak Tene: yes, I know about it :)
Tene masak: it uses strace to find all the fiels used by a command, and installs inotify hooks on them, etc the other stuff you know. 22:07
masak Tene: preferably, I'd like to wire tote up the same way.
Tene :P
masak using strace, yes.
and inotify.
colomon jnthn: seriously, I can imagine that thing adding several degrees to the temperature in my office...
masak when available.
colomon: having the tests trigger-on-save doesn't sound like much, but it's wonderful.
for lack of a better word. 22:08
colomon It does sound pretty nice, I admit.
masak something to do with not having to context-switch as much.
plus, it makes it harder to quit :P
"just one more test run..."
I prefer not to put types on my attributes, for fear that all my code will break once they're enforced... :/ 22:10
colomon one glitch... I know I usually find myself running a single test file over and over, so I don't spend the time it takes running my entire test suite.
"glitch", I should say.
also, running them all this way will potentially generate a lot of output to sort through, no? 22:11
masak colomon: yes, you're right. this isn't an ultimate solution. 22:12
I'd like three modes: all test files; one test file; one test.
colomon masak: darn you, why didn't you implement the ultimate solution first! ;)
masak because of the definition of 'ultimate'... :P 22:13
colomon nonsense. if you wrote the ultimate one first, then you'd be done. 22:14
think of how much work you'd save! :p 22:15
masak it's comforting to know you're saying that with an ironic tone of voice :) 22:17
22:17 Mowah left, Trashlord left
moritz_ phenny: tell sorear please see branch p6_spectests on moritz/niecza -- t/run-spectests.pl should work as soon as you implement run() (tested with s/run/say/) 22:18
phenny moritz_: I'll pass that on when sorear is around.
dalek p/ctmo: f115e3e | jonathan++ | src/ (4 files):
Various fixes and tweaks. This gets us actually doing an initial call to the SC builder during the compile, though of course it's a drop in the ocean. Turns out that there's going to be quite some yaks to shave before this can really come into use.
22:19
masak welcome to Yak Shaving Night with the #perl6 crew... 22:20
tadzik ...zebras? 22:21
o/
22:22 donaldh left, thepler left 22:23 Trashlord joined, MayDaniel left 22:25 jimbob joined
masak tadzik: good evening, zebra. 22:32
Tene: I think if there was something better than &run that did not break in the presence of spaces, I'd use that. as there isn't, I just reach for &run. :/ 22:33
Tene masak: If you can't pass a list to run instead, then run is broken. 22:36
flussence NativeCall + execve() !
masak Tene: for someone with so many excellent opinions, you're making surprisingly few changes to the spec... :>
flussence (oh wait, getting a return value might be hard.)
Tene ... eww, run only accepts a single strin argument. It's *worse* than system().
masak urges Tene to make it better 22:37
Tene masak: My opinions don't have a strong history of agreeing with TimToady, so I have no confidence about what spec contributions I could make that are likely to be agreeable.
22:38 Tedd1 joined
masak Tene: I reject your excuse. lots of us don't have a strong history of agreeing with TimToady, yet we commit to the spec occasionally anyway :) 22:38
rakudo: my @a = 3, 1, 2; say "OH {@a.sort} HAI" 22:39
p6eval rakudo 6f9116: OUTPUT«OH 1 2 3 HAI␤»
sbp you're not disagreeing with his disagreement, just disagreeing that it matters? :-)
masak rakudo: my @a = 3, 1, 2; say "OH @a.sort() HAI"
p6eval rakudo 6f9116: OUTPUT«OH 1 2 3 HAI␤» 22:40
sbp rakudo: my @a = 3, 1, 2; say "OH {{@a.sort}} HAI"
22:40 am0c left
p6eval rakudo 6f9116: OUTPUT«OH 1 2 3 HAI␤» 22:40
masak sbp: well, I don't disagree that Tene disagrees, if that's what you mean. :) 22:41
22:41 Tedd1^ left
colomon masak: are you *sure* I'm being ironic? I might be thinking that Extreme Programming is getting kind of stale, and it's now time for Ultimate Programming!!!!!! 22:41
masak colomon: that's a possibility, albeit a remote one. ;) 22:42
Tene masak: I'm reluctant about investing the time to do it right if it's questionable that it'll stay around. 22:46
22:48 mfollett left 22:50 mfollett joined
masak Tene: I understand. though I do think that you have many suggestions that would improve the current state of things. 22:50
I could try adding them myself, in my copious free time...
Tene masak: could be. There's the secondary problem that I'm not actually doing anything at all these days. 22:51
masak I've updated mini-tote at gist.github.com/834500 -- it now uses prove.
colomon masak++
masak hugs Tene
Tene I haven't done any notable work on personal projects in over a year now; I guess I'm pretty burned out or something.
masak sounds like it. 22:53
tadzik what's mini-tote? 22:57
masak tadzik: tote is a testing framework that I sometimes almost write or think about writing. mini-tote is (perhaps) the beginnings of the real tote. 22:59
tadzik: strangelyconsistent.org/blog/helpfu...d-on-crack
also, strangelyconsistent.org/blog/some-t...ts-on-tote 23:00
23:04 whiteknight joined
tadzik masak: looks funny 23:06
sleeping, o/ 23:11
masak 'night, tadzik. 23:12
23:18 jimbob left 23:31 s1n left, donri left, TiMBuS left, ponbiki left, perigrin left, benabik left, bacek left, stepnem left, donri_ joined 23:32 ponbiki joined, perigrin joined, benabik joined, barika left, bacek joined, s1n joined 23:34 stepnem joined, TiMBuS joined 23:42 barika joined 23:46 mfollett left 23:55 vmspb joined 23:56 jerbraun joined 23:59 kaare_ left