Pugs t-shirts www.cafepress.com/pugscode | Pugs 6.2.9 released | pugscode.org | pugs.kwiki.org | paste: sial.org/pbot/perl6 | www.geeksunite.net Set by stevan on 15 August 2005. |
|||
dudley | vkon: last I heard, pmichaud (the guy writing PGE) had been swamped with $work | 00:01 | |
so PGE development has slowed down | 00:02 | ||
stevan_ thinks maybe exposing luqui to functional languages was a bad idea ;) | |||
vkon | luqui: I was tempted adding proper code into PGE within parrot, but I fear I can't do all that properly... | 00:03 | |
stevan_ | vkon: it is always worth a try | 00:04 | |
vkon: that's what VCS is good for,.. if it doesnt work... roll back | |||
vkon | :) may be I'll give it a try :) | ||
stevan_ | vkon: any code is good code at this point, especially if pmchaud is not able to work on it | ||
Supaplex hears vkon crack all his nuckles *pop* *pop* | 00:05 | ||
I'd say he's ready :) | |||
luqui | stevan_, why? | 00:08 | |
the fmap thing? | 00:09 | ||
stevan_ | yes :) | ||
dont get me wrong,.. I like it | |||
luqui | I was thinking that before I was exposed to Haskell. I just knew what to call it now :-) | ||
stevan_ | and I like the general direction Haskell has made your brain go in | ||
luqui does too :-p | |||
fglock_ should learn Haskell some day | 00:10 | ||
stevan_ | I guess I mostly fear the "neverending spec" | ||
luqui | yeah, we've all been fearing that about perl 6 | ||
dudley | Everyone should learn Haskell some day. | ||
stevan_ | bah, Haskell if just for PhDs who cant get real jobs ;) | ||
luqui | my guess is that perl 6's spec will be finished when the implementation becomes mature enough that people start using it a lot | 00:11 | |
it's happening now | |||
stevan_ | LOL | ||
I've worked on projects like that | |||
fglock_ | I started a PhD - but unfortunately not in CS | ||
stevan_ | the implementation *is* the spec | ||
fglock_: in what? | 00:12 | ||
luqui | oh, you mean perl 5? | ||
:-) | |||
fglock_ | medicine | ||
luqui | that's not really what I was referring to | ||
stevan_ | Dr. fglock_ ? | ||
fglock_ | yes | ||
my MsC was in CS | |||
luqui | it's just that once perl 6 gets mature, people will focus their energy on screwing with the language through modules rather than through politics | ||
stevan_ does his best groucho marx imitation "Is there a doctor in the house".... | 00:13 | ||
luqui | it's a lot easier to just write a module that implements my proposals than trying to argue with Damian :-) | ||
stevan_ | luqui: isn't that how you do it now? | ||
luqui | yeah, I write perl 5 modules to show that it's doable and that I want it for perl 6 | ||
once I start writing the modules in perl 6 (which is too frustrating for me right now) | |||
I really don't think I'll care whether it's in the "core language" | 00:14 | ||
stevan_ | fglock_: interesting education track there | ||
fglock_ | actually "off track" | ||
luqui | except for things that I think are flat-out wrong like the former MMD semantics | ||
stevan_ | luqui: well MMD semantics really have to be in the core IMO | 00:15 | |
you cant write them in modules and expect the performance to be acceptable | |||
luqui wonders how things are faster when you don't write them in modules | 00:16 | ||
I don't really see a difference | |||
I just see the fact that I don't really care about performace | |||
which is why C::MM::P is slow | |||
but I believe that it could be made pretty fast | 00:17 | ||
esp. with eg. a C backend | |||
stevan_ | luqui: well,.. I am making the assumption that if it is in the core, it can take advantage of certain optimizations | ||
luqui | ah yes | ||
well, I want Perl 6 to be pluggable-optimizable too :-) | |||
stevan_ | luqui: well a proper type system would help make C:MM::Pure fast too :) | 00:18 | |
luqui | so you'd just use an optimization module | ||
stevan_, that's true | |||
stevan_ | ah yes... use optimizations; | ||
luqui | the problem with that is a lot of optimizations will be backend-dependent | ||
but that's okay i guess | |||
if you want it to be fast, you run the one for which all the optimization modules are written | |||
and if you need to use a different backend, tough luck | 00:19 | ||
stevan_ | or write your own | ||
:) | |||
luqui | yeah | ||
bbiab | |||
& | |||
fglock_ | thw wind stopped and the electricity is back :) | 00:22 | |
stevan_ | fglock_: where are you in the world? | ||
fglock_ | Brasil | ||
stevan_ | ah | ||
fglock_ | near Uruguay | 00:23 | |
risse | Can anyone help me understand how to send a normal UDP packet using only socket module? | 02:20 | |
obra | try #perl or #perlhelp | 02:21 | |
new-b | hello | 05:00 | |
luqui | hello new-b | ||
new-b | hi luqui :) | ||
gaal | morning! | 05:25 | |
new-b | hi gaal | 05:29 | |
gaal | hola | 05:30 | |
oh, just read autrijus' last journal entry. ouch! | 05:32 | ||
dduncan | that bites ... did he not do CD backups or such? | 07:28 | |
gaal | wow, this is really Bad Hardware Month. I just came to work after putting my home box in the shop | 07:58 | |
and my *work* computer is dead! | |||
08:05
scw_ is now known as scw
|
|||
luqui | ?eval [1,2,3] >>+<< [4,5,6] | 08:08 | |
evalbot_6930 | (5, 7, 9) | ||
luqui | ?eval [1,2,3] >>+<< [4,5,[6,7]] | ||
evalbot_6930 | (5, 7, 5.0) | ||
gaal | ?eval [1,2,3] >>+<< [4,5,[<a b c d>]] | 08:10 | |
evalbot_6930 | (5, 7, 7.0) | ||
gaal | it's counting elements, isn't it. | ||
luqui | yeah | 08:11 | |
luqui is actually much happier with this than with the specified "deep" semantics | 08:12 | ||
gaal | oh, i didn't remember these existed. | 08:13 | |
luqui | "these" meaning "deep semantics"? | ||
gaal | yes. what are they? | ||
luqui | well, basically you have the identity: | 08:14 | |
?eval 3 >>+<< [1,2,3] | |||
evalbot_6930 | (4, 5, 6) | ||
luqui | and then you just repeat that as you map deep structures | ||
so [1,2,3] >>+<< [4,5,[6,7]] == [5,7,[9,10]] | |||
recursively defined | |||
gaal | ah | 08:15 | |
luqui | what bugs me about that is if you're programming generically, and you just *happen* to get a list in one of your lists, the semantics of hyper automatically change | ||
gaal | i haven't grokked perl 6 dereferencing at all yet. | ||
yes. | |||
luqui | though I'm fine with deep semantics if they're swept off into a corner somewhere, like: my @a is deep | 08:16 | |
nothingmuch | hi ho | ||
luqui | hi ho | ||
gaal | heya nuffin | 08:17 | |
nothingmuch had a nice weekend | 08:22 | ||
hiking, and swimming, and other stuff | |||
luqui++; # hyper + fmap | 08:47 | ||
new-b | hello | 08:48 | |
gaal | so, i need some haskell help porting the following data structure from c: | 10:39 | |
a linked list, where data can only be *prepended* to the list, but different pieces of code receive different head pointers | 10:40 | ||
so that earlier code can see something like <bar baz>, and the next piece of code will see <foo bar baz>, and so on; | 10:41 | ||
data is otherwise immutable; | |||
and this has to be really efficient in terms of memory. | |||
any ideas about how to do this? | 10:42 | ||
integral | that sounds exactly like the built-in list [] | 10:44 | |
gaal | is x:oldx efficient? | 10:45 | |
integral | It's built as: data List a = Cons a (List a) | Nil, and in C would look a bit like: struct List { void *data; struct List *next } with something like next == NULL as Nil | ||
gaal: yes, that just constructs a new Cons-cell | |||
everything is passed around by pointer (essentially) | 10:46 | ||
gaal | good :) | ||
I think it'll even be a [Int#] for real efficiency | 10:47 | ||
this has to exist for every Exp, probably. | |||
or whatever represents a "statement", i'm not sure. | |||
autrijus | gaal: you don't need the explicit "#" | 11:26 | |
GHC can optimize boxes away most of the time under -O | |||
and with help from -funbox-strict-fields | |||
gaal | how come? the compiler needs to know whether to put a data* or a straight int, no? | ||
autrijus | gaal: also, got your mail, thanks! I can leave at Feb 1st or so | ||
gaal: er, I was referring to Int# vs Int | 11:27 | ||
they are of same precision; Int# just drops the box | |||
gaal | autrijus, yes: so isn't Int# a real int and an Int a pointer to an Integer struct of some sort? | ||
re: Feb, cool! we still don't have final dates though. | 11:28 | ||
for the conf that is. | |||
integral | but the optimiser knows that sometimes the semantics of a "real int" and a "pointer to an int" are the same | 11:31 | |
gaal | I'm not really sure about it being an Int really. Ideally it should be a Val, so that lexical pragmas have total freedom in the kind of information they store for themselves, but that might be prohibitive. | 11:32 | |
...and so we might only allow a bit vector of fixed size, like in MJD's trial patch. | 11:33 | ||
how do i actually put the list in Exp, btw? | 11:34 | ||
and is it a problem that there's no Exp type that maps to a "statement" | 11:37 | ||
? | |||
11:45
Aankh|Clone is now known as Aankhen``
|
|||
autrijus | gaal: no, Int is just Int, with 32bit precition. so Int# is C's "int" and Int is a pointer to a struct with metadata part and a int | 11:46 | |
gaal: there is a Exp type, Stmt | |||
that serves as a cons list of stmts | |||
but, I gotta run for a bit and go back to do more data salvage | |||
& | 11:47 | ||
nothingmuch | ciao | ||
good luck | |||
gaal | autrijus: I saw Stmts. Where can I hang actual metadata though? Change "Stmts !Exp !Exp" to "Stmts !Pragmas !Exp !Exp" ? | 12:25 | |
autrijus | gaal: either that or invent a "Pragma" node | 12:47 | |
Similar to Cxt and Pos | |||
or you can hang pragma off the Syn node | 12:48 | ||
Syn "pragma" (Val ...) () | |||
er | |||
Syn "pragma" [Val ..., node] | |||
improvise :) | |||
gaal | :) this unfortunately still doesn't feel natural to me, but sure :) | 12:49 | |
autrijus | the "Syn"way is least natural and most broken | 12:50 | |
gaal | but is it really supposed to be on a Syn node? | ||
autrijus | a Pragma node sounds best; you can then modify "unwind" to unwind Pragma | ||
gaal | ah | ||
autrijus | maybe we can unify Cxt, Pos and Pragma | ||
into an "annotation" note type | 12:51 | ||
Ann | |||
Ann !Ann !Exp | |||
data Ann = Pos ... | Cxt ... | Pragma ... | |||
that may or may not be overkill | |||
it's up to you :) | |||
gaal | here's hoping my computer comes out of the shop - i don't have anything that can build pugs atm :) | 12:52 | |
well there's feather | |||
feather++ | |||
svnbot | r6931 | iblech++ | * t/builtins/lists/{minmax,uniq}.t, | 13:01 | |
r6931 | iblech++ | t/builtins/arrays/{shift,pop,push,splice,unshift,end}.t: | |||
r6931 | iblech++ | Added tests testing that 3.min/3.uniq/etc. does not work (but (3,).min etc. | |||
r6931 | iblech++ | should, of course). | |||
r6931 | iblech++ | * t/builtins/lists/empty_list_in_map.t: Added some more tests. | |||
r6932 | iblech++ | * t/builtins/lists/one_elem_list_kv.t: Added try{...}-blocks so normal Pugs | 13:25 | ||
r6932 | iblech++ | doesn't die. | |||
r6932 | iblech++ | * t/builtins/control_flow/try.t: Added tests for @array = try {...} and %hash = | |||
r6932 | iblech++ | try {...}. Also moved the tests testing whether return() inside | |||
r6932 | iblech++ | try{...}-blocks works to the end, as PIL2JS runs them twice (detailled | |||
r6932 | iblech++ | explanation in the test). | |||
_sublime | hello | 14:02 | |
how do i use a regular expression to break this string '2005/08/25 10:12:01 GMT' into parts so i can pass them into a function and create a date object. | |||
QtPlatypus | _sublime: What version of perl are you asking about? | 14:03 | |
_sublime | the latest | ||
QtPlatypus | So perl5.something? | 14:04 | |
_sublime | v5.8.7 | ||
yes | |||
QtPlatypus nods "You need to ask in #perl" | |||
_sublime | ok | 14:05 | |
thanks | |||
svnbot | r6933 | fglock++ | * perl5/Array - fixed @a=(1,2,3) | 14:20 | |
r6933 | fglock++ | - the error was caused by the pre-processing of parameters in Array AUTOLOAD | |||
r6934 | iblech++ | * Pugs.AST.Internals, Pugs.Bind: | 14:26 | ||
r6934 | iblech++ | isNamed is set correctly now (i.e. it's False for normal positional | |||
r6934 | iblech++ | parameters and True for "+" and "++" params). | |||
r6934 | iblech++ | Testing t/subroutines/* indicates that this change is sane, i.e. all but one | |||
r6934 | iblech++ | tests which worked previously still work. | |||
r6934 | iblech++ | * src/perl6/Prelude.pm: Trivial change so the Prelude gets rebuild (probably | |||
r6934 | iblech++ | needed because of the isNamed change). | |||
r6934 | iblech++ | * t/subroutines/{splatty_in_caller_position,sub_ref}.t: unTODO/try | |||
r6935 | iblech++ | * t/01-sanity/07-try.t: Fixed a test number. | 14:32 | ||
r6935 | iblech++ | * t/data_types/lists.t: Added tests for \(...) (list of refs constructor) and | |||
r6935 | iblech++ | pinged p6l again: www.nntp.perl.org/group/perl.perl6....uage/23085 | |||
r6935 | iblech++ | (See the =begin more-discussion-needed'ed tests.) | |||
r6935 | iblech++ | * t/pugsbugs/io_finalize_part[12].t: skip if $*OS eq "browser"; | |||
r6935 | iblech++ | * PIL2JS: PIL::Params: Respect the (since r6934 working) isNamed field. | |||
r6935 | iblech++ | This means that t/pugsbugs/named_2_positional.t passes now. | |||
r6936 | fglock++ | * perl5/Array - added back some AUTOLOAD preprocessing | 14:44 | ||
nothingmuch | next PIL project: PIL on Groovy (groovy.codehaus.org/) | 14:45 | |
or Java | |||
but I guess Groovy ought to be easier to implement the runtime | 14:46 | ||
dudley | nothingmuch: Have you looked at Scala? | 15:32 | |
nothingmuch | nope | ||
nothingmuch has to leave though | |||
rafl_ | haskell-src-exts is in Debian now. Next step to total world domination: hs-plugins. | 15:36 | |
svnbot | r6937 | iblech++ | * util/smokeserv/smokeserv-server.pl: Show smoke details only when requested -- | 16:32 | |
r6937 | iblech++ | the page is much more concise now. | |||
r6937 | iblech++ | * PIL2JS: PIL::*: Many "no warnings 'recursion'" | |||
r6938 | iblech++ | * t/var/my.t: Fixed plan. | 16:44 | ||
r6938 | iblech++ | * Test.pm: Fixed &dies_ok, &lives_ok, and &throws_ok: | |||
r6938 | iblech++ | ok(..., $todo); # wrong | |||
r6938 | iblech++ | ok(..., :todo($todo)); # correct | |||
r6938 | iblech++ | This error went unnoticed as 1) the normal runcore doesn't care about isNamed | |||
r6938 | iblech++ | and 2) Pugs used to emit wrong isNamed properties. But, as 2) is fixed since | |||
r6938 | iblech++ | r6934 and thus PIL2JS respects isNamed now, the bug was revealed. | |||
putter | autrijus: I'm sorry for your loss. The only upside I have found in such little deaths is they can help remind you what is important, and what not, and thus live life better for a time. | 16:46 | |
fglock: thank you for fixing @a=(...) | |||
iblech: smokeserv layout improvements ++ | |||
iblech: a couple of suggestions: | 16:47 | ||
leave off the column headers. the data speaks for itself rather well. | |||
except when it is lieing. PIR shows 60%. The invisible context is that's 60% of half of a tenth of a percent. | 16:48 | ||
I suggest groveling over the smokes present, and pulling the largest test count for reference. and including a distilled test report on the top line - one shouldnt in general hide the key data. | 16:50 | ||
nothingmuch | pretty: projectoffset.com/downloads.html | 16:58 | |
putter | (sorry, phone call) | 17:04 | |
so maybe 6.2.9 r6531 linux 28 Aug 2005 21:44 Sun 0% 3: 2 ok 1 fail 0 todo 0 skip 0 us | 17:09 | ||
as a top level line for PIR | |||
Pugs removed as null-info-content, time-seconds as not worth the ink, Sun moved after, so dates line up, except for month variation, where the staggering is actually informative, | 17:11 | ||
percent normalized against total tests, and then the key data, duration skipped because it is currently misleading, though perhaps it should go last, | 17:12 | ||
on, and I forgot, direct link to full smoke content, so maybe | |||
6.2.9 r6531 linux 28 Aug 2005 21:44 Sun 0% 3: 2 ok 1 fail 0 todo 0 skip 0 us / 60 min Full >> | 17:13 | ||
thoughts? | |||
I'd be glad to hack it, but wanted to run it by you. Though, since you wouldnt have to fake up data, I you wanted to... :) | 17:14 | ||
Key principles for these suggestions were: ink which doesnt carry information content should go away; and expose the data, don't require digging. | 17:16 | ||
maybe distinguish release from repository by having the revision blank, or say "release", and keeping it at the head of the section, rather than having two sections, one release and one non. the hierarchy is getting a bit cluttered | 17:19 | ||
or not. the extra sections might be ok if the column headings went away. | 17:20 | ||
nothingmuch: pretty as in the page or game is pretty graphically? in a ui sense? ?? | 17:22 | ||
nothingmuch | putter: the movies are very impressive | 17:23 | |
putter | ah, ok | ||
doh, I left off UTC, so | 17:24 | ||
6.2.9 r6531 linux 28 Aug 2005 21:44 UTC Sun 0% 3: 2 ok 1 fail 0 todo 0 skip 0 us / 60 min Full >> | |||
though if there ends up beeing a column key at the top of the page, the UTC can go since it's constant ink and thus can/should be refactored | 17:27 | ||
hi fglock_ | |||
fglock_ | hi! | ||
putter | running a last (hopefully) smoke with the Test.pm simple replacement. hope to get the real Test.pm working today. it was passing 08-test.t, but the test harness didn't like it at all. every make test like complained about hating software! :) | 17:30 | |
fglock_ | I'm still working on Array problems - I'm writing tests this time :) | ||
putter | awesome. one think I didn't expect was how few tests there seemed when viewed in detail, rather than in total. | 17:31 | |
10k tests sounds great, but when you write feature foo, and there are only 3 tests, and they each fail for some reason unrelated to foo, but hand test run, you realize there need to be many more tests. ;) | 17:33 | ||
though the downside of more tests is more to edit as spec changes. the namespace changes, while desireable, mean a whole lot of code and doc are now non-spec. | 17:34 | ||
fglock_ | putter: I did a quick @INC hack - see bottom of ApiX.pm - should this be put elsewhere? | ||
btw - no, you can't easily convert p6 Array to p5 ARRAY, because of lazyness | 17:35 | ||
putter | I haven't looked at it yet, but that's fine. Cruft is accumulating, but that just means it's almost time for a cleanup pass. | ||
Does an array know if it's lazy or not? | |||
fglock_ | yes, you can test with $a->is_lazy | 17:36 | |
putter | for a non-lazy array, can one convert? | ||
fglock_ | but $a->is_infinite is more useful - if it is not infinite, you can do $a->flatten | 17:37 | |
or just shift out elements until $a->elems == 0 | |||
which is probably the sanest thing to do | |||
putter | is there a non-mutating way to get a p5 array representing a p6 array? | 17:38 | |
fglock_ | using tie, I think | ||
putter | (putter meant to say: is there a non-mutating way to get a p5 array from a non-lazy p6 array) | 17:39 | |
ah, | |||
(putter meant to say: is there a non-mutating way to get a p5 array _copy_ from a non-lazy p6 array) ;) | |||
fglock_ | you can also use fetch, which is non-mutating (instead of shift, you mean?) | 17:40 | |
but tie is better, because it is 2-way | |||
putter | i was kind of hoping for a builting. ->to_native_array() or somesuch | ||
fglock_ | np, I can add that | ||
putter | tie, in a universe of very slow things (method calls for instance), is very very very slow. | ||
but you are right. especially for mutating primitives (hmm, do we really need them?), a my @a; $o->tie_to_p5_array(\@a); ... could be nice. | 17:42 | ||
but perhaps we should try to avoid needing it first... | 17:43 | ||
fglock_ | oh, see the @INC implementation | ||
putter | k | ||
fglock_ | I didn't tie @INC to p6, but the other way out | ||
which means @INC is not modified, and is still native and fast | 17:44 | ||
putter | but a ->to_p5_array_copy() or whatever seems essential. cant do p6_to_a() without it. :) hmm, should work on List's too. | ||
fglock_ | where is p6_to_a() used? | 17:45 | |
putter | @INC is generally associated with touching the filesystem. one would have to try really hard to make an implementation so slow that it was of any significance compared with touching disk. so its one place we dont need any optimization at all. | 17:46 | |
hmm... checking... | 17:47 | ||
fglock_ | it looks like p6_to_a() was only needed for @INC after all - is this correct? | 17:49 | |
in require() implementation | |||
putter | p6_to_a and p6_to_l dont seem to be used anyplace but @INC handling in PrimP5 at the moment. which makes sense as it seems they never worked. :) | ||
fglock_ | how about removing (commenting out) p6_to_a and p6_to_l ? | 17:50 | |
svnbot | r6939 | stevan++ | Perl6::MetaModel 2.0 - | ||
r6939 | stevan++ | * some more notes on Roles | |||
r6939 | stevan++ | * revised object model picture,... the number of circles now means something | |||
putter | on the one hand, avoiding unecessary work appeals. on the other, one-way functions are the bane of software engineering. unless it is a large burden, I'd like to be able to get back from an Array, not just get to one. | 17:53 | |
stevan: lol | |||
fglock_ | ok - I'll fix p6_to_a | 17:54 | |
putter | "bane" is too understated. One-way functions, the "I couldn't think of a reason why anyone would want to do that, so you cant", is the fetid festering gangrenous pervasive self-inflicted wound of software engineering. | 17:55 | |
;) | |||
fglock_ | is it ok to return stringified things? deep-converting p6 structs to p5 would take a bit more work | 17:56 | |
OTOH, p6_to_a could return a ARRAY of p6 objects - that's straightforward | 17:58 | ||
putter | "I'm sorry, the linker cant do that, the compiler unrecoverably threw away the needed information." "Yes, the linker uses a simple look-up table, an array of a few pointers in memory. You can read it with dl_foo. What? You want to write to the array? Why would anyone want to do that?" | ||
grr. | 17:59 | ||
array of p6 objects would be great. :) | |||
sorry for bending your ear. | |||
fglock_ | :) | ||
putter | do Array's support bind yet? I notice a lot 3k+ of "argument to bind() must be a Scalar" errors in the log. but perhaps that's poor code generation calling bind with a bogus argument. | 18:02 | |
fglock_ | it does support - can you find a particular example? | 18:03 | |
putter | then it's probably just being called with undef or somesuch. no biggy. I just noticed it going by in the log. | 18:05 | |
stevan_ | greating all | 18:07 | |
autrijus: I assume with the HD failure, we are not planning a release this weekend | |||
putter | there are some in t/var/var.t, but I suspect chasing after specific error messages at this point is not the best way to spend time. | ||
stevan_! | |||
svnbot | r6940 | iblech++ | util/smokeserv/smokeserv-server.pl: Incorporated most of putter++'s suggestions: | 18:08 | |
r6940 | iblech++ | * Removed the table headers, as the contents are self-explaining. | |||
r6940 | iblech++ | * We don't display the seconds of the upload date any longer. | |||
r6940 | iblech++ | * Moved the weekday name to the end so things line up nicely. | |||
r6940 | iblech++ | * putter's idea to calculate the percentage of passed tests using the total | |||
r6940 | iblech++ | number of tests as given by any other test (so PIR no longer shows up as | |||
r6940 | iblech++ | passing 67%) does not work, as new tests are added over time and, more | |||
r6940 | iblech++ | importantly, some backends don't run the tests in ext/. | |||
r6940 | iblech++ | * Minor padding adjustments. | |||
stevan_ | hey putter | ||
putter | iblech: great! | 18:12 | |
iblech: couple of thoughts: ;-) | |||
the system name can go away on the indivitual lines, now that one can see the section headings which give them | 18:13 | ||
my #1 priority is being able to see the data. so a "3: 2 ok 1 fail 0 todo 0 skip 0 us" or even "3:2/1/0/0/0" is important. I'd trade any other field(s) on the line to make room for it. (btw, why is the table so narrow?) | 18:16 | ||
having 4 digits of % on the one-line display seems excessive. NN% would make the big picture clearer, and one could always click on >> for more. | 18:17 | ||
svnbot | r6941 | fglock++ | * PIL-Run - fixed p6_to_a | 18:18 | |
putter | but in priority order (#1 show breakdown numbers at top level, #2 provide a direct link to the full smoke, #3 provide some clue what % means). on this scale, I don't think there's a #4. | 18:19 | |
re #3, perhaps... | 18:20 | ||
what was a's estimate of the total number of tests needed for p6? | |||
say 20000, so one could do 50% 99% as the line for pugs, and 0% 66% as the line for PIR. (where pugs is currently using 10k tests) | 18:21 | ||
otherwise the % number is problematic, even for intra-platform comparisons (ext/ vs non-ext/), and just about useless for inter-platform comparison. | 18:23 | ||
hey stevan_. how goes mm2? ;) | 18:24 | ||
putter think's to himself "I want Modules, Modules, Modules. Packages, Classes, Roles and Modules. Yaaaay, Modules!" (with obvious tempo and inflection) | 18:26 | ||
SamB | what are Roles? | 18:29 | |
luqui | SamB, dev.perl.org/perl6/doc/design/syn/S12.html | 18:31 | |
look about 1/3 of the way down | |||
putter | ooo, the smokeserver evolves even as I use it... very neat... | 18:32 | |
iblech, I actually liked your summary boxes, because they were an intermediate between "see the big picture" one-liners, and the "requires non-trivial examiniation" smoke headers. | 18:33 | ||
with the click downs, the one-liners can be terser, less cluttered, relying on the click downs to give the uninitiated a clue. perhaps two links on each line, one for the full and one the old push-down? | 18:35 | ||
then | |||
153.02 min 16.52 % ok 7172 total: 1185 ok, 5987 failed, 2 todo, 7 skipped, 0 us | |||
could be | 18:36 | ||
oh, putter notices the site has improved while he typed... | 18:38 | ||
anyway, the thought was having the push down would permit the one-liners to be more obscure, if that seemed the best way to show the big picture. | 18:39 | ||
though if things end up in columns, then one could punt the column labels. | |||
and the "NN min", as the least useful bit of data, seems out of place at the front (left). | 18:40 | ||
feel free to say "thanks, putter. that's it for today" at some point. ;) | 18:41 | ||
fglock_: the recent changes (lexicals and control flow) seem to have both broken tests, and fixed tests. the large drop in % is perhaps mostly due to regexps breaking. | 18:44 | ||
m19s28.vlinux.de/cgi-bin/pugs-smokeserv.pl | 18:45 | ||
I'm pondering whether to go ahead and make the Test.pm switch, and then see where things stand, or debug a bit first. | |||
fglock_ | does Test.pm works already? | ||
putter | by itself, it did. inside of test harness (make test), it completely failed (with an odd message). | 18:47 | |
oo, fglock_, if you wanted to replace warn "Help! How do I stringify Class into a class name?" in ApiX, that would be great :) | 18:49 | ||
fglock_ | ok | ||
putter | hmm, that's new. perl perl5/PIL-Run/crude_repl.pl -Iblib6/lib t/01-sanity/08-test.t currently has a | 18:51 | |
Fyi: Can't locate object method "push" via package "Perl6::Container::Array::Native" at /home/net1/perl6/pugsxpl1/perl5/PIL-Run/../Perl6-Container/lib/Perl6/Container/Array.pm line 513. | |||
fglock_ | @INC was a quick hack :) | ||
putter | hmm. so the reason for tying p6 @INC to p5 @INC was what? putter doesnt think he understands the implications... | 18:54 | |
fglock_ | p5 and p6 share the same @INC (but I don't know if that is desirable) | ||
what does Pugs do with Perl 5 @INC? | 18:55 | ||
putter | hmm. we still dont have a concept of how p6 and p5 namespaces interact, with the mm landing so heavily in p5 space. or I'd be tempted to have a p6 @*INC and a p5... @Perl5::INC ? | 18:57 | |
re pugs, not sure. checking.. | |||
putter realized just as he hit return that it would not be easy... | 18:59 | ||
how about @*INC and @Perl5::INC, and we'll worry about it later? | 19:00 | ||
fglock_ | ok - you can change the array name in Apix.pm, and it should just work | 19:02 | |
@INC will be empty on start? | |||
putter | The PrimP5 require() checks a few extra dirs (".",etc) in addition to @INC. the -I's get pushed on @INC first. | 19:04 | |
which is probably where the push() error comes from. | |||
oh, btw, i notices foo(*@a) didnt seem to be working. not sure why. | 19:05 | ||
fglock_ | is the splat flag being set before calling Code->do() ? I'm not sure if this was implemented, but I think so | 19:06 | |
putter | splat flag? that's probably it then. | 19:08 | |
rafl_ | After the haskell-src-exts Debian package now also hs-plugins is packaged. I think I'll upload tomorrow. Now only parrot is missing to get a full-featured pugs into Debian. :-) | 19:09 | |
19:11
GeJ_ is now known as GeJ
|
|||
svnbot | r6942 | putter++ | ApiX.pm: moved tied p5 \@INC to Perl5::\@INC. 08-test.t passes (p6_to_a() is working). fglock++ | 19:11 | |
putter | oh, wow | ||
putter considers switching to debian.... again... | |||
fglock_ | slurpy flag - see Code.pm, Perl6::Param->new(), line 134 - and bind_params() - line 270 | ||
putter | looking... | ||
Juerd | putter: Just do it. | 19:12 | |
putter | ;) | 19:14 | |
putter got stuck wondering why 08-test.t says pugs: user error (Can't locate 5.004 in @*INC | |||
there _are no_ 5.004's in pugs (well, in comments and talks and such). something seriously odd is going on. | 19:17 | ||
putter goes to do splat | |||
fglock_ | stevan: is there a way to get the class name from the class object in mm1 ? | ||
putter: s/splat/slurpy/ - my mistake | 19:18 | ||
putter | f(*@a) gets PILed as a | 19:20 | |
iblech: ooooooo, prettttyyyyyy | |||
as a &f( &prefix:*(@a) ) | 19:21 | ||
that is, a normal f application, with a single argument, the result of applying &prefix:* to @a. | 19:22 | ||
putter never even thought of using color... sigh... | 19:23 | ||
btw, make test-perl5 says | 19:25 | ||
t/01-sanity/01-tap.................................hate software so much. | 19:26 | ||
t/01-sanity/01-tap.................................dubious | |||
Test returned status 9 (wstat 2304, 0x900) | |||
which suggests we are trying to run perl5. !?!? | |||
fglock_: re slurpy. ah. this is the other end... sub f($x,$y){$x+$y} @a=(3,4); f(*@a) | 19:28 | ||
I'm not sure what officially happens. &prefix:* returns a List? | 19:29 | ||
f(*@a,$b,*@c) PIL's as f called with 3 arguments, *(@a), $b, and *(@c) | 19:30 | ||
fglock_ | putter: I think *@a returns a native array, that will be bound to $x and $y | 19:31 | |
this may need some additional work | 19:32 | ||
putter | k | ||
fglock_ | p6_to_a may be useful here | 19:33 | |
svnbot | r6943 | iblech++ | util/smokeserv/smokeserv-server.pl: More de-optimizing for 640x480 (putter++): | ||
r6943 | iblech++ | * Display total/ok/failed/skipped/us directly at the top level, with colors. | |||
r6943 | iblech++ | Also done s/ / /g so the layout doesn't break at 640x480. | |||
r6943 | iblech++ | * Added a second >> link which points directly at the full smoke report (this | |||
r6943 | iblech++ | is not very user-friendly, suggestions?) | |||
r6943 | iblech++ | * Removed the osname column, as the os is already shown in the section heading. | |||
r6943 | iblech++ | * Minor alignment fixes. | |||
putter | given that people have varied machines, I suspect the durations are not comparable anyway. unless you know which items you yourself uploaded. ;) | 19:38 | |
very nifty. | |||
re suggests, hmm... "full"? | |||
but actually I think the >> >> looks fine | 19:39 | ||
putter starts to wonder if the "hate software so much" error messages are a suggestion, rather than an observation. | 19:40 | ||
oh, duh. its not like pugs -B PERL5 was ever implemented... | 19:42 | ||
oh, so what were the thoughts on doing a pugs rapper? | 19:43 | ||
svnbot | r6944 | iblech++ | PILJ2S: README: Added section about &prefix:<*> (splatty/flattening). | ||
putter | timely reading... | 19:44 | |
lol # @array but flatten_me | 19:46 | ||
thank you iblech :) | |||
strawman proposal: pugs renamed pugs_bin, pugs becomes a perl5 script which calls pugs_bin. thoughts? | 19:48 | ||
alternative, pugs exec's a pugs1 script when it gets -B arguments it doesnt know what to do with. | 19:51 | ||
upside, simpler change. no issues of wrapper finding right version of _bin. downside, bit of kludge. cant easily augment normal pugs use. | 19:53 | ||
autrijus | I like pugs_bin. | 19:54 | |
putter | hi autrijus | ||
ok, pugs_bin it is. | |||
any dissent? reservations? cautions? | 19:55 | ||
fglock_ | the purpose is to allow redirecting pugs to PIL-Run, for example? | 19:57 | |
autrijus | ^Wyes. | 19:59 | |
fglock_ | will there be a separate PIL2Haskell? (just curious) | 20:02 | |
putter | fglock_: its more like there are a class of things, like forking to backends, or backend-independent argument and environment handling, that are more easily done in perl5 than in haskell. once there is a layer of insulation, where things happen within "pugs", haskell, p5, p6, combinations, becomes a "mere implementation" issue. pugs.hs would only need to break out pil2haskell if there was some reason it wanted to. | 20:09 | |
fglock_ | k. nice idea, btw | 20:12 | |
putter | my experience writing windows-compatible distributions is limited. can we write a simple "pugs" perl5 file, or do we need a install preprocessing opportunity to make portability work? (eg, "pugs.in" massaged into to "pugs") | 20:13 | |
err, pugs.exe, whatever. do we need a .in? | 20:14 | ||
tnx | |||
it's come up before, so collective credit | 20:15 | ||
fglock_ | windows would need a pugs.bat in order for 'pugs' to work - I think the Makefile takes care of this (not sure though) | ||
putter: re stringifying a class name - $ref->{instance_data}{identifier} returns the long name | 20:21 | ||
putter | tnx. I'll give it a chance to be simple and see what breaks. | ||
!:) | |||
fglock_ | {name} is the short name | ||
putter | If you haven't seen iblech's new smokeserv look, it's worth a look m19s28.vlinux.de/cgi-bin/pugs-smokeserv.pl | 20:22 | |
fglock_ | putter: thanks to ':5 use Data::Dumper' :) | 20:24 | |
putter | :) | 20:26 | |
fglock_ | biab & | ||
putter | k | 20:28 | |
:5 does turn out to be very useful sometimes. | 20:29 | ||
svnbot | r6945 | putter++ | ApiX.pm: p6_to_s() now work on instances of Class. eg, p6_to_s(Num). fglock++ | 20:31 | |
putter | hey nothingmuch | 20:45 | |
nothingmuch | hi ho | 20:50 | |
putter | what are you up to nowadays? forthing? | 20:51 | |
nothingmuch | no | ||
we had the rennovation business | |||
then my brain was shutdown for a week | 20:52 | ||
due to medication | |||
then we went on vacation | |||
and then it became today | |||
putter | lol | ||
dudley wishes he could speak of renovation in the past tense... | 20:53 | ||
putter | pulverized cement, pulverized brain, pulverized rock? | ||
(sand) | |||
nothingmuch | putter: what's next? | ||
putter wishes he had something to renovate... | 20:54 | ||
don't know. was wondering about that myself. | 20:55 | ||
dudley | nothingmuch: Have you written much Groovy? | ||
nothingmuch | dudley: no, i don't know it =) | ||
it just seemed to be the easiest way into JVM | |||
dudley | www.cabochon.com/~stevey/sokoban/do...roovy.html | 20:56 | |
this article put groovy about fourth on my list of jvm languages to try | |||
putter | improved object support, either on pugshs or pil2js, would be nice. | ||
dudley | stevan and I were talking about implementing the mm2 in scala | 20:57 | |
but scala's lack of a decent unit testing framework killed that | 20:58 | ||
so now I'm looking at Nice | |||
Aankhen`` goes to sleep. | 21:00 | ||
putter | big picture, parser->compiler->pil->backends... parser - only pugs. Parser.hs could use some cleanup and extension. next big step is a p6 rules based parser. requires rules. PGE has been too buggy (failure to backtrack issue). rules-on-prolog is another way to get there, at least temporarily. | 21:01 | |
Aankhen`` | G'night. | ||
putter | night | ||
compiler - only pugs. lots of work which could be done. next big step is a p6 based compiler. no-one has been trying lately, so its not clear what the issues are. limited experience suggests big p6 things experience pain vis pugsbugs. it would be nice to see someone try. | 21:03 | ||
pil - a's working on pil2. I have no idea how imminent that is, or if there's anything one might do to help. | 21:04 | ||
nothingmuch | i think we need to learn more about compilable units before this starts | ||
the semantics have many fine lines | |||
putter | interesting | ||
could add -c -o to pilrun :) | 21:05 | ||
nothingmuch | -c -o ? | ||
putter | -c foo.p6 -o foo.p5 | ||
nothingmuch | ah | ||
putter | or to pil2js. but the dynamism of both environments could obscure issues. | 21:06 | |
nothingmuch | right | ||
i think that the "real" compilable units are encapsulated PIL | |||
and that the PIL runner thingies need to implement runtime linking with well defined semantics | |||
and that we have to test that these semantics are sane where they weren't sane before: | 21:07 | ||
mod_perl | |||
WRT BEGIN, INIT, CHECK etc | |||
eval vs use | |||
in perl 5 it was a single imperative process modifying some runtime data | |||
which affected the compile time and the compile time of other code in ways that the compiler could not predict at all | 21:08 | ||
and we need to retain backwards compatibility to some extent | |||
but also make the semantics stabler, and easier for the compiler to eat | |||
so that the very complex semantics of perl 6 can be made to actually do math faster than a human | 21:09 | ||
putter | "PIL runner thingies" ++ :) | 21:10 | |
I was toying with idea of going one level up from lazy languages, and trying a PIL compiler in a constraint language. | |||
nothingmuch | =) | ||
putter | I worry a bit that we only have one oo-capable backend, which doesnt seem quite ready for really heavy use (eg, a compiler), and that is not really undergoing active development. | 21:13 | |
nothingmuch | stevan's work is very heavy development | ||
putter | when piljs does oo, at whatever speed, I'll be much happier. | ||
right, but the rest of pilrun is very non-heavy-use-ready. | 21:14 | ||
nothingmuch | well, i guess that the metamodel, once finalized | 21:15 | |
or rather, once it feels finalized | |||
and once autrijus will be done with PIL2 | |||
will be ported quite rapidly | |||
putter | certainly whenever mm2 is runable, finalized or not, pilrun can switch. | 21:16 | |
nothingmuch | have you tried hacking it in? | ||
putter | no | ||
stevan said "not yet" | |||
nothingmuch | hmmm | 21:17 | |
persuade him to hack in the delta to usability and clean it up later | |||
putter | nah. main point of pilrun at the moment is to _help_ the mm work, not to distract. | ||
nothingmuch | heh | 21:18 | |
putter | the lack of robust oo means that to be productive, people write in other languages. so the p6 core - a regex engine, a parser, a parsetree->pil compiler, gets defered. | 21:21 | |
nothingmuch | yup | 21:22 | |
putter | also things like a ruby->p6 frontend, which would help stress the pil semantics. | ||
err, not pil, but the what you desribed a moment ago. | |||
saying static things about dynamic code | 21:23 | ||
nothingmuch really hoped more people would have commented on the linking thread | |||
putter | oh, there's a sick thought. pil2js can be run linked to perl. how about pilrun compiling to p5 which is supposed to run with either itself, or pil2js? | 21:24 | |
integral | nothingmuch: hmm, what thread is that? | ||
putter | err, s/run with either itself/run with a runtime of either pilrun or pil2js/ | 21:25 | |
nothingmuch tries to find it | |||
do you mean compiling to perl 6 | 21:26 | ||
and compiling that to js? | |||
if you mean compiling this module to js | |||
and that module to perl | |||
and running them together | |||
than it's the responsibility of a js/perl bridge | |||
and the responsibility of the compilers to integrate well enough to js and perl so that the bridge thinks it's running native code. | 21:27 | ||
xinming | seen autrijus | 21:28 | |
putter | nothingmuch: sorry, phone | 21:44 | |
nothingmuch | =) | ||
putter | pilrun compiles to p5, which would naturally work with the pilrun runtime, but instead try to make it work with pil2js via a bridge. the shape of the needed bridge tells you something about linking. | 21:46 | |
nothingmuch | hmm | 21:47 | |
i | |||
putter | ok, pugs as perl5 script is in. | ||
nothingmuch | i think this is too hard a problem | ||
what i'd like to see is an API for loading PIL bits | |||
putter | hasnt been tested on windows. nor make install. nor... | ||
nothingmuch | where each PIL bit was compiled by a different process | ||
and where the beginings of static analysis can be made | 21:48 | ||
putter | I image some shake down will be needed. | ||
nothingmuch | for example a 'use optimize :static_subs' | ||
where each sub call is resolved as early as possible into a by value deref, instead of a by name one | |||
then we can start seeing where the boundries of static compilation as an excercise in caching can be darwn | 21:49 | ||
svnbot | r6946 | putter++ | pugs is now a p5 script which calls pugs_bin. Only limited testing - make test on linux. | ||
nothingmuch | drawn | ||
when we start running tests against interpolated forms then we can learn what needs to be changed | |||
and because so much of the perl6 plan relies on good support for AST or IL transformations, when we can back port this support into PIL3, then we can *really* start writing good code meitters | 21:50 | ||
i'd also like to see the prelude/native bridge plan come out | 21:51 | ||
where the prelude is a circular implementation | |||
and the runtime says what pristine versions of prelude calls it implements natively | |||
putter | is there a import exclusion-set concept? so we could start having a common prelude now, and various backends could just import (-foo -bar) their foo bar choices for primitives? | 21:53 | |
nothingmuch | i think this should be handled on a lower level | ||
each single code ref should have a "binary alternative" attribute | |||
prelude multimethods can have variants with or without backend implementations | 21:54 | ||
bits of the prelude like File::open that can't be "emulated" circularly are stubbed | |||
but have alternatives | |||
the test suite ensures that all the backends implement the prelude with the same semantics as the prelude itself | 21:55 | ||
putter | what are the first steps to move in that direction? | ||
nothingmuch | so, for example &infix:<*> (Int $x, Int $y) { $x + ($x * $y-1) } | 21:56 | |
that way * is defined in terms of + and - | |||
ofcourse, parrot will say that * on two ints is simply the native opcode | |||
and * on two Nums is more more complicated | |||
the things that are needed are a high level API for static binding of parameters | 21:57 | ||
and a code object with attributes | |||
and introspection methods to allow the runtime to load the PIL for the prelude | |||
annotate it with it's native operations | |||
(this will need versioning for functions, because bug fixes need to be ported) | 21:58 | ||
putter | hmm | ||
nothingmuch | now, once we have this code emission can be generalized a bit | ||
PIL functions that static analaysis shows have not been overridden (This can be omitted initially) are replaced with opcodesD | 21:59 | ||
non opcodes are translated | |||
or simply stored as PIL and interpreted | |||
i think this is a sane model because it's very supportive of incremental changes | 22:00 | ||
for example, to add an opcode for for loops you annotate &control_structure:<for>; | |||
putter | emphasizing _first_ steps, it sounds like a the creation of a greatly expanded prelude.p6, yes? | 22:01 | |
nothingmuch | yes | ||
putter | that would be neat. | ||
nothingmuch | with a very heavy emphasis on correctness | ||
quality testing | |||
that is a reference implementation of perl 6 in perl 6 | |||
this is how it's tested: | 22:02 | ||
putter | pil2js and pilrun are currently roling their own p6 preludes (in addition to their primitives of course). it would be nice to combine and extend. | ||
nothingmuch | to test the p6 prelude you use any runtime, and compile it to that VM | ||
putter | s/primitives/things implemented using primitives/ | ||
nothingmuch | but allow only a minimal set of opcodes | ||
if you randomize the minimal set enough times | |||
and the tests keep passing | |||
then your IMPL is OK | |||
putter | ;) | 22:03 | |
nothingmuch | to test a runtime against itself you do the same for it's opcodes vs it's other opcodes vs vanilla prelude | ||
or against another runtime | |||
putter | so, where should the new prelude.p6 go? perl5/ ;-) | ||
nothingmuch | with or without the same function swapping | ||
heh | |||
where it is right now | |||
but it must grow a whole lot | |||
putter | src/perl6/Prelude.pm needs to continue working (well) with pugs. which is actually an painfully strong constraint. | 22:04 | |
nothingmuch | and it must implement silliness such as &infix:<+> (Int $x, Int $y) { inc($x) + dec($y) } | ||
&infix:<+> (Int $x, 0) { $x } | |||
putter | growth in particular is a problem | ||
nothingmuch | &infix:<+> (0, Int $y) { $y } | 22:05 | |
hmm | |||
i think Prelude.pm could simply import the functions from e.g. Prelude::Math::Integral into the global namespace | |||
btw, with my understanding of the pugs internals | 22:06 | ||
which is not too updated | |||
the pugs model should support this annotation quite easily | |||
instead of missing functions in the prelude where there are pugs builtins | |||
the builtins are actually stored in the data structure of stuff like 'sub &infix:<+> ($x, $y) { ... }' [sic] | 22:07 | ||
and then that code can be filled in | |||
does this sound sane at all? | |||
putter | pondering... | 22:08 | |
nothingmuch | let me ask a question: | 22:11 | |
does this model not support any of the things you guys are doing right now? | |||
putter | I'm leary of anything non-optional which affects pugs_bin, as it is a common dependency of everything else. Precompiling the Prelude was added because speed of loading the raw p6 became an issue. Anything which involves other p6 files in the prelude will thus likely first have to deal with precompiling them too. | 22:12 | |
nothingmuch | well, we don't have to make it grow just yet | 22:13 | |
an incremental plan | |||
add support for opcode annotations without changing the prelude | |||
make it translate to the current representation of prims | |||
then implement replacement of prelude functions with opcodes | 22:14 | ||
as an optional feature | |||
and implement several Prelude functions as pugs-hs builtins to test | |||
then gradually add sub foo { ... } for each builtin | |||
and change the hard coded internal representation to use that | |||
when that's done make the internal representation more like the annotation model | 22:15 | ||
putter | performance concequences? | ||
nothingmuch | ~2 more pointer derefs for each prim on the haskell side | ||
svnbot | r6947 | fglock++ | * perl5/Array - fixed (1..Inf).reverse | ||
r6947 | fglock++ | - the error was in Array.str after all | |||
nothingmuch | incremental | ||
fglock_ | PIL-Run passes 16/30 of t/data_types/lazy_lists.t | 22:16 | |
nothingmuch | what I hope this does give us is things like DBD::PurePerl being DBD | ||
annotated with runtime dependant versions | |||
and I also hope it gives us the ability to clean up the mess of builtin functions | |||
like putting 'eval_yaml' in Prelude::Deprecated | 22:17 | ||
and annotating that into the haskell binding to Syck | |||
untill a "true" YAML for perl 6 is out (at which point the Syck binding can simply be moved) | |||
does this make more sense now? | 22:18 | ||
putter wonders why crude_repl.pl in head is missing things he's sure he committed... | |||
I'm afraid I'm not entirely following the proposal, let alone understanding it's implications. | |||
try doing a local branch in svk? | 22:19 | ||
nothingmuch | no chance i'm that competent | ||
and I don't have enough time | |||
putter | the big common prelude file sounded like a nice idea | ||
a place to start? | |||
nothingmuch | i think the opcode replacing API is better | 22:20 | |
how do you guys implement the prelude translation? | |||
how do you guys implement &infix:<+>? | |||
putter | my understanding is neither pil2js nor pilrun use src/perl6/Prelude.pm. Each rolls its own. | 22:22 | |
if you mean Prim.hs, again, each has its own mix of pure native code, p6 code with "inline" native code, and pure p6. | 22:23 | ||
nothingmuch | okay | 22:24 | |
so this is not far from what I'm proposing | |||
how does the definition of &infix:<+> look in pilrun? | |||
is it "native" in the sense that its "PIL::Run::Code->new(...prototype_info..., body => sub { $a + $b })"? | |||
because if you have that as a data structure, all I'm saying is that Prelude.pm should be annotated by the runtime | 22:25 | ||
and that a reference to the thing that implements &infix:<+> should be accessible via the code object of &infix:<+> in the prelude | |||
which really isn't that much =) | |||
putter | perl5/PIL-Run/lib/PIL/Run/PrimP5.pm perl5/PIL-Run/lib6/P5Runtime/PrimP6.pm | 22:27 | |
MULTI SUB infix:<+> ($xx0,$xx1) { p6_from_n(p6_to_n($xx0) + p6_to_n($xx1)) }; in PrimP5. | |||
nothingmuch | aha | 22:28 | |
that was easy =) | |||
MUHLTI SUB is jsut 'sub MULTI' with a fancy prototype, right? | |||
putter | pilrun doesnt have pil2js's nice Inline concept, so the body is actually p5, and the sig, which is p6, source filter expands to whats needed to declare it. | ||
nothingmuch | ah | ||
okay | |||
so what I'm saying is that pilrun should know for every opcode which prelude function it implements | 22:29 | ||
for starters | |||
putter | pil2js has nice foo.p6 containing sub foo () { Inline::JS('...')() } or somesuch | ||
opcode? | 22:30 | ||
nothingmuch | opcode == builtin | ||
then when this cross index is completed the code builtin emitter thingy could load the prelude, compile the PIL code to use prelude.pm, and then go through the PIL code, and eliminate calls to the prelude, replacing them with calls to builtins, by resolving the prelude symbol and seeing if it has a native version | 22:31 | ||
? | 22:32 | ||
canm someone please run t/rules/perl5.t and tell me if it terminates in under 5 minutes on a reasonable machine? | 22:34 | ||
fglock_ | pre-compiling prelude to pil would be a first step - is it possible? | ||
nothingmuch | fglock_: what do you think of all this? | ||
putter | perl5.t is about 6 on mine (pugs), and 10+ a bit (pilrun), and boom (pil2js) | 22:35 | |
nothingmuch | i have one that has had 1:37 of CPU time and didn't even output a plan yet | 22:36 | |
putter | 386 cpu? | ||
fglock_ | before optimization, '+' can be a Code object. after optimization, native p5 is necessary. but it makes sense, I think | 22:37 | |
putter | fglock_: re precompiling to pil, that wouldnt be difficult. but pugs is currently not the speed bottleneck, at least for pilrun. perhaps on pil2js. | 22:38 | |
though it also isnt trivial. but its going to be less than a 2x speedup. | 22:39 | ||
nothingmuch: so you were thinking of doing groovy? | |||
nothingmuch | no, not at all | 22:40 | |
it was just "someone, please look" | |||
putter | ok. i'm confused. | ||
nothingmuch | fglock_: that's exactly what I wanted... the before optimization and after optimization distinction should be a language semantic, not only an optimization | ||
putter | s/i'm/i was/ | ||
fglock_ | nothingmuch: I'm rereading the irc log - can you summarize in a few words what problem this solves? (introspection, etc?) | 22:41 | |
nothingmuch | several points: | 22:42 | |
* should make writing a backend simpler | |||
implement the minimum that your backend needs and reference implementation of prelude.pm can fill in the rest with slow but correct code | |||
* unifies approach towards compiling to opcode driven VMs | |||
the code emitter could be a generalized superclass in p6 | 22:43 | ||
which just happens to emit code in js, p5, or whatever | |||
* opens door to optimizing certain things for speed | |||
for example, if I want to write a perl module for the perl/parrot/js/whatever runtime of the future, i should be able to provide native allternatives easily | 22:44 | ||
the interface remains the same, since it must be callable from everywhere | |||
but the perl 6 code that can be compiled to parrot and js or something completely different | |||
should have the option of easily including a PIR alternative if i want it to run fast on runtime foo and i'm willing to make the effort | 22:45 | ||
an example of how people are doing this today in perl 5 is search.cpan.org/~abw/Template-Toolk...tash/XS.pm | 22:48 | ||
i think it should be more incremental | |||
fglock_ | the runtime loads it's native libs, and then loads Prelude, except for the subs that are already defined natively - right? | ||
nothingmuch | allowing partial optimization | ||
22:48
chibiryuu is now known as chibiryuu`gone`
|
|||
nothingmuch | no, it loads the entire prelude and links to it | 22:48 | |
then it iterates the PIL structure | 22:49 | ||
and resolves all the sub calls that it can | |||
in the future the inferrencer should do this more safely and smartly | |||
whenever it can be sure of a call going to a particular code ref, it checks if that code ref has a native alternative | |||
if it does, it uses that | |||
if it doesn't it compiles a hard call to the code ref | 22:50 | ||
ping? | 22:52 | ||
fglock_ | pong :) | ||
nothingmuch | is this clear enough? | ||
fglock_ | yes - we need to add a linker - we don't have that yet | 22:53 | |
nothingmuch | exactly | ||
that's how this discussion started =) | |||
fglock_ | whether we link bytecode or pil doesn't make much difference | 22:54 | |
nothingmuch | i think the linker should link high level structures | ||
so it should be PIL or something with a compatible enough interface | 22:55 | ||
this is then passed to the optimizers | |||
which is then passed to the code emitter | |||
which might have optimziers of it's own | |||
and with some luck this is flexible enough to happen incrementally during runtime, interleaved with normal execution in order to increase responsiveness | |||
fglock_ | how about contributing a drawing to /docs ? | 22:56 | |
nothingmuch | i'll make an attempt | 22:57 | |
nothingmuch fires up bundled version of omnigraffle for the 2nd time in his life | |||
iblech: smoke server wants rss | 23:02 | ||
huraah! parrot issues fixed: m19s28.vlinux.de/iblech/stuff/pugs-...c3a0d.html | 23:04 | ||
svnbot | r6948 | putter++ | pugs: initial support for -B perl5 and -B JS. There is still an issue of how runjs/pugsjs/crude_repl find their way back to pugs. Currently, you still have to set your PATH correctly. | 23:07 | |
putter | nothingmuch: :) | ||
nothingmuch | UGH! dduncan-- | 23:08 | |
broke my smoke loop since it updated itself with a conflict due to the space silliness | |||
*sigh* | |||
nothingmuch ponders forcing it back to tabs | 23:09 | ||
dduncan | sorry 'bout that | ||
its been a week though ... | |||
I didn't do any detabbing since last weekend | |||
nothingmuch | right, and the script hasn't been running all that while, since some tests were hanging | ||
which just goes to show what a mess these kinds of changes due to working copies =( | 23:10 | ||
dduncan | still, I only intended for that mass change to be done once ... from now on its up to individual sections to maintain themselves with the appropriate whitespace for their situation | 23:11 | |
nothingmuch | but why was it done in the first place? | ||
dduncan | I consider the problem you faced to be the 1% exception, though | ||
nothingmuch | what was so horribly wrong with the way things were? | ||
dduncan | better maintainability | ||
nothingmuch | *cough* | ||
i find spaces annoying to maintain | 23:12 | ||
some people don't | |||
svnbot | r6949 | fglock++ | * perl5/Array - yet another try to fix Array.str | ||
r6950 | putter++ | pugs: minor correction | |||
r6951 | putter++ | pugs: untabbify | |||
nothingmuch | that's just what it is, a user choice | ||
dduncan | the problem with mixed tabs and spaces in the same file is that they display differently depending on who's looking at them | ||
nothingmuch | not if they are edited consistently | ||
dduncan | why would you indent some lines with tabs and others with spaces? | 23:13 | |
nothingmuch | no | ||
i would indent all lines in the same indenting format the file was in the first place | |||
the reason i'm upset is that my code, which i'm the only one who uses, the smoke loop, which I share for the purpose of reference | |||
putter starts a fresh install, just to make sure he hasnt broken things... | |||
nothingmuch | should not be broken by massive updates that have no value | 23:14 | |
dduncan | however, when I came along, greater than 90% of the files having tabs in them were mixed tabs and spaces ... there was only a handful with pure tabs | ||
wolverian | www.jwz.org/doc/tabs-vs-spaces.html | ||
dduncan | currently I recognize that makefiles must indent with tabs, but what other kinds of files require that? | 23:15 | |
nothingmuch | files that nothingmuch was editing in his working copy | ||
that were with tabs to begin with | |||
and well formatted | |||
which now have conflicts | |||
(due to conflicts they now have tabs, spaces and syntax errors instead of just tabs) | |||
dduncan | you're welcome to reverse the change on those specific files in the repository, and then try to commit your work | 23:16 | |
nothingmuch | i won't do that because that will only make things worse off than before | ||
dduncan | you would remove the tabs again after your changes | ||
that's just a temporary step so you avoid your conflicts | 23:17 | ||
nothingmuch | i'd just really like to be sure that the next time someone wants to make a big change that affects the whole code base that someone would stop | ||
and ask people to try to do it incrementally as they check in files | |||
dduncan | who would remember? | ||
nothingmuch | no one | ||
but the point is - tabs and spaces don't matter | |||
dduncan | and the issue was discussed on this channel in advance | 23:18 | |
nothingmuch | if it really would have bothered someone that a file is "unmaintainable" then they could fix it on the fly, and commit that | ||
dduncan | everyone agreed that having spaces consistently was better | ||
nothingmuch | i'm not sure everyone agreed that changing them all in one go was better | ||
many people bitched about this all week long | |||
dduncan | most people were already using spaces from the start, only a minority weren't | 23:19 | |
I was one of those minority | |||
nothingmuch | it doesn't matter | ||
i really don't care if it's tabs or spaces | |||
dduncan | the main thing is that one is consistent in the choice | ||
as I said, most files mixed both of them, which helped no one | 23:20 | ||
nothingmuch | what I do care about is that if things are broken WRT horizontal whitespace, they could be fixed on the fly, carefully, and manually | ||
but files which worked, and were not inconsistent (or no one noticed they were inconsistent) aren't bugging anyone | |||
hence they are not broke, hence they should not be fixed | |||
putter | then we're all set. and dduncan's rollback concept is an easy way to merge changes which only affect a few files. though it might be easier just to M-x untabbify your local file. | ||
dduncan | they bug people who want to maintain them and indenting is inconsistent | 23:21 | |
nothingmuch | then those poeople will update them the next time it bugs them | ||
it's really much simpler, no headache, no fuss | |||
no breakage | |||
that's all i'm trying to get... a "yes, i see how this broke, i'll be more careful next time" | |||
dduncan | I already recognized that before | 23:22 | |
and said so | |||
nothingmuch | you seem to keep trying to say "no, you're rong, just untabify and you'll be happy" | ||
putter thinks this so isnt a problem. Even if he hasn't pursuaded perl-mode to not use tabs, and has to remember to M-x untabbify. | |||
dduncan | I also said how to work around the problem now that it is already caused | ||
nothingmuch | i already worked around this problem... and i'll say it again: this isn't the point | 23:23 | |
dduncan | okay, I'll say it again ... I recognize that my large change did lead to some problems | ||
nothingmuch | will there be any massive if/else cuddling or uncuddling, or parenthesis padding, or automatic assignment vertical alignment next week? | 23:24 | |
dduncan | no | ||
only with my own code | |||
nothingmuch | okay | ||
=) | |||
dduncan | the space thing was the only thing I was doing on a wide scale | ||
because it was the simplest and easily agreed on problem | |||
svnbot | r6952 | fglock++ | * t/.../lazy_lists.t - fixed syntax | 23:27 | |
r6953 | fglock++ | * t/.../lazy_lists.t - another syntax fix | |||
putter | dduncan: so what are you working on nowadays? | 23:29 | |
nothingmuch really likes the crayon color picker | |||
dduncan | mainly the Perl 5 versions of my Rosetta framework | ||
putter tries to get a feel for what folks are up to... | |||
dduncan | for databases | ||
putter | ah | ||
right | |||
dduncan | and eventually translating them to Perl 6y | ||
putter | neat | 23:30 | |
dduncan | I just want to do a whack of stuff in Perl 5 first, so I don't have to translate all those fixes separately | ||
putter | any idea what the timeframe is on starting p6? any showstoppers? | ||
makes sense | |||
dduncan | moreover, I'm making my Perl 5 look more like Perl 6, to reduce the maintenance later in having both versions updated in parallel | ||
hopefully I'll start translating SQL::Routine to Perl 6 within 2-4 weeks | 23:31 | ||
that's the most-core one | |||
putter | in what way(s) are you making your p5 p6-like? | ||
dduncan | I last translated it to Perl 6 around April-May | ||
whole bunch of ways ... | 23:32 | ||
3-part version numbers ... already on CPAN | |||
use of 'only' for 'use Foo' statements, allowing all the same flexability | |||
Class::Std | 23:33 | ||
other various | |||
I have to go to lunch ... talk later | |||
putter | "how to make your p5 code more p6-like" could make a good quickref/wikipage/article. | ||
later & | |||
dduncan | P.S. At the same time, I'm making a whole bunch of changes inspired by Best Practices ... which are largely the same as making perl 6 like | 23:35 | |
putter | :) | 23:37 | |
oh, drat. make test uses /blib/script/pugs rather than /pugs | 23:38 | ||
so pugs -B perl5/js tries to find them in /blib/script/perl5/... not /perl5/... | 23:39 | ||
iblech: any thoughts on the RightWay for pugs to find runjs and runjs to find pugs? | 23:45 | ||
or anyone? | 23:46 | ||
the callback can certainly be an environment variable | |||
but the call.... | |||
iblech: any object to runjs and jspugs being installed in blib/script/ ? | 23:47 | ||
makes editing a bit more of a pain | |||
svnbot | r6954 | putter++ | PIL-Run: moved the simple and fast lib6/Test.pm to lib6_disabled/. The real Test.pm now runs by default. | 23:52 | |
fglock_ | putter++ |