Post closed tickets in your report. | Note: This channel is for our weekly status meetings (Tuesdays at 19:30 UTC); you probably want #parrot instead. | irclog: irclog.perlgeek.de/
Set by moderator on 10 April 2012.
00:30 wagle joined 02:51 japhb joined 06:00 contingencyplan joined 07:41 contingencyplan joined 08:17 lucian joined 08:54 lucian joined 11:02 kjs joined
kjs REPORT FOR KJS: 11:02
+ Started implementation of "M1", a subset of C, slightly extended with features handy for Parrot/M0 11:03
+ implementation can be found at: github.com/parrot/m1
+ Code generator not done. Some instructions (M0) seem missing, such as "<" or ">"; one of both is needed. goto_if can be used as a replacement for "==" I think but adding a "iseq" op would be handy. Also, function calls (goto_chunk) is not quite clear; parameter handling same. 11:04
+ Feedback would be most welcome; is this on the right track?
.EOR
12:03 bluescreen joined 12:31 kjs joined 13:07 bluescreen joined
Coke REPORT: $dayjob and teh sick ate all my tuits. coke/rm_pasm still idling. 13:44
15:23 contingencyplan joined 15:55 contingencyplan joined, bluescreen joined, japhb joined, wagle joined, alvis joined, PerlJam joined, Coke joined, eternaleye joined, sorear joined, Tene joined, wendar joined, cotto joined, jlaire joined, wagle_ joined, eternaleye joined 15:56 nine joined 16:02 eternaleye_ joined, allison joined, wagle joined 17:44 lucian joined 17:57 kjs joined 19:07 lucian joined 19:22 NotFound joined 19:44 brrt joined
brrt for the logs 19:47
REPORT: started working on the design of mod_parrot. 19:49
+ starting apache with a debug configuration 19:50
+ todo: link parrot to apache in a module
EOR
20:29 benabik joined 20:33 whiteknight joined
cotto hello 20:37
kjs hello
whiteknight hello
benabik hihi
cotto How's this week been, apart from everyone forgetting #ps at the right time? ;) 20:38
kjs the number of participants has gone down dramatically since i last joined.
cotto it varies based on who's free and awake, but it has been a bit sparse lately 20:39
kjs well, my report is posted, a few hours ago.
cotto kjs, I was glad to see your work on M1 20:40
kjs I've hacked together a compiler to emit M0 ops, and boy, it was gooood to do some hacking.
20:40 tadzik joined
kjs I'd like to have a quick chat about M0/M1, and the role of M0 and M1, if possible. 20:40
whiteknight yes, the compiler looks very nice
cotto kjs, sure
NotFound Nothing interesting to report from me. 20:41
cotto kjs, for the time being, the lack of a comparison operators is intentional. How much work would it be to implement those in terms of arithmetic ops?
one of M0's goals is a minimal op set (though not so minimal that it can't generate efficient code). 20:42
kjs cotto; well, i've thought about that. one could do something with sub etc. but you need to know which side of 0 you are.
but i'm not a math wizkid. perhaps there's certain mathematical axioms or whatever.
i seem to remember the minimum is 1 equality and 1 gt or lt operator 20:43
so, 2 to implement all 6: ==, !=, >= >, <, <=
cotto Don't look at M0 as a finished product. If you run into holes, we'll likely need to fill them in. 20:44
kjs but that's not the biggest issue :-)
cotto what is?
kjs what's more important is the role of M0/M1
NotFound If you have <= , == is a <= b and b <= a
kjs (not implying that my hacking result /is/ M1, but at least it's a prototype)
so, bascially, the Big Question is, IF C language had Parrot Calling Conventions, would M0 still be necessary? 20:45
cotto no
kjs right.
so basically you'd like to do implement parrot in a language that HAS the parrot calling conventions
cotto M1 is needed because of the mismatch between C and PCC.
kjs right. so you want to do away completely with C, wherever there's intereaction possible between parrot assembly and parrot's implementation language 20:46
cotto not completely, but largely
kjs that means that certain parts can stay in C, as long as there's no interaction (data and control)
cotto right 20:47
kjs so, this means that large chunks of Parrot will be implemented in M0
assuming for this sentence there is no M1 or higher language
cotto right, but we'll need M1 because it'd be insane to implement much of Parrot in m0
kjs indeed
so enter M1. 20:48
will M1 have the parrot calling conventions then?
have=support
cotto I think the answer is "yes".
kjs ok, so these can be either implemented at the M0 level, or by the M1 compiler 20:49
but there needs to be some essential basic support at the M0 level
with continuations at that level
cotto yes. In M0, call frames are equivalent (roughly) to continuations. 20:50
kjs ok.
ok so bascially, at M1 level, we could define fancy syntax for named parameters, optional parameters, etc. all the fancy stuff that PIR has
since these are part of the PCC right?
cotto yes
kjs cool. ok clear.
next question :-) 20:51
i've done some browsing of the parrot source
and from a distance, it's all a bunch of moving around data :-)
with very diffficult code, really
most function just move around stuff, copy data, etc.
i suppose that's what any program does
anyway, to make a long story short:
Parrot's code is written in C with all sorts of fancy stuff that is invented by parrot developers 20:52
for instance, VTABLE_blabla()
these are macros I believe
(right?)
whiteknight yes
kjs and a lot of other infrastructure that is built to implement many of parrot's fancy features.
cotto magic macros that get post-processed by perl, but mostly yes
whiteknight include/parrot/vtable.h, I think 20:53
kjs right.
well, since we're /defining/ M1 language, we might as well make it easy for ourselves
by building supporting syntax for this
so no more preprocessor stuff
but just plain built-in M1 code.
*code/syntax 20:54
as an implication:
I assume PMCs will be written in M1 as well
whiteknight yes
kjs PMCs are bascially C++ -styel classes, really (prob some diffs here and there)
in that they support inheritance
and methods
why not add syntactic support for that? 20:55
have a keyword "method"
and also "vtable" (or "virtual" to please C++ heads)
to make it clear which methods are virtual/vtable
and which are not
bascially, implement your own OO system on top of M0
with a vtable and all. shouldn't be /that/ difficult.
whiteknight depends what we want out object model to look like at the time 20:56
the way PMCs are now is not the way they will always be
though, that's an issue of code generation, not M1 parsing
kjs whiteknight: not sure if this is what you're saying but the OO model of M1 need not be the same as Parrot's object model
whiteknight okay, yes
kjs though it /would/ be nice in a way, i suppose 20:57
(so this would also imply keywords such as "extends" and perhaps "implements" or whatever)
cotto one thing to be aware of is that post-M0 PMCs will be built on 6model
kjs (as well as syntax as: foo.bar(), where foo is a PMC instance and bar a method on that)
what do you mean by post-M0 PMCs, cotto? 20:58
cotto PMCs in Parrot after we've completely moved to things that compile down to M0
kjs eh, so PMCs written in M0/M1? 20:59
cotto yes
kjs ok, well so either 6model needs to be supported at the M0 level, or M0 needs to be sufficiently functional that 6model can be implemented on top of M0
cotto M0 needs to be able to support a 6model implementation 21:00
kjs right. that's what i tried to say in my ill-worded statement :-)
even ill-worded is ill-worded. I meant ill-phrased.
ok. well so far everything sounds good to me. makes sense. 21:01
another more bigger issue:
if parrot is ipmlemented in M1/M0
then it's no longer C
will that be a problem to attract developers?
one of the original reasons behind the choice for C is developer pool
(dan sugalski wrote this many years ago)
cotto If M1 is sufficiently C-like, it shouldn't be too big of a barrier to entry. 21:02
kjs ok. one idea i had for M1, is to "fix" the issues that C has
NotFound I think that at the time the choice was "not C++" 21:03
kjs including, also, if you want to push it a bit farther, to do away with the perl scripts that check your source code formatting, because the M1 compiler already requires it!
NotFound: I believe not C++ because of portability, and C is "the best we have"
ok, well, i just want to mention this point, because at this moment, M1 is "yet another C-like language". 21:04
NotFound kjs: no, "not C++" because of developer pool.
kjs NotFound: ah ok. it's been a while :-) 21:05
cotto I'd rather not force stylistic choices at the compiler level.
kjs cotto: could be warnings but ok. not v important at this point, just an idea.
cotto it's worth exploring
kjs anyway, to build-in the design of M1 the abuse of the language
eh, to prevent that.
cotto I'm fine with "easy to use correctly" 21:06
and "hard to misuse"
kjs right.
ok. so there's another isue with this approach: we don't know if it will work well :-)
it might not be faster. 21:07
basically, it will be an interpreter on top of an interpreter.
whiteknight it might not
This whole experiment is going to depend heavily on having a high-quality JIT in place
kjs ok. 21:08
so antoher implication of this architecture will be that all extensions that interact with control and data need to be implemented using M1 21:09
so only the C parts could be extended using C, effectively.
ok, well i'm just stating some observations at this point. My time will at some point be more limited, but it's great to do some hacking on M1 now. The answers above confirm that some of my ideas could be useful and work. 21:11
I have a few more questions: I'm not really clear on function calling and parameter passing at this stage (how that's done in M0). (2) do exceptions (throwing, catchgin) exist at the M0 level?
cotto calling conventions for M0 need to be defined, so it's not surprising that you're unclear on them. 21:13
there are some basic ideas on exceptions in the m0 spec, but nothing that's been thoroughly fleshed out
kjs yes, one of the ideas is that M0 instructions are easy to jit. but PCC are quite complex; if there's insturction support at the M0 level (similar to PIR level) then those M0 instructions are unlikely to be easy to JIT. 21:14
cotto: ok, i'll ignore those bits then at the moment.
whiteknight PCC is going to have to become much less complex
at the lowest levels it could have far fewer features
kjs so, no named parameters 21:15
which i think are quite expensive
with hashtables and all
and slurpy etc. i think too
whiteknight yes
kjs one thing i noticed, maybe wrongly, is that the M0 virtual machine looks a bit like parrot in the beginning, as defined by Dan 21:16
cotto interesting
whiteknight I'm not aware of designs that old 21:17
kjs not sure if i'm correct, but i was reminded of it.
not sure if those designs can be traced back online
cotto dan's old blog was still online last I checked. I should skim through it.
kjs ok, well i have 1 final thing that makes life slightly hard on me at the moment.
and that is that the assembler perl script doesnt' work here for some reason 21:18
lemme see what the error message is (just a min.)
cotto metadata perhaps?
that's definitely an area that's nyi
either nyi or broken, iirc 21:19
kjs what's nyi? 21:20
pastebin?
what's the command to get the pastebin link again?
cotto not yet implemented
kjs oh right
well the short verison is: can't locate autodie 21:21
see parrot channel for link to paste
cotto that's more of a #parrot question. Let's continue it there. 21:22
kjs ok. i've got most answers I wanted. thanks.
cotto excellent 21:23
and thanks for the work so far
kjs it's my pleasure :-)
cotto any other questions before we wrap up?
whiteknight just an announcement 21:24
I've posted some of my ideas for revamping the IO subsystem in the wiki (github.com/parrot/parrot/wiki/Task...Subsystem) and in the whiteknight/io_cleanup1 branch
I'm probably going to start on that project soon, feedback would be appreciated
cotto also, we're officially in GSoC season as of yesterday
whiteknight yes, that started on monday
NotFound whiteknight: moving stringfication to the buffering layer may also simplify things. 21:26
whiteknight Notfound: yes, I plan on doing that. Also, transcoding and other string-related issues 21:27
So all IO transactions will move through a buffer, though most buffers won't store any data
or, something like that
NotFound whiteknight: yes, in the non-buffering case doing only the conversions. 21:28
cotto I'll read through that page in detail later today. I somehow missed it until just now. 21:29
whiteknight cotto: it was poorly named until a week ago or so 21:30
I added the four bullet points at the top, which are pretty broad. Everything else was there already (and some of it will be tackled en passant in my refactor) 21:31
Some to-do items which would have been very hard in the old system seem conceptually very easy in the new design
I am already starting to plan out a second-round refactor, which will make using custom IO PMCs and other IO mechanisms much easier for the user 21:33
brrt has already been asking for output vectors that are completely unsupported by our system (calling a C-level function with all output requests instead of a PIOHANDLE, etc) 21:34
anyway, I have to run catch a train. I'll be on later tonight 21:36
cotto It's good to know some of the motivation behind the changes.
any other questions before we call it a wrap?
let's call it a wrap. 21:39
21:41 NotFound left 21:43 tadzik left 22:37 lucian joined 23:15 lucian joined