6.2.11 released! | pugs.blogs.com | pugscode.org | pugs.kwiki.org | paste: sial.org/pbot/perl6 Set by wolverian on 12 February 2006. |
|||
Alias_ | ah, right | 00:00 | |
beppu | kinda different from typical unix, but it works for perl. | ||
Alias_ | right | ||
beppu | ...so you solved these problems fairly recently, then. | ||
Alias_ | When audreyt stayed with me for the week in December | 00:01 | |
She knew how, and I like making things simple | |||
File::HomeDir and File::UserConfig are as a result of a grant to do a desktop application | 00:02 | ||
beppu | I'll try it out for the app I'm writing. | ||
Alias_ | let me know how it goes | ||
Sorry I don't have system etc and htdocs, or web cache, or data cache yet :) | |||
But I have some ideas | |||
beppu | Sometimes (in my unix-centric world) I forget about other operating systems... but this scheme seems like it'll work portably. | ||
Alias_ | The problem is that if you just go implement it, you have "where Alias things cache should go", not necesarily where it actually should go | 00:03 | |
So it's high risk to just start coding without lots of research and confirmation | |||
s/things/thinks/ | |||
A Perl /var/cache might be ok though | 00:04 | ||
oh, also we have a standard /tmp | |||
:) | |||
So that's tmp, bin, lib, share, and user | |||
00:10
binary42 joined
00:27
Nouk joined
00:44
hcarty joined
00:45
sapper joined
00:46
hcarty left
01:09
avarab joined
01:18
avar joined
01:21
drbean left
01:29
drbean joined
01:40
drbean left
02:20
avar joined
02:39
jeh_ joined
03:01
stennie joined
03:11
Cryptic_K joined
03:36
Nouk joined
04:06
scook0_ joined
04:09
Khisanth joined
04:31
ayrnieu joined
05:00
phredmoyer joined,
phredmoyer left
05:20
xinming joined
05:50
Cryptic_K joined
07:15
drbean joined
07:19
iblechbot joined
07:30
Cryptic_K joined
07:59
pdcawley joined
08:13
phredmoyer joined
09:02
K_ joined
09:22
larsen joined
09:44
marmic joined
09:56
azuroth joined
|
|||
svnbot6 | r9056 | audreyt++ | * DrIFT.RuleYAML - add diagnostics messages when loading | 10:17 | |
r9056 | audreyt++ | of YAML structures failed. | |||
r9057 | audreyt++ | * re-drift the four source files. | 10:20 | ||
r9057 | audreyt++ | * (previous commit also unbroke "make profiled".) | |||
10:24
chris2 joined
10:32
bernhard joined
10:41
bsb joined
10:46
Nouk joined
10:57
iblechbot joined
11:01
ghenry joined
|
|||
azuroth | I did some of my C++ homework in haskell. teacher didn't like that :-( | 11:30 | |
Kattana | and this surprises you? | 11:33 | |
11:36
drbean joined
11:46
drbean left
11:48
drbean joined
|
|||
svnbot6 | r9058 | gaal++ | * Fixed remaining kinks in precompiled Prelude loading. | 11:56 | |
r9058 | gaal++ | Ladies and gentlemen, it works! and it's fast! | |||
gaal | time ./pugs -CParse-YAML -e 'our $*str = "hello"' > h.yml | 12:02 | |
0.040u 0.110s 0:00.14 107.1% 0+0k 0+0io 0pf+0w | |||
time ./pugs -e ' Pugs::Internals::eval_p6y("h.yml"); say $*str' | |||
hello | |||
0.470u 1.120s 0:01.59 100.0% 0+0k 0+0io 0pf+0w | |||
and, for simple one-liners: | |||
time ./pugs -e 'say "hello, fast world!"' | 12:03 | ||
hello, fast world! | |||
0.460u 1.070s 0:01.58 96.8% 0+0k 0+0io 0pf+0w | |||
... and this is on a mostly unoptimized pugs :-) | |||
audreyt | gaal++ gaal++ gaal++ | 12:13 | |
12:14
joepurl joined
|
|||
clkao | (!) | 12:15 | |
Juerd | gaal: Hey, that's weird, in your character set, numbers turn out much lower! :) | 12:16 | |
gaal++ | |||
Any figures yet on how much this saves a smoke? | |||
audreyt | well, it saves compilation time mostly | 12:19 | |
the runtime doesn't get faster Ithink | |||
gaal | Juerd: not yet. but one significant benefit is that people with low RAM can still build a useful pugs | 12:20 | |
that doesn't take 35 seconds to say hello world. | |||
the new system makes loadtime a little slower, in fact, but as audrey points out, we can now cleanly also precomplile Test.pm | 12:21 | ||
so it should pay off nicely. | |||
Juerd | audreyt: Oh, I misunderstood the figures then. I thought startup time was decreased. | ||
gaal | also also, audrey has been profiling and speeding up -CPugs | 12:22 | |
Juerd | Ah | ||
gaal | Juerd: one thing that's massively easier now is, uh, separate compilation of arbitrary code | ||
./pugs -CParse-YAML -e your-code > a-dump.yml | 12:23 | ||
and load it with a new prim | |||
and we've been thinking of design for module bytecode | |||
there are a few very good ideas to steal from python, for example, precompile any module you encounter, if you have write permissions to the directory it is in | 12:25 | ||
they also have a very good design for the bytecode format we can plag^H^H^H^Hstudy and learn from | 12:28 | ||
so this means that when you install a module from CPAN, pugs can not only throw .p6 files in your install site, but also precompiled .p6c (or whatever we name them) | 12:29 | ||
12:36
pdcawley joined
|
|||
audreyt | maybe .p6c for precompiled unoptimised, .p6o for precompiled optimised (closed-finalized with "use optimize") | 12:37 | |
gaal | okay, some more data points. on a modest machine (p3 1.2GHz, 256MB): | 12:40 | |
clean build, unoptimized: about 13 minutes | |||
(this includes the JS prelude precompilation, which was optional, and took about 2 min) | |||
./pugs -e 'say "hello world"' took 8 seconds to run | 12:41 | ||
which is eminently usable | |||
svnbot6 | r9059 | audreyt++ | * -CPugs: Massively speeded up compilation speed and loading speed. | ||
gaal | much better than the 35-odd seconds that it used to take. | ||
pdcawley | Cool! | ||
What's that done for the speed of running the full test suite? | 12:42 | ||
gaal | and, of course, memory consumption was reasonable | ||
pdcawley: we need to benchmark. at first instance, it will slow it down | |||
pdcawley | ? what? More stuff happens at runtime now or something? | 12:43 | |
gaal | as the backlog explains, loading is now done from yaml, which is fast, but at runtime is a little slower than the old -CParse mechanism | ||
Juerd | A psychological trick to pull is to include this precompilation in the "make" phase, which makes the "make test" phase benchmarkable between the first and second time. | ||
gaal | however, we can now easily and cheaply precompile Test.pm | ||
lypanov | pugs is slow anyways, devel speed is way more important :) | ||
Juerd | And make it look like it's fast ;) | ||
gaal | so it will pay off | ||
additionally, audrey has just checked in a speedup to -CPugs :) | 12:44 | ||
pdcawley | Right, 'cos you're no longer having to compile Test.pm for every test. | ||
gaal | yes, so that's like $dot_t times the parse hit for Test.pm | ||
pdcawley | $dot_t ? | ||
gaal | find t ext -type f | wc -l :-) | 12:45 | |
pdcawley | Should make chromatic a little less unhappy... | ||
gaal | so, to summarize the prehackathon: | ||
even if we revert to the old precompilation strategy of -CParse, we will have gained two things: | 12:46 | ||
1. knowledge about separate compilation with YAML | 12:47 | ||
Juerd | How fast is pugs at skipping POD? | ||
gaal | 2. -CPugs itself is now faster, thanks for our (audrey's) profiling work | ||
Juerd | And if not fast, then: does pugs support __END__ yet? | ||
integral | are there lots of other places in pugs that could benefit from FPS? | ||
gaal | Juerd: benchmarks welcome :) | ||
Juerd | gaal: I understand. Will have to compile first | 12:48 | |
pdcawley | FPS? | ||
integral | Like, should VStr be changed to a FPS? | ||
pdcawley: Data.FastPackedString | |||
pdcawley | Haskell datatype? | ||
Juerd | 13:59 < gaal> 2. -CPugs itself is now faster, thanks for our (audrey's) profiling work | ||
gaal | integral: the parser could profoundly benefit from it, as will pugs in general, but that would probably mean switching away from Parsec, as it's just too closely coupled to haskell SlowStrings. | ||
Juerd | Any figure? (%?) | ||
integral | gaal: that's because Parsec will work with parsing any list type? | 12:49 | |
audreyt | Juerd: let me finish the FPSization | ||
and I'll give you bench numbers | |||
Juerd | audreyt: Oh, didn't know you were already even more steps ahead. Don't let me distract you :) | ||
gaal | integral: yes | ||
Juerd | (Should have guessed, or at least assumed :P) | 12:50 | |
gaal | Juerd: of course, we're going off to meet Larry in half an hour, so there are portions of the world to take over by then ;) | ||
Juerd | Oh, interesting :) | 12:51 | |
This is interesting too: | |||
Writing Makefile for WTemplate | 12:52 | ||
Writing Makefile for Perl6::Pugs | |||
Segmentation fault | |||
But it's DProf that causes this | |||
So no worries | |||
bsb | Re: borrowing from python, it seems like their header could've been better planned | 12:53 | |
mail.python.org/pipermail/python-de...04271.html | |||
gaal | ooh, we were looking at the header and were thinking it was pretty good. /me looks | 12:54 | |
bsb | An offset to the code could have allowed future room to grow | ||
integral | it needs to be a binary header? It can't just look like a normal perl file but with a 'use MagicPseudoSourceFilter 0.45'? | ||
bsb | If these file are to be binary then www.w3.org/TR/PNG-Rationale.html#R....-signature is a good reference | 12:55 | |
gaal | cool (the \r\n trick is really neat) | 12:56 | |
bsb | for sure | ||
gaal always says #!/usr/bin/perl -w on the hashbang as a newlinality shield | 12:57 | ||
bsb | eh? | 12:58 | |
gaal | separate but similar issue: | ||
perl5 is clever enough not to care about newline types | |||
but the if the kernel doesn't find an interpreter called "perl\r", it barfs | |||
with the infuriatingly misleading error message about file not found | 12:59 | ||
bsb | I once had trouble with -F on the #! line, adding -w fixed it :) | ||
integral | hmm, empty almost needs a typeclass | ||
oh, mempty, duh | 13:00 | ||
gaal | integral: what's mempty? | ||
integral | unit of the Monoid class | ||
13:01
KingDiamond joined
|
|||
gaal | integral: that's still audrey stuff as far as my brain's concerned :) | 13:02 | |
gaal 's brain has made many protests since Tuesday, not all of them successful | 13:03 | ||
13:15
xinming joined
|
|||
integral | hmm, is drift slow on Pugs.AST.Internals for everyone? | 13:27 | |
13:32
feng joined
14:16
avar joined
14:41
stennie_ joined
14:46
nnunley_ joined
14:49
nnunley_ is now known as nnunley
15:02
Maddingue joined
15:18
blm_ joined
15:20
drbean left
15:30
elmex joined
|
|||
Juerd | 14:09 * gaal always says #!/usr/bin/perl -w on the hashbang as a newlinality shield | 16:08 | |
Ah, smart! | |||
Thanks for the trick :) | |||
Re byte headers: After the magic bit, I think things are better off as a hash-like structure, rather than a positional list of metadata, for scalability | 16:11 | ||
And maybe it'd be nice even to store the code length as well as the bytecode data, so we can have multiple files encoded in a single file, or interesting stuff like DATA sections | 16:14 | ||
integral | maybe we should just use something compatible with PBC's? | ||
Juerd | What be PBC? | ||
Parrot BC? | |||
integral | parrot bytecode container, or something | ||
Juerd | I don't know the format | ||
integral | it's yet another executable file format with multiple sections and so on. | 16:15 | |
Juerd | Is it neat and scalable? | ||
And does it have enough offsets or size indicators to be parsed without too much pain? :P | |||
integral | Probably not, but afaik you can invent new section types for it (like Jonathan did for debugging) | ||
hope so. Remember the parrot folks are having to use C to do their parsing after all | |||
Juerd | Yes, but parsing for one purpose may be easy while parsing for another may be hard. | 16:17 | |
If you're writing an analysis tool, and you need it to be fast, so you skip the common libraries and stuff, you don't want to have to parse everything to get to the end. | |||
integral | www.parrotcode.org/docs/parrotbyte.html # They actually have docs! yay! | 16:18 | |
16:18
rantanplan_ joined
|
|||
Juerd | Say you have N/a* chunks of data as a header, and then a body that's more interesting. Then N/(N/a*) is nicer, because it lets you skip the header chunks entirely. | 16:18 | |
Huh, Parrot with documentation? Are you sure it's the same Parrot? ;) | |||
integral | don't worry, I'm sure it'll turn out to be unimplemented, or incorrect :) | 16:19 | |
Juerd | Hm, no magic? | 16:20 | |
integral | 16 bytes in | ||
Juerd | But... | ||
Juerd sighs | |||
Okay. | |||
Heh, magic is native even. | |||
That's not a useful magic for file(1)-like utilities, and the many libraries that do the same kind of thing. | 16:21 | ||
integral | oh dear. | ||
Juerd | We're not going to fully depend on .foo extensions, I hope. | ||
integral | I thought the parrot designers had all been unixy enough to spot things like that :-/ | ||
Juerd | It's nice to have them, and even to require them, but when I loose the extension, I still want to be able to tell what the hell to parse the file with :) | ||
I hope this is an unrelated kind of magic, because a highly variable magic part is useless for the kind I'm talking about... | 16:22 | ||
I say let's steal PNG's magic ;) | 16:23 | ||
But slightly different | |||
To avoid endless images of talking birds. :) | |||
16:28
chris2 joined
16:41
vel joined
17:10
blm_ is now known as blm
17:19
justatheory joined
17:20
nothingmuch joined
17:41
arcady joined
17:43
vel joined
18:19
xinming joined
18:22
marmic joined
18:32
DesreveR is now known as r0nny
18:58
justatheory joined
18:59
justatheory joined
19:21
Limbic_Region joined
19:46
buu joined
|
|||
nothingmuch | audreyt: ping | 19:46 | |
gaal: ping | |||
19:56
dduncan joined,
buu joined
20:14
pdcawley joined
20:30
justatheory joined
20:32
orafu joined
20:35
SamB joined
20:38
zackmadrid joined
20:41
zackmadrid left
|
|||
gaal | pong | 20:43 | |
nothingmuch: hello! :) | |||
20:43
justatheory joined
|
|||
nothingmuch | gaal: hola | 20:47 | |
svnbot6 | r9060 | audreyt++ | * test for the bug where lexically-imported functions | ||
r9060 | audreyt++ | will incorrectly get rebound when the containing function | |||
r9060 | audreyt++ | gets reentered. | |||
r9061 | audreyt++ | * the (massively undocumented) Pugs::Internals::eval_p6y($file) | 20:50 | ||
r9061 | audreyt++ | function now incoporates global bindings in the source yaml file. | |||
r9062 | audreyt++ | * DrIFT.RuleYAML: Introduces the "YAML_Pos" drift rule, | 20:53 | ||
r9062 | audreyt++ | to save the resulting .yml file's size by discarding | |||
r9062 | audreyt++ | label names from Haskell record types and treat them | |||
r9062 | audreyt++ | as positionals. | |||
r9063 | audreyt++ | * Data.Yaml.Syck: trivial code cleanup of s/toEnum . fromEnum/fromIntegral/ | 20:56 | ||
nothingmuch goes to bed | 20:57 | ||
svnbot6 | r9064 | audreyt++ | * Pugs.Compile.Pugs: -CPugs now uses FastPackedString; | ||
r9064 | audreyt++ | the generated code is also much more compact (but we are | |||
r9064 | audreyt++ | not using it for Prelude anymore.) | |||
nothingmuch | see you all tomorrow at the post-pre-hackathon | ||
audreyt | see ya nothingmuch | ||
svnbot6 | r9065 | audreyt++ | * When prelude loading failed due to (trapped) errors, make | 21:00 | |
r9065 | audreyt++ | it clear that we are reloading it again from parsed source code. | |||
21:09
bsb joined
21:19
orafu joined
21:32
bsb joined
|
|||
svnbot6 | r9066 | audreyt++ | * PreludePC.hs - actually load global bindings from Prelude. | 21:36 | |
r9066 | audreyt++ | there are some remaining problems -- e.g. sprintf() complains | |||
r9066 | audreyt++ | about arity errors -- to be investigated tomorrow. | |||
21:39
DesreveR joined
|
|||
integral | audreyt++ # pugs feels much faster now | 21:45 | |
21:46
vel joined
|
|||
svnbot6 | r9067 | audreyt++ | * PreludePC - use modifyTVar to union the glob pad on the | 21:52 | |
r9067 | audreyt++ | correct order (newest first). Somehow &*eval is still | |||
r9067 | audreyt++ | broken. :-/ | |||
audreyt | integral: &*eval is somehow broken though. (as is &*sprintf, or any code binding with arity>1) | 21:53 | |
gaal and I may look into this tomorrow -- but it's midnight and I should sleep now | |||
& | 21:54 | ||
22:09
nnunley_ joined
22:12
bsb joined
22:32
beppu joined
23:06
larsen joined
23:15
K_ joined
23:21
K_ joined
23:26
K_ joined
|
|||
integral | hmm, just discovered that FastPackedStrings are 8-bit only :-/ | 23:27 | |
23:27
kane_ joined
23:40
drbean joined,
kane_ joined
|
|||
Juerd | integral: If you strictly encode the same, that shouldn't matter much | 23:41 | |
Fortunately, utf8 is octet aligned :) | 23:42 | ||
23:53
DesreveR is now known as r0nny
|