Fire is step THREE! | github.com/perl6/toolchain-bikeshed | Channel logs: irclog.perlgeek.de/perl6-toolchain/today | useful prior art: metacpan.org/pod/CPAN::Meta::Spec
Set by moderator on 30 March 2016.
00:27 sufrostico joined 00:36 sufrostico joined 01:48 ilbot3 joined
moderator Fire is step THREE! | github.com/perl6/toolchain-bikeshed | Channel logs: irclog.perlgeek.de/perl6-toolchain/today | useful prior art: metacpan.org/pod/CPAN::Meta::Spec
03:27 MadcapJake_ joined 06:36 domidumont joined 06:37 domidumont joined 06:52 domidumont joined 06:56 domidumont joined
nine "As several of the initial commenters on GitHub bug reports noted, another problem with npm is that modules are not namespaced by origin or user account. That made it impossible for downstream projects to simply switch from Koçulu's left-pad package to Westland's." lwn.net/Articles/681410/ 07:31
And suddenly we have a very real example for why the whole :auth complexity might really become usefull.
ugexe: sorry to keep your pull request waiting. I've dug myself deep into this EVAL at compile time issue and despite months of effort can't seem to find a way out :/ 07:32
07:59 leont joined 11:30 tony-o joined 12:49 sufrostico joined 13:17 sufrostico joined 14:33 sufrostico joined
ugexe also `emulates` 15:32
15:49 domidumont joined
ugexe can you elaborate on the problem of using EVAL at compile time, what its being used for, and the area of code where this stuff happens at? 16:28
16:32 leont joined
nine In general if you run an EVAL during compilation of a module, the resulting precomp file ends up kinda broken giving all sorts of nonsensical errors. The cause is that an EVAL creates its own serialization context and this SC is not stored anywhere but referenced by the module that we tried to compile. 16:38
The EVAL in question is github.com/rakudo/rakudo/blob/0204...ory.pm#L89 16:39
Used for reading back in the DependencySpecification so we can check if a precomp file is still up to date.
Now I have some idea on how to fix compile time EVAL. It's just really, really hard and requires lots of quality time where I figure out how the compiler works exactly. 16:40
17:06 domidumont joined 17:14 Kassandry joined 17:21 sufrostico joined 17:24 sufrosti1o joined 18:09 leont joined 18:16 leont joined
leont I can't get my script (as installed to ~/.rakudobrew/moar-nom/install/share/perl6/site/bin/) to work at all :-/ 18:24
nine leont: do you have more info? 18:45
leont There's a shim in there, but when I try to use it it hangs
sjn has precomp-related hanging all the time 18:53
nine involving certain modules? 19:07
diakopter nine: a naive idea is to incorporate/merge the interior EVAL's SC contents into the outer one's 19:10
well, sligtly less than utterly naive 19:11
tony-o nine: leont's precomp hanging is reproducible on TAP::Harness' 'prove6' 19:12
leont Yeah
Then again, it takes ages to precompile too (allegedly related to having multiple classes in file) 19:13
ugexe does it take forever to precompile when you run it without installing it? 19:21
tony-o it doesn't for me
i don't think
3.7s start up time for precomp 19:23
.8s after initial run
leont What he said. It works fine from checkout, but not so fine when installed 19:24
nine diakopter: that's actually what I'm trying to do. 19:30
diakopter: well, I'm sharing the outer World's SC with the EVAL World 19:31
diakopter nince: I mean, another option is to force the inner one to precomp mode also, and create a new dependency on disk 19:32
nine: ^
nine leont: could you try on rakudo commit 5025c8cd83e3db06c2471759562af3a14f7d0e9a?
diakopter: the hardest problem seems to be the strong assumption that there's a 1:1:1:1 relationship between comp unit, World, SC and byte code file. I'm already trying to break that for the first 3. I can hardly imagine things becoming easier by breaking it on the file level, too :) 19:34
leont Currently working on my slides for tomorrow, may try later tonight… 19:35
ugexe to elaborate on multiple classes in a file, its because installation precomp uses the module's *name* to generate the id it later uses 20:03
instead of the path
probably also means such files get duplicated on install, so you have multiple sha1 file names with the same contents 20:37
nine ugexe: what exactly do you mean? 20:56
ugexe nine: it iterates <provides>.kv during install. so say you have a provides like this: github.com/Leont/tap-harness6/blob...TA.info#L6 ... then look at this: github.com/rakudo/rakudo/blob/nom/...#L161-L163 20:59
it creates the file id using $name, so $whatever.child($id) will point to a new file for every item in that provides 21:00
even though every file in the provides is the same 21:02
part of this is resolved in my PR. when saving the meta6 during install (so dist/jf982jf9j23f0j) it no longer does `<name> => <ext> => { :file(092jf09j2f), :time() }`, but leaves the original structure in place and expands like `<name> => <original relpath> => { :file(some sha1), :time(123) }` (i.e. adding a hash to the leaf node with the additional meta data). this leaves the original path, which 21:13
should be treated as a *path-name* just like every other file that gets installed, but adds the slight inconvience of looking up the path-name for a module name
(see non-PR related code for such a lookup here: gist.github.com/ugexe/c5a74134164b...on-pm6-L38 ) 21:14
that method install still has the flaw of creating extra files, but it would be trivial to fix with path-name lookup 21:15
it used to screw up precomp back in the day when a module source code was grepped for module names to create a provides build graph. *a* solution was to replace every module name after a use/require with the literal path, so the topological sort did not double count different names from the same file 21:33
(replace it in the source for counting the occurances only, not actually saving the modified source)
21:38 sufrostico joined, sufrosti1o joined 22:01 lizmat joined 22:36 autarch joined