> … no algorithm that can identify all dead code reliably…
Why were you so concerned with the removal of all dead code?
Compared to "… nobody had the source code…" it seems like a minor issue.
imo the more usual concern would be mistakenly removing code that was not dead.
Without a design document, we might think there would be no senders of #factorial without understanding that the intention was to invoke that method on the command line.
For example,
$ cat fact.st
Stdio stdout
nextPutAll: 100 factorial printString;
nextPut: Character lf.!
SmalltalkImage current snapshot: false andQuit: true!
$ bin/pharo --headless Pharo10-SNAPSHOT-64bit-502addc.image fact.st
93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000
So instrumenting methods and logging — https://stackoverflow.com/a/162719Given that the base image we started working with didn't "contain things it shouldn't" why could we not be completely sure that base image + source code fileIn didn't "contain things it shouldn't" ?
(At some point, we might question whether we're putting similar effort into testing other software tools.)
And did you discover stuff that was reported to have been removed but your tests showed was not removed?
In other words, examples where "trust it" would be a demonstrable mistake.
> It is not for nothing that people speak of a "Big ball of Mud" in the context of image based languages.
What process was used to manage source code?
"At the outset of a project involving two or more programmers: Do assign a member of the team to be the version manager. … The responsibilities of the version manager consist of collecting and cataloging code files submitted by all members of the team, periodically building a new system image incorporating all submitted code files, and releasing the image for use by the team. The version manager stores the current release and all code files for that release in a central place, allowing team members read access, and disallowing write access for anyone except the version manager." (page 500)
1984 "Smalltalk-80 The Interactive Programming Environment"
https://rmod-files.lille.inria.fr/FreeBooks/TheInteractivePr...
What process was used to manage Smalltalk source code?
How do you test for dead code?
Oh well.
If you understood why the absence of dead code cannot be detected by testing, and that there is no algorithm that can identify all dead code reliably and in finite time in a dynamic language like Smalltalk, your questions and implications would become pointless, since you then would understand why you never can be completely sure indeed; and that's all there is to it.
company-specific base image = base image + company-specific source code fileIn
Why could we not be completely sure that company-specific base image + source code fileIn didn't "contain things it shouldn't" ?
Secondly:
> … also things in the original images of the commercial STs that one would or should not ship with the product.
That doesn't seem to be an example of "You could never be completely sure that it didn't contain things it shouldn't."
That seems to be an example of you being completely sure.
!
Would we blame Ada tools because we did not archive the source code we wrote?
> … even with the source code it was a nightmare…
What I was "up to" was trying to get past sweeping condemnation to understandable criticism.
Is that something you wish to claim I do? :-)