»ö« | perl6.org/ | nopaste: paste.lisp.org/new/perl6 | evalbot usage: 'perl6: say 3;' or rakudo: / pugs: / std: , or /msg p6eval perl6: ... | irclog: irc.pugscode.org/ | UTF-8 is our friend!
Set by wolfe.freenode.net on 30 October 2009.
romanhunt hello all 00:02
masak romanhunt: hi! 00:03
zaslon lolperl6adventhazblogged! perl6advent++ 'Day 5: Metaoperators': perl6advent.wordpress.com/2009/12/0...aoperator/
romanhunt so this shal be my first big perl6 weekend... (after writing 5 all week long at work!) 00:04
I really cant wrap my head around the power curly brakets have obtained
hashes will never be the same!
masak romanhunt: in Perl 6, curlies in term position mean a closure. always. 00:10
sometimes they collapse to a hash, though.
romanhunt i see. thx 00:12
masak romanhunt: there are some simple rules as to when it turns into a hash. it works out pretty naturally, and DWIMs most of the time. I've had it trip me up in &map calls, sometimes, but that's all. 00:14
masak I believe the spec was changed to make even those cases of &map confusion go away. but I don't believe Rakudo implements those changes yet. 00:14
TimToady yes, we outlawed $_ in the { a => 2 } form 00:16
jnthn Rakudo certainly didn't catch up with *that* one yet, afaik. 00:17
oh hai btw :-)
jnthn 's new laptop has apparently been built and will be shipped to him soon.
That means I'll have a machine I can hack on Rakudo on that doesn't take like over 2 minutes to compile it. :-/ 00:18
TimToady romanhunt: curlies have gained power by *reducing* the number of uses from what Perl 5 does, actually :)
masak jnthn: hai!
Wolfman2000 jnthn: what OS?
jnthn Win 7.
If it sucks, back to XP.
But I'm hopeful not.
Wolfman2000 ...you must be a glutton for punishment
jnthn gave Vista a skip
Wolfman2000 okay, not that gluttnous
gluttonous*
jnthn Wolfman2000: Nah. I can't be arsed with Linux on the desktop. 00:19
jnthn I'm fine that it works for some people. I'm just not one of those people. :) 00:19
Equally, I hate windows on the server. :-)
Tool for the job and all that lot.
romanhunt I never thought Id say it but ever since I started getting to use macos on the desktop I have been hooked. I however run a network of XP xlients running on mac hardware so its not all perfect... 00:20
its a sweet OS to meet in the middle of graphical do it all and *nix though 00:21
Wolfman2000 also uses Leopard.
romanhunt and the fact that it ships with perl to begin with is titts
jnthn Yeah, Mac is tempting. But I do a bunch of Windows dev too.
Wolfman2000 jnthn: you can run windows on a Mac
jnthn Wolfman2000: I could, but then...why buy a Mac? :-)
Wolfman2000 ...one of these days, you'll see the light 00:22
jnthn went for a ThinkPad again. They're familiar, comfortable, and don't care about being dropped from the overhead bin in an aircraft.
avar too bad you can't get them anymore from ibm;/ 00:22
jnthn avar: Yeah, I was a bit bothered the quality may have gone way down, so asked around...and got "yeah, they're still decent". 00:23
avar still decent, but not as good
jnthn Aww.
Well, we'll see how many countries and conferences the new one handles. :-) 00:24
jnthn very much enjoyed a visit to the curry house that he used to frequent while living in England again tonight. 00:26
romanhunt so once I get a grip on the new syntax how should I move forward? I am incredibly interested in perl6 compiler being writen in perl6 and want to work on that aspect (generating parse trees etc) I mean I dont mind just writing code in it but most of the stuff I write turns into several hundren line projects that it probably isnt ready for 00:26
jnthn romanhunt: The easiest place to jump in is the setting, which is a chunk of built-in functions/classes that are written in Perl 6. 00:27
romanhunt plus writing large system administration scripts in a language so new and blowing up a system at work would probably piss my boss off to no end
jnthn: ok 00:28
jnthn romanhunt: In those, you're writing in "full" Perl 6, as such.
romanhunt: In the bits behind that, most bits are written in a subset of Perl 6 that we call NQP.
Which is very easy to work with if you know Perl 6, so long as you keep in mind what it does and doens't provide. 00:29
romanhunt ./rakudo/src/setting I assume
jnthn romanhunt: Right.
romanhunt: We have a bunch that is written in PIR to interface with the underlying Parrot VM, and a few bits in C too. 00:30
But you can contribute quite a lot without having to look at those.
romanhunt C I know well. PIR ... a different story
jnthn Generally, the trend is towards more in Perl 6 and NQP and less in VM-specific stuff.
romanhunt ok
avar romanhunt: There are also self-hosted compilers you can look at, but they seem to be less maintained these days.
jnthn Because it's (a) easier to hack on and (b) means that when we get to having Rakudo running on additional backends there's less that we have to hand-port. 00:31
avar Rakudo historically has been built upon a mountain of C/PIR with some very small parts in Perl 6, but those parts have been growing a lot for the past ~2 years
(B.t.w. I'm just an outside observer, I'm not involved in rakudo)
jnthn avar: Your perspective is pretty much right though. :-)
romanhunt I think I will focus on setting/ for sure at least to begin with 00:32
jnthn avar: Though in a way we're working towards replacing some of the PIR with NQP and Perl 6 too.
avar jnthn: Are you guys planning on growing it slowly over time so that Parrot might be Just Another Target, along with JVM, .net, ASM or whatever?:)
jnthn: Yeah I've seen, neat:)
romanhunt after that maybe some porting of PIR to perl6 if needed. But I am getting ahead of myself as I am still reading synopses :)
jnthn avar: Yes, that's kinda my vision.
avar jnthn: I haven't looked at it after you guys started hacking on rakudo-ng but when I did a lot of the heavy lifting in setting/ seemed to be done by Q:PIR 00:33
jnthn: Cool:)
romanhunt: Anyway, I used to work on one of the self-hosted compilers a while back but if I wanted to hack something now I'd hack rakudo, fwiw:)
jnthn avar: In ng, we're using a pir::op_name construct instead, which unlike Q:PIR is easier to deal with in the "support a different backend" case. 00:34
pugs_svn r29257 | lwall++ | [pm.txt] answer PM-12 for pmichaud++ 00:35
avar jnthn: Nice, I also noticed you're passing like 0.1% of the tests you did before, are you tearing the whole thing out to replace it with .. what ? 00:36
I've read some of the blog postings but I haven't got the gist of exactly what you guys are doing, is it just the regex engine replacement or a lot more?
more self-hosting? 00:37
jnthn avar: We're doing a bunch of refactors in one go. 00:39
avar: The new grammar engine and getting a load closer to STD is a key one of them.
avar: The underlying object model is also changing greatly - that's the bit I'm heading up (whereas the grammar enigne awesomeness is pmichaud++'s great work). 00:40
Essentially, everything OO is going back in on top of a sound meta-model foundation, which puts us on the path to custom metaclasses and the like.
TimToady (and cuts many of the apron strings tying current rakudo to parrot) 00:41
jnthn TimToady: Well spotted. ;-)
Wolfman2000 ...I missed something. parrot and rakudo are going to be separated?
TimToady they've been separated for several years now 00:42
jnthn Wolfman2000: Rakudo and Parrot already *are* separate projects.
Wolfman2000 ...that came out wrong
jnthn Wolfman2000: Please don't read this as "Rakudo is not going to target Parrot".
That's not at all what is being planned.
diakopter [by most]
Wolfman2000 jnthn: understood. blame my hunger...supposed to be meeting someone soon, but said person has to call me first
jnthn diakopter: :-/ 00:43
diakopter I mean
TimToady diakopter: cats can't herd other cats either 00:44
diakopter but a mouse or few can divide the pack
masak jnthn: also, before you did the OO refactors, you worked on parameter passing, which is also important for ng, no?
jnthn Wolfman2000: Basically though, Rakudo - like gcc - is a compiler. Just as gcc can produce code for x86 and Sparc, so I'd like Rakudo to be able to target multiple backends. 00:45
diakopter the sunk cost delusion will be lifted one day
jnthn masak: It's important for Rakudo *.
TimToady everything is important, if only as a lesson :)
masak jnthn: oh. ok. 00:46
jnthn masak: In ng, we actually get to use the foundations I laid pre-ng in the parameters refactoring in an even neater, more elegant way.
masak: The code now is *really* nice.
masak that's what I meant. or something like that. :)
TimToady in other words, we're still groping our way forward, but we're getting much faster at it. :) 00:47
jnthn masak: But the actual binder refactor is pretty much the same as I did for master. :)
With tweaks thanks to TimToady++ spec tweaks.
masak ok. :)
diakopter 2 rethinks/redesigns/rewrites per year is great practice for more rewrites
(a lesson I've learned from myself)
TimToady we're hoping each redesign takes half the time of the previous 00:48
eventually Zeno loses :)
huf jnthn: what other backends are you thinking about besides parrot?
or is that too far ahead yet?
TimToady name a VM
huf so, any?
TimToady it's been thunka
diakopter huf: they're all conceivable
jnthn huf: I'm fairly open to various options. I think actually that the *hardest* one to add will be the second.
TimToady and the 3rd will be 1/2 that, then 1/4, 1/8.... :) 00:49
jnthn huf: If it's me that adds the second one, it'll be the .Net CLR just out of personal familiarity and because it'll make a nice platform for various bits of Perl 6 spec exploration and research I wish to do.
diakopter pypy, llvm-ir, cil, jvm, js, go (fglock's Perlito targets go, now)
TimToady the problem with the second will be discovering all the place we assumed how the circularity saw worked that were wrong
*places
jnthn TimToady: Yes, indeed. 00:50
diakopter and of course, /usr/bin/perl
jnthn diakopter: Yes, that too. :-)
TimToady right now we're exploring abstract vs concrete versions of the same operation, hoping that will be an obvious place to saw
so .Str conversion might be in the VM, while ~ conversion is in P6 00:51
diakopter huf: to answer your question more precisely, I'm working on an nqp-rx clone-esque in javascript
TimToady (and crossing our fingers that we don't end up with the too-many-levels-of-indirection problem) 00:52
jnthn TimToady: I suspect that we're going to end up having to abandon Parrot's Class/Object PMCs somewhere along the way.
huf diakopter: that's pretty cool
jnthn TimToady: That one may hurt.
diakopter huf: but I'm not afraid to ditch it all at any time and switch to C#/cil on clr/mono
TimToady pugs had a CL backend at one point, iirc 00:53
diakopter due to my coding style, the biggest factor that affects my choice of platform is speed of prototyping and instantaneity of feedback
cognominal Is go the vm for the go google language?
diakopter factor*s* I guess
TimToady or maybe it was one of the other parsers 00:54
jnthn TimToady: Especially because when I tried to take Parrot down the road to having multiple interoperating object systems, nobody else understood the goal particularly well, and now it's a mess I don't feel like fixing.
:-(
diakopter Perlito emits SBCL
TimToady jnthn: my guess is that eventually parrot scraps it's internal system and bases everything off the Perl 6 types :) 00:55
*its
diakopter MiniPerl6 (mp6) is a subset of Perl 6, which was designed as a light bootstrapping language. The initial bootstrap used v6.pm and was then self-hosted in Perl 5. MiniPerl6 is now self-hosted both in SBCL Lisp and in Perl 5. A developer can modify the compiler source code (written in MiniPerl6) and recompile either with the Perl 5 or with the SBCL backend. The backends can cross-compile to each other.
except.. there's also a JS target that's not mentioned there
TimToady: well... then it would be Perl 6 00:56
TimToady not exactly
it'd be a VM that happens to be written in P6
diakopter imho, the nature of type system makes it very tied to the rest
TimToady but we need to get the native types going better first 00:57
jnthn TimToady: That's one of the things I'm most interested in exploring / working out on a different backend. 00:58
diakopter masak: how's TreeTraverser
jnthn TimToady: And the dragging back to Parrot - or at least, going to the Parrot dev team with an idea of what's needed - afterwards.
*And then 00:59
sjohnson hi guys
jnthn hi sjohnson
TimToady basically, I see the nqp-rx phenomenon happening all over again once we have full P6.
sjohnson o?
oops 01:00
o/
TimToady the first would be scratching your head? 01:01
diakopter TimToady: so there'd be a stage0,1,2,3,4,5,6.....
I can see the FAQ entry now
TimToady "The origins of this VM are lost (purposefully) in the mists of time." 01:02
jnthn TimToady: That's entirely possible, and wouldn't surprise me, but it's a little way off yet. :-) 01:03
diakopter "... and then it emits pugs-6.2.5-Perl6, which emits javascript to WebKit/V8, which emits CIL to mono, which emits xs and is built into a Perl 5 extension"
TimToady gotta cross the Jordan first...
jnthn TimToady: Who is it that's behind us and gets drowned? ;-) 01:04
oh wait, that was the red sea.
:-)
diakopter jordan too
TimToady well, I know who gets left behind at the Jordon, and trying not to think about that... :)
jnthn Ah well, it's all good.
diakopter
.oO( and then there were 49 days of cacophonous [line] noise, and then the VValls just fell down )
01:07
or 56, I don't remember
jnthn ooh...sleep time for me.
Catch y'all tomorrow.
o/
diakopter nite
TimToady ciao 01:08
diakopter std: =end 01:09
p6eval std 29257: ok 00:01 102m␤
masak found a new Perl 6 project: github.com/dbrunton/Automata-Cellular
diakopter wha....?
oh, a 3-year hiatus 01:10
that was in pugscode at one point I think 01:11
masak oh, cool.
yes, the tweet mentioned that it was being updated.
diakopter 8.8.8.8 01:14
talk about octets.. 01:15
I wonder what its ipv6 address is
masak: how's TreeSpider 01:22
masak diakopter: it's been sitting nicely undisturbed since yesterday. as far as I'm concerned, it's a successfully finished experiment.
diakopter: next step is to implement the corresponding thing onto the GGE data model. will probably get around to that in a few days. 01:23
zaslon lolmasakhazblogged! masak++ 'November in the rearview mirror': use.perl.org/~masak/journal/39980?from=rss 01:39
masak I checked the IRC logs from a year ago. I am on record saying "I'll probably do it again next year" :) 01:44
I'll say the same this time, with a bit less certainty.
diakopter I dunno, I'm quite certain you'll probably do it again next year 01:45
prove me wrong ;) (kidding)
masak :)
sjohnson in p6, have the names "chomp" and "chop" been renamed, and will the chomp-like func chop off $/ instead of "\n" ?
diakopter std: chop; chomp 01:46
p6eval std 29257: ok 00:01 103m␤
masak sjohnson: three things:
sjohnson: (1) no, they have not been renamed.
masak sjohnson: (2) their semantics have changed, though. they no longer change their argument, but return a modified string instead. 01:46
sjohnson: (3) $/ is long gone, and there's a new $/ which does something comeletely different (match results). 01:47
sjohnson masak: has $/ been given a new name? or is it just not implemented
diakopter: i finally understand the std: now thanks 01:48
diakopter++ # knows a lot
masak checks what $/ used to mean
TimToady std: undef $/
sjohnson newline char thing, useful when using while
p6eval std 29257: ===SORRY!===␤Obsolete use of $/ variable as input record separator; instead, in Perl 6 please use the filehandle's .slurp method at /tmp/RkGcbOd23U line 1:␤------> undef⏏ $/␤FAILED 00:01 103m␤
masak ah. input record separator.
TimToady std: $/ = ""
p6eval std 29257: ===SORRY!===␤Obsolete use of $/ variable as input record separator; instead, in Perl 6 please use filehandle's :irs attribute at /tmp/caD1U8GPPU line 1:␤------> $/⏏ = ""␤FAILED 00:01 104m␤
sjohnson wow, nice warning / error msgs 01:49
compilers helpful
masak TimToady++
TimToady necessary when replacing with a different $/
sjohnson does chomp in p5 even look at $/, or is it static "\n" searching
would anyone be opposed to the idea if i ran a p5eval bot here, for fun and learning purposes? 01:50
masak sjohnson: are you familiar with 'perldoc -f chomp'?
sjohnson: buubot used to be able to eval Perl 5 code.
sjohnson thanks masak, forget to check here 01:51
sjohnson masak++ # kind way of saying RTFM 01:52
masak food &
:)
TimToady pugs: use v5; print "howdy\n"
p6eval pugs: Error eval perl5: "sub { use ops (':default', 'binmode', 'entereval');; print "howdy\n"␤␤}"␤*** 'print' trapped by operation mask at (eval 2) line 3.␤␤Undefined subroutine &main:: called.␤ 01:52
TimToady heh
sjohnson im gonna put up an sjbot. i'm excited 01:53
implement a !perlfact trigger
TimToady p5 == security breach to pugs :)
sjbot: p5eval: system 'rm -rf /' 01:54
diakopter std: use v5; $| = 1; 01:55
p6eval std 29257: ===SORRY!===␤Obsolete use of $| variable; instead, in Perl 6 please use :autoflush on open at /tmp/HEMhttqWJD line 1:␤------> use v5; $|⏏ = 1;␤FAILED 00:01 104m␤
sjohnson haha TimToady good think i didnt implement it yet
TimToady STD doesn't understant 'use v5' yet
*stand
sjohnson have to explain to my boss that the creator of Perl wiped my harddrive
he'd find it a bit hard to believe 01:56
diakopter "but I was asking for it"
TimToady I probably wouldn't, but diakopter might :)
sjohnson i suppose the safest way to do nothing, would be to give mself no read permission to anything, and use sudo to edit sjbot.pl 01:57
TimToady and maybe run in a chroot jail
sjohnson ... i learn something new about perl everyday! 01:58
TimToady and maybe use Safe, fwiw
diakopter std: $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
sjohnson use Acme::KeepYourJob; 01:58
or JobSecurity
diakopter what 01:59
that's a new one
huf wasnt job the dude who lost all his family?
not sure i want that kind of security
diakopter :D 02:00
TimToady only takes 13 seconds on my machine
diakopter 13 seconds? 02:01
TimToady to parse all those $'s
diakopter successful?
TimToady Anonymous variable requires declarator at (eval) line 1:
and a couple deep recursion warnings :) 02:02
probably tickles lazymap too hard
TimToady funny that it kills p6eval 02:03
diakopter std: $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
p6eval std 29257: Deep recursion on subroutine "Cursor::_BRACKETr" at STD.pm line 23016.␤Deep recursion on subroutine "Cursor::_SUBSUMEr" at STD.pm line 22885.␤===SORRY!===␤Anonymous variable requires declarator at /tmp/jK1zfumA4B line 1:␤------>
..$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$…
diakopter o
TimToady wow, that was fast
diakopter std: $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
p6eval std 29257: Deep recursion on subroutine "Cursor::_BRACKETr" at STD.pm line 23016.␤Deep recursion on subroutine "Cursor::_SUBSUMEr" at STD.pm line 22885.␤===SORRY!===␤Anonymous variable requires declarator at /tmp/M4RCmNQByu line 1:␤------> 02:04
..$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$…
diakopter hm
Linux debian.4.x86_64 2.6.16-xen #1 SMP 1GB ram, raid10-ish scsi15k disks 02:05
TimToady recompiled, still takes ~14 seconds 02:05
diakopter is your kernel x86_64? 02:06
TimToady I think I'm probably running a 32-bit kernel
diakopter oh, this perl is built with llvm 02:07
TimToady Linux edo 2.6.31-15-generic #50-Ubuntu SMP Tue Nov 10 14:54:29 UTC 2009 i686 GNU/Linux
diakopter KIDDING
mebbe I can rework p6eval to use App::Persistent for STD 02:08
or mod_perl :}
TimToady oh, heh, I had the debug log turned on :) 02:09
diakopter sum1 needs to write a source filter for that :}}
TimToady < 1sec now 02:10
diakopter oh, why would V8's JS RegExp go quadratic on /^(?:a+)*ab$/.test("aaaaaa"), but the equivalent in Perl fails nearly instantly 02:11
on "a" x 1e10, I mean 02:12
I mean, I thought perl always nfa-simulated left-right with full backtracking? 02:14
TimToady because Perl isn't even getting into the NFA on that one
sjohnson NFA = no f'ing around?
diakopter sjohnson: pretty much
TimToady Perl 5 goes to great lengths to *avoid* calling into the regex matcher
and the ab$ is special cased to fail fast 02:15
diakopter O
TimToady it would fail not quite so fast with just ab
but still faster than the regex would figure it out, but it'd have to scan for the constant string 02:16
and ab doesn't buy you much with boyer-moore
it'd fail abcdefg a lot faster
diakopter how could I force perl to go quadratic on that 02:17
TimToady I'll never tell :)
diakopter hey
v8 starts slowing down very noticeably with only 20 chars of input
I haven't waited for it to terminate above that 02:18
oh, there we go :) 02:19
time perl -e 'print (("a" x 100000000) =~ /^(?:a+?)*a(b+)*c?$/)' # real 0m27.386s 02:20
actually, it's not quadratic still 02:23
TimToady make the second a a*
diakopter time perl -e 'print (("a" x 100000000) =~ /^(?:a+?)*a{32766}$/)' # not finished yet 02:24
TimToady no, that won't work either, since your end matter can match null string
that one will be pretty slow
diakopter # still going 02:27
# no increase in memory usage that I can see
TimToady no, but it'll probably run a bit under 300 hours 02:28
diakopter killed
LOL
time perl -e 'print (("a" x 32766) =~ /^(?:a+?)*a{32766}$/)' # hm. 02:29
19 seconds
interesting
time perl -e 'print (("a" x 500) =~ /^(?:a+?)*a*a{500}$/)' # 0.05s 02:32
time perl -e 'print (("a" x 5000) =~ /^(?:a+?)*a*a{5000}$/)' # 27s
diakopter TimToady: speaking of char-by-char NFA, why not run the whole parser that way, scannerless 02:34
TimToady because it's not what people want 02:37
diakopter TimToady: oooooo.. since you have ubuntu KK now, that means you have mono-2.4!!!!!!!! :D 02:39
`mono -V`
TimToady I deny it--I've never had mono...
diakopter oh 02:40
TimToady though, of course, there's a good chance I'd test positive for EBV
diakopter oh, but looks like the csharp repl doesn't come installed by default # apt-get install mono-csharp-shell mono-gmcs 02:46
TimToady I'm not particularly interested in playing with mono yet. Maybe after I get done with Perl 6... 02:47
diakopter jnthn gave me too many ideas 02:49
pugs_svn r29258 | lwall++ | [gimme5] more recursion warning suppression
TimToady yes, well, one diakopter can only go so far in emulating a flooding algorithm
one TimToady too, for that matter 02:50
diakopter well, there's just a TON more system interaction libraries already available from mono/cil/clr.. notwithstanding that it could run in silverlight(win,mac) and moonlight(linux) 02:50
more than JS/V8, I mean
but the compile/run/test time is still just as fast.... 02:51
TimToady well, you are one the cats I don't try to herd :)
diakopter sigh 02:52
hrm
phenny: tell jnthn ok, now you've gone and done it. ^^ # apt-get install mono-csharp-shell mono-gmcs # in Ubuntu Karmic 02:54
phenny diakopter: I'll pass that on when jnthn is around.
diakopter TimToady: one neat thing about .net regexes - they can be told to run in reverse
oh, interesting, mono has a dependency on perl 02:56
TimToady so does git :)
diakopter so does every .NET build & derivative project inside microsoft... the C/C++ source tree was managed with perl scripts for years (probably still is) (as externally visible in the rotor source release) 02:57
the entire point of writing powershell was to provide a perl replacement, imho 02:58
it took about forever
2.0 is mostly caught up in expressiveness, if not terseness 03:00
TimToady decommuting & 03:02
rodi updating some old Perl6 code to work with Rakudo. Everything's working, except I'm getting a "Use of uninitialized value" warning in one method, don't know why... 03:13
anyone willing to take a peek at it, might be able to tell at a glance:
github.com/dbrunton/Automata-Cellul...ellular.pm
Looks like it's happening in the next() method. 03:14
Any general debugging tips would also be welcome.
diakopter rodi: I'll take a look 03:48
rodi: masak was just noticing your commits... (irclog above) 03:49
rodi diakopter: oh, nice, thanks for the pointer. 03:50
I like the spec changes that I noticed while updating the code. 03:52
diakopter rodi: $.rule.rule{ 03:53
is that what you intended?
rodi heh, good question. I think so, though. $.rule is an Automata::Cellular::Rule object, and $.rule.rule is a hash. Does that make my sigil wrong? 03:55
I'm fuzzy on that...
TimToady seems a bit odd to index a hash by a decimal number 03:56
rodi Blame Wolfram.
:-P
TimToady as in The Emperor's New Science :) 03:57
rodi A New Kind of Perl
TimToady I'd make sure the keys of the hash aren't actually like '101' 03:58
wrong keys would certainly get you uninits
diakopter maybe stringify the key too 03:59
I dunno
TimToady likewise if it's really returning @ instead of %
though you'd think in that case it'd complain "I'm not a hash." 04:00
also, stylistically, you don't need parens on the for loop args 04:01
rodi mmm, pretty.
TimToady and the final conditional could simply return the result of the comparison, since that's already a Bool
well, you'd have to negate it 04:02
rodi e.g. "return $.stage < $.steps" ? 04:03
also pretty.
diakopter return $.steps < $.stage 04:03
TimToady <= maybe 04:04
diakopter or return $.stage <= $.steps
sjohnson rakudo: $/ = "\n";
p6eval rakudo 7ef386: ( no output )
TimToady and the pod has a syntax error :)
std: while($ca.next()) { }
p6eval std 29258: ===SORRY!===␤while() interpreted as function call at line 1; please use whitespace instead of parens␤Unexpected block in infix position (two terms in a row) at /tmp/djrRJwk5LT line 1:␤------> while($ca.next()) ⏏{ }␤ expecting any of:␤ bracketed
..infi…
sjohnson hmm
does p6 supprt input_record_separator-type things? 04:05
i was thinking irs supporting regex would be pretty cool, as i can't get that to work in p5
TimToady in theory
that's because P5 doesn't support that 04:06
you need a regex engine that can ask the input system for more string for that to work
sjohnson i took a guess that it didnt support it either once i couldn't get it to work :] 04:07
TimToady you didn't have to guess; the documents say as much :P
sjohnson i suppose i could wing it, by splitting input instead of using while and $/ on it 04:08
split it by a regex thingy
TimToady how big is the input?
if it's smaller than your memory, just slurp the whole thing in and split 04:09
otherwise you're likely to end up with buffer-wrap errors
sjohnson about 1k EDIFACT files
TimToady 1k each? 04:10
sjohnson around there, nothing bug
big*
they're for orders of books at work
maybe biggest one i'll ever see might be 50k at the most
TimToady then by all means, just slurp in entire files; it's much more straightforward that way 04:11
sjohnson boss asked me to parse some edifact data to grab a few of the fields out
tene was kind enough to write me a nice slurp() sub
i'll use it to slurp my way up the corporate ladder
.. in the programming sense 04:12
TimToady is built-in to P6, fortunately
sjohnson ( `ー´)
sjohnson sweet 04:13
perl6++
@karma perl6
lambdabot perl6 has a karma of 5
sjohnson @karma P6 04:15
lambdabot P6 has a karma of 0
sjohnson @karma p6
lambdabot p6 has a karma of 0
TimToady @karma lambdabot 04:16
lambdabot lambdabot has a karma of -1
TimToady so anything lambdabot says, you have to multiply by -1 04:17
sjohnson heh 04:18
thanks for the work tips too btw
sjohnson advice straight from the Camel's mouth ! 04:19
sjohnson i have a theory. i think the given () function simply sets $_ to be the given argument 04:21
to make way for the pretty p5.10.0 when () which i believe is simply an if statement, as it needs the () brackets... and does a next; implicately 04:22
(my perldoc won't tell me about given or when :( 04:25
or maybe a last; 04:27
something to get out of that given block
rodi TimToady, diakopter: thanks for the help, working great now.
TimToady what was the problem?
rodi Um, I was falling off the end of an array </sheepish> 04:29
It's way prettier now, though :)
I just printed rule 30 with it, which is the WHOLE ENTIRE UNIVERSE, and there's probably a little tiny me inside of it, debugging this same problem again. Actually, I was a little fuzzy on that part of New Kind of Science, but it was something along those lines... 04:31
I also added some fmt-fu, thanks to today's Perl6 Advent.
Funny how Advent is such a time for renewal. 04:32
Our four-year-old is insisting we go to church, too.
TimToady yes, well, sometimes they know better than we do :) 04:34
rodi It was my three-month-old that sat with me at the terminal writing Perl 6 :)
wonder what my two-year-old has in store...
TimToady well, fortunately, you don't have to be an expert in everybody's kids, just your own 04:35
unfortunately, you're not an expert in your own kids till they're grown up :) 04:36
sjohnson TimToady: is it wrong to make life easy by using unicode characters that you can assume no one will ever use as delimiters, to get around escaping nightmares? 04:37
sjohnson i'm wondering if i'm making a "programming paradigm" mistake 04:38
TimToady no, that's why we let you pick your own quotes 04:39
of course, if you're generating code, you probably shouldn't assume that, but be ready to do proper escaping for pathological cases 04:40
but usually you can be lazy and get away with it
sometimes I run through a list of delimiters to pick one that doesn't occur in the text, just to avoid backslashes 04:41
sjohnson yeah, splitting by ' but not ?' is kind of hard in regex, as i don't want the /[^\?]'/ regex to suck up the not-question mark character in the split job
this is where the snowman chars might come in handy... and what better time than christmas too
TimToady doing that right is difficult; you basically have to parse left-to-right, and not make guesses about what came before 04:42
TimToady well, the snowman is cute enough that someone might use it. maybe you should go for something uglier 04:43
hack Dell
sjohnson they havne't made a unicode character of my face yet though :[
TimToady 04:44
sjohnson haha there it is
i bet this could probably be used and would probably take 100 years before it broke 04:45
maybe longer actually
i doubt this unicode char would ever be used in an actual book title. i think i'm good!
TimToady そうでしょう。。。 04:46
sjohnson i suppose i could die("sad face") if m/☹/; 04:47
before the parsing took place
<-- smart and safe 04:48
TimToady I'd use ⎮, which isn't the character it looks like 04:49
diakopter is blown away by search.cpan.org/~rivy/Win32-Command...andLine.pm 04:50
TimToady or maybe ┋
TimToady something that's usually used only in drawings vertically is unlikely to occur in a title 04:51
carlin ng: my $x = 'foo'; say $x ~~ /foo/;
p6eval ng 545373: foo␤
carlin ng: my $x = 'foo'; say 'foo' ~~ /$x/;
p6eval ng 545373: ␤
TimToady ng: my $x = 'foo'; say $x ~~ m┋$x┋;
p6eval ng 545373: Confused at line 1, near "say $x ~~ "␤current instr.: 'perl6;HLL;Grammar;panic' pc 519 (src/stage0/HLL-s0.pir:336)␤
sjohnson TimToady++: good unicode picking skills
whatever doesn't get me fired i like 04:52
TimToady rakudo: my $x = 'foo'; say $x ~~ m┋$x┋; 04:52
p6eval rakudo 7ef386: Null PMC access in get_string()␤in Main (file <unknown>, line <unknown>)␤
TimToady rakudo: my $x = 'foo'; say $x ~~ rx┋$x┋;
p6eval rakudo 7ef386: Null PMC access in get_string()␤in Main (file <unknown>, line <unknown>)␤
carlin can't use variables in regexs in master
TimToady rakudo: my $x = 'foo'; say $x ~~ rx┋foo┋;
p6eval rakudo 7ef386: foo␤
carlin I hope it's fixed in ng 04:53
TimToady sjohnson: yes, well, scattering frowny faces all over your code might not impress your boss
sjohnson TimToady: best to pick a unicode character that looks like his favourite pet animal
lesson the blow
TimToady don't think there's a tarantula symbol... 04:54
diakopter the Windows symbol works for that
sjohnson i know what'll NEVER get used
04:55
have to balance the risk of someone seeing that vs. it ever crashing
TimToady well, that's not actually the Nazi swastika...
sjohnson TimToady: true, but not something i'd like to get into an argument with :) 04:56
carlin I quite like 몾 04:57
diakopter rakudo: say "hihi" =~ 卐i卐;
p6eval rakudo 7ef386: Unable to set lvalue on PAST::Val node␤in Main (file <unknown>, line <unknown>)␤
diakopter o wait
sjohnson carlin: chinese chars might slip up though in book titles :)
diakopter rakudo: say "hihi" ~~ 卐i卐;
p6eval rakudo 7ef386: Could not find non-existent sub 卐i卐␤in Main (file src/gen_setting.pm, line 324)␤
carlin rakudo: say chr 0xBABE
p6eval rakudo 7ef386: 몾␤
diakopter aww, I liked the first response
sjohnson diakopter: use racist; first
:)
TimToady I'd say that 卐 is quite likely to occur in a Chinese title 04:58
diakopter masak: g'morning 04:59
masak o/
quantumEd 卐 is chinese for helicopter
sjohnson haha
卐kopter
pool hall & 05:00
thanks for the help
quantumEd np
masak I've seen 卐 in various religious circumstances across the world. mostly outside of Europe, though. 05:02
diakopter rakudo: say "hihi" =~ 5 05:03
p6eval rakudo 7ef386: Unable to set lvalue on PAST::Val node␤in Main (file <unknown>, line <unknown>)␤
diakopter masakbot: bug
masak long since reported :)
it's a variant on "cannot assign to a literal" bug. 05:04
TimToady no bug, I think
masak it's an LTA bug.
TimToady LTA message
yeah
std: say "hihi" =~ 5
p6eval std 29258: ===SORRY!===␤Obsolete use of =~ to do pattern matching; instead, in Perl 6 please use ~~ at /tmp/qYWsxSnBpZ line 1:␤------> say "hihi" =~⏏ 5␤FAILED 00:01 106m␤
masak hugme: hug STD.pm 05:05
hugme hugs STD.pm
diakopter oh. I thought it was failing on the parse
b/c of the PAST mention
masak no, it fails on the PAST->PIR transformation. 05:06
diakopter oh 05:07
diakopter oh, interesting... mono has lower startup time than v8 05:09
but neither come close to perl's
TimToady hugme: hug STD 05:10
hugme hugs STD
TimToady hmm, that didn't work
hugme: hug STD .pm 05:11
hugme hugs STD
TimToady that didn't work either, hmm
Wolfman2000 hugme: hug STD\.pm
hugme hugs STD.pm
Wolfman2000 hugme: hug STD..pm
hugme hugs STD..pm
Wolfman2000 hugme: hug STD.pm
hugme hugs STD.pm
Wolfman2000 any of those TimToady?
TimToady trying to get hugme to split on something invisible
as opposed to not splitting on something visible 05:13
rodi hugme: hug me
hugme hugs rodi
rodi hugs hugme
TimToady hugme: hug you and me
hugme hugs you and me
diakopter hugme: hug ' 05:14
hugme hugs '
diakopter hugme: hug \'
hugme hugs '
diakopter hugme: hug \\\\
hugme hugs \\
diakopter hugme: hug $sssss
hugme hugs $sssss
diakopter std: std: :std 05:15
p6eval std 29258: ok 00:01 104m␤
TimToady hugme: hug and kisses for all 05:16
hugme hugs and kisses for all
pmichaud :-D
carlin std: say "{}#{}";
p6eval std 29258: ===SORRY!===␤(Possible runaway string from line 1)␤Confused at /tmp/S86NJGdaBV line 1 (EOF):␤------> say "{}#{}";⏏<EOL>␤ expecting escape␤FAILED 00:01 105m␤
carlin rakudo: say "{}#{}" 05:17
p6eval rakudo 7ef386: Embedded comments now require backticks at line 2, near "{}\""␤in Main (file <unknown>, line <unknown>)␤
masak reads with enjoyment in the backlog how Perl 5 special-cases /ab$/ et al.
TimToady hugme: hug and kisses for all but TimToady
hugme hugs and kisses for all
quantumEd hugme
Wolfman2000 ...right, masak is having his insomnia mode again 05:21
quantumEd me and masak
Wolfman2000 ...technically, so am I
I will want sleep within an hour so that I can wake up and knock out my last online final stuff 05:22
or rather, take home final stuff
masak Wolfman2000: I've fallen into a steady sleep cycle where I sleep for 6 hours and stay awake for 20 hours. you do the math. :)
Wolfman2000 PerlJam: you around?
masak: I'd...rather not.
masak it means I have a daily phase shift of 2 hours relative to the sun. 05:23
PerlJam Wolfman2000: oddly enough, I just arrived :)
What's up?
Wolfman2000 I havne't gotten an answer on my NFS forum topic yet...at least, if the "email me on reply" thing is working right.
Tene masak: That's normal for me... I can't fit that with my work, though.
masak Tene: luckily, I'm on vacation. 05:24
Wolfman2000 Perhaps you had an answer
PerlJam What was the question?>
masak Tene: and I've timed it so that if I keep this up, by the time I get back to work, I'll be a very early riser. :)
Wolfman2000 or are you...more of an advertiser/middleman for NFS?
PerlJam: how many of my websites would require converting to work on their servers?
Wolfman2000 wishes they had an IRC room 05:24
PerlJam Wolfman2000: I have no relation to NFS really. 05:25
and no, I have no answer for you.
Wolfman2000: I'm more what The Tipping Point calls a "Connector" (but only sometimes :) 05:27
Wolfman2000 ...noted
rodi nighty night, all & 05:31
pugs_svn r29259 | lwall++ | [STD] string block escapes should be considered embedded, carlin++ 05:47
masak TimToady: don't know if you saw in the backlog the other day -- is it correct that I can call a method .foo by interpolating the string "$.foo" ? 05:51
TimToady sure 05:52
syntactically it's just a variable
masak ok; good.
TimToady and $ varibles don't follow the bracket rule
*ia
masak right.
that's what I gathered from S02.
TimToady "It is a comfort not to be mistaken in all things." 05:53
masak I guess I was just surprised because it hadn't occurred to me before. :)
diakopter speaking of snowmen: www.telegraph.co.uk/news/newstopics...owman.html 06:13
hugme: hug ll b 06:14
hugme hugs ll
diakopter .u
phenny diakopter: 1 SPACE (U+0020)
diakopter ha 06:15
.u
phenny diakopter: You gave me zero length input.
diakopter .u l b
phenny U+2114 L B BAR SYMBOL (℔)
diakopter o_O
.u b
phenny U+2114 L B BAR SYMBOL (℔)
diakopter .u
phenny diakopter: 1 SPACE (U+0020)
diakopter .u b
oh
phenny U+2114 L B BAR SYMBOL (℔)
diakopter TimToady: nice one 06:16
masak if scientists create the world's smallest comet as well, we can arrange to have the world's smallest rakudobug submitted. 06:17
JimmyZ good afternoon, #perl6 06:20
masak JimmyZ! \o/
TimToady std: say "{}#{}"; 06:29
p6eval std 29259: ok 00:01 106m␤
TimToady std: say "{ my $a; }#{ $a; }";
p6eval std 29259: Potential difficulties:␤ Variable $a is not predeclared at /tmp/dZHTe7aeKt line 1:␤------> say "{ my $a; }#{ $a⏏; }";␤ok 00:01 106m␤
masak std: say "{#}"
p6eval std 29259: ===SORRY!===␤Unable to parse statement list; couldn't find right brace at /tmp/rpbKXsDRd2 line 1 (EOF):␤------> say "{#}"⏏<EOL>␤FAILED 00:01 104m␤
TimToady std: say "{ our $a; }#{ $a; }"; 06:30
p6eval std 29259: ok 00:01 106m␤
TimToady hmm
std: say "{ our $a; }#{ our $a; }"; 06:33
p6eval std 29259: ok 00:01 106m␤
diakopter std: say "{ our $a; }#{ foo; }"; 06:36
p6eval std 29259: Undeclared routine:␤ 'foo' used at line 1␤ok 00:01 106m␤
masak rakudo: { our $a = 42 }; { say $a } 06:37
p6eval rakudo 7ef386: Symbol '$a' not predeclared in <anonymous> (/tmp/KOB2laIP38:2)␤in Main (file <unknown>, line <unknown>)␤
mberends good morning, feeding the backlog habit 06:49
masak morning, mberends. 06:50
mberends masak: goodness me, you've been through another strange sleep cycle ;) In sync with Europe again now? 06:51
diakopter vm integer primitives: perl6.pastebin.com/d247eb23 yah; it's not really a fair comparison...
masak mberends: no, I'm currently 180 degrees out of phase.
mberends lol 06:52
masak give it a few more days and I'll be an early riser. :)
mberends right. does you cycle average about 28 hours? several people seem to do that, and synthesize a 6 day week. 06:54
masak no, it seems to be about 26 hours. 06:55
mberends you could do a 13 day fortnight then
masak heh :) 06:56
I don't plan to keep this up when I return to $work.
but it has been very good for getting the tree spider semantics nailed down. and a bunch of other tasks I've done the last few nights.
mberends I plan to study the spider to see whether a C port is feasible, sometime soon. 06:58
so write it good ;)
masak actually, I've finished it.
mberends \o/
masak all it ever was was a proof-of-concept.
but I promise to write plenty of GGE documentation comments. :)
mberends \o/ 06:59
masak mberends: the basic idea of the tree spider is very simple: break down all recursive-descent-calls and continuations into simple message passing, so that it can all be done in the same lexical scope. 07:00
mberends that's a very useful concept, and sounds compatible with almost any implementation language
masak it is.
mberends \o/ 07:01
feasibility has just shot up
masak there are four messages: DESCEND, MATCH, FAIL and BACKTRACK, and the spider queries regex expression nodes, gets back one of these messages and. reacting to it, goes to another node and queries it.
mberends good spider, keep spinning :)
masak diakopter advised me that I'll want to do this on an expression tree cloned from the original one. he never said why. :) 07:02
but I can see there'd be a problem with reentrancy without the cloning.
mberends because history of previous visits is state 07:03
masak yes.
the spider keeps a little 'lexpad' for each expression node, hashed on that node's reference id.
I like how all this is handled by the spider though, and not by the nodes themselves. it feels very pure. 07:04
mberends a stack or linked list for state would be more economical than a tree clone
masak mberends: yes. the current model in GGE does that.
but it's a pure optimization step.
mberends \o/
liking it more all the time
masak I'll probably start with getting the spider to work, but slowly. 07:05
(in GGE)
it'll involve throwing the old model out.
mberends: I'll tell you about what was probably the biggest surprise in all this. 07:06
mberends p6re! p6re! Soon coming to a language near you!
masak mberends: backtracking is done through 'savepoints', with the analogy being your regular platform game where you can save where you are.
mberends great analogy
masak mberends: the question is, at which point do we consider the regex to be so failed that it should activate a savepoint? 07:07
first I thought that a node should register a savepoint with its immediate parent.
and if the parent fails, it should trigger the savepoint.
but that turns out not to be the case.
mberends no
savepoints are where you have alternatives 07:08
masak simple counterexample: x[a*?]y
matching on 'xaaaay'.
mberends: yes, savepoints are forks in the road.
mberends if y is not found, revert to x, not a 07:09
masak they're a way of saying "oh, I can go this way or that way. I'll try this way first".
mberends indeed
masak mberends: no, if y is not found, it should revert to the *? node.
mberends ok
yes, * has the alternatives of course 07:10
masak mberends: but if the savepoint is registered with that node's parent (which is the [] group), we've already passed the point where the savepoint would have been triggered, and the match fails instead.
mberends: this was actually the reason I implemented the linked list optimisation, because then this example works again. :)
mberends that's all very C compatible, \o/ 07:11
masak it's interesting to see how my four or five attempts all caught little glimpses of the real solution.
mberends yeah, testing corner cases is *very* important
masak the test suite has been good at letting me know where I'm thinking wrongly. 07:12
I'm on first-name basis with a few of the tests by now. :) 07:13
mberends etched on your fingers, no doubt :)
masak I'm now of the opinion that implementing a parser is something many programmers should try at least once. 07:14
mberends for great justice
masak that's why I'm eager to put much of it in a series of blog posts.
mberends: www.youtube.com/watch?v=qItugh-fFgg 07:15
mberends at least once, they get better each time
masak yes. I think I'll have a much better chance to grok nqp-rx after this. 07:16
mberends cool "all your base are belong to us" reference :-) # for backloggers 07:17
masak mberends: that's where "for great justice" comes from. :)
mberends read that on Wikipedia too 07:18
the video is more derived content, but fits the meme well 07:19
OJ appears :)
masak wishes he knew enough Japanese to be able to read the Japanese in that Wikipedia article, not just the English translation 07:23
some things I grok a posteriori, though. had '通信士' ('communication operator') been Chinese, it could have meant 'through-send-scholar'. 07:24
which makes sense. :) 07:25
mberends related Fox news piece: www.youtube.com/watch?v=cQnDkgdIn_A&NR=1
etc.
masak roses are red / violets are blue / all my base / are belong to you 07:26
mberends haha
masak some day I will meet a partner nerdy enough to appreciate that one. :) 07:27
mberends and then appreciate that partner :)
masak of course! all my base would be belong to her. 07:28
mberends even your base pairs 07:29
masak I'm willing to use them for cross-breeding experiments, yes.
mberends aww, sweet. *sigh* 07:30
masak :P 07:32
mberends still backlogging, it was an interesting past 8 hours 07:36
moritz_ good morning 07:40
masak moritz_! \o/
spinclad iz backlogging the last week. that too has been interesting on first glimpse.
mberends good morning moritz_
spinclad good moritz, morniing 07:41
masak you want to see interesting? wait 'til ng lands. :)
laziness! infinite lists! metamodels!
variables in regexes!
moritz_ Mu! 07:42
spinclad specchanges!
iz all gud 07:43
masak rakudo: Mu # moritz_: doesn't master have Mu already?
p6eval rakudo 7ef386: ( no output )
moritz_ masak: yes, but only as an alias to Object 07:44
masak moritz_: ah. 07:45
rakudo: say Mu === Object
p6eval rakudo 7ef386: 1␤
spinclad -> bed & # good turningearth, all
masak rakudo: say [-] (Mu, Object)>>.WHICH 07:46
p6eval rakudo 7ef386: 0␤
masak :)
rakudo: say True.name 07:50
p6eval rakudo 7ef386: Method 'name' not found for invocant of class ''␤in Main (file src/gen_setting.pm, line 324)␤
masak rakudo: say Bool::True.name 07:50
p6eval rakudo 7ef386: Method 'name' not found for invocant of class ''␤in Main (file src/gen_setting.pm, line 324)␤
masak submits rakudobug
there are just so many ways in which the Bool type doesn't behave like an enum... 07:51
jnthn: is Bool implemented as an enum in ng? :)
moritz_ masak: that's already submitted 07:52
masak ok.
masak stands down
I had a feeling it might.
ok, time for me to buy nom and then go to bed. 08:03
see you later today, #perl6.
digirave anyone have installed moritz.faui2k3.org/en/ilbot before? 08:52
moritz_ did 09:01
but sometimes I get the impression the installation is not for the faint of hearted :/ 09:02
digirave just finished installing 09:14
noticed .htaccess is hard coded for / root install only, had to modd it 09:15
moritz_ there might be some links in the template that are also hard-coded for / 09:27
moritz_ will be offline for most of the weekend 09:29
huf hm, so scripts get the extension .p6 but modules are still .pm, right? 10:57
mberends the .pm module convention is fairly common, but the .p6 extension is more a matter of personal taste 10:59
in fact "use Test" currently implies reading a file called Test.pm, but extensions .pl and .pl6 (yuk) are valid 11:00
huf modules with extensions other than .pm are supported? uh 11:01
mberends in theory maybe, but not in practice. Rakudo can also use modules suffixed .pir and .pbc 11:02
The preference is for all perl scripts to use the .pl extension or no extension at all, and for the shebang line or a perl-6-only construct such as "class" or "use v6;" to indicate Perl 6, and to otherwise default to Perl 5. Alas, no implementation does all that yet. 11:09
mberends OH HAI viklund, how are things? 11:18
jnthn afternoon, #perl6 12:51
phenny jnthn: 02:54Z <diakopter> tell jnthn ok, now you've gone and done it. ^^ # apt-get install mono-csharp-shell mono-gmcs # in Ubuntu Karmic
mberends afternoon, jnthn 12:54
jnthn yawns 12:59
sjohnson yo jnthn 13:05
jnthn sjohnson: oh hai 13:06
colomon masak: I've got a weird bug for you... 13:52
When I try to run master rakudo from my ng rakudo root directory, I get the "You need to run make install" message like master has not been installed. If I run it from any other directory it's fine. 13:54
pmichaud colomon: that's because it's finding the wrong dynamic libraries, likely. 14:02
good morning, #perl6
jnthn o/
colomon pmichaud: good morning!
I didn't know about the min operator before your Advent post. Yay! 14:03
pmichaud yes, people are often surprised by that one :-) 14:05
colomon I knew there was @array.min, and was stymied by the lack of min($a, $b). 14:13
Knowing about the operator feels huge, though. Really handy, especially with the meta ops. 14:14
pugs_svn r29260 | pmichaud++ | [perl6advent] Some perl6advent schedule/topic updates. 14:20
jnthn just read the Perl 6 advent entries so far and is impressed. 14:22
Good work, folks. :-) 14:23
colomon I know I've learned several new-to-me perl 6 tricks already... 14:27
Happy comments rolling in about the metaoperators post, too... 14:28
pugs_svn r29261 | pmurias++ | [mildew] more porting over to new STD, t/if.t works 14:49
pmurias diakopter: hi
mathw pmichaud: Advent Calendar win :)
colomon ng: say Inf.WHAT 14:50
p6eval ng 545373: Num()␤
colomon ng: say sin(1.2e0) 14:55
p6eval ng 545373: 0.932039085967226␤
colomon ng: say sin(Inf)
p6eval ng 545373: too many positional arguments: 2 passed, 1 expected␤current instr.: '&sin' pc 185594 (src/gen/core.pir:0)␤
colomon ng: say (1.2e0).WHAT
p6eval ng 545373: Num()␤
colomon ng: say Inf.WHAT 14:56
p6eval ng 545373: Num()␤
pmichaud ng: say Inf.PARROT
p6eval ng 545373: Float␤
pmichaud hmmm.
romanhunt morning all 14:57
does anyone have any opinions on the book Perl6 and Parrot essentials? 14:58
pmichaud romanhunt: very out of date. 14:59
mathw I've got a copy
romanhunt thx
mathw It's good for nostalgic value
romanhunt unfortunately I cannot afford to spend the cash if its out of date. I was just hoping for something to read on the train etc 15:00
frettled Perhaps we should work on a small ebook? :D
pmichaud are you more interested in p6 or parrot?
romanhunt perl 6
both concepts are pretty facsinating though 15:01
pmichaud some of the parrot stuff is available as an e-book now (and updated). there's not really an up-to-date perl6 book at the moment, although many of us are working on that. 15:01
romanhunt the multi-language interpreter <=> multi-interopreter-language ...
I do want to learn parrot though 15:02
pugs_svn r29262 | pmichaud++ | [pm.txt]: Another short question for TimToady++ 15:04
r29262 |
r29262 | Pm-13: What's the parent type of C<Regex>? (I hope it's C<Method>.)
ng_feed rakudo-ng: colomon++ 15:08
rakudo-ng: Add all of the Num trig functions back in.
colomon ng: say Inf.sin
p6eval ng 545373: NaN␤
colomon oooo, that worked.
pmichaud ng: say Inf ~~ Num
p6eval ng 545373: 1␤
dalek kudo/ng: 5b836a4 | (Solomon Foster)++ | src/core/Num.pm:
Add all of the Num trig functions back in.
15:12
pugs_svn r29263 | pmichaud++ | [pm.txt]: Another question for TimToady++ 15:16
r29263 |
r29263 | Pm-14: Is the :c modifier allowed on token/regex/rule? I.e., could
r29263 | someone do...?
r29263 | 'abcdef' ~~ token :c(1) { cdef }
r29264 | mattw++ | [advent] subject alterations for mathw 15:19
dalek p-rx: e6cb831 | pmichaud++ | src/Regex/Regex.pir:
Initial version of regex matching.
16:17
p-rx: fe021de | pmichaud++ | (4 files):
Add ability to smartmatch regex/token/rule (although anchoring is
p-rx: 01c9533 | pmichaud++ | (5 files):
Refactoring for Regex::Method.
p-rx: 6297c85 | pmichaud++ | src/Regex/Regex.pir:
Remove obsolete file.
16:18
p-rx: df1c1da | pmichaud++ | src/NQP/Actions.pm:
Small refactor of regex/token/rule action.
p-rx: 5a0677a | pmichaud++ | (3 files):
Add /.../ form of regexes and matching.
Wolfman2000 *yawn* morning 16:45
jeremiah OH HAI 16:53
jeremiah is there a perl6 testing idiom for 'use'ing modules like in perl5? 16:53
I'm thinking of something equivalent to use_ok 16:54
jeremiah rakudo; use Test; plan 1; sub ima_int(Int $x) {}; is ima_int(9), [], 'works with ints'; 17:08
rakudo: use Test; plan 1; sub ima_int(Int $x) {}; is ima_int(9), [], 'works with ints'; 17:09
p6eval rakudo 7ef386: ( no output )
jeremiah perl6: use Test; plan 1; sub ima_int(Int $x) {}; is ima_int(9), [], 'works with ints';
p6eval elf 29264: Cant locate Test in ( . ).␤
..rakudo 7ef386: ( no output )
..pugs: pugs: *** Unsafe function 'use' called under safe mode␤ at /tmp/10oXn2wo4T line 1, column 1␤
jnthn jeremiah: there's some issues with Rakudo evalbot here...don't rely on "no output" meaning anything. 17:12
jeremiah okay :)
jnthn ng: use Test; plan 1; sub ima_int(Int $x) {}; is ima_int(9), [], 'works with ints';
p6eval ng 5b836a: 1..1␤Null PMC access in type()␤current instr.: '_block14' pc 29 (EVAL_1:0)␤
jnthn meh.
ng: use Test; plan 1; sub ima_int(Int $x) { 1 }; is ima_int(9), 1, 'works with ints'; 17:13
p6eval ng 5b836a: 1..1␤ok 1 - works with ints␤
jeremiah ah!
cool
ng: use Test; plan 1; sub ima_int(Int $x) { 1 }; is ima_int("oh hai"), 1, 'works _only_ with ints'; 17:14
p6eval ng 5b836a: 1..1␤Nominal type check failed for parameter '$x'; expected Int but got Str instead␤current instr.: '&ima_int' pc 153 (EVAL_1:56)␤
jeremiah ng: use Test; plan 1; sub ima_int(Int $x) { 1 }; dies_ok ima_int("oh hai"), 1, 'works _only_ with ints';
p6eval ng 5b836a: 1..1␤Nominal type check failed for parameter '$x'; expected Int but got Str instead␤current instr.: '&ima_int' pc 153 (EVAL_1:56)␤
jnthn jeremiah: You need to pass dies_ok a closure. 17:15
jeremiah ah, okay.
jnthn dies_ok { ima_int("lol") }, ...
jeremiah ng: use Test; plan 1; sub ima_int(Int $x) { 1 }; dies_ok { ima_int("oh hai") } 'works _only_ with ints';
p6eval ng 5b836a: sh: ./perl6: No such file or directory␤
jnthn ah, that'll just be the half-hourly rebuild. 17:16
jeremiah ng: use Test; plan 1; sub ima_int(Int $x) { 1 }; dies_ok { ima_int("oh hai") }, 'works _only_ with ints';
p6eval ng 5b836a: sh: ./perl6: No such file or directory␤
diakopter mberends: I saw your comments with masak... the new jsmeta/sprixel works the same way.. 17:18
except instead of trampolining method calls (or recursive method calls as in TreeSpider) it's all inlined into one loop/switch 17:19
and the clones are extremely economical
there is just 1 allocation for each clone 17:20
diakopter mberends: except now I've got the itch to write a C# edition... b/c I'm morbidly curious how much faster it'd be :/ 17:22
jnthn: C# C# C# 17:23
jnthn diakopter: Well, my priority is getting ng sorted out for now. :-) 17:24
ng_feed rakudo-ng: (jnthn)++ 17:26
rakudo-ng: Get role to instance application implemented (operators are fully in Perl 6, applicator is in NQP with one little Parrot-specific bit that we can eliminate later).
jnthn Mmmm. does and but are so nicer in ng. :-) 17:27
dalek kudo/ng: 10bc6e8 | jnthn++ | (6 files):
Get role to instance application implemented (operators are fully in Perl 6, applicator is in NQP with one little Parrot-specific bit that we can eliminate later).
17:30
jnthn huh? 17:31
dalek reports ng as well as ng_feed now?
jnthn would complain, but he likes the karma win.
mathw would complain, because it clogs up his screen 17:32
Wolfman2000 would complain, but he's doing homework
cognominal jnthn++ # more karma 17:36
jnthn @karma jnthn 17:37
lambdabot You have a karma of 587
jnthn hopes his new laptop comes _early_ next week. 17:38
ng_feed rakudo-ng: (jnthn)++ 17:55
rakudo-ng: Allow my $x does Foo to work again.
rakudo-ng: (jnthn)++
rakudo-ng: Support for class Dog { does Smell }.
diakopter pmurias: rehi 17:57
pmurias diakopter: once i port mildew to the new STD i could add a C# backend 17:58
dalek kudo/ng: 1f1e259 | jnthn++ | src/core/traits.pm:
Allow my $x does Foo to work again.
17:59
kudo/ng: 51c596c | jnthn++ | src/Perl6/ (2 files):
Support for class Dog { does Smell }.
diakopter pmurias: cool 18:01
pmurias diakopter: i'm not familiar with .net so i will need help with writing the runtime 18:26
ng_feed rakudo-ng: colomon++ 19:06
rakudo-ng: Add Num.atan2.
rakudo-ng: colomon++
rakudo-ng: Temporary patch to Any!to-radians and Any!from-radians to get them working in ng. Also add Any.log.
dalek kudo/ng: 8948704 | (Solomon Foster)++ | src/core/Any-num.pm:
Temporary patch to Any!to-radians and Any!from-radians to get them working in ng. Also add Any.log.
19:08
kudo/ng: 15da065 | (Solomon Foster)++ | src/core/Num.pm:
Add Num.atan2.
ng_feed rakudo-ng: (jnthn)++ 19:21
rakudo-ng: Put back .?, .+, .* for method calls by name.
colomon_ jnthn: while I was messing around with trig, I discovered => doesn't work in ng yet. 19:24
dalek kudo/ng: 53a6f77 | jnthn++ | src/glue/dispatch.pir:
Put back .?, .+, .* for method calls by name.
19:25
colomon_ I looked at adding it, but I can't figure out how to create a Pair other than :key(value), which doesn't seem useful for writing =>
jnthn colomon_: Pair.new(key => ..., value => ...) 19:36
I think.
colomon_ jnthn: errr.... => doesn't work, does it? That was the whole point of the exercise... 19:41
and ... 19:42
> say Pair.new(:key("hello"), :value("42"));
Could not find non-existent sub &fail
lambdabot <no location info>: parse error on input `;'
colomon_ Just occurred to me, though, that could be say failing rather than the new. Let me check...
ah, that's it, the new does work. 19:43
Groovy, I think I can quickly make some improvements here...
jnthn colomon_: There's two => thingies.
colomon_: One is the operator 19:44
colomon_: The other is parsed by fatarrow.
colomon_ oh?
jnthn And happens when there's a literal on the lhs.
colomon_: See STD, fatarrow
colomon_ I think I'll try to add Pair.Str and Pair.perl first, they should be easy. 19:45
jnthn colomon_: Which is separate from token infix:sym« => » 19:45
colomon_: OK, nice :)
colomon_ rakudo: say 10 => 20; 19:47
p6eval rakudo 7ef386: 10 20␤
jnthn afk for a bit 19:48
colomon_ rakudo: say (10 => 20).Str 19:49
p6eval rakudo 7ef386: Pair()<0x11fb390>␤
colomon_ rakudo: say ~(10 => 20) 19:50
p6eval rakudo 7ef386: 10 20␤
colomon_ Just want to check and make sure the spec doesn't say anything about defining Pair.Str or ~Pair... anyone know? 19:58
ng_feed rakudo-ng: colomon++ 20:09
rakudo-ng: Early versions of Pair.perl and Pair.Str.
colomon_ is starting to think helping write its library is a good way to learn a language. :) 20:10
dalek kudo/ng: 17a1ec1 | (Solomon Foster)++ | src/core/Pair.pm:
Early versions of Pair.perl and Pair.Str.
20:11
colomon_ Hmmm... looks like fatarrow is already in ng's grammer. 20:15
colomon_ Doesn't actually seem to be infix:sym« => » in STD.pm ? 20:19
jeremiah Can't find ./strict in @*INC 20:21
^^ What does that mean?
Am I missing a library? 20:22
colomon_ did you say "use strict" in a Perl 6 program?
jeremiah I'm not sure, I am trying to compile masak's Web 20:23
And I think his Configure script calls strict
But I'm not certain since the next line of the error message is:
colomon_ I don't know anything about Web, alas. 20:24
jeremiah in Main (file <unknown>, line <unknown>)
How can I print out the contents of @*INC?
colomon_ rakudo: say @*INC.perl;
p6eval rakudo 7ef386: ["/home/p6eval/.perl6/lib", "/home/p6eval//p2/lib/parrot/1.8.0-devel/languages/perl6/lib", "lib", "."]␤
colomon_ but that won't be it.
jeremiah no? 20:25
colomon_ there absolutely should not a ./strict for you to find.
jeremiah okay
colomon_ use strict is a Perl 5ism.
there is no Perl 6 equivalent yet (and actually, by default it is strict).
jeremiah I see.
I think it is Configure.pm calling strict 20:26
In any case, strace outputs this:
stat64("./strict.pm", 0xbfc0affc) = -1 ENOENT (No such file or directory)
colomon_ Huh. Web/lib/Configure.pm does not call use strict. 20:28
wonder if you're getting the wrong Configure.pm?
jeremiah I think I am!
Good catch!
I may have moved the wrong one.
Going to diff them now 20:29
Yup. Wrong Configure.pm 20:30
Lo and behold, it works. 20:31
Thanks colomon_
colomon_ jeremiah: you're welcome 20:32
huf where can i find a list of existing perl6 modules? 20:34
colomon_ huf: there isn't exactly one yet.
the closest I'm aware of is proto's projects list. 20:35
let me see...
nbrown_ huf: github.com/masak/proto/blob/master/projects.list
nbrown_ huf: like colmon said it's not complete, but it has a few 20:36
huf thanks
colomon_ github.com/masak/proto/blob/master/projects.list ... whoops, nbrown_++ beat me to it. :)
masak oh hai, #perl6. 20:36
mberends speak of the ... breaker of things ?
masak anything need breaking? :) 20:37
mberends nah, your brainchild projects.list was being recommended 20:38
jeremiah lolitsmasak!
I am still working in installing Web :P 20:39
masak omgitsjeremiah!
jeremiah (And blogging about it.)
masak jeremiah: let me know if I can help.
colomon_ jnthn, pmichaud: If one of you gets the chance, I've got an infix:«=>» for Pair, but can't figure out how to make the ng grammar recognize it.
jeremiah I've written 500 words, but I think about 100 more and it'll be finished. :)
masak jeremiah: I'm currently working on getting the last grant week blog post out.
jeremiah aha, groovy.
So, one of the things is, perl6 doesn't necessarily have all the libraries needed in PERL6LIB to configure a given module 20:41
For example, when installing Web, I needed to add Configure.pm to PERL6LIB
But I put the wrong one there, since there are three I think under the rakudo dir. 20:42
masak jeremiah: PERL6LIB handling is not fun, agree. 20:43
jeremiah :)
masak jeremiah: that's probably the main reason I'm pushing for installed-modules despite being initially hesitant. 20:44
jeremiah: after that one lands, PERL6LIB will need to be set only for not-yet-installed modules.
jeremiah Well, with Configure.pm, that seems like a really good solution.
Because there is more than on Configure.pm and users might get confused as to which one they want / need
masak nod. 20:45
proto introduces 'unintended success' in many dimensions.
jeremiah heh
masak I consider the proliferation of 'Configure.pm' in various places to be one of those dimensions.
mberends masak: those who do not learn history are doomed to repeat it: trac.parrot.org/parrot/browser/trun...E?rev=7051 ;-) 21:07
Wolfman2000 rakudo: say "©".subst(/./, { ord($/).fmt('%X') }, :global); 21:08
p6eval rakudo 7ef386: A9␤
Wolfman2000 err
rakudo: say "©".subst(/./, { ord($/).fmt('%04X') }, :global);
p6eval rakudo 7ef386: 00A9␤
Wolfman2000 ...looks like I have to recompile rakudo
masak should ord() be defined on Str? not Buf?
Wolfman2000 masak: got me. 21:09
I did discover something interesting though
rakudo: say "hi".ord
p6eval rakudo 7ef386: 104␤
Wolfman2000 rakudo: say "h".ord
p6eval rakudo 7ef386: 104␤
Wolfman2000 ord only looks at the first character
or buf, or whatever it is
masak mberends: I'm curious about your URL, but I've yet to get through to the server. 21:10
jeremiah doing a 'perl6 t/01-web-basics.t' in Web's test dir produces this error Can't find ./Web in @*INC
I do have Web in PERL6LIB
Ah, but only as a dir, not as a .pm
masak jeremiah: export PERL6LIB=`pwd`/lib 21:11
mberends masak: tracked down pmichaud++'s first release of p6ge, relevant to parsers and grammar engines. 2004-11-18!
jeremiah ah okay
masak mberends: oh yes. I've actually tracked down the same file once. :) 21:12
mberends: PGE is a direct descendant of P6GE, IIRC.
mberends just wanted to be careful not to re-invent the same wheel ;) 21:14
masak hm, which wheel exactly? I'm already fully aware that what I'm writing is a port of PGE :)
that's why it has a very similar name. 21:15
mberends my perhaps redundant idea of porting (back) to C
masak oh!
now I see the relevant section.
right, P6GE started out as a PIR code generator written in C, and then changed into a PIR code generator written in PIR. 21:17
mberends: but your plan is to make neither, right?
yours would be a pure C regex engine.
pmichaud If I were to attempt a p6 regex engine in C, I'd start with nqp-rx. 21:18
mberends indeed, so there might be something not repeating there. The output would be the match object.
pmichaud: thanks for a very good suggestion
pmichaud actually, I think it's more accurate to say that p6regex engines produce cursors nowadays 21:18
match objects are really side-effects 21:19
masak nod.
pmichaud (even though they're the side effect we're most interested in :-)
mberends ok, need to sort out my terminology
masak I think I grokked the cursors model for a short while. need to re-grok it again soon.
pmichaud nqp-rx is much clearer on that model than pge, fwiw 21:20
mberends "second system done right"
masak :)
pmichaud anyway, to get p6regexes to work in C, you really need an underlying object model and methods 21:21
masak pmichaud: my plan for GGE is to first implement PGE to my own satisfaction, and then try to refactor it into nqp-rx.
jeremiah t/01-web-basics.t ............. Symbol '$PERL6LIB' not predeclared in <anonymous> (t/01-web-basics.t:5) 21:22
pmichaud masak: (refactor into nqp-rx) ... that doesn't sound right.
jeremiah So reseting PERL6LIB produces a different test message. 21:23
pmichaud nqp-rx isn't a refactor of PGE. It's a rewrite.
masak jeremiah: o.O
jeremiah I know, right. Weird.
masak pmichaud: yes, I know. maybe that plan won't work.
jeremiah: I'm now going to open t/01/web-basics.t to see what it contains. 21:24
jeremiah It is short. :)
masak and totally useless. :/
jeremiah Well, doesn't it check to see if we can find Web.pm?
That seems useflu.
oops
useful. 21:25
masak jeremiah: I don't think so anymore.
jeremiah okay.
masak jeremiah: if the real tests run, then we've foind Web.pm.
no need to test it individually.
jeremiah okay
masak it just means there will be one more failing test in a sea of failing tests...
jeremiah I'll just jump over the tests for now and see if I can use Web.pm directly. 21:26
masak Ovid (I think it was him) has written at length about the evils of use_ok in Perl 5.
jeremiah: that sounds like a plan.
jeremiah cool
masak S05 says :actions, but Rakudo uses :action. which is it? 21:41
as uasi++ points out in twitter.com/uasi/status/6366831553 , there are numerous problems with S05:3794. calling the grammar 'Integer' produces a strange error in Rakudo. there's a missing semicolon on the line ending with "'binary'". &make doesn't work, since the parameter is named $match, not $/. 21:46
I'll fix the ones that seem obvious, and leave the rest to TimToady or someone. 21:47
pugs_svn r29265 | masak++ | [S05] fixed a number of infelicities in action example 21:49
jnthn evenin'
masak also, while I'm thinking about these things, why instantiate the action object? it has no state.
jnthn! \o/
colomon_ o/ 21:50
masak rakudo: grammar Integer { rule TOP { x } }; Integer.parse("x")
p6eval rakudo 7ef386: ( no output ) 21:51
masak locally, that says "set_attr_str() not implemented in class 'Integer'"
masak submits rakudobug
jnthn meh
rgrau could any of the rakudoperl twitter admins tweet today's advent? it deserves to be known :)
masak jnthn: works in ng? :P
jnthn masak: Dobut it. 21:52
masak: I fear it's the darn Parrot Integer PMC leaking in...even though we're in a HLL. :-/
masak hugme: help
hugme masak: (add $who to $project | list projects | show $project | hug $nickname | tweet $twittername $message )
masak hugme: tweet rakudoperl Perl 6 Advent Calendar Day 5: Metaoperators -- bit.ly/6ZiHlr 21:54
hugme hugs masak; tweet delivered
masak jnthn: well, that's just too bad.
literally. it's exceedingly bad.
rgrau thanks masak++
masak rgrau: thanks for the suggestion. :)
jnthn masak: It's only my first guess.
ng: class Integer { } 21:55
p6eval ng 17a1ec: ( no output )
jnthn ng: class Integer { }; say Integer
masak jnthn: it sounds reasonable.
p6eval ng 17a1ec: Integer()␤
jnthn ng: class Integer { }; say Integer.new.WHAT
p6eval ng 17a1ec: Integer()␤
jnthn hm
ng: grammar Integer { };
p6eval ng 17a1ec: ( no output )
jnthn ng: grammar Integer { }; Integer.new
p6eval ng 17a1ec: ( no output )
jnthn ng: grammar Integer { }; Integer.parse("")
p6eval ng 17a1ec: Could not find non-existent sub die␤current instr.: 'perl6;Grammar;parse' pc 8144 (src/builtins/Any.pir:52)␤
jnthn ng: grammar Integer { method TOP { say "called" } }; Integer.parse("x") 21:56
p6eval ng 17a1ec: Unexpected named parameter 'grammar' passed␤current instr.: 'perl6;Integer;TOP' pc 250 (EVAL_1:112)␤
jnthn heh
masak: It looks like ng may resolve it, but I don't think we do rule/regex/token yet.
masak nod. 21:58
will we have ng for the December release? or even for Christmas Eve? only time will tell.
masak glances longingly skyward
jnthn masak: I'm getting settled down again now in the UK, so am digging in again. :-) 22:01
masak hugme: hug jnthn gratefully!
hugme hugs jnthn
jnthn masak: Things should accelerate once I can haz a laptop that's not powered by clockwork. :-)
masak thought all digital computers were powered by clocks
jnthn: are you getting one of those analog computers? 22:02
I hear Windows 7 runs smoother on those.
jnthn masak: I thought everything was smoother in the analog world. ;-) 22:03
masak yes, exactly! :) 22:04
well, as exact as it gets with physical moving parts. :)
jeremiah Solid state analog 22:06
mathw jnthn: are you on a seasonal visit to the UK? 22:11
jnthn mathw: Sorta.
jeremiah I Sweden, the seasons visit you. 22:12
jnthn mathw: At the moment I'm on a looking-after-family-dog visit. :-)
mathw woof
jnthn w00f
mathw oh it's an internet dog is it 22:13
masak loldog.
jnthn Mostly it's a sleeping and eating and barking at the postman dog. :-) 22:13
mathw sounds a bit like my cat 22:14
except for the barking at the postman bit
instead of that, he sits on the laptop
jnthn mathw: I suspect your cat would take less kindly to having a leash put on it and being taken for a walk around the block, though. :-)
mathw probably
not many people train their cats to be walked 22:15
and I find that self-walking is one of the best features of the cat
jeremiah A self-walking cat! 22:24
What will they think of next.
mberends self-GC (or at least G-hiding) is also superior to dogs
mathw a self-writing compiler? 22:26
jeremiah _that_ will be the singularity for sure.
mberends self-certifying wasn't good for mortgages though 22:27
mathw yes, when we have a computer that's as smart as jnthn and pmichaud combined
but now I'm off to bed
night
masak mathw: 'night!
jeremiah Self-sleeping human ^^
Wolfman2000 is almost done...
jnthn is finally doing something (small) for book! 22:31
colomon_ mathw: how goes the Advent post? 22:36
colomon_ rakudo: say (-<<(1, 2, 3, 4)).perl 22:38
p6eval rakudo 7ef386: say requires an argument at line 2, near " (-<<(1, 2"␤in Main (file src/gen_setting.pm, line 2593)␤
colomon_ rakudo: say (-«(1, 2, 3, 4)).perl 22:39
p6eval rakudo 7ef386: say requires an argument at line 2, near " (-\x{ab}(1, 2,"␤in Main (file src/gen_setting.pm, line 2593)␤
masak rakudo: class A { method true() { False }; method Num() { 42 }; method Str() { "foo" }; method list() { (1,2,3) } }; my $a = A.new; say ?$a; say +$a; say ~$a; say @($a) 22:44
p6eval rakudo 7ef386: ( no output ) 22:45
masak locally, that yields 0, 42, foo, 123 (each on its own line)
Perl 6 aims to remove unnecessary surprises; things that complicate learning and hinder memory.
jnthn hehe
dalek ok: dd9b746 | jnthn++ | src/roles.pod:
Stub in an initial example we can use for explaining/discussing roles.
ok: 7519c2f | jnthn++ | outline.pod:
Remove (?) from Roles chapter in outline, add an idea of something else we could have a chapter on.
masak why do I have to define the methods true, Num, Str, and list to do the above?
it's totally random.
Bool, Num, Str and List would have been fine.
or bool, num, str and list.
jnthn masak: I think there's some improvement to do there, yeah. I do wonder to what degree the Numeric role etc factors in to this. 22:47
That is, we'd go by those names in th efuture.
And hopefully they'd be more consistent.
masak: I agree that as it currently stands it's sub-optimal though. 22:48
colomon_ Are prefix and postfix hyperoperators supposed to work at the moment in master? I can get >>. to work, and nothing else I've tried this week works.
masak it looks like a corner no-one's ever thought to dust.
jnthn colomon_: No, they don't.
colomon_: We only did infix ones.
>>. is a special case. 22:49
masak: It's come up in various other ways before.
masak jnthn: nod.
I've been known to bring it up, too.
jnthn masak: Aye. It's worth asking again. Hopefully each time it's asked, a solution gets more likely. :-) 22:50
masak ok, I'll ask it again then.
:)
jnthn ;-)
masak why do the conversion methods to Bool, Str, Num and List look so haphazard? 22:51
they're pretty important, and it would really help if they were consistent.
jnthn masak: Part of the problem though is that .Num suggests "return a Num"
But we'd rather +42 did not.
We want an Int there.
masak Int does Num. 22:52
Wolfman2000 If $ == $.Int, force Int? I don't know
jnthn masak: In a slightly haphazard kinda way, yes.
masak jnthn++ # @!whoz-op 22:54
it's a "Kill your darlings" kind of joke to have in a book, but at least I enjoyed it :)
jnthn: oh, and you seem to suffer from the illusion that one can check array membership by smartmatching against the array. that hasn't been true for some time. 22:55
jnthn: I can fix it, if you want.
jnthn: easiest is $sender ~~ any(@!whoz-op), I think. 22:56
jnthn masak: Oh, that was taken out? 22:57
You sure?
masak 100% sure.
that was part of the big smartmatch refactor that got backported into 5.10.
in a way, smartmatch got slightly less smart.
I think I've come around to it being a good change, though. 22:58
jnthn masak: OK, go ahead and fix.
masak: It reads nicer anyway. 22:59
masak is there a way to remove a role at runtime? the opposite of 'self does $plug-in'?
jnthn masak: not as far as I'm aware.
masak jnthn: I think I'll make it 'eq' instead of '~~' then, too. since it's string comparison anyway.
jnthn masak: There's "a way"
masak: Yes, do.
jnthn masak: Keep a copy of the object around, pre-compositon. 23:00
jnthn masak: well, but that doesn't actually do what you want too well though. 23:00
masak no, not really.
jnthn masak: heh. use Role::doesn't
masak :)
Role::undoes
jnthn Role::donotwant 23:01
masak :)
cognominal short for Role does is Droid?
jnthn masak: Anyway, I'll try and fill out the text in that chapter a bit tomorrow :-) 23:02
masak: It's another little bit of progress towards book. :-)
masak \o/
jnthn masak: Does it look like a decent example, overall? 23:03
(once we tidy up the rough edges, of course)
masak jnthn: yes, I like it. 23:04
jnthn: I'm thinking whether it might be too much to show all that code and then explain it, but we can always think about order a bit later on. 23:05
jnthn masak: Well, I'm assuming classes (and thus methods and attrs) along with a bunch of basics, plus regexes and so on have come before this. 23:06
masak: If so, it puts many things together as well as adding some new things.
masak: It is quite a bit of code though, yes.
masak nod.
dalek ok: 9a50799 | masak++ | src/roles.pod:
[roles] fixed spelling error, smartmatch thinko
23:09
ok: c41383f | masak++ | src/builtins.pod:
[builtins] fixed typo
jnthn has to say, (my family)++ for equipping the conservatory with good heating and a good sound system. 23:11
This is quite a cool hacking/writing space.
masak what's a conservatory? sounds like a fancy word for 'storeroom' :P 23:12
jnthn lol
masak: best explained with an image... 23:13
masak: something like www.clean2u.com/images/Conservatory%20clean.gif
arnsholt masak: Vinterhage, in Norwgian
masak arnsholt: oh. never heard that.
arnsholt: I think we'd just say 'glasveranda'.
arnsholt That works too =)
mberends not where one puts one's conserves :-/
masak mberends: or one's embalmed relatives. 23:14
mberends lol
jnthn mberends: Huh? You expected English to be logical? :-)
cognominal conservatory: 2 a room with a glass roof and walls, attached to a house at one side and used as a greenhouse or a sun parlor.
jnthn cognominal: Pretty much. 23:15
On a clear night, also nice to lie on a sofa in it and look at the stars. :-)
mberends it's the pantry where one puts one's conserves, but not one's pants 23:17
mberends jnthn: English can be consistently illogical 23:19
jnthn
.oO( mum: JONATHAN!!! What are THESE doing in here?! )
mberends: I guess there's always a chance that the larder contains a bar of lard...
Tene jnthn: where does your family live?
jnthn Tene: In a village in Yorkshire. 23:20
(North east of England)
If I walk fast, I can get to somewhere that I can see the sea in ~ 30 mins.
Tene nice. :)
jnthn Yeah. It's quite a change in pace after having spent the rest of the year mostly living in a capital city. :-) 23:21