Parrot 4.4.0 "Banana Fanna Fo Ferret" | parrot.org | Log: irclog.perlgeek.de/parrot | #parrotsketch meeting Tuesday 19:30 UTC
Set by moderator on 15 May 2012.
01:14 nbrown joined
dalek rrot/whiteknight/io_cleanup1: c729b29 | Whiteknight++ | / (8 files):
A random assortment of build fixes.
01:29
02:28 alvis left 02:31 perlite_ joined 03:17 simcop2387 joined 03:58 diginet joined
diginet hello, umm, sorry for the perhaps obvious question, but I'm working on a toy compiler, and I'm kind of confused about creating the PAST, as I haven't been able to find any comprehensive documentation on it, could someone point me in the right direction? 03:59
benabik diginet: The "comprehensive" documentation is parrot.github.com/html/docs/pdds/pd...t.pod.html 04:02
diginet: The introductory type documentation is parrot.github.com/html/pct_tutorial.html or github.com/benabik/cish
diginet okay, gotcha 04:03
benabik We're also very open to questions here. :-)
diginet thanks, Parrot is so awesome, I'm so glad I (re)discovered it
Parrot itself is an awesome piece of software, one of the cleanest designs Ive seen, but the community is so great as well :) 04:04
benabik diginet++ # wonderful optimism
diginet I guess it just amazes me that you guys can put something together that is infinitely more intutive than the CLR or JVM, and is only 8mb 04:05
(that is, for implementing languages on) 04:06
benabik It's extremely lovely. Just wish we could streamline and speed it up. But we're working on that. :-)
diginet perhaps I should be careful saying this, but the fact that it's written in C and not C++ is a huge bonus for me 04:07
benabik Well, our C code is a bit of a sticking point... But mostly that it's clumsy to interact carefully with the VM. 04:08
C++ is nice, but it's also easy to really screw yourself with it. 04:09
04:34 contingencyplan joined, japhb joined, dadada joined, atrodo joined, tadzik joined, dalek joined, awwaiid joined, ttbot joined, jlaire joined, Infinoid joined 04:45 contingencyplan joined, japhb joined, dadada joined, atrodo joined, tadzik joined, dalek joined, awwaiid joined, ttbot joined, jlaire joined, Infinoid joined 04:46 alvis joined 04:54 perlite joined, nbrown joined, Patterner joined, mtk joined, nopaste joined, PerlJam joined 04:58 perlite joined, nbrown joined, Patterner joined, mtk joined, nopaste joined, PerlJam joined 05:08 PerlJam joined, nopaste joined, mtk joined, Patterner joined, nbrown joined, perlite joined, alvis joined, Infinoid joined, jlaire joined, ttbot joined, awwaiid joined, dalek joined, tadzik joined, atrodo joined, dadada joined, japhb joined, contingencyplan joined, diginet joined, kurahaupo joined, pjcj joined, Hunger joined, eternaleye joined, schm00ster joined, particle1 joined, brambles joined, preflex joined, elmex joined, GeJ joined, autark joined, jtpalmer joined, Util joined, Maddingue joined, sri joined, jevin joined, Timbus joined, wagle joined, janus joined, TonyC joined, szbalint joined, NotFound joined, Woodi joined, pmichaud joined, Coke joined, p6eval joined, sorear joined, smash joined, Tene joined, arnsholt joined, rblackwe joined, Kovensky joined, knewt joined, cxreg joined 05:10 PerlJam joined, nopaste joined, mtk joined, Patterner joined, nbrown joined, perlite joined, alvis joined, Infinoid joined, jlaire joined, ttbot joined, awwaiid joined, dalek joined, tadzik joined, atrodo joined, dadada joined, japhb joined, contingencyplan joined, diginet joined, kurahaupo joined, pjcj joined, Hunger joined, eternaleye joined, schm00ster joined, particle1 joined, brambles joined, preflex joined, elmex joined, GeJ joined, autark joined, jtpalmer joined, Util joined, Maddingue joined, sri joined, jevin joined, Timbus joined, wagle joined, janus joined, TonyC joined, szbalint joined, NotFound joined, Woodi joined, pmichaud joined, Coke joined, p6eval joined, cxreg joined, knewt joined, Kovensky joined, rblackwe joined, arnsholt joined, Tene joined, smash joined, sorear joined 05:12 pjcj joined, Hunger joined, schm00ster joined, particle1 joined, brambles joined, preflex joined, elmex joined, GeJ joined, autark joined, Maddingue joined, sri joined, jevin joined, Timbus joined, wagle joined, TonyC joined, p6eval joined, cxreg joined, knewt joined, Kovensky joined, rblackwe joined 05:16 perlite joined, nbrown joined, Patterner joined, mtk joined, nopaste joined, PerlJam joined 05:19 contingencyplan joined, japhb joined, dadada joined, atrodo joined, tadzik joined, dalek joined, awwaiid joined, ttbot joined, jlaire joined, Infinoid joined 05:20 perlite joined, nbrown joined, Patterner joined, mtk joined, nopaste joined, PerlJam joined 05:50 woosley joined
diginet Hi. I've been following the tutorial on Squaak, and while I get the general idea behind how the PCTs work, I'm completely lost 06:48
basically, I'm confused, in the grammars, which symbols are arbitrary labels, and which have any defined semantic value 06:49
like, for instance, at the beginning of the Squaak grammar, it says
program ::= {stat-or-def}
stat-or-def ::= statement
| sub-definition
but how does the PCT know what "statement" or "sub-definition" means? aren't those just as meaningless to the computer as "program" 06:50
I've probably read every page 10 times, and it just seems like the semantics aren't rigorously defined, it's so unclear what are keywords and what are just labels 06:56
06:57 brrt joined
sorear diginet: that would appear to be an EBNF grammar intended for human consumption. 07:02
diginet: PCT grammars look completely different, iirc
diginet: by 'PCT' do you mean 'PGE (Parrot Grammar Engine)' or 'NQP (Not Quite Perl6)' ? 07:03
NQP grammars look like "rule program { <stat-or-def> * } 07:04
"
I don't remember PGE syntax, nearly (or all?) everyone has moved on to NQP
there's an NQP update of the Squaak tutorial floating around somewhere, maybe on tylercurtis' github acct 07:05
moritz I think diginet is referring to en.wikibooks.org/wiki/Parrot_Virtua...ak_Grammar
which looks vaguely like BNF
sorear yeah, that's EBNF
moritz and en.wikibooks.org/wiki/Parrot_Virtua...started.21 shows the correponding PCT grammar 07:06
sorear the machine readable grammar is below
07:24 lucian joined
diginet sorry. was afk 07:30
I meant NQP, and yeah it does sort of look vaguely BNF, but it's just still so confusing, I also haven't been able to find any intro to NQP for people with no prior knowledge of perl 07:31
07:36 crab2313 joined
moritz fwiw www.perlcabal.org/syn/S05.html is the specification of Perl 6 regexes and grammars, of which NQP implements a subset 07:37
perl6advent.wordpress.com/2009/12/2...d-actions/ has a gentler introduction 07:38
diginet I wish Parrot had a prolog implementation, I could probably write a compiler with that
moritz it probably has several, all of which are incomplete and bitrotten :( 07:39
diginet hmm
imo, a minimal implementation of prolog would be /perfect/ for compiler construction
dalek kudo/nom: e42d841 | moritz++ | src/core/List.pm:
enable autovivifcation in the sub form of push

fixes RT #77038
07:41
diginet to me, an ideal systems world work like so: source code --> Prolog:[EBNF Grammar] --> s-exp based syntax tree format --> s-exp parser --> PAST 07:47
s-exps are ridiculously easy to parse, but by having a standard, textual format that correspons to PAST, one can use any system to transform the source to the PAST 07:48
sorear diginet: nqp's parsing kernel is LL(k), it works a lot like prolog 07:53
diginet what is LL(k)?
sorear no unification, but backtracking is handled in essentially the same way
diginet ah, okay 07:54
sorear LL(k)? hmm. Recursive descent with lookahead?
Left-to-right, Leftmost-derivation
diginet gotcha
sorear does not grok the expansion of the acronym (either?)
at various times people have tried to write a yacc-like (LALR) parser generator for parrot 07:55
diginet I
sorear I am not sure any of them succeeded.
diginet I've never used yacc, doesn't it require knowledge of C++? 07:56
or am I thinking of something else?
sorear you're thinking of something else. 07:57
yacc predates C++.
diginet ah, maybe I'm thinking of flex?
sorear yacc per se is a tool which generates C code, so it's mostly useful with C programs
ditto lex 07:58
however 'lex and yacc' refers to a family of program clones that exist for almost every popular environment
diginet yeah
sorear like happy for haskell
when I say 'yacc', I am referring to all yacc clones, including bison 07:59
nonterminal := 'a' 'b' 'c' { CODE IN YOUR FAVORITE LANGUAGE GOES HERE }
absolutely nothing about this is specific to C.
*absolutely nothing*
NQP syntax is pretty similar, but the underlying parser technology is completely different 08:00
PGE doesn't allow you to include code in grammars, so it's language agnostic by default ;)
(this is an age thing: PGE was created before Parrot had *any* high-level languages.) 08:01
diginet so, if I understand correctly, the compiler works essentially like this: it scans the source for certain symbols, and then converts them to tokens, then rules are specified which describe how to map the tokens to the PAST?
moritz perl.plover.com/py/ is a nice hack :-)
sorear diginet: your last post means nothing, it has too many unbound variables :-) 08:02
diginet haha, sorry, let me try and be less vague
sorear I haven't used prolog in an even longer age than the age that I haven't used PGE in
moritz diginet: well, roughly. There is a parser, and the 'actions' convert the parse tree to PAST
or rather, build a second tree along the parse tree 08:03
sorear but regex quux { <foo> <bar> || <baz> } --> quux(a,a') :- foo(a,a'), bar(a',a''). quux(a,a') :- baz(a,a').
I suppose prolog has an expression-level OR operator that works in the obvious way 08:04
code in braces translates in the obvious way into the prolog model, including the potential of being run multiple times with backtracking
diginet Prolog is basically predicate logic with some impurities 08:05
(but you probably knew that)
sorear about five years ago I put together a toy (200 lines) prolog in Haskell while trying to understand the Hindley-Milner type inference algorithm 08:09
that's the extent of my Prolog knowledge. I've never actually tried to write anything in it ;)
diginet well, writing a prolog implementation is nothing to scoff at :P
Prolog DCGs (definite clause grammars) are really easy to write/work with 08:13
sorear googles DCGs 08:18
08:18 lucian joined
sorear they appear to be isomorphic to perl6-style grammars. 08:18
examples on request. 08:19
dalek rrot: ca755b6 | fperrad++ | tools/dev/mk_inno_language.pl:
[win32/inno] follow nqp/rakudo
08:24
08:24 woosley left
dalek kudo/nom: 306fcd8 | moritz++ | src/core/List.pm:
port autovivification fix to &unshift, JimmyZ++
09:19
kudo/nom: 61e6739 | moritz++ | docs/ChangeLog:
update ChangeLog
kudo/nom: 92a95c7 | moritz++ | t (2 files):
bump NQP revision, and run proto token LTM tests by diakopter++
09:51
10:31 JimmyZ joined 11:27 kjs joined
JimmyZ it's hard to get llvm working on ubuntu 12.04 11:50
dalek : 28d9c79 | (kj, kjs)++ | m1 (4 files):
remove unop_minus; handle x = -x as binexpr with mult by -1.
11:55
kudo/nom: e2d8762 | moritz++ | src/ (2 files):
typed exception for infix in term position
12:06
12:12 whiteknight joined
whiteknight good morning, #parrot 12:13
kjs morning whiteknight
brrt good part-of-the-day 12:15
12:17 JimmyZ joined
whiteknight hello kjs, brrt. How are you two doing? 12:23
kjs very well, thank you. how are you?
whiteknight doing well. Back to work today after the long weekend, and I'm not happy about that 12:27
kjs work means less parrot hacking?
whiteknight yes, unfortunately 12:30
Although my queue doesn't currently have many tasks in it, so I might be able to clock out later and surf around 12:31
brrt i'm doing very well, too :-) 12:33
i'm not sure if you saw it, but i'm near to getting cgi-style mod_parrot working
admittedly in a fairly lousy state, but i'm happy about the progress anywa 12:34
whiteknight brrt: that's good!
brrt thanks :-) 12:35
whiteknight brrt: 1) Get something working. 2) Add tests to prove it keeps working. 3) Make it better, faster and add more features
brrt yes, thats what i'm thinking, too :-)
its just, that steps 2 and 3 look much larger now i'm getting near
but its exciting, really 12:36
anyway, i'll try to make #parrotsketch today 12:37
Coke brrt++ 12:43
12:50 PacoAir joined
whiteknight awesome 13:02
I think the rest of us will try to make it too
13:03 bluescreen joined 13:07 Psyche^ joined
Coke I won't even bother to try! ;) 13:09
13:30 kjs joined 14:19 isBEKaml joined
isBEKaml hello, #parrot! 14:22
whiteknight hello isBEKaml 14:23
isBEKaml hello, whiteknight. What would be a good way to proceed on #276? 14:25
whiteknight I'm going to have to look at it. Give me a few minutes
isBEKaml whiteknight: ok. I won't be surprised if it's a difficult bug to track down. :) 14:26
whiteknight oh, the thawed Sub one? That's a big ticket 14:29
NotFound isBEKaml: the good way to proceed is to redesign the pbc format from scratch ;) 14:30
isBEKaml NotFound: That's what I thought at first! :D
whiteknight The pbc format is not bad, actually. I think this is mostly an object model issue
moritz 6model! 6model!
isBEKaml NotFound: Well, not exactly. But that the reconstruction from string to PBC is somewhat broken somewhere.
whiteknight moritz: I'm sure that's a big part of it
NotFound It works when it works and fails when not, mostly. 14:31
whiteknight: I'm ruminating an idea for the function parameter siganture: ( : ClassName varname, ... 14:32
isBEKaml Yeah, I wasn't sure where I should go looking for it - I've been on and off at it. Didn't look at it fully. 14:33
gist.github.com/2828768 # this is what I have had so far. 14:34
whiteknight NotFound: I'm not sure what you mean. An example?
14:34 dmalcolm joined
isBEKaml this is where I poke-guessed that the reconstruction was b0rked somewhere. 14:35
NotFound whiteknight: Instead ov (var varname and putting ClassName in the multi modifier.
The : prefix makes the parsing unambiguous. 14:36
whiteknight okay
isBEKaml admittedly, I was groping in the dark.
NotFound whiteknight: and also using similar syntax as sugar for declaration and new: " : ClassName object(arguments); " meaning "var object = new ClassName(arguments); " 14:38
whiteknight NotFound: seems good to me
benabik ~~ 14:39
whiteknight hello benabik
isBEKaml hi, benabik 14:40
benabik o/ whiteknight isBEKaml
NotFound Maybe some day it can allow some kind of type safety, but just as sugar looks helpful.
I tend to avoid sugar (in syntax), but new is the most boring invention in the C++/java/javascript world. 14:42
isBEKaml whiteknight,NotFound: I don't mean to sound naive - but what's blocking us from getting this out of the way? I understand our object model is lacking here.... 14:46
whiteknight isBEKaml: what are you talking about, #276?
isBEKaml whiteknight: yes, unless you were talking about something else.
whiteknight isBEKaml: I'm not sure, I haven't had time to really look into that failure yet 14:47
NotFound isBEKaml: I don't know what problem that tickect is trying to solve.
isBEKaml NotFound: sorry, I don't mean to be a pedant - tickets don't "solve" problems, they "report" problems. :P 14:48
NotFound isBEKaml: not being able to do something when I don't know if something should be doable is a maybe-problem for me. 14:49
isBEKaml whiteknight: my gist I posted above is what I have so far at guesstimating.
whiteknight okay, I'll try running that tonight and see what I can find
isBEKaml NotFound: fair enough.
NotFound isBEKaml: by the way, is that example you are using the pir compreg in the deprecated way. 14:50
isBEKaml NotFound: I took that out of the ticket, really. 14:51
NotFound: what is the current way of doing things?
whiteknight I don't think that matters in any case
NotFound isBEKaml: pirC.'compile'(code)
And for extra points, write that kind of tests in winxed better than pir ;) 14:53
isBEKaml NotFound: I don't understand. You mean, pir's deprecated? 14:55
moritz no
Coke "sort of" 14:56
moritz there's just some anti-PIR-sentiment in here
but in the case of tests/bug reports I like it, because it shows clearly what's going on
kjs don't you know that M0 is the new way to go :-)
moritz which opcodes are called
NotFound Is just usually more clear to use winxed as a sort of pre-processor for PIR. 14:57
isBEKaml Guys, guys - stick to one thing and ONE thing only! ;)
benabik PIR is just fine for bug reports. Winxed is generally considered the better way to be productive. 14:58
NotFound isBEKaml: that's the point. With winxed you focus in the real problem, no in the PIR mood.
benabik PIR is sticking around for at least a while. The old way of calling the PIR compiler is depreciated though. 14:59
`$P0 = compreg 'PIR' ; $P0(code)` is the old way, `$P0 = compreg 'PIR' ; $P0.'compile'(code)` is the new. 15:00
NotFound benabik: and assembler is sticking around, but we usually tell the C compiler to generate it ;) 15:01
isBEKaml I don't understand how winxed would make me more productive in isolating bugs. Is it a frontend/backend to the compiler/generator ?
NotFound isBEKaml: it makes the communication easier. Sometimes you can write one line of winxed instead of two dozen pir lines. 15:03
And you can take a quick look at the generated PIR to be sure it does what you intend. 15:04
isBEKaml NotFound: Yes, I found that part. Now, where are the examples?
NotFound: it's c-like code? frontend/parrot2/prt0.winxed 15:06
NotFound isBEKaml: C-C++-javascript-java-C# alike 15:08
nopaste "NotFound" at 213.96.228.50 pasted "Translation of the start of gist 2828768" (13 lines) at nopaste.snit.ch/142689 15:09
NotFound isBEKaml: here is an example
whiteknight Having to translate the example code from PIR to something else, or talking about language choice at all doesn't help resolve this ticket 15:11
it's unnecessarily confusing
isBEKaml okay - now I know about winxed, helps in triaging. :) 15:12
NotFound whiteknight: right, but I've seen these days examples with loops writtn in spaghetti PIR and I feel the need if some evangelizing ;)
isBEKaml whiteknight++ # I'm basically looking for a way to get into this. 15:13
brrt winxed is a pretty simple language that looks like javascript but is so incredibly parrot-y in implemenetation 15:15
NotFound brrt: Yeah, and for short snippets you don't need to learn much of it.
brrt .. i'd argue that if you know javascript and a bit of how parrot works that learning winxed is a no-op 15:16
NotFound Reminds me the "heroic age" of the ms-dos, when people wrote demos with the hard parts in turbo pascal inline assembly and the boring parts in pascal. 15:17
15:21 Justin joined
whiteknight isBEKaml: yeah, like I said. I'll take a look at this ticket tonight and see if I can come up with anything for you 15:49
I don't know how Sub PMCs are supposed to serialize/deserialize, there's a real chance it's not sane from the bottom up
isBEKaml whiteknight: okay, great. I'll be out now, you can leave a msg if you found anything (or I'll look them up in backlogs) 15:58
whiteknight isBEKaml: sure thing! 15:59
isBEKaml *out
whiteknight: thanks!
16:02 brrt left
dalek : 8e2f787 | (kj, kjs)++ | m1 (5 files):
reorganize data structure for lhsobject for easier code generation. use recursion to traverse the tree depth first. work in progress
16:04
Coke NotFound: the purpose of 276 was that I couldn't save the results of my work. I had to re-run potentially slow code every invocation of parrot. 16:21
I have no need for that particular function right now, but it's still a bug that needs fixing eventually. 16:22
there are plenty of other tcl blocks in the bug queue I'd rather folks hacked on 16:24
github.com/parrot/parrot/issues/448 being the biggest one. 16:28
:( 16:32
whiteknight Added to my list. I'll try looking at it again 16:33
Coke testing to make sure it didn't get magically fixed in the last 7 months. 16:34
whiteknight I wouldn't hold your breath
benabik holds his breath
Coke partcl.com/ - hey, that's new.
whiteknight: given that this bug report is 18 months old and shows zero signs of progress, trust me, I'm not.
benabik Although that had more to do with a cat trying to sit on my face. 16:35
Coke (10 dec 2010)
ayup, no change. 16:40
hurm. partcl updates not getting published here.
aloha, dalek? 16:41
aloha Coke: dalek is run by sorear.
Coke aloha, dalek hook?
aloha Coke: Search me, bub.
benabik Dalek's URL changed.
moritz aloha: dalek hook is described at github.com/perl6/mu/blob/master/mi...k-push.txt 16:42
aloha moritz: Okay.
dalek rtcl-nqp: 81c9c19 | coke++ | src/Partcl/commands/info.pm:
track changes to parrot opcodes
Coke ... I didn't do that.
also directions say Select "Post-Receive URLs", which doesn't exist. 16:43
perhaps "WebHook URLs" ? 16:44
moritz yes, github renamed it
benabik Seems right
Coke which I have none of. weird. wonder where that dalek message came from.
moritz from the old pull config 16:45
which is why it also took some time
Coke: if you add the push URL, I remove partcl-nqp from the pull config
Coke magnet == perl.org ? 16:46
moritz yes
16:47 contingencyplan joined
Coke moritz: done. added partcl & partcl-nqp 16:47
moritz++ sorear++
dalek : b3e4edd | (kj, kjs)++ | m1 (2 files):
more work on x.y and x[y].
rrot/m0: 3953c26 | (kj, kjs)++ | CREDITS:
remove "kj" for kjs so as not to miss out on karma.
17:28
benabik kjs: I think dalek only pays attention to the CREDITS file in master. 17:33
kjs ugh. yeah you're right i think.
thanks.
dalek rrot: 5038881 | kjs++ | CREDITS:
remove "kj" in credits file so as not to miss out on karma.
17:35
kjs yay :-)
benabik kjs++
17:43 brrt joined
dalek kudo/nom: 9ef8010 | jnthn++ | src/Perl6/ (3 files):
pir:: -> nqp:: for a bunch more stuff in the compiler.
18:17
: a53d4e2 | kjs++ | m1_gencode.c:
fix implementation if isgt and isge.
18:20
: 062125e | kjs++ | TODO.txt:
update TODO.
: 3432ea6 | kjs++ | TODO.txt:
update TODO
18:21
: 50d399b | kjs++ | m1_gencode.c:
woops. forgot to close multiline comment.
18:23
p: 14b6fca | jnthn++ | src/PAST/NQP.pir:
Add nqp::can.
18:32
kudo/nom: 223419d | jnthn++ | / (15 files):
pir::can => nqp::can
18:48
19:03 Justin joined
dalek : 22819b9 | kjs++ | m1 (5 files):
implement casting from floats to ints and vice versa. prob needs some fixing later.
19:05
19:28 brrt joined
cotto #ps in 0 19:30
19:38 kjs joined
kjs is #ps on now? 19:39
brrt yes 19:40
dalek kudo/nom: 3b15966 | jnthn++ | src/ops/perl6.ops:
Fix SEGV that arose from a return in a gather.
kjs it's fairly quiet there. 19:41
cotto quite 19:42
19:43 brrt joined
kjs cotto: from my understanding, M0 regs are typeless; that is, they're just 8 bytes of bits and it's up to the compiler to give a meaning to them 19:43
cotto kjs, exactly 19:44
kjs but if that is true, then I don't see the advantage of having type identifiers, (I, N S, P)
it's rather misleading to a certain extent. it's promising something that isn't there.
what was the rationale for that?
cotto they're for convention
kjs how does it help? 19:45
cotto it helps humans
benabik And I'd argue we at least need P vs NP for our registers. 19:46
kjs ok. fair enough. but i thought that M0 wasn't meant for humans...
cotto no, but for now humans are writing most of it
Coke I fail to see how this is a good thing. 19:47
benabik Hm. And if M0 is supposed to help JIT, then we're shooting ourselves in the foot by not distinguishing I vs N. 19:48
Coke (doing something which is for convention only to help us short term.)
kjs in my opinion, I think once there is a working, tested and proven-correct (as far as possible) compiler that emits M0, those "types" could go. It complicates code generation, makes "false" promises, and is also not optimal for chunks, in that you may run out of I regs but not out of P regs.
19:49 not_gerd joined
not_gerd jumps into the discussion 19:50
benabik: did you mean IN vs SP?
kjs benabik: I don't know if a JIT needs typed registers. For this, and other reasons it would be good to start on a JIT soon-ish.
benabik not_gerd: I mean PMC vs non-PMC
atrodo a JIT would benefit a lot with typed registers
kjs well, PMCs are just pointers right? 19:51
benabik Most processors have very distinct operations for integers and floats.
And the GC needs to distinguish between integers and pointers.
kjs operations yes, but do they operate on different registers?
benabik IIRC, yes.
kjs benabik: at the moment you can store doubles in I registers, for instance. you can store everythign in everything.
atrodo on x86, FP is much different then integers
kjs the letters don't force anything. it's just convention, but some tests even use P regs for integers 19:52
and S regs for ints
benabik kjs: Yes. And I'd argue that's an error.
not_gerd benabik: for what it's worth, you can still precisely walk registers without explicit m0 support
benabik not_gerd: Pardon? If you can't tell an integer from a pointer, how do you walk precisely?
not_gerd just use a specialiced register which stores either a count (first X registers contains PMCs) or a pointer to a bitmap
benabik Sure. 19:53
That just makes the devision between P and I changeable. But there is a distinction.
Oh, wow. Yes. x86 uses a stack for floating point. 19:54
atrodo If i remember correct, it's a weird "stack" as well
benabik seems likely.
kjs does anyone know whether a JIT (e.g. using LLVM or libjit) would need to know whether registers are int or float regs? 20:01
cotto I don 20:02
't know how it wouldn't
kjs eh. does that mean it does?
to be clear: a JIT would have to know?
not_gerd depends - typed registers can help performance because floats can be stored in fp registers
cotto You can't add two things if you don't know whether they're floats or ints
not_gerd it's not absolutely necessary, though 20:03
kjs ok well if they are needed, then M0 would need the types
not_gerd cotto: that's why we have different ops for fp and integer addition
kjs so it can be left as a convention, or to enforce it
cotto yes 20:04
kjs cotto: were you planning to implement excpetions at the M0 level?
cotto there's some support for them 20:05
do M0 does know that exceptions are a thing
kjs ok, but how are they activated. in Java terms, there's a throw statement 20:06
benabik In Java VM there's a throw op
cotto they're just another call frame 20:07
kjs ok so "throw" would be a call frame call
cotto yes
kjs but how to catch them then?
benabik I'm a fan of making exception throwing just continuation calling in true CPS style.
kjs catching is done in a list; that is, you can catch various types
and it will select the right one. 20:08
cotto if a handler can't deal with an exception, it'll invoke the next one
benabik cotto++
cotto and so forth until the exception gets handled or a top-level handler get invoked 20:09
kjs ok, well once i see the example working I could build it into M1 :-)
cotto: I've tried to decipher the funcall example. It's a lot of fields that need to be set for each function call.I'm worried it takes an awful high number of M0 ops to make one function call. 20:10
Coke kjs: who cares how many ops it taks?
*takes
kjs well if function calls are common, and i would expect they are, then it's a performance hit, no? 20:11
cotto the first thing is to make it work. After it's working, we can figure out how to optimize it.
benabik CPS says that there's a continuation for each path execution can follow... Hm. I think Matt Might had a good article on it.
Coke kjs: adding sugar to simplify calls smells like PIR.
kjs cotto: agreed.
Coke: do you mean that in a bad way? 20:12
benabik matt.might.net/articles/by-example-...ing-style/
Coke kjs: yes. 20:13
cotto M0 is all about a lack of magic. If calling a function is innately complex, it'll take more m0 ops.
dalek kudo/nom: 0248432 | moritz++ | src/core/control.pm:
typed exception for returning from exhausted routine
kjs well, i was thinking, if I can get arrays and/or structs working in M1, I might be able to emit M1 code for function calls and run that through M1 to get the M0 :-) 20:14
20:15 benabik left
cotto I'm not sure I follow. Are you talking about arrays and structs working on M1? 20:16
20:16 benabik joined
kjs arrays in M1 yes 20:16
cotto we'll need those eventually 20:17
kjs or structs 20:18
which will just be blobs of memory in M0, and using addresses and offsets
the only thing I'm not really clear on how to do, is addresses. Local vars are just mapped to registers. Let's sayyou want to have the address of a local var. Can you get the address of a register?
addresses/pointerss.
Coke kjs: what would you do with the address of a local va? 20:19
*var
kjs pass it to another function ?
to let that called function fill it
possible in C, though admittedly, you have to know what you're doing
cotto that gets into the memory model, which I was about to start figuring out when I got hit by a startup-shaped bus 20:23
kjs ah ok
I suppose M1 could do without explicit pointers, and C's &/address-of operator 20:24
cotto How would that work? 20:25
I was thinking more along the lines of it having pointers, but only to regions within M0's memory. 20:26
i.e. address 0 is the first byte allocated by the vm, etc
kjs without the & op, you effectively would have something like Java's references 20:27
so you can only pass around pointers to allocated mem blobs
pmcs
etc.
20:45 kjs joined
dalek : ccc4006 | kjs++ | m1. (2 files):
add bool type. require boolexpr for conditional statements. wont work for not-expr; need a semcheck check
20:46
20:55 not_gerd left 20:57 dukeleto joined
dukeleto ~~ 20:57
21:32 plobsing joined 21:44 crab2313 joined 21:45 kurahaupo joined 22:07 kjs joined 22:34 kid51 joined
dalek : a848e5a | kjs++ | m1_gencode.c:
implement naive version of switch statement.
22:35
22:39 Hunger joined
cotto kjs++ I love naive things. 22:41
kjs :-)
i think there's better ways to do it, but let's get this thing running first!
dalek nxed: 0776e3b | NotFound++ | winxed (2 files):
drop support for try modifiers from stage 1
22:44
nxed: 9153d9e | NotFound++ | winxedst0.cpp:
drop support for try modifiers from stage 0
23:01 whiteknight joined
awwaiid go twitter 23:27
oops
dalek : 12e6a2f | kjs++ | m1 (4 files):
updates to semantic checker; add a few keywords for try/catch/throw/continue statements. various updates
23:31
23:31 whiteknight joined, crab2313 joined, contingencyplan joined, dmalcolm joined, Patterner joined, PacoAir joined, perlite joined, mtk joined, nopaste joined, PerlJam joined 23:33 Hunger joined, kid51 joined, benabik joined, japhb joined, dadada joined, atrodo joined, tadzik joined, dalek joined, awwaiid joined, ttbot joined, jlaire joined, Infinoid joined
dalek : 58909f4 | kjs++ | m1_ast. (2 files):
functionality for bools
23:33
23:34 Infinoid joined, jlaire joined, ttbot joined, awwaiid joined, dalek joined, tadzik joined, atrodo joined, dadada joined, japhb joined, benabik joined, kid51 joined, Hunger joined, PerlJam joined, nopaste joined, mtk joined, perlite joined, PacoAir joined, Patterner joined, dmalcolm joined, contingencyplan joined, crab2313 joined, whiteknight joined
whiteknight netsplit -- 23:44
kid51 did someone burp?
benabik karma netsplit 23:45
aloha netsplit has karma of -1.
whiteknight netsplit--
23:45 kjs joined
whiteknight misspelling-- 23:45
dalek : 2f9a7a4 | kjs++ | m1_semcheck.c:
updates on the semantic checker
23:58
23:58 kjs joined