Parrot 1.8.0 Zygodactyly released | Latest modified TT's: icanhaz.com/parrotbugs
Set by moderator on 17 November 2009.
darbelo Tene: You are better off that way :) 00:00
japhb Tene: time heals all wounds.
Unfortunately, it may take more time than you have .... 00:01
darbelo "Don't worry, it'll close up in a few days... If you don't bleed out in the next few minutes." 00:02
dalek rrot: r42572 | mikehh++ | trunk/t/examples/shootout.t:
remove some skipped tests that pass
00:03
dukeleto how do you catch exceptions in NQP(-rx) ?
Tene dukeleto: you could re-use the try() function from plumage. 00:06
00:13 Zak joined
Austin Okay, this is just silly. 00:18
NotFound The MS and alike way: we'll show that managed code can be as fast as plain C code, by making C code as slow as possible. 00:19
darbelo Austin: Taxes? Always. 00:20
Austin Apparently pmichaud-- is a registered democrat.
I think I'm buying healthcare for everybody here.
darbelo is unfamiliar with USA politics.
Democrats == Big taxes? 00:21
Austin: to be fair. Old NQP is still available. This particular tax is opt-in until 2.1 00:22
Austin darbelo: www.cafepress.com/dd/36418669 00:24
And yeah, it's opt-in until 2.1, but I'm thinking I might as well change my handle to "Merriwether Lewis." 00:25
(Because in a lot of cases I think I'm one of the first guys to ever see this territory.)
darbelo Austin: Welcome early adopter^W^Wproduction user! 00:26
Austin Yeah. One point oh.
00:27 plobsing joined
dalek TT #1309 created by getpsimon++: perl Configure.pl finds icu but doesn't set it up 00:27
NotFound If you don't like the new nqp, you can switch to winxed ;)
Competence!
purl i think competence is a sign of political righteousness!
Austin Does it work?
Belay that. Does it FTS?
NotFound FTS? 00:28
purl somebody said FTS was fuck this shit or fuck the sun!
Austin purl, forget FTS
purl Austin: I forgot fts
Austin FTS is "fail to suck"
japhb Austin: Think of it like this. You work out all the dark corner cases for us, and NQP-rx will FTS for everyone else. :-) 00:29
NotFound With that definition, yes. At least for people that don't hate certian family of syntax.
Austin Compiled or interpreted?
NotFound Compile to pure pir. 00:30
japhb I hate a certain family of syntax! Of course, I don't think it's the certain family you're referring to ....
NotFound japhb: C/C++/java/javascript
Austin I'll have to take a look.
NotFound A big familiy
Austin (Sadly, Kakapo is intended as a nqp library. So I'm sort of committed to nqp-ness.) 00:31
pmichaud (registered democrat) Definitely not.
japhb NotFound, the Algol family is insufficiently small to contain just the syntax family to which I refer.
I object to the "object orientation ought to HURT" subfamily thereof.
darbelo japhb: If object orientation didn't hurt people would use it. 00:32
chromatic If Windows didn't hurt, people would use it.
NotFound BTW, I don't spammed yet today my new site: winxed.org/ 00:33
dalek rrot: r42573 | jkeenan++ | branches/configtests/t (3 files):
Specify exact number of tests in plan.
rrot: r42574 | jkeenan++ | branches/configtests (3 files):
Correct overuse of '_provisional', particularly with respect to elements used in auto::headers.
mikehh All tests PASS (pre/post-config, smoke (#30020), fulltest) at r42572 - Ubuntu 9.10 amd64 (g++ with --optimize)
darbelo japhb: And once you use it, boy do you feel less inclined to preach it as a silver bullet.
Austin notfound: Probably needs more documentation than that. 00:34
NotFound Were's the werewolf?
japhb NotFound, damn, beat me to the joke
Whiteknight Where do I find documentation on the profiler?
I want to pimp it out on my blog
darbelo Whiteknight: The pod in the format conversion script was pretty good. 00:35
NotFound Austin: not much doc, but t/ and examples/ shows syntax and features.
Whiteknight darbelo: where is that?
purl yes, that!
cotto_work Whiteknight, there's not a whole lot to it apart from the pod in tools/dev/pprof2cg.pl
If you have suggestions as to what would make it more useful, I'd love to hear them. 00:36
darbelo perldoc tools/dev/pprof2cg.pl
Whiteknight cotto_work: how do we turn on the profiler?
chromatic --runcore=profiler
--runcore=profile
one of those
cotto_work -Rprofiling
or --runcore=profiling
darbelo Wasn't it "-r profiling"?
cotto_work timtowdi 00:37
purl i guess timtowdi is important, ... but can be quite an obstacle for nuB's
japhb Dang, I've spent so much time with NQP I'm starting to have problems using = instead of := in Perl 5 code ...
darbelo (:=)--
japhb A happy kid drooling a lot?
cotto_work but -r doesn't do profiling
s/do profiling/determine the runcore/ 00:38
darbelo s/r/R/ 00:39
cotto_work I'm trying to rewrite the script in nqp for a couple reasons, so I'll be updating the docs where I can't figure them out.
darbelo cotto_work: The you'll be able to profile parrot when runing the profiler to profile the profiling posprocessor? 00:40
*postprocessor 00:41
cotto_work That's a fortunate side-effect.
darbelo dogfooding++
metacircularity++ 00:42
mikehh winxed: make test PASS - PASSED 95 tests in 21 files at r179 on parrot r42572 (g++ with --optimize) - Ubuntu 9.10 amd64 00:44
Austin pmichaud: does 'has' work in nqp-rx? 00:45
pmichaud only for private attributes, and no immediate initialization 00:46
has $!x; # works
has $.x; # doesn't work (yet?)
has $!x = 5; # probably will never work
Austin :(
pmichaud PIR doesn't give a good way to attach initialization subs to objects
Austin What can I do with $!x ?
pmichaud you can bind it, same as any other variable :) 00:47
$!x := 5;
Austin method foo() { $!x := 1 } ?
pmichaud eys.
*yes.
Austin $obj.!x := 5; ?
pmichaud not quite yet
the syntax for accessing a private attribute of a foreign object is still a little dicey in p6 00:48
Austin I'd have to write 7 method x(*@value) { if +@value { $!x := @value.shift; } return $!x; } ?
pmichaud there's always pir::setattribute 00:49
Austin snickers.
Seriously.
purl I'm totally freaking serious.
pmichaud I'm a bit limited by what Parrot provides here
Austin Sure.
But subclassing works, sort of. 00:50
pmichaud sure.
I might be able to eventually add some attribute initialization and support to P6object
Austin And private attributes.
I can get rid of 'has()' in Kakapo. 00:51
No.
I get rid of 'extends'.
Keep 'has' and generate accessors.
pmichaud I'm thinking of having has $.x automatically create readonly accessors
Austin Why? 00:52
pmichaud convenience
purl convenience is you not having to write a little bit of code to generate the files, and the cost is me modifying Loader to do it for you
pmichaud I agree that writing explicit accessors isn't hard.
Austin I was thinking "why readonly"?
dukeleto purl: die in a grease fire
purl dukeleto: excuse me?
pmichaud oh. Because Parrot doesn't have an lvalue attribute 00:53
in Perl 6, one would do $foo.x = 3; 00:54
but .x is still a method call
Austin Actually, here's a problem: If I call "P6object::get_parrotclass" it sometimes returns null.
00:54 abqar joined
pmichaud it returns an lvalue object that is then assigned a value 00:54
Austin And -rx isn't automatically converting null into undef all the time, so I'm getting NPA faults.
pmichaud what are you calling get_parrotclass on ? 00:55
i.e., what are you trying to get the parrotclass of?
Austin A string or namespace.
pmichaud the tt you filed that showed the npa using INIT occurs because you're accessing the variable before it's been initialized 00:56
I'm not sure that I want to do null checks on every variable access.
Austin I know.
:|
The TT I filed showed (I think) that you're generating null checks if the `our` is inside the sub, but not generating them if it's outside the sub. 00:57
pmichaud I don't understand inside/outside here
pmichaud goes to look at the TT again
Austin our $G ; sub foo() { $G }
versus
sub bar() { our $G2; $G2; } 00:58
pmichaud ah
the outer block isn't being invoked so the variable never gets initialized
okay, I get it.
maybe I'll go ahead and do the null checks on all package variables :-| 00:59
Austin Anyway, the generated PIR is different for the two cases. The "inside the sub" case contains a null check, where the "outside the sub" case doesn't.
pmichaud yeah, that seems weird.
Austin Or give me a builtin.
pmichaud I'll go look at it.
...builtin?
Austin isnull?
purl hmmm... isnull is for real NULL pointers.
pmichaud pir::isnull already works 01:00
Austin Does it?
I tried pir::typeof, but couldn't get it to work right.
pmichaud not all of the opcodes have signatures yet
Austin So I punted and went back to Q:PIR {...}
pmichaud sometimes you have to also indicate the types of the operands
Austin Hows that?
diakopter I got pir::typeof__SP() to work
pmichaud so you might need pir::typeof__SP
Austin Ah.
Okay.
pmichaud or pir::typeof__PP
but isnull has only one signature, and PAST knows about it already
Austin __PP is for me.
So I could say 7 if pir::isnull($foo) { say("It's null"); } and expect it to work? 01:01
pmichaud Yes.
nopaste "pmichaud" at 72.181.176.220 pasted "example pir::isnull usage for Austin++" (12 lines) at nopaste.snit.ch/18762 01:03
NotFound pmichaud: ? isnull has two signatures. 01:04
nopaste "pmichaud" at 72.181.176.220 pasted "another example of isnull" (12 lines) at nopaste.snit.ch/18763
dalek rrot: r42575 | jkeenan++ | trunk (158 files):
[configure] Merge 'configtests' branch into trunk. Moves t/steps/*.t to run

now rely on %Parrot::Config::PConfig rather than init::defaults. Most direct dependence on Perl 5 %Config in config steps after init::defaults has been eliminated. Cf.: trac.parrot.org/parrot/ticket/1189."
pmichaud NotFound: PAST assumes the __IP one
rrot: r42576 | jkeenan++ | branches/configtests:
Branch has been merged into trunk and is no longer needed at head.
kid51 now recommends: make realclean && svn up && perl Configure.pl --test
Austin Cool. Thanks. 01:05
Ahh. "method 'run_tests' not found for non-object
My old enemy. We meet again. 01:06
japhb kid51, how does --test interact with 'make reconfig'?
Austin If I were a swarthy latino with a midget sidekick and a sexy accent, I'd put on a pair of leather pants and go shirtless. 01:07
kid51 japhb: Hmm, I'm not familiar with 'make reconfig' ... or, at least, not recently. Let me look. 01:08
Austin Hmm. Better make that Corinthian leather pants. 01:09
kid51 If I read the Makefile correctly, what I wrote would be equivalent to: svn up && make reconfig.
Perhaps 'make reconfig' was added when I wasn't looking 01:10
My hunch was correct: per 'svn blame', 'make reconfig' was added by reini in r36480. It escaped my attention. Patch should have no impact on that make target. 01:12
Trust, but verify. 01:13
Verified. 01:15
japhb okie 01:16
Austin pmichaud: I'm not sure if this is a change or not, but it looks like two class/module declarations in a file (module A; class B; ) wind up nested. (A{ B { } }) instead of serialized. Is this on purpose?
01:18 cconstantine joined
Austin pmichaud: (That is, lexically nested.) 01:19
01:22 plobsing_ joined
plobsing hi #parrot 01:27
japhb o/ 01:29
plobsing i've been stalled out a while on libjit_framebuilder, but i think i've got a plan to get it back on track 01:30
but I don't have enough svn knowhow to make sure its feasible
1) create a new branch from trunk. 2) apply all the commits in libjit_framebuilder resolving conflicts where necessary. 01:34
this should get the fixes in trunk into the branch easily, so that it can pass tests it fails now 01:35
basically a manual git rebase 01:37
unless maybe there's a better way to do things in svn?
mikehh All tests PASS (pre/post-config, smoke (#30023), fulltest) at r42574 - Ubuntu 9.10 amd64 (gcc with --optimize) 01:41
rakudo (c00de9d) builds on parrot r42574 - make test PASS / make spectest_smolder (up to r29128 -> #30026) FAIL - Ubuntu 9.10 amd64 01:42
rakudo - t/spec/S02-lexical-conventions/unicode.rakudo - Parse errors: Bad plan. You planned 31 tests but ran 26
rakudo does not build with g++ but does with gcc 01:43
01:43 tetragon joined
Coke nopaste? 01:50
purl i heard nopaste was at nopaste.snit.ch/ (ask TonyC for new channels) or poundperl.pastebin.com/ or paste.scsys.co.uk/ or App::Nopaste or tools/dev/nopaste.pl or at www.extpaste.com/ or paste.scsys.co.uk (for #catalyst, #dbix-class, #moose and others) or gist.github.com/ or paste or gtfo or tools/dev/nopaste.pl or trac.parrot.org/parrot/browser/tru...nopaste.pl
mikehh Coke: I can't connect to nopaste.snit.ch/ at the moment 01:51
do any of the others paste here? 01:54
diakopter just paste the url to the page it creates.. 01:57
pmichaud Austin: (lexically nested) yes, they may end up nested in that case. It's actually not valid Perl 6, though. I'm not sure what to do about that (the Perl 6 spec has some oddities there still also) 01:59
Austin pmichaud: I thought about that after I mentioned it. I know Larry explicitly talked about prohibiting two in-line class decls in the same file at YAPC. My concern was with e.g., two subclasses of a base class: would one of them wind up calling a lexical method from the other, rather than calling an inherited method? 02:01
pmichaud methods aren't lexical
(so no)
Austin Man, I keep forgetting that they're going invisible now. 02:02
diakopter my guess is it will end up working like C#'s & Java's inner classes, as var as visibility goes...
Austin Okay, never mind. I guess it's weird but not-quite-defined.
mikehh I pasted it in #perl6 as paste.lisp.org/display/90706 02:04
diakopter mikehh: on ubuntu 9.10, I had to install g++-4.3 and ln -s /usr/bin/g++ to it to get parrot latest to build 02:05
oh wait.
wrong vm.
not even a lol.
mikehh: sorry; disregard... 02:06
mikehh diakopter: I had build problems, but they got fixed
diakopter then why the paste? 02:07
mikehh: how did you go about trying to build rakudo?
mikehh diakopter: build parrot -> sudo make install, in rakudo: - make realclean, git pull, perl Configure.pl --parrot-config=/usr/local/bin/parrot_config and if that works, make spectest_smolder 02:12
diakopter: sorry missed the make -j test TEST_JOBS=5
diakopter: that worked fine when I built with gcc, but fails with g++ 02:14
02:14 allison joined
diakopter mikehh: I don't know; I've never tried to build rakudo with a parrot built with g++ 02:17
mikehh I haven't been testing rakudo in the last couple of weeks - It wouldn't build after ther PCC_reapply barnch merged, but I have started doing language tests against parrot again 02:20
02:24 nopaste joined 02:25 preflex joined
mikehh ha nopaste is back 02:30
02:30 lucian joined 02:38 kid51 joined 02:39 lucian_ joined
dalek rrot: r42577 | jkeenan++ | trunk/config/init/defaults.pm:
Delete commented-out code.
02:49
rrot: r42578 | jkeenan++ | trunk/t/steps/auto/headers-01.t:
Add test for previously untested branch in internal sub _list_extra_headers().
rrot: r42579 | jkeenan++ | trunk/config/gen/platform.pm:
No need to pass $verbose in internal sub _set_limits(), as no verbose output is provided.
03:03
rrot: r42580 | jkeenan++ | trunk/lib/Parrot/Configure/Options/Test.pm:
Delete unused variable and branch never entered.
03:16
rrot: r42581 | pmichaud++ | trunk/compilers/pct/src/PAST/Compiler.pir:
[past]: Enable anonymous parameters.
tracwiki: v124 | jkeenan++ | WikiStart 03:22
tracwiki: trac.parrot.org/parrot/wiki/WikiSt...ction=diff
03:25 JimmyZ joined 03:29 mokurai joined 03:36 nopaste joined 03:39 nopaste joined 03:42 janus joined
dalek rrot: r42582 | jkeenan++ | trunk/t/steps/gen/opengl-01.t:
Write test to simulate case of no OpenGL available.
03:56
mikehh All tests PASS (pre/post-config, smoke (#30027), fulltest) at r42581 - Ubuntu 9.10 amd64 (g++ with --optimize) 04:08
mikehh needs sleep 04:09
nopaste "pmichaud" at 72.181.176.220 pasted "more tcl fun for Coke" (5 lines) at nopaste.snit.ch/18764 04:20
04:30 dduncan joined 04:34 dduncan left
dukeleto 'ello 04:36
japhb o/ 04:39
04:49 dduncan joined
dukeleto japhb: how goes it? what are you hacking on lately? 04:49
japhb dukeleto, it goes. Doing $day_job tonight. 04:50
you?
purl i think you is very bed in engrish too
japhb purl, forget you
purl japhb: I forgot you
dukeleto japhb: thinking about nqptap and plparrot and kea, but IRL is getting in the way
japhb nodnod
dukeleto japhb: what stuff needs doing in plumage that i can help with? 04:51
Coke pmichaud: nifty. I don't pretened to understand teh code at all, however. =-)
japhb dukeleto, testing.
dukeleto japhb: which things, in particular, need testing? 04:52
japhb Um, I think I already sent you my testing priorities, but if I didn't, I'll be happy to reiterate.
dukeleto japhb: where are the testing priorities? maybe i misplaced or forgot
japhb I'd like to get Glue.pir and Util.nqp to 100%, plus at least a full set of missing args and invalid args tests for plumage-the-fakecutable 04:53
The impending refactor is going to play havoc with testing of lib/Metadata.nqp, and more detail of plumage.nqp, so the above should be a good start. 04:54
dukeleto japhb: which functions need the most testing in Glue+Util?
japhb Once that's dealt with, I can find more to test, I'm sure. :-)
04:54 Khisanth joined
japhb dukeleto, I hadn't prioritized them particularly. I really am going for 100% tested, and I don't really care what order they occur in, so low-hanging fruit is completely acceptable to me. 04:55
I just want to get to the point that I can consider both files to be "Just Working".
Plus, I want to have a good solid test suite for those low level ops when we find the inevitable porting issues. 04:56
Workable for you?
dukeleto japhb: sounds good 05:00
japhb :-)
Delegation. Such a wonderful feeling.
dukeleto japhb: i will write tests for qx(), split() and slurp() first, since that is the subset of functions that nqpTAP needs 05:02
japhb Sounds great to me
dukeleto languages? 05:03
purl hmmm... languages is trac.parrot.org/parrot/wiki/Languages
dukeleto purl, languages is also icanhaz.com/parrotlang 05:04
purl okay, dukeleto.
moderator Parrot 1.8.0 Zygodactyly released | Latest modified TT's: icanhaz.com/parrotbugs | Parrot Languages: icanhaz.com/parrotlang 05:08
05:09 theory joined
dalek tracwiki: v108 | dukeleto++ | Languages 05:09
tracwiki: trac.parrot.org/parrot/wiki/Langua...ction=diff
dduncan there seem to be multiple Python-on-Parrot implementations, pirate and pynie to name 2 of them ... is there any one that seems to be more complete and actively developed than the others, or is there no clear winner at this time? 05:12
dalek a: a4939f2 | dukeleto++ | LICENSE:
Add a license file
dukeleto dduncan: the only one i have heard of is pynie, and i think allison, the lead developer of parrot, works on it when she can
dduncan okay 05:13
dukeleto dduncan: pirate is listed as retired
dduncan: pynie is 'active'
dduncan I found both of the other names by a quick search-box look on parrot.org
dukeleto languages?
purl i guess languages is trac.parrot.org/parrot/wiki/Languages or icanhaz.com/parrotlang
dduncan thank you, that's what I wanted to know
dukeleto check out that link
dduncan: we would love more pynie devs 05:14
dukeleto goes to get $beer
dduncan my situation here is that I've never used Python before but wanted to learn it in a hurry to help a job prospect, and since I wanted to know it anyway, so besides the official C implementation I wanted to check out the Parrot one
dukeleto dduncan: does python have a spec test suite? 05:15
dduncan: from what i know, pynie is python 3k, not 2.x
dduncan I know it has a test suite ... you can run 'make test' when building the official python and it runs lots of tests
both 2.x and 3.x have one
don't know if that's a spec test though 05:16
that pynie-is-3k thing is good to know
I was thinking of starting with 3k but I did a general query to Python people last night who said development in v2 is still recommended more due to much wider support 05:17
still, I like to look to the future
dukeleto dduncan: sounds like you should work on pynie :) 05:30
pynie?
purl somebody said pynie was code.google.com/p/pynie/ or a Python implementation for the Parrot virtual machine
dduncan is there any effort to do a 2.x compatible Pynie or only a 3.x one? 05:31
I'll look at Pynie anyway for details
dukeleto dduncan: i really have no clue. 05:32
dduncan: i have never touched pynie
dduncan: which languages are you familiar with? 05:33
dduncan anyway, I thought the best way to learn Python was to actually try writing something useful in it, rather than just meaningless-result tutorials ... probably try to port my Perl 5 module Set::Relation
some Python people I talked to said that 2.6 was the best thing to write for at the moment
dukeleto dduncan: interesting.
dduncan: you should work on what interests you
dduncan I'm an expert in Perl 5, I'm trying to be an expert in Perl 6 (part way there), and I'm strong in PHP but don't like it 05:34
I'm also writing my own language, which I intend to be parrot hosted, called Muldis D
dukeleto dduncan: yes, i remember you from the gsoc mentor list
dduncan mainly I'm learning Python because a job I like uses it, and also because its good to be familiar with all the popular languages 05:35
dukeleto dduncan: you should write Muldis D in the new NQP
nqp?
purl somebody said nqp was github.com/perl6/nqp-rx
dduncan that's what I had in mind
dukeleto dduncan: then you are on the write track
right, even
dduncan though my very first implementation will be in Perl 5 05:36
and then NQP will likely be the second
the language is designed from the start with both such uses in mind, and also implementations over SQL databases
dukeleto dduncan: i am working on PL/Parrot, embedding Parrot in Postgres. you might be interested in that 05:37
plparrot?
purl plparrot is the postgres+parrot integration project or github.com/leto/plparrot
dduncan sounds very interesting ... Postgres is my favorite SQL DBMS
dukeleto dduncan++ 05:38
dduncan though ironically I haven't used it yet ... based more on what I know about it and what friends say
dukeleto dduncan: PL/Parrot is a great reason to start ...
dduncan since Muldis D is a SQL-alike language in terms of features, one challenge I may have with NQP is that I have a few data types and paradigms that are unlike common languages and so may not have a native Parrot type to map to 05:39
for example, the "relation" (rowset) type
in Perl this is implemented naively as a set/array of hashes
now Parrot has native Array and Hash/etc, so I might have to do likewise here 05:40
what I read so far about Parrot didn't cover defining new collection types, so I'll have to look into the most elegant way to do this 05:41
on the other hand, defining all the operators should be quite straightforward
dukeleto dduncan: it is reasonably easy to make your own data types 05:50
pla?
purl pla is probably really focusing on fast 2D data buffers
dduncan I figured as much, just have to look into it
dukeleto dduncan: this may be the best example of new data types: github.com/Whiteknight/parrot-linear-algebra 05:51
diakopter [somewhat OT, maybe] VM implementers: *very* interesting conversation about IE9's new JS engine. ecn.channel9.msdn.com/o9/ch9/2/7/8/...ok_ch9.mp4
dukeleto diakopter: any text transcript?
dduncan hmm, yes, that does seem to be in the direction of what I may be trying to do 05:52
high performance is good
a matrix and a relation are similar in some ways 05:53
diakopter dukeleto: I don't see one, no
dduncan part of a concern I have with my project, although it may be no trouble at all, is that I may be partly reinventing the wheel on some things Parrot provides ... 05:57
mainly I speak to the native format of Muldis D code being a database
so when Muldis D string code (what people normally write) is parsed ... 05:58
it is turned into literal database tuples in a system catalog database, analagous to SQL's information schema
and then it is that data which is then compiled into Parrot instructions
so I can't exactly go straight from the string code to Parrot instructions like most languages 05:59
Austin dduncan, it sounds like you need two different things: a string->tuple parser, and a tuple->parrot compiler.
dduncan yes 06:00
Austin What's a tuple look like?
dduncan now it would seem that NQP et al would do the first, sort of like generating a parse tree structure
it would likely do the second too though
a tuple looks like a Perl Hash
Austin What's a tuple look like?
dduncan or a SQL row 06:01
Austin Yeah, but with what contents?
Is it a particular 3-tuple (like most intermediate forms in compilers) or something else?
dduncan the keys are always text strings, the values may be any value at all
a tuple may have N elements
Austin Okay.
dduncan like a SQL table may have N columns
Austin Umm, yeah, but you usually fix the number of cols in the table once, and you're done. 06:02
Is that true for the compiled form?
dduncan let me think
in the general form, the number of columns in a tuple is not fixed ... but for tuples representing Muldis D code, the number of columns and their names and types are known at compile time 06:04
because the structure of the system catalog is system-defined and the users can't change it
Austin Yowza.
dduncan users can only change the structure of other databases that they define ... by updating the rows in the system catalog database
Austin I'm looking at the stuff you put into Cpan. Does anyone actually use this? 06:05
dduncan I have no idea
Austin Muldis-D, I mean, not cpan
dduncan Muldis D is in development, so no one's using it yet ...
Austin Okay. 06:06
dduncan but the Set::Relation module is complete and implements part of the language, and it might be in use by people
Austin I'm reading this: search.cpan.org/dist/Muldis-D/lib/M...MD_STD.pod
That's the "string language" part you were talking about, right?
dduncan yes 06:07
diakopter dukeleto: summary: IE9's JS engine compiles to native code, including js' RegExps, uses slot arrays in hidden classes for property access on the fast path and hashtable lookups when it needs to (polymorphic inline cache) fallback to the slow path. Each runtime object is essentially a void*, either a pointer to a small struct or a tagged integer or char.
dduncan so PTMD_STD is what I expect people would write in when treating Muldis D like a normal language, and that is what I would be making a Parrot hosted implementation of 06:08
Austin Is this a university project? 06:09
diakopter On SunSpider, they're 1.15x as slow as Firefox 3.6beta1 and 2x as slow as Chrome 4dev
dduncan no, its a personal project, though I fully intend it to go commercial and be supported by the company I own
Austin Oh. 06:10
dduncan that said, it currently makes no income for me so I have to also seek other paid work to live on while I do it
I expect it will make income later
Austin Sure. You might want to look at making the grammar a little more human-friendly. 06:11
Is there a description of the database-tuple-language form of it? 06:12
dduncan yes, mostly in the other files of the spec, especially Types_Catalog.pod 06:14
that file describes the data structures that Muldis D string code would be parsed into 06:15
it describes the shape of the system catalog
a compiler would read those to generate the actual machine code that runs
to help explain with an example ... 06:16
the sample code at search.cpan.org/dist/Muldis-D/lib/M...nv_alt_syn ...
basically just a trivial function declaration
turns into the data structure shown at search.cpan.org/dist/Muldis-D/lib/M...de_as_data
Austin So the types catalog (aforementioned) describes the various tuples, right?
dduncan yes 06:17
tuples and relations ... a relation is just a set of tuples, like a rowset
now unlike SQL, in Muldis D a tuple field value can itself be a tuple or relation
just like how Perl hashes can contain hash-refs etc 06:18
and so the catalog structure still sort of looks like normal code, sort of like a tree
and the string grammar takes it the rest of the way to fully look like normal code
Austin I get the impression that the types catalog is essentially the syntax tree for multis. Is that so? 06:19
dduncan yes 06:20
the catalog types are the native language syntax, and the string code is a human-friendly abstraction
Muldis D is homo-iconic, so all Muldis D code is also Muldis D data 06:21
so you get full introspection and runtime code generation or changing
a bit like SQL's information schema but you can update it too, and that's the native way to make schema changes
Austin So converting string -> tuple -> PAST-> etc. would probably be the right way to go for Parrot.
dduncan so I'm thinking 06:22
I have to have the tuple step in order to have the data around to support the introspection/etc
Austin That being the case, you probably want to bootstrap with some other string->tuple converter.
dduncan if there was no system catalog, then that could be skipped
Austin Like, write the tuples with P5, then read them with parrot, etc. 06:23
dduncan using any other language shouldn't be necessary
Austin Sure, and you can implement any program with a really long magnetic tape. 06:24
dukeleto diakopter: that is some impressive speedup
dduncan that said, I plan to implement Muldis D first using pure Perl 5, which is what the Muldis Rosetta module is
Austin Yeah.
The string->tuple parsing and the tuple->parrot compiling are independent steps. Having one of the known-to-be-good while you develop the other seems like a faster development approach. 06:25
dduncan once its working on Perl 5, then I'll evaluate how to do it in NQP/etc
yes, as you say
Austin *one of the = one of them
If you can figure out a quick way of converting from tuples directly into PAST, you'll get the rest of it for free. 06:26
dduncan well that is one part that has to be done built-in to the language, in order to support at-runtime code generation from user data 06:27
Austin Sure.
dduncan at that time its all Parrot data to Parrot data
Austin But, for example, regexes convert to code via PAST.
06:28 JimmyZ joined
Austin You can use your tuple->PAST->pir compiler on the fly. 06:28
Just like regexes, etc.
("eval", as it were)
dduncan fyi, following Perl 6's STD.pm example, I will be writing as much as possible of Muldis D in Muldis D, so that part can also be done once and shared by the Perl 5 and Parrot and etc implementations
and the part that actually must be written in Perl 5 or NQP/etc can be minimized 06:29
Austin Sounds good.
purl rumour has it Sounds good. is there a good way for me to find out when branches are merged, other than read every svn commit
dduncan of course, redundant parts will likely be made anyway to help performance, but that can be done after it simply works 06:30
eg, Muldis D would let you define all the rational math ops in terms of integer math ops, but we'd likely have some redundancy shunting to Parrot's native numeric ops 06:31
anyway, thanks for the talk 06:32
Austin np
06:51 JimmyZ joined 07:04 dduncan left 07:10 JimmyZ joined 07:11 uniejo joined 07:23 davidfetter joined 07:35 TiMBuS joined 07:51 nopaste joined 07:55 fperrad joined 07:56 chromatic joined 07:59 barney joined 08:00 iblechbot joined 08:01 nopaste joined 08:08 slavorg joined 08:35 cotto joined 08:37 abqar_ joined 08:38 Zak joined 08:41 baest_ joined 08:42 preflex_ joined 08:43 gaz_ joined 08:44 allison joined, jan joined 08:49 integral joined 08:50 ttbot joined 08:51 szabgab joined 08:53 TiMBuS joined, fperrad joined 08:54 uniejo joined
dalek a: 9155208 | fperrad++ | Makefile.in:
remove staging
09:12
a: c087e17 | fperrad++ | (24 files):
remove libraries
a: 3b2cf82 | fperrad++ | setup.pir:
git submodule (t/lua-TestMore)
a: a899688 | fperrad++ | setup.pir:
clean Test/More.lua
09:24
09:26 nopaste joined 09:43 mikehh joined 10:20 zak_ joined 10:22 lucian joined 10:35 bacek joined 10:41 nopaste joined 10:51 nopaste joined 11:18 payload joined 11:36 theory joined 11:48 cognominal joined 11:51 nopaste joined 11:58 cconstantine joined 12:08 payload joined, bluescreen joined 12:14 cconstantine joined
dalek kudo: b5d7e51 | pmichaud++ | docs/ChangeLog:
Update ChangeLog for release.
12:26
kudo: 6e6a5ac | pmichaud++ | docs/announce/2009-11:
Add 2009-11 announcement draft.
kudo: 40b555d | pmichaud++ | docs/ChangeLog:
Oops, named argument binding to positional parameters was already done.
kudo: b1a2db7 | pmichaud++ | docs/spectest-progress.csv:
spectest-progress.csv update: 453 files, 32753 (85.5% of 38318) pass, 5 fail

S02-lexical-conventions/unicode.rakudo aborted 5 test(s) S06-signature/named-parameters.rakudo passed 81 unplanned test(s)
12:32
12:39 payload1 joined 12:43 bluescreen joined 12:54 ruoso joined
dalek kudo: c5c2aae | pmichaud++ | docs/announce/2009-11:
Update 2009-11 announcement with latest spectest numbers.
12:56
kudo: 0fd222b | pmichaud++ | build/PARROT_REVISION:
Bump PARROT_REVISION to Parrot's 1.8.0 release.
13:33 payload joined 13:36 tetragon joined 13:43 payload joined 13:56 mikehh joined 14:03 tetragon joined 14:08 whiteknight joined 14:20 allison joined
whiteknight good morning #parrot 14:25
14:26 iblechbot joined 14:34 allison joined
cconstantine 'mornin 15:00
whiteknight hello cconstantine 15:02
cconstantine another day of staring at bit-tables
whiteknight lucky 15:06
I would be much happier doing some bittwiddling 15:07
15:10 Psyche^ joined 15:24 payload joined
cconstantine hehe, yeah... life is rough 15:30
15:36 lucian joined
Coke IWBNI someone did the magic to add pmtcl to the updates here. 15:39
moritz is it on the Languages wiki page? 15:40
Coke pmichaud: can I get a commit bit to pmichaud/pmtcl ?
no, that's the magic. =-) 15:44
pmichaud Coke: yes, or we can clone it into the partcl account if you wish 16:01
16:03 patspam joined
Coke that would be somewhat spiffy. 16:03
moritz Coke: just log in with the partcl account and fork at 16:05
and then add pmichaud as a commiter
Coke I just gave pmichaud the partcl password because I am still gitn00b.
moritz or that :-) 16:06
pmichaud I'm about to move the repo... but $otherjob just called so taking care of it first 16:15
nopaste "coke" at 72.228.52.192 pasted "for pmichaud" (29 lines) at nopaste.snit.ch/18768
pmichaud Coke: weird... will look at it shortly 16:16
16:20 darbelo joined
pmichaud Coke: have a better name for this besides pmtcl? I just went with that out of habit and because I couldn't think of a better name immediately :) 16:23
or perhaps we should take the pmtcl source and move it into the partcl repo?
Coke probably best to keep it a separate repo for now, given how different it's going to be, but partcl/<foo> is ok. ... pmtcl... nqtcl ? tcl-ng ? I think the goal is, if we adopt it to eventually make this code be partcl/partcl/master 16:25
pmichaud agreed
I thought about nqtcl :)
Coke +1, then.
nqt, even.
(nicked?) 16:26
pmichaud: ah. I think braced_word needs to allow for nested braces. 16:33
I think it's parsing { { } } as "{ { }" and "}"
does nqp-rx have something like <PGE::Text::bracketed: {}> 16:34
?
pmichaud Coke: oh, yes, you're right 16:42
No, we don't have PGE::Text::bracketed, but we can write it.
dalek tracwiki: v109 | darbelo++ | Languages 16:43
tracwiki: trac.parrot.org/parrot/wiki/Langua...ction=diff
darbelo Crap. Forgot to add a comment to the changes. 16:44
Coke pmichaud: hurm. might be sufficient to make that a recursive rule? (www.perlmonks.org/index.pl?node_id=179555 seems to suggest this.) 16:45
pmichaud something like that, yes.
okay, repo created as partcl-nqp for now. (Feel free to rename it to something else if you want.) 16:46
Coke nah, 'sfine. 16:47
16:47 hercynium joined
pmichaud I think I have a braces fix in place 16:51
(have to wait for parrot to rebuild first)
Coke cannot build partcl-nqp. 16:52
fixing...
purl somebody said fixing was good, definitely.
pmichaud oh, yeah 16:53
src/gen doesn't get created in time
in rakudo and nqp-rx we just have a empty src/gen in the repo 16:54
for this I tried to dynamic create it but failed
16:54 iblechbot joined
moritz just put a .gitignore in it 16:54
containing a * 16:55
pmichaud oh, that's good. I've been putting IGNORE in it. .gitignore makes more sense
In general I tend to do a single .gitignore at the root
moritz then it's always there, and the contents are automatically ignored
pmichaud right
.gitignore +1
braced_word fix pushed
actually, I think I'd just do .gitignore where its contents are .gitignore 16:56
it's not always the case that I want to ignore everything in src/gen/ 16:57
moritz what do you not want to ignore in there?
pmichaud I'd like to know if files are being generated / left there that I'm not aware of. 16:58
it's nice if "git status" shows me those 16:59
(and then I explicitly ignore the ones that are 'okay')
moritz good point
Coke pmichaud: bah. I have a patch that just fixes deps on src/gen so it's created properly, but I can't push it. 17:00
pmichaud Coke: did you commit the patch?
nopaste "coke" at 72.228.52.192 pasted "for pmichaud" (36 lines) at nopaste.snit.ch/18769 17:01
pmichaud also, I didn't add you as a committer yet to the new repo :)
Coke no, but I did. =-)
pmichaud okay
Coke if that looks sane to you, go ahead and apply it.
pmichaud okay, you committed, so next do "git pull" to bring your repo in sync with the remote master
Coke already did that.
pmichaud so what happens with "git push" then? 17:02
Coke $ git push
Enter passphrase for key '/Users/coke/.ssh/id_rsa':
Permission denied (publickey).
fatal: The remote end hung up unexpectedly
pmichaud hmmm
Coke (*@#&$#@$
nevermind, it's pushed. =-)
pmichaud when you cloned, did you use the git@github.com:partcl/.... url?
or the http: one?
okay, good. 17:03
Coke git. I was entering the wrong pp.
pmichaud aha
yes, I see it in the repo now.
Coke <- idiot.
pmichaud okay, I want to rework the variable handling a bit more, then I'll do eval, then I suspect the #perl6 crowd would like to see a few commits from me over there :)
also it'll be time for lunch :) 17:04
btw, I'm *totally* okay with us renaming the "PmTcl" bits to something else -- again, I was just throwing something together at the outset
Coke pmichaud: another bug. two procs back to back, the second proc is passed into the first one. 17:07
;(guessing that the closing } of the last word of the first command is not terminating the command.
(er, well, the newline immediately after it should be doing that.)
(PmTcl) even pmtcl would be nicer so I can avoid shifting. =-) 17:08
pmichaud that's fine too :)
any name you prefer
Coke but I may rename them to just 'tcl' at some point.
pmichaud that works
that probably makes the most sense
I did "PmTcl" just because I didn't know if/when we'd be merging it into the existing 'Tcl' code
dalek rrot: r42583 | fperrad++ | trunk/runtime/parrot/library/distutils.pir:
[distutils] the 3rd parameter of 'install' is now optional
nopaste "coke" at 72.228.52.192 pasted "for pmichaud" (21 lines) at nopaste.snit.ch/18770 17:09
pmichaud ...weird
oh! 17:10
one of my other fixes didn't get committed
oops.
Coke I don't see that command has a \\n check.
pmichaud right
I did that earlier today... but I guess I didn't commit?
just a sec
Coke yay, it's kind of making sense now. =-)
pmichaud ah, I didn't push. 17:11
okay, I'll just re-apply the patch.
pushed. 17:14
Coke added partcl-nqp to dalek's list.
pmichaud see if that fixes things.
Coke yay. no more compiletime errors on test_more.tcl 17:15
pmichaud++
pmichaud yeah, but it seems to be missing some stuff in the target=pir output
at least on this end :(
looking.
it's only parsing the one command. 17:16
ah 17:17
it doesn't know what to do with multiple newlines or separators
there. 17:18
pushed. 17:20
Coke the code inside a proc is not executed anymore it seems.
pmichaud ? 17:21
argggh, another command separator bug
nopaste "coke" at 72.228.52.192 pasted "for pmichaud" (7 lines) at nopaste.snit.ch/18771 17:22
Coke Isn't tcl fun? =-)
<duck>
pmichaud Perl 6 is harder.
:-)
Coke no doubt. 17:23
ah. yah, this works:
proc skip_all {} {puts 1..0;}; skip_all
pmichaud right -- it's looking for an explicit terminator 17:24
eos is a valid terminator at the end
Coke just adding a * after the ;\\n check seems to work.
pmichaud except that will allow zero command separators 17:25
Coke ah, right, want to alternate with $$ ?
pmichaud $
but that causes another issue
because we end up with an infinite loop
Coke sounds like a good time for me to grab lunch. =-) 17:26
pmichaud yes, likely :)
dalek rrot: r42584 | fperrad++ | trunk/runtime/parrot/library/distutils.pir:
[distutils] add a step 'update'
17:32
whiteknight lunch does sound very good 17:36
but I'm stuck in a stupid video conference
pmichaud afk, lunch
(pushed fix to partcl-nqp) 17:37
dukeleto 'ello 17:39
dalek kudo: d351043 | jnthn++ | docs/ (2 files):
Tweak the release announcement and change log to clarify what the nested siggies thing really is.
17:44
whiteknight hello
dalek kudo: b237f9c | masak++ | docs/announce/2009-11:
[docs/announce/2009-11] filled in the name "Lisbon"
17:49
Coke pmichaud: added support for "" 17:53
if an hllcompiler dies with a panic, how can I see what it was thinking at that point? add more panics? 17:54
whiteknight it was thinking "panic!" 17:57
Tene panic("The world is so horrible... and all the diodes in my left side hurt.")
nopaste "coke" at 72.228.52.192 pasted "message pmichaud" (6 lines) at nopaste.snit.ch/18773 17:58
Coke here I am, brain the size of a planet.
so, can anyone here help me diagnose why that fails? =-)
dukeleto Coke: i can try 18:03
Coke partcl-nqp is at github under partcl/ , nopaste shows the issue.
dukeleto++
dalek lscript: 867f3fb | fperrad++ | (5 files):
remove Configure & Makefiles
18:14
kudo: 1db377a | masak++ | docs/ChangeLog:
[docs/ChangeLog] added a few more changes
18:18
lscript: ac7db73 | fperrad++ | .gitignore:
update .gitignore
18:20
18:20 lucian joined 18:23 payload joined
dalek kudo: f5065b6 | masak++ | docs/release_guide.pod:
[docs/release_guide.pod] rolled releases forward
18:24
pmichaud back from lunch 18:38
whiteknight w00t
Tene yay lunch 18:42
18:49 amire80 joined
pmichaud Coke: fix for {{r ""}} pushed. 18:50
amire80 Hi. I added the RSS for www.rakudo.org to Google Reader and the newest item is from Mar 2, 2009.
pmichaud amire80: yes, we know. :-|
Coke hurm. dalek hasn't picked up partcl-nqp. wonder if I put it in wrong. 18:51
amire80 pmichaud: Isn't it supposed to be a very easy thing to fix?
pmichaud amire80: we've reported the problem numerous times to the site administrator; and we've not been able to get sufficient access to fix it ourselves.
(and we've not invested the energy to see about moving to a new site)
amire80 pmichaud: Oh well. Thanks for the quick reply! 18:52
pmichaud perhaps we should disable that rss feed link altogether
since it doesn't work
PerlJam I wonder if that's something you can fix as a Drupal admin or if you actually need to ssh in. 18:54
pmichaud I think we have to get an extension installed
PerlJam Hrm. masak's announcement isn't on rakudo.org 18:55
pmichaud feel free to post it :)
or to check with him about posting it :)
Coke pmichaud: whee. test_more.tcl now parses. 19:03
pmichaud yay
Coke (runs even, but all it does is define a bunch of procs, so nothing happens. =-)
dalek nxed: r180 | julian.notfound++ | trunk/examples/parser.winxed:
parser example: now is able to compile a simple addition
19:05
19:05 joeri joined
nopaste "coke" at 72.228.52.192 pasted "backslash newline substitution.." (6 lines) at nopaste.snit.ch/18774 19:06
Coke pmichaud: fyi. I'll see if I can fix it later. (just the first thing I found trying to run an actual .t) 19:07
(I will of course be very happy if you fix it. =-)
19:08 chromatic joined
Coke tcl_misc.t has a bunch of things that might be confusing, btw. (like a bare $) 19:11
(and the {*} syntax)
19:16 mokurai joined
pmichaud I can do a quick fix for comments 19:18
pushed. 19:21
cotto_work pmichaud, are there any plans to allow :main subs in nqp so pure-nqp programs can work with cli args? (I know about plumage's approach.) 19:23
PerlJam nqp already supports INIT {}, MAIN {} can't be that much more trouble :) 19:24
pmichaud PerlJam: yeah, except we'd want it to be a sub.
and in Perl 6 semantics, MAIN is actually run *after* the mainline code, not instead of
so far I'm kind of liking plumage's approach 19:25
in a couple of places I've just done @*ARGS = getinterp[2]
er
in a couple of places I've just done @*ARGS = pir::getinterp[2]
cotto_work That'd work.
(also, it's nice to know that that syntax works) 19:26
pmichaud it only works as of last night
(I think I committed that change... checking)
oops, I did not commit that change.
cotto_work npq-rx redefines "moving target" 19:27
pmichaud not at all. This is just a new feature :-)
cotto_work Yes. I definitely appreciate that once a feature works and has tests, it's pretty safe to rely on it. 19:28
pmichaud okay, the following definitely works for now
my @ARGS := pir::getinterp__P[2]
PerlJam It's still a moving target. But at least it's moving in a consistent direction at a consistent speed.
pmichaud I'll want to get rid of that __P part.
cotto_work pmichaud, so that works currently?
pmichaud I'm pretty sure it does -- checking
nopaste "pmichaud" at 72.181.176.220 pasted "pir::getinterp__P works" (13 lines) at nopaste.snit.ch/18775 19:30
pmichaud so far I like this approach a bit better than having boilerplate in every NQP module that tries to set up an @ARGS variable 19:32
er 19:33
than having NQP generate boilerplate in every output PIR/PBC that tries to set up an @ARGS variable
I think having it explicit works out slightly better
I've also been toying with the idea of having "sub foo is main { ... }" to designate subs to be flagged with :main.... but I haven't quite figured out how that should work yet. 19:34
cotto_work getinterp__P works fine for me 19:35
whiteknight pmichaud: more perl6-ish might be "sub foo is pir::main { ... }" 19:37
pmichaud oh, "is main" isn't too bad, it's just a trait
pir::main should be a call to the pir::main opcode 19:38
moritz sub foo is pir<main> { }
whiteknight ah, yes
I obviously don't know all the syntax. I'm trying to think of a way to prefix it with a namespace so you don't add syntax to NQP that's not part of Perl6 19:39
pmichaud it's really not a problem, since in Perl 6 you're allowed to define custom traits
so, our "use pir;" module in Perl 6 would likely know how to handle the 'main' trait on subs. 19:40
whiteknight ok 19:45
whiteknight has just created the most convoluted system to convert ASCII characters into their decimal number equivalents ever
chromatic sprintf? 19:46
purl sprintf is the only sane way to do fixed width numeric printing or the floating point version of the long distance phone company or ok. i was doing a bunch of pack/unpack recently so it is fresh
diakopter it? 19:47
purl it is not current
whiteknight here's a hint: it involves a serial cable, a celluar modem, a VPN, a server in Texas, and a database server in Chicago
particle if you ask me, the modem is cheating.
whiteknight I was trying to teach the embedded system to send smoke signals 19:48
particle hcf
whiteknight or to use emac's Meta+Ctrl+Butterfly
like a real programmer
NotFound whiteknight: Maybe is you who's smoking something? ;)
whiteknight haha, entirely likely
and much to my disappointment, not a single damn step in this chain involves Parrot 19:49
pmichaud Coke: I've now pushed 'eval' and 'if/then/elsif/else'. 19:52
I'll probably start to refocus on rakudo a bit soon, but will gladly answer questions or prototype new features or fix easyish bugs :-) 19:54
diakopter eval??!? in nqp-rx?
oh. tcl
pmichaud eval already exists in nqp-rx 19:55
NQP::Compiler.eval('something')
diakopter was unawares
diakopter ponders how to implement that
pmichaud it doesn't handle lexically scoped values yet... but I'm not sure nqp wants to be doing that anyway :)
19:57 fperrad_ joined
whiteknight does NQP::Compiler.eval() allow you to specify the language? 19:57
or do you have to manually create the new compiler automatically? 19:58
s/automatically//
NotFound $ ../../parrot primes.pasm 20:00
N primes up to 5000 is: 669
last is: 5001
$ ./primes
N primes up to 5000 is: 669
last is: 4999
Is this expected?
The "last is" different result.
cotto_work NotFound, sounds buggy 20:05
NotFound The .pl says the same as the .c 20:06
20:06 bacek joined
cotto_work hi bacek 20:07
whiteknight NotFound: how is it getting different results? 20:08
that definitely doesn't look right
cotto_work it's probably an implementation bug
NotFound whiteknight: just by running it.
whiteknight urg
I don't think that should be
NotFound And adjusting the top number in the other versions, of course. 20:09
PacoLinux is doing a primes.winxed and checking his results I noticed that. 20:10
pmichaud NQP::Compiler.eval() assumes you're wanting to compile an NQP program (otherwise you wouldn't be sending it to NQP::Compiler :) 20:13
it also assumes that the NQP::Compiler has been loaded, which might not be the case for separately compiled modules
I've been thinking that Parrot.eval(...) might be able to handle separate languages, though. At least, that's somewhat what Tene++ and I have been aiming towards
it might also end up being pir::compreg('Parrot').eval('...code...', :lang<OtherLang>) 20:14
where the Parrot compiler object knows how to automatically load OtherLang as needed.
or perhaps it'll be Parrot::Compiler.eval(...) 20:15
we're still working out the API we'd like to have/use.
or perhaps we end up using pir::load_language somehow.
nopaste "pmichaud" at 72.181.176.220 pasted "[source] command in partcl-nqp (for Coke++)" (12 lines) at nopaste.snit.ch/18776 20:23
pmichaud what's really scary is that nopaste #18776 is just a four-line change. :) 20:24
cotto_work So the takeaway is that npq-rx is a system that allows pmichaud to write new compilers really quickly. ;)
pmichaud that's the takeaway at present, yes.
my next trick will be to write sufficient documentation so that others can use nqp-rx to write compilers really quickly. :) 20:25
now if only I could write the sufficient documentation really quickly
hey!
I know!
since I can write compilers quickly in nqp-rx, I should write a compiler that generates the documentation and tutorial!
that should speed up the process a lot, I guess. :-) 20:26
NotFound You can write an AI that develops compiler based on a vague description ;) 20:28
"I want an object oriented mixture of Cobol and Forth", for example X-) 20:29
cotto_work pmichaud, I'd almost not put it past you.
japhb NotFound, I believe both of them have had OO bolted on, but I'd guess WILDLY different ways of looking at OO. 20:34
pmichaud afk, kid pickups 20:35
japhb For that matter, there's IIRC over a dozen different ways that OO has been bolted on to ANSI FORTH, let alone all the Forth-like languages ...
NotFound japhb: IAs are supposed to handle difficult tasks, isn't it? 20:36
s/IA/AI 20:37
But maybe that's a lot hard than beating Kasparov at chess. 20:39
japhb NotFound, well, I was just reading about IBM having computationally simulated the cortex of a mammalian brain more complex than a cat, so I guess we only have another couple decades before we can have an AI smart enough to tell you to "PUT DOWN THE COMPILERS AND BACK AWAY"
NotFound Daisy, Daisy... 20:40
Tene whiteknight: NQP-rx is written in NQP.
20:40 kthakore joined
kthakore chromatic: around? 20:40
whiteknight Tene: I know
kthakore hi calculus !!! 20:41
Tene whiteknight: "That's no small feat for a program written in the Parrot equivalent of assembly language."
japhb The IBM announcement makes me think about Accelerando: If they can simulate a cat slower than real time, could they simulate a lobster faster than real time?
kthakore japhb: lol
japhb: nice question
particle ibm's new artificial lobster is as fast as ten fast lobsters!
japhb particle, LOL 20:42
NotFound That remind me the joke: The new Cray can finish an infinite loop in less than minute.
japhb "Lower chance of losing skin to a random claw, but more chance that you won't be able to afford the electric bill."
whiteknight NQP is written in PIR for stage 0 bootstrapping
diakopter NotFound: but how fast can a minute finish it? 20:43
whiteknight there's no way it can just be written in itself all the way down
particle why on earth isn't nqp called turtle?
japhb NotFound, in my mind the coolest Crays will always be the immersively cooled ones
particle, Because turtle is a fun language all its own 20:44
(well, turtle graphics for logo, technically)
whiteknight, what, you mean like C?
Tene whiteknight: nqp-rx is written in nqp, and uses a precompiled version of itself to compile itself. 20:45
whiteknight japhb: yes, and C compilers have (or at least had) a bootstrapping stage at one point
Tene whiteknight: it used old NQP to start the bootstrapping, iirc.
whiteknight Tene: okay, then I was mistaken. I was under the impression that its stage 0 was written in PIR
NotFound whiteknight: maybe they just used a flux condenser.
Tene whiteknight: I could be wrong. :)
whiteknight It's really not that big a deal 20:46
moritz I know that PGE was involved; not sure about NQP
japhb whiteknight, the stage 0 is compiled NQP.
whiteknight okay. I was wrong then 20:47
20:59 bluescreen joined 21:04 theory joined 21:05 lucian joined
Coke pmichaud++ 21:05
pmichaud PGE and old NQP were used in the writing of nqp-rx, but they're no longer used 21:07
the "stage 0" is a precompiled version of nqp
there no longer exists a set of files that can get you directly from pge/nqp-rx to the current nqp, except for what's in the repository history. 21:08
sorry
pge/nqp to the current nqp-rx
21:12 davidfetter joined
Coke almost wants "svn up" to do "git pull" if I'm in a .git dir. :P 21:13
darbelo is pretty sure that can actually be done with a few clever aliases. 21:14
Coke I suspect I'd end up shooting mysefl in the foot with it. =-)
Tene Coke: write a script to do it. 21:15
Coke tene;yes, I could wrap 'svn' or create a new command. easier to just whinge once here and get over it. =-)
Tene svn() { [ -d .git ] && git pull || svn $@ } 21:16
might do it.
Coke pmichaud: $ by itself is a word. is there a way to tell <variable> to leave that alone?
pmichaud Coke: better is to recognize $ by itself
Coke ok. will add that to <word>
japhb Coke, Tene: Or go the old RCS route and make the usual second-level commands (commit, log, etc.) just be top-level scripts of their own. Instead of "git commit" or "svn commit" it's just "commit" 21:17
pmichaud is $ by itself a word only when it's standalone?
or can it occur in the midst of other characters?
japhb Or if you really want to namespace them, call the top level script 'vcs' or somesuch generic thing
Tene I never have problems getting confused between vcs programs, so wouldn't be much utility for me. 21:18
japhb Code from the "vcs mode" of most free editors ought to supply all the brains to be cover the set of common actions.
Coke pmichaud: in the midst of other characters, you'd probably try to parse it as variable interpolation.
japhb Tene, sorry. I'm in a bikeshed mood today. Sheesh. 21:19
Coke might work as a trailing char...
pmichaud Coke: I'm asking mainly about something like $+3
Tene japhb: :)
darbelo japhb: Opera Mauve!
Coke pmichaud: "+3" is a valid variable name. 21:20
japhb "Oh. So *that's* puce."
Coke also, asdfasdf$ seems to be reasonable.
darbelo Pontificia Universidad Catolica del Ecuador? What's that got to do with bikesheds? 21:21
;)
Coke pmichaud: ah, but $+7 is parsed as a literal and not interpreted.
pmichaud Coke: not according to the syntax it's not a valid variable
Coke % set +7 8 ; puts ${+7} 21:22
8
pmichaud it has to be letters, digits, underscores, or namespace separators
21:22 theory_ joined
pmichaud ${...} is different 21:22
Coke (that from an an 8.4 tcls)
pmichaud variable should learn to parse ${...}
Coke right, {} is special.
pmichaud we don't want to treat it as separate $ and {...} words
Coke my problem right ATM is that '$' all by itself is allowed. (just trying to get through tcl_misc.t) 21:23
pmichaud okay
Coke pushing...
purl i guess pushing is the answer
pmichaud but I suspect we want to add it to quoted_atom and bare_atom rather than a separate word
because it can be a part of a larger word 21:24
Coke once we can pass some tests, it'll be more obvious how to fix the edge cases, I think. 21:25
pmichaud oh, I think I have the answer
editing/pushing
ah, yes, it's pretty much what you did 21:26
Coke set a [] is legal.
pretty sure it's the same as ;; 21:27
pmichaud pushed. 21:28
21:28 payload joined
pmichaud I'm guessing that 21:29
token quoted_atom:sym<[ ]> { '[' ~ ']' <command> }
should be
token quoted_atom:sym<[ ]> { '[' ~ ']' <script> }
perhaps.
are semis allowed in the brackets?
Coke % puts [;;;;;;] 21:30
pmichaud aha
"To do this it invokes the Tcl interpreter recursively to process the characters following the open bracket as a Tcl script.
*script* is right :)
I'll let you make that change. Don't forget to update the Actions.pm file
(haev to go pick up daughter) 21:31
bbiab
Coke ... otherwise it'll blow up when you try to run a null command. =-)
21:35 payload joined
pmichaud (back) 21:39
Coke: I also think I've come up with a scheme to precompile (constant) proc definitions at compile-time. 21:40
Coke pmichaud: that would be spiffy, keeping in mind we need to allow non-compiling procs to explode only at runtime.
pmichaud: (I made a change from <command> to <script> and am now trying to find where the AST is going blam. 21:41
Method 'ast' not found for invocant of class 'Undef'
current instr.: 'parrot;PmTcl;Actions;bare_atom:sym<[ ]>' pc 10186 (src/gen/pmtc
l-actions.pir:650)
pmichaud did you also change 21:42
token quoted_atom:sym<[ ]> { '[' ~ ']' <command> }
?
and
token bare_atom:sym<[ ]> { '[' ~ ']' <command> }
oh, wait, I'm in wrong file
method quoted_atom:sym<[ ]>($/) { make $<command>.ast; } 21:43
method bare_atom:sym<[ ]>($/) { make $<command>.ast; }
those need to e changed also
*be
(in general each rule in the grammar has a corresponding method in the actions)
Coke ah, and that is exactly where the parrot backtrace was pointing, now that I read it right. 21:44
PerlJam pm: What's with the load_bytecode at the top of pmtcl's Grammar.pm? 21:45
pmichaud it's loading in the HLL compiler library
Coke how do you say defined() in nqprx?
pmichaud you shouldn't need to test for defined() 21:46
you should just be able to s/command/script/
Coke I'm getting an error that an Undef is being passed in, so I'm trying to check for definedness.
pmichaud the problem is that $<command> no longer exists, because we changed <command> to <script> in the rule
so now we need to look in $<script>
Coke ... OH
[headplant]
PerlJam pm: sure, but what does that mean? :) what requires HLL.pbc in that file? 21:47
pmichaud PerlJam: what line immediately follows the load_bytecode ?
PerlJam okay, then why doesn't Actions.pm also need such a line? 21:48
pmichaud because it was already loaded by Grammar.pm, which comes first. 21:49
we could put it in Actions.pm also, but it'd be redundant.
PerlJam okay, so you are relying on load order
pmichaud yes.
diakopter Coke: pir::isa__IPS($obj, 'Undef') 21:50
PerlJam or you could put it in PmTcl.pir, right?
pmichaud PerlJam: yes, I could do that
eventually I'm hoping to find a good way to eliminate the .pir file, though. 21:51
PerlJam make it all nqp?
pmichaud haven't decided if the answer is pir::include(...), or what.
yes, make it all nqp
(non-compiling procs explode at runtime) yeah, that part's a bit tricky I guess 21:54
dalek nxed: r181 | julian.notfound++ | trunk/examples/parser.winxed:
first step of register allocator in parser example
Coke pmichaud: set a [;] yields set("a", ) # BOOM. where do I want to make an empty word return "" instead of nothing? 21:55
pmichaud what should it yield?
oh, I see. 21:56
inside of method script($/)
we probably want
(typing)
nopaste "pmichaud" at 72.181.176.220 pasted "handle empty script (for Coke)" (8 lines) at nopaste.snit.ch/18778 21:57
pmichaud which puts commands into the Stmts node if there are any, otherwise it puts in a constant "" (which means the result of the stmts will be a constant "") 21:58
Coke pmichaud++
PerlJam pm: What happens if you just don't do the push? 22:00
pmichaud then the stmts node doesn't have a result, and you get what Coke mentioned above 22:01
"set"("a", ) # BOOM
PerlJam ah
pmichaud with the result, we'll get "set"("a", "") # no BOOM
Coke that gets us through everything up to the {*} syntax in tcl_misc.t 22:02
pmichaud nice 22:03
okay, let me look at {*} a bit
(scary to think that Perl 6 also has a {*} )
particle there are no new ideas.
Coke pushed
pmichaud: it's kind of a compile time eval. sort of. 22:04
www.tcl.tk/man/tcl8.5/TclCmd/Tcl.htm#M9 22:05
pmichaud yeah, that's what I'm reading now
Coke whee!
pmichaud okay, stepping through this one piece at a time... 22:06
PerlJam wonders what the consequences of lowering the barrier to creating compilers will be.
pmichaud if a word starts with {*}, then we remove the {*} and parse the rest
that part I get
the substitutions happen immediately? 22:07
so that {*}[eval 3+5] is the same thing as {8} ?
Coke s/eval/expr/, and yes.
pmichaud er, yes, expr
and having done the substitution, we re-parse that for words? 22:08
but we don't substitute it
so we just split it up into whitespace
NotFound PerlJam: You mean the new nqp, or parrot in general?
PerlJam NotFound: both really. Parrot could be the universal substrate, and NQP the build-a-language tool. 22:09
dalek nxed: r182 | julian.notfound++ | trunk/examples/parser.winxed:
add operator * to parser example, to see precedence working
pmichaud Coke: I can't seem to get it to work in tclsh.... I must not know what I'm doing. 22:10
Coke pmichaud: it's an 8.5 thing.
if you're using 8.4, it'll fail. 22:11
./tclsh \\n % echo $tcl_version
22:11 viklund joined
pmichaud ah, 8.4 on my laptop. I have 8.5 on my desktop - just a sec. 22:11
PerlJam If parrot were embedded into browsers, word processors, spreadsheets, databases, photoshop-like software, window managers, etc. and we could use NQP to target "any" language to it, even one of our own creation ... I think that would be awesome. 22:12
pmichaud oh wait, it's 8.4 there too :-(
I thought for sure I installed 8.5
Coke puts [llength [list {*}"There are four lights"] ]
pmichaud well, I need to upgrade kubuntu anyway... maybe I'll get the new tclsh then :)
Coke pmichaud: often "tclsh8.5" is an alias.
(even if primary tcl is 8.4) 22:13
pmichaud installing.
purl installing is one thing, using it is another. or in the 'famous last words' category
Coke heading out, back later.
NotFound PerlJam: I think the consequence can't only be one: lots of new languages, and new compilers for old languages. 22:14
PerlJam I'm not sure how I'd feel about the resurgence of old, presumed-dead languages.
NotFound PerlJam: old languages never die. 22:16
Even if you need a emulator to run them.
22:17 joeri left
darbelo fortran and lisp are both still alive. It doesn't get much more older than that ;) 22:20
NotFound darbelo: the depends if you count from birth or from losing most of his users. 22:22
With the second, fotran and lisp are still zero old. 22:23
darbelo I was counting from birth. FORTRAN is basically the first compiled 'High level' language. 22:24
22:26 Whiteknight joined
NotFound darbelo: yes, but I don't think a lot of recent fortran programs can be compilled with the first dialects. 22:27
pmichaud Coke: {*} is just ... weird.
NotFound Here you have a possible usage for poweful compiler writing tools: reconstructing old languages evolution. 22:29
PerlJam I talked with the owner of the skid-o-can company a couple of weeks ago. He has some software written in Clipper (that thing that came in between dBASE and FoxPro) that needed updating. I guess I should have sold him on writing a parrot based version that executes all the old code and can be extended with more modern libraries. :) 22:30
pmichaud that would seem eminently doable :)
NotFound You just need to link some library for dbase files.
PerlJam I don't really want to walk in Dan's footsteps even with more modern tools at my disposal 22:31
NotFound But take into account that lots of Clipper problems link parts written in C or assembler. 22:32
s/problems/programs
darbelo PerlJam: Wasn't there a open source clipper compiler written a few years back or so? 22:33
PerlJam Hmm. I wonder what the market is like there. (taking old software and making it viable into the future on newer hardware)
darbelo: dunno. I haven't used clipper in nigh on 20 years
pmichaud takes a short break
bbl
NotFound PerlJam: you may be surprised. I wrote some years ago a Basic interpreter '80 style, and there are people around the whole world using it. 22:34
(not a lot, of course)
PerlJam NotFound: not much surprises me any more :)
I wouldn't be surprised if I ran into a business still storing critical data on an 8" floppy disk. 22:35
NotFound But if for 'market' you mean money.... not much ;)
PerlJam NotFound: yeah, I think the reason these people are still using these antique systems is that they have no money to switch 22:36
The software does what they need; they're able to keep it running; why change?
NotFound PerlJam: I've heard about industrial machinery still working using a Sinclair Spectrum mainboard.
PerlJam (except the skid-o-can guy wanted to add google-maps style mapping to his app. He had a reason to change) 22:37
NotFound PerlJam: or just they learned that basic style in his day, and never programmed again. 22:38
I think I have somewhere a Linux Journal article about a guy that updated the systems of a supermarket by porting a foxpro application to a dbase clone on linux. 22:42
japhb NotFound, the leader of our local Perl Mongers owns a guitar factory, and he seems to specialize in using ancient machinery. He even has an industrial belt sander so old he couldn't find anyone who even knew how to forge the original style bearings for it.
Once of his metal cutting machines is controlled by a patched-in Commodore (Vic-20? C64? I forget), because the paper tape reader eventually wore completely out. 22:43
chromatic Nice guitars, too.
japhb HELL YEAH. 22:44
NotFound Paper tape reader? Sigh, I've never seen one working. 22:45
darbelo japhb: When speaking of guitars and related stuff, you have to say 'vintage'.
Tene darbelo: is it still "vintage" if he's manufacturing new guitars?
chromatic Why, are they made by vintners? 22:46
japhb alembic.stores.yahoo.net/guitinstocno.html
Tene Guitar *does* start with the same letter as "Grape"
NotFound A GUI for tar?
darbelo Tene: Of course! There's a lot of monewy in making new old guitars! 22:47
NotFound darbelo: Specially if the buyer doesn't know about the "new" part? ;) 22:48
22:48 szabgab joined
darbelo NotFound: Yeah, that too. But there's a lot of market for 'traditionally made' guitars. Sort of like the people who spend fortunes on old unreliable tube amps. 22:50
NotFound I like making bad jokes mixing guitarrero (guitar maker in spanish) and guitar-hero. 22:51
22:55 jan joined 22:56 nopaste joined 23:01 fperrad_ joined 23:06 PacoLinux joined, nopaste joined 23:15 lucian joined 23:16 Zak joined
kthakore chromatic: hi 23:21
purl salut, kthakore.
23:26 kid51 joined 23:40 cotto_work joined 23:51 cconstantine joined