tynet-lichat/shirakumo - IRC Chatlog
Search
21:00:55
Colleen
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?
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
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
Colleen
Shinmera: fasl cache could store source path (or whatever other identifier, such as checksum of source file contents) as an alternative key
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
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
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
shinmera
I had an idea on how to resolve this linkage problem yesterday before bed and now I can't remember
7:09:20
Colleen
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: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
Colleen
for planning purposes I guess you're back to #<fasl-of FOO> where FOO is something more stable, though
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
Colleen
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: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
Colleen
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: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
shinmera
an artefact is a relative path + a "registry name" and each registry has a local representation on a machine.
7:28:04
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:16
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
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
Colleen
What is the scope of the potential clashes? I'm assuming that within a project de-confliction is easy...
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
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:54
Colleen
but making 'target' sane for different languages/systems/whatever is gonna be tricky
7:38:54
SAL9000
but making 'target' sane for different languages/systems/whatever is gonna be tricky
7:39:35
Colleen
I'm assuming you can fully control the path of all outputs and side-effect outputs (e.g. .pdb) of the compilers
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
shinmera
I mean that's kinda what I have now: https://github.com/Shinmera/forge/blob/master/basic.lisp#L381
7:41:22
shinmera
the problematic line being 377, as it tries to execute this without the context of a properly initialised operation.
7:43:13
Colleen
So you either need an "assumptions mode" where those methods are restricted in what they're allowed to do, or more lazy evaluation
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
Colleen
assumptions mode = cache-directory et. al. must return something reasonable without accessing things that aren't initialized yet
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
shinmera
introduce a special registry called :compiler, which is only realised during plan execution.