»ö« 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! | Rakudo Star Released!
Set by diakopter on 6 September 2010.
lue what's the em dash for? 00:00
tylercurtis std: my $x = -> { my Int $c=10; return { say $c— } }(); $x(); $x(); 00:01
p6eval std a194beb: OUTPUT«===SORRY!===␤Confused at /tmp/8CFndbP3_T line 1:␤------> $x = -> { my Int $c=10; return { say $c⏏— } }(); $x(); $x();␤ expecting any of:␤ POST␤ bracketed infix␤ infix or meta-infix␤ postfix␤
..postfix_prefix_meta_operator␤ statement modifier l…
tylercurtis std: my $x = -> { my Int $c=10; return { say $c-- } }(); $x(); $x();
p6eval std a194beb: OUTPUT«ok 00:01 123m␤»
MindosCheng lue: One way to tell Perl 6 that is a closure. *I guess* 00:09
rakudo: $x -> { say $c— }; $x(); $x(); 00:10
p6eval rakudo 015d77: OUTPUT«===SORRY!===␤Confused at line 22, near "$x -> { sa"␤»
tylercurtis MindosCheng: There's no postfix:<—> operator in Perl 6.
You want postfix:<--> 00:11
(although, of course, one could define a postfix:<—> operator)
MindosCheng rakudo: my $x = -> {say $c— }; $x(); $x();
Wrong syntax... 00:12
tylercurtis rakudo: my $x = -> {say $c-- }; $x(); $x();
MindosCheng rakudo: my $c=10; say $c—; say $c—; 00:13
tylercurtis: You meant $c— part? 00:14
tylercurtis MindosCheng: indeed.
sorear Where did you read about this syntax? 00:16
p6eval rakudo 015d77: OUTPUT«===SORRY!===␤Unable to parse blockoid, couldn't find final '}' at line 22␤» 00:17
rakudo 015d77: OUTPUT«===SORRY!===␤Symbol '$c' not predeclared in <anonymous> (/tmp/_xFryqqvOH:22)␤»
rakudo 015d77: OUTPUT«===SORRY!===␤Confused at line 22, near "say $c\u2014; s"␤»
MindosCheng I think the IRC client changed the minus minus. 00:23
sorear I think you'll have fun with the sub foo(Bar:D $x) {} syntax 00:29
MindosCheng sorear: Don't know yet... 00:31
MindosCheng rakudo: my $c = 10; say $c--; say $c--; 00:51
Have to go. Bye. 00:53
MindosCheng &
MindosCheng rakudo: my $c = 10; say $c--; say $c--; 00:54
p6eval rakudo 015d77: OUTPUT«10␤9␤» 00:55
PhatEddy rakudo: my @a ||= @a; say qq/{@a}/; 01:51
p6eval rakudo 015d77: OUTPUT«(timeout)»
PhatEddy rakudo: my @a ||= @a; say qq/{@a}/;
p6eval rakudo 015d77: OUTPUT«maximum recursion depth exceeded␤ in 'Array::at_pos' at line 2963:CORE.setting␤ in 'Array::at_pos' at line 2963:CORE.setting␤ in 'Any::postcircumfix:<[ ]>' at line 1725:CORE.setting␤ in 'Any::join' at line 1432:CORE.setting␤ in 'Any::join' at line 1437:CORE.setting␤ in
..'List:…
diakopter interesting 01:52
PhatEddy rakudo: my @a ||= 1, 2; say qq/{@a}/;
p6eval rakudo 015d77: OUTPUT«1␤»
PhatEddy rakudo: my @a = 1, 2; say qq/{@a}/;
p6eval rakudo 015d77: OUTPUT«1 2␤»
PhatEddy Am a bit of a novice - is the ||= case OK? 01:53
with 1,2 ..
sorear I suspect you need parens 01:56
but why would you want to do such a thing
std: my @a ||= 1, 2
p6eval std a194beb: OUTPUT«ok 00:01 122m␤» 01:57
PhatEddy rakudo: my @a ||= (1, 2); say @a.perl 01:57
p6eval rakudo 015d77: OUTPUT«[(1, 2)]␤» 01:58
PhatEddy rakudo: my @a = 1, 2; say @a.perl
p6eval rakudo 015d77: OUTPUT«[1, 2]␤»
PhatEddy Unless some objection will probably file the my @a ||= @a one since it blows and leave others ... 02:02
rakudo: my @a = (1 ,2); say @a.perl 02:05
p6eval rakudo 015d77: OUTPUT«[1, 2]␤»
PhatEddy rakudo: my $a = my ($b, $c) = 1, 2; say $a 02:09
p6eval rakudo 015d77: OUTPUT«1 2␤»
sorear what you're doing doesn't make a whole lot of sens 02:25
dalek ecza: c4c533a | sorear++ | lib/JSYNC.cs:
[jsync] Fix parsing of hex escapes
04:04
ecza: 17d8d1b | sorear++ | lib/JSYNC.cs:
[jsync] Check character set of anchors
dalek ecza: c877daa | sorear++ | lib/JSYNC.cs:
[jsync] Implement reading of encapsulated documents
04:25
dalek ecza: 0c5d47e | sorear++ | / (3 files):
[jsync] Implement thawing of object data
05:02
moritz_ good morning 06:37
phenny: tell masak your strangelyconsistent atom feed contains <name>$author</name> 06:38
phenny moritz_: I'll pass that on when masak is around.
sorear hi moritz_ 06:39
dalek : fdd4c7a | moritz++ | misc/perl6advent-2010/articles/main-sub.pod:
[perl6advent] add an article about MAIN subs
06:42
sorear Didn't we do MAIN last year? 06:43
sorear wonders exactly what the goal for these articles is
moritz_ sorear: just multis in general
sorear: the goal is to enthuse and educate people about Perl 6 06:44
dalek ecza: 1d78ea1 | sorear++ | / (2 files):
Add &spew
06:59
ecza: 8628f27 | sorear++ | / (2 files):
Add JSYNC.pm6
moritz_ phenny: ask jnthn to please re-test gen_parrot.pl. I think your fix was RONG, and the code that it fixed was RONG too (I forgot to update it) 07:08
phenny moritz_: I'll pass that on when jnthn is around.
dalek kudo: d1ca2e3 | moritz++ | build/gen_parrot.pl:
remove a fossile in gen_parrot.pl; needs re-testing under windows
07:09
rodarmor Hi there :) 07:12
sorear Hi!
Welcome.
rodarmor Haha, I like this channel already.
I'm trying to install rakudo-star-2010.10 on my mac, and it's segfaulting.
Am I hosed?
sorear How are you trying to install it? 07:13
rodarmor (rakudo isn't segfaulting gmake is segfaulting)
perl Configure.pl --gen-parrot --prefix=/opt/rakudo
and then
gmake
sorear and then gmake crashes!?
rodarmor haha, I'm probably still being inaccurate 07:14
the exact error is:
whoop's irc doesn't like my slashes
Can I quote something in IRC?
(so that it doesn't get interpreted as IRC commands)
sorear / /stuffwithslashes 07:15
but it's better if you not paste long stuff; use pastie.com or something like that
>3 lines
rodarmor ah, sweet, thx 07:16
pastie.org/1298983
Do you know if other mac users have successfully compiled/installed rakudo-star-2010.10? 07:17
sorear oh, so it *is* Rakudo segfaulting
that makes more sense than gmake doing it :D
what kind of mac? ppc, ppc64, amd64, x86?
rodarmor You'd be surprised, I've had some weirdo gmake bugs.
It's a first generation macbook pro
so it's x86 32 bit, about 4 years old 07:18
sorear uname -m?
a
ah
rodarmor i386
moritz_ rodarmor: yes, some of our developers are mac users 07:19
rodarmor moritz_: good to know!
moritz_ rodarmor: how much free memory do you have on that machine? 07:20
rodarmor I don't know how accurate it is, but Activity Monitor is showing 784MB free
Plus 425MB inactive 07:21
moritz_ that should be enough
rodarmor: you could try to build the latest rakudo from source, following the instructions on rakudo.org/how-to-get-rakudo 07:22
that way you just get the compiler, not the distribution
but there's hope that you at least get *something* :-)
rodarmor I was a little nervous about that. What else do I need to have the distribution, and what's missing? 07:23
moritz_ the distribution also contains some mdoules 07:24
which you can probably install with github.com/tadzik/neutro/ once you've got Rakudo running 07:25
rodarmor will perl6 itself be complete though, without the modules? 07:26
moritz_ yes 07:27
rodarmor Okay, sweet :) 07:28
I'll give that a shot.
although I'm going back on my never-try-to-build-bleeding-edge-packages-from-source policy...
rodarmor1 wow, this time it actually took down my whole box :) 07:32
sorear any luck? 07:41
rodarmor I really hate computers sometimes :P 07:43
i'm trying to compile the latest from github now 07:44
macports provides parrot 2.6.0, is that good enough for the latest version of rakudo? 07:46
mindos1 rodarmor: I use brew instead of Macports. I can build successfully. 07:52
mindos1 rodarmor: I am using OS X Server 10.5.6 07:54
rodarmor1 brew looks pretty cool 07:56
how does the package selection compare to macports?
well, the actual compilations seem to be crashing my computer :( 08:01
I think I'm going to give up for now.
man do i want to try out perl6 though!
mindos1 rodarmor1: You can try /msg p6eval perl6: say "hello world" 08:09
mindos1 rodarmor1: I am new here. But I think perl6 uses its own parrot. When build, you will get that parrot on local, too. 08:15
moritz_ there's exactly one rakudo release that works with parrot 2.6.0 08:17
dukeleto moritz_: how is rakudo on parrot.git working? noticing any bugs? 08:25
moritz_ dukeleto: nothing git specific so far
but yes, it's full of bugs... just take a look at RT :-) 08:26
dukeleto moritz_: i am sure you will have the appropriate amount of fun 08:28
moritz_ :-)
dukeleto moritz_: perlgeek.de/blog-en/perl-6/pvc-perl...coach.html looks like something that could be a good Google Code-In task 08:40
moritz_: such as writing up docs for it
moritz_ might be
dukeleto moritz_: or even just a blog post about perl 6 applications and libraries written in the last year 08:41
moritz_ so, code-ins are really small pieces of work? 08:42
dukeleto moritz_: yes. leto.net/perl/2010/11/parrot-founda...de-in.html
moritz_: trac.parrot.org/parrot/wiki/GoogleC...n2010Tasks
moritz_: small "tasks" which are specific sets of "work", which can be many things in addition to code
dalek kudo: 3131a2a | moritz++ | README:
expunge subversion references from README
08:43
kudo: 9ca0de5 | moritz++ | docs/ (2 files):
[docs] fix a few links
flussence I think I found a bug in rakudo's .gitignore, "/parrot" and "/parrot_install" probably shouldn't have those leading /'s because git clean doesn't remove them, even though it says it does. 09:06
(and the other lines with leading slash in them...) 09:07
moritz_ flussence: my 'git status' doesn't show parrot 09:08
otoh it doesn't hurt to remove leading slashes 09:09
flussence huh, it seems to ignore stuff with its own .git subdir...
moritz_ it didn't show parrot_install either 09:10
flussence strace says git-clean prints the "Removing" line, then straight away it checks for a .git/ and does nothing if that's there. I suppose it's intentional behaviour, but their manpage doesn't say it'll do that... :/ 09:14
moritz_ then submit a doc patch 09:15
sorear Remove untracked directories in addition to untracked files. If an untracked directory is managed by a different git repository, it is not removed by default. Use -f option twice if you really
want to remove such a directory.
flussence Oh... that's that then. 09:17
.oO(I really shouldn't be messing with this stuff first thing in the morning)
moritz_ wonders what happens if you put a complete svn checkout under git version control 09:18
dalek ecza: 626548d | sorear++ | v6/ (2 files):
[v6] Implement symbol dumping
09:28
sorear out 09:38
moritz_ sorear was right about people being disturbed by github outage: www.reddit.com/r/programming/commen...d_between/ :-) 09:46
szbalint "ARGH the centralized HUB of my decentralized version control system is down! Now I can't get work done because I can't route around the failure with my decentralized version control system. 10:05
colomon szbalint: to be fair, having github down makes all of the current p6 module installers useless, for instance. Just because all the source is still out there and safe doesn't mean losing your hub is painless... 10:41
szbalint I realise that. I had to postpone a new module release because I couldn't sync changes from github myself. It's still funny though :) 10:47
sort of like "making backups doesn't mean they work"
moritz_ but when somebody accidentally deleted the parrot repo on github (was an admin, shouldn't haven been), somebody else just re-pushed his local copy. 10:49
I find it awesome that such things work
mathw You can be as distributed as you like, but when it's working having a central hub as the definitive place for things is the easiest way to work 11:02
and github doesn't go down very often, after all
takadonet morning all 13:21
PhatEddy rakudo: my (@a, @b); @a = (1, 2); say @a.perl; @b ||= (1, 2); say @b.perl
p6eval rakudo 015d77: OUTPUT«[1, 2]␤[(1, 2)]␤»
PhatEddy sorear: ping - last night you complained I wasn't making sense - I partially agree but with this example not completely ... 13:22
mathw o/ 13:23
colomon \o 13:24
MindosCheng o//
mathw yay people 13:28
everywhere seems very quiet today
PhatEddy phenny: tell sorear to check back here in irc when he has chance ... irclog.perlgeek.de/perl6/2010-11-15#i_2995501 13:34
phenny PhatEddy: I'll pass that on when sorear is around.
jnthn o/ 13:44
phenny jnthn: 07:08Z <moritz_> ask jnthn to please re-test gen_parrot.pl. I think your fix was RONG, and the code that it fixed was RONG too (I forgot to update it)
jnthn moritz_: Can do when I get home. 13:45
moritz_ no hurry, should just be before the release 13:46
colomon is looking at this, and thinking he wants it for Perl 6: pdf.cx/6gc94 13:55
dalek kudo: c766295 | moritz++ | build/gen_parrot.pl:
[gen_parrot.pl] git fetch in the right directory
13:57
kudo: 89b9544 | moritz++ | build/gen_parrot.pl:
[gen_parrot.pl] avoid redundant fetching directly after git clone
moritz_ colomon: fast evaluation in CPU would be a decent first step :-) 14:12
colomon that's not sexy, it's just necessary. ;) 14:14
dalek ast: c941342 | (Kodi Arfer)++ | S03-metaops/hyper.t:
[hyper.t] Added a test for a bug fixed in Rakudo f0e270f.
14:16
kudo: f0e270f | KodiB++ | src/core/metaops.pm:
[metaops] Don't itemize the result of a recursive call to &hyper.
14:18
moritz_ pack.t fails one test 14:39
tadzik o/ 14:58
colomon \o 14:59
tadzik moritz_++ # advent calenar work 15:00
colomon do you have a quick link for that? 15:03
moritz_ mu repo misc/perl6advent-2010/ 15:03
colomon moritz_++ 15:15
not that that was a quick link, but it got me to get off my arse and download mu, so it's an all-around win.
woah, you've actually got an article done already!?! 15:16
err... why does add.pl with no arguments return 7? 15:17
slavik1 colomon: that's a bug, it should return 42 :P 15:19
tadzik yay REPL 15:26
colomon: default params? 15:27
err, values
ah, I see what you mean 15:28
masak oh hai, #perl6! 15:33
phenny masak: 06:38Z <moritz_> tell masak your strangelyconsistent atom feed contains <name>$author</name>
masak moritz_: thanks, fixed.
jnthn o/ masak 15:34
masak: Journey home work out OK?
masak jnthn: \o
yes. :)
jnthn yay :)
masak it was... a weird experience.
jnthn Oh? 15:35
masak sleep was fitful, and I think I spent something like three hours packing and closing up my backpack :)
flat tire on the bike. just as well, I might have been too tired to ride it. 15:36
bed looked too attractive when I got home. crashed and slept for six hours.
jnthn :)
So now you're...really out of sync! 15:37
masak I have no idea when I'll fall asleep tonight. :)
yes. my sleep is now disjunct from Standard Sleep. 15:38
masak on the plus side, I've now read through the whole DOM API specification. 15:39
jnthn \o/
You've set up your brain the DOM. :)
masak yeah :) 15:40
well, someone did.
tadzik masak: o/ 15:41
masak tadzik: greetings. 15:42
masak interesting bit of community musings: blog.laufeyjarson.com/2010/11/ugly-old-perl/ news.ycombinator.com/item?id=1906070 15:47
he starts out complaining that Perl 5 people aren't always paying attention to improvements in the language.
masak then he ends suggesting that both Perl 5 and Perl 6 should change their names for PR reasons. 15:48
tadzik wtf PR 15:52
bah, phenny should have that feature
Public Relations?
masak I'd be disinclined to support the introduction of a command 'wtf' on the channel. we tend to use that when we're seeing highly unexpected p6eval output. 15:53
in general, I think the need for infobot functionality on a channel is a community design smell.
frettled Such things can be supported by the user doing /msg infobot, and infobot doing /notice user 15:54
(and should) 15:55
masak ooh
and /topic could give info on how to get started.
frettled Best practice for IRC bots states that bots should never send PRIVMSG themselves, not even to a channel.
tadzik so what's PR?
:)
frettled Also, bots shall not respond to NOTICE.
tadzik: public relations.
frettled Bonus: bot responses are all the more visible when they use /notice to a channel than regular msg; it's far easier to see that it comes from a bot. 15:56
masak tadzik: basically, it's how the external world perceives your project/company/organization. 15:57
tadzik mhm
masak frettled: sounds nice.
flussence irssi's "/help notice" is pretty informative in this case 15:58
masak oh! petdance++ has already covered that blog post: perlbuzz.com/2010/11/progressing-vs...gging.html 16:02
alester You mean alester? :-) 16:17
ch3ck hi pmb 16:20
pmb hi ch3ck
masak alester: oh, right :) 16:21
ch3ck morrn masak 16:24
masak :)
well, it's not that bad, but almost.
planning to go swimming soon. 16:25
TimToady blurs into existence in a vague sort of way
masak TimToady: fuzzy greetings.
dalek : 536f6ab | (Solomon Foster)++ | misc/perl6advent-2010/topic-brainstorming:
Couple more ideas.
16:46
takadonet pyrimidine: hey 17:19
pyrimidine o/
TimToady colomon: GPU support depends mostly on getting S09 implemented someday 17:30
frettled Mellow greetings, citizen. What seems to be your boggle? 18:32
moritz_ TimToady: seems that jnthn++ is working on it :-) 18:33
dalek kudo: 248bab6 | moritz++ | .gitignore:
remove leading slashes from .gitignore, since flussence++ reported that those slashes can cause problems
18:48
kudo: 9256321 | moritz++ | docs/ChangeLog:
[docs] update ChangeLog
masak ahoy! 19:53
diakopter chips!
colomon fish! 19:56
sjohnson & 19:57
moritz_ Kartoffelpuffer! 19:58
uplaoad.wikimedia.org/wikipedia/com...puffer.jpg FYI
diakopter upload.wikimedia.org/wikipedia/comm...puffer.jpg 19:59
colomon Yum! 19:59
daxim because it's chrimas time: hu.wikipedia.org/wiki/L%C3%A1ngos 20:00
masak nothingmuch! \o/ 20:07
huf i can never eat a whole langos, it's too oily
nothingmuch masak: ?
masak nothingmuch: hi!!1! 20:08
:)
nothingmuch i mean, it's quite nice to be greeted so enthusiastically, but I don't know that I deserve it ;-)
masak of course you do. :)
nothingmuch were you just talking about me or something? i swear it wasn't my fault
masak no, I tend to greet people that way on this channel.
nothingmuch ah 20:09
masak informal research indicates it lifts the mood. :)
nothingmuch closed irssi for the first time in months today, i guess that's whY i'm not used to it =)
masak nothingmuch: on the topic of whether you deserve arms raised in greeting: to the extent that you were/are involved in the development in Moose and KiokuDB -- thank you. 20:11
nothingmuch =) 20:12
masak moritz_: I made Raggmunk/Kartoffelpuffer the other day! :) 20:15
colomon I just finished cleaning up some dead code from one of my $work projects: 1200 lines of code deleted! 20:17
whoops, 2200 lines of code deleted!
takadonet colomon: which language?
masak wow.
colomon C++
takadonet nice
colomon that's more than half.
(in that source file)
masak o/ 21:56
muixirt hi folks, how is the parrot git transition going w.r.t. rakudo (star)? 22:03
sjohnson masak!
jnthn lolitsmasak 22:04
moritz_ muixirt: rakudo now builds from parrot-on-git
haven't looked at star yet
sleep &
muixirt good n8 moritz_ 22:05
masak "n8"? doesn't that expand to "neight"? 22:06
sjohnson heh
jnthn how h8ful
sjohnson nite nite m8 22:07
mkramer unless you have a thick cockney accent
masak I imagine "good n8" is what horses would say, could they form words.
muixirt n8 == the bus line for moritz_
mkramer then it's good noight
Tene .u 🚄
phenny U+1F684 (No name found)
jnthn I 8 a gr8 pl8 of noms quite l8. 22:08
masak might as well go with the Yiddish "good noyt".
Tene briefly entertains the idea of the following as an alternative to '==>' www.fileformat.info/info/unicode/ch.../index.htm
jnthn puts a bullet through the idea 22:09
;)
Tene masak: I've mostly seen germans use 'n8', iirc. Might be a dialect variation.
masak Tene: the Unicode Consortium needs to be stopped.
jnthn Or some training on what characters to include... 22:10
...before they go totally off the rails.
masak Tene: that makes sense because de:'ei' is pronounced en:/eye/
muixirt Tene: right, from German to German :-)
Tene jnthn: they've really run away with this 22:11
masak /aɪ/
Tene I just don't see the track they used to get here
masak maybe they lost their train of thought.
mkramer whatever happened to their engineers? 22:13
Tene Are we really all aboard this? Who's checking their ticket?
mkramer the tyrannical addition of pointless codepoints is really not fare 22:14
jnthn It's a signal of bad things to come.
muixirt jnthn: that is the minimum requirement for a vm (bytecode interpreter) for rakudo to be a worthy target for a backend? 22:15
diakopter muixirt: a thoroughly integrated GC with value & reference types 22:16
muixirt diakopter: "a thoroughly integrated GC"
diakopter sorry, badly worded 22:17
muixirt a vm built around "a thoroughly integrated GC"?
jnthn muixirt: Is that "minimum to possibly make it work" or "minimum for me to consider it interesting"? :) 22:17
muixirt jnthn: both would be interesting to me :-) 22:18
jnthn muixirt: I'd generally want it to have decent GC, support for native types, support for dynamic library loading and runtime code-gen...
Tene jnthn: I'm curious about the difference.
muixirt jnthn: GC? Your wished might be to much formed be parrot, I meant it more the general way ... 22:19
muixirt Decent GC? Ok. Native types? Ok, too. Dynamic library loading? Where is that solved in a perfect way? Runtime code generation? 22:22
diakopter runtime code generation/loading like in the JVM or CLR 22:23
jnthn Right.
What they provide (JVM through the ClassLoader, CLR through...whatever it was I used...Assmbly Loader) is sufficient. 22:24
diakopter also, it doesn't need to be a bytecode "interpreter" _per_se_ to be a sufficient VM 22:25
it can load programs by reading bytecode but JIT them to native, of course.
diakopter or do any number of optimizations or pessimizations or frivolous transformations along the way :D 22:26
muixirt diakopter: well some people like (Tene?) don't make a difference between bytecode and a VM 22:27
diakopter the "virtual" aspect in the term "virtual machine" is just that the operations/code that is executed is controlled tightly by the runtime; it doesn't need to be an interpreter to do that 22:28
Tene muixirt: Eh?
mkramer What of this is LLVM missing? 22:29
jnthn muixirt: From my point of view at the moment, I want to make stuff work and want to understand performance. The graphical debugger in Visual Studio, and the RedGate profiler, mean a lot to me and make .Net dev quite pleasant, for example.
muixirt but "backend" is likely to be some immediate representation (aka bytecode)
diakopter mkramer: the GC
jnthn muixirt: I'm also very keen to explore the bits of the Perl 6 spec that are less explored, especially concurrency and parallelism.
colomon jnthn++ 22:29
diakopter mkramer: and the runtime code generation/loading bindings... (you'd have to do yourself) 22:30
jnthn muixirt: So being intersting to me at the present is muchly about toolchain, good threading support and stability.
muixirt Tene: once I said that I hate bytecode and you argued that virtually everything is a VM (== bytecode?)
muixirt jnthn: well that means only the JVM and CLR are worthwhile. Or do I miss something? 22:32
diakopter muixirt: I'm guessing that ghc & lua & PLTScheme & plenty others would be... 22:34
muixirt Tene: I have had the impression that you think bytecode and a VM are interchangeable terms (from a discussion some weeks ago)
diakopter: ok, you seem be more knowledgable than me, please explain 22:35
concurrency and parallelism 22:36
muixirt jnthn: last time I checked concurrency and parallelism were somewhat vague in the specs, did that change? 22:37
jnthn muixirt: IN the Perl 6 specs? 22:38
muixirt: In which case - yes, that's why they desparately need an implementation we can play around with so the spec can go somewhere concrete. 22:39
muixirt jnthn: or is that totally clear for implementors?
diakopter muixirt: I just mean, I thought those VM/compilers provided all of those requirements
muixirt jnthn: a somewhat vicious circle ;-)
mkramer diakopter: thanks, interesting 22:40
jnthn muixirt: Yes, but history shows that implementations tend to be the best chance of breaking it :) 22:40
muixirt jnthn: good luck :-) 22:40
masak rakudo: "foo" ~~ /f(o)o/; say "$0" 22:43
p6eval rakudo 015d77: OUTPUT«o␤»
masak rakudo: "foo" ~~ /f(o)o/; say "$0li"
p6eval rakudo 015d77: OUTPUT«===SORRY!===␤Method 'ast' not found for invocant of class 'Undef'␤»
masak std: "foo" ~~ /f(o)o/; say "$0li"
p6eval std a194beb: OUTPUT«ok 00:01 123m␤»
masak std: "foo" ~~ /f(o)o/; say "$totally_made_up_variable"
p6eval std a194beb: OUTPUT«===SORRY!===␤Variable $totally_made_up_variable is not predeclared at /tmp/PIxrbeCoU3 line 1:␤------> /f(o)o/; say "$totally_made_up_variable⏏"␤Check failed␤FAILED 00:01 123m␤»
masak submits rakudobug 22:44
diakopter mkramer: I just don't know enough to know whether or how well existing GC engines can be hooked into a compiler using llvm.
masak oh; it's already in there: rt.perl.org/rt3/Ticket/Display.html?id=74180
diakopter mkramer: for all I know, it's very easy, or it would take an enormous amount of work. I have no idea. 22:45
Tene muixirt: having both a VM and bytecode doesn't mean that they're the same thing. If I always have a paper every time I use a pen, that doesn't mean that paper==pen. 22:50
muixirt Tene: exactly. Bytecode as an "API" is what bothers me. Looking forward to projects that generate machine code while compiling p6 code. 22:53
It seems that route wasn't thought of, right? 22:54
Tene Perl 6 isn't natively representable as x86 machine code. You need higher-level abstractions that aren't present in x86 machine code.
muixirt Tene: well at the end you need a system that executes machine code, x86 or any other cpu. 22:55
Tene muixirt: Yes, I know.
masak muixirt: that's not the same as saying you can compile down to it. 22:56
muixirt well, of course that generated machine code isn't like anything an assembly coder would write. 22:58
masak muixirt: you reply tells me you don't understand.
s/you/your/
Tene It could be that I'm horribly off-base. I certainly don't claim to be exhaustively-informed, but as far as I can think of, you'll always have a significant runtime operating on and manipulating a representation of a Perl 6 program at a higher level than x86 bytecode.
muixirt I'm not saying it is "as easy" like compiling C code to assembly
masak muixirt: Tene (and I) tell you it can't be done. 22:59
as in, impossible.
Tene It *may* be possible to write a compiler that could recognize those Perl 6 programs that can have an x86-machine-code representation, and produce that code for those programs or sections of programs, and do something else (larger runtime layer, fail) for those programs that can't. 23:00
The approach most people here are taking is to first write a full compiler/runtime, and then work on doing exactly that, through JIT or other methods. 23:01
'say "OMG HAI"' certainly does have a compact x86 machine code representation.
muixirt masak: I'm really interested in *what* I don't understand, please tell me (and I mean that) 23:02
masak muixirt: I'll try. let me know how I'm doing.
muixirt ok 23:03
Tene muixirt: Perl 6 has features not compactly representable in x86 machine code. Consider complex OO with roles being applied at runtime.
masak muixirt: both Perl 5 and Perl 6 have parts that are sufficiently dynamic and too abstracted to be compiled down to machine code.
Tene Consider what the x86 code would look like to dispatch to a multimethod on an object that has had a role applied to it at runtime.
masak whar Tene said.
s/whar/what/ 23:04
Tene You'll have to have a significant runtime library operating on abstract representations of these things.
Tene Consider the case like: if (random() < 0.5) { $foo does RoleA } else { $foo does RoleB }; 23:05
masak and the runtime library will equal the VM.
Tene Even if some simple cases can be proven to not require complex manipulation at runtime, others do need it.
masak and you have to build the compiler for the general case.
Tene You still need *something* to determine what code to execute there. 23:07
It's certainly possible and desirable to have a compiler that only loads those things needed for the program at hand. Right now, we're primarily focused on getting all of those things implemented at all, before worrying about choosing what to load and when. 23:08
muixirt Tene: one problem might be that you think too much of egde cases, if someone does something like your if (random() < 0.5) example I'm happy that the compiler generates megabytes of bloated and slow machine code 23:11
flussence would it be a useful idea to implement bits of perl6 as native libs, like libpcre exists for p5? 23:12
Tene muixirt: That's not so much an edge case, actually. There are plenty of legitimate examples of applying roles based on information not available to the compiler, such as user input.
muixirt to be more precise: perl6 lacks of well engineered (production) code, so it is easy to think about lots of edge cases
Tene muixirt: consider iterating over lines in a file, and constructing an object for each line, applying roles based on the data in each line.
That's a very normal sort of thing to do.
muixirt and as jnthn points out, perl6 is in a stage were it has to break that vicious circle: implemetation vs. specsw 23:13
Tene muixirt: so your proposed method of doing that is to ask for a dramatically more sophisticated and complex compiler? 23:14
I don't see how that's related?
masak muixirt: I, and others, are writing as much code as we can, and edge cases from that code is indeed finding bugs in Rakudo. we're thinking of building the whole known code base nightly to (semi-)automate the bug finding. 23:18
muixirt Tene: well the point is that if you target parrot your compiler *is* dramatically complex, the parrot building bricks aren't that sophisticated to circumvent the complexity of perl6
masak muixirt: but I would argue that the cases towards the more dynamic end of the spectrum are actually not that uncommon.
as soon as you start doing OO, you're way over in dynamic-land. 23:19
Tene muixirt: It's certainly worth looking at, but I really expect that you have a dramatically inaccurate sense of where the complexities lie here if you think that *discarding* a VM is going to *decrease* the scope and complexity of the project. 23:21
masak +1
Tene The things that a VM does are things that actually need to be done. If we're not using a VM to do them, *we* need to write that code to handle them instead.
masak essentially reinventing the VM, poorly. 23:22
Tene You can look at the rakudo source. It's primarily Perl 6, with some VM-specific parts. You can look at what those VM-specific parts do. It's mostly the files named *.pir in the rakudo repo. 23:22
They're mostly simple OO, setting up foundations for the Perl 6 parts. 23:23
muixirt Tene: It's primarily pir and c, and Perl6 code that contains a lot of Q:PIR and pir::something 23:24
Tene The Perl 6 execution model isn't trivial. You've got exceptions, resumable exceptions, lazy lists, gather/take, lexically-scoped return. That's not trivially-representable in x86 machine code in the general case, and handling it requires manipulating an abstract representation of the flow of execution. Significant pieces of Perl 6 rely on this. 23:26
Tene You're going to have to reimplement all of that and add a GC just to get started, and then you have the object model, which is similarly-complex. 23:27
That has to happen *somewhere*. If we don't use a VM for that, we have to reimplement that ourselves, and that's not a trivial task. How is that going to *reduce* the scope and complexity? 23:28
rindolf Hi all. 23:28
Tene hi rindolf 23:29
rindolf src/gen/core.pm > src/gen/core.pir is taking a lot of time and RAM with rakudo-trunk.
It's already up to 17.4% of my 3+3 GB of RAM.
x86-64.
Tene: hi.
masak hi rindolf 23:30
muixirt Tene and masak: thanks for the explanations.
rindolf masak: hi.
masak muixirt: thank you. hope it made some sense.
jnthn sleep & 23:31
Tene muixirt: I think I'm really missing your point here, and I want to understand what you're saying. All I'm getting from you is "I don't understand what a VM does, so it must not be important. Can't you just discard it and go faster?"
muixirt masak: if it doesn't it's completely my fault
Tene It's kind of like noticing that the engine in a car is very heavy, and asking if you can throw it out to go faster, because then you'll weigh less. :)
masak muixirt: I wish it was more like you think it is. that would mean we had a shot at creating a much lighter-weight compiler.
diakopter Tene: here's the benefit-of-the-doubt route
masak Tene: best metaphor so far :P 23:32
diakopter Tene: if all aspects of the VM code (the "runtime") could be inlined (or just statically linked) along into the target executable (whether in memory only or on disk as well), there wouldn't be a "VM" :) see, magic!
muixirt Tene: well let's look at the neighbours. Spidermonkey has a bytecode interpreter and a runtime. 23:33
the bytecode interpreter is small, the runtime is large
rindolf OK, it finished now. 23:34
Still it took a long time.
And consumed a lot of RAM.
muixirt so why not get rid of the bytecode and its interpreter. And that is what the V8 engine did 23:35
diakopter muixirt: sure, and what all the other JS engines did, including Mozilla's
rindolf PackFile_unpack: This Parrot cannot read bytecode files with version 9.1. 23:36
Should I delete something?
Tene rindolf: you have files installed from an older version of Parrot.
rindolf Tene: ah.
rindolf Well, I'm going to sleep. 23:37
diakopter muixirt: now you're talking about the use of a "JIT" compiler targetting machine-code... and yes that's what lots of VMs do. 23:37
parrot did that for years
dukeleto and will again, soon. 23:38
Tene muixirt: javascript is dramatically simpler than Perl 6, and V8 does have a significant runtime component that manipulates abstract representations of language elements.
muixirt p-code sytems got extinct, but Gosling thought: what a wunderful idea, and Microsoft thought: they get a huge share in the mindset of developers, let's reinvent such a p-code system and call it dotnet 23:39
Tene "If the object's hidden class does not match the cached hidden class, execution jumps to the V8 runtime system that handles inline cache misses and patches the inline cache code. If there is a match, which is the common case, the value of the x property is simply retrieved."
etc.
muixirt but it is a dead end, and all those jits and trace based compiler efforts prove that
Tene muixirt: are you quoting something? 23:40
diakopter muixirt: what? most of the JVMs and the CLRs (including .NET) use JITs and traces
Tene -- code.google.com/apis/v8/design.html#mach_code
diakopter muixirt: your statement is dead wrong, see what I wrote above
Tene muixirt: URL?
muixirt: "p-code"? 23:41
muixirt diakopter: well V8 has no jit, it's more a load-and-go compiler (pretty classic one)
masak November now compiles on Rakudo master. \o/
flussence yay
masak Tene: p-code was introduced by Pascal, I think. 23:42
Tene muixirt: That's false. V8 *does* have dynamically-modified code sections. See the section I quoted.
muixirt Tene: en.wikipedia.org/wiki/P-code_machine
colomon masak++ 23:43
masak p-code seems to mean "VM bytecode".
colomon: it doesn't run yet, though. more in the upcoming today's blog post.
muixirt diakopter: well the jvm and clr have to support the bytecode legacy
diakopter muixirt: why? 23:44
muixirt diakopter: why what?
diakopter why must they always interpret every bytecode one-by-one
without any optimization/analysis 23:45
muixirt jaegermonkey is no less complex than the V8 engine. 23:48
Tene muixirt: In that case, we're using a VM because we're more-interested in a complete and correct Perl 6 soon than we are in investing a huge amount of effort to reimplement what we're already getting for free from a VM, for uncertain and unreliable benefit. 23:50
muixirt Tene: fair enough 23:52
Tene muixirt: Someday you certainly may see a V8-style compiler for Perl 6. You certainly will if you work on one. There's nobody involved in Perl 6 right now that believes that they can reimplement everything required better, more-accurately, and more-performantly than current VM offerings on the same time-scale as getting a more-complete Perl 6.
muixirt: If we had significantly more resources, you might see that equation change, but for right now, the work that seems to be getting the most beenfit for current contributors is working on completeness and correctness. 23:53
So, the alternate answer is "insufficient resources". 23:54
Implementing everything we'd need for a Perl 6 runtime better than current VM offerings is a huge investment. 23:55
muixirt Tene: as always (at least in this universe)
masak for me, it makes a lot of sense to pour resources into Rakudo, because Rakudo has been the spec-driving implementation for the past two-three years.
muixirt Tene: as always (at least in this universe) --> "insufficient resources"
masak sure, we need performance, but we need to clarify and refine the spec as well. 23:56
muixirt masak: that's right, I don't argue about that
Tene muixirt: look at how much work has been put into Parrot, .Net, or the JVM. I *may* be able to do better than that, but not in this lifetime, on my own.
muixirt: The effort of the perl6-related people to implement that *is* Parrot. I have been contributing to Parrot. It's making slow but steady progress. 23:57
masak what diakopter and sorear are doing seems to be more geared towards performance, but I cannot write programs in their Perl 6 implementations.
muixirt too slow: I don't argue about that: "for me, it makes a lot of sense to pour resources into Rakudo, because Rakudo has been the spec-driving implementation for the past two-three years." 23:59