[comp.lang.eiffel] class environment, suffix .env

wongkc@sor.CS.ColoState.Edu (kam chooi wong) (03/09/90)

I was using the ENVIRONMENT class in Eiffel and discovered some
misleading/incorrect descriptions in the Eiffel Language Manual.
On page 188, the example code shows in order to store
persistent objects and associate  them with an environment, 

   ....(env and ext_file declared here)

    env.Create;                   -- create an environment
    ext_file.Create("session1.S"); -- create a  file to be
                             -- associated with the environment
    ext_file.open_write;
    env.set_file(file1);     -- associate file with environment
    env.store_on_end;

   ....(some other manipulations)

(1) The suffix ".S" as in the "session1.S" file  should really 
    be ".ENV". The file1 variable listed above in the example 
    should really  be ext_file.

(2) There is no information in the Language manual or in the
    Library manual that hints at the required ".ENV" suffix.
    I had to look at the online ENVIRONMENT.E code file 
    under the installed Eiffel's library/support subdirectory 
    to find out why I got the run-time error in my own 
    program. One of the preconditions (in the require clause)
    of the set_file feature in class ENVIRONMENT is good_suffix 
    which is an instance of the boolean routine is_env_of(f: file). 
    A short on the class ENVIRONMENT does not reveal the 
    precondition  "good_suffix" nor the "is_env_of(f)" routine 
    as this is a non-exported feature.

If I am missing something altogether, I appreciate people letting
me know. Otherwise, I would like to suggest that there should be 
some documentation on such "secret"  required features and their 
semantics in the relevant chapters in future updates of the manuals.

bertrand@eiffel.UUCP (Bertrand Meyer) (03/09/90)

In <5193@ccncsu.ColoState.EDU>, wongkc@sor.CS.ColoState.Edu (kam chooi wong)
notes an undocumented rule enforced by the current implementation:
files used to store persistent objects (through the mechanisms of
class ENVIRONMENT) must have a name finishing with ``.env''.

He is indeed correct. Although the rule initially had a justification,
it should by now have been dropped. This is a case where the
documentation was updated ahead of the software itself...

For the time being environment files still will have to have ``.env''
names. Our apologies for any inconvenience this may cause.
-- 
-- Bertrand Meyer
bertrand@eiffel.com

olender@cs.colostate.edu (Kurt Olender) (03/10/90)

The case of the undocumented ".env" file extension reveals a more
general point.

When a "require" clause of an exported routine contains a non-exported feature
(say a boolean function that computes a rather complex condition on the input
to the routine), "short" does not print that require clause.  That is how
short is documented to work, and it indeed does.

Thus, the automatic documentation mechanism will not record in it's public
interface what may be a rather important restriction on the form or
values of some input data.  Certainly, if a call violates this restriction
the client will fail, but the client programmer will have no idea why
without looking at the original source.  He or she may see a message generated
from a require clause label, but that label does not appear in the short
output either.

On the other hand, the client programmer doesn't need to know the names
of features that aren't public, and can't use.

perhaps short should print the label of any require clause containing
a private feature.  The output of short environment.e might then look
something like:

	  require
	  	once_set;
                file_created: not f.Void;
		good_suffix
          do

presumably, then, the programmer must use some descriptive name for
the preconditions.