|
Parrot 1.7.0 "African Grey" is out! | Fix issues caused by the pcc_reapply and context_auto_attrs merges | find out what's up with the slice opcode | Latest modified TT's: icanhaz.com/parrotbugs Set by moderator on 1 November 2009. |
|||
|
00:05
ash_ joined
00:07
brooksbp_ joined
|
|||
| NotFound | clear winxed style, revision 2: winxed -e "print((new 'FileHandle').open('tput clear', 'rp').readall())" | 00:08 | |
| Try that with python X-) | 00:09 | ||
|
00:13
payload joined
00:29
theory joined
00:48
brooksbp joined
00:53
abqar joined
01:18
Whiteknight joined
01:26
b0nk joined
|
|||
| b0nk | lo | 01:26 | |
|
01:28
JimmyZ joined
|
|||
| Whiteknight | hello | 01:33 | |
|
01:33
ash_ joined
01:35
mokurai1 joined
01:36
b0nk joined
|
|||
| JimmyZ | Whiteknight: hello, good localtime. | 01:41 | |
| Whiteknight | hello JimmyZ | 01:43 | |
|
01:44
kiwichris joined
01:55
kid51 joined
02:04
mokurai joined
02:06
cognominal joined
02:18
JimmyZ joined
|
|||
| dalek | TT #1174 created by kjs++: Disallow .local declarations in long-style call statement | 02:21 | |
| ash_ | so, Whiteknight, i had some questions about L1 if your not busy | 02:25 | |
| Whiteknight | ash_: sure thing | 02:27 | |
| ash_ | I guess, first off, i have been reading your posts on L1, and chromatics, and looking through the things on the wiki on L1, hows that going? I am curious about how thats going to work | 02:29 | |
| I guess, some of the things that confuse me are if L1 is going to emit C code, can it only statically compile stuff? | |||
| i am confused how all of that works together really | 02:30 | ||
| if your going to have a compiler for L1 code, or just runtime support for it | |||
| dalek | tracwiki: v6 | coke++ | StringsTasklist | 02:31 | |
| tracwiki: trac.parrot.org/parrot/wiki/String...ction=diff | |||
| tracwiki: v7 | coke++ | StringsTasklist | 02:37 | ||
| tracwiki: trac.parrot.org/parrot/wiki/String...ction=diff | |||
| chromatic | What we'll eventually execute is only Lorito ops. | 02:39 | |
| Whiteknight | ash_: L1 is just another programming language that has a very simple translation into machine language | 02:42 | |
| so instead of writing things in C, we write it in Lorito, which can be compiled down to machine language just like C | |||
| except simpler then C | |||
| the easy mapping between Lorito and machine code means that anything written in Lorito can be compiled ahead of time, or JIT'd at runtime without much effort | 02:43 | ||
| once we have a Lorito "compiler", we can rewrite all our ops definitions in Lorito instead of C | |||
| Coke | RT: 126 | 02:44 | |
| Whiteknight | now, consider the case where Lorito is LLVM code, or a thin superset of that. LLVM does the conversion Lorito->machine code natively | 02:45 | |
| dalek | rrot-linear-algebra: 8b58ae2 | Whiteknight++ | (2 files): add an is_equal vtable and tests. Add tests for the clone vtable using the new is_equal functionality |
||
| rrot-linear-algebra: 1bcaec7 | Whiteknight++ | t/10-nummatrix.t: add tests for the resize method |
|||
| rrot-linear-algebra: b844ab6 | Whiteknight++ | (2 files): upgrade the is_equal vtable to handle lazily tranposed matrices. This isn't good for performance, but we can optimize later. Add tests for transpose and mem_transpose methods |
02:46 | ||
| rrot-linear-algebra: 66f7571 | Whiteknight++ | t/10-nummatrix.t: add tests for fill method |
|||
| Whiteknight | so now, for things like the fast core or switch core, LLVM can compile them down to machine code ahead of time. But for the JIT core we can assemble ops definitions together into large methods, and compile that as a group | ||
| ...and optimize as a group | |||
| in short, Lorito will serve the same purpose as C is currently serving (low-level implementation language) except it has the property that it's very very simple and amenable to JIT | 02:47 | ||
| dalek | tracwiki: v8 | coke++ | StringsTasklist | 02:50 | |
| tracwiki: trac.parrot.org/parrot/wiki/String...ction=diff | |||
| dukeleto | what does the underscore function do in this line of code? : Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_OUT_OF_BOUNDS, _("Array: Unknown slice type")); | 02:52 | |
| that is from line 647-648 in src/pmc/fixedpmcarray.pmc | |||
| currently that call to _ is blocking porting to RTEMS, it shows up as undefined at link time with the cross-compiling setup | 02:53 | ||
| any body know what is up with it? | |||
| include/parrot/parrot.h | 02:55 | ||
| 236:# define _(s) gettext(s) | |||
| 242:# define _(s) (s) | |||
| what the junk is up with that? | |||
|
02:56
Zak joined
|
|||
| chromatic | l10n and i18n | 02:56 | |
| dukeleto | chromatic: i see, says the blind man | 02:57 | |
| the calls to _() are blocking porting to RTEMS right now | |||
| chromatic | Somehow you have to get the #define on line 242 then. | ||
| nopaste | "dukeleto" at 69.64.235.54 pasted "Current link failure on RTEMS port" (23 lines) at nopaste.snit.ch/18527 | 02:58 | |
| dukeleto | this was given to me, run against parrot 1.6.0 | ||
| chromatic | Somehow they're defining PARROT_HAS_GETTEXT then. | 02:59 | |
| dukeleto | chromatic: and they shouldn't? | 03:00 | |
| chromatic: what kind of gettext's do we support? | |||
|
03:07
kiwichris joined
|
|||
| dalek | TT #1175 created by particle++: Get external Perl5 modules out of the parrot repo | 03:07 | |
| Coke | I would dig up particle, as I recall he's behind any attempts at gettext. | 03:11 | |
| ... unless this is just a x-compilation issue. | 03:12 | ||
| dukeleto | 'ello | 03:13 | |
|
03:13
theory joined
|
|||
| dukeleto | msg particle are you the gettext() man? | 03:13 | |
| purl | Message for particle stored. | ||
| dukeleto | msg particle fix this: nopaste.snit.ch/18527 and you get a pony | 03:14 | |
| purl | Message for particle stored. | ||
| chromatic | They should only define that symbol if they support libintl.h and if it's installed somewhere Parrot can find it during compilation. | 03:16 | |
|
03:17
brooksbp joined
03:18
mokurai1 joined
03:20
brooksbp joined
|
|||
| dukeleto | chromatic: ok, i think i have worked passed that issue with them | 03:21 | |
| chromatic: now we are dealing with powl() being an optional posix extension | |||
| we should have a Configure-time check for wether powl exists | 03:26 | ||
| pct? | 03:29 | ||
| purl | it has been said that pct is the Parrot Compiler Toolkit | ||
| Coke | kid51++ # forcing me to change my email as I was composing by closing a ticket. | 03:30 | |
| dukeleto: yes. instead of that define hackery, there should be a config check for it. | 03:31 | ||
| (and then you can override it for that platform.) | |||
| dalek | TT #1176 created by dukeleto++: Configure-time check for whether to use powl() or pow(), since powl() is ... | 03:33 | |
| dukeleto | powl isn't even needed either. pretty hilarious. just youthful indescretion | 03:35 | |
|
03:36
janus joined,
RobertLJ joined
|
|||
| Coke | if it's not needed, kill it? | 03:37 | |
| dukeleto | Coke: let me see if the test suite passes if I change it to pow() | 03:38 | |
| kiwichris | Ah ok. | 03:39 | |
| dukeleto | kiwichris: hell! | ||
| hello, even | |||
| dukeleto is too excited | |||
| #if NUMVAL_SIZE == DOUBLE_SIZE | 03:40 | ||
| # define POW pow | |||
| #else | |||
| # define POW powl | |||
| #endif | |||
| lulz | |||
| that is wronger than wrong | |||
| /* local macro to call proper pow version depending on FLOATVAL */ | |||
| kiwichris: you are using the released version of parrot 1.6.0, correct? | 03:42 | ||
| kiwichris: does rtems fiddle with NUMVAL_SIZE ? | 03:43 | ||
| kiwichris | dukeleto, I downloaded 1.6.0 from the Parrot web site and no I do not know. I need to build on Linux (FC9) then change for RTEMS. | ||
| dukeleto, there could all sorts of things I have missed. The FC9 box is 64bits. Does that help ? | |||
| dukeleto | kiwichris: it is another part of the puzzle :) | 03:45 | |
| kiwichris | dukeleto, I am looking for the define now. I suspect it is the wrong size. Have had this before. | ||
| dukeleto | kiwichris: what I can infer is that NUMVAL_SIZE != DOUBLE_SIZE on whatever you are compiling/linking. I am just wondering if that is correct. | 03:46 | |
| kiwichris | dukeleto, #define NUMVAL_SIZE 4, and #define DOUBLE_SIZE 8 | 03:47 | |
| dukeleto, I am building for a 32bit i386 | 03:48 | ||
| dukeleto | kiwichris: i guess it comes down to powl() being optional. we should check for it, but we don't | ||
| we assume that if NUMVAL_SIZE != DOUBLE_SIZE , powl() should be used. i guess that is just not always true. | 03:51 | ||
| powl() should only be used if it exists | |||
| kiwichris | kiwichris, agreed | ||
| chromatic | powl() is C99 and POSIX 2001. powl() returning only a double, not long double, is C89. | 03:53 | |
|
03:59
Andy joined
|
|||
| kiwichris | dukeleto, Any idea what Parrot_set_config_hash is ? | 04:01 | |
| dukeleto | kiwichris: hmmm | 04:02 | |
| kiwichris: what trouble is it causing you? | 04:03 | ||
| kiwichris | dukeleto, unresolved external | ||
| dukeleto, called in main.c | |||
| dukeleto | kiwichris: src/parrot_config.c | 04:05 | |
| src/parrot_config.c | |||
| 15:void Parrot_set_config_hash(void); | |||
| 'make coretest' passes on darwin/x86 when I change POW to be pow() | 04:06 | ||
| Coke | dukeleto: as a stopgap, you could change the define to also respect something you coudl pass in with -DNOREALLYUSEPOW | 04:10 | |
| dukeleto | Coke: if 'make fulltest' passes with just using POW=pow, can I commit that? | ||
| Coke | dukeleto: I abstain. | 04:12 | |
| but if you close 10 RTs, I'll vote yes. =-) | |||
| msg pmichaud will nqp-rx make it easier to implement the tcl RE syntax? | 04:14 | ||
| purl | Message for pmichaud stored. | ||
| Coke | is there a way to change the output of Parrot_sprintf_format so that there are no leading 0s on an exponent? | 04:29 | |
| (or do I have to post-process it myself?) | 04:30 | ||
| dukeleto | Coke: i don't know about sprintf | 04:31 | |
| Coke: the new nqp-rx runs faster and has variable interpolation and implements the perl 6 regex spec more correctly | |||
| Coke: i would guess that interpolation is the biggest win for you | 04:32 | ||
| Coke: 'make fulltest' passes when I change POW=powl to POW=pow | |||
| Coke | dukeleto: my offer of a yes vote for closing out 10 RTs still stands. =-) | 04:34 | |
| dukeleto | Coke: ok. I am verifying that fulltest also passes on linux. I will look at some RTs :) | 04:35 | |
| kiwichris | dukeleto, fixed the last external and all links. Many thanks. Will try and run in qemu. | 04:37 | |
| dukeleto | kiwichris: awesome! | 04:38 | |
| purl | awesome is a window manager or at awesome.naquadah.org or awesome! | ||
| dukeleto | purl, go play in traffic and die in a fire | ||
| purl | dukeleto: excuse me? | ||
| dukeleto | purl, go play in traffic and die in a fire is on the double! | ||
| purl | OK, dukeleto. | ||
| dukeleto | purl, go play in traffic | 04:39 | |
| purl wanders off to dent some cars. | |||
| dukeleto | kiwichris: let me know how to replicate the qemu+grub+rtems+parrot setup. I am excited to try it myself | 04:40 | |
| kiwichris | dukeleto, will do. I will clean up a little and try and get a patch then upload so you can try. | ||
| dukeleto | kiwichris: also, if you need to make a public package of something, it would be great if you could use parrot 1.7.0 | ||
| kiwichris: but a patch against 1.6.0 is very useful to us as well | 04:41 | ||
| kiwichris | dukeleto, does that mean using svn ? | ||
| dukeleto | kiwichris: nope. just downloading the 1.7.0 tarball | ||
| kiwichris: ftp://ftp.parrot.org/pub/parrot/releases/devel/1.7.0/ | |||
| kiwichris | dukeleto, thanks | 04:42 | |
| dukeleto | kiwichris: it looks like our latest dev release link never got updated. that is my fault | ||
| www.parrot.org/release/developer points to 1.6.0 still. that is wrong | |||
| kiwichris | dukeleto, ah ok now I understand | ||
| dukeleto | kiwichris: you can work off of 1.6.0 or 1.7.0, but if it is not too much trouble, 1.7.0 is the latest release | 04:46 | |
| kiwichris | dukeleto, I will work off 1.7.0. Will see if what I have can run. Battling grub again. | ||
| dukeleto | kiwichris: it hopefully has less bugs and more features :) | 04:47 | |
| kiwichris: grub is a formidable devil | |||
| kiwichris | dukeleto, it is nice when it is working ... just getting to that point ..... | ||
| dukeleto | kiwichris: indeed. | 04:50 | |
| dalek | rtcl: ae412db | coke++ | t/cmd_expr.t: Add a test for this issue. |
||
| dukeleto is running fulltest on linux with POW=pow | |||
|
04:53
szabgab joined
|
|||
| kiwichris | dukeleto, runs until the following error PackFile_set_header: Unsupported floattype NUMVAL_SIZE=4, PARROT_BIGENDIAN=little-endian | 04:53 | |
| dukeleto, must still have some problems in may hacking of the config | 04:54 | ||
| nopaste | "dukeleto" at 69.64.235.54 pasted "nqp-rx depends on a non-release version of parrot" (11 lines) at nopaste.snit.ch/18528 | ||
| dukeleto | kiwichris: can you post the full error on nopaste.snit.ch ? | ||
| kiwichris | dukeleto, That is it. | ||
| dukeleto | kiwichris: there is an option there to post the link to the channel | 04:55 | |
|
04:56
ash__ joined
|
|||
| dukeleto | Coke: fulltest passes on linux with POW=pow | 04:56 | |
| nopaste | "kiwichris" at 58.172.128.7 pasted "RTEMS parrot on i386 qemu fails" (2 lines) at nopaste.snit.ch/18529 | 04:57 | |
| dukeleto | kiwichris: src/packfile.c | 05:01 | |
| 1305: exit_fatal(1, "PackFile_set_header: Unsupported floattype NUMVAL_SIZE=%d," | |||
| kiwichris: are you playing around with PARROT_BIGENDIAN ? | 05:02 | ||
| kiwichris: what is NUMVAL_SIZE ? | |||
| kiwichris: oh, it is 4. duh | |||
| kiwichris | dukeleto, Not BE but yes NUMVAL_SIZE | 05:03 | |
| dukeleto | kiwichris: we don't seems to have a branch for NUMVAL_SIZE=4 | ||
| s/seems/seem/ | |||
| kiwichris | dukeleto, what us NUMVAL_SIZE ? | ||
| s/us/is/ | |||
| dukeleto | kiwichris: it is defined in include/parrot/config.h | 05:05 | |
| /* We don't have a portable config for 64-bit * registers yet. */ | |||
| that comment does not sit well with me | |||
| kiwichris | dukeleto, but I am only 32bits. We do not support 64bit targets yet. It is happening but on the PC. | ||
| dukeleto | are you defining NUMVAL_SIZE=4 somewhere? we set it to 8 and then it gets changed from under us, it looks like. | ||
| kiwichris | dukeleto, The linux that did the configure is 64bits | 05:06 | |
| dukeleto | kiwichris: that could be an issue | ||
| kiwichris: but I am not sure | |||
| kiwichris | dukeleto, yeap I suspect so. I will dig around later for a 32bit Linux host and see what it reports. | 05:07 | |
| dukeleto, have to run and again many thanks for the help. It is close now | |||
| dukeleto | kiwichris: awesome, thanks for the great work! | 05:08 | |
| dalek | rrot: r42217 | dukeleto++ | trunk/src/string/api.c: [cage] Use the math function pow() for now, until we get a configure-time check for powl(), which is an optional POSIX extension |
05:15 | |
| TT #1177 created by dukeleto++: test buffer_size in t/pmc/parrotio.t | 05:23 | ||
| dukeleto | does NCI currently support the 'long long' datatype? | 05:26 | |
| dalek | TT #1178 created by dukeleto++: Test get_fd in t/pmc/parrotio.t | ||
| TT #1179 created by dukeleto++: Test open file, close file, delete file, reopen previously opened stream | 05:29 | ||
| dukeleto | Ticket 46827: Permission Denied | 05:30 | |
| i can't seem to close some RT's | |||
| pmichaud | Coke: Yes, nqp-rx will make it much easier to implement the tcl re syntax | 05:36 | |
| msg Coke yes, nqp-rx will make it much easier to implement the tcl re syntax | 05:39 | ||
| purl | Message for coke stored. | ||
| dukeleto | pmichaud: ping! | 05:44 | |
| Coke | danke. | ||
| pmichaud | dukeleto: pong | ||
| Coke: writing a p5 syntax parser for nqp-rx is on my todo list | 05:45 | ||
| Coke | dukeleto++ | ||
| dukeleto | pmichaud: so in general, you will attempt to make released versions of nqp-rx that are pegged to released versions of parrot? | ||
| pmichaud | explicitly so that we can then create a real tcl-rx | ||
| dukeleto: can't say for sure | |||
| Coke | pmichaud: spif. danke. | ||
| dukeleto | pmichaud: i am trying to work out how parrot should utilize nqp-rx | ||
| Coke | dukeleto: those tickets are still open, btw. | 05:46 | |
| pmichaud | because nqp tends to target the _next_ parrot release (as opposed to the previous one), tying to the previous parrot release doesn't make a lot of sense | ||
| dukeleto | pmichaud: also, how do you feel about HLL's that require nqp-rx as well as parrot? | ||
| pmichaud: what if you released the week after the parrot release? | 05:47 | ||
| pmichaud | dukeleto: I think that's going to be the norm. | ||
| dukeleto | pmichaud: yep, because I am hacking on github.com/leto/kea and I am going to start with nqp-rx, no matter what :) | ||
| Coke | dukeleto: do you have permission to reject tickets at RT? | ||
| dukeleto | Coke: i just wanted to resolve it | 05:48 | |
| Coke: i guess not? | |||
| pmichaud | so, either parrot bundles a version of nqp-rx, or all of the hll implementors end up requiring it on their own | ||
| Coke | rt.perl.org/rt3/Ticket/Display.html?id=46827, e.g., is still open. | ||
| dukeleto | pmichaud: yeah. which is the better solution? | ||
| Coke | if you can't reject them, I can. | ||
| dukeleto | Coke: i don't think I can reject them, please do if you can. | ||
| pmichaud | personally I think it's better if parrot provides nqp-rx directly, rather than requiring everyone else to get it separately. | 05:49 | |
| dukeleto | Coke: there are about 20 RT tickets about creating tests in t/pmc/parrotio.t . perhaps they all need to be part of a "increase the coverage of parrotio.t to X %" ? | ||
| pmichaud | but this is an important question for libraries in general | ||
| dukeleto | pmichaud: the actual question that arises is "how often does parrot core pull in the latest nqp-rx?" | 05:50 | |
| pmichaud | do we expect parrot-with-batteries libraries to target the previously released version of parrot, or the version of parrot in which the libraries are about to be bundled? | ||
| for example, let's suppose that I have a SQL library that parrot wants to bundle | |||
| dukeleto | pmichaud: there is no doubt that nqp-rx will get in Parrot core. But how often will it be updated? | ||
| pmichaud | does the Jun release of Parrot want to be bundling the SQL library that targets the May release? | 05:51 | |
| or, if we go with "supported releases" | |||
| dukeleto | pmichaud: let us assume that there is a one-time dump of nqp-rx into Parrot core. What kind of update schedule should be after that? | ||
| chromatic | That seems like a leading question. | ||
| pmichaud | does the July release of Parrot want to be bundling the SQL library that is targeting the previous January's release of Parrot? | 05:52 | |
| dukeleto | pmichaud: I don't understand the motivation of the question. | ||
| pmichaud | dukeleto: on #perl6 you said you were concerned that nqp-rx was not targeting a released version of Parrot | ||
| er, that it depends on a non-released version of parrot | |||
| the only alternative for NQP then would be to depend on the most recent version of Parrot | 05:53 | ||
| Coke | dukeleto: they could probably all go to IOTaskList or something (wiki page instead of individual tickets) | ||
| pmichaud | which isn't sufficient enough to support nqp's latest features | ||
| dukeleto | Coke: yeah, managing all those tickets is kind of annoying. they are all about the same test file | ||
| pmichaud | so, if nqp "held back" by only implementing those features that were possible with the Parrot october release | 05:54 | |
| Coke | dukeleto: there is prior art. feel free to put them into a wiki page. | ||
| dukeleto | pmichaud: i think that in the short term, nqp-rx should depend on whatever it wants | ||
| Coke | dukeleto++ | ||
| pmichaud | then in november, when Parrot creates a bundle, it would end up using the nqp that is limited to the prior Parrot release | ||
| Coke | I'll make you a bugmonger on RT. moment. | ||
| dukeleto | pmichaud: i am just trying to understand how parrot should update nqp-rx | ||
| pmichaud | anyway, to answer that question, I would expect parrot to draw from the nqp-rx repository shortly before a parrot release | 05:55 | |
| dukeleto | pmichaud: if there is going to be an nqp-rx "in the wild", parrot has to not conflict with other versions of nqp-rx that are installed that HLL's may be using/expecting | ||
| Coke | dukeleto: or, I would have,if somone didn't delete the rt docs from docs/project... | ||
| dukeleto | pmichaud: so you would be happy with parrot pulling from the nqp-rx repo each month? | ||
| Coke | ah well. feel free to assign tickets that need to be deleted to me, I can close em out. | ||
| (or bug someone here.) | 05:56 | ||
| pmichaud | dukeleto: sure, why not? | ||
| dukeleto | Coke: dealing with RT right now is an enigma wrapped in a word problem | ||
| pmichaud: just verifying | |||
| pmichaud | if it doesn't work out, we can go to a different policy | ||
| dukeleto | pmichaud: this makes git submodules very attractive | ||
| pmichaud | we just need to make sure that we're comfortable with the way it works by the January release | ||
| dukeleto | pmichaud: i think a lot of testing of nqp-rx is about to start | 05:57 | |
| pmichaud | we can try including nqp-rx in the november and/or december releases, then remove it in january if it's not working out. Or even just list it as "experimental" in the january release so that parrot isn't required to support it until July | ||
| dukeleto: there's already been quite a bit of testing of nqp-rx in rakudo :) | |||
| dukeleto | pmichaud: do you have any things that you need tests written for in the nqp-rx test suite? | ||
| pmichaud | we've made amazing accomplishments in the past 72 hours | ||
| we can always use more tests :) | |||
| dukeleto | pmichaud: that is good. I want to make sure plumage still works, too :) | ||
| so nqp-rx will be an external dependency that we sync up with monthly, so as to not give the end user another dependency nor the HLL developer the need to use a "newer" version of nqp-rx | 05:59 | ||
| i think that could work | |||
| i am all for putting nqp-rx into parrot 1.8.0, who is up for it? bernhard is release manager. where is he? | 06:00 | ||
| msg bernhard hello! | |||
| purl | Message for bernhard stored. | ||
| dukeleto | seen bernhard | 06:01 | |
| purl | bernhard was last seen on #moose 18 days, 15 hours, 49 minutes and 19 seconds ago, saying: I will probably also sign up for nanowrimo this year [Oct 14 14:11:34 2009] | ||
| dukeleto | hmm | ||
| pmichaud | if it were me I wouldn't use git submodules. not everyone has (or wants) git on their machine | ||
| so if pulling the parrot repo requires git, that's probably a non-starter. | 06:02 | ||
| dukeleto | pmichaud: are we talking about developer or end-users? | 06:04 | |
| pmichaud | either. both. | 06:05 | |
| dukeleto | pmichaud: because end-users would be using a tarball | ||
| pmichaud | I'm primarily thinking developers. | ||
| dukeleto | pmichaud: so what I am talking about, it when parrot switches to git. we would use nqp-rx as a git submodule | ||
| s/it when/is when/ | |||
| pmichaud | "when parrot switches to git" isn't expected for quite some time, iiuc | 06:06 | |
| as in, not before 2.6 | |||
| dukeleto | pmichaud: i heard not before 2.0, where did you hear 2.6? | ||
| pmichaud | in one of the discussions somewhere on irc or parrotsketch | ||
| chromatic | There's no particular date on it, as I understand. | ||
| dukeleto | pmichaud: the most that I got out of allison, is not before our production release, which is 2.0 | 06:07 | |
| pmichaud | nor even a decision that "parrot is switching to git", iiuc | ||
| dukeleto | pmichaud: parrot will switch to git. the only question is, when? | ||
| Coke | relying on git submodules probably makes as much sense as external svn modules, neh? | 06:08 | |
| if we have an external dependency, just make it external. | |||
| like our perl modules. or the HLL's reliance on parrot. | |||
| dukeleto | pmichaud: i keep a mirror of parrot updated every 2 hours on github: github.com/leto/parrot . Parrot exists in git, we just need to choose a time to switch the canonical repo over | ||
| Coke: yes. | |||
| pmichaud | dukeleto: I've not heard anything that leads me to believe that a git switchover will occur anytime soon. | 06:09 | |
| dukeleto | pmichaud: I am pushing to switch to git at the earliest possible prudent moment. | ||
| pmichaud: I am telling you about it. Right now. It will happen. I promise. | |||
| Coke | dukeleto: ... ok. great. how does this help with nqp-rx? | 06:10 | |
| dukeleto | Coke: nqp-rx is in git. we want to use it as an svn-external, but wait. we can't. because it is in git. | 06:11 | |
| Coke | no, we /don't/ want to use it as an svn-external. | 06:12 | |
| dukeleto | Coke: we want to use it as an external that we can choose with revision/commit to peg to | ||
| Coke | not especially, no. | ||
| dukeleto | s/with/which/ | ||
| Coke: perhaps we are talking past each other. What are you trying to convey to me? | 06:13 | ||
| Coke | there are ways to do this that don't require sync'ing up our version control systems. | ||
| dukeleto: I thought I was pretty clear. Let's just make it a dependency in our toolchain. Or, we could bundle it with. | |||
| dukeleto | Coke: what are these ways? I am talking about a process that is repeated on a time interval. Not a one time thing. | ||
| Coke | we don't need to do any VCS magic to do either of those things. | ||
| pmichaud | we're only talking about *four files*. We don't need an external linkage to make it happen. | ||
| Coke | (it's not like when we bundled icu. =-) | 06:14 | |
| dukeleto | Coke: what do you propose instead of VCS magic? | 06:15 | |
| Coke | dukeleto: ... copying the files in. | ||
| dukeleto | Coke: someone manually copying 4 files every month? | ||
| Coke | or, making an /external/ dependency. | ||
| dukeleto: not every month. | |||
| dukeleto | Coke: this wants to be synced every month | ||
| Coke | why do you think we want to do it every month? it'd be "whenever something interesting happened in nqp" | ||
| dukeleto: not necessarily, no.\\ | |||
| it COULD be yes, not HAS to. | 06:16 | ||
| dukeleto | Coke: or then HLL devs will start requires other versions of nqp-rx that are ahead of the ones in parrot | ||
| Coke | depends on what goes in to nqp-rx. | ||
| dukeleto: they're welcome to do that, of course. | |||
| dukeleto | s/requires/requiring/ | ||
| Coke: yes, they are. but why not give them what they want in parrot core? | |||
| Coke: do we really want to make it harder to use parrot? | |||
| Coke | dukeleto: strawman. how do you know what they want? | ||
| dukeleto: who the hell is suggesting that? | |||
| dukeleto | Coke: because I am writing a HLL right now, and I want to use nqp-rx master | 06:17 | |
| Coke | I know you think I am, of course, it was a leading quesiton. =-) | ||
| dukeleto: really? 'Cause I'd rather use "stable". | |||
| dukeleto | Coke: what is "stable"? It depends on a non-released version of parrot! | 06:18 | |
| pmichaud | ...thus my comment earlier about libraries and bundling. | ||
| Coke | dukeleto: as I understand it, a release of nqp-rx will not rely on any particular version. | ||
| to build it, sure. | |||
| to run it? that's not the impression I got. | |||
| pmichaud | to run, yes, also. | ||
| nqp-rx needs to have certain features from the PAST libraries in Parrot | 06:19 | ||
| those weren't present in 1.7.0 | |||
| dukeleto | Coke: we then invoke dependency hell, having to deal with parrot-with-nqp-rx and nqp-rx-in-the-wild | ||
| Coke | dukeleto: ok. so having it as an external dependency is problematic. Then we can keep it in core. that does not imply we need svn:externals or git submodules. | 06:21 | |
| s/it/a copy of it/ | |||
| dukeleto | Coke: so you are proposing manually copying 4 files every month, again? | 06:23 | |
| Coke | dukeleto: not every month! | ||
| /when necessary/ | |||
| yes. | |||
| dukeleto | Coke: at which frequency? | ||
| Coke | dukeleto: as I said before, that depends on what is happening in nqp-rx. | ||
| pmichaud | dukeleto: why does it need a set frequency? | ||
| dukeleto | Coke: 'when necessary' doesn't compute for me. who would decide 'when necessary'? | ||
| Coke | dukeleto: ... the developers of parrot? | 06:24 | |
| "oh, look, shiny. new thing." | |||
| dukeleto | pmichaud: why do rakudo and parrot release monthly? | ||
| pmichaud | dukeleto: why not "whenever a new version of nqp-rx is available that doesn't break too many things for parrot users" ? | ||
| Coke | the same people who would decide when to update the revision pointed to in a submodule. | ||
| dukeleto | pmichaud: that is not acceptable re: our deprecation policy | ||
| Coke | dukeleto: ... and updating every month regardless of what's going on is? =-) | 06:25 | |
| pmichaud | dukeleto: rakudo and parrot release monthly because we like time-based releases. That _doesn't_ mean that we only grab things from subprojects at monthly intervals | ||
| dukeleto | Coke: but your plan has no definite time to take action. just "wait around" until it is "necessary" which is ambiguous | ||
| Coke | dukeleto: ... kind of like our HLL developers already do with parrot? | 06:26 | |
| pmichaud | ambiguity is no problem | ||
| dukeleto | pmichaud: we like time-based releases because they saved both projects from oblivion | ||
| Coke | (except we'd be hiding this particular decision from them, so they didn't have to worry about it.) | ||
| pmichaud | dukeleto: look, ubuntu does time-based releases, but they don't require their upstream modules to do the same | ||
| dukeleto | pmichaud: rakudo and parrot are a bit different than ubuntu, but I appreciate your point. | ||
| Coke | dukeleto: (time based) ... and parrot will still be doing time based releases; that's not changing. | 06:27 | |
| pmichaud | just because ubuntu includes a copy of perl 5 doesn't mean that they always include the latest copy of perl 5, or whatever version of perl 5 happens to be available at the time of the release | ||
| the people who package the ubuntu release decide what versions of what components to include in that release | |||
| the same would be true for parrot | |||
| dukeleto | pmichaud: I agree with you that we don't need to grab updates for *all* subprojects monthly, but nqp-rx is a really really important subproject | ||
| pmichaud | dukeleto: if nqp-rx is really really important, then there's little chance that it'll get forgotten or ignored or that someone will forget to update the files :) | 06:28 | |
| dukeleto | pmichaud: yes, I would like to believe that, what I want to create processes that withstand changes of guard, etc... | ||
| pmichaud: everyone is excited to merge nqp-rx now. what about in a few years? | |||
| s/what I want/but I want/ | 06:29 | ||
| Coke | dukeleto: what if nqp-rx breaks master and we're on time based includes? | ||
| pmichaud | if people aren't merging nqprx in a few years, it'll be because one of (1) it's really stable, (2) nobody needs it any more | ||
| Coke | you need someone to /decide/. | ||
| dukeleto | Coke: I AM THE DECIDER | ||
| Coke | we can make it trivial to copy in the new files. | ||
| we can automate it more if we move to git, sure. | 06:30 | ||
| pmichaud | nah, The Decider lives a few miles from here. :) | ||
| Coke | dukeleto: then I presume you will keep on top of merging nqp-rx for some time. | ||
| chromatic | If it's external, people who want a newer version can use a newer version on their own. | ||
| pmichaud | since Rakudo will be heavily dependent on nqp-rx, I'm certain that *I'll* be on top of it for some time. :) | ||
| dukeleto | How do we tell users of parrot which version of nqp-rx we are bundled with? | ||
| pmichaud | nqp-rx is likely to have version numbers one way or another | 06:31 | |
| dukeleto | say it in parrot_nqp --version ? | ||
| Coke: Ahem. | |||
| Coke | dukeleto: ? | ||
| pmichaud | right now I'm thinking of "release.commit" | ||
| so that 1.234 would be 234 commits after release 1 | |||
| dukeleto | chromatic: yes. | 06:32 | |
| pmichaud | (since git doesn't have sequential revision numbers like svn) | ||
| dukeleto | pmichaud: directed acyclic graphs aren't linear :) | ||
| pmichaud | they're linear in master | 06:33 | |
| particle1 | use tags | ||
| dukeleto | particle: welcome to the party | ||
|
06:33
Zak joined
|
|||
| Coke | particle: you have RT tickets assigned to you. =-) | 06:33 | |
| pmichaud | I don't need a unique number for the whole repo... I just need a number for the master branch | ||
| particle | hello, and goodnight | ||
| pmichaud | particle: I could use a small bit of time to chat about S19 with you | ||
| (not tonight, but sometime soon-ish) | 06:34 | ||
| dukeleto | particle: you are always one to ruin the party ;) | ||
| particle | ok, can do tomorrow | ||
| pmichaud | great | ||
| that would be perfect | |||
| particle | ah, the enemy of the good... | ||
| bedward & | |||
| dukeleto | pmichaud: a linear graph is an example of a DAG, but the entire history of a repo is not a linear graph | ||
| pmichaud | dukeleto: I don't have to keep track of the entire history | 06:35 | |
| dukeleto | pmichaud: touche. git does it for you :) | ||
| pmichaud | all I have to do is say "how many commits in the master branch since tag 'xyz'?" | ||
| Coke | -> zzz | ||
| dukeleto | pmichaud: that ain't a bad scheme. | 06:36 | |
| pmichaud | since that number will then be hardcoded in the four files that are produced upon making a release, it's unique-enough | ||
| and it's consistently increasing | 06:37 | ||
| perljam also suggested a date-based scheme, which I'm also considering. Just record an ISO date and use that. | |||
| dukeleto | pmichaud: the date-based version is longer, but gives more information. your call. | 06:38 | |
| pmichaud | well, I'm also waiting to see if there's a good concensus around including nqp-rx in parrot. Because if that happens, one can identify nqp-rx by its parrot revision number :) | ||
| dukeleto needs a drink | 06:40 | ||
| pmichaud | on migration to git, last I heard was from the 09-29 parrotsketch meeting: | 06:41 | |
| 19:17 | |||
| Second q: On git, chromatic and I propose to table the migration discussion for now. | |||
| 19:18 | |||
| Util | |||
| +1 | |||
| purl | 1 | ||
| pmichaud | |||
| 19:18 | |||
| allison | |||
| We can't migrate until after 2.0 or maybe even 3.0 for stability of development process anyway. | |||
| oops, sorry for copy-paste spamo | |||
| dukeleto | pmichaud: yes, I remember that. "2.0 or maybe 3.0" | 06:42 | |
| pmichaud: I shall get a definitive answer about which. | |||
| pmichaud: I don't see any reason for waiting to 3.0 unless our aim is to actively reject new parrot developers | 06:43 | ||
| pmichaud | dukeleto: I'm already on record as being very in favor of moving parrot to git. | ||
| dukeleto goes in search of $food | |||
| pmichaud: yes! duly noted ;) | 06:44 | ||
| dalek | p-rx: 81afeca | pmichaud++ | src/Regex/P6Regex/Grammar.pm: [p6regex]: Argument value computed incorrectly -- fixed. |
06:50 | |
| p-rx: c65b0dd | pmichaud++ | src/Regex/P6Regex/ (2 files): Refactor p6regex's handling of argument lists. |
|||
| p-rx: 218e91c | pmichaud++ | src/stage0/ (3 files): Stage 0 files update. |
|||
| p-rx: 195e47c | pmichaud++ | src/NQP/Grammar.pm: Allow <assertion(args)> to use NQP expressions as arguments. |
|||
| p-rx: a10d983 | pmichaud++ | src/stage0/ (3 files): Update stage-0 files. |
|||
| nopaste | "kiwichris" at 58.172.128.7 pasted "RTEMS parrot runs, now what ?" (3 lines) at nopaste.snit.ch/18530 | 07:00 | |
|
07:10
uniejo joined
|
|||
| Coke | kiwichris: getting a make test run? | 07:12 | |
| must zzz. | |||
| kiwichris | Coke, RTEMS does not have a make. It is all cross-compiled. | 07:20 | |
|
07:33
fperrad joined
07:56
baest joined
07:57
iblechbot joined
|
|||
| dalek | TT #1180 created by moritz++: examples/nci/ls.pir prints only lines with one character each | 08:09 | |
|
08:37
gaz joined
08:48
Zak joined
09:03
cosimo joined
09:50
Austin_away joined
10:29
ask joined
10:46
mikehh joined
11:01
mikehh joined
11:15
mokurai1 left
11:18
mikehh joined,
kj joined
11:21
rob joined
11:29
Andy joined
11:34
mikehh joined
11:47
mikehh joined,
krunen joined
11:51
KatrinaTheLamia joined
11:57
mikehh joined
12:21
mikehh joined
12:47
whiteknight joined
12:48
kid51 joined
|
|||
| whiteknight | good morning #parrot | 12:50 | |
| kid51 | good morning whiteknight | ||
| whiteknight | hello kid51, how are you today? | ||
| kid51 | good; soon to go to $job | 12:51 | |
|
12:51
payload joined
|
|||
| kid51 | whiteknight: At a high level, where do we stand with respect to areas like JIT? GC? Lorito? | 12:51 | |
| whiteknight | Lorito is basically the implementation path for JIT, so they are one and the same at the high level view | 12:52 | |
| kid51 | Is it plausible to expect this to be in by 2.0 (Jan 2010)? | ||
| whiteknight | for both GC and JIT, we're still in planning/design stages, though we are building significant interest | 12:53 | |
|
12:53
masak joined
|
|||
| whiteknight | I suspect we will have at least one in place for 2.0, yes | 12:53 | |
| depends how things go | |||
| Coke | msg kiwichris (no make) - well, you could use the perl tool "prove", or just "perl t/harness" to get a first approximation. | 12:54 | |
| purl | Message for kiwichris stored. | ||
| kid51 | Now a different question. Background first. | ||
| Coke | JIT for 2.0 ? I wouldn't say that's feasible at all. | ||
| kid51 | I've been able to whip the configure and build tools into good shape by writing tests -- where which tests I write are guided by coverage analysis. | 12:55 | |
| Since I've been working my way thru the PIR book, I'm starting to get a little facility for writing tests in PIR. | |||
| Coke | cover? | ||
| purl | cover is not at link? | ||
| kid51 | Assuming I get time to become fluent in PIR, how would I use the coverage analysis on Parrot to guide which tests I write. | ||
| Coke | coverage? | 12:56 | |
| purl | well, coverage is cv.perl6.cz | ||
| Coke | e.g. tapir2.ro.vutbr.cz/cover/cover-resu...t-ops.html | 12:57 | |
| (which has 0 coverage which is questionable) | |||
| perhaps addressing why that has 0 first, but I think that's the best avenue. | 12:58 | ||
| kid51 | But what I'm getting at is the "mapping" between test files and source code files. | ||
| To clarify: | |||
| Coke | kid51: there isn't a direct mapping. | ||
| kid51 | If I write more tests for t/steps/auto/arch-01.t, I know to expect improvements in coverage for config/auto/arch.pm. | 12:59 | |
| And those coverage results guide the next tests I write. | |||
| Is it possible to establish such a feedback loop for the C, PIR, ops components? | 13:00 | ||
|
13:00
plobsing joined
|
|||
| whiteknight | kid51: I'm not sure of any good way, no | 13:00 | |
| what I do, on the few occasions I write these kinds of tests, is to try to trace uncovered functions back to the opcodes that call them | 13:01 | ||
| not always an easy task | |||
|
13:02
payload joined
|
|||
| Coke | part of the problem with that mapping is that you don't really use the opcodes in isolation. | 13:05 | |
| but, as far as feedback loops: get the coverage of .ops files in that URL to reflect reality, then drive them up. | 13:06 | ||
| even if it's not a 1:N correspondence between file/opcode, that's still moving things in the right direction. | |||
| (also PMCS, since you can see those from PIR and invoke them.) | |||
| e.g.: | 13:07 | ||
| tapir2.ro.vutbr.cz/cover/cover-resu...e-pmc.html - line 223 | |||
| that references a trac ticket, but is never invoked. perhaps the trac ticket has some sample PIR that caused the original segfault that we could include as a regression test. | 13:08 | ||
| tapir2.ro.vutbr.cz/cover/cover-resu...b-pmc.html is a slightly easier example; there are overrides to certain vtables which should throw exceptions that are never tested. that's a pretty straightforward test. | 13:09 | ||
|
13:11
rob left
|
|||
| Coke | mdiep++ # deleting old parrot version | 13:11 | |
| ( from cpan) | |||
|
13:23
Andy joined
13:35
payload joined
13:53
riffraff joined
13:57
Andy joined
|
|||
| dalek | rrot: r42218 | coke++ | trunk/t/pmc/parrotio.t: remove reference to rejected ticket. |
14:00 | |
|
14:03
Andy joined
|
|||
| Coke | RT: 120 | 14:04 | |
| surely someone could copy over 5 tickets. =-) | |||
|
14:22
ash_ joined
|
|||
| Coke | coverage? | 14:25 | |
| purl | coverage is cv.perl6.cz | ||
| dalek | TT #1181 created by coke++: make cover doesn't show coverage of *.ops files. | 14:31 | |
|
14:44
bubaflub joined
14:58
iblechbot joined
|
|||
| Coke | RT? | 15:05 | |
| purl | rumour has it RT is just RT (bestpractical.com/rt) or (:rt3) or (: rt bugs) or Obra's trouble ticketing system or the first IBM RISC workstation (www.contrib.andrew.cmu.edu/~shadow/ibmrt.html) or the bombsquad or the Right Thing or very very capable and open-source or an application framework that bundles a ticketing system or obra's baby or SOOOO slow :-S or email mailto:perlbug-owner@perl.org for access | ||
| Coke | parrot RT? | ||
| purl | parrot RT is probably rt.perl.org or rt.perl.org/rt3/Public/Bug/Display....id=$bugnum | ||
|
15:06
Andy joined
|
|||
| masak | re trac.parrot.org/parrot/ticket/1134 -- I cannot reproduce the problem anymore. maybe somebody++'s work on some Parrot guts solved or hid the problem. | 15:25 | |
| do I close the ticket? | 15:27 | ||
| Coke | if the OP cannot duplicate the segfault, that seems reasonable. | 15:28 | |
|
15:30
Psyche^ joined
|
|||
| masak | oki. | 15:30 | |
| hm. I don't seem to have the privs to close it. | 15:31 | ||
| Coke | just comment on it, the magic ticket fairy will close it. | 15:32 | |
| masak | :) | ||
|
15:33
ash_ left
|
|||
| dalek | TT #1134 closed by coke++: Extremely weird stack trace produced my Parrot when allocating things in a ... | 15:35 | |
| whiteknight | good 'ol magic ticket fairy | 15:44 | |
| Coke | if only he'd clean up RT for me. | 15:51 | |
| dukeleto++ | |||
| kid51++ | |||
| Essobi | heh | 15:52 | |
|
15:52
Essobi left
|
|||
| dalek | rrot: r42219 | coke++ | trunk/runtime/parrot/library/Getopt/Obj.pir: remove comment referencing rejected ticket. |
15:56 | |
| rrot: r42220 | coke++ | trunk/src/oo.c: remove comment for rejected ticket. |
16:03 | ||
| rrot: r42221 | coke++ | trunk/compilers/imcc/cfg.c: remove comment for rejected ticket. |
16:06 | ||
| Coke does the equivalent of tr/// to find out how many /'s there are in CFMX. | 16:13 | ||
| Coke feels a little wrong. | |||
| dalek | a: a8170ec | fperrad++ | (2 files): start to implement debug.getinfo() |
16:25 | |
| rrot: r42222 | pmichaud++ | trunk (2 files): Fix MultiSub PMCs so that they stringify to the name Also change the "No applicable methods" exception to be much more informative, by reporting "No applicable candidates found to dispatch to for '$subname'." |
16:33 | ||
| bubaflub | hey ya'll, can parrot be a target language for SWIG bindings? | 16:34 | |
| maybe that's a bad question | |||
| cotto_work | good morning | ||
|
16:35
brooksbp joined
|
|||
| whiteknight | good morning | 16:38 | |
| bubaflub: I don't know a lot about SWIG bindings. what are the requirements? | |||
| bubaflub | the idea is that i could write some SWIG interfaces to a C module | 16:39 | |
| and it'll output code in a bunch of different languages for native interface | |||
| Coke | swig? | ||
| purl | hmmm... swig is a competitor to XS. or simplified wrapper and interface generator/bifrost.lanl.gov/~dmb/SWIG/Doc1.1/Perl5.html///www.swig.org/ or at bifrost.lanl.gov/~dmb/SWIG/Doc1.1/Perl5.html or simplified wrapper and interface generator or at www.swig.org/ | ||
| Coke | swig tutorial is www.swig.org/tutorial.html | ||
| bubaflub | java, python, perl 5 modules, etc. | ||
| wow, that said it better than i could have | 16:40 | ||
| Coke | so, it should be possible to generate the appropriate parrot code there. | ||
| moritz | it would "just" be another NCI compiler, no? | 16:41 | |
| Coke | it wouldn't be the preferred method of getting to C, that'd be NCI. "what moritz said" | ||
| but it should be possible to add us as a swig target, if someone has already written the swig template. | |||
|
16:43
frodwith joined
|
|||
| Coke wonders if a swig on parrot POC would be helpful. | 16:43 | ||
| bubaflub | ah, cool. just wondering. | ||
| i thought it may be helpful getting some modules available to parrot | |||
| as there may be some stuff already out there | |||
|
16:57
PerlJam joined
|
|||
| japhb | fperrad, ping | 16:59 | |
|
17:00
theory joined
|
|||
| Coke | japhb: if you could close|migrate RT# 56628, that'd be awesome. | 17:01 | |
| japhb | Coke, I may have lost my access info to RT, lemme see | 17:02 | |
| japhb is WAY backlogged today | |||
| dukeleto | 'ello | 17:04 | |
| bubaflub: i was talking to a SWIG guy about just that at the gsoc conf | 17:05 | ||
| bubaflub | dukeleto: no way. | ||
| i saw you had some work on Math::GMP::SWIG | |||
| dukeleto | bubaflub: since swig already talks XS, if it also spoke PIR/PASM, we would have a bridge between them | 17:06 | |
| japhb | Coke: OK, I think I'm going to just doc that ticket out of existence. | ||
| dukeleto | bubaflub: we need the docs for how to add a new target langauge (PIR/PASM) to swig | 17:07 | |
| bubaflub | hmmmm | ||
| japhb | Woah, couple few Parrot updates since Saturday | ||
| bubaflub | i'll root around | ||
| dukeleto | bubaflub: your mission, should you choose to accept it ... | ||
| Coke | japhb: that would be awesome. | ||
| bubaflub | haha. i haven't bisect'd to see where make -j fails yet, but finding docs should be easy | ||
| dukeleto | bubaflub: you should really add dies_ok() and those other tests that use lives_ok() and dies_ok(), first. That is a lot less work :) | ||
| bubaflub: i am pretty sure the pcc_reapply merge broke make -j, don't worry about bisecting that | 17:08 | ||
| bubaflub | ok | ||
| Coke | I think make -j is working fine now. | 17:10 | |
| dukeleto | Coke: you are dead sure of this? it was broke for a while | ||
| Coke: and it was broke for me about 2 days ago, still | |||
| Coke | I've been having no trouble with it. YMMV. | 17:11 | |
| Coke investigates. | |||
| Coke tries a -j 20 | 17:12 | ||
| bubaflub | i think the problem may be after a make realclean | 17:13 | |
| i just ran -j 4 no problem, but only a few files needed to be re-made | |||
| Coke | dukeleto: works fine here. | 17:15 | |
| if you find a problem, open a ticket with the build log, easy enough to fix. | |||
| dukeleto | Coke: are you doing make realclean; perl Configure.pl; make -j 4 ? | 17:16 | |
| Coke: it only fails after a realclean | |||
| nopaste | "coke" at 72.228.52.192 pasted "how I build parrot all the time." (7 lines) at nopaste.snit.ch/18533 | 17:17 | |
| moritz now tries on 4 cores with -j (no limit) | |||
| dukeleto | Coke: that is similar to what I have. And -j was broke for a while. Perhaps someone fixed it in the last few days | ||
| Coke | Some deps were added in the past week. More I cannot say. | 17:18 | |
| I squawk loudly if I get bit by that, as I had to spend time fixing it the first time. | |||
| moritz | wow, that works | ||
| dalek | kudo: 74f561e | moritz++ | src/setting/Complex.pm: call .perl on $.re and $.im in Complex.perl |
||
| Coke | moritz: what works? | ||
| moritz | Coke: building with -j after realclean | ||
| Coke | moritz: why wouldn't it? | ||
| oh, because of aforementioned bug? | |||
| moritz | eys | ||
| *yes | 17:19 | ||
| or because of resource limits :-) | |||
| Coke | I remember the dark times, when Configure.pl said, "dont' use -j" | ||
| stupid dark times. | |||
| dukeleto | Coke: you must not have noticed, because it was broke since the pcc_reapply merge until recently | ||
| moritz | dukeleto: no | ||
| it was fixed pretty soon after the merge | |||
| maybe it broke again, and was fixed again | |||
| dukeleto | bubaflub: wasn't it broke for you, just a few days ago? | 17:20 | |
| moritz | iirc | ||
| dukeleto | moritz: sinusoidal bugs! | ||
| Coke | in any case, if it's failing, open a ticket. | ||
| moritz | real 0m1.255s for make -j | ||
| dukeleto | Coke: tickets welcome! check. | ||
| moritz | and user 0m3.544s | ||
| Coke | moritz: is that after a realclean? what is that, a 64-core machine? | 17:21 | |
| bubaflub | dukeleto: it was. i can run it again on my machine from trunk | ||
| moritz | Coke: after a realclean and Configure.pl, 4 cores | 17:22 | |
| dukeleto | bubaflub: sure, make sure it works for you, and if it doesn't, open a ticket and assign it to coke++ ;) | ||
| Coke | aha. found a bug. -j20 worked, -j failed. checking... | ||
| dalek | rrot: r42223 | japhb++ | trunk/config/auto/opengl.pm: [OpenGL] Document Cygwin native v. X conflicts to resolve RT 56628 |
||
| bubaflub | bahaha. roger wilco | ||
| dukeleto | Coke: THE HORRORS | ||
| Coke | (finding bugs is a crapshoot with -j) | ||
| "make clean;make src/oo.o" | 17:23 | ||
| whiteknight | Coke: that causes a problem? | 17:24 | |
| japhb | Coke, RT #56628 now resolved. Is that the only RT that was assigned to me? | 17:26 | |
| Coke | whiteknight: yes. it depends on .h files that don't exist. | 17:27 | |
| whiteknight | oh, hotness | ||
| Coke | not to mention the .str file. | ||
| fixed. | |||
| dukeleto: let me know if you can find another failure. | |||
| (if folks are bored, trying to do a 'make clean; make <object file>' is a boring but effective way to find these issues. | 17:28 | ||
| (did I mention boring?) | |||
| bubaflub | ooooh i'm bored! | ||
| actually, i'm at work, working on parrot | 17:29 | ||
| which is a great way to get paid to work on parrot | |||
| also a great way to get fired | |||
| dalek | rrot: r42224 | coke++ | trunk/config/gen/makefiles/root.in: Fix dependencies for src/oo.c |
||
| Coke | I think ideally we'd want a 'make depend' target that detected these things and made sure they were in the makefile. | ||
| Coke | japhb: if you close the ticket, be sure to cc the list. | ||
| dukeleto | Coke: we could write a test for that | ||
| Coke: the "make-sure-nobody-broke-make-j" test. | 17:30 | ||
| Coke | dukeleto: i started to. the payoff for the work involved wasn't enough for me. | ||
| dukeleto | Coke: the test that gets you tarred and feathered if you break it on trunk | ||
| Coke | some things are just easier to fix after the fact. | ||
| (but yes, if it magically appeared, that'd be nice. =-) | |||
|
17:32
Patterner joined
|
|||
| Coke | japhb++ # closing tickets. | 17:33 | |
| (note, that's plural! do another to earn that karma!) | 17:34 | ||
| japhb | Coke, I'm actively trying to right now. :-) | 17:35 | |
| Coke, did you do the CC, or should I go back and do so? | |||
| dalek | tracwiki: v114 | jkeenan++ | WikiStart | 17:36 | |
| tracwiki: trac.parrot.org/parrot/wiki/WikiSt...ction=diff | |||
| Coke | I didn't. I've been checking at the end of the day for closed tickets to do that; if you do it now, +1. | ||
| japhb | Coke, is there some link or button that does that, or do I now need to copy & paste? | ||
| Coke | Just reply to your comment. | 17:39 | |
| with a note "cc'ing final response to list" or some such. | 17:40 | ||
| japhb | Coke, done | 17:42 | |
| Coke | japhb++ | ||
| whiteknight | kid51: ping | 17:45 | |
| Coke | whiteknight: he's at work all day. | 17:46 | |
|
17:47
solarion joined
|
|||
| whiteknight | purl msg kid51 could you take a look at RT #37934 (again)? My initial inclination is to reject it for now, but if you think it's reasonable to do I won't just close it | 17:47 | |
| purl | Message for kid51 stored. | ||
| Coke | whiteknight: I wouldn't reject that. | 17:48 | |
| having a config.log to post for tickets would be nice. | |||
| whiteknight | it would be nice, but if nobody's going to actually implement it, and if it's just some "would be nice" pipedream, then it's just taking up space | 17:49 | |
| that's why I'm asking kid51: If anybody is actually interested in implementing it, good. | 17:50 | ||
| Coke | just like JIT? | ||
| nice to have, but... | |||
| (yes, that's not exactly a 1:1 mapping) | 17:51 | ||
| but "no one is interested in writing it now" is not a valid reason to delete a ticket. | |||
|
17:53
brooksbp joined
|
|||
| whiteknight | Coke: RT #40438, you're doing this right now in partcl, right? | 17:54 | |
| (adding PIR methods to a dynpmc) | |||
| dalek | rrot-plumage: 07852ee | japhb++ | : [CORE] Util.nqp: Apply modified patch from fperrad++ implementing PATHEX... |
17:57 | |
| japhb | What's the current status of NCI thunk building? | 17:58 | |
| I've got a new ticket and an old one that both want 'long long' or 'unsigned long long' support. | 17:59 | ||
| whiteknight | japhb: no support just yet | 18:01 | |
| Coke | whiteknight: yes, I'm doing that now. | 18:02 | |
|
18:02
chromatic joined
|
|||
| Coke | having a test in core would be spif. | 18:02 | |
| (but that can go on some sort of "testing tasks" page.) | |||
| japhb | whiteknight, darn. | ||
| dalek | rrot: r42225 | whiteknight++ | trunk/src/pmc/default.pmc: [pmc] remove some unneeded code that's been commented out for a while. Resolves RT 46659 |
18:03 | |
| japhb | Coke, RT 53406 can be moved to Trac. I'm not sure what your process there is. | 18:04 | |
| dalek | rrot: r42226 | japhb++ | trunk/config/gen/opengl.pm: [OpenGL] Applied patch from fperrad++ to fix TT #1167 |
18:13 | |
| Coke | japhb: lists.parrot.org/pipermail/parrot-d...03154.html | 18:14 | |
| dalek | TT #1167 closed by japhb++: some new types not handled by gen::opengl step | 18:15 | |
| japhb | What is the proper TT 'Component' for NCI stuff? | 18:20 | |
| dalek | rrot: r42227 | pmichaud++ | trunk (2 files): [p6object]: Add .WHO and .WHERE methods, with tests. |
||
| Coke | japhb: when in doubt, other. | ||
| japhb | There's no 'other' in the list | 18:21 | |
| Coke | checking... | ||
| none is the new other. | 18:22 | ||
| japhb | Coke: OK, thanks | ||
| OK, RT #53406 -> TT#1182 | 18:24 | ||
| dalek | TT #1182 created by japhb++: [TODO] Add 'long long' to types supported by NCI | 18:25 | |
|
18:26
brooksbp joined
|
|||
| Coke | japhb++ | 18:27 | |
|
18:27
darbelo joined
|
|||
| darbelo | Ohhh. Eventful weekend. | 18:31 | |
| Leave you guys alone for a bit, and I get a broken make -j and test failures. | 18:33 | ||
| dalek | p-rx: e478a58 | pmichaud++ | build/PARROT_REVISION: Bump PARROT_REVISION so we get P6object .WHO and .WHERE. |
||
| Coke | darbelo: is it broken for you now? you have a build failure log for me? | 18:34 | |
| darbelo | Coke: Better! I have a fix. I think. | ||
| Coke | darbelo: ok. (I just fixed one of these moments ago.) | ||
| darbelo | I just added pmc/pmc_context.h to the deps for scheduler.$(O) and it's building fine. | 18:36 | |
| Coke | darbelo++ | ||
| darbelo | I'll try with higher -j values before committing | 18:37 | |
| Coke | is scheduler a src file? | ||
| (or a pmc?) | 18:38 | ||
| (just do make clean; make path/to/scheduler.o) to test. | |||
| (I suppose make -j path/to/scheduler.o is better.) | 18:40 | ||
| dalek | rrot-linear-algebra: 1a03b3b | Whiteknight++ | src/pmc/nummatrix2d.pmc: add a method to initialize a 2D matrix from a linear array. Will be very useful for HLLs that need to instantiate array constants |
18:45 | |
| darbelo | Coke: That doesn't find problems in other files :) | 18:47 | |
| chromatic | A short Perl program could look at the #include files in our .c files and compare them to the Makefile dependencies. | 18:49 | |
|
18:49
allison joined
|
|||
| darbelo | Okay, it survived a -dp run, commit is on the way. | 18:51 | |
| dalek | rrot: r42228 | darbelo++ | trunk/config/gen/makefiles/root.in: Adjust the dependencies of $(SRC_DIR)/scheduler$(O) in order to fix BSD make parallel builds. |
18:54 | |
| Coke is bit by a svn bug from 1.x | 18:55 | ||
| (non parrot repo) | |||
|
18:55
brooksbp joined
18:56
mikehh joined
|
|||
| dalek | TT #1183 created by bubaflub++: dies_ok() for Test::More | 19:03 | |
| cotto_work | chromatic, Andy was working on something like that at some point. | 19:07 | |
| chromatic | I thought he was using a special make flag. | 19:09 | |
| dalek | TT #1184 created by bubaflub++: [PATCH] fix trailing white space on src/pmc/multisub.pmc | 19:10 | |
| cotto_work | iirc he started out playing with makedep but decided to roll his own after running into some limits that wouldn't work well with parrot. | 19:11 | |
| I would like to see that class of errors eliminated. | |||
| darbelo | And, while we're asking for poinies, we should eliminate the sub-makefiles. | 19:13 | |
|
19:14
mikehh joined
|
|||
| Coke | darbelo: you can have #1184. =-) | 19:15 | |
| darbelo | Trac? | ||
| purl | rumour has it Trac is a web-based software project management and bug/issue tracking system emphasizing ease of use and low ceremony. It provides an interface to the Subversion revision control systems, integrated Wiki and convenient report facilities. projects.edgewall.com/trac/ or Python, SQLite and ClearSilver or killing killtrac or a bug-tracking tool or at trac.parrot.org/parrot/ or slow or REALLY slow | ||
| cotto_work | Andy, whatever happened with that project? | ||
| seen andy | |||
| purl | andy was last seen on #parrot 3 days, 5 hours, 13 minutes and 46 seconds ago, saying: howdy [Oct 30 14:01:39 2009] | ||
| Andy | which | ||
| cotto_work | the makedep replacement for parrot | ||
| Coke | darbelo: yes | ||
| Andy | oh, heck | ||
| I don't even remember | |||
| darbelo | fix trailing white space on src/pmc/multisub.pmc? | 19:16 | |
| cotto_work | darbelo, do you think you're up for it? | ||
| darbelo | I son't know, cotto_work, it sounds like it needs skills I don't have. | 19:17 | |
| cotto_work | There's deep magic in that whitespace. | 19:18 | |
| Coke | cotto_work: you own RT #36407 and RT#48439, btw. | ||
| cotto_work looks | |||
| Coke | please to be the transferance. | ||
| cotto_work | please to the English yes? | 19:19 | |
| dukeleto | darbelo: wanna apply trac.parrot.org/parrot/ticket/1184 ? | ||
| Coke | dukeleto: welcome to 4 minutes ago. =-) | ||
| darbelo | dukeleto: doin' it now. | ||
| Coke | cotto_work: translationparty says "Please forward full ticket." | ||
| dukeleto | yay, fulltest rejoices | 19:20 | |
| that will be two accepted patches for bubaflub++, so he can ask for a commit bit then, right? | |||
| dalek | rrot-linear-algebra: a33c53a | Whiteknight++ | README: Updated README with current status and information that I now know |
19:21 | |
| darbelo | dukeleto: I have no idea. I was forced to get a bit ;) | ||
| dalek, you up? | 19:24 | ||
| Coke | msg jonathan rt.perl.org/rt3/Ticket/Display.html?id=46687 seems to be yours. If you could move it over to trac or reject it, that would be spif. | ||
| purl | Message for jonathan stored. | ||
| dukeleto | darbelo: dalek hates me | ||
| Coke | msg jonathan (or resolve it, even!) | ||
| purl | Message for jonathan stored. | ||
| Coke | darbelo: he takes his time. no worries. | ||
| dalek | rrot: r42229 | darbelo++ | trunk/src/pmc/multisub.pmc: Fix trailing white space on src/pmc/multisub.pmc |
||
| TT #1184 closed by darbelo++: [PATCH] fix trailing white space on src/pmc/multisub.pmc | 19:27 | ||
| darbelo | dukeleto: did your make -j problems clear up after r42228 ? | ||
| Coke finds pmichaud's "live demo" kitten. :( | 19:29 | ||
| dukeleto | darbelo: not sure. i think the bug has come and gone. i will check in a few on the latest trunk | ||
| pmichaud | Coke: =-) | 19:30 | |
| dukeleto | darbelo: i meant to say, the bug has been fixed and reappeared, a few times, even | ||
| pmichaud | that always gets a huuuuuge laugh when I pull it up. It also eats up valuable lightning talk time. | ||
|
19:37
mikehh joined
|
|||
| pmichaud | okay, I've decided I really want the 'vivify' opcode -- not so much for PAST immediately, but just because it will simplify my other code a great deal | 19:42 | |
| (my hand-written PIR, that is) | |||
| chromatic | Show me an example and you'll get it. | 19:43 | |
|
19:44
joeri joined
|
|||
| Coke | pmichaud: www.wall.org/~lewis/ huh. | 19:50 | |
| (mentions rakudo) | |||
| dalek | TT #1185 created by bubaflub++: [PATCH] attempted to rewrite t/op/00ff-dos.t in PIR | 19:51 | |
| pmichaud | chromatic: I'll write it very quickly based on what you have for fetch. I'm also going to refactor fetch. I'll send you a patch for review | 19:52 | |
| darbelo | dukeleto: The problem is that when we shuffle code arround the repo, we should shuffle deps acordingly. | ||
|
19:52
mikehh joined
|
|||
| dukeleto | darbelo: yes. Can we make sure to shuffle deps properly from now on? | 19:53 | |
| darbelo | That step is easy to miss if it works for the guy shufflig the code. | 19:54 | |
| chromatic | That means paying more attention to #include lines and such in commit mails. | ||
| Coke | chromatic: I try to key off those. | ||
| (hard on big mergebacks) | |||
| dukeleto | darbelo: people who shuffle deps should make sure that "make realclean; perl Configure.pl && make -j 2" works | 19:55 | |
| darbelo | They should also keep the codingstd test passing. | ||
| dukeleto | also, every branch should allow "make -j" before being merged | ||
| darbelo: all commits to trunk should pass "make fulltest" | |||
| darbelo | dukeleto: Don't hold your beath. | 19:57 | |
| dalek | rrot-linear-algebra: c42f643 | Whiteknight++ | src/pmc/nummatrix2d.pmc: add comments to NumMatrix2D METHODs, and add a quick sanity check to the initialization method |
||
| rrot-linear-algebra: bbb9d00 | Whiteknight++ | src/pmc/nummatrix2d.pmc: add methods to get and set blocks. This will help in partitioning algorithms and, eventually, autothreading |
|||
| TT #1186 created by bubaflub++: [PATCH] convert t/op/00ff-unix.t to PIR | 19:58 | ||
| whiteknight | bubaflub++ | ||
| darbelo | Hmm. What *is* the policy to get a commit bit? | 19:59 | |
| dukeleto | darbelo: submit 2 patches, then get recommended by 2 parrot devs | ||
| whiteknight | you get nominated, at #ps we vot | ||
| dukeleto | then you submit the CLA and then you get a bit | 20:00 | |
| whiteknight | right, CLA | ||
| chromatic | Two contributions is for PaFo *membership*. | ||
| Commit bit policy is submit enough good patches that someone is sick of committing them for you. | |||
| darbelo | Hmm. I wonder if giving plobsing one would speed up the libjit work. | ||
| dukeleto | darbelo: the JIT work or the libjit work? | 20:01 | |
| moritz | it would simplify things | ||
| dukeleto | are we still planning on supporting libjit and llvm? Because I need to tell you all, that is a really bad idea. | ||
| whiteknight | dukeleto: I'm not convinced of the doom and gloom | 20:02 | |
| I certainly see no problem supporting two frame builders | |||
| darbelo | dukeleto: Really? Sounds like what a llvm dev would say :) | ||
| Coke | whiteknight: split resource allocation. | ||
| dukeleto | whiteknight: what is the difference between 2 frame builders and supporting 2 JIT backends? | ||
| chromatic | Writing a *good* JIT backend is a lot of work. | ||
| Coke | increases complexity and support costs. | 20:03 | |
| chromatic | Writing a decent framebuilder is not. | ||
| whiteknight | Coke: I don't think so, split resource allocation means there are people who would work on both | ||
| Coke | whiteknight: if someone hands us one of each, sure. | ||
| if we are trying to come up with a plan for limited resources, that's where my concern comes in. | |||
| whiteknight | I, for instance, will probably only work on the LLVM version | ||
| dukeleto | We are going to throw away this JIT rewrite. And the next one. Let's iterate towards a good JIT, instead of spreading ourselves too thin. | ||
| whiteknight | but if there's another developer who is only interested in working on libjit, that's their prerogative | ||
| Coke | whiteknight: sure. but we shouldn't be advocating that. | 20:04 | |
| dukeleto | Every open source project that I talked to said that you start JIT from the ground up a few times. Which means supporting multiple backends in the beginning is just added drag. | ||
| whiteknight | you guys with the worrying! We already have a concrete plan spelled out | ||
| we're doing LLVM first | |||
| that's the plan | |||
| we do LLVM first | |||
| dukeleto | whiteknight: I like that plan! | ||
| whiteknight | then memorize it! | ||
| and don't worry about other things! | 20:05 | ||
| dukeleto | jit? | ||
| purl | jit is a Just In Time compiler. Or just more Java hype. or new Parrot hype! or a less than ideal example of clean code X-) | ||
| Coke | dukeleto: now we just need to make sure we stop after that point. =-) | ||
| darbelo | dukeleto: llvm only leaves platforms out. | ||
| dukeleto | darbelo: which platforms? | ||
| purl | which platforms are 8.3 an issue on, anyway? | ||
| darbelo | OpenBSD, all arches. | ||
| whiteknight | there are motivations for LLVM to expand to more platforms | ||
| we can help push that | 20:06 | ||
| dukeleto | whiteknight: does trac.parrot.org/parrot/wiki/JITRewrite say that we are doing LLVM first? I don't see that spelled out. | ||
| darbelo: so llvm does not support OpenBSD. Good to know. Anything else? | |||
| whiteknight | dukeleto: allison made the announcement on the list | ||
| (I should spell it out on the wiki though, that's true) | |||
| dukeleto | whiteknight: you expect me to read my email? ;) | ||
| whiteknight | I read email, and I don't read the wiki | 20:07 | |
| :) | |||
| dukeleto | I hate email. | 20:09 | |
| whiteknight | you and me both. But I get far too much of it to just ignore it all | ||
|
20:10
mikehh joined
|
|||
| darbelo | dukeleto: I know FreeBSD and Dragonfly are working to make LLVM the system compiler, which covers a good percentage fo the BSD landscape. I have no idea about NetBSD, and last I heard the llvm jit wasn't working on solaris. | 20:10 | |
| dukeleto | darbelo: what is this? openports.se/devel/llvm | ||
| darbelo: the current supported platforms for parrot are linux,windows,os x and solaris, correct? so we need jit to work on those. | 20:11 | ||
| darbelo | dukeleto: Not entirely functional ;) | ||
| nopaste | "pmichaud" at 72.181.176.220 pasted "vivify opcode patch (for review by chromatic)" (87 lines) at nopaste.snit.ch/18535 | 20:12 | |
| chromatic | How is that different from existing, pmichaud? | ||
| pmichaud | + VTABLE_set_pmc_keyed(interp, $2, $3, $1); | 20:13 | |
| on each case | |||
| whiteknight | pmichaud: what does the :base_core flag do? | ||
| dukeleto | whiteknight: all your base core are belong to parrot | ||
| chromatic | Oh, I thought that was fetch, for some reason. | ||
| pmichaud | whiteknight: I think it indicates it's statically linked and not a dynop, but I don't know. I just copied whatever chromatic++ had for the basic opcode structure | 20:14 | |
| whiteknight | gotcha | ||
| pmichaud | vivify looks a lot like fetch, it just has the extra bind at the end | ||
| whiteknight | do we need fetch and vivify? | ||
| pmichaud | I do | ||
| whiteknight | okay | ||
| (just making sure) | |||
| pmichaud | I have a case where I'm writing code and it turns 14 lines of PIR into 2 | ||
| chromatic | I really want to extract out all of that same code, but I'm not sure of the best way to do so. | 20:15 | |
| pmichaud | yeah, I was working on that also, but couldn't find a way to do it. The exception is the kicker. | ||
| darbelo | dukeleto: If supported platforms are measured by active developers you can take windows off that list. | ||
| moritz | hey, don't forget jonathan ;-) | 20:16 | |
| dukeleto | darbelo: yeah, I learned that when our tests were broke in trunk on windows for a few days leading up until 1.7.0 :) | ||
| darbelo | OpenBSD, a non supported platform, spends less time broken that windows. | 20:17 | |
| dukeleto | darbelo: we should blame particle for more stuff, maybe then he would do more ;) | ||
| darbelo: that is interesting | |||
| darbelo | I suspect my presence is a factor in that. If we had a hp-ux user around, I would expect that to work better than windows too. | 20:18 | |
| allison | pmichaud: vivify looks very language-specific in its behavior | 20:21 | |
| pmichaud | allison: it's not | 20:22 | |
| there are a lot of times when we need to do "look up this key in this aggregate, if it doesn't exist, vivify it" | |||
| allison | pmichaud: how would other languages know to call it? and if not, would they be getting entirely the wrong semantics on the data structure? | ||
| pmichaud | almost every parrot library I've written ends up doing something like that | 20:23 | |
| allison | pmichaud: isn't that all lookups in Perl? | ||
| pmichaud | allison: sure, but to do it in PIR is a sequence of about 5 opcodes | ||
| actually, 6 | |||
| and I end up writing it *a lot* | 20:24 | ||
| (by hand, not just generated code) | |||
| darbelo | The name is rather perlish, but I think it is a generally useful feature. | ||
| allison | pmichaud: the part that looks interesting is specifying the type of the autovivify | ||
| pmichaud | allison: right | ||
| that's the most useful part | |||
| allison | pmichaud: (as opposed to always PMCNULL or Undef) | ||
| pmichaud: but, I'd rather see that integrated into the normal flow of things than as a separate opcode | 20:25 | ||
| chromatic | How would that integration work? | ||
| pmichaud | but no, I don't see it as being very perl specific. In fact, Rakudo won't be using this opcode at all. | ||
| allison | get_pmc_keyed_typed, or something like that, with an extra argument | ||
| pmichaud | that's "fetch" | ||
| we have two opcode | |||
| fetch is "get a pmc, if it doesn't exist, give me one of this type" | |||
| vivify is "get a pmc, if it doesn't exist, create one of this type and put it in the aggregate I just tried to fetch from" | 20:26 | ||
| basically fetch is rvalue lookup | |||
| allison | is there a single datatype that needs to be able to do both? | ||
| pmichaud | vivify is lvalue lookup | ||
| ...single datatype? | 20:27 | ||
| allison | a PMC | ||
| pmichaud | I'll be using this all over the place, quite honestly | ||
| namespaces, hashes, arrays, lexpads, etc. | |||
| it's not specific to a type | |||
| allison | no, I'm saying, is there any reason the PMC itself can't decide whether to store the created filler or just return it without modifying the aggregate | 20:28 | |
| pmichaud | yes, because it depends on context | ||
| the PMC can't know the conetxt unless we tell it | |||
| allison | what factors does it depend on? | ||
| chromatic | the lvalue/rvalueness of the expression | ||
| pmichaud | whether or not I'm just looking up a value (rvalue context) or whether I'm planning to store to it | 20:29 | |
| allison | that's set and get | ||
| pmichaud | except that set and get don't vivify | ||
| right now I have to go through a sequence of | |||
| allison | not for the PMCs we have now, but they could | ||
| pmichaud | $P0 = get agg[key] | ||
| unless null $P0 goto done | |||
| $P0 = new ['XYZ'] | 20:30 | ||
| agg[key] = $P0 | |||
| done | |||
| s/get// | |||
| allison | right, the only part of that we don't have now is the ability to specify what 'XYZ' is | ||
| pmichaud | set doesn't vivify, it binds | ||
| set doesn't create a new PMC, it causes a key to refer to an existing one | 20:31 | ||
| allison | not clear what you're objecting to? | ||
| pmichaud | just writing those long sets of instructions over and over | 20:32 | |
| I'm saying that 'set' is not really 'lvalue context' | |||
| allison | so, I'm suggesting $P0 = get agg[key], ['XYZ'] | ||
| pmichaud | why is that any different than $P0 = fetch agg, key, ['XYZ'] # which is what we have now | ||
| allison | where the second arg is "type to fetch/vivify" | ||
| pmichaud | is it just the opcode name you're objecting to? | 20:33 | |
| allison | I'm objecting to adding new opcodes, yes | ||
|
20:33
mikehh joined
|
|||
| pmichaud | you're adding a new opcode with 'get' | 20:33 | |
| allison | oh, sorry, cut and paste error | ||
| $P0 = agg[key], ['XYZ'] | |||
| pmichaud | okay, that binds the new object, or doesn't? | ||
| and whether it does, how do I get to the other form? | 20:34 | ||
| allison | PMC chooses | ||
| pmichaud | how can the PMC know? | ||
| Coke | |||
| allison | you said it was lvalue/rvalue that determines, yes? | ||
| chromatic | Isn't that adding a new opcode? | ||
| pmichaud | yes but lvalue and rvalue are determined by context of the operation, not by the PMC | ||
| not by the aggregate PMC | |||
| if I'm writing | 20:35 | ||
| allison | chromatic: it's adding an option to an existing opcode | ||
| pmichaud | $a = @xyz[3] | ||
| that's rvalue context | |||
| if I'm writing | |||
| @xyz[3] = $a | |||
| that's lvalue context | |||
| the aggregate is the same in both cases (@a) | |||
| dukeleto | If a PMC's VTABLE is called in the woods, and no one is there, does it make a sound? | ||
| pmichaud | thus the aggregate cannot know which operation to perform | ||
| (sorry, @xyz in example above) | 20:36 | ||
| allison | pmichaud: well, a = xyz[3] and xyz[3] = a are different operations in PIR too | ||
| pmichaud | no no no | ||
| allison | pmichaud: are you saying that you're using some other combination of operations to represent the high-level assignment? | ||
| pmichaud | well, yes yes yes, if you mean that we need two opcode for this | ||
| allison | I'm saying we have two operations for this already | ||
| pmichaud | allison: please note that $P0[key] = $P1 is *not* assignment | ||
| it's not not not | 20:37 | ||
| allison | remember, = isn't an operator in PIR | ||
| pmichaud | fine | ||
| set $P0[key], $P1 is *not* an assignment | |||
| allison | it's just syntactic sugar for completely different opcodes | ||
| pmichaud | chromatic, coke, can someone help me out here, please? | ||
| allison | I'm definitely not getting what you're driving at | ||
| Coke | pmichaud: suggestion: post the sequence you'd like to replace with the one or two liner to show what you're doing. | 20:38 | |
| chromatic | I'm still trying to figure out what allison wants. | ||
| pmichaud | I've been saying this for almost two years now and I still can't seem to explain it in a way that allison understands | ||
| Coke | and then allison can (perhaps) show you how you can simplify that without changing PIR. | ||
| chromatic | I don't understand how to do this *without* adding an opcode. | ||
| allison | chromatic: I'm trying to figure out what patrick wants | ||
| Coke | there was a post to the mailing list. digging. | ||
| pmichaud | I want a way to represent lvalue semantics in PIR | ||
| chromatic | It's two high-level operations. | ||
| pmichaud | set $P0[key], $P1 is not lvalue semantics | ||
| you keep claiming it is, but it's not | 20:39 | ||
| chromatic | "Fetch a value from this aggregate. If there's no value there, give me back a PMC of this type." | ||
| "Fetch a value from this aggregate. If there's no value there, create a new PMC of this type, store it in the aggregate, and return it to me." | |||
| allison | set is PMC-determined semantics, it's variable | ||
| pmichaud | (writing example sequence that Coke suggested0 | ||
| Coke | (list) perhaps not. | ||
| pmichaud++ | |||
| pmichaud | allison: I want to do this on our existing PMCs | ||
| Hash. ResizablePMCArray. NameSpace. | 20:40 | ||
| chromatic | I don't want to modify every existing aggregate and every possible existing aggregate. | ||
| allison | but those explicitly don't use those semantics | ||
| chromatic | The PMCs don't have to use those semantics. Their existing set/fetch semantics are fine. | ||
| allison | forcing a PMC that doesn't autovivify to use autovivification is just wrong | 20:41 | |
| chromatic | These two opcodes exist to allow PIR authors to answer the question "What if the aggregate doesn't contain what I looked up?" | ||
| pmichaud | just a sec, the example should make it clear | ||
| Coke | allison: it doesn't force the pmc to autovivify. | ||
| that's what we'd get if we changed the what get/set did in a core PMC. this isn't htat. | 20:42 | ||
| allison | chromatic: and the answer is "The PMC decides what to return" | ||
| chromatic: (and whether to store that return) | |||
| whiteknight | allison: autovivification seems to me like it's the particular assignment operation, and not something that the PMC should or should not support | ||
| chromatic | And that doesn't always work for PIR programs. | ||
| whiteknight | so we can assign-with-vivification or assign-without-vivification, depending on the op, not depending on the PMC's behavior | 20:43 | |
| chromatic | As evidence, I present to you PIR programs that manually perform fetch/vivify because the PMC doesn't know how PIR programs will use them. | ||
| allison | whiteknight: it's the semantics of the data type, part of the defined API of the PMC | ||
| to be clear, I don't have any objections to PMCs that do autovivify, or to adding some support if the existing vtable functions aren't sufficient to allow them to do it | 20:44 | ||
| chromatic | allison, consider this example. | ||
| nopaste | "pmichaud" at 72.181.176.220 pasted "example use of vivify opcode" (24 lines) at nopaste.snit.ch/18536 | ||
|
20:44
davidfetter joined
|
|||
| chromatic | Suppose I want a Ruby-style hash which supports a default value. | 20:44 | |
| allison | but, putting that behavior in an external opcode means we dictate autovivification semantics for all languages and all PMC types | 20:45 | |
| we've been bitten by that enough times to learn not to repeat it | |||
| chromatic | That is, when you look up a value in the hash, if there's no value for the key, you get back a new value of the default. | ||
| pmichaud | I'm not asking to replace our existing set opcode. | ||
| jonathan | allison: Huh? We're supplying an additional opcode that a language can use to say who something from an aggregate autovivifies. | ||
| Coke | allison: if you don't want to give the choice to the person invoking the PIR code, then perhaps we need more vtables. | 20:46 | |
| jonathan | s/who/how/ | ||
| allison | ResizablePMCArray was intentionally created not to autovifify like that | ||
| Coke | (which we'd need to implement with more opcodes) | ||
| whiteknight | more vtables does sound to me like the solution here, although I generally advocate having fewer of them | ||
| chromatic | Why would we need more vtables? | ||
| jonathan | allison: Which is good - because then we can actually use it with langauges that have different auto-vivification semantics/interests. | ||
| allison | jonathan: aye, but it's an opcode, which means the semantics are predetermined for all users | 20:47 | |
| whiteknight | one for a "set without autovivifying" and one for "set with autovivifying" | ||
| chromatic | Okay. | ||
| allison | whiteknight: yes, that's more what I'm leaning toward | ||
| chromatic | I'm declaring a moratorium on discussion from everyone who hasn't read the patches. | ||
| jonathan | allison: But the op has an argument saying what to auto-vivify to. | ||
| solarion | QUESTION: could there be some sort of reward system for ubuntu devs and MoTUs to encrouage bug-fixing? | ||
| sorry; w/c | |||
| allison | chromatic: I read the vivify experimental op patch, are there others? | ||
| chromatic | There's a fetch opcode in experimental.ops. | 20:48 | |
| solarion | allison: thanks for the book, btw | ||
| (_Parrot_Developer's_Guide_) | 20:49 | ||
| allison | solarion: glad you found it useful | ||
| chromatic: yup, fetch should be get_pmc_keyed_typed | 20:51 | ||
| pmichaud | and the opcode to access the vtable...? | ||
| jonathan | allison: Heh. And then we multiply it out for get_pmc_keyed_int_typed and so forth, and then have to go implement this in multiple PMCs? | 20:53 | |
| allison | pmichaud: set | ||
| pmichaud | allison: what variant of set, please? | ||
| allison | pmichaud: set_p_p_p_p | ||
| pmichaud | please give full example | 20:54 | |
| allison | get_p_p_p_p | ||
| pmichaud | there needs to be a key there | ||
| allison | (was looking at vivify by that point) | ||
| pmichaud | please give me a full set opcode involving $P0 (result), agg, key, and type | ||
| e.g. set $P0, agg[key], type | |||
| or | |||
| set $P0, agg, key, type | |||
| allison | do you get my basic point about overridable vivification semantics? | 20:55 | |
| pmichaud | you want the PMC to be able to override the type. sure | ||
| allison comparing to existing get opcodes | 20:56 | ||
| pmichaud | there are no "get" opcodes | ||
| it's all "set" | |||
| fwiw, it would probably live with just having an rvalue form of set $P0, agg[key], type | 20:57 | ||
| s/it/I/ | |||
| because then I would end up writing | 20:58 | ||
| set $P0, agg[key], type | |||
| set agg[key], $P0 | |||
| whenever I need my lvalue semantics | |||
| (which seems a bit wasteful... but what can you do?) | |||
|
20:59
brooksbp joined
|
|||
| allison | when would you call set $P0, agg[key], type and want it not to store the value back in agg? | 20:59 | |
| Coke | on a related note: there's only so much you can push inside the PMC before anyone interacting with it needs to have a lot of scaffolding code to safely deal with an arbitrary PMC. | ||
| pmichaud | when I'm doing an rvalue lookup | 21:00 | |
| in high level code | |||
| allison | Coke: which is why the core types are simple, so they're friendly everywhere | ||
| Coke | allison: they're not simple. | ||
| pmichaud | my $a = @xyz{'foo'}[5][7] | ||
| Coke | see also the array issue. =-) | ||
| allison | Coke: well, they avoid things like autovivification intentionally | ||
| pmichaud | I want to be able to have that give me back an undef even if one or more of the intermediate elements doesn't exist | 21:01 | |
| but it shouldn't vivify them in the process | |||
| in the sense of putting them into the aggregate | |||
| Coke | (e.g. calling 'push' on something that does 'array' is not safe.) | ||
| (but that's another argument.) | |||
| pmichaud | so if set $P0, agg[key], type automatically creates an element in agg[key], then I can't use that for lookups | 21:02 | |
| allison | pmichaud: (clarifying) do you use set $P0, agg[key], type for both $a = @xyz{'foo'}[5][7] and @xyz{'foo'}[5][7] = $a | ||
| pmichaud | no, which is why I've been wanting two different opcode | ||
| purl | okay, pmichaud. | ||
| pmichaud | *opcodes | ||
| one for lvalue context, one for rvalue context | |||
| but if I can't have that, then please give me the rvalue one | |||
| allison | wouldn't you use set agg[key], $P0, type for the second instead? | 21:03 | |
| (those are two different opcodes) | |||
| jonathan | That'd be binding rather than assignment though, no? | ||
| pmichaud | afaic, that's really just "fetch" and "vivify" hiding under the "set" opcode name | 21:04 | |
| allison | jonathan: that's determined by the PMC | ||
| pmichaud | if there's also a set agg[key], $P0, type form, that's fine | ||
| but the problem with that is that it's $P0 that gets modified | |||
| allison | pmichaud: my point is, adding typing is a nice feature, but adding new opcode (names) is unnecessary complexity | ||
| pmichaud | in other words, in all other forms of set, the first argument is the thing that is being modified | 21:05 | |
| japhb | allison, sorry if I missed this while reading the backlog, but why do you want the PMC to be able to override the default specified in the PIR? | ||
| pmichaud | japhb: I don't have much time, please don't tangent yet | ||
| Coke | allison: adding another variant called 'set' is ok? | ||
| japhb | pmichaud, roger that | ||
| Coke | I don't think pmichaud cares what the opcode is named. | ||
| allison | japhb: (briefly) different languages have very different semantics for autovivification | ||
| japhb | pmichaud, you owe me one for resisting the tangent urges. ;-) | 21:06 | |
| allison | pmichaud why is $a being modified in @xyz{'foo'}[5][7] = $a? | ||
| pmichaud | allison: anyway, syntactically "set agg[key], $P0, type" doesn't work well for me and the compiler tools, because it's the only real opcode where the result ($P0) isn't the first operand | ||
| allison: because when I'm done, I want the aggregate and the rvalue to be pointing to different PMCs | 21:07 | ||
| @xyz{'foo'}[5][7] = $a; $a = 6; # should not change the @xyz... value | |||
| in other words, with | |||
| allison | to be clear, the aggregate is @xyz and the rvalue is $a? | ||
| pmichaud | right | ||
| in other words... | |||
| purl | in other words are there good use cases where you'd choose not to use that module | ||
| pmichaud | let's bring it down to the single aggregate case | ||
| highlevel, I want to do | 21:08 | ||
| @xyz[3] = $a | |||
| allison | but, you just assigned to an aggregate, it should change the value | ||
| pmichaud | that does *not* mean | ||
| please, let me finish | |||
| allison | yes | ||
| pmichaud | @xyz[3] = $a | ||
| that does *not* translate to | |||
| $P0 = find_lex '$a' | |||
| set xyz[3], $P0, ['Undef'] | |||
| the correct translation is | 21:09 | ||
| $P0 = find_lex '$a' | |||
| set xyz[3], $P1, ['Undef'] | |||
| assign $P0, $P1 | |||
| allison | ? | ||
| pmichaud | if we have | 21:10 | |
| set xyz[3], $P0, ['Undef'] | |||
| when does the ['Undef'] ever come into play? | |||
| more to the point, with @xyz[3] = $a | |||
| the end result is that xyz[3] and $a have to refer to different PMCs | 21:11 | ||
| allison | which different PMCs? | ||
| pmichaud | the one tha tholds the value for $a and the one that holds the value for xyz[3] | ||
| otherwise | |||
| $a++ | |||
| ends up changing the value of xyz[3] | |||
| (if they refer to the same PMC) | |||
| allison | as in, assign semantics with a copy of the value instead of binding the value? | 21:12 | |
| pmichaud | in HLL, '=' typically means "assign", yes. | ||
| and assign != set | |||
| set has binding semantics, not assignment semantics, at least for the built-in PMC types | |||
| and the libraries I'm writing tend to want to use the built-in PMC types | 21:13 | ||
| (because that's all we can guarantee to be available at runtime) | |||
| allison | assign $P0, xyz[3], ['Undef'] | 21:14 | |
| chromatic | I can't see how that is clearer than fetch or vivify. | ||
| pmichaud | that looks a lot to me like "vivify" :-) | ||
| chromatic | It could be fetch. | ||
| Coke | allison: that opcode doesn't exist. | ||
| chromatic | You have to read the opcode body to know whether it fetches or vivifies. | ||
| allison | Coke: yes, we're off into "hypothetical added ops" now | 21:15 | |
| pmichaud | I'm okay if fetch is set $P0, xyz[3], ['Undef'] | ||
| and vivify is assign $P0, xyz[3], ['Undef'] | |||
| allison | chromatic: the op shouldn't do either, it should call a vtable function | ||
| chromatic | A vtable function for this is wrong. | ||
| This is *not* the responsibility of the vtable. | |||
| japhb | allison, But 'fetch' and 'vivify' at least say what they mean, rather than a magic variant of 'assign' that isn't clear. | ||
| pmichaud | but this is the crux of what I've been complaining about for two years | ||
| jonathan | allison: Your assumption is that languages will only ever touch their own PMC types that use their own semantics. | 21:16 | |
| allison | chromatic: it's the only way to make it overloadable by PMC semantics | ||
| jonathan | allison: This is wrong. | ||
| chromatic | PMC's should *not* override this. | ||
| That is the wrong direction. | |||
| allison | autovivification is a language feature | ||
| jonathan | allison: This is an area where languages want to operate on other data types. | ||
| chromatic | PMC's already *can* give themselves vivify or fetch semantics using the existing vtables. | ||
| jonathan | And have the semantics of the *language*. | ||
| allison | chromatic: yes, that's my point | ||
| chromatic | Yes, and that's why you're wrong. | ||
| jonathan | This is an operational semantic of the code that is being executed. It's not a behavioral semantic of the data type being operated on. | 21:17 | |
| Thus it does not belong in the PMC. | |||
| allison | chromatic: the one thing they can't do is specify a type for the autovivification | ||
| chromatic | That's the whole point, allison. | ||
| japhb | jonathan is correct. Cross-HLL, you want the semantics of the *calling* code, not the *called* PMC. | ||
| chromatic | If this goes into the vtables and not into the ops, this behavior is *unusable* from PIR. | ||
| It's unsafe and unreliable. | |||
| allison | japhb: if that's the case then this is a Perl6 op, not a Parrot op | ||
| chromatic | You can't know the semantics of the operation unless you know the exact type of every aggregate used in these expressions. | ||
| This *does not work* callee-side. | 21:18 | ||
| japhb | allison, No, because what I said is correct across any two languages. | ||
| NotFound | We provide ops, languages choose what ops to use. | 21:19 | |
| whiteknight | NotFound: it's not just the ops we provide. Those ops define an interface that we would be stuck with | ||
| any op we provide is going to demand a particular interface that all our aggregate types need to satisfy | |||
| Coke | whiteknight: not true. they could just throw an exception, like many of our core types do when invoking certain vtables. | 21:20 | |
| jonathan | whiteknight: I don't see how you can argue this when it's an op that operates completely in terms of existing PMC vtable interfaces. | ||
| chromatic | That's why I said everyone should *read* the existing fetch op's implementation. | ||
| NotFound | whiteknight: or not. They can throw on anything they don't spport. | ||
| Coke | (I am not advocating this, mind you, justing pointing it out.) | ||
| allison | what these ops do is allow you to force autovivification semantics on any aggregate PMC | ||
| pmichaud | no they don't | ||
| whiteknight | jonathan: we already have tons of inconsistency in the way various VTABLEs are implemented | ||
| pmichaud | the aggregate still enforces the set | ||
| allison | I can understand why that might be appealing, but it's not right | ||
| Coke | I would say they allow you to /use/ autoviv, not /force/ it. | ||
| chromatic | the aggregate still enforces the get | ||
| The aggregate's existing behavior is preserved and respected. | 21:21 | ||
| That goes for all aggregates as they exist now. | |||
| whiteknight | we would need at least a deprecation cycle to get all aggregate VTABLEs set up to uniformly do what we want | ||
| chromatic | That goes for all aggregates that may exist in the future. | ||
| allison | not with vivify, it's not | ||
| chromatic | That goes for all dynpmcs anyone might eventually create that we may never know about. | ||
| pmichaud | allison: even with vivify, it goes through the aggregate's set_*_pmc vtables | ||
| NotFound | allison: if we don't provide an op, the only difference is that the operation require several ops. | ||
| pmichaud | NotFound +1 | ||
| NotFound | And possibly introspection | 21:22 | |
| pmichaud | unless and until Parrot provides an opcode that has the semantics I need, I'll just be writing the longhand PIR, because at present there's no other way to accomplish the HLL semantics I'm looking for | ||
| allison | NotFound: true enough, but if you provide an overridable interface the language can decide how to handle that request | ||
| jonathan | whiteknight: What? We've been doing the thing this op would do in many ops for a long time already. It's not going to need any changes to existing VTABLE aggregates. | ||
| allison | it's better than a fixed opcode | ||
| Coke | allison: you're confusing the language and the PMCs. | 21:23 | |
| whiteknight | jonathan: maybe this particular case works, yes. My point was about the lousyness of the larger VTABLE environment | ||
| chromatic | It's *unusable* if it's PMC-side. | ||
| Coke | (long | ||
| ww | |||
| allison | Coke: quite a bit of language behavior is built into the PMCs, that's the point | ||
| NotFound | allison: I don't see the vtable of a type as a language interface, is an object, it doesn't matter much what language cretaed it. | ||
| Coke | allison: yes, but there needs to be a boundary. as it is, I despair of having useful interaction across HLLs. | ||
| allison | NotFound: yes, but different languages have different object semantics | ||
| Okay, take a step back | 21:24 | ||
| pmichaud | allison: let's do this | ||
| here's my example: | |||
| @xyz[3] = $a; $a++ | |||
| how would you write that in PIR ? | |||
| keeping in mind that $a and @xyz[3] need to have different values at the end | |||
| whiteknight | pmichaud: clone | 21:25 | |
| allison | The original design is that different languages implement their own data types with different semantics, and by useing the VTABLE interface the can all interact (because language A doesn't care what's behind "get a pmc from this aggregate" in language B only that it gets a value | ||
| chromatic | That does not change with fetch/vivify. | 21:26 | |
| allison | set xyz[3], a; inc a | ||
| pmichaud | allison: that changes xyz[3], if a is a PMC | ||
| (which most lexicals are) | |||
| allison | chromatic: it does change, because you're putting aggregate semantics into an opcode | ||
| chromatic: they're carefully designed to have no semantics in opcodes, only semantics in vtable functions | |||
| chromatic: that's why the opcodes are so short | 21:27 | ||
| pmichaud | if I have: $P0 = box 5; set xyz[3], $P0; inc $P0; $P1 = xyz[3]; say $P1 | ||
| chromatic | Okay, then forget the whole thing. | ||
| pmichaud | then I end up with 6 | ||
| and xyz[3] should be 5 | |||
| please try again | |||
| chromatic | I can't answer the "aggregate semantics" argument. | ||
| I can't refute the "opcodes are short" argument. | |||
| allison | pmichaud: hold on, I'll split that out so I can look it over... | ||
| chromatic | The only argument I have left is that the caller side already has to perform all of these operations, using the existing, unmodified VTABLEs. | 21:28 | |
| It's obviously necessary code. It's obviously correct semantics and behavior. | |||
| (argument from existence) | |||
| allison | pmichaud: so, you're fetching the value from the aggregate after you create it? | ||
| chromatic | It can't go in new VTABLEs, because that's unreliable. | 21:29 | |
| pmichaud | whiteknight: (clone) the problem with clone is that it breaks bindings. For example, if I have: $b := xyz[3]; xyz[3] = $a; then the clone+set doesn't work | ||
| chromatic | The only conclusion is that this is behavior Parrot won't support. | ||
| pmichaud | allison: isn't that normal? | ||
| @xyz[3] = $a; $a++; print @xyz[3] | |||
| whiteknight | the alternative is to have a dynpmc lib | ||
| pmichaud | I expect the value of $a before it was incremented | ||
|
21:29
hercynium joined
|
|||
| Coke | the clone doesn't work on bind, so don't use it on bind. | 21:29 | |
| allison | pmichaud: seems odd, why do you have to refetch $a? | ||
| pmichaud | but set xyz[3], a; inc a; doesn't do that | ||
| Coke | allison: that isn't a in his print. | 21:30 | |
| pmichaud | oh please come on | ||
| allison | I'm really just trying to understand here | ||
| pmichaud | allison: okay, I'll spell it out | ||
| allison | I'm getting a sense that there's something fundamentally broken in our current assignment or lexical handling, but I'm not clear yet what it is | 21:31 | |
| pmichaud | I've been saying this for two years | ||
| it's broken in assignment | |||
| here's the spelled out version | |||
| allison | probably so, but I haven't been able to make sense of it yet | ||
| pmichaud | HLL: my $a = 5; @xyz[3] = $a; $a++; print @xyz[3] | ||
| PIR (wrong): a = box 5; xyz[3] = a; inc a; $P0 = xyz[3]; print $P0 | |||
| it's wrong because it will print out 6, not 5 | |||
| whereas the HLL expects 5 | 21:32 | ||
| I have to go pick up kids, back later | |||
| (please give me an alternate form of PIR that will work) | |||
| Coke | with the existing sytem there, I'd expect to have to clone a there. | ||
| (and yes that won't work for := - but then you wouldn't use clone.) | |||
| NotFound | I don't think that's wrong. Is expected in types by reference. | ||
| allison | pmichaud: (sorry, have to split the code out on lines to read it) | ||
| chromatic | That's a rabbit trail related to the use of these ops. | ||
| I mean UNrelated. | 21:33 | ||
| If the general policy for ops is "They basically delegate to VTABLE calls", then we have a lot of ops to deprecate in the next couple of months. | |||
| allison | chromatic: not necessarily, if we're adding ops to get around something that's fundamentally broken, we should look at fixing the breakage first | ||
| chromatic | I didn't add fetch to get around something that's fundamentally broken. | 21:34 | |
| I added fetch to compress a common case of six opcodes in PIR into one. | |||
| I did not modify a single PMC to do so. | |||
| I did not change the semantics of a single PMC. | |||
| jonathan | Right, and vivify is the same story. | ||
| Or "the op proposed under the name vivify that you can call what you like" | 21:35 | ||
| chromatic | Any aggregate written *after* I wrote fetch will still behave correctly and as intended. | ||
| allison | we're trying to reduce our opcode set, adding new opcodes to handle what could be done in an optimization pass is... suboptimal | ||
| Coke | we're trying to reduce our opcode set? | ||
| chromatic | How in the world would you do this in an optimization pass? | ||
| allison | Coke: radically, yes | ||
| Coke | allison: can I snark for a second? =-) | ||
| allison | chromatic: it's a common pattern, like tail recursion | 21:36 | |
| Coke: why not, join the club :) | |||
| chromatic | Specifics, please. | ||
| How do you optimize this? | |||
| NotFound | allison: Is not the contrary, providing an opcode to be used by the optimization phase? | 21:37 | |
| allison | I think patrick's second example isn't what he meant to write, I think he meant a = box 5; xyz[3] = a; inc a; print $P0 instead | ||
| (using a refetch) | |||
| NotFound: it's not an opcode to be used by the optimization phase though, it is the optimization | |||
| chromatic | *What* is the optimization? | 21:38 | |
| jonathan | allison: Where did $P0 come from in that? | ||
| NotFound | allison: we have a tailcall opcode | ||
| allison | jonathan: sorry, print a | ||
| pmichaud | I did not mean print a | ||
| I meant the hll form of print @xyz[3] | |||
| jonathan | allison: No, he didn't. | ||
|
21:38
masak joined
|
|||
| allison | no? but then it would print 6, yes? | 21:39 | |
| chromatic | I think the problem there is that the HLL has to note whether a primitive container has container or value semantics for that kind of assignment. | ||
| allison | for either? | ||
| Coke | allison: see "PIR (wrong)" | ||
| pmichaud | Coke: clone semantics bring up other problems | ||
| allison | ah, you're saying the P6 = is a copy, not binding? | 21:40 | |
| jonathan | allison: The HLL example should print 5.. | ||
| Coke | pmichaud: what other problems? | ||
| (ISTR I'm using this in tcl now to address pretty much the same issue.) | |||
| (clone) | |||
| allison losing the thread | |||
| fetch? | |||
| purl | fetch is "get a pmc, if it doesn't exist, give me one of this type" | ||
| allison | thanks purl, very helpful | 21:41 | |
| pmichaud | Coke: If I have $a = 5; $b := @xyz[3]; @xyz[3] = $a; $a++; print $b the $b should be 5, not the value of @xyz[3] before the assignment | ||
| i.e., sometimes we have multiple symbols bound to the same PMC | |||
| allison | ah, right, opcodes as optimizations... | ||
| Coke | pmichaud: why would you use clone if you had a bind operator in the HLL? | ||
| I'm only suggesting it for p6 =, not p6 := | 21:42 | ||
| pmichaud | Coke: the point is, sometimes we ahve both. | ||
| and if assignment is really "rebind to a clone", we lose the original bindings from other symbols | |||
| allison | chromatic: if we were in the situation of opcodes built from other opcodes, I'd actually be pretty comfortable with that (the optimization opcodes would be more like jittable subs than anything else) | ||
| Coke | pmichaud: ok. I think I get it. I have no idea how you'd solve that in PIR, new opcodes or not. =-) | 21:43 | |
| allison | pmichaud: is that different than using assign vs. set? | 21:44 | |
| pmichaud | yes | ||
| allison | (maybe set should be called bind, to be clear) | ||
| pmichaud | because there is no "assign to a aggregate element" opcode | ||
| the only thing we have for aggregate elements is "set", and that always does a binding | 21:45 | ||
| allison | oh, weird binding into aggregates that way | ||
| pmichaud | huh? | ||
| I should always be able to bind any symbol to any PMC | |||
|
21:45
calculus joined
|
|||
| pmichaud | and I should be able to modify the value of that PMC | 21:45 | |
| allison | as in, binding $b sticks with the aggregate value even if you rebind the aggregate value to another variable? | ||
| oh, no, I see | |||
| pmichaud | in a HLL @xyz[3] = $a is NOT A BINDING! | ||
| allison | $a's value is copied into the aggregate, not bound to it | 21:46 | |
| NotFound | Don't forger that Integer arrays are value containers. | ||
| allison | pmichaud: is that true in Perl 5 too? | ||
| or, new to Perl 6? | |||
| NotFound | They containt INTVAL, not Integer | ||
| pmichaud | oh please | ||
| allison | I thought things stored in arrays in Perl 5 were references | 21:47 | |
| pmichaud | no | ||
| no no no | |||
| they are not | |||
| allison | (admittedly, it's been something like 3 years since I wrote much Perl 5 code) | ||
| so, arrays and hashes are stored as references, but scalars are stored as copies of scalars? | 21:48 | ||
| pmichaud | $ perl -e 'my $a = 5; $xyz[3] = $a; $a++; print $xyz[3],"\\n";' | ||
| 5 | |||
| it has *always* been this way | |||
|
21:48
mokurai joined
|
|||
| pmichaud | afk for abit, another kid to pick up | 21:49 | |
| allison | interesting | ||
| doesn't that get expensive? | |||
| I suppose it means Rakudo must be using assign everywhere instead of set | |||
| jonathan | *sigh* | 21:50 | |
| No, we use the copy op. | 21:51 | ||
|
21:51
ash_ joined
|
|||
| allison | chromatic: source code optimizations like that are usually "check for pattern, replace pattern x with behavior y" | 21:51 | |
| chromatic: though that does get into partial jitting | 21:52 | ||
| darbelo | allison: a peephole optimizer? | ||
| allison | chromatic: which is pretty advanced | ||
| darbelo: aye, essentially | |||
| darbelo: a bit of a tangent, but I had an "ah-ha" moment at the JVM summit, seeing modern processors doing peephole parallelization on the lowest-level instruction sets | 21:54 | ||
| darbelo | I can see that working at the PAST or POST level, but I'm not sure it fits after PIR has been generated. | 21:55 | |
| chromatic | What's the source code optimization here? | ||
| allison | darbelo: well, PIR is just a language, it's reparsed into an internal representation (somewhat POST-like) | 21:56 | |
| chromatic | If (and that's a big if) fetch is faster than the corresponding longhand, it's because fewer ops are (modestly) faster than more ops. | ||
| I don't characterize fetch as an optimization. It's a convenience to make code shorter, simpler, easier to read, easier to reason about, and more difficult to misuse. | 21:57 | ||
| Coke | chromatic: ObDevil'sAdvocate - we could do that with a .Fetch hllmacro. | ||
| ... assuming you find hllmacros easier to read. | |||
| allison | chromatic: all fetch does is take the C code that would have made up several lines of PIR code and combine it into one line of C code | 21:58 | |
| chromatic | I don't understand what you mean, allison. | ||
| allison | chromatic: the same behavior is being run in both cases, so all you gain is from cutting out the overhead of the separate op calls | ||
| chromatic: if your ops are made up of other ops (which are templated to be jit-able), you can gain the same benefit without defining a new op for it | 21:59 | ||
| chromatic | I just wrote that it has nothing to do with speed. | ||
| allison | chromatic: and you can do it once for everyone, instead of putting it off in a separate op | ||
| chromatic: oh, I though you said you added fetch to speed up a common case? | 22:00 | ||
| chromatic | No, I added fetch to make common code easier to read and to write. | ||
| allison | chromatic: that purpose could be served without a new opcode too | ||
| PerlJam | allison: were you implementing pynie? | 22:01 | |
| chromatic | I can think of two ways: a PIR macro, which no one uses, and a fake op which IMCC rewrites, of which we've removed several. | ||
| allison | PerlJam: working on it, yes | ||
| yes, I hate fake ops | 22:02 | ||
| chromatic | That leaves a macro. | ||
| PerlJam | allison: how do/would you handle the python equivalent to pmichaud's example? Something like a = 5; b = [1,1,1,1]; b[2] = a; a += 1; print a; print b; IIRC | ||
| allison | the macro seems silly too | ||
| chromatic | What's left then? | ||
| darbelo | PerlJam: python -c "a = 5; b = [ a ]; a += 1 ; print b[0]" | 22:03 | |
| allison | set $P0, agg[3], type | ||
| PerlJam | darbelo: thanks. my python is completely rusted :) | ||
| chromatic | I find that very unclear. | ||
| allison | darbelo: b = [ a ]? | 22:04 | |
| japhb | The names matter. 'fetch' and 'vivify' actually mean something. | ||
| PerlJam | darbelo: I don't think the b = [ a ] part is quite the same | ||
| allison | japhb: but they mean almost exactly the same thing as 'get' | 22:05 | |
| darbelo | My python is kinda rusty too. I could be wrong there. | ||
| allison | there's a principle of distinction here | ||
| chromatic | You mean "different behaviors have different names"? | ||
| japhb | allison, it's the small but critical differences that you want to highlight. | 22:06 | |
| I want it to be easy to explain to people who don't already know, and have a better than snowball's chance of them remembering it. | 22:07 | ||
| allison | darbelo: a more exact translation of pmichauds is python -c "b = [1, 1]; a = 5; b[1] = a; a += 1 ; print b[1]" | 22:08 | |
| (with a little extra to handle the lack of autovivification) | |||
| chromatic: aye, and behaviours that are only tiny modifications on existing behaviors don't have different names | 22:09 | ||
| If this were an HLL, I'd probably go for something more like $P0 = agg[3] :default('Undef') | 22:10 | ||
| but, PIR is a primitive language | |||
| chromatic | The fact that we can talk about vivification and get as separate things suggests that the semantic differences are not tiny. | 22:11 | |
| allison | well, on that level, we should have a dozen different opcode names instead of set | ||
| japhb | allison, I would disagree with that. Consider all the ways to declare a variable in Perl (6 especially, but even with 5). 'my' and 'our' are both declaring a variable and are syntactically all but identical, it's only a matter of the scoping mechanism used. Most beginners don't even realize there is a difference. But it's highlighted anyway. Because the distinction is important. | 22:12 | |
| allison | it's an abstraction to hide the complexity | ||
| japhb | 'disagree with that' referring to tiny mods don't have different names | ||
| allison | yes, distinction and reuse are balanced principles | ||
| we're weighing the balance here | |||
| chromatic | I don't believe 'fetch' is the best possible name. | 22:13 | |
| japhb | Fair enough. I argue that this distinction is important enough to warrant different names. | ||
| chromatic | I'm open to a better name for 'fetch'. That better name is not 'set'. | ||
| japhb | And I will grant chromatic's point, but I don't know of a better one. | ||
| chromatic | As for 'vivify', 'reify' is more accurate, but less clear. | 22:14 | |
| japhb | chromatic, explain why ... My (admittedly weak) memory of reify is not matching this well. | ||
| allison | the valuable part of fetch is passing in the default type. there's currently no way to do that | 22:15 | |
| japhb | allison, currently no way to do that *in a single op* | ||
| chromatic | reify has the connotation of bringing something abstract into existence | ||
| allison | and the redundant code comes from people taking the default value they get back and then creating an alternate default value | 22:16 | |
| chromatic | vivify has the connotation of bringing something to life | ||
| allison | japhb: yes | ||
| japhb | chromatic, Ah, I thought of it as "making the abstract real", an act of conversion instead of creation or birth. | ||
| allison | we do make it cheap by using the singleton PMCNULL, so at least we're not creating a default PMC, throwing it away and creating another default PMC | ||
| japhb | I guess that's why you said it was less clear. :-) | ||
| darbelo | japhb: Verdinglichung ;) | 22:17 | |
| allison | the one thing I still don't understand from pmichaud's conversation is the vivify/fetch distinction (essentially, are these orthogonal features?) | 22:18 | |
| chromatic | Yes. | ||
| japhb | darbelo, out of curiosity, what is the literal translation of that? (As opposed to "it means reify") | ||
| chromatic | vivify is fetch + store | ||
| pmichaud | vivify is: | ||
| $P0 = fetch agg, key, ['Undef'] | 22:19 | ||
| allison | chromatic: yes, but from the beginning of Parrot, we've said that PMCs decide whether to store the default value or not | ||
| pmichaud | set agg[key] = $P0 | ||
| moritz | ding = thing | ||
| pmichaud | er | ||
| I'll redo | |||
| vivify is | |||
| chromatic | Unnecessary anthropomorphism is usually less clear. | ||
| moritz | verdinglichung = "the processing of making a thing of something" | ||
| pmichaud | $P0 = fetch agg, key, ['Undef'] | ||
| set agg[key], $P0 | |||
| moritz | (or the process of making somethinig a thing) | 22:20 | |
| pmichaud | except that we don't do the 'set' part if agg[key] already existed at the time of the fetch | ||
| so vivify is really more like | |||
| $I0 = exists agg[key] | |||
| $P0 = fetch agg, key, ['Undef'] | |||
| if $I0 goto label | |||
| set agg[key], $P0 | |||
| label: | |||
| allison | and what HLL code do you translate to vivify? versus what HLL code do you translate to fetch? | ||
| pmichaud | @agg[key] = 3; # vivify | 22:21 | |
| chromatic | Why does that matter? | ||
| pmichaud | $a = @agg[key]; # fetch | ||
| allison | chromatic: trying to figure out the use | ||
| pmichaud | we use vivify when we have an lvalue semantic. we use fetch when it's an rvalue semantic | ||
| more specifically | |||
| @agg[key]{'foo'}[bar] = 3; # vivifies all of @agg[key], @agg[key]{'foo'}, and @agg[key]{'foo'}[bar] | 22:22 | ||
| $a = @agg[key]{'foo'}[bar]; # doesn't vivify any of them | |||
| allison | pmichaud: on @agg[key] = 3; # vivify... that doesn't translate to set_integer_keyed? | ||
| pmichaud | okay, $b then | ||
| darbelo | japhb: What moritz said, and I'm probably missing something in the tri-lingual translation but you can think of it as "thingificating an abstract" too. | ||
| pmichaud | but no, it's not set_integer_keyed | 22:23 | |
| because set_integer_keyed does a rebind instead of an assignment | |||
| allison | well, not with an integer constant | ||
| pmichaud | yes, with an integer constant | ||
| please go look at the CODE | |||
| allison | but with @agg[key] = $a, yes | ||
| pmichaud | with set agg[key], 3 # creates a new PMC, binds agg[key] to it | ||
| which stinks if you had some other symbol that was supposed to be bound to agg[key] | 22:24 | ||
| allison | pmichaud: sure, but it's the vtable function that decides that | ||
| chromatic | And there's a problem right there. | 22:25 | |
| allison | I mean, at the C level, the int that gets passed into the vtable function isn't bound in any way to the constant in the PIR code | ||
| pmichaud | my point is that it broke the binding | ||
| allison | PMCs have to allow different semantics for different languages | 22:26 | |
| pmichaud | set $P0, agg[key] | ||
| store_lex '$b', $P0 | |||
| agg[key] = 3; # oops, $b is not 3 | |||
| (this being a HLL binding, not assignment -- i.e., $b := agg[key] ) | |||
| you can say "its the vtable function that decides the semantics", but I'm working with the vtable functions of the builtin PMCs | 22:27 | ||
| if you say "you should have custom PMCs", I really don't want to do that for PGE, NQP, PCT, etc. | |||
| allison | that was the design decision that was made for the semantics of those PMCs, yes, but it's not required for all PMCs | ||
| pmichaud | and part of the point is that the builtin PMCs aren't even sophtisticated enough to support the semantics of common HLLs | 22:28 | |
| I mean, not even the basic semantics | |||
| at least, not without jumping through lots of hoops | |||
| allison | I guess the question there is who the target user is for those core PMCs | ||
| yeah, they aren't meant to be complex, they're meant to be a simple baseline | 22:29 | ||
| pmichaud | but the simple baseline isn't sufficient to support simple assignments in HLLs | ||
| more than that... | |||
| our vtables don't give a HLL the ability to make a distinction between assignment to an aggregate element and binding of an aggregate element | 22:30 | ||
| allison | that is true, and may be the root problem here | ||
| pmichaud | so an HLL gets to choose one, and then figure out how to work around things for the other | ||
| and if two HLLs make different choices, then interop is completely gone | |||
| allison | (not that I'm entirely fond of adding assign_pmc_keyed, etc...) | 22:31 | |
| pmichaud | assignment versus binding are *basic*, and Parrot has them completely screwed up | ||
| dukeleto | holy vivification, batman! | ||
| chromatic | Not that that is an argument for, against, alongside, or related to fetch/vivify. | ||
| pmichaud | agreed | ||
| anyway, here's my takeaway | |||
| allison | early on Parrot made the assumption that a language would use either assignment or binding for its aggregates, not both | ||
| pmichaud | that's a bad assumption, given that many languages have both | 22:32 | |
| allison | very possibly true, and that may need to change | ||
| pmichaud | I see long deprecation cycles in our future, which totally doesn't help me today. | ||
| allison | (the default assign_whatever_whatever could always be an alias to the set equivalent) | ||
| what's your takeaway? | |||
| pmichaud: ah, but this is an addition, which could happen tommorrow | 22:33 | ||
| pmichaud | no, because it has to be done for all of the PMCs | ||
| and because set and assignment are so screwed up in Parrot already, anything we add is going to make it even more convoluted | |||
| chromatic | All PMCs now and forever. | ||
| allison | pmichaud: still an addition of new features | ||
| pmichaud | I'm telling you, it's completely screwed up internally. | ||
| "I see long deprecation cycles in our future." | 22:34 | ||
| allison | how about new PMCs? | ||
| pmichaud | what new PMCs? | ||
| chromatic | Ugh. | ||
| allison | the old names are horrible anyway | ||
| pmichaud | oh, you mean create all new ones | ||
| I doubt that happens "tomorrow" | |||
| allison | do you really need anything but ResizablePMCArray? | ||
| chromatic | That also means a long deprecation cycle and switchover flag days and.... | ||
| pmichaud | Hash | ||
| chromatic | NameSpace | ||
| purl | NameSpace is the internal namespace for things like $c->forward and template paths, anyway or hll:X::Y, but yes. | ||
| allison | or maybe TypedArray? | ||
| pmichaud | LexPad | ||
| please, not TypedArray | 22:35 | ||
| don't make the assumption that all of the elements created in an aggregate are going to be the same type | |||
| sometimes that last parameter is ['Undef']. Sometimes it's ['Hash'] (for the same aggregate) | |||
| allison | we're talking about adding new interfaces to them for aggregate assignment | ||
| pmichaud | anyway | ||
| allison | (not removing the existing interfaces for aggregate set) | ||
| pmichaud | my takeaway at the moment: all I wanted was two simple opcodes to make my coding life easier | 22:36 | |
| allison | ah, well that's the point of TypedArray, get rid of the silly "single type" assumption | ||
| pmichaud | those aren't going to come. my choices seem to be to redesign the Parrot binding and assignment universe, or live with what we have now. | ||
| allison | chromatic did great work with CallSignature | ||
| I'd love to see that as the new Array, and get rid of all the silly single-typed Arrays | 22:37 | ||
| pmichaud | we also need to fix Integer, Float, and String then | ||
| allison | they're just single elements | ||
| pmichaud | but you can assign to them | ||
| more importantly, you might be assigning something that isn't an Integer, Float, or String | |||
| but right now, Parrot assumes assignment is of like types | 22:38 | ||
| or, more weirdly | |||
| if I do | |||
| dukeleto | pmichaud: perhaps we can make some dynops for you? that means they are not part of core and don't have to deal with dep cycles | ||
| allison | aye, and we already have assign_string_native vtable function | ||
| (for example) | |||
| pmichaud | If I do: | ||
| (HLL) | |||
| actually, let's start over | |||
| if I do: | |||
| $P0 = new ['Hash'] | |||
| .lex '$a', $P0 | |||
| $P1 = find_lex '$a' | |||
| assign $P1, 3 | 22:39 | ||
| from a HLL perspective, I'd want $a to be an Integer 3 | |||
| what I get now is an error | |||
| allison | what error? | ||
| purl | allison: Srmount error | ||
| allison | undefined PMC? | ||
| pmichaud | no | ||
| it tries to do assign_integer on the Hash PMC | |||
| when what I really wanted (HLL) was $a = 3 | |||
| i.e., $a previously had a Hash in it, but now I want it to be an Integer 3 | |||
| allison | that's because Parrot doesn't do morphing | 22:40 | |
| pmichaud | right | ||
| thus my point that it's messed up | |||
| allison | (we carefully ripped out morphing) | ||
| pmichaud | being able to store any object in any container isn't available in Parrot, and that's a common feature of dynamic languages | ||
| allison | well, it's not Perl 6 semantics, that's true | ||
| but, Perl6Hash can do it if it wants to | |||
| pmichaud | you're missing my point | ||
| allison | maybe what we really need to do is deprecate all the core PMCs | 22:41 | |
| pmichaud | "I see long deprecation cycles in our future..." | ||
| allison | seriously, just don't provide any | ||
| pmichaud | anyway, I'm sorry, but I'm frustrated enough by this that I just want to drop the whole thing and live with the lousy situation we have now | ||
| allison | provide some example dynpmcs | ||
| moritz | that will simplify HLL interop enourmously, will it? | ||
| allison | moritz: HLL interop is through vtable interfaces | 22:42 | |
| moritz | </sarcasm> | ||
| allison | pmichaud: I'm actually less frustrated now, I feel like I'm beginning to understand what you need | ||
| moritz | allison: and is that enough to identify objects? detect that $thing_from_oher_hll is an array? | ||
| allison | moritz: that's what does and provides are for | 22:43 | |
| (two different ways of declaring that a particular PMC agrees to support a specific set of vtable functions) | |||
| pmichaud | what parrot needs is a rethink of its low-level vtable methods, its core PMCs, it's calling convention interface, and who knows what else. What I need is a platform that can release Rakudo Star in April. | ||
| allison | do you need fetch and vivify to be core to do that? | 22:44 | |
| pmichaud | I don't *need* them, it makes my life tons easier. | ||
| I can continue to code things the long way. | |||
| allison | or define a dynop | ||
| pmichaud | these need to be available in core parrot | 22:45 | |
| I'm not talking about Just Rakudo. | |||
| These are for the regex engine, and NQP | |||
| Rakudo already does stuff entirely different than this. | |||
| allison | the regex engine is written in NQP now, yes? | ||
| pmichaud | yes | ||
| allison | so, it's not relevant there | ||
| pmichaud | well, the parsing and compiling bits. the runtime is still written in PIR | 22:46 | |
| darbelo | Austin's Close and Kakapo would benefit from that as well, if I read him right the last time this was discussed. | ||
| allison | and NQP is written in, what, PCT? as in regex plus NQP actions, translated to PIR? | ||
| pmichaud | anyway, the reason I wrote the opcodes and provided the patch for chromatic to review was because I said "I can make my life a lot easier if I do this." | ||
| If you're just trying to talk me out of the opcodes, please don't waste any more time on it, let's just say "no" and move on. | 22:47 | ||
| My life would be easier with the opcodes present. I'd prefer not to create dynops for NQP, because NQP really wants to be able to compile to core Parrot without any special features (that's its purpose). | 22:48 | ||
| i.e., NQP wants to be able to create PIR subroutines that Parrot can run even when NQP isn't present. | |||
| allison | yes, agreed | 22:49 | |
| pmichaud | anyway, gotta go, kids need my help. | ||
|
22:58
Zak joined
23:00
Whiteknight joined
23:12
zak_ joined
|
|||
| Whiteknight | so was there an outcome in the vivify opcode discussion? | 23:21 | |
| Whiteknight slowly starts reading through logs | |||
| darbelo | Whiteknight: pmichaud had to help his kids. | 23:22 | |
| Whiteknight | well, that is one possible outcome, though not what I was predicting | ||
|
23:23
kiwichris joined
|
|||
| darbelo | Not much of an outcome, but there was some very interesting dicussion about asignement and binding sematics. | 23:23 | |
| Whiteknight | there are a lot of aspects in the current situation that I am particularly unhappy with | 23:28 | |
| binding and assignment are two, vtables in general irritate me to no end. | |||
| darbelo | If the vm were perfect we wouldn't be working on it ;) | ||
| darbelo is removing a vtable now. | 23:29 | ||
| Whiteknight | no argument | ||
| In general, I like the idea of the vivify and fetch opcodes. They represent patterns that demonstrably get used A LOT | |||
| I worry that VTABLEs are so limiting, and are so inconsistent between different PMC types | 23:30 | ||
| darbelo | Same here. But I think allison was arguiing something different than this particular case. | ||
| Whiteknight | I definitely understand what she was saying, it's a shade of the same concern I have | 23:31 | |
| darbelo | Languages have to jump through lots of hoops. fetch/vivify make it a one line hoop. | ||
|
23:31
kid51 joined
|
|||
| darbelo | She was arguing that the very existance of the hoop means something's wrong with our design. | 23:31 | |
| Whiteknight | right, but it requires that PMC vtables be more consistent, because we're applying an external interface to them | 23:32 | |
| and we would rightfully expect that any aggregate would "do the right thing" when passed to a vivify or fetch opcode | |||
| chromatic | And they do, if the aggregate does anything at all sane with get/set. | ||
| Whiteknight | where "the aggregate" is some of the Resizable*Array types, and Hash (generally) | 23:33 | |
| darbelo | but the current design points in the other direction, the design say 'the PMC decides'. | ||
| japhb | Whiteknight, and namespace, and so on. | ||
| er Namespace | |||
| Whiteknight | japhb: that's my point! We have lots of types of aggregates, and they all need to behave similarly | ||
| or, at least do what we expect | |||
| what if we pass a MultiSub to vivify? Or Env? Or CallSignature? Or Context? or... | 23:34 | ||
|
23:35
Zak joined
|
|||
| darbelo | fetch/vivify are, simultaneously, working around a design decision *and* codifying a very useful and common idiom. | 23:35 | |
| chromatic | At some point you have to expect the caller side to do something sane. | ||
| That's why callee-side semantics alone are insufficient. | |||
| japhb | Whiteknight, given that vivify can be directly translated to a sequence of simpler ops, then the answer is "whatever would happen with the original op sequence" | ||
| jonathan | japhb++ # exactly. | 23:36 | |
|
23:36
mikehh joined
|
|||
| allison | Whiteknight: similarly, but not identically | 23:39 | |
| Whiteknight | not identically, no. But the VTABLEs in general are so wildly inconsistent right now | 23:40 | |
| and I'm not just talking about aggregate-related ones (which tend to be better than most) | |||
| What I like about the vivify and fetch opcodes is that, if aggregates satisfy their role contracts appropriately, we gain the ability to apply new behaviors like autovivification to them externally without changing their internals | 23:45 | ||
| and, we can't deny the huge benefit they have on generated PIR code | |||
| so it's a good use case to show that we need these consistent VTABLE interfaces, so that we can start layering new standard behaviors on top | 23:46 | ||
| japhb | Whiteknight++ # well said | ||
| Whiteknight | that kind of guarantee is very important if we expect HLLs to be using our PMC types with any surety | ||
| because if we can't even make our *Array types conform to a simple, and commonly used, interface our HLL developers have no hope of using them effectively | 23:49 | ||
| kiwichris | Could someone please help with Parrot_runcode for the RTEMS port ? | 23:51 | |
| Whiteknight | kiwichris: what's the problem? | ||
| purl | somebody said the problem was that alpine is talking to an SMTP daemon when making local deliveries, and that is having unexpected effects. | ||
| moritz | purl: forget what's the problem | 23:52 | |
| purl | moritz, I didn't have anything matching what's the problem | ||
| moritz | purl: forget what's the problem? | ||
| purl | moritz, I didn't have anything matching what's the problem | ||
| cotto_work | no, the problem is you | ||
| purl | okay, cotto_work. | ||
| jonathan | purl: forget the problem | ||
| purl | jonathan: I forgot problem | ||
| kiwichris | Whiteknight, the code seems conditional on EXEC_CAPABLE. Does this mean an exec happens ? | ||
| moritz | purl: no, what's the problem? is <reply>| | ||
| purl | wish i knew, moritz | ||
| moritz can't remember the syntax | |||
| Whiteknight | kiwichris: okay, we can look at that. I have a strong suspicion that EXEC_CAPABLE is a remnant of a system we no longer have | 23:53 | |
| kiwichris | Whiteknight, great cause I do not have exec being a single address space OS | ||
| darbelo | Whiteknight: You are thinking of the exec runcore? | ||
| kiwichris: What file/line is that giving you trouble in? | 23:54 | ||
| kiwichris | darbelo, src/embed.c:828 on 1.6.0 (still to move to 1.7.0) | 23:55 | |
| darbelo | Also, what parrot version are you working with? | ||
| Ah. 1.6 still had JIT. | |||
| kiwichris | darbelo, EXEC_CAPABLE is not defined | ||
| darbelo, should I move to 1.7.0 ? | |||
| darbelo | kiwichris: Probably. | ||
| kiwichris | darbelo, great I will. Back in a while. | ||
| darbelo | You could wokr around it by making EXEC_CAPABLE 0 I think. | 23:56 | |
| japhb | kiwichris, and consider doing tests from the svn HEAD as well, as there was some extremely heavy branch merging post 1.7.0, so 1.8.0 may have new surprises for you. | ||
| darbelo | japhb: Let's go easy on him, we don't want to scare him away yet. ;) | 23:57 | |
| dukeleto | kiwichris: hello! | ||
| kiwichris | japhb, ok, I think HEAD testing is always good to do. | ||
| japhb | darbelo, :-) | 23:58 | |
| kiwichris | dukeleto, hi. We need to chat about exit at some point in time. An exit === reboot for me. | ||
| darbelo | Hmm, kiwichris are there any recipes for building RTEMS from OpenBSD? I looked around but didn't find much. | ||
| dukeleto | kiwichris: oooh. where are we calling exit? | 23:59 | |
| kiwichris: also, I am seeking $food in a few minutes and we back in a bit | |||
| kiwichris | kiwichris, yeap in a few places. | ||
| dukeleto | kiwichris: but there are lots of nice peeps in here to help you (except purl) | ||