|
Parrot 3.7.0 "Wanda" | parrot.org | Log: irclog.perlgeek.de/parrot/today | #parrotsketch meeting Tuesday 19:30 UTC Set by moderator on 17 August 2011. |
|||
| tcurtis | whiteknight: sure. What timeframes would be most convenient for you? | 00:02 | |
| whiteknight | how long do you think such a walkthrough would take? | ||
| I have a decent idea about how it all works, I'm mostly trying to figure out what needs to be done on both the input and output sides | 00:06 | ||
|
00:06
theory joined
|
|||
| tcurtis | Hmm... I am unusued to estimation of how long explaining things takes, but I think I could probably explain its current state in at most 30 minutes. | 00:10 | |
| whiteknight | okay. Have time tonight? | 00:11 | |
| I'm trying the build now. Looks like it's missing a file MergeRedundantTransitions.winxed | 00:13 | ||
| LALR/Generator/MergeRedundantTransitions.winxed | |||
| tcurtis | Ah, yes. I had added that temporarily and forgotten to remove it when it became unnecessary. | 00:14 | |
| I'll fix and push that momentarily. | 00:15 | ||
| dalek | lrskate: 22ecc4d | tcurtis++ | setup.winxed: Fix no longer necessary file being included in the build. |
00:17 | |
| tcurtis | As far as having time tonight, yes, though preferably not immediately. Would 8:30PM CDT(approximately one hour and ten minutes from now) work for you? | 00:18 | |
| whiteknight | yeah, sounds good to me | 00:20 | |
| I finally got it building and testing, which is good | 00:21 | ||
| I did a lot of half-assed hacking on rosella, which prevented me from building and installing it locally until I fixed it | |||
| dalek | kudo/nom: b0d942e | Coke++ | t/spectest.data: track failure mode |
00:33 | |
| benabik | o/ | 00:39 | |
| whiteknight | hello benabik | 00:40 | |
| benabik | whiteknight: What's up? | 00:41 | |
| whiteknight | benabik: not too much. you? | ||
| benabik | whiteknight: Just spent an hour or so moving mulch. | 00:42 | |
| whiteknight | fun tims | 00:43 | |
| times | |||
| benabik | Also trying to get these random pile of thoughts in my head about PACT into some kind of readable shape. | 00:44 | |
| whiteknight | benabik: I am looking forward to what else you have to say about it. I started drafting a blog post of my own, but also don't have all my ideas solidified | 00:45 | |
| benabik | whiteknight: Do we have a PDD or other doc describing packfiles? | 00:48 | |
| whiteknight | benabik: maybe, but I'm sure it's no good | ||
| benabik | whiteknight: Found it | ||
| whiteknight | where? | 00:49 | |
| benabik | docs/parrotbyte.pod | ||
| I'll also consult the Packfile* PMCs. | |||
| whiteknight | These things all need more documentation, but at the same time I don't really like the design of too much of this stuff and most of it is going to change | 00:51 | |
| well, it's not just that *I* don't like the design. Enough people don't | |||
| benabik | I note that the Packfile PMC says it's a parser for .pbc files, but I don't see a way to load a packfile into one. | 00:52 | |
| Although I guess I could pass the value from PackfileView.get_pointer into Packfile.set_pointer. | 00:59 | ||
| whiteknight | yeah | 01:00 | |
| benabik | Or load the pbc into a string and pass it to Packfile.unpack. | ||
| Interesting. | |||
| whiteknight | we could add a method to Packfile like "set_view" or something | ||
| it's trivial to do. You could do it yourself if you were feeling adventurous | |||
| benabik | I'm curious about disassembling pbc files⦠pbc_disassemble doesn't really give useful output. | 01:01 | |
| whiteknight | no, it does not | ||
| the problem is that PIR compilation is destructive. We can't get back anything like the original after we compile it | 01:02 | ||
| PIR uses :immediate subs to run during compilation to create constants. We don't have a way besides with :immediate subs to put arbitrary constants in the constants table | |||
| benabik | Well, I want to change that. :-D | ||
| whiteknight | so we can't disassemble a PBC file which contains complex constants | ||
| right. So what we need is a syntax to assemble complex constants, then we can disassemble into that syntax | 01:03 | ||
| benabik | At the very least, I'm trying to consider what the lowest level of PACT should be. | 01:06 | |
| Under POST is PIR⦠But I'm wondering if the bytecode route would benefit from something between POST and PBC. | 01:07 | ||
| Something that is extremely close to the structure of the packfile. | |||
| whiteknight | PAST is the abstract syntax layer, POST is the layer tailored to the output format | ||
| so if POST isn't what PBC needs, then we need something better than POST, or we need to modify POST | |||
| but I don't think we need to add another layer | 01:08 | ||
| benabik | Well, PACT is about modifying things. :-D | ||
| whiteknight | true, but I don't want to just add crap for the sake of adding crap | ||
| benabik | If there's a OO layer there, we can disassemble to it, do introspection, etc etc. | 01:11 | |
| I want each transformation to be as simple as possible. | |||
| whiteknight | we do need PAST, or something like PAST to represent the syntax of the input | ||
| benabik | Right. | ||
| whiteknight | and we probably do want something tree-like to represent the structure of the output | 01:12 | |
| it doesn't have to be POST. We can create a new tree interface and give it a fun new acronym | |||
| benabik | I'm pondering: PAST -> POST -> flattened POST -> output... | ||
| POST currently does things like bury subs inside subs. | 01:13 | ||
| whiteknight | now, the packfile PMCs are the end goal, but they aren't necessarily the best API to use. We could add an abstraction layer API for them | ||
| benabik: can we change POST to not do that? | |||
| or do we sincerely need a flattening step? | 01:14 | ||
| benabik | There are several post-POST steps we could do. Fun transformations like SSA form or simple things like register allocation. | 01:15 | |
| (I'm not convinced that PAST::Compiler is the best place to do register allocation.) | |||
| whiteknight | so what does POST get us, if not these things like register allocation, instruction transformation, and logical ordering of executable blocks? | 01:16 | |
| benabik | Currently, POST is mostly a tree-structured form of PIR. | 01:17 | |
| PAST::Compiler does the register allocation, instruction bits, etc etc. POST::Compiler is largely serialization. | 01:18 | ||
| whiteknight | isn't PAST a tree-structured form of PIR? | 01:20 | |
| I thought I understood the differences here a little better, but from what you're saying things aren't where I would expect them to be | |||
| benabik | No, it's a higher level thing. It's a semantic tree. | ||
| There's a PAST tree for "a loop" | |||
| POST trees contain labels, conditionals, and jumps. | 01:21 | ||
| dalek | rrot: c52abd8 | jkeenan++ | config/init/hints/darwin.pm: Remove import of File::Which, which is no longer needed. |
01:22 | |
| whiteknight | gotcha. Okay. So the abstraction layer is not quite where I was hoping it would be | 01:23 | |
| benabik | POST trees contain a _lot_ of strings that are intended to be concatenated into PIR in the right order. | ||
| I'm also just pondering what's needed. | 01:26 | ||
|
01:30
soh_cah_toa joined
|
|||
| benabik | Here we go⦠www.cs.uaf.edu/~cs631/notes/node5.html | 01:30 | |
| whiteknight | the point about nested subs really bothers me | 01:31 | |
| benabik | 6 phases: Lexing, Syntax, Semantics, Intermediate Code, Optimization, Code Gen. | ||
| whiteknight | I wonder why it does that | ||
|
01:31
rfw joined
|
|||
| whiteknight | lexing and syntax create the PAST tree. Semantics and intermediate code create POST. then we optimize POST and use it to generate output code | 01:31 | |
| benabik | Syntax generates parse tree. | 01:32 | |
| Semantic is PAST. | |||
| Intermediate Code is POST. | |||
| I'm thinking about leaving POST in a tree-like state and then as "optimization" steps doing things like dealing with register allocation, temporary values, etc etc. | 01:33 | ||
| whiteknight | register allocation definitely should be happening in POST or later | 01:34 | |
|
01:34
bubaflub joined
|
|||
| benabik | My thought is that POST would be a tree containing opcodes, then we'd flatten it down over a couple of phases into a just a list of subs containing a list of ops. And then a code gen phase outputs PIR/bytecode. | 01:40 | |
| This may not be faster than currently, but I hope is more amenable to alteration and optimization. | |||
| whiteknight | I'm going to need to think about it more. There are a lot of things that have to go into this | 01:42 | |
| benabik | Yes. | ||
| whiteknight | closures really are the pain in the ass, I think | ||
| benabik | ⦠Yes. | ||
| And no. | |||
| soh_cah_toa | whiteknight: you saw my message? | 01:45 | |
| whiteknight | soh_cah_toa: recent message? I don't think so | 01:46 | |
| soh_cah_toa | from aloha. sent it last night | ||
| whiteknight | Oh, I might have gotten it earlier, but I don't remember what | ||
| I wish aloha kept records until you deleted them | 01:47 | ||
| soh_cah_toa | well, whatever. i was just wondering if you looked at the spec yet? it's mostly designed for a c compiler and it needs to be parrot-ized | ||
| whiteknight | oh yes, the spec. I did look at it | 01:48 | |
| a lot of the parrotization will fall out when we start implementing | |||
| soh_cah_toa | that's another thing. i'm not sure where to begin b/c all the PAST::* and HLL-whatever classes are so vast and unfamiliar to me | 01:49 | |
|
01:49
rfwalrus joined
|
|||
| whiteknight | don't worry about PAST. PAST might be up in the air at this point | 01:50 | |
| benabik | PAST is likely PAST for the near future. | ||
| whiteknight | where we need to start is in the packfile subsystem. src/packfile/* | ||
| soh_cah_toa | ok | ||
| whiteknight | We add the new segment to the packfile machinery, including the necessary API for writing and reading it | ||
| then, we add support to IMCC to write to it | |||
| then we add tools that read from it | 01:51 | ||
| rewriting things in src/sub.c and src/debug.c to use it instead of the old debug segment | |||
| then, remove the old debug segment and do a little dance | |||
| then, delete IMCC | |||
| soh_cah_toa | ok good | 01:52 | |
| benabik | beer++ | ||
| soh_cah_toa | so i guess that'd require rewriting the PackfileDebugSegment PMC? | ||
| or whatever it's called | 01:53 | ||
| whiteknight | we'll make a new segment, and a new wrapper PMC for it | ||
| that way the transition from one to the other will be smoother | |||
| soh_cah_toa | ah, ok | ||
| benabik | +1 | ||
| +10 if I'm allowed. :-D | |||
| soh_cah_toa | :) | ||
|
01:54
rfw joined
|
|||
| whiteknight | msg tcurtis I'm heading to bed now. We'll talk tomorrow. I'll be online most of the day, just come get me when you have time | 01:54 | |
| aloha | OK. I'll deliver the message. | ||
| whiteknight | and with that, I'm out for the night | ||
| benabik | 'night! | ||
| soh_cah_toa | alright, see ya | ||
| whiteknight | goodnight | ||
| tcurtis | msg whiteknight Sorry about not contacting you tonight. I didn't wish to interrupt your discussion about POST. | 01:56 | |
| aloha | OK. I'll deliver the message. | ||
| tcurtis | ~~ | ||
|
01:59
rfwalrus joined
02:00
bubaflub joined
|
|||
| benabik | Okay, a cold beer is nice after hard work, but it makes writing a coherent blog post more difficult. | 02:03 | |
| (Mostly because I'm more relaxed and distractible.) | 02:04 | ||
|
02:16
rfw joined
|
|||
| dalek | nxed: 585ddb8 | NotFound++ | winxedst1.winxed: optimize integer == 0 and != 0 in conditions |
02:23 | |
| allison | how "optional" is libffi? | 02:31 | |
| benabik | allison: It makes NCI easier. | 02:32 | |
| allison | benabik: this is more of a packaging question | ||
| that is, for the Debian/Ubuntu packages we can require it, and then it's always built with it | 02:33 | ||
| otherwise, we need a flag to make sure it's never built with it | |||
| because currently, it's built with it on some architectures (when libffi just happens to be installed), and then breaks | |||
| benabik | allison: Parrot can be compiled without it, but that makes NCI harder. It's a tradeoff. | 02:34 | |
| I'm not sure which is preferable. | |||
| allison | harder doesn't really matter here | ||
| faster or smaller does | |||
| NotFound | With it is preferable. a lot. | ||
| With it, nci can be used with pure pir modules. Without it, you need to require a C compiler and provide the wrappers. | 02:36 | ||
| And 'pure pir' in that sense includes nqp and winxed. | 02:37 | ||
| allison | does libffi get rid of the large stack of precompiled thunks for various signatures? | 02:39 | |
| NotFound | It does not need it, but I'm not sure if the build process avoids its compiling and linking. | 02:40 | |
| plobsing | allison: we have a flag to force-dissable libffi usage in Configure.pl: --without-libffi | 02:43 | |
| likewise we have flags to dissable the building of the large library of builtin thunks: --without-core-nci-thunks and --without-extra-nci-thunks | 02:44 | ||
| benabik | plobsing: And with libffi and without thunks, NCI works correctly, ne? | 02:45 | |
| plobsing | benabik: yes, it should | ||
| benabik | woot | ||
| plobsing | but not everyone has libffi | 02:46 | |
| and libffi is much less efficient than the thunks | |||
| allison | plobsing: in packaging we get to decide if everyone has libffi or not | ||
| plobsing: so, the question is which flags to use | |||
| NotFound | For debian and ubuntu is just a matter of apt-get install libffi | ||
| allison | plobsing: and, the hard thing is that we have to decide once for everyone | 02:47 | |
| plobsing | I would advise to force the usage of libffi in the case of packaging, since it maximizes utility | ||
| NotFound | Me too | ||
| allison | and then --without the nci thunks? | ||
| plobsing | if you want to cut down on some code size and a couple hundred gcables at startup, then sure | ||
| they don't add value to a system with libffi | 02:48 | ||
| allison | NotFound: it's not even that hard (apt-get install), it's just an automatic dependency in the packaging | ||
| NotFound | Yes, I was fooling myself into a developer point of view, not final user. | 02:49 | |
| plobsing | like I alluded to earlier, the thunks are more efficient. but if you're looking for efficiency in your VM<->C barrier, you are doing it wrong | ||
| allison | plobsing: well, we are doing it wrong, but we'll fix it :) | ||
| plobsing: how much less efficient? | 02:50 | ||
| plobsing | the thunks require heap allocation where the thunks could do it on the stack | ||
| allison | which requires heap allocation? | ||
| libffi? | |||
| plobsing | yes. sorry, I'm communicating poorly for some reason. | 02:51 | |
| allison | heap allocation is generally preferable for a stackless VM | ||
| NotFound | I think that the eficiency of something that just doesn't work is debatable ;) | ||
| plobsing | allison: heap allocation is not preferable when calling into a C function | ||
| we want to stay off the stack while we are staying in the VM. as soon as we are on our way out (or as we are on our way in), all bets are off. | 02:52 | ||
| allison | plobsing: it does require remunging to the stack, yes | ||
| plobsing | the code path to make even a simple PCC->FFI call is rather complicated. the thunks are rather straightforward. | 02:53 | |
| we build up the call arguments for a call to get_params. then we build up a call for the actual function. then we build up a call for set_returns. | 02:54 | ||
| these are all variable arity calls | 02:55 | ||
| allison | is Rakudo faster or slower with libffi? | 03:00 | |
| plobsing | as a result, I count 9 separate heap allocations that occur to call a single NCI function through libffi (src/nci/libffi.c:call_ffi_thunk) | ||
| vanilla Rakudo doesn't make ffi calls. it stays inside the VM. | 03:01 | ||
| allison | that sounds like a lot of unfortunate overhead, but then it may have very little effect | ||
| plobsing | I think we have a libgmp benchmark somewhere that would be a more realistic guage of how this affects NCI users | 03:02 | |
| who was the gsoc student working on gmp bindings again? | |||
| benabik | bubaflub? | ||
| allison | something in Rakudo is triggering libffi (I know from the failures it's causing), but it could be the VM itself | ||
| plobsing | what? | ||
| allison | either way, it will have a performance effect | 03:03 | |
| the current failure of Rakudo on Debian | |||
| it's caused by parrot being built with libffi | |||
| plobsing | is it rakudo or rakudo* (which includes an NCI wrapping library, and presumably tests for such) | ||
| allison | but run on a machine that doesn't have libffi installed | ||
| (because the build machine just happened to have it, but the packaging doesn't require it) | 03:04 | ||
| plobsing | is that a runtime error or a startup error. missing .so sounds like it should fail at startup. | ||
| allison | I'm not sure which they're packaging (rakudo or rakudo*) | 03:06 | |
| bugs.debian.org/cgi-bin/bugreport.cgi?bug=636944 | |||
| plobsing | compile time error | 03:07 | |
| when parrot is configured to use libffi, the headers will include ffi.h, the lack of which prevents the compilation of any parrot extensions | 03:08 | ||
| that is not Rakudo making use of NCI functionality | 03:09 | ||
| allison | so, Parrot and Rakudo both should have build-depends on libffi | ||
| but not runtime depends | |||
| plobsing | I would be surprised if doing that worked | 03:10 | |
| like I said earlier, I would expect a missing .so to be a startup failure | |||
| allison | you should never need .h files at runtime | ||
| plobsing | Parrot and Rakudo should both build-depends on libffi-dev | ||
| and runtime-depends on libffi | 03:11 | ||
| need the .so for runtime, not the headers | |||
| allison | it's not a missing .so | ||
| "ffi.h: No such file or directory | |||
| compilation terminated." | |||
| plobsing | it will be when you try to run it | ||
| allison | try to run what? | ||
| plobsing | parrot or rakudo | ||
| allison | you mean the compiled .so from perl6_group? | 03:12 | |
| remember, the compilation is done once, then all the .so files are installed on every machine precompiled | 03:13 | ||
| build-depends are only required on the build machine | |||
| it doesn't make sense to require ffi.h on every machine that installs the precompiled files | |||
| plobsing | no, but if parrot is built against libffi, the .so is required to run parrot | 03:14 | |
| allison | you mean the libffi.so, not perl6_group.so? | ||
| plobsing | yes. libffi.so is required to execute parrot if parrot is configured with libffi support | 03:15 | |
| allison | if so, then agreed | ||
| what isn't required for runtime depends is libffi-dev | |||
| plobsing | agreed. which leads to build-depends on libffi-dev, but runtime-depends on libffi only. | 03:16 | |
| then again, this arrangement would prevent building of any parrot extensions outside the debian module system | |||
| which may or may not be desirable | |||
| allison | libparrot-dev could require libffi-dev | 03:17 | |
| plobsing | that makes sense | 03:18 | |
| allison | (and preventing parrot extensions outside the debian module system from building isn't desirable) | ||
|
03:19
JimmyZ joined
|
|||
| allison | I'll run with that | 03:19 | |
| benabik | But you'd need to install libparrot-dev to build extensions anyway, so if it depends on libffi-dev, that seems optimal. | ||
| allison | long-term, do you think it's likely that libffi will replace the old thunks? | ||
| benabik: yes, that was our conclusion too | 03:20 | ||
|
03:20
rfw joined
|
|||
| plobsing | allison: based on recent developments, I doubt my views on NCI are consistent with the majority of users and I'd like to see someone else take over. beyond that, I don't know, and I'm trying not to care. | 03:22 | |
| allison | plobsing: your views are pro or against libffi? | 03:23 | |
| plobsing: or, something else entirely? | 03:24 | ||
| plobsing | allison: overarching philosophy of how it should work | ||
| it includes the libffi question | |||
| allison | and, by recent developments, do you mean M0? | 03:25 | |
| benabik | Sometimes #parrot seems to be full of people who don't like parrot but keep working on it anyway for some inexplicable reason. | ||
| plobsing | no, I mean the problem we had with rakudo/zavolaj this spring, and other, lesser comments and actions | ||
| allison | benabik: it's a grand tradition that goes all the way back to the beginning of parrot :) | 03:27 | |
| benabik: the very first people who worked on parrot didn't like it and didn't want to work on it ;) | |||
| benabik | allison: This seems less than optimal⦠Although it may explain the odd mishmash of features. | ||
| ;-) | 03:28 | ||
| plobsing | benabik: I like parrot. I like the vision. There are many facets to parrot. I just am not being helpful delivering what the majority apparently wants, so I move elsewhere where I may be prductive. | ||
| allison | benabik: nah, the odd mishmash of features is a completely different cause: many cooks over many years | 03:29 | |
| plobsing: I'm not sure rakudo counts as the majority | |||
| benabik | allison: AFAICT, it is the majority of parrot users. | ||
| allison | benabik: I sometimes wonder if rakudo devs would be happier just running off and writing their own VM, but hate to suggest it to them | 03:30 | |
| plobsing | allison: perhaps I'm mistaken, but a number of other users have made motions in similar directions | 03:31 | |
| benabik | allison: I'm sure they'll get around to it at some point. | ||
| allison | benabik: perhaps. It would be an ironic circularity :) | 03:32 | |
| plobsing: one thing Parrot has plenty of room for is multiple different ways of implementing an idea | 03:33 | ||
| plobsing: don't feel like you're standing in the way of progress because you think a little different | |||
| plobsing: your idea may prove to be absolutely critical in the not-to-distant future | 03:34 | ||
| plobsing: parrot is a slim core, with lots of room for varying extensions | |||
| plobsing: and will only become more so after M0 | |||
| plobsing: there is no "majority" and no "one right way" | 03:35 | ||
| plobsing: it's a toolkit | |||
|
03:35
bubaflub joined
|
|||
| plobsing | I have plenty of ideas. NCI is only one side of Parrot. One that has a higher politiking/promotion to hacking ratio than I'd like to deal with. there are other, less user-visible sides to hack on with much less hassle. | 03:36 | |
| allison | plobsing: fair enough | 03:39 | |
| got to put the kid to bed, biab | 03:40 | ||
|
04:15
bubaflub joined
|
|||
| allison thinks there must be some universal rule about falling asleep while putting the kids to bed | 04:54 | ||
| sorear | most parents live on the same time zone as their kids-they-have-to-put-to-bed | 05:04 | |
|
05:07
SHODAN joined
06:17
fperrad joined
06:35
mj41 joined
|
|||
| davidfetter has a new kid | 06:41 | ||
| he showed up 5 weeks early | 06:42 | ||
| davidfetter still kinda blown away | |||
|
07:02
Eclesia joined
|
|||
| Eclesia | hi | 07:02 | |
| dalek | nxed: 7f77058 | NotFound++ | / (3 files): fix new keyed with argument in stage 0 |
07:05 | |
|
07:10
TiMBuS joined
07:13
preflex joined
07:24
mj41 joined
07:33
not_gerd joined
|
|||
| not_gerd | good morning, #parrot | 07:33 | |
|
07:36
NotFound joined
|
|||
| not_gerd | msg kid51 some info on the state of gerdr/msys: gerdr.github.com/on-parrot/state-of...ranch.html | 07:38 | |
| aloha | OK. I'll deliver the message. | ||
|
07:44
jsut_ joined
|
|||
| dalek | nxed: d6ebd68 | NotFound++ | winxedst1.winxed: optimize == 0 and != 0 also for non int operands |
07:51 | |
|
07:58
lucian joined
09:28
slavorgn joined
|
|||
| dalek | kudo/nom: 89e9ef2 | tadzik++ | src/ (2 files): Make --doc take optional value, defaulting to 'text' |
09:32 | |
|
09:38
JimmyZ joined
09:47
SHODAN joined
10:46
ambs joined
11:09
not_gerd joined
11:31
Kulag joined
11:57
Kulag joined
|
|||
| atrodo | =~ | 12:07 | |
|
12:07
whiteknight joined
|
|||
| whiteknight | good morning, #parrot | 12:09 | |
| Eclesia | hi whiteknight | 12:10 | |
| cotto | hio | 12:11 | |
| tadzik | hello Parrots | 12:12 | |
| cotto | aloha, clock? | ||
| aloha | cotto: LAX: Tue, 05:12 PDT / CHI: Tue, 07:12 CDT / NYC: Tue, 08:12 EDT / UTC: Tue, 12:12 UTC / LON: Tue, 13:12 BST / BER: Tue, 14:12 CEST / TOK: Tue, 21:12 JST / SYD: Tue, 22:12 EST | ||
| cotto | none of those look right | ||
| ;) | |||
| tadzik | BER looks right, and not because it looks like BEER :) | 12:13 | |
| atrodo | Uh oh, cotto is in an alternate dimension. watch out! | ||
| whiteknight | hello Eclesia | 12:14 | |
| cotto | btw, jnthn++ gave a really slick talk about a Perl 6 grammar debugger that he wrote at yapc::eu: tinyurl.com/grammar-debugger | 12:15 | |
| bug him to port it to nqp if it sounds exciting | 12:16 | ||
| moritz | see also: www.jnthn.net/articles.shtml | ||
| cotto | that too | 12:17 | |
| not_gerd | it would be helpful if the error message 'error:imcc:No such file or directory' mentioned the path name... | 12:21 | |
| whiteknight | not_gerd: yes, I think we have a ticket open for that | 12:22 | |
| actually, let me take a look now, since I'm reminded of it | |||
| moritz | we at least have a ticket for reporting file name in incompatiable PBC version error | 12:23 | |
| not_gerd | how do I print a Parrot string (ie STRING) from C? | 12:26 | |
| cotto | not_gerd, gdb, Parrot-internal C or Parrot-external C? | 12:27 | |
| not_gerd | cotto: Parrot-internal C | ||
| cotto | Parrot_sprintf_c with %Ss | ||
| actually, that doesn't sound right. | 12:28 | ||
| whiteknight | that's right | ||
| not_gerd: are you working on that error message? I'm working on it right now | |||
| plobsing | not_gerd: Parrot_io_putps | ||
| not_gerd | whiteknight: just wanted to add some debug output | 12:29 | |
| whiteknight | okay | ||
| bleh, I forgot to configure with --maintainer | 12:30 | ||
| dalek | rrot: 965e04d | Whiteknight++ | compilers/imcc/imc (2 files): When IMCC can't find a file, actually tell the user the name of the file that can't be found. not_gerd++ for the find. |
12:34 | |
|
12:37
bluescreen joined
|
|||
| cotto | Is that all it took? I thought it was a much harder fix than that. | 12:46 | |
| whiteknight++ not_gerd++ | 12:47 | ||
| moritz | mostly unrelated, but recently I've had this idea that error messages that mention relative paths should also mention the current working directory | 12:49 | |
| dalek | rrot: 7cd618a | Whiteknight++ | t/compilers/imcc/syn/file.t: fix a test file that helpfully did a verbatim full-text match of the error message, to guarantee we never added more helpful information to it |
||
| whiteknight | moritz: patches welcome, but that doesn't sound like a fun thing to work on | ||
| moritz | whiteknight: indeed, and I don't intend to pursue it right now | 12:50 | |
| cotto tries to go back to sleep | |||
| moritz | whiteknight: but it's worth keeping it in the back of the mind, everything that helps people to better understand errors is potentially useful | ||
| not_gerd | is there a better way to resume an aborted build (after fixing some code) than `make clean`? | 12:51 | |
| if not, I need a faster machine.. | |||
| JimmyZ | ccache? | ||
| moritz | not_gerd: `make` | 12:52 | |
| tadzik | oh, I wish we had ccache for compiling Rakudo :) | ||
| moritz | tadzik: well, if you configure parrot to use ccache, rakudo does it do :-) | ||
| whiteknight | moritz: no question. I'm not saying it isn't useful. We have to weigh the usefulness against the amount of effort it takes to implement. Some fixes are easy. Some, not | 12:53 | |
| not_gerd | moritz: I get PackFile_Header_validate error when I try that... | ||
| moritz | ... for compiling the PMCs and ops :-) | ||
| not_gerd | might be unrelated, though | ||
| I'm just wondering where my debug output went :( | |||
| whiteknight | where did you put it? | 12:55 | |
| not_gerd | I'm working on adding MSYS path translations to Parrot_io_open() and added `Parrot_io_putps(interp, _PIO_STDOUT(interp), path);` to my `#ifdef __MSYS__` block | 12:57 | |
| tadzik | moritz: hmm, did you try that? | 12:58 | |
| moritz | tadzik: yes, but it doesn't really speed up anything, because the huge bottleneck is setting compilation | 12:59 | |
| tadzik | I see | 13:00 | |
| whiteknight | not_gerd: I would expect that to work, unless something is getting redirected | 13:02 | |
| _PIO_STDERR should work too, and is less likely to be mangled | |||
| not_gerd | I think STDOUT got somehow redirected into the bytecode file, and that's why the validation failed later on | 13:04 | |
| it works with STDERR | |||
|
13:11
bubaflub joined
13:14
ambs_ joined
|
|||
| benabik | o/ | 13:32 | |
| dalek | kudo/nom: 4f6018b | tadzik++ | src/Perl6/Grammar.pm: Allow any number of colonpairs in Pod block configuration |
||
| kudo/nom: 380494c | tadzik++ | / (3 files): Parse Pod block configuration and store it in Pod::Block.config. Add tests. |
|||
| atrodo | not_gerd> ping | 13:35 | |
| not_gerd | atrodo: pong | 13:36 | |
| atrodo | not_gerd> finally catching you about the m0/lorito topic | ||
| Your observations don't surprise me much. It was designed when we still had the nebulous topic of Lorito and didn't have m0 | 13:37 | ||
|
13:37
Eclesia left
|
|||
| atrodo | Designed with the requirements at the time, which were to be minimal, simple, and powerful enough to implement all of C's basic functions | 13:38 | |
| not_gerd | Ii's an interesting choice that Parrot guts will be m0-based - that's not generally done on other VMs (PyPy excluded) | 13:41 | |
| without a JIT, you'll have to pay the dispatch penalty a lot more... | 13:42 | ||
| atrodo | Yep, but it has the potential to solve a lot of outstanding speed issues for parrot. | 13:45 | |
| I'm still not sure if it's the right trade offs, but I think the simplification of the parrot guts is understated. | |||
| Making the guts more approachable make the entire project more approachable. I've steered clear of using parrot as a target for many years because it was so difficult for me to grok why things were done a certain way | 13:46 | ||
| whiteknight | the question of "why" is often very disappointing. I don't suspect many of the biggest infelicities in parrot have an underlying reason | 13:47 | |
| a lot of things just happened, in response to things that users claimed they just needed | 13:48 | ||
| atrodo | whiteknight> I always suspected that was the case, but I need to know how and the why seemed to be entangled in the answer | ||
| s/need/needed/ | |||
| not_gerd | also, has there been any discussion on m0/gc interaction? | 13:49 | |
| atrodo | That and pasm/pir was the interface. I'm sure you know how that went, whiteknight | ||
| whiteknight | yes, very well | ||
| not_gerd | in particular, if we want HLLs to generate m0 (we want that?), and also assuming local variables should be mapped to m0 registers, there need to be a way to attach meta-information to registers | 13:50 | |
| atrodo | not_gerd> for instance? | 13:51 | |
| not_gerd | the gc needs to know which registers hold PMCs, and other HLLs (eg Perl6) might want to attach type information/constrants to local variables | ||
| moritz | don't assume that local variables map directly to registers | ||
| I mean, some of them may | 13:52 | ||
| but most don't | |||
| benabik | The first thing I see a lot of people say about M0 is "if HLLs generate M0". We should probably decide if we want that and make a clear statement about it in the design doc. I've always been under the impression that HLLs should care about M0 in the future as much as they care C today. | 13:57 | |
| tadzik | true | ||
| not_gerd | so what do HLLs generate? PIR? | ||
| tadzik | well, pir is supposed to generate m0, isn't it? | ||
| JimmyZ | well, maybe pir, maybe pbc, maybe M0 | 13:58 | |
| tadzik | and pir is supposed to be trashed as well istr, so maybe just PAST, which will be turned to m0/pbc | ||
| well, HLLs do generate PAST now, mostly | |||
| moritz | but PASTs isn't as expressive as PIR | ||
| benabik | moritz: There's always inline nodes⦠:-/ | 13:59 | |
| moritz | so much for abandoning PIR | ||
| atrodo | My vote has been for m0 and pbc available for HLLs to use | 14:00 | |
| not_gerd | how does the current system work, ie how do you go from PAST to something that's actually exected? | ||
| tadzik | if that's through some toolkit, +1 | ||
| not_gerd: PAST compiler generates pir, pir gets compiled to pbc | |||
| benabik | Technically PAST::Compiler generates POST, POST::Compiler generates PIR. | ||
| NotFound | If m0 is very low level and we allow HLLs to generate it, security arenas and validity checks can become a nightmare. | 14:01 | |
| benabik | Security isn't really Parrot's strong suit. | 14:02 | |
| atrodo | NotFound> That's my worries about it. There's never been many concerns raised around m0 bytecode and security, and when I've seen it come up, it's been very dismissive | ||
| benabik> You can say that again. | |||
| Which is very disappointing. | 14:03 | ||
| benabik | "that again"? | ||
| ;-) | |||
| atrodo | Touche | ||
| whiteknight | what we haven't had a lot of are specific use cases and examples of what users need from a security system | 14:08 | |
| lots of people are expecting somebody else to figure out what's needed, design a solution, and implement it | 14:09 | ||
| benabik | whiteknight: As I progress with PACT, I think "invalid bytecode shouldn't crash the system" will start to come up. :-D | ||
| whiteknight | benabik: and how do you avoid that without tanking performance? | ||
| have a second validation tool that nobody will run? checksums that will be easy to change, and will still lead to crashes? | 14:10 | ||
| we could definitely teach the packfile pmcs how to validate packfiles on creation. that does ignore the idea of a creepy attacker with hand-crafted pbc files | 14:11 | ||
| atrodo | whiteknight> And that's the issue with Parrot's security. No one wants to take a stab at it because performance is put at such a higher priority | ||
| tadzik | I suppose performance is currently much more hurting issue than security | 14:12 | |
| whiteknight | atrodo: we are driven in large part by what users are asking for. Users are asking for security, and in some cases giving us specific benchmarks that need improvements | ||
| moritz | iirc dukeleto wanted some pretty specific security features for PL/Parrot | ||
| whiteknight | no users are giving us use-cases for security that we can reach for | ||
| moritz | let me state a simple one | 14:13 | |
| I run p6eval | |||
| I'd like to be able to tell rakudo that it's not allowed to read files except from it's installation directory | 14:14 | ||
| dalek | kudo/nom: 276bfeb | tadzik++ | / (5 files): Parse =config directives properly |
||
| moritz | and it's not allowed to write any files, or open sockets, or fork | ||
| tadzik | and call C code | ||
| s/and/or/ probably | |||
| whiteknight | moritz: and those restrictions need to happen at the parrot level? Many of those things sound like they would almost be better handled by Rakudo | 14:15 | |
| moritz | whiteknight: depends on what you mean by "better" | 14:16 | |
| whiteknight | for example, a flag in your file handle type, or telling p6eval that it can't compile code that creates certain types | ||
| not_gerd | whiteknight: so PL/Parrot would need to special-cased for every language? | ||
| atrodo | whiteknight> Yes. Because it's not just Rakudo that wants those security measures. It's every HLL should be able to ask for the same level of security | ||
| not_gerd | that would somehow defeat its purpose, methinks | ||
| whiteknight | moritz: yes, it does depend on what I mean by that word | ||
| moritz | whiteknight: for me it's "better" if parrot does it, in that I as a HLL developer don't have to work hard to get the feature | ||
| whiteknight | atrodo: we can build in things like that to our own opcode sets, or our own built-in pmc types. But rakudo provides many of its own | ||
| atrodo | moritz> And probably get it wrong | ||
| whiteknight | when somebody else runs C code outside the parrot core, we have no defense against it. I can't tell parrot to prevent you from running arbitrary C code in one of your own extensions | 14:17 | |
| moritz | and I don't expect that part to be secure | ||
| atrodo | whiteknight> What about systems that accepts PBCs? Like imagine a parrot applet | ||
| moritz | but currently you can only do harm in rakudo through parrot's IO subsystem | ||
| whiteknight | moritz: okay, but Rakudo is a great example in that it has a *lot* of custom code | 14:18 | |
| atrodo: what about it? | |||
| atrodo | whiteknight> what about security with those systems? PL/Parrot being a perfect example. | ||
| whiteknight | atrodo: again, what about it? | 14:19 | |
| atrodo | How would you purpose to secure it? | ||
| whiteknight | secure it from what? From whom? What is and is not considered "secure"? | ||
| if security means "We should be able to restrict IO". tjat | 14:20 | ||
| that's a flag that we can set | |||
| and I suspect people want more than a simple flag | |||
| moritz | whiteknight: some people want constraints on memory and CPU usage too | ||
| NotFound | Some upper level must stablish a security arena and its policys, parrot must provide the mechanic to allow that. | ||
| atrodo | Malicious users. In all aspects. Outside users should never be able to do things that the users in control don't want them to. | ||
| whiteknight | if it means we should be able to toggle on or off certain opcodes or vtables, that's a simple API that people can say "turn this off" | ||
| atrodo: so you have malicious users with the ability to execute arbitrary PBC files, and it's parrot's job to be the last line of defense? | 14:21 | ||
| atrodo: at that point, the battle is long over | |||
| atrodo | whiteknight> Then what's the difference between a pbc and .jar? Has java already lost the battle then? | 14:22 | |
| whiteknight | if we have a security subsystem that allows certain features to be toggled, and the attacker has access to modify those settings, who cares what the PBC contains? | ||
| now, if what we want is the ability to speculatively load packfiles and verify them before we commit their contents to the global environment, that's something that we can do | 14:23 | ||
| NotFound | The feature of toggling that features is the first that need access control. | ||
| whiteknight | NotFound: so we would have certain features in Parrot that would require system user permissions to perform? | 14:24 | |
| NotFound | whiteknight: some upper level has control, it stablishes the policy and call controlled code, probably on a secondary intrepreter/runner/thread/whatever. | 14:25 | |
| whiteknight | I'm not saying that we can't do security, or that we shouldn't, or anything like that. What I'm saying is that it's hard to do and people keep saying "what about applets" or "we need security" without putting forward a lot of specifics | ||
| and there are going to be trade-offs. We need users to tell us exactly what they are willing to give back, or go without | |||
| because if we start implementing security, and we start to see regressions anywhere in the spectrum, you can be damned sure we're going to hear about it and have to have some kind of emergency intervention to "fix" a release the day before it ships | 14:28 | ||
| NotFound | I think that before attempting to implement something we should have a better design of the interpreter/thread/context thing. | ||
| whiteknight | or if we put in security, and it isn't 100% what somebody wants, they're going to have to implement their own versions and put together ugly workarounds to get past the parrot version, and then complain that Parrot doesn't do what users need | ||
| atrodo | whiteknight> moritz gave a very simple example and very specific features. The response was "rakudo should do it". I now have no hope that parrot will ever have any security worth anything if that's the response given. I'm out of this. | 14:30 | |
| whiteknight | atrodo: that was not the response. I said it sounds like those are things Rakudo could do better, becuase of the nature of Rakudo | ||
| Rakudo has a lot of custom C code, and Parrot can't secure that. That means Rakudo is going to have at least two security systems in place, which it will need to manage | 14:31 | ||
| other HLLs or projects are hardly in the same situation | |||
| moritz | none of the C code in rakudo is security relevant | ||
| whiteknight | Rakudo currently has it's own custom object model, so Parrot cannot prevent the creation of specific object types, or prevent the call of specific object methods | 14:32 | |
| moritz | (for this type of security at least) | ||
| whiteknight | Rakudo has custom Ops, which Parrot can't secure, prevent, or replace | ||
| Parrot can put in all the security in the world, and very little of it will be able to help Rakudo | |||
| moritz | whiteknight: rakudo does all its IO through parrot's IO, which means that it instatiates parrot PMCs | 14:33 | |
| whiteknight: which are not 6model based at all | |||
| whiteknight | moritz: like I said, we can do something about IO. That's trivial really, depending on the solution we want | ||
| I am highly skeptical that it is going to be more than a drop in the bucket of Rakudo security needs | |||
| NotFound | I don't think that disabling opcodes, vtables or pmcs is the better way to set barriers. Subsystems can do, and we can ask HLLs to use that subsystems | ||
| whiteknight | NotFound: Right. That's easy to do, for types and things that Parrot core provides | 14:34 | |
| but again, almost nobody uses 100% parrot core stuff. Everybody has custom code they're calling, or custom classes, or custom NCI bindings | |||
| NotFound | NCI is a big issue here. | 14:35 | |
| whiteknight | It seems stupid to me, and maybe that's just my problem, for us to secure 50% of things and tell users that they are on their own | ||
|
14:36
PacoLinux_ joined
|
|||
| whiteknight | or give some kind of guarantee that Parrot is safe, so long as you don't choose to run any code that isn't safe | 14:37 | |
| atrodo | whiteknight> As a epilogue, it's an extremely frustrating subject for me because I've had to pass on two major projects simply because parrot has no security and no easily accessible framework for adding security measures | 14:39 | |
| whiteknight | to secure Parrot core, and to hell with extension code, we would need: the ability to restrict certain opcodes, the ability to prevent creation of certain PMC types, the ability to restrict certain methods and/or vtables on PMCs, the ability for two-stage loading of packfiles, and the ability to prevent a child interp from interacting with a parent interp | 14:40 | |
| JimmyZ would like to see a detailed rfc lists that users want what security parrot offers | |||
| whiteknight | atrodo: I understand the frustration. I do. I would like to have these features, and would certainly work to implement them, if we knew exactly what was needed and what users expected | ||
| JimmyZ: I would like that too | 14:41 | ||
| the fact that, I think, many of these security features are tightly coupled with various refactors and fixes I already have planned is a good thing | 14:42 | ||
| Here are some simple questions we need answered: Do we want security at the whole VM level, at the level of individual interpreters, or at the level of the context? | 14:43 | ||
| dalek | kudo/nom: df376ba | tadzik++ | src/Perl6/Grammar.pm: Allow any non-whitespace string as a =config type identifier. Fixes S26 parsing |
||
| whiteknight | are users willing to give up the current NameSpace system, or allow radical backwards-incompatible changes to it? | 14:44 | |
|
14:44
PacoLinux_ joined
|
|||
| whiteknight | how are we supposed to verify a pbc file, besides tests for basic structure conformity or checksums? | 14:44 | |
| JimmyZ | well, I don't think security features is important things now | 14:45 | |
| whiteknight | does a single binary of Parrot need to be both securable and open depending on settings, or can we use different compilations for different usages? | ||
| not_gerd | can I add a header to platform/win32 or is there a better place to put a macro which needs to be used from several platform-specific files? | ||
| no other platform dir contains any header files... | 14:46 | ||
| whiteknight | how do we handle security issues on Windows? On embedded devices? when Parrot is embedded into a larger program with its own settings? | ||
| JimmyZ | can we steal some ideas from java? | ||
| whiteknight | we can | ||
| JimmyZ | or can parrot | ||
| whiteknight | if what they do is good | ||
| JimmyZ | if they are better than parrot :) | 14:47 | |
| whiteknight | if they are better than what parrot would eventually do on it's own | ||
| I don't want to copy a design that is not better than something we could do ourselves | |||
| M0 is going to decrease our reliance on binary extensions, which is good for security. However, it is going to increase our dependence on FFI, which is bad | 14:49 | ||
| namespace and bytecode refactors are going to do a lot for security, but the transition is going to be very messy, and lead to lower bytecode loading performance, probably | 14:50 | ||
| JimmyZ pays more attention to threads, 6model on parrot, PCC | |||
| whiteknight | threads raises a whole other bag of worms. If we have a lock-based concurrency model, it will be trivial and undetectable for a malicious user to craft bytecode in such a way that it deadlocks | ||
| or hell, in 4 lines of code I can write an infinite loop that would lock up a machine and make it vulernable to DOS attacks | 14:51 | ||
| figuring out exactly what is meant by security is important, because there are lots of different, unrelated things to think about and we can't protect everything from every attack | 14:52 | ||
| dalek | kudo/nom: 8336468 | pmichaud++ | NOMMAP.markdown: Add <!before> to NOMMAP. |
15:07 | |
| dukeleto | ~~ | 15:14 | |
| whiteknight | dukeleto: We're talking security today. I know you had some ideas from your PL/Parrot work. Want to share your thoughts? | 15:31 | |
|
15:40
dmalcolm joined
|
|||
| dalek | kudo/nom: 3f57585 | jonathan++ | src/Perl6/Actions.pm: Be sure to apply traits for regexes with the same ordering we do methods. |
15:49 | |
| kudo/nom: 0999de1 | jonathan++ | src/Perl6/Actions.pm: Action method for trait_mod:<will>. |
|||
| dukeleto | whiteknight: sure. PL/Parrot needs a lot more security than Parrot provides natively, so I had to fake some of it | 15:52 | |
| whiteknight | dukeleto: What I'm really looking for are some of the specifics. What exactly needs to be secured and how? | ||
| dukeleto | Parrot has some vague idea of "opcode groups", but they never make it out of the build system. For instance, I want to be able to disable all file I/O in a given Parrot interp | 15:53 | |
| whiteknight: instead of doing this hackery: github.com/leto/plparrot/blob/mast...secure.pir | |||
| whiteknight | okay, so we need to be able to disable certain opcodes. I assume we also need to be able to disable certain PMC types? | ||
|
15:53
rurban joined
|
|||
| whiteknight | ewww... | 15:54 | |
| dukeleto | whiteknight: the pmc's that I care about are just wrappers around opcodes, so I think if the opcodes are removed, then that would be enough | ||
| whiteknight | okay, we don't want that | ||
| dukeleto | whiteknight: yeah, that is one of the hackiest hacks I've ever done | ||
| whiteknight | dukeleto: but even in the case of FileHandles, you can call methods on FileHandle that write to output handles without calling any ops | 15:55 | |
| dukeleto | whiteknight: also, interps should not know anything about each other, and definitely I should not have to pass in the first ever created interp to create subsequence interps. I created a TT about that a while back (as well as for opcode groups) | ||
| whiteknight | any ops besides normal method calls | ||
| yeah, the interp parent thing is a problem with the threading system, and it's going to stay until we rip out or fundamentally refactor threading | |||
| okay, so let's say I have a new PMC type SandboxInterp, which is like an ordinary interpreter in that it assumes it is the top-level and doesn't try to access a parent interp for anything | 15:56 | ||
| dukeleto | whiteknight: it would be preferable to be able to disable opcodes at compile time, i.e. when PL/Parrot is compiled. Not sure exactly how that would work. | ||
| whiteknight: i like it | |||
| whiteknight | so I can create a new SandboxInterp, initialize it, have the parent toggle certain settings like you do in your example (but with an official API), and then set it loose | 15:57 | |
| dukeleto | whiteknight: it would also be nice to disable or selectively disable network IO | ||
| whiteknight: that sounds very pleasant | |||
| whiteknight | dukeleto: We can do the same trick for Socket PMC as you do there for File and FileHandle | 15:58 | |
| again, with a better API | |||
| dukeleto | whiteknight: indeed. I think Socket PMC inherits from FileHandle, so that is covered in my hacky example, iirc | 15:59 | |
| whiteknight: removing the ability to eval code in an interp would be another thing, i.e. the interp can only load already-existing bytecode and PIR, but cannot compile new code at runtime. Again, not sure how hard that would be | 16:00 | ||
| whiteknight | okay, so SandboxInterp would have methods on it to remove or replace certain types by name. It would have methods to remove or replace compregs | 16:01 | |
| dukeleto | actually, I can't decide if plparrot_secure.pir is the hackiest thing I've ever done, or plparrot_make_sausage() github.com/leto/plparrot/blob/mast...rot.c#L531 | ||
| whiteknight | you know, these are code examples you should probably keep secret :) | 16:02 | |
| dukeleto | whiteknight: yeah, i think that went out the window when I pushed to github. My only defense is that without the power of whiskey, that code would not exist. | 16:03 | |
| whiteknight | so is that what we need for security, just the ability to create and modify sandboxes? | ||
| that seems thin to me | |||
| dukeleto | whiteknight: it surely would greatly increase the current security features of parrot now, which are basically nil | 16:04 | |
| whiteknight | The whiteknight/frontend_parrot2 branch is going to be a big help in that regard, because we can change all these settings from a PIR bootstrap instead of through a complicated C API | ||
| although I don't have an ETA yet for that branch | |||
| dukeleto | whiteknight: whiskey gave me the fortitude to read all the postgres header files to reverse engineer all that junk, and then I never went back to refactor and make the code pretty. One of these days... | 16:05 | |
| whiteknight | whiskey: is there anything it can't do? | ||
| dukeleto | whiteknight: i like not having to do stuff from C | ||
| whiteknight | I rewrote the parrot frontend in winxed. I'm a bit of a fanatic | ||
|
16:06
theory joined
|
|||
| whiteknight | dukeleto: in the time it would take me to put together a sandboxing solution like I described, could we have some concrete plans for where to go next? You said it was a good start, but would it really be a building block for the system we ultimately want? | 16:07 | |
| or, would it be a distraction from the best possible system? | 16:08 | ||
| benabik | "I'm going to open my laptop. If the code isn't refactored in an hour, send more whiskey." | ||
| whiteknight | "you know what? Just send more whiskey" | 16:09 | |
| dukeleto | whiteknight: would love to get your feedback on trac.parrot.org/parrot/ticket/1500 | 16:11 | |
| whiteknight: it is an old TT that needs love | |||
| whiteknight: as well at this one trac.parrot.org/parrot/ticket/1697 | |||
| whiteknight: and if you could comment on my "not needing a parent interp" TT, describing your sandbox api, that would be awesomesauce: trac.parrot.org/parrot/ticket/1880 | 16:13 | ||
| whiteknight: if you had that sandbox solution, that would motivate me to hack on PL/parrot more, and give it a proper security model, which in turn would probably point out some missing features from the Parrot-side, and start a nice code-design whirlpool | 16:16 | ||
| not_gerd | can I rely on the fact that Parrot_str_free_cstring() just calls mem_sys_free() on its argument? | 16:17 | |
| whiteknight | not_gerd: no. It won't always, depending on the GC. Only use it if you have a cstring you got from a Parrot string | 16:18 | |
| not_gerd: in the future we might cache them, so free_cstring won't actually do anything | 16:19 | ||
| or we might not, so call it anyway to avoid leaks | |||
| dukeleto | whiteknight: looks like this thread patch fell through the cracks, and might fix our intermittent netbsd failing threads test. Can you take a look at it? trac.parrot.org/parrot/ticket/1340 | 16:20 | |
| dalek | TT #1917 closed by dukeleto++: Parrot_api_make_interpreter() cause a crash when another interpreter ... | 16:22 | |
| TT #1917: trac.parrot.org/parrot/ticket/1917 | |||
| whiteknight | threading needs to be deleted, not patched | 16:29 | |
|
16:32
davidfetter joined
|
|||
| whiteknight | and before anybody suggests otherwise, we have version control and will always have a record in case we want to salvage some ideas from it | 16:32 | |
|
16:34
contingencyplan joined
|
|||
| not_gerd | I'm off for now, but I would appreciate it if someone took a look at github.com/gerdr/parrot/commit/79f...16fe2aff2d and told me if there's a gross violation of Parrot conventions | 16:37 | |
| whiteknight | not_gerd++ | 16:39 | |
| dukeleto | whiteknight: +1 to deprecating current threads. But seemingly we should have a replacement ready before ripping it out. But yes, it isn't really worth fixing at this point. | 16:41 | |
| jnthn__ figures m0 has a threading plan worked out. | 16:42 | ||
| well, hopes. | |||
| whiteknight | dukeleto: that's the same thing people have been saying. Let's just keep the garbage around until we have non-garbage to replace it with | 16:44 | |
| and then, we can keep the garbage and non-garbage around together, so we can make a smooth transition | 16:45 | ||
| jnthn__: We have lots of ideas floating around. Most of them deal only peripherally with M0 | 16:47 | ||
|
16:57
Eclesia joined
|
|||
| Eclesia | hi | 16:57 | |
| whiteknight | hello Eclesia | ||
| Eclesia | hi bubaflub, found the fix on gmp ? | 17:04 | |
| bubaflub | Eclesia: not yet. going to need some more info from your system parrot. | ||
| Eclesia | sure, just ask and how to get those | ||
| dukeleto | jnthn__: i don't think m0 has a threading spec yet | 17:12 | |
| whiteknight: i understand your frustration. We ripped out the old JIT without having a smooth transition, so there is precedent for not keeping around "garbage" | |||
| whiteknight: i think we need to see if anybody is using the current threads at all. I really don't know. | 17:13 | ||
|
17:20
ligne joined
|
|||
| cotto_work | ~~ | 17:25 | |
| dalek | TT #2179 closed by jkeenan++: Bug in setup-parrot-3.6.0.exe broke PATH | 17:26 | |
| TT #2179: trac.parrot.org/parrot/ticket/2179 | |||
|
17:30
mj41 joined
17:32
autark joined
17:33
mj41 joined
|
|||
| Coke | benabik: (Sometimes #parrot seems to be full of people who don't like parrot but keep working on it anyway for some inexplicable reason.) ... Wow. I think you just summed up my entire involvement. ;) | 17:37 | |
| nopaste | "coke" at 192.168.1.3 pasted "bikeshed changelog" (18 lines) at nopaste.snit.ch/73950 | 17:46 | |
| Coke | So, originally, changelog was "changes" which happened intra-release, and were per user. Now all that is in news, which is per release. I honestly don't think we need to note the user or the date at all - those are in parrothist, anyway. | 17:50 | |
| nopaste | "coke" at 192.168.1.3 pasted "bikeshed changelog" (17 lines) at nopaste.snit.ch/73951 | 17:51 | |
| Coke | anything in changelog that predates that can keep its date/name marker. | ||
|
17:56
mikehh joined
|
|||
| whiteknight | did anybody else in the area just feel an earthquake? | 17:58 | |
| atrodo | if by area, you mean eastern us, nope | 17:59 | |
| cotto_work | earthquake.usgs.gov/earthquakes/ | 18:00 | |
| whiteknight | 5.8 in virginia. definitely shook our building | ||
| Coke | FYI, we have 86 releases mentioned in NEWS. | 18:01 | |
| dalek | kudo/nom: c8be361 | tadzik++ | src/Perl6/Pod.pm: Fix Pod::Config regression |
||
| kudo/nom: 16bad5c | tadzik++ | / (2 files): Allow multi-line Pod block configuration |
|||
|
18:05
not_gerd joined
|
|||
| cotto_work | From what I remember, the reason given for keeping the current threading code around wasn't that someone's likely to be using it, rather that there might be enough useful code to benefit a proper implementation. | 18:07 | |
| plobsing | the platform abstractions might be useful, but the stuff for working with interps and the PMC types are utter garbage | 18:08 | |
| bubaflub | can't we just delete it since we have source control? we can always resurrect it later. | 18:09 | |
| whiteknight | like I said, it's not like we're deleting the entire history | ||
| the platform abstraction stuff is decent, but it's also a relatively small portion of the total | 18:10 | ||
| plobsing | I'd argue that even the platform abstractions, while useful, could be recreated in about 1 person-day of reading win32/posix docs | ||
| cotto_work | plobsing: weren't you the one who was advocating keeping the existing code around for possible future reuse? | 18:11 | |
| plobsing | I advocated keeping around the platform abstractions. I've since changed my mind. I reserve the right to do that from time to time. | 18:12 | |
| whiteknight | plobsing is one of the big reasons I haven't jumped on it yet | ||
| cotto_work | Certainly. Anyone may reserve the right to change his or her mind at any time. | ||
| whiteknight adds this to the pile of "branches I need to create" | |||
| cotto_work | If you're going in the wrong direction, progress means turning around. | 18:13 | |
| whiteknight | I love branches where most of the work is Ctrl+A and Del | 18:15 | |
| makes me feel warm and fuzzy inside | |||
| plobsing | git rm is always fun to use | ||
| whiteknight | rm -rf / | 18:18 | |
| MUAHHAHAHAHA | |||
| plobsing | rm: it is dangerous to operate recursively on `/' | ||
| rm: use --no-preserve-root to override this failsafe | |||
| too bad | 18:19 | ||
| whiteknight | oh yeah, I forgot they added that | ||
| plobsing | even if they didn't I don't have the perms | ||
|
18:19
Eclesia1 joined
|
|||
| whiteknight | if you have physical access to the machine, almost exactly the same result can be obtained with a hammer and a chisel, with or without perms | 18:20 | |
| of course, you will need to buy a new drive | |||
| atrodo | whiteknight> apparently, some people felt it out here. At least that's what my wife has told me | ||
| whiteknight | atrodo: I've heard reports as far away as toronto, but I don't know how accurate they are | ||
| NYC definitely | |||
| I work in a very old stone-and-brick building, so I got the hell out | 18:21 | ||
| plobsing | true, but I still think it is a good idea not to run with perms required to blow away your machine unless and until you need to do important configure-y stuff. | ||
| bubaflub | my Pittsburgh co-workers had to evacuate their office building | 18:23 | |
| plobsing | whiteknight: Didn't feel anything in Waterloo ON (~1hr from T.O.) | 18:24 | |
| whiteknight | that's good. It's nice to hear a sane, first-hand account | 18:25 | |
|
18:34
rohit_nsit08 joined
|
|||
| rohit_nsit08 | hello #parrot | 18:35 | |
| tadzik | hello rohit_nsit08 | ||
| rohit_nsit08 | tadzik: hello | 18:36 | |
| dalek | kudo/nom: 6ad7834 | moritz++ | tools/build/Makefile.in: fix bug from 19cfd13 that made Sub !~~ Callable |
18:37 | |
|
18:38
theory left
|
|||
| whiteknight | hello rohit_nsit08 | 18:39 | |
| rohit_nsit08 | whiteknight: hello, have submitted the final report on gsoc site, but was having doubt about what should I do now , I am willing to finish my work as corella is still not complete | 18:42 | |
| whiteknight | rohit_nsit08: I haven't tested it recently. I will have to look at it | ||
| rohit_nsit08: can you write a short summary about what is done and what needs to be done? | |||
| rohit_nsit08 | yes sure,' | 18:43 | |
| dalek | rrot: a136a32 | fperrad++ | tools/dev/mk_inno.pl: [win32] fix TT#2179 |
||
| Coke | jmckinley.posterous.com/dc-earthqua...evastation | 18:49 | |
| I think the pencils down date marks the end of code-to-be-considered-for-evaluation. | |||
| cotto_work | Coke: that's my understanding | ||
| Coke | Doesn't mean you cannot keep working in that repository. | ||
| if that's it, might be worth doing a tag of GSOC_PENCILS_DOWN_2011 or something. | 18:50 | ||
| NotFound | In the automake mailing list I've seen a suggestion of creating a new branch to keep working, and let the original branch intact for the evaluation. | 18:51 | |
| cotto_work | Coke++ # that link made my officemates happy | 18:52 | |
| Coke | cotto_work: I opened it actually fearing the worst! | 18:53 | |
| NotFound: that would also work; as long as there is some way to say "this is what goes to google". | |||
| bubaflub | NotFound, Coke, and rohit_nsit08: previous years of GSoC we could keep working in the original repo even on the original branch; you are simply required to upload only the code that was written between the start and the end date. | ||
| if you're in git, you can filter your commits by start date and end date and then generate a huge diff and upload it to Google | 18:54 | ||
| Coke | bubaflub: aye. tag just makes it pretty. ;) | ||
| bubaflub | agreed. | ||
| rohit_nsit08 | hmm.. got it . | 18:55 | |
| tadzik | I used git log 'HEAD@{23-05-2011}'..'HEAD@{22-08-2011}' -p --author='Tadeusz SoÅnierz' | ||
| whiteknight | rohit_nsit08: hey, I'm looking at the corellaScript repo, and I don't see the source code for your PIR code generator | 19:14 | |
| is that not checked in? | |||
|
19:16
soh_cah_toa joined
|
|||
| rohit_nsit08 | whitknight: ?? wait , let me check , all the PIR codegen functions contain the code for PIR generation | 19:20 | |
| whiteknight | rohit_nsit08: so corella.js is the code generation source? There isn't an original file somewhere? | 19:21 | |
| Coke | is corella.js a generated file? | ||
| ah, too slow. | |||
| rohit_nsit08 | corella.js is the original compiler file except the bottom code which is for testing it on node | 19:22 | |
| the topmost portion contains the parser and after that are the tree node generating functions | 19:23 | ||
| below that are the PIRcodegen functions | |||
| program execution starts from the "Program" node | |||
| whiteknight | okay, so that's the file you wrote, and there aren't original files anywhere? | ||
| rohit_nsit08 | my code is actually in the code generator part , in the original functions I have tried to get PIR | 19:24 | |
| by reading the tree and than executing the code generator functions on the specific nodes | |||
|
19:25
davidfetter joined
|
|||
| rohit_nsit08 | the parser and node generating part is similar to the "cafe" compiler's parser.js file | 19:25 | |
| but it was using commonjs libraries somewhere so I removed them | 19:26 | ||
| Coke hurls: www.modernperlbooks.com/mt/2011/08/...-code.html | |||
|
19:26
PacoLinux_ joined
|
|||
| Coke | a sad read. | 19:26 | |
| atrodo | Coke> I was just reading it | 19:27 | |
| A sad read indeed | |||
|
19:29
lucian joined
|
|||
| rohit_nsit08 | whiteknight: it is the corella.js file that needs to be compiled at the end , class folder contains the js data types | 19:29 | |
| whiteknight | yeah, I saw that. I'm just making sure I'm not missing anything | 19:30 | |
| rohit_nsit08: and you used the cafe grammar for javascript, right? | |||
| rohit_nsit08 | ya the same grammar, It was taking time to understand the whole grammar from various books, so I finally decided to go with the same grammar, but I did cross checked it with ecmascript | 19:31 | |
| whiteknight | okay | 19:33 | |
|
19:35
Eclesia1 left
|
|||
| rohit_nsit08 | whiteknight : Isn't there any standard that checks whether a grammar is complete or not, I mean is it possible that cafe's grammar is not exactly what javascript is? | 19:36 | |
| whiteknight | rohit_nsit08: no automated way. The only way we would know is to run lots of tests | ||
| cotto_work | #ps in now | ||
| rohit_nsit08 | whiteknight: tests as in ? like I tested different codes and studied the AST generated and I tried to get PIR from the same AST . Don't think it was the best way though | 19:40 | |
|
19:41
schmooster joined
|
|||
| whiteknight | rohit_nsit08: I'm sure there are test suites somewhere for other JS implementations | 19:41 | |
| cotto_work | nine: if you're online, we're doing our weekly meeting in #parrotsketch | 19:47 | |
| rohit_nsit08 | whiteknight: ya , actually I was thinking about the grammar part. and it can only be tested after we have a compiler using that grammar | 19:50 | |
| whiteknight | right | ||
|
19:50
lucian joined
19:53
lucian joined
|
|||
| dalek | nxed: f5c6f7c | NotFound++ | winxedst (2 files): implement predefined constant __DEBUG__, harcoded to false for a now |
19:55 | |
|
20:01
rohitnsit08 joined,
rohitnsit08 left
|
|||
| whiteknight | NotFound++ | 20:06 | |
|
20:15
rurban joined
20:27
PacoLinux_ joined
|
|||
| dalek | rrot: 2268530 | cotto++ | config/gen/makefiles/root.in: don't assume $(MAKE) == make in release make release is broken on windows/msvc. This makes it a little less broken. |
20:50 | |
|
20:50
davidfetter joined
|
|||
| Coke | cotto++ | 20:52 | |
| that was on my list of things to get around to. ;) | |||
| cotto_work | Coke: that's not the last step. | 20:55 | |
| I wish I could fix it further, but I've spent a lot of time on Parrot stuff already and need to do what $dayjob is paying me to do. | |||
| Coke will do a make release on windows after killing NEWS. | 21:02 | ||
| dalek | TT #2183 closed by cotto++: sha256 problem encountered during 'make release' | ||
| TT #2183: trac.parrot.org/parrot/ticket/2183 | |||
| cotto_work | Coke++ | ||
| dalek | nxed: 3004909 | NotFound++ | winxed (3 files): implement setting __DEBUG__ in stages and non installed driver |
21:06 | |
| nxed: cebd3a8 | NotFound++ | winxed_installed.winxed: implement setting __DEBUG__ in installed driver |
21:13 | ||
| nxed: 1938085 | NotFound++ | pir/winxed_ (2 files): update installable files |
21:14 | ||
| rrot: b84af47 | NotFound++ | ext/winxed/ (2 files): update winxed snapshot to 1938085ba1: * __DEBUG__ predefined constant - --debug command line option |
21:27 | ||
| allison | BTW, a long time ago we talked about a Parrot test suite that could be run on an *installed* Parrot. | 21:34 | |
| AFAIK, there's been no work on it, but I need it now for packaged Parrot. | 21:35 | ||
| The Rakudo packagers keep finding issues in the installed Parrot, because they are building their own packages on to depend on it. | |||
| These are often small install problems, that could have easily been identified by even a simple test suite. | 21:36 | ||
| But they aren't discovered before I upload the Parrot packages, because I run the test suite on the Parrot build directory, not on the installed Parrot. | |||
|
21:42
particle joined
|
|||
| NotFound | allison: the winxed tests exercise a lot of parrot features, and can be run from a installed parrot. | 21:45 | |
| cotto_work | Would such a test suite just be another makefile target that ran against whichever parrot is in the $PATH? | ||
| or more precisely, whichever parrot_config is in the path | 21:48 | ||
| allison | cotto_work: ideally, yes, they would be able to be run against any parrot, including one specified with a command-line flag to pick out a specific parrot_config | 21:54 | |
| cotto_work: which means, they could even be run against parrot in the build directory | |||
| cotto_work | something like make test parrot_config=/usr/local/foo/bin/parrot_config | ||
| allison | (no point in wasting tests by limiting them to only running on an installed parrot) | 21:55 | |
| aye | |||
| cotto_work: it could be make install_test parrot_config=/path... | 21:56 | ||
| cotto_work: if we still have some tests that can only run in the build directory | |||
| cotto_work | allison: how urgent is this? | 21:57 | |
| allison | cotto_work: it's affected every package I've built so far this year, so it's enough of a priority for me that I'm willing to invest some time in it | ||
| cotto_work: if we have a clear consensus on how to do it that makes the most sense for Parrot | 21:58 | ||
| (or, something roughly approximating consensus) | |||
| NotFound: the winxed tests are a good first stab, but over time I'd like to expand the test suite with regression tests from real issues we've found in various language implementations | 22:00 | ||
| NotFound: so, I really want a sensible place to hang the tests within the core Parrot test suite | |||
|
22:02
mj41_nb joined
|
|||
| NotFound | We may need a special purpose harness that does not depend on standard handling of shebang lines. | 22:04 | |
| cotto_work | allison: you can always start a branch. We can maintain a whitelist or blacklist of tests that work (or don't) with an installed parrot. | 22:23 | |
|
22:31
davidfetter joined
23:03
bubaflub joined
|
|||
| dalek | kudo/nom: 54e85a2 | tadzik++ | src/Perl6/ModuleLoader.pm: Accept .pm6 as a module file extensions, prefer it to .pm if both are present |
23:13 | |
|
23:23
kid51 joined
|
|||
| kid51 | aloha, clock? | 23:51 | |
| aloha | kid51: LAX: Tue, 16:51 PDT / CHI: Tue, 18:51 CDT / NYC: Tue, 19:51 EDT / UTC: Tue, 23:51 UTC / LON: Wed, 00:51 BST / BER: Wed, 01:51 CEST / TOK: Wed, 08:51 JST / SYD: Wed, 09:51 EST | ||
| moderator | Trac maintenance Aug 24 17:00 UTC | Parrot 3.7.0 "Wanda" | parrot.org | Log: irclog.perlgeek.de/parrot/today | #parrotsketch meeting Tuesday 19:30 UTC | 23:59 | |
| moderator | Trac maintenance Wed Aug 24 17:00 UTC | Parrot 3.7.0 "Wanda" | parrot.org | Log: irclog.perlgeek.de/parrot/today | #parrotsketch meeting Tuesday 19:30 UTC | ||