02:15
zakharyas joined
06:13
domidumont joined
06:18
domidumont joined
07:57
dalek joined
|
|||
nwc10 | *what* just killed dalek? I can't spot any repositories that updated | 08:50 | |
nine | nwc10: rakudo | 08:51 | |
nwc10 | ah OK thanks | 08:52 | |
09:04
cognominal joined
10:14
harrow joined
10:50
harrow joined
10:58
dalek joined
11:16
andrmuel joined
|
|||
andrmuel | hi | 11:17 | |
timotimo | greetings | 11:18 | |
12:01
zakharyas joined
13:08
hoelzro joined
13:14
cognominal joined
13:23
njmurphy joined
13:39
lizmat joined
|
|||
mst | 18:04 < nine> Got it: irclog.perlgeek.de/moarvm/2016-02-27#i_12108919 | 17:14 | |
18:04 < nine> It's a naming issue... | |||
18:07 < mst> right, I'm thinking it should be possible to have something along the lines of 'the thing "use B" imports into my current namespace as Foo' | |||
jnthn: ^^ wonder how easy that would be, given how much less pain we'd get from precomp with just that | |||
mst feels like "one should only need to precomp once per API version" isn't completely insane, and should, at least in theory, be doable for simple cases, but I reserve the right to have been completely stupid here | 17:15 | ||
jnthn | What is an API version in this context? | 17:16 | |
nine | jnthn: talking about avoiding recompilation of reverse dependencies on compatible changes to modules | 17:18 | |
jnthn | What's a compatible change? | ||
nine | one where the module's API is unchanged, i.e. no change on the user's side necessary | ||
I.e. just like it is with shared libraries in C. | 17:19 | ||
jnthn | Is this leading down the "make precomp be somehting other than static linking"? | ||
nine | yes :) | ||
jnthn | s/?/road?/ | 17:20 | |
I really, really, don't want to go down that road. | |||
If somebody says that I don't have to care about precomp ever again, then they're free to try. :) | |||
But so far as I can tell, it's fraught enough I just don't want to go there. | 17:21 | ||
I always intended precomps as cache | |||
mst | which is fine, but more intelligent cache expiry would still be nice | 17:22 | |
jnthn: I'm not sure what makes it that fraught | 17:24 | ||
jnthn | mst: The lack of any kind of absolute naming. | ||
nine | If there ever was a possibility to not have to recompile rev-deps, the whole precomp management code is gonna need a redesign. Again. | ||
geekosaur | recompilation of reverse deps is itself fraught | ||
nine | geekosaur: why? | ||
mst | jnthn: I can see that making it hard to do universally. I don't see why that means we can't make simple cases work | 17:25 | |
jnthn: I mean, like, a thing marked 'is export', and then a caller that does a 'use' of the module containing the thing, that's a stable name, even if it isn't absolute | |||
jnthn | mst: People already find it hard enough to avoid the various things that aren't precomp-safe already. Why do we want a second level of edge cases? | 17:26 | |
geekosaur | I can see a situation where (a) some revdeps end up thrashing because their deps are changing so much (b) potential for diamond deps, or need to do multiple such recompiles to cover all versions of deps (also see Haskell's so-called "cabal hell") | ||
the kind of tight dependencies that p6 and ghc introduce make things *really* difficult | 17:27 | ||
nine | Why would their deps change so much? That would need someone install/update modules all the time? | ||
mst | jnthn: because it's a cache, and not blowing out caches unnecessarily is a good thing | ||
geekosaur | if they're not changing that much then this isn't a problem. the fact that it's coming up indicates that it *is* a problem | 17:28 | |
17:28
domidumont joined
|
|||
mst | geekosaur: you're assuming things about the situation that aren't true | 17:29 | |
I'm thinking about basically vendor packaging and being able to ship precomp files from the build server and not having to re-precomp them every single bloody time | |||
17:29
domidumont joined
|
|||
geekosaur | somehow I thought I was talking about that as well, could you explain what I was mistakenly talking about, then? | 17:30 | |
mst | you said "the fact it's coming up indicates that it is a problem", and are calling recompilation fraught | 17:31 | |
I don't understand what you're saying, but it doesn't seem related to what I was talking about | |||
jnthn: also, your "people have enough trouble avoiding" ... what things are people ending up doing that spanners precomp? | 17:35 | ||
jnthn | mst: Monkeying with MOP stuff in module mainlines rather than at BEGIN time is the most common one | ||
mst | right, so, that seems like something one could warn() about | 17:36 | |
I mean | |||
something like a 'use ICareAboutPrecomp::PleaseWarnMe;' | 17:37 | ||
nine | geekosaur: cabal hell seems unrelated to our discussion | ||
jnthn | Possibly, yes | ||
mst | and that would point out that custom exporters will also fuck things up | ||
as well | |||
jnthn | Custom exporters aren't a problem | ||
mst | they are for the thing I was talking about a few minutes ago | 17:38 | |
jnthn | Unless you expect them to run at runtime :) | ||
mst | well, some forms of dynamic exporting presumably would be | ||
but, my point is, you're calling it 'edge cases' | 17:39 | ||
I'm thinking 'things you can be warned about' | |||
jnthn | But in general, the custom exporter runs at import time of the using module and the results are serialized into the importer, which works out fine enough. | ||
Yes, I suspect we can do better at warning about them. Don't immediately see how to implement it, but possible. | 17:40 | ||
mst | yes, it works out fine enough now under the static linking model | ||
I am talking about a possible future where precompilation is a little bit more resuable | |||
you said 'users find it hard enough', I'm talking about ways of making it easier for them to not screw it up | |||
thereby making the feature I was imagining potentially more useful | |||
nine | I don't think it would change anything in that regard? | 17:41 | |
mst | what | ||
dude, this conversation is confused enough, specify which 'it', what regard, and what you mean by change, please | |||
because I am way not capable of guessing ;) | |||
nine | I don't think more dynamical linking would change anything with regards to custom exporters. | 17:42 | |
mst | ah, hrm, I guess even a custom exporter is basically exporting a (moral equivalent of) hash of names to things? | 17:43 | |
the thing is, if it's always the same names to the same things, you're fine | |||
nine | Yes. And those will be serialized into the caller's serialization context and therefore precomp file | ||
mst | if it generates a new copy of whatever_name each time, THAT will spoon things up | 17:44 | |
right, and at that point, you're going to have to re-precomp to check they didn't change | |||
whereas if it's purely "I am exporting these names to the outside as alias to these names on the inside" | |||
*that* can be dynlinked | |||
nine: does that make a bit more sense? | 17:45 | ||
nine | A move towards more dynamical linking would get us into the whole "detect when it's safe to use the newer version" game which AFAIK no one has ever won yet. | 17:46 | |
jnthn | fwiw, I made the "we'll do static linking" design decision about 5 years ago, back when doing the initial 6model design. So the assumption is likely to be baked into places that don't even occur to me right away as a result. | ||
nine | As I mentioned, right now it's "dependency changed -> recompile". Then it would be "dependency changed -> find out if we need to recompile (but how???) -> recompile? | 17:47 | |
mst | yes, it's not a completely trivial problem, but it is one I've done quite a bit of thinking about in other contexts | ||
and I have completely the wrong skillset to be helpful at making the compiler faster, but I happen to be a suitable sort of insane for trying to figure out how to run it less often | 17:48 | ||
nine | Well the worst possible outcome is always just the gaining of knowledge :) | 17:50 | |
mst | nine: also, I know how to define a version of that game I *can* win | ||
I'm sure the fully general version is about as tractable as go | 17:51 | ||
jnthn | .oO( and that's why go does static linking :P ) |
||
mst | jnthn: and that's why many sysadmins hate go and consider it a weak point of their infrastructure | 17:53 | |
also go is fucking hilarious, they don't even have API versioning, the answer to "what if I want to deprecate something" is apparently "pick a new namespace" | 17:54 | ||
it's very much optimised for a world where everything's getting rewritten from scratch all the time | |||
perl6 is trying to be a hundred year language; go doesn't seem to care about lasting longer than a teenage boy after a week at church camp | 17:55 | ||
jnthn: part of why I care about this, btw, is that I end up spending a fair chunk of my life trying to find/fix bugs that are N layers deep in modules | 17:58 | ||
if I'm not changing the API, only trying to repro and then fix a weird behaviour | |||
I don't want to have to re-compile all the layers above that I didn't change for every test cycle | |||
I didn't realise quite how much I cared about that until I noticed just how much happier I was running t/foo.t for a Moo project than a Moose one | 17:59 | ||
at which point I realised that, no, although I hadn't realised it would be, this is at least for me a major usability issue | |||
also, presumably one could test this by repatching the object ids or something | 18:00 | ||
rather than expecting anything else to change first | |||
nine | mst: try working on rakudo's JVM backend. A mere minute compile/test cycle will feel like hyper speed then :) | ||
mst | which is, yes, insane, but might make it possible for a sufficiently crazy mere mortal to try and prove the concept | 18:01 | |
hm | |||
I think I just talked myself into a corner where I don't get to complain any more without trying it | |||
fuck | |||
nine | :) | ||
mst | nine: so, basically, "that would be why I don't use clojure" | ||
jnthn | mst: So, to help me understand... If you're doing this in, say, Perl 5, which doesn't precomp, you're *already* recompliing everything every time on every run anyway. And so it feels like shoving a "no precompilation;" in your top level test script would get you the same thing you're used to for debugging purposes. What am I missing? | 18:04 | |
(Other than, I guess, that you're wanting to solve a more general problem...) | |||
(But I'm curious what I'm missing in this use case.) | 18:05 | ||
mst | um. the compilation speed. | ||
I keep ripping Moose out of things in favour of Moo specifically so that 'recompiling every time' isn't ridiculously painful | |||
jnthn | OK, understood. | 18:06 | |
mst | or should I expect rakudo to be able to compile things at the speed that Moo does, and the current performance is an aberration that will be easy to fix? | ||
jnthn | mst: Well, I expect performance to get a lot better. Though it's more "lots of things to fix" rather than "one easy thing to fix" | ||
mst | right | 18:07 | |
but given you *do* have a full MOP, I'd imagine that it'll still be Moose-level better at least for the forseeable future | |||
jnthn | *Personally*, I'd still rather be doing those things than trying to make dynamic linking work out with Perl 6 :) | ||
18:08
ilbot3 joined
|
|||
mst | you're a windows user, you're used to installers basically eating your entire machine for half an hour - I'm not ;) | 18:08 | |
jnthn | ;) | 18:10 | |
Dinner time; I'll bbiab | |||
nwc10 | mst: sideways to the discussion here which I'm afraid I can't usefully add to | 18:20 | |
"it's very much optimised for a world where everything's getting rewritten from scratch all the time" - without using it directly, I concluded roughly that - as best I can work out it's optimised in many ways for Google's use case of "want to be able to rebuild the entire world in a reasonable time" (IIRC about 45 minutes) and "we control the entire dependency tree upstream and downstream" (which combined mean that you test stuff by building it all, a | 18:22 | ||
(and that probably got truncated) | |||
... and if you find problems you fix your code, or you fix your deps, or you fix the stuff that depends on you, and any of those 3 is equally easy and viable | 18:23 | ||
++ | |||
mst | right, and also their situation where services usually don't have a lifespan of more than 18mo | ||
nwc10 | aha, missed thinking about that :-) | 18:24 | |
anyway, this isn't where I find myself, usually. | |||
mst | right, same | ||
timotimo | i just had lovely dinner | 18:45 | |
nine | dinner++ | 18:50 | |
19:39
Ven joined
19:47
pyrimidine joined
20:57
Ven joined
22:20
ggoebel116 joined
23:52
lizmat joined
|