libera/#shirakumo - IRC Chatlog
Search
21:00:55
SAL9000
Shinmera: represent the path as #<fasl-of #P"foo.lisp"> for the purposes of planning, then convert it to "real" fasl path once you know what compiler is used?
6:54:17
Colleen
<shinmera> SAL9000: that doesn't really check because the planner is supposed to be able to use other means of getting the fasl (such as if it's cached), so it needs to be a full path already....
6:55:05
SAL9000
Shinmera: fasl cache could store source path (or whatever other identifier, such as checksum of source file contents) as an alternative key
6:56:28
Colleen
<shinmera> though I can't do that either, at least not at component instantiation time, since the checksum might change underneath until the plan is constructed.
7:08:18
Colleen
<shinmera> no, they could change from the time forge is initialised and your project recognised to the time you actually start a build.
7:08:52
Colleen
<shinmera> I had an idea on how to resolve this linkage problem yesterday before bed and now I can't remember
7:09:20
SAL9000
for the specific case of fasl-caching, if a source file has changed then the checksum changing is ok -- you need new fasls anyway
7:10:13
SAL9000
for planning purposes I guess you're back to #<fasl-of FOO> where FOO is something more stable, though
7:13:50
SAL9000
yeah, you probably want an object containing a path -- then alternative representations can be used too, such as checksum for sources that don't have a file path
7:14:40
SAL9000
e.g. if you introduce a "compile this string like it's a file" type thing later on, or sources received over the network w/o a local path I guess?
7:15:41
Colleen
<shinmera> an artefact is a relative path + a "registry name" and each registry has a local representation on a machine.
7:28:04
Colleen
<shinmera> I can't just use the (relative) path because that might coincide with a path that's identical on another project's stuff :)
7:31:17
Colleen
<shinmera> one thing a 'compiler-output-operation' is supposed to be able to do is declare an effect of an artefact now being present after its operation is done (so others can depend on that artefact being present)
7:32:08
Colleen
<shinmera> this is where we run into the initial problem though of needing compiler information to designate an artefact path that won't clash, but we won't know that until we build.
7:34:20
SAL9000
What is the scope of the potential clashes? I'm assuming that within a project de-confliction is easy...
7:35:48
Colleen
<shinmera> You might want to build the same project under different compilers. Eg a C project with GCC/Clang/etc. maybe even under different versions of the same.
7:38:53
SAL9000
but making 'target' sane for different languages/systems/whatever is gonna be tricky
7:39:35
SAL9000
I'm assuming you can fully control the path of all outputs and side-effect outputs (e.g. .pdb) of the compilers
7:40:43
Colleen
<shinmera> I mean that's kinda what I have now: https://github.com/Shinmera/forge/blob/master/basic.lisp#L381
7:41:23
Colleen
<shinmera> the problematic line being 377, as it tries to execute this without the context of a properly initialised operation.
7:43:13
SAL9000
So you either need an "assumptions mode" where those methods are restricted in what they're allowed to do, or more lazy evaluation
7:44:14
SAL9000
assumptions mode = cache-directory et. al. must return something reasonable without accessing things that aren't initialized yet
7:46:44
Colleen
<shinmera> introduce a special registry called :compiler, which is only realised during plan execution.
7:49:59
Colleen
<shinmera> during planning we have to assume it's the same compiler anyway no matter what