Parrot 4.2.0 "Ornithopter" | parrot.org | Log: irclog.perlgeek.de/parrot | #parrotsketch meeting Tuesday 19:30 UTC
Set by moderator on 21 March 2012.
whiteknight good evening, #parrot 00:03
nine++ 00:04
00:08 jsut_ joined 00:22 cogno joined
Coke good morning. 00:24
whiteknight hello Coke 00:25
Coke good night. 12:30 here, need sleep. 00:26
00:42 benabik joined
benabik nine++ (catching up on some backlog) 00:44
00:47 GodFather joined
whiteknight oh man, I opened a can of worms with this IMCC work 00:59
it turns out that handling of :immediate subs has always been stupid because the rest of the system is too stupid for it to be fixed
benabik whiteknight: You touched IMCC? You're a braver man than... wait, I just committed to IMCC too, didn't I?
whiteknight: How so? 01:00
whiteknight I'm on my branch, rewriting the way :immediate and :postcomp work
benabik ... to what?
whiteknight in master, when a Sub is compiled IMCC checks if it's an :immediate. If so, it calls PackFile_fixup_subs
PackFile_fixup_subs iterates over the entire constants table, looking for immediate subs 01:01
so for every sub, we iterate over all constants
every time
benabik Wait, what?
whiteknight And then, for good measure, we iterate the whole collection again after compilation, to make sure we don't miss any
benabik For every :immediate sub, I hope.
whiteknight AND THEN we iterate again looking for :postcomp subs
yeah, only for :immediates
benabik This sounds... LTA
whiteknight yeah, I'm fixing it
now when we compile a sub, we keep a reference to it and we just execute it directly 01:02
no looping
dalek rrot/remove_sub_flags: fb8119f | Whiteknight++ | / (5 files):
Fix :immediate subs. We need to execute them more immediately than I had them. Cleanup/Rewrite several bits of sub-saving code to keep a reference to the sub as it's generated and execute it directly.
01:03
whiteknight that should fix a broken test or two
01:15 contingencyplan joined 01:32 jsut joined
whiteknight ah, needed one more fix to get some tests to pass 01:43
dalek rrot/remove_sub_flags: 422f859 | Whiteknight++ | compilers/imcc/pbc.c:
Only store the result of an :immediate sub if it's non-null. This fixes at least t/dynpmc/subproxy.t
01:48
rrot/remove_sub_flags: 0945f74 | Whiteknight++ | t/dynpmc/ (2 files):
Fix a few more tests before bed
01:49
whiteknight okay, that's it for tonight 01:52
benabik whiteknight++
02:02 jsut_ joined
cotto ~~ 03:22
04:02 preflex_ joined 04:27 davidfetter joined
dalek rrot: d344da6 | petdance++ | src/ (4 files):
quiet some unused variable warnings
05:55
06:02 mdupont joined 06:23 fperrad joined 08:28 perlite joined 09:28 lucian joined 10:26 schm00ster joined 10:32 wknight-phone joined 11:42 benabik joined
benabik Good morning, #parrot 11:57
tadzik hello benabik 11:58
12:17 whiteknight joined
whiteknight good morning, #parrot 12:20
benabik o/ whiteknight
whiteknight hello benabik
tadzik o/ 12:40
benabik o/ tadzik 12:41
12:41 JimmyZ joined 14:07 lucian joined 14:19 p6eval joined 14:22 lateau joined 14:29 mtk joined
dalek sella: 6247747 | Whiteknight++ | src/ (34 files):
merge optional_args branch, fix conflicts
14:51
sella: 15ead1b | Whiteknight++ | / (5 files):
[Build] Fix build. Some constructs are not currently allowed by Winxed as parameter default values. For now, work around those limitations.
15:00 benabik joined 15:07 PacoAir joined 15:11 benabik joined 15:33 lateau joined 15:34 benabik joined
dalek sella: e494eb0 | Whiteknight++ | src/string/String.winxed:
[String] Add a new String.to_integer utility, borrowed from the String::Utility library in the standard parrot runtime.
15:38
whiteknight msg NotFound optional params have a few problems that I've been finding: gist.github.com/2159106 I'll try to fix them. Let me know if you have any ideas or concerns 15:44
aloha OK. I'll deliver the message.
15:46 Psyche^ joined 15:58 dmalcolm joined 17:18 mj41 joined
nine Good evening, #parrot 17:23
Coke chuckles at the suggestion to remove PGE.
dalek kudo/slurpy-sequence: 0604d1b | moritz++ | src/core/ (3 files):
bring back sequences with slurpy generators
17:24
benabik Is anything still using PGE? Does nqp-rx use it?
aloha (parrot/parrot) Issues opened : 746 (Create PARROT_STATIC_ASSERT) by petdance : github.com/parrot/parrot/issues/746 17:36
17:37 hercynium joined
whiteknight yeah, I think NQP-rx uses PGE 17:51
no, wait. that's what the -rx is, it has its own regex engine
several bits of the build do rely on PGE, but I don't know if those bits are also good to be removed
data_json and yaml::Tiny do, I think 17:52
nine is there a way to get a pasm file for a given pir file? 17:59
whiteknight nine: short answer, no 18:01
there used to be a way to sort-of do a conversion that would generate code that wouldn't be valid and wouldn't compile
that got ripped out
you can use pbc_disassemble or pbc_dump to get a readable approximation 18:02
nine Ah, of course I have to build more than just corevm to get the real tools. Thanks, pbc_disassemble is pretty much what I need 18:03
whiteknight benabik++ was putting together a slightly better disassembler as part of his PACT project too, if you need a second opinion on anything 18:17
benabik The output is fairly readable at this point. The major thing I'd like to do is introspection of Keys. 18:18
whiteknight benabik: ah, right. I keep forgetting that you've been asking for that
benabik whiteknight: Yeah, Keys need introspection and creation that can handle register values. I think I opened an issue for it? 18:19
cotto ~~ 18:20
whiteknight benabik: yeah, there's an issue for it. I just haven't gotten to it yet 18:31
benabik whiteknight: No rush yet, although if I do a PACT assembler, it would be basically required. 18:32
(for GSoC)
benabik should probably finish his "introductory" e-mail to -dev. 18:36
whiteknight yeah, otherwise we'll have no idea who you are! 18:41
tadzik heh 18:42
benabik I like to obey the forms. :-D
nine Seems like Parrot never runs out of new challenges. get_global in a sub which itself is fetched via get_global does not work, because it would access the sub's namespace unproxied, so the fetched global is used directly instead of a proxy to it 18:50
benabik :-( 18:51
18:53 hercynium joined
nine Well it's no wonder. I had to special case subs when creating the thread's task (copying the sub and creating proxies for all its attributes). It's just the same now. 18:54
whiteknight nine: Yeah, like I said. NameSpace is known to be the worst thing ever 19:08
benabik Worse than IMCC? 19:09
whiteknight benabik: arguably, IMCC is just a large complicated engine for creating namespaces
benabik whiteknight: hah
moritz rakudo has stopped using parrot namespaces
whiteknight moritz: exactly! That means we can rip them out
we'll tolerate any horrible code that Rakudo is relying on
benabik moritz: What does it use instead? 19:10
moritz rakudo: module A { }; say A.WHO.WHAT 19:11
p6eval rakudo 1a468d: OUTPUT«Stash()␤»
moritz benabik: Stash
rakudo: say Stash ~~ Hash
p6eval rakudo 1a468d: OUTPUT«True␤»
moritz it's a Perl 6 object, fittingly
benabik Does NQP still use Parrot's namespaces? 19:12
moritz I don't know
benabik Fair enough 19:13
whiteknight NQP-rx does. New NQP does not
at least, I don't think it does. Not explicitly
it does implicitly jam symbols into the 'parrot' namespace or the 'NQP' HLL namespace
but there's no way to turn that off
not yet
:)
moritz we're happy to hand commit bits to anybody who awesomizes nqp :-) 19:15
I'd love to have the ability to give commit access to all parrot committers from within the perl6 organization 19:16
whiteknight moritz: we've got to catch up with all the awesome improvements NQP provides first, before we can start making improvements of our own 19:17
moritz: I cry a little bit every day when I think about how 6model should have been written directly in parrot core instead of as an external module
and the dyncall stuff would have been great to have in core 19:19
moritz agreed
19:21 contingencyplan joined
whiteknight one way or another, I'm going to get 6model into Parrot core this year 19:22
dukeleto ~~ 19:24
moritz: you could create a parrot team in the perl6 org
moritz: it would need to be manually updated and could get out of sync, but you could just add the core parrot devs that actually hack on nqp stuff and that would work pretty well 19:25
whiteknight it's really not so big a deal, yet 19:36
moritz: It's been a while since I've had a patch for NQP, but what's the best way to submit it? Still a .patch file?
benabik pull request, I would assume. 19:37
I think I submitted a pull request and got a commit bit a few months back. :-D
nine Why can I declare multiple .locals in one line but not multiple .params in PIR? 19:38
whiteknight nine: because .param syntax is stupid
nine :)
whiteknight nine: The parser used to be so picky (and this is only about two years ago) that you couldn't insert comments before or between .param declarations in a function 19:39
nine wow
whiteknight yeah, we've fixed that infelicity, but it's still far from perfect
the real solution is to avoid PIR and use Winxed or NQP instead 19:41
benabik winxed++
NotFound++
benabik hopes to have some alternative to PIR by September. 19:42
nine Probably...but I know neither of those languages and I don't know if I could do this kind of low level stuff I do right now
benabik Although it probably won't be very appealing to write by hand. 19:43
nine benabik: I used to write x86 assembly as a kid. How bad can your new thing be? ;) 19:44
particle dukeleto: s/flavor/breed/ 19:45
dukeleto particle: sure, sounds fine to me. 19:46
particle: we can have a lot of fun with that... 19:47
particle precisely. -Ofun
benabik nine: Probably not too much worse. My current plan involves 0 assistance for the user. PCC by hand and no variable names is the unappealing part to me.
19:47 root_ joined
whiteknight benabik: variable names should not be too difficult, if you leave scoping flat and boring 19:48
have a hash that's a simple mapping table from varname to register alias
then when you parse you can do the translation on the fly
regname = is_reg(var) ? var : symbol_table[var]; 19:49
benabik whiteknight: I'm currently picturing two levels of assembly. One that's literally what the bytecode is, and another that does things like named variables and labels, in-line constants, etc etc. 19:50
dukeleto benabik: the lowest level will be m0 bytecode 19:51
benabik I want one that has _no_ magic in it for machine processing and simplicity. That way there's no ambiguity.
dukeleto benabik: m0 has no magic
benabik: because it is "magic level 0" :) 19:52
benabik dukeleto: Yes, eventually.
dukeleto: Then there might be 4 assemblies in my perfect world. :-D
dukeleto benabik: sounds fine to me.
benabik dukeleto: I want to keep M0 in mind when writing PACT. If the classes could be used for PBC and M0, that would be perfect. 19:53
Static single assignment control flow graphs for _everybody_.
dalek kudo/slurpy-sequence: 048f1b7 | moritz++ | docs/announce/2012.03:
add first draft of 2012.03 release announcement
19:54
moritz oops, wrong branch 19:55
benabik The goal, from my point of view, is to give everyone a good environment for optimization. :-)
dalek kudo/nom: 4c7f568 | moritz++ | docs/announce/2012.03:
add first draft of 2012.03 release announcement
benabik Although I suppose that zero-magic assembly should really be a series of PACT.Packfile nodes or some such. 19:58
whiteknight benabik: yeah, that's fine too. I'm just saying you don't NEED to address registers by index if you don't want, you can give simple names to registers 20:04
I don't feel like an explicit name->register mapping adds any magic
nine I certainly don't see register names like eax and ebx as magic 20:07
benabik tax is like $P0 20:08
*eax
Even then, raw PCC and probably interesting things with subs and namespaces.
20:11 root_ joined
whiteknight The silver lining is that for a simple-enough assembly language, parsing is a snap. It can basically be reduced to a bunch of operations on lines, with splits and table lookups 20:17
dukeleto whiteknight: that is what the m0 parser does 20:25
whiteknight: it is line-based
whiteknight dukeleto: yeah, if your syntax is easy enough and if you make yourself a rule that you won't be writing that code by hand and therefore don't need niceties, you can make it dirt simple 20:26
while(line = file.readline()) { var tokens = split_on_whitespace(strip_trailing_whitespace(line)); var ins = instructions[tokens[0]].parse(tokens); push(output, ins); } 20:27
there's your assembler, minus the details
well, the parser for your assembler 20:28
then it's a call to emitter.generate(output)
anyway, I'll be back later tonight to hear complaints about that snippet 20:31
dalek p: fd67256 | masak++ | VERSION:
bump VERSION to 2012.03
20:52
kudo/nom: 77dcb04 | masak++ | tools/build/NQP_REVISION:
[tools/build/NQP_REVISION] to latest NQP release

  ...and it's only minutes old! That's how current we are!
20:55
cotto benabik++ 21:04
benabik ack? what?
cotto pact email
sorry. my brain is fried from 3 days of conference stuff 21:05
benabik cotto: Hopefully there was some enjoyment to be had along the way. 21:06
cotto definitely. I even ran into ingy 21:07
tadzik ha, how's he doing?
cotto he seemed to be his normal self
21:21 darbelo joined
dalek kudo/nom: c15aecd | masak++ | docs/announce/2012.03:
[docs/announce/2012.03] finalized

s/TODO/Argentina/. other small fixes.
21:32
kudo/nom: 5dab131 | masak++ | docs/announce/2012.03:
[docs/announce/2012.03] s/February/March/

  pmichaud++ eagle eyes.
21:35
pmichaud I will get autoviv working before the next release. 21:40
I didn't realize it wasn't working.
oops, wrong chan
dalek kudo/nom: 5dda9a7 | masak++ | docs/release_guide.pod:
[docs/release_guide.doc] current release => past

Also extended the future a little.
21:42
nine How should I call an op which simply ends the current task? 22:09
22:16 sri joined
nine Called it 'terminate' for now but I will probably not need it in the long term anyway 22:17
22:20 mj41 joined
dalek kudo/nom: fb64898 | masak++ | VERSION:
[release] bump VERSION
22:27
22:39 whiteknight joined 22:46 pjcj joined 22:47 myhrlin joined 23:12 jsut joined
whiteknight good evening, #parrot 23:12
23:29 davidfetter joined