<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <meta content="text/html; charset=ISO-8859-1"
      http-equiv="Content-Type">
  </head>
  <body text="#000000" bgcolor="#ffffff">
    Regarding this subject I think:<br>
    <br>
    <ol>
      <li>There's impossible to authoritatively classify anything as
        "dead code" unless there's a reference standard of what's core
        and what's not core (like, Java defines the JFCs). At this point
        it would be useful to have a reference standard of "core
        classes" and their "core messages/methods".<br>
        <br>
      </li>
      <li>Having a reference model, it would be nice to have a way
        preventing modifications of core classes inside official
        distribution. Meaning: to be considered part of an official
        pharo distribution, code must not alter foundation classes. That
        shouldn't be an issue due to huge support for inheritance
        provided by smalltalk. So, if need arises to have, let's say, a
        new message/method inside something like Array or
        OrderedCollection or whathever, it's easy to do that simply
        creating MyNewLittleOrderedCollection... It's not hard to verify
        integrity of core classes using digital signatures.<br>
        <br>
      </li>
      <li>There should be an official policy for marking code as
        "obsolete" or "deprecated".</li>
    </ol>
    I guess that once a model of reference classes is established, it's
    easier to start profiling things and finding what's alive and what's
    dead (not used anymore inside an official distribution). It also
    prevents the uncontrolled growth of "core stuff" as consequence of
    ad-hoc solutions.<br>
    <br>
    A plus advantage of defining a set of core classes is that it makes
    easy to fully document and analyze&nbsp; them. It allows to ensure
    several things that are required for any system to be used in the
    development of serious commercial software:<br>
    <ol>
      <li>Profiling (theoretical/measured): known algorithms</li>
      <li>Security</li>
      <ol>
        <li>Regarding continuous operation and up time</li>
        <li>Regarding "civilized" use of resources (memory, IO)</li>
        <li>Regarding integrity of data</li>
        <li>Regarding misuse &amp; unforeseen uses of
          classes/messages/resources</li>
        <li>Regarding privacy</li>
        <li>etc...</li>
      </ol>
      <li>It makes it possible to have serious end user documentation,
        clearly specifying functionality, interfaces, cases of use,
        limits, error conditions, etc. (side comment: it never went into
        my mind de discourse of "documentation is the code" (moreover
        when some code is not easily understandable)).</li>
    </ol>
    My 2&cent;<br>
    <br>
    CdAB<br>
  </body>
</html>