Type safety could prevent nuclear war
tsbockman via Digitalmars-d
digitalmars-d at puremagic.com
Fri Feb 5 13:17:09 PST 2016
On Friday, 5 February 2016 at 20:35:16 UTC, Chris Wright wrote:
> On Fri, 05 Feb 2016 10:04:01 -0800, H. S. Teoh via
> Digitalmars-d wrote:
>
>> On Fri, Feb 05, 2016 at 07:31:34AM +0000, tsbockman via
>> Digitalmars-d wrote:
>>> On Friday, 5 February 2016 at 07:05:06 UTC, H. S. Teoh wrote:
>> OK, probably I'm misunderstanding something here. :-P
>
> I think you're talking about maintaining an in-memory,
> modifiable data structure, doing one insert per operation and
> one point query per use. That's useful for incremental
> compilation, but it's going to be pretty slow.
>
> tsbockman is thinking of a single pass at link time that checks
> everything at once. You append an entry to a list for each
> prototype and definition, then later sort all those lists
> together by name. Error on duplicate names with mismatched
> signatures.
Yes.
> This is faster for fresh builds than it is for incremental
> compilation -- tsbockman mentioned a brief benchmark, and that
> cost would crop up on every build, even if you'd only changed
> one line of code. (Granted, that example was pretty huge.) But
> this might typically be faster than a bunch of point queries
> even with incremental compilation.
>
> Anyway, that's why I'm thinking most people who used such a
> feature would turn it on in their continuous integration server
> or as a presubmit step rather than every build.
It doesn't necessarily have to be slow when you only changed one
line:
* The list from the previous compilation could be re-used to
speed things up considerably, although retaining it would cost
some disk space.
* If that's still too expensive, just don't cross-check files
that aren't being recompiled. The check will be less useful on
incremental builds, but not *useless*. The CI server can still do
the full check (using the compiler), as you suggest.
>> The problem is, the linker knows nothing about the language.
>
> We're only talking about a linker because we need to run this
> tool after compiling all your files, and it has to know what
> input files you're putting into the linker.
>
> So this "linker" is really just a shell script that invokes our
> checker and then calls the system linker.
Yes. (Or, it's the compiler with a special option set, which then
calls the linker after it finishes its global pre-link tasks.)
More information about the Digitalmars-d
mailing list