»ö« 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. |
|||
felher | o/ | 00:00 | |
00:02
NamelessTee left
|
|||
jnthn | Good beervning, #perl6 | 00:31 | |
colomon | o/ | 00:36 | |
00:37
wolfman2000 joined
00:48
huf left
00:57
Vespakoen left
00:58
ivan`` joined
01:07
benabik left
01:08
benabik joined
01:13
thou left
01:14
Chillance left
|
|||
dalek | kudo/name-cleanup: d1b53d7 | jnthn++ | src/Perl6/Grammar.pm: Fix typo; kboga++. |
01:14 | |
01:15
huf joined
|
|||
sorear | o/ jnthn | 01:15 | |
why are jnthn and masak out of phase today? | |||
jnthn | sorear: I was out with folks from $client this evening | ||
And busy doing @stuff for them during the day | 01:16 | ||
I'm probably gonna sleep soon, though. | |||
jnthn has had on-and-off headache all day :/ | |||
Five days until vacation \o/ | 01:17 | ||
colomon | one week until St. Patrick's Day gigs start. \o/ | 01:20 | |
01:21
plobsing_ joined
|
|||
jnthn | :) | 01:21 | |
sorear | o/ colomon | 01:22 | |
colomon | \o | ||
01:22
plobsing left
|
|||
jnthn | Time for some rest...hopefully I get some hacking tuits tomorrow. | 01:32 | |
'night | |||
01:46
icwiener left,
icwiener joined
|
|||
cbk1090 | Is there a way to call a method from inside the same class? | 01:59 | |
02:00
mucker left
|
|||
TimToady | sure, you can either do it explicitly with self.foo, or as a pseudo-attribute, $.foo | 02:01 | |
cbk1090 | so foo would be the method name? | 02:02 | |
TimToady | yes | ||
that's a virtual call | |||
if you want a non-virtual call, you'll need to store its name somewhere you can call it as a subroutine | 02:03 | ||
cbk1090 | Ok got it! Thanks!!! | ||
I think the first way will work. I dont need anyting fancy | |||
TimToady | the $.foo form works with args, in fact: $.foo(1,2,3) | ||
basically, the external API hides whether something is actually implemented as an attribute or as a method | 02:04 | ||
this helps with any later refactoring in that regard | |||
cbk1090 | TimToady, This is what I now got: self.addData( $topic, $remarks); It works great! I was thinking of making addData a sub but I really wanted it as a method for my data class. | 02:06 | |
02:08
evilcubed joined
02:13
icwiener left
02:14
icwiener joined
02:15
jaldhar joined
|
|||
evilcubed | is it out yet? | 02:16 | |
02:18
whiteknight joined
|
|||
TimToady | everyone is out on Friday night, so I would expect it to be out too | 02:23 | |
bynari | :) | 02:26 | |
huf | well then zip it back up, nobody wants to see that | 02:32 | |
02:39
whiteknight left
|
|||
evilcubed | is perl 6 ready? | 02:44 | |
skids | perl6: (?"Ready").say | 02:47 | |
p6eval | pugs b927740: OUTPUT«1» | ||
..rakudo a8086d, niecza v15-4-g1f35f89: OUTPUT«True» | |||
evilcubed | dude i have no fracking clue what you and the bot just said | 02:51 | |
bynari | He wrote some perl6 code and the perl6 bot eval'd it and returned the result | 02:52 | |
skids | There are three perl6 implementations, pugs, rakudo, and niecza. Each are ready for some things, not so much for other things. | 02:53 | |
benabik | perl6.org/compilers/features | ||
evilcubed | so when i write a mod_perl or run perl from the shell in the latest CentOS it's jacked into one of these compilers? | 02:54 | |
benabik | mod_perl is Perl 5 | ||
03:05
leprevost joined
03:06
orafu left,
orafu joined
|
|||
evilcubed | thank you skids, bynari, and benabik for the heads up | 03:08 | |
appreciate your time | |||
sorear | evilcubed: Perl 6 is not "the next version" of Perl. | 03:09 | |
it's a fork (yes I'm revising history here) | |||
so all the Perl stuff you're familiar with now is, and will stay for a while, Perl 5 | 03:11 | ||
Perl 5 and Perl 6 are being developed in parallel | 03:13 | ||
run perl -V and it might say something like "version 12" | |||
evilcubed | thank you for explaining sorear | 03:14 | |
sorear | perl 5 has a lot more manpower behind it, but is suffering from the legacy of a 25-year-old codebase that's shown to strongly resist extending | 03:15 | |
the idea of perl 6 is to fix the architectural issues first | |||
perl 6 is slower and less useful than perl 5 now, but if we calculated right it should be better within the decade | |||
it's *usable* now. | |||
03:15
PacoAir left
|
|||
sorear | and arguably *more fun* to use now. | 03:15 | |
evilcubed | can i chain perl 6 into mod_rewrite and mod_perl? | 03:16 | |
sorear | but it IS slower, has fewer working libraries, etc | ||
bynari | mod_rewrite has nothing to do with perl, evilcubed | ||
evilcubed | anyone done it with production boxes? | ||
sorear | define "production" | ||
evilcubed | makes money | ||
bynari | And mod_perl is a nasty old module. Join us in the brave new world of the web where we have coolness like nginx with plack and starman | ||
evilcubed | can crash and burn, but makes money | ||
bynari: ah | 03:17 | ||
sorear | several people here have used perl 6 for non-website business purposes | ||
evilcubed | nginx, plack, and starman? | ||
sorear | websites ... need to be fast | ||
not much fun to use a wiki if all the page loads take a minute | |||
evilcubed | it's alright if it's a tad slow | ||
bynari | Well. nginx is a very fast, lean web server. Starman is a backend server used to run Perl web services using frameworks like mojolicious, dancer etc | 03:18 | |
Look into Dancer, plack and starman | |||
evilcubed | okay | ||
sorear | evilcubed: the usual way cool people do web apps today is to have a perl-specific server that apache connects to | ||
bynari | They're for perl 5 btw | ||
evilcubed | kinda like fast-cgi then | ||
sorear | the perl-specific server tends to either speak http (using mod_proxy) or fastcgi | ||
bynari | I don't think perl 6 is really ready for web stuff just now, or at least there's not any frameworks etc. But you can certainly do a lot of fun things with perl 6 just now | 03:19 | |
sorear | bynari: there does exist at least one working perl 6 web framework, tadzik's Bailador | ||
03:19
PacoAir joined
|
|||
bynari | evilcubed: Like fast-cgi, yeah. Instead of fast cgi you'd have starman, or corola, or twiggy, or any of the other servers | 03:19 | |
bynari nods at sorear | |||
You can join #dancer on irc.perl.org to ask more specific questions about that related stuff too | 03:21 | ||
I'm going a bit off-topic for #perl6 | |||
araujo | well, perl 6 is _ready_ ... depends on the project or web stuff you want to do | ||
evilcubed | thank you for the heads up | ||
i appreciate it | |||
bynari | No one's doing production stuff with Perl 6 just now, but it's "ready" for fun projects | 03:22 | |
And there seems to be some people using it for some serious'ish projects now too | |||
But the more people that start using it for fun stuff, the quicker it'll be production ready | 03:23 | ||
evilcubed | i am a bench warmer | ||
bynari | :-) | ||
evilcubed | i will wait | ||
sorear | I take issue with the equation of "production" with "runs a web server" | 03:25 | |
FORTRAN is virtually never used for Web sites, but it's a living language that is very frequently used for meaningful tasks | |||
bynari reads "living language" and pictures Frankenstein's monster | 03:26 | ||
Eek. I saw a rather disturbing image of a large creature with a head that's an old computer from the 70's | 03:27 | ||
sorear | Perl is more the Frankenstein's monster here. | ||
bynari | And it reads FORTRAN on the screen | ||
sorear | c.f. wall.org/...pm... | ||
Perl 6 is already a pretty nice language for one-off scripting | 03:28 | ||
colomon | For what it's worth, I've got two short perl 6 scripts that I've been using for $work since 2009. As well as a nice p6 tool for working with the ABC music format, another tool for reminding me when to practice music, and the GTK mandelbrot set program. The only one where the p6 implementations feel limiting is the mandelbrot set one. | ||
sorear | Perl 6's type system is designed to allow "C"-style code in Perl 6 to run fast, but these dreams have not yet been fully realized | 03:29 | |
colomon | perl 6 is already quite capable as a "glue" language for scripts. | 03:30 | |
sorear | also, current Perl 6 parsers are _slow_ | ||
Perl 5 can slurp 100,000 lines of code in 2 seconds on a 2GHz P4 from 2003 | |||
evilcubed | Pentium 4 is pretty fast when it isn't being smothered by Flash. | 03:31 | |
sorear | perl 6 ... well I was celebrating last month when I got the 4000 line standard library to parse in under a minute | ||
evilcubed | there's a lot of definition of production, please don't take "spitting out web pages" as the only definition | 03:32 | |
i didn't mean to imply that | |||
and actually probably didn't imply that | |||
sorear | (I maintain one of the compilers so I can get away with being pessimistic, nobody thinks I'm just going to walk off :p) | ||
ah OK. | |||
a lot of people use "production" and rarely explain well what they mean by that. | |||
maybe I'd understand better if I weren't 21 and a work-virgin | 03:33 | ||
03:34
PacoAir left
|
|||
evilcubed | i noticed that last year .NET took a hit in a way, Metro was becoming very C++ friendly, warm to that type of developers. | 03:34 | |
All the .NET foundation classes, not really a part of Metro. | 03:35 | ||
dalek | gs.hs/wip/ident: f54ade7 | au++ | Pugs/src/Pugs/ (2 files): * Properly implement apostrophe/dash identifier name rule as per S02. |
||
sorear | yeah, I haven't really been following that closely - I'm strictly a Mono guy | ||
I probably oughta | 03:36 | ||
evilcubed | Mono won't be following Metro very closely, there's no desire to create a Metro run-time clone for Linux. | ||
sorear | oh hey, au++ is coding again | 03:37 | |
hi au. | |||
evilcubed | And when M$FT doesn't offer to keep Metro and WinRT open, that basically means they aren't going to ECMA it, not gonna standardize it, will patent encumber it up the ass | ||
so you can feel free to ignore Metro, if you are strictly Mono | 03:38 | ||
au | hi sorear. | ||
sorear | I wish there were a better application platform I could use... I don't want to write my own GC and native code generator | 03:39 | |
03:40
PacoAir joined
|
|||
evilcubed | Use whatever you want lah | 03:40 | |
sorear | the need to work around delegates makes JVMs a lot less useful for me | ||
evilcubed | Just recognize that your working knowledge has a shelf life, so better bill as much as you possibly can while you can. | 03:41 | |
Eventually the ecosystem is pulled out from under your feet. | |||
sorear | bill? | ||
dalek | gs.hs: 4a341a7 | au++ | Pugs/src/Pugs/Lexer.hs: * implements the proper ident semantic but runs into the many/many parsec error; improvements welcome before mergine |
03:44 | |
gs.hs: f54ade7 | au++ | Pugs/src/Pugs/ (2 files): * Properly implement apostrophe/dash identifier name rule as per S02. |
|||
gs.hs: 2143b48 | au++ | Pugs/src/Pugs/Lexer.hs: * Parse "$x--" correctly. |
|||
benabik | karma x | ||
aloha | x has karma of 106. | ||
sorear | au: What is the many many parsec error? | 03:45 | |
au | (x*)* | 03:46 | |
03:46
PacoAir left
|
|||
au | parsec guards against that form | 03:46 | |
TimToady | early STD had that guard in there, but it dropped out of the cart somewhere alongside the road... | ||
sorear | STD has a "repetition of zero-width atoms" check in CursorBase.pmc, _STAR and friends | 03:47 | |
that I don't understand | |||
TimToady | well, the check is easy to understand; it's the propagation of "nullable" that is difficult | 03:48 | |
it also became less important after the LTMer finds the LT | 03:49 | ||
au | yeah. the way parsec checks it is to just make sure cursor position moved between each iteration of (...)* | ||
*nod* | |||
TimToady | a la P5 | ||
but the harder you try to nail down the notion of "made progress", the harder it is to define, unless you have a language with monads :) | 03:50 | ||
benabik | monads++ | ||
TimToady | anyway, the LTM took pressure off that to some extent, just as having an OPP in the middle layer took pressure off of having to detect left recursion | 03:51 | |
au | "best of possible RealWorld#s" | ||
benabik | OPP? | ||
au | aye aye. | ||
↪ lunch, bbl & | |||
03:53
evilcubed left
|
|||
sorear | benabik: Operator precedence parser | 03:53 | |
aka 'method EXPR' | 03:54 | ||
benabik | Ah. That thing. | ||
sorear | PEGs have trouble with operator precedence, LR grammars don't | ||
PEGs have the nice property of always knowing what synactic form they are trying to parse | 03:55 | ||
TimToady | Mahou Shoujo Madoka Magica & | ||
04:37
colomon left
05:01
icwiener left
|
|||
sorear | Who is Jan Ingvoldstat? | 05:15 | |
planetsix.perl.org seems to be have an issue with em | 05:16 | ||
05:33
colomon joined
05:36
kaare_ joined
06:07
kaare_ left
|
|||
moritz | that's frettled iirc | 06:12 | |
good morning btw :-) | |||
sorear | good morning moritz. | 06:25 | |
06:29
thou joined
06:38
tokuhirom joined
07:06
SHODAN left
07:07
SHODAN joined
07:39
thou left
|
|||
[Coke] yawns. | 07:52 | ||
au++ # yay-subs-with-dashes. | 07:54 | ||
phenny: tell colomon about feather.perl6.nl/~coke/sin.diff | 08:05 | ||
phenny | [Coke]: I'll pass that on when colomon is around. | ||
08:16
sisar joined
08:23
Jerkwad left
|
|||
sorear | o/ sisar | 08:24 | |
tadzik | good morning #perl6 | 08:29 | |
sorear | good morning tadzik | ||
08:38
havenn joined
08:47
havenn left
08:54
rsimoes left
08:57
alvis left
|
|||
frettled | sorear: good morning, what's the issue? | 09:02 | |
moritz: (yup, and good morning) | |||
sorear | frettled: look at the top of planetsix.perl.org | 09:03 | |
see it? | 09:04 | ||
09:12
alvis joined
09:15
mucker joined
|
|||
frettled | oh. | 09:28 | |
Oh dear. | |||
Trusty Yahoo! Pipes :( | |||
sisar | sorear: hi :) | ||
frettled | sorear: I can see no way to fix that quickly, except by removing my feed from planetsix | 09:29 | |
(the pipe appears to work when I follow the link, though) | |||
sisar | tadzik: i'm getting Segmentation fault (core dumped) on running bootstrap.sh in panda | ||
sorear -> sleep | 09:31 | ||
sisar | 'night ! | ||
tadzik | sisar: eek. Reproducable? | 09:39 | |
sisar | yep | 09:40 | |
tadzik | which Rakudo are you on? | ||
sisar | 'git pull' says 'already up-to-date' | ||
tadzik | okay, I'll take a look at it | ||
sisar | whoa ! 'perl6' also gives a segmentation fault ! | 09:41 | |
moritz | sisar: did you do 'make install'? | 09:42 | |
09:42
tokuhirom left,
tokuhirom joined
|
|||
sisar | i don't remember. let me do 'make install' & recheck... | 09:42 | |
moritz: ah that fixed it | 09:44 | ||
how could've i forgotten that ! | |||
moritz | people often forget it. We need better sanity checks for that. | 09:45 | |
sisar | how to exit from the 'panda>' prompt ? | ||
tadzik | ^D | 09:46 | |
sisar | 'exit' & 'quit' don't work | ||
tadzik | as in EOF | ||
sisar | tadzik: ah, ok. | ||
09:46
mj41 joined
|
|||
sisar | on strangelyconsistent.org/blog/june-2...-and-grep, what does this line mean 'Leaving out the & would...' ? | 09:49 | |
moritz | writing square calls the function | 09:54 | |
writing &square gives you the function object | |||
sisar | moritz: ah, so work for passing arguments to square one-by-one is done by map | 10:00 | |
lower down the article, this line 'my @primes = grep { is_prime($_) }, 2..100; ' what are the braces around is_prime for ? | 10:03 | ||
(is_prime($_) just returns True or False) | 10:04 | ||
10:07
fglock joined
|
|||
fglock reads perlmroapi | 10:12 | ||
10:18
MayDaniel joined
10:19
NamelessTee joined
10:20
lateau joined
10:31
lichtkind joined
|
|||
lichtkind | cheers | 10:33 | |
tadzik | hello | ||
10:34
sisar left
10:37
pmurias joined
|
|||
pmurias | fglock: hi | 10:37 | |
fglock | pmurias: hi! | 10:38 | |
I'm implementing @ISA | |||
pmurias | will you go through it every time or update the methods when it changes? | 10:39 | |
fglock | yes, probably - there is an API for adding subs to a package, I'll plug it in there | 10:41 | |
I mean, update when it changes | |||
but just get it to work, first | |||
pmurias | fglock: it turns feeding nam to niecza nowdays isn't as easy as it used to be | 10:42 | |
lichtkind | tadzik: was great to see you again | 10:43 | |
tadzik | yeah, same here. Next time I'm coming with some Deutch-fu so I can understand what you guys are talking about :) | 10:44 | |
fglock | pmurias: alternately, compiling 5-to-6 should work fine | ||
not sure about speed | |||
but a low-level backend would be nice as a proof of concept | 10:45 | ||
that is, for fun | |||
pmurias | targeting low-level seems the right approach for targeting niecza, as it avoids the slow parsing, and jumping throught hoops to emulate minor differences | 10:50 | |
fglock | hmm - UNIVERSAL is the last class to be looked up, right? after all @ISA | ||
pmurias | yes | ||
fglock | k | ||
10:51
buubot_backup left
|
|||
fglock | fixing | 10:51 | |
10:55
lateau left
|
|||
pmurias | buying breakfeast& | 10:55 | |
10:57
lateau joined
11:05
MayDaniel left
|
|||
masak | g'day, #perl6 | 11:05 | |
lichtkind | moin | ||
tadzik | hey masak | 11:06 | |
masak | hey all you wonderfuls. | ||
heh -- any guesses as to when jnthn will show up today? :P | 11:08 | ||
tadzik | I thought you're the one to know :) | 11:09 | |
masak | we're neighbours on the town level, I don't live with him ;) | 11:10 | |
tadzik | right :) | ||
masak | well, apart from a few days when I was moving house in November... :) | ||
fglock | good morning masak | ||
masak | good fglock, afternoon. | 11:11 | |
11:11
buubot_backup joined
|
|||
masak | <sorear> define "production" | 11:14 | |
<evilcubed> makes money | 11:15 | ||
that one's new. | |||
are you sure you're not thinking of "commercial"? | |||
tadzik | if we all had the same definition of "production", life would be easier | 11:16 | |
(at least for us answering questions) | 11:17 | ||
huf | where's the fun in that? | 11:18 | |
masak | I briefly considered writing a "when is Perl 6 production ready" from the viewpoint of an irate outgrouper who refuses to accept more than 1 bit of information. | 11:23 | |
huf | is it webscale? | ||
masak | s:2nd/\"/" blog post/ | ||
tadzik | I don't think that'd help | ||
moritz | masak: not worth the effort | ||
huf | you have to remember, *that* is the important bit of info :) | ||
tadzik | ridiculing and generalizing won't make people stop asking questions | 11:24 | |
what they want to know may be "should I suggest my boss using Perl 6 for a new project" | |||
or such | |||
moritz | masak: as long as we can't simply answer "yes", our answer won't satisfy most people | ||
tadzik | +1 | ||
11:25
MayDaniel joined
11:31
birdwindupbird joined
|
|||
au | "ask not if perl 6 is ready for your production environment, ask if your production environment is ready for perl 6" | 11:33 | |
11:33
sporous left,
sporous joined
|
|||
au | (the reasoning being that folks have relatively more control over their production environment than over perl 6 implementations) | 11:34 | |
11:36
bacek left
|
|||
felher | How do i iterate over '1, 2 X 3, 4' with a for loop and get '(1,3)', '(1,4)' assigned to $x, and not first 1, then 3, then 1, then 4 ...? | 11:38 | |
jnthn | nom: for (1, 2 X 3, 4).tree -> $x { say $x } | 11:41 | |
p6eval | rakudo a8086d: OUTPUT«1 31 42 32 4» | ||
felher really has to look up 'tree' in the specs. | 11:42 | ||
jnthn: awesome, thnx :) | |||
felher -> lunch | 11:44 | ||
11:45
sisar joined
11:47
whiteknight joined
|
|||
tadzik | oh, hello jnthn | 11:56 | |
fglock | yay! - @ISA works - perlcabal.org/~fglock/perlito5.html near 'package Printer;' | ||
tadzik | fglock: cool | 11:58 | |
jnthn | hi tadzik :) | 12:01 | |
tadzik | have a moment to talk about roles? | 12:02 | |
jnthn | Sure | ||
tadzik | Within a role the has declarator always indicates the declaration from the viewpoint of the class. Therefore a private attribute declared using has is private to the class, not to the role | ||
so says S14, and it's the only thing that rakudo does not implement right now | |||
and the only spectest it's not running | |||
jnthn | Yeah. Hm. :) | ||
It basically requires suppressing "undeclared attribute" checks until class composition time. | 12:03 | ||
tadzik | you mentioned something about that file may have been outdated, I hope this feature is not going to go away | ||
aye | |||
jnthn | Well, we have a choice | ||
tadzik | so that's after CHECK time, si? | ||
jnthn | Well, it's kinda orthogonal to those. It's when .^compose gets called | 12:04 | |
For declarations that is BEGIN time | |||
At the momnent, whenever we see a $!a, we go and ask the metaclass, "oh, do you know $!a?" | |||
And if it says no, we complain | |||
That's why attributes from roles are na issue | |||
tadzik | right | ||
jnthn | *an | ||
Because they aren't added until composition time | 12:05 | ||
Anyway, the choice we get is (1) make this work, or (2) decide that the attributes are private to roles like today, and find a way to prevent them conflicting. | |||
The way things are today is kinda the worst of both worlds really. | |||
tadzik | I'm wholeheartedly for (1), and so is the spec, for that matter :) | 12:06 | |
jnthn | *nod* | ||
tadzik | I'm no expert in OOP and roles, but that's kinda the way I'd expect it to work | ||
jnthn | OK, then let's fix it that way :) | ||
tadzik | is there something I can do? | ||
jnthn | tadzik: Well, you've probably the skills to write the patch if I tell you where to look and you're interested in doing so :) | 12:07 | |
tadzik | sure thing | 12:08 | |
jnthn | In rule package_def, declare a contextual where you'll store the names to check. A hash may be cheapest as then you can be sure you only check each name once. | ||
12:08
lichtkind left
|
|||
jnthn | oh, er :/ | 12:09 | |
I've just realized why this is trickier than I first realized. | |||
Code-gen depends on knowing if the attribute is natively typed or not. | |||
12:10
JimmyZ_ joined
|
|||
jnthn | And we'd not know that for attributes being composed from roles. | 12:10 | |
tadzik | uh | ||
jnthn | When I say code-gen, I mean building the PAST node for looking up the attribute. | 12:11 | |
12:11
lichtkind joined
|
|||
jnthn | Granted we can keep a list of such things and tweak them later. | 12:13 | |
jnthn will ponder it a bit | 12:14 | ||
Anyway, not so simple after all.. | |||
tadzik | tormenting implementors, right? :) | 12:15 | |
jnthn | Aye. | ||
12:17
lasse__ joined
12:24
mj41 left
|
|||
felher | Oh, i like .tree :) | 12:27 | |
12:40
MayDaniel left
|
|||
felher | From 02-bits.pod: "The anonymous enum function takes a list of keys or pairs, and adds values to any keys that are not already part of a key.". Shouldn't that be more like: "The anonymous enum function takes a list of keys or pairs, and adds values to any keys that are not already part of a >>pair<<."? | 12:44 | |
jnthn | That's seem more reasonable. | 12:45 | |
felher fixes | 12:46 | ||
jnthn | tadzik: Having a fiddle with the attributes thing | ||
tadzik | okay | 12:47 | |
dalek | ecs: d43113a | (Felix Herrmann)++ | S02-bits.pod: [S02] fix description of the anonymous enum function |
12:48 | |
12:55
tokuhirom left
|
|||
masak | tadzik: I know I've had opinions on private attributes in roles. but it's too long ago, and I'm not focused enough to remember what I thought. and it might not be relevant anymore. | 12:59 | |
but I remember liking the idea of private attributes belonging to the *role* rather than the class. then same-named attributes will never conflict. | |||
jnthn | masak: I'm leaning a bit to that too, but it's not what the spec, or tests, or tadzik's use case expect. | 13:00 | |
masak | but I feat that's not going to fly, because... there's only one "attribute storage", and that's the instance. unless we do name munging, things are gonna conflict. | ||
fear* | |||
jnthn | masak: Oh, the name issue isn't an issue really | ||
Use the role's type object as the key we store the attribute under. | |||
masak | oh! | ||
jnthn | We'd likely hae some fallout. | 13:01 | |
But it's very doable. | |||
masak | then... for the purposes of this discussion, I'm in the camp of doin' it like that. | ||
it's very clean. | |||
people from the future will thank us. | |||
it makes little sense to have attributes from dozens of roles trample on each others' namespaces. | |||
I'll happily change the spec... I assume it's S14? | 13:02 | ||
jnthn | masak: I think it may be worth getting TimToady's input first. | 13:03 | |
masak | anyway, today my plan is to (a) blog about the macros D1 merge, and (b) rant on p6l about PRE/POST. | ||
jnthn | masak: Also, this doesn't help tadzik's use case. | ||
masak | jnthn: oki. | ||
what's tadzik's use case? | |||
jnthn | tadzik: ping :) | ||
iirc though it's about factoring certain things out in to roles | |||
In the collection types | |||
tadzik | masak: Set refactoring | ||
masak | nom: say 'tadzik: ', 'ping' xx 50 | ||
p6eval | rakudo a8086d: OUTPUT«tadzik: ping ping ping ping ping ping ping ping ping ping ping ping ping ping ping ping ping ping ping ping ping ping ping ping ping ping ping ping ping ping ping ping ping ping ping ping ping ping ping ping ping ping ping ping ping ping ping ping ping ping» | ||
tadzik | :) | 13:04 | |
masak | tadzik: could you be a bit specific about the use case? I'm curious. | ||
jnthn | What are you putting into the role? | ||
And is there any sense in which exposing the shared stuff by using a private method would work? | 13:05 | ||
tadzik | masak: I thought %!elems and almost everything that operates on them cuold be in Settish role, and then classes like KeySet, KeyHash etc only need to implement sub register-arg | ||
as a method, of course | |||
it should be possible to expos %!elems througha private method, yes | 13:06 | ||
jnthn | Why does %!elems need to be visible in the class? | ||
OK | |||
tadzik | I've probably tried that | ||
jnthn | Because we optimize private method calls somewhat also. | ||
So it may well work out just fine | |||
tadzik | jnthn: it's when the class needs to overload something else than register-arg | ||
like Str, gist, perl | |||
jnthn | OK, but I guess a private method could work? | ||
tadzik | or at_key for that matter | ||
could, yes. I'll retry and report | |||
jnthn | method !elems() is rw { %!elems } | ||
er, maybe don't call it elems :) | 13:07 | ||
tadzik | yeah ;) | ||
jnthn | It won't conflict with .elems but it will confuse the heck out of anyone | ||
I suspect this discussion is going to end with a spec change rather than attributes from roles ending up like the spec says today, though. | |||
tadzik | right | ||
jnthn | So it's probably best not to depend on something that may be about to change. | ||
13:10
Chillance joined
|
|||
masak | there's a sense in which private attributes in the role shouldn't disencapsulate out into the composed class. | 13:11 | |
this discussion is really about whether that concern weighs more heavily than the convenience of accessing private role attributes in the class. | 13:12 | ||
my intuition tells me that the purity is more important than the convenience. which is why it's interesting to hear about and think about tadzik's use case. | 13:13 | ||
jnthn | Having just poked at the disencapsulation approach, it certainly introduces implementation baggage. | ||
13:13
whiteknight left
|
|||
jnthn | Well | 13:13 | |
It breaks certain rules we like to follow | |||
Like, predeclaration in a given scope | |||
masak | "private attributes in the role shouldn't leak outside of the role block" would be strangely consistent with "private attributes in the class shouldn't leak outside of the class block". | 13:14 | |
I guess that's the case I'm making. | |||
jnthn | Right | ||
Which makes sense in many ways. | 13:15 | ||
tadzik | masak: 'twas just confusing for me that private methods work while attriutes do not | ||
jnthn | I mean, if you find two roles on the internet, and you want to compose both of them into your class, then it limits your reuse if you have to luck out on them having non-overlapping attribute names. | 13:16 | |
tadzik | if you really don't want anything to conflict and so, maybe it'd be better to use delegation | ||
why wouldn't that be a case with private meths? | |||
jnthn | Because you can presumably write a method in your class to resolve the conflict in the way you prefer. | 13:17 | |
tadzik | okay, right | ||
tadzik tries the new approach | 13:20 | ||
13:26
GlitchMr joined
|
|||
felher | From an encapsulation point of view: Are there/shouldn't there be role-private methods, which are private to the role, not to the class? So that a role can have methods that violate some invariant of the role when used on their own? | 13:31 | |
tadzik | there are | 13:32 | |
felher | tadzik: great :) | ||
felher goes reading the specs on roles again :) | |||
tadzik | jnthn: it'd seem like access to role private methods from a consuming class does not work in the setting :/ | ||
jnthn | tadzik: er | 13:33 | |
Is it really the setting? | |||
lasse__ | A year ago or so i was told that perl6 could not connect to SAP via perl5 module sapnwrfc. Is that still true? I'm greatful if anyone who knows can give an answer. | ||
jnthn | nom: role R { method !foo() { say 42 } }; class C does R { method bar() { self!R::foo() } }; C.bar | 13:34 | |
p6eval | rakudo a8086d: OUTPUT«===SORRY!===Method 'is_trusted' not found for invocant of class 'Perl6::Metamodel::ParametricRoleGroupHOW'» | ||
tadzik | jnthn: gist.github.com/2011428 fails with Undefined private method 'storage' called in numerous places | ||
jnthn | nom: role R { method !foo() { say 42 } }; class C does R { method bar() { self!foo() } }; C.bar | ||
p6eval | rakudo a8086d: OUTPUT«42» | ||
13:35
lutok joined
|
|||
pmurias | lasse__: you could try using niecza+it's perl5 interop | 13:36 | |
JimmyZ_ | r: class C { trusts GLOBAL; } | ||
p6eval | rakudo a8086d: ( no output ) | ||
pmurias | lasse__: what os do you use? | ||
lasse__ | Preferably Linux but I can use Windows if I have to | ||
pmurias | Linux is preferable for that | 13:37 | |
lasse__: you are using rakudo right now? | 13:40 | ||
13:40
rsimoes1 left,
moritz left,
jrockway left,
cj left,
moritz joined
13:41
jrockway joined,
cj joined
13:43
MayDaniel joined
|
|||
lasse__ | Yes If have installed it and read a bit, but I need to do some new SAP comms stuff (which i have done PHP so far) but I like to learn perl6 so if it is possible i like to give rakudo a spin | 13:43 | |
JimmyZ_ | nom: role R { has $!foo =42; method foo() { $!foo; } }; class C does R { method bar() { say self.foo } }; C.bar | 13:46 | |
p6eval | rakudo a8086d: OUTPUT«Cannot look up attributes in a type object in method foo at /tmp/d5QijfdPCI:1 in method bar at /tmp/d5QijfdPCI:1 in block <anon> at /tmp/d5QijfdPCI:1» | ||
jnthn | JimmyZ_: You need an instance if you're going to look up attributes | 13:47 | |
(C.new.bar) | |||
JimmyZ_ | oops... | ||
nom: role R { has $!foo =42; }; class C does R { method bar() { say $!foo } }; C.new.bar | 13:49 | ||
p6eval | rakudo a8086d: OUTPUT«===SORRY!===Attribute $!foo not declared in class Cat /tmp/qiNr_mxWta:1» | ||
pmurias | lasse__: to use sapnwrfc you will have to use niecza (which is a different perl implementation) | ||
JimmyZ_ | nom: role R { has $!foo =42; }; class C does R { method bar() { say $!foo } }; C.new.bar | ||
p6eval | rakudo a8086d: OUTPUT«===SORRY!===Attribute $!foo not declared in class Cat /tmp/Q4v4bB9jcE:1» | ||
JimmyZ_ | nom: role R { has $!foo =42; }; class C does R { has $!foo= 42; method bar() { say $!foo } }; C.new.bar | ||
p6eval | rakudo a8086d: OUTPUT«===SORRY!===Attribute '$!foo' already exists in the class 'C', but a role also wishes to compose it» | ||
JimmyZ_ | bug? | ||
may not | 13:50 | ||
lasse__ | niecza is that windows only? | ||
pmurias | no | ||
it runs on mono | |||
JimmyZ_ | pugs: role R { has $!foo =42; }; class C does R { has $!foo= 42; method bar() { say $!foo } }; C.new.bar | 13:51 | |
p6eval | pugs b927740: OUTPUT«42» | ||
lasse__ | pmurias: Thanks a lot I will try install niecza and give it a spin | 13:52 | |
pmurias | beware that p5 interop in niecza is very experimental, so you'll have to hack around things | 13:53 | |
masak | lasse__: welcome. it's nice to hear someone trying out SAP with Perl 6. | ||
lasse__: I agree with pmurias -- you should try out Niecza on Linux. | 13:54 | ||
lasse__ | pmurias: I like problems so thats cool | ||
felher | nom: role R { my method !foo() { say 42 } }; class C does R { method bar() { self!foo() } }; C.bar | 13:55 | |
p6eval | rakudo a8086d: OUTPUT«42» | ||
felher | Hm.. i expected this to die with "method !foo not found..." or something. I thought "my method !foo" isn't shared so C can not call it. Am i wrong about that? | 13:56 | |
jnthn | The "my" here means nothing more than "install the method in the lexpad also" | ||
tadzik | !foo is private to a class, not to a role | 13:57 | |
masak | nom: role R1 { method !foo { say "R1" } }; role R2 { method !foo { say "R2" } }; class C does R1 does R2 {}; say "alive?!" | ||
p6eval | rakudo a8086d: OUTPUT«alive?!» | ||
masak | nom: role R1 { method !foo { say "R1" } }; role R2 { method !foo { say "R2" } }; class C does R1 does R2 { method bar { self!foo() } }; say C.new.bar | ||
p6eval | rakudo a8086d: OUTPUT«Private method 'foo' not found on type C in method dispatch:<!> at src/gen/CORE.setting:777 in method bar at /tmp/diNxcNUBGu:1 in block <anon> at /tmp/diNxcNUBGu:1» | ||
13:58
JimmyZ_ left
|
|||
masak | huh! | 13:58 | |
nom: role R1 { method !foo { say "R1" } }; class C does R1 { method bar { self!foo() } }; say C.new.bar | |||
p6eval | rakudo a8086d: OUTPUT«R1True» | ||
felher | So i miunderstood: S14-roles-and-parametric-types.pod:126? | ||
jnthn | masak: Yeah, I've found the issue | ||
masak: RoleToRoleApplier doesn't copy private methods | |||
masak | so... if private methods in a role collide... none of them gets installed? | ||
oh. | 13:59 | ||
then why did felher's oneliner work? | |||
jnthn | masak: Because RoleToRoleApplier never gets used there | 14:00 | |
masak: Because only one role is being applied | |||
masak | aaaaaaah. | ||
jnthn | So we don't need to compute the summation. | 14:01 | |
masak | fwiw, I'm open to ParametricRoleHOW being renamed to RoleHOW. it would make one of jnthn++'s Metaprogramming slides look nicer ;) | ||
and it is, in some sense, the "default" role HOW. | 14:02 | ||
this message delivered from the guy who brought you... World. ;) | |||
dalek | kudo/priv-role-attrs: fa7ffb2 | jnthn++ | src/Perl6/Actions.pm: Start declaring role attributes under the package they're declared in rather than the class they end up composed in to. |
||
kudo/priv-role-attrs: 6408afa | jnthn++ | src/Perl6/Metamodel/RoleTo (2 files): Start to liberalize role composers so that they allow attributes with the same name but from different roles. |
|||
kudo/priv-role-attrs: ab5f444 | jnthn++ | src/ (3 files): Allow multiple attributes of the same name to be added provided they are attached to different packages (e.g. different roles). |
|||
kudo/priv-role-attrs: d1e0b2b | jnthn++ | src/Perl6/Metamodel/BUILDPLAN.pm: First crack at updating BUILDPLAN handling for new approach to role attributes. |
|||
jnthn | That lot starts sketching out how masak++'s idea for role attributes could work out | 14:03 | |
Though it doesn't actually work yet :) | |||
masak | nevertheless, \o/ | 14:05 | |
felher | I like the specs opinion on roles an private attributes. If one wants a real role-private attribute, the spec says: "you may wish to declare an attribute that is hidden even from the class; a completely private role attribute (that will exist per instance of the class) may be declared like this: my $!spleen;" | 14:07 | |
I like to have more ways, even if one may be bad in most situations. | 14:08 | ||
I have to admit that compared to most of you folks i am a real noob. But isn't it more perlish to allow it and say "best don't use it if you don't have too", than to remove the possibility of doing so? | 14:09 | ||
masak | I hear ya. | 14:10 | |
my only question is: why would you want the default to be bad, and recommend the good alternative as a social convention? | |||
felher | Ah, so you don't want to remove the old way. Its more like swapping default/non-default? | 14:11 | |
masak | right. | ||
felher | Oh, then i'm totally in for that :) | 14:12 | |
masak | I'm sure there'll be a way for people to explicitly flaunt role encapsulation. :) | ||
I don't care much exactly how it'll be done. | |||
except to the degree it helps tadzik write actual CORE code. | |||
felher | kk. | ||
pmurias | masak: you want the "private to the role" to be the default? | ||
masak | I do. | 14:13 | |
felher | Ok, so i just misunderstood the discussion. Sorry for the nosie :) | ||
masak | not at all -- it was a worthwhile point to make. | ||
felher | Well, even better than :) | 14:14 | |
masak | also, we're all OO noobs, at least to a first approximation. | 14:15 | |
OOP is not too hard to grok, but OOD takes a lifetime. | |||
jnthn | masak: Did you file rakudobug on that priv meth from multiple roles issue? | 14:19 | |
masak laughs again at au++'s "me" solution to moritz++'s Prisoners' Dilemma challenge | |||
jnthn: no. doin' it now. | |||
masak submits rakudobug | 14:20 | ||
jnthn | masak: OK. Testing a patch locally for it. | 14:22 | |
Hopefully this unblocks tadzik++ too :) | |||
14:23
MayDaniel left
|
|||
masak | jnthn: rt.perl.org/rt3/Ticket/Display.html?id=111664 | 14:24 | |
jnthn | tsm | 14:25 | |
<chuckle> | |||
moritz | "tadzik seems mad"? :-) | 14:27 | |
jnthn | :D | 14:28 | |
moritz | nom: sub a(\$arg) { say $arg.elems }; a(a => 2, 3) | 14:31 | |
p6eval | rakudo a8086d: OUTPUT«Unexpected named parameter 'a' passed in sub a at /tmp/b0l742_Tw0:1 in block <anon> at /tmp/b0l742_Tw0:1» | ||
moritz | nom: sub a(|$arg) { say $arg.elems }; a(a => 2, 3) | ||
p6eval | rakudo a8086d: OUTPUT«1» | ||
masak | late to the game: "tracker sans mystique" | 14:32 | |
dalek | kudo/nom: 149cb58 | jnthn++ | src/Perl6/Metamodel/RoleToRoleApplier.pm: Fix a typo. |
||
kudo/nom: 54e0769 | jnthn++ | src/Perl6/Metamodel/ (3 files): Implement private method composition when the private methods come from multiple roles. |
|||
masak | though maybe it should be "traqueur", given the other two words... | 14:33 | |
jnthn | tadzik: Tried some 'mprovements ^^ | ||
14:34
isBEKaml joined
|
|||
moritz | n: my Str enum A <b c>; say b | 14:36 | |
p6eval | niecza v15-4-g1f35f89: OUTPUT«b» | ||
moritz | n: my Str enum A <foo bar>; say b | ||
p6eval | niecza v15-4-g1f35f89: OUTPUT«===SORRY!===Undeclared routine: 'b' used at line 1Unhandled exception: Check failed at /home/p6eval/niecza/boot/lib/CORE.setting line 1362 (die @ 3)  at /home/p6eval/niecza/src/STD.pm6 line 1147 (P6.comp_unit @ 33)  at /home/p6… | ||
moritz | n: my Str enum A <foo bar>; say foo | ||
p6eval | niecza v15-4-g1f35f89: OUTPUT«foo» | ||
tadzik | :P | 14:38 | |
I'll see if that helped | 14:39 | ||
masak | anyone remember gist.github.com/1061562 ? | ||
I just re-ran things on nom. | |||
tadzik | I think so | ||
istr it | |||
masak | now getting 1.665s real time with the same script. | ||
if I natively type the sub params, I get about 1.236s real time. | 14:40 | ||
tadzik | now where is this image I always use in those occasions... | ||
masak | that's a 50% improvement. | ||
tadzik | here: 29.media.tumblr.com/tumblr_lltzgnHi...o1_400.jpg | ||
masak | :P | ||
boy, I hope sometime soon quoting Shakespeare comes back into fashion. | 14:41 | ||
tadzik | :D | 14:44 | |
jnthn | Nice :) | ||
14:45
Jerkwad joined
|
|||
jnthn | afk for a bit | 14:46 | |
14:50
lateau_ joined,
lateau_ left
|
|||
felher | perl6: say @$*IN; | 14:53 | |
p6eval | rakudo a8086d: OUTPUT«IO<-5400900929721989300>» | ||
..niecza v15-4-g1f35f89: OUTPUT«TextReader.new(...)» | |||
..pugs b927740: OUTPUT«» | |||
felher | Spec says: instead of 'while (<HANDLE>) {...}' you now write 'for @$handle {....}' | 14:54 | |
masak | O RLY? | ||
felher | Might that be a fossil? | ||
masak | yes. | ||
where is it? | |||
felher | S02, Files | 14:55 | |
Nearly at the bottom. | |||
isBEKaml | felher: did you perhaps mistake @$*IN for @*INC? | 14:56 | |
I only $*IN in there. | |||
masak | it's S02:4796. | 14:57 | |
tadzik | hmm, roles don't seem to like having submethod BUILD | ||
masak | it might actually be correct. | ||
tadzik | and .new which the class re-uses | ||
14:57
PacoAir joined
|
|||
masak | it coincides in time with the killing off of prefix:<=> in 2009. | 14:57 | |
tadzik: having a submethod BUILD in a role feels odd, given that the thing that submethods do is mostly twiddle with (private) attributes of the class. | 14:58 | ||
tadzik | nom: gist.github.com/2011660 | ||
p6eval | rakudo a8086d: OUTPUT«Can not get non-existent attribute '$!a' on class 'MyRole' in submethod BUILD at /tmp/_mMN5ilSiQ:8 in method BUILDALL at src/gen/CORE.setting:582 in method bless at src/gen/CORE.setting:567 in method new at /tmp/_mMN5ilSiQ:5 in block <anon> at /tmp/_mMN5i… | ||
isBEKaml | masak: that ack script takes 18s on my poor machine. :D | 14:59 | |
masak | isBEKaml: is that the version with or without multis? | ||
isBEKaml | masak: ofcourse, after commenting out the tracking variable. And oh, niecza! | ||
tadzik | masak: well, I want to twiddle with those private attributes of a role :) (see gist) | ||
masak | tadzik: hm. | 15:01 | |
tadzik | I guess it's the issue of BUILD being called for the class, which doesn't then have the %!elems anywhere | ||
so that's the same underlying issue as before, maybe | |||
masak | tadzik: if your use case is "valid" (i.e. if we're not missing something obvious here), that indicates that roles should have their own BUILD, separate from classes. I'm not sure I believe that's feasible, or even a good idea. | ||
but in terms of scoping, it makes a lot of sense. as long as the class can have a BUILD and the roles can too. the $!a is visible within the role, so it should be possible to refer to it. | 15:02 | ||
isBEKaml | tadzik: you're wrapping private methods into a role and making them available through classes via a facade? :) | 15:04 | |
tadzik | isBEKaml: facade? | ||
phenny: en pl "facade"? | |||
phenny | tadzik: "fasada" (en to pl, translate.google.com) | ||
tadzik | phenny: that doesn't make any sense :) | ||
isBEKaml | tadzik: hm, how do I say? (helper or wrapper function) | 15:05 | |
tadzik | isBEKaml: they're not really "available through classes", I just don't want them to leak out for public use | ||
I need a way to communicate between role and class that won't leak out as a public method of the eventual object | |||
isBEKaml | tadzik: exactly as I thought. :) | ||
tadzik | okay :) | 15:06 | |
isBEKaml | phenny: pl en "fasada"? | ||
phenny | isBEKaml: "facade" (pl to en, translate.google.com) | ||
isBEKaml | does it make any sense? :D | ||
funny, that's how I pronounce that word. | 15:08 | ||
masak | tadzik: "facade" is just an OO pattern-lingo word for "interface which presents you with a nices API than the thing it wraps". | 15:09 | |
tadzik | I see | 15:10 | |
masak | there are a number of related patterns in that area, with slightly overlapping meanings: "adapter", "wrapper", "facade". | ||
isBEKaml | masak: hey, I wasn't thinking of "Facade" pattern! :) | ||
masak | oh! I assumed you were. | ||
15:10
lateau left
|
|||
isBEKaml | Just what came to mind. (helper, thin layer) :) | 15:10 | |
masak | you even used "wrapping" in the same sentence :P | 15:11 | |
isBEKaml | I also said, "helper" :D | ||
Personally, I find that design patterns tend to obscure the most straightforward approach. You end up thinking in terms of these patterns instead of the simplest approach. | 15:12 | ||
15:12
skids left
|
|||
isBEKaml | Sure, it helps if you know about these things but I'd prefer people choose the best approach instead of blindly applying these patterns, all because they exist. </offtopic> | 15:14 | |
15:16
xinming left
|
|||
masak | I disagree. OO patterns aren't meant to be followed slavishly, they're meant to provide a starting point for building a solution that both (a) encodes important lessons from experience and (b) fits the current terrain. | 15:16 | |
to satisfy (a), you follow the pattern. to satisfy (b), you adapt it judiciously for your particular problem. | |||
isBEKaml | (b) is what is missing most of the time. Judicious application (if only that were true in most of the projects I had worked on... ) | 15:17 | |
15:19
xinming joined
|
|||
isBEKaml | masak: I think we are mostly in agreement in that we should *not* blindly apply these patterns. If you miss the big picture, you're working with half baked ideas (dangerously). | 15:19 | |
masak | yeah, the danger of patterns is that they are applied blindly. | 15:21 | |
as with all other kinds of advice, they apply within a context. sometimes the context is different, and the advice doesn't apply. | 15:23 | ||
isBEKaml | A good doctor once told me (he was into Natural medicine): Treat the terrain, not the symptoms. :) | 15:24 | |
masak | aye. | ||
this bliki article is a nice example of that: martinfowler.com/articles/lmax.html | 15:25 | ||
note: they started out trying all the conventional concurrency solutions. they didn't work for their application. | |||
so they had to sit down and actually address the problem. going outside of the normal patterns, and ending up with a much more event-driven solution, as it were. | 15:26 | ||
TimToady | .oO(Patterns: pre-approved XY problems) |
15:30 | |
masak | maybe some of them. | 15:33 | |
just like some patterns are really missing language features. | |||
who wants to do the March release of Rakudo? it'll be an awesome release, and it's easy and fun to be a release manager. | 15:35 | ||
arnsholt | Patterns came up on #lisp at some point I was looking and someone said "patterns are for defective languages". I decided not to comment =) | 15:36 | |
isBEKaml | March! March on for Rakudo! :) | 15:37 | |
bs goes in March, right? | |||
masak | right. | 15:38 | |
it's already merged. | |||
and macros too. | |||
and all the phasers. | |||
isBEKaml | \o/ | ||
Now, I just have to see if it builds on my machine. What's the memory usage like? | |||
masak | lower; still not great. | ||
I mean, it's "great" in the literal sense... which isn't so great. | 15:39 | ||
isBEKaml | if it's still more than 1gig, it's hard. :| | 15:40 | |
15:40
birdwindupbird left
|
|||
masak | I think it's slightly more. | 15:41 | |
15:45
Psyche^ joined
15:49
Patterner left,
Psyche^ is now known as Patterner
|
|||
isBEKaml | masak: great article. What fascinates me is, they haven't really used any new techniques. Rather, it's a different application of existing techniques to tackle known problems. | 15:57 | |
masak: They took a lot of care to make sure that their application runs smoothly, Event Sourcing and cache friendly collections using primitive types. All of them managed on a single core without concurrency. I really should explore CQRS and async event communication models. :) | 15:59 | ||
hmm, s/core/thread/ | 16:01 | ||
masak | aye. | 16:06 | |
there's a lot of neat stuff in there. | |||
16:07
JimmyHoff joined
16:08
JimmyHoff left
|
|||
jnthn back | 16:08 | ||
masak left shoulder | 16:15 | ||
isBEKaml | gotta love this channel. You can discuss anything and you won't be too offtopic! (ducks) | 16:17 | |
(#perl6)++ | |||
masak | isBEKaml: yes, you can even discuss ducks. :P | 16:18 | |
isBEKaml right clavicle | 16:19 | ||
:P | |||
masak | blog post! \o/ strangelyconsistent.org/blog/macros...-d1-merged | 16:21 | |
jnthn | \o/ | ||
masak | I'll take a walk before it turns dark, and then I'll write the rant to p6l. | 16:22 | |
jnthn | [Cool use for a macro: meta for])gist.github.com/1809356) | 16:23 | |
fail | |||
isBEKaml | You can psee the slides here](masak.org/carl/gpw-2012-macros/talk.pdf). | ||
markdown fail? | |||
masak | jnthn: oops, thanks, fixing. | ||
isBEKaml: oh, another one! fail :) | |||
fixing. jnthn++ isBEKaml++ | |||
isBEKaml | masak: and spllelling | ||
masak | well, the 'p' was s'posed to be a '[' :) | 16:24 | |
jnthn | Don't pee the slides! | ||
isBEKaml | masak++ | 16:26 | |
Ulti | 8/win 2 | ||
erk sorry | |||
masak | Util: I always go Alt-2, it's much faster. | 16:27 | |
isBEKaml | hugme: hug masak (mistab) | 16:28 | |
hugme hugs masak | |||
16:29
MayDaniel joined
|
|||
Ulti | masak you would end up with line noise from me considering how often I switch between different keyboard layouts :) | 16:30 | |
masak | heh. | 16:31 | |
oh, Ulti, oh Util! | |||
Ulti | haha yeah | ||
Ulti is claiming fame | |||
masak | I apologise to both of you for millions of mistabs I will make in the future! | ||
Ulti | its fine I'm under the assumption no one is going to want my attention on here ;) | 16:32 | |
unless someone is thinking of porting all of BioPerl to perl6 | |||
masak | pyrimidine: ping :) | 16:33 | |
Ulti | I have an outrageous question for everyone.. what's with all the perl6 hostility from some perl people? | ||
I dont understand it, as far as I can see perl6 is set to be a great language with several sensible implementations | 16:34 | ||
masak | I don't actually think there's that much hating at this point. | 16:35 | |
I talk to lots of sensible Perl 5 people and I mostly hear support. | |||
Ulti | good | ||
masak | there's still a bit of a grumbling because of the name. | 16:36 | |
people fall straight into version think when they hear "Perl 5", "Perl 6". | |||
Ulti | its more I've been googling and keep finding blogs with people moaning about lack of magical perl6 setup.exe distributions... what do you expect from something thats still fluid and under huge dev effort? | ||
yeah I guess that is a problem | |||
masak | it's good that people are pointing out what they want from Perl 6. | 16:37 | |
Ulti | but as soon as I heard about perl6 I also heard "its a new language" | ||
masak | we try our best to deliver and to make the product more useful. | ||
it's not a new language anymore. it's 11 years and a half :) | |||
Ulti | masak sure but there is a new version thats usable every month, packaging is non trivial especially cross platform.. you can expect core devs to do everything | ||
*cant | |||
masak | but it's taking its time to mature, partly because we think it would be a mistake to let it mature too quickly. | 16:38 | |
TimToady | .oO(almost a teenager...) |
||
Ulti | I've been looking into making a macport file | ||
masak is that the language definition or a useful implementation age? | |||
also where has the last decade gone! :3 | |||
masak | the Perl 6 effort was announced on 2000-07-19. strangelyconsistent.org/blog/happy-...ary-perl-6 | 16:41 | |
16:41
icwiener joined
|
|||
masak | as to "where has the last decade gone", it seems to be a common question, or common point of ridicule. | 16:41 | |
I'd just like to counter that after *half* that decade, I could already write real Perl 6 code on top of Pugs. | |||
and that it does take some time to re-invent parsing from scratch a la STD.pm6 -- I'm not sure I'd be able to do it in under a decade, if at all. | 16:42 | ||
Ulti | masak: I meant more life in general ;) | ||
I'm happy to wait rather than see all the interesting but hard to implement features drop out | 16:44 | ||
16:44
abercrombie joined
|
|||
isBEKaml | "We need a solution that makes us need less vodka." :D | 16:45 | |
16:46
kaare_ joined
16:47
Limbic_Region joined
|
|||
isBEKaml | jnthn++ for that comment and masak++ too (publishing it in a talk!) | 16:48 | |
Ulti | what was the problem? | ||
isBEKaml | macros | 16:49 | |
masak | specifically, a problem that showed up in macros, that also showed up with roles. | ||
Ulti | if it helps I can probably post some more vodka | 16:50 | |
16:52
icwiener left,
icwiener joined
16:59
Limbic_Region left
17:00
thou joined
|
|||
TimToady feels lucky to have tricked so many brilliant people into working on Perl 6... :) | 17:23 | ||
17:34
rsimoes joined
17:39
MayDaniel left
|
|||
gfldex | perl6: sub postfix:<a>() is looser(&infix:<,>) {} | 17:49 | |
p6eval | niecza v15-4-g1f35f89: OUTPUT«Potential difficulties: &postfix:<a> is declared but not used at /tmp/N_yrtVBwZS line 1:------> sub postfix:<a>⏏() is looser(&infix:<,>) {}» | ||
..rakudo 54e076: OUTPUT«===SORRY!===Cannot call 'trait_mod:<is>'; none of these signatures match::(Attribute:D $attr, Any :rw(:$rw)!):(Attribute:D $attr, Any :readonly(:$readonly)!):(Attribute:D $attr, Any :box_target(:$box_target)!):(Routine:D $r, Any :rw(:$rw)!):(Routine:D $r, Any… | |||
..pugs b927740: ( no output ) | |||
gfldex | std: sub postfix:<a>() is looser(&infix:<,>) {} | 17:50 | |
p6eval | std 1ad3292: OUTPUT«ok 00:01 117m» | ||
gfldex | niecza++ :) | ||
how does my Date $birthday = 1978,03,01a; # look to you? | 17:51 | ||
masak | I'd... intuitively expect a postfix to bind much more tightly than list infix. | 17:53 | |
(because there can be no whitespace before the postfix) | |||
gfldex | perl6: sub postfix:<a>([Int $y, Int $m, Int $d]) is looser(&infix:<,>) { say "$y-$m-$d" }; 1978,03,01a; | 17:54 | |
p6eval | pugs b927740: OUTPUT«***  Unexpected "[" expecting formal parameter or ")" at /tmp/eKYdPpd1UC line 1, column 17» | ||
..rakudo 54e076: OUTPUT«===SORRY!===Cannot call 'trait_mod:<is>'; none of these signatures match::(Attribute:D $attr, Any :rw(:$rw)!):(Attribute:D $attr, Any :readonly(:$readonly)!):(Attribute:D $attr, Any :box_target(:$box_target)!):(Routine:D $r, Any :rw(:$rw)!):(Routine:D $r, Any… | |||
..niecza v15-4-g1f35f89: OUTPUT«Potential difficulties: Leading 0 does not indicate octal in Perl 6; please use 0o3 if you mean that at /tmp/2vBUB4Fkk_ line 1:------> (&infix:<,>) { say "$y-$m-$d" }; 1978,03⏏,01a; Leading 0 does not indicate octal in Perl 6; please… | |||
17:55
mj41 joined
|
|||
gfldex | well, on 2nd tought it seams like neat overkill :) | 17:57 | |
my Date $leapdays = .new(2,29); # not that much longer actually | 17:58 | ||
17:59
sisar left
|
|||
[Coke] | no change on spec test run from yesterday. | 17:59 | |
felher | masak++ #blog post, macro hacking | 18:00 | |
TimToady++ #for tricking many people | 18:01 | ||
masak | well, most of us working to make Perl 6 more of a reality are idealists. which is why, I guess, we like to point out that we have a really down-to-earth, practical streak. | 18:24 | |
moritz | r: sub enum(*@args) { say @args.perl }; enum('a', 'b') | ||
p6eval | rakudo 54e076: OUTPUT«Array.new("a", "b")» | ||
moritz | why doesn't that work locally? | 18:25 | |
r: sub enum(*@args) { say @args.perl }; &enum('a', 'b') | |||
p6eval | rakudo 54e076: OUTPUT«Array.new("a", "b")» | ||
masak | 'cus you're in a branch, like JimmyZ was the other day? :) | ||
moritz | oh | ||
because I'm in the sink2 branch | |||
masak++ | |||
masak | hah! | ||
moritz | I just realized at the same time as you did | ||
masak is psychic | |||
moritz | nom: my %a; my $x = -1; $x = %a<foo> = $x.succ; say $x | 18:39 | |
p6eval | rakudo 54e076: OUTPUT«0» | ||
moritz | again something that doesn'T work locally | ||
and now I'm on nom :/ | |||
nom: my %a; $_= 'b'; my $x = -1; $x = %a{$_} = $x.succ; say $x | 18:40 | ||
p6eval | rakudo 54e076: OUTPUT«0» | ||
18:42
icwiener left
18:44
icwiener joined
|
|||
[Coke] | ah, here we go. "port install hs-cabal" is now installing an OLD version of gcc via macports. | 18:44 | |
18:47
Trashlord left
|
|||
arnsholt | I've gone on to not like macports very much | 18:49 | |
Better than fink, certainly, but lots of weirdness going on | |||
tadzik | 'evening | 18:53 | |
masak | tadzik! \o/ | 18:56 | |
tadzik | \o/ | ||
18:59
MayDaniel joined
19:03
birdwindupbird joined
19:09
whiteknight joined
19:18
icwiener_ joined
19:19
icwiener left
19:20
proller_ joined,
proller joined
19:21
proller left
19:22
icwiener_ left
19:23
icwiener_ joined,
sporous left,
sporous joined
|
|||
sorear | good * #perl6 | 19:24 | |
tadzik | hello sorear | ||
sorear | masak: My understanding of "where has last decade gone" is that it mostly involved TimToady++ wrestling with his own bugs | 19:25 | |
19:26
tokuhirom3 left
|
|||
felher | o/ sorear | 19:27 | |
[Coke] | sorear: like Tom Selleck in _Runaway_ ? | 19:28 | |
sorear | I don't know that reference and my brain augmentation system is not working very well atm | 19:29 | |
masak++ # blogging | 19:31 | ||
mucker | masak++ | 19:32 | |
moritz | masak++ indeed | 19:33 | |
mucker git clone rakudo | |||
sorear | hello mucker. Are you new here? | 19:37 | |
dalek | kudo/nom: 08417f8 | moritz++ | / (3 files): implement anon enums Not sure if we want to keep this factoring, it just reuses the old infrastructure for now. Passes the anon enum tests. |
||
kudo/nom: bd6fdeb | moritz++ | docs/ChangeLog: add anon enums to ChangeLog |
|||
[Coke] | still haven't managed to build niecza on osx yet. | 19:38 | |
(sloooow) | |||
mucker | sorear: just a another lurker :) | 19:39 | |
sorear | welcome | 19:41 | |
moritz | wow, either I completely missed the point of anon enums, or they are much easier than I thought they would be | ||
19:45
localhost left
19:46
tokuhirom3 joined,
localhost joined
19:49
tyatpi joined
|
|||
tyatpi | perl6: hel | 19:50 | |
p6eval | niecza v15-4-g1f35f89: OUTPUT«===SORRY!===Undeclared routine: 'hel' used at line 1Unhandled exception: Check failed at /home/p6eval/niecza/boot/lib/CORE.setting line 1362 (die @ 3)  at /home/p6eval/niecza/src/STD.pm6 line 1147 (P6.comp_unit @ 33)  at /home/… | ||
..pugs b927740: OUTPUT«*** No such subroutine: "&hel" at /tmp/mYuOzNkPz3 line 1, column 1 - line 2, column 1» | |||
..rakudo 54e076: OUTPUT«===SORRY!===CHECK FAILED:Undefined routine '&hel' called (line 1)» | |||
tyatpi | perl6: help | ||
p6eval | niecza v15-4-g1f35f89: OUTPUT«===SORRY!===Undeclared routine: 'help' used at line 1Unhandled exception: Check failed at /home/p6eval/niecza/boot/lib/CORE.setting line 1362 (die @ 3)  at /home/p6eval/niecza/src/STD.pm6 line 1147 (P6.comp_unit @ 33)  at /home… | ||
..rakudo 54e076: OUTPUT«===SORRY!===CHECK FAILED:Undefined routine '&help' called (line 1)» | |||
..pugs b927740: OUTPUT«*** No such subroutine: "&help" at /tmp/e27lQULjVw line 1, column 1 - line 2, column 1» | |||
moritz | perl6: say 'I can only handle Perl 6 code' | 19:51 | |
p6eval | pugs b927740, rakudo 54e076, niecza v15-4-g1f35f89: OUTPUT«I can only handle Perl 6 code» | ||
tyatpi | ha ha | 19:54 | |
sorear | maybe we need sub CORE::help { say 'perlcabal.org/syn' } | ||
tyatpi | new feature to add ! | ||
19:54
raiph joined
|
|||
tyatpi | sorear: Maybe just a mention of that URL in the MOTD? | 19:55 | |
sorear | tyatpi: we don't control the motd | ||
moritz | sorear: I think tyatpi means the topic in here | 19:58 | |
but the better URL is really perl6.org/ which we already link to | |||
20:00
Chillance left,
Chillance joined
|
|||
dalek | ast: 6bc3067 | coke++ | S06-multi/syntax.t: pugs fudge |
20:08 | |
gs.hs: 3201cc1 | coke++ | t/spectest.data: run fudged test |
20:10 | ||
20:13
lasse__ left
|
|||
dalek | ast: a1e589c | coke++ | S06-operator-overloading/sub.t: *eyeroll* |
20:21 | |
20:22
bacek joined
|
|||
lichtkind | subrule prefixes are done | 20:22 | |
moritz | [Coke]++ | ||
lichtkind | do they deserve index entries? | ||
can subrule prefixes be combined? | 20:23 | ||
moritz | what do you mean by that? | 20:26 | |
sorear | What's a subrule prefix? | 20:28 | |
lichtkind | www.perlfoundation.org/perl6/index....t#subrules | 20:31 | |
its eg the . which makes <.ws> none capturing | 20:32 | ||
moritz | then the answer is "no" | 20:33 | |
though note that the * isn't such a prefix | |||
20:33
colomon left
|
|||
moritz | because the parser doesn't expect a rule name after <* | 20:34 | |
20:34
colomon joined
|
|||
moritz | I also don't see which two would make sense to combine | 20:36 | |
gfldex | would sub foo( --> Bar|Any ) {...}# be valid Perl6 code? | 20:38 | |
moritz | std: sub foo( --> Bar|Any ) {...} | 20:39 | |
p6eval | std 1ad3292: OUTPUT«===SORRY!===Typename Bar must be predeclared at /tmp/wMyXUv4o1n line 1:------> sub foo( --> Bar⏏|Any ) {...}Parse failedFAILED 00:01 109m» | ||
moritz | std: class Bar { }; sub foo( --> Bar|Any ) {...} | 20:40 | |
p6eval | std 1ad3292: OUTPUT«===SORRY!===Unable to parse signature at /tmp/9rQVA7HTWy line 1:------> class Bar { }; sub foo⏏( --> Bar|Any ) {...}Couldn't find final ')'; gave up at /tmp/9rQVA7HTWy line 1:------> class Bar { }; sub foo( --> Bar⏏… | ||
moritz | short answer: no | ||
gfldex | could it become valid Perl6 code? :-> | ||
moritz | if you changed it to be valid Perl 6 code, yes | 20:41 | |
lichtkind | moritz: ok thanks i change that | 20:42 | |
done | 20:44 | ||
20:46
birdwindupbird left
20:50
havenn joined
20:57
icwiener_ left,
icwiener_ joined,
icwiener_ left,
icwiener_ joined
21:12
icwiener_ left,
icwiener_ joined
|
|||
pmurias | fglock: does perlito5 run any test from the orginal perl5? | 21:13 | |
21:19
GlitchMr left
|
|||
TimToady | std: class Foo {}; class Bar {}; sub foo ( --> Any where Foo|Bar ) {...} | 21:25 | |
p6eval | std 1ad3292: OUTPUT«===SORRY!===Unable to parse signature at /tmp/rmxdRZOv6c line 1:------> class Foo {}; class Bar {}; sub foo ⏏( --> Any where Foo|Bar ) {...}Couldn't find final ')'; gave up at /tmp/rmxdRZOv6c line 1:------> Foo {}; class … | ||
21:34
MayDaniel left
|
|||
sorear | o/ pmurias, fglock | 21:36 | |
21:37
lichtkind left
|
|||
pmurias | sorear: hi | 21:38 | |
21:38
am0c left
|
|||
pmurias | fglock: ping | 22:10 | |
22:13
am0c joined
|
|||
pmurias | fglock: I made perlito5.js pass all tests on node.js | 22:13 | |
fglock: hopefully i didn't break anything on d8, but I didn't test | 22:14 | ||
22:22
havenn left
22:26
tyatpi left
|
|||
masak | sorear: I don't think "TimToady++ wrestling with his own bugs" quite covers it ;) | 22:29 | |
I see the past five years more as an effort to shrapen the spec against implementations, plugging as many eyes, hands, and brains into the process as we can find. | 22:30 | ||
hi mucker-lurker. :) | 22:31 | ||
jnthn is home :) | 22:35 | ||
moritz: On anon enums, I think now we have bs we should use the anon enum builder to build the key/value pairs that we install for named enums. | 22:36 | ||
22:36
havenn joined,
benabik left
|
|||
jnthn | Rather than having two code paths. | 22:36 | |
So, having done anon enums is doubly good. moritz++ | |||
22:37
benabik joined
|
|||
masak | I'm guessing there will be more refactorings like that. | 22:40 | |
the "rather than having two code paths" kind, I mean. | |||
22:44
icwiener_ left
22:45
icwiener_ joined
|
|||
jnthn | yes, it's generally a good direction to move in. | 22:46 | |
22:59
tokuhirom3 left
23:00
kaare_ left
23:07
havenn left
|
|||
sorear | bs was merged? | 23:09 | |
23:12
tokuhirom3 joined
|
|||
masak | about a week ago. | 23:12 | |
about at the time when Rakudo took a leap and put Niecza at 96%. | 23:13 | ||
sorear | rub it in, rub it in... :D | ||
pmurias | what's the current rakudo niecza ratio? | 23:14 | |
masak | sorear: no, but that was why. | 23:15 | |
sorear | still 96%, I think. | ||
masak | yeah. | ||
sorear | masak: I'm trying to act humorous - my feelings aren't *really* hurt. | 23:16 | |
pmurias | sorear: we should integrate perlito5 and start passing perl5 (spec)tests ;) | ||
sorear | In fact I'm thrilled to think that I'm responsible for Rakudo regaining momentum | ||
masak | I think the statistics will do us good as long as we approach them un-seriously. | 23:17 | |
so I'm glad you're not really hurt ;) | |||
Tene | I actually have slower startup on the latest rakudo | ||
on rakudo from approximately a month ago, i had consistent 0.4 second times for perl6 -e 1 | 23:18 | ||
jnthn | Tene: Define "latest" | ||
Tene | jnthn: Date: Fri Mar 9 10:47:20 2012 +0100 | ||
a8086d403ba034687b03a91f5a2c487d8a0a540c | |||
now the same test varies between 0.6s 0.9s | 23:19 | ||
jnthn | o.O | ||
OK, then you're observing the exact opposite of what everybody else has. | 23:20 | ||
Tene | oh, uh... I have the 'nom' branch checked out, not 'master' | 23:21 | |
Oops. | |||
sorear | you have a master branch? | ||
Tene | Apparently? | ||
jnthn | OK, now I'm really confused... :) | ||
Tene | Maybe it's old. | ||
I haven't pruned branches in my checkout in a very long time | |||
ahh, 'nom' is the main branch now. | 23:22 | ||
sorear | Yes. | 23:23 | |
Tene | so, no, I'm using the right branch | ||
This is Parrot version 4.1.0-devel built for amd64-linux | |||
jnthn: if you'd like a login on my laptop, let me know. | 23:26 | ||
23:27
robinsmidsrod left
23:30
Trashlord joined
23:35
mj41 left
23:50
isBEKaml left
23:51
robinsmidsrod joined
|
|||
jnthn | Tene: Thanks, will do...gonna be pretty tied up in the coming days, though. | 23:55 | |
Time for some sleep & |