*** Changes in ASpecT ***


Latest versions:
  asp	1.5	93/01/06
  sc	1.7	93/01/12
  gen   2.1	92/10/27

12.01.93	Yet another bug in the generator (sc) having to do with
		renaming of previous (in another module) generated
	        (due parametrisation) sorts. The bug showed up while
	        debugging those programs - core dumped.
12.01.93	The source level debugger often missed to show the current
		file. This should now work much better.
06.01.93	A bug concerning projections of polymorphically imported 
		modules is now removed (this could lead to non-termination of
		the parser (asp)).		
05.01.93	The new GNU-C 2.3.3 compiler found some new 'mistakes' in the
                generated programs - so we had to change our code generation
                scheme a bit.
30.12.92	You now may use formal constructors as functionals,
		define global functions by local renames (either from
		function or constructor) and rename constructors.
		All of these was either not allowed or lead to bugs
		(normally: the C compiler failed). What is coming soon is
		the possibility to hide sorts with formal parts (hopefully).
22.12.92	Yet another bug in unfold. Doing this with operations which
                has any formal arguments and call some other operation
                which also has formal arguments resulted in a wrong
                C program.
10.12.92	Using a definition like 
                   EQNS g = let (X,Y,Z) = f. in X."
                with two versions of f - i.e. one with two and one with three
                results - caused an ambiguity. This is now fixed.
09.12.92	A bug concerning the instantiation of a formal operation with
		a constructor was fixed.
04.12.92	It is now possible to use the leap command in the debugger
		at the very beginning.
30.11.92	While inferring parameter instantiations of polymorphic modules
		some type variables were not instantiated properly. Thanks
		to Bernd Gersdorf (uni-bremen) for detecting this one.
26.11.92	Using external sorts in synonyms showed up to be a problem in
		some cases. This should be ok now.
24.11.92	Sometimes unnecessary calls were not removed properly (in
                worst cases sc removed the variable declaration and lets the
                call remain -- which makes the C compiler comment this).
                This is now fixed and will result in faster code if you often
                write unnecessary calls ;-)
                Thanks to Bernd Rattey (uni-bremen) for detecting this one.
17.11.92	Improvements in the generator (sc) speeds up the codes as
		you may notice e.g. in Benchmark.Results. A new option for
		sc is now available. The -space option optimizes the
		programs for space (they will run a bit slower). Without
		this option the programs are optimized for speed (i.e. 
		generic frees are generated). Another (secret) option -xm
		extends the amount of unfolding a bit.
		A minor bug having to do with importing a specification
		from a different filename (IMPORTS x FROM y +) and formal
		parameters in those has been fixed (we used y instead of
		x for naming the instrec).
13.11.92	Some bugs in the unfolding staff are eliminated now.
05.11.92	A nice little idea saves up to 10% of time in all programs,
		but we had to change the runtime system.
		BE SURE THAT YOU RECOMPILE ARRAY AND REMOTE TO PREVENT CORE
		DUMPS.
27.10.92	Occasional core-dumps while gen-ing some large structures
		via net-mode showed up to be a problem in a non-tail-recursive
		function which eats up the stack in extreme cases. I have now
		changed the problematic function and hope that these problems
		are now gone.

The operations (&&) and (||) are no longer builtin. They are now included
in the module BOOLEAN. IF YOU ARE USING AN OLDER VERSION OF THE COMPILER YOU
MUST REMOVE THESE FROM BOOLEAN BEFORE RUNNING THE SYSTEM.
The new gen version 2.1 (92/10/26) of the ASpecT 2.0 language REQUIRES A NEW
COMMAND TEMPLATE FILE (defaults.cmd).

26.10.92	A operation named like \/ (containing a slash) was not
                paraphrased correctly.
26.10.92	By putting a file into/out of debug mode the .h-file is now
                untouched such that lots of unnecessary jobs are saved.
                This solves the ToDo dated 14.06.92.
26.10.92	The scanner was wrong in scanning i.e.
		   SORTS anysort ::= (*) integer integer.
		meaning the infix is written as prefix in parentheses while
		declaring the constructors of a sort.
26.10.92	The ASpecT debugger sometimes missed the call to a function if
		only a sub-module is compiled in debug-mode. This is now
		fixed, is it?
23.10.92	Our compiler supports intermodular unfolding now which makes
		it 8% faster (only).
20.10.92	The extended escape sequences (refer to quick starter) are
		now implemented in full and first time correct also.
20.10.92	Unbelievable but true, character/string constants are
		not correctly paraphrased if containing non-printables
		which are not of the usual set, meaning they have to
		be printed as escaped octal sequence. This is now fixed
		after more than five years of usage.
19.10.92	Modernization of sc leads to more efficiency, mostly because
		of the first-try unfolding strategy (not yet inter-modular).
14.10.92	Another too-early-freed buffer in REAL.xc (mk::real->string)
		has been located by Holger Duerer (uni-bremen). Thanks to the
		linux system too which has a very sophisticated malloc/free
		implementation such that those mistakes can be detected after
		we used the routines without problems over a year on other
		systems.
12.10.92	A bug in SYSTEM.xc (call_argument). A buffer was freed but
 		used afterwards. Thanks to Holger Duerer (uni-bremen) for
 		detecting this one.
08.10.92	Another bug in parametrization routines is fixed. It was
                a place we missed on correcting a former bug (01.09.92).
07.10.92	In specific cases (i.e. large interfaces) the parser (asp)
		is now about twice as fast because it uses a hashing table
		instead of lists now while renaming/actualizing.
01.10.92	You will not read "program error: Identifier Table full !"
		again if your program consists of more than 800 different
		identifiers. The number is now really unlimited (theoretically).
		We had forgotten that this limit exist ... but now we reached
		it ourselves. Sorry.
30.09.92	If the environment variable PWD could not be found (not set)
		gen now determines (tries to) the current working directory
		by using the getwd-system-call. This solves the ToDo dated
	        27.07.92.
29.09.92	Suddenly the Mac-Version behaves funny. I found the reason
		in TIME.xc in free'ing the structure localtime (gmtime)
		returns. Maybe thats wrong to free that so I commented it
		out ... hoping that it would not leave much garbagge on other
		systems, does it?
21.09.92	As expected (murphy's law) a bug could be found in the handler
		of LET-definitions. Nested lets which redefine only some
		of a tuple-let-defs local variables where handled in a wrong
		way ... most times type errors are stated but there are none.
		Maybe the let-feature is now stable.
17.09.92	A pathname (dirname) may now start with a number (in 
		the commandline. Thanks to Peter Thiemann (uni-tuebingen)
		for detecting this one.
12.09.92	NEW LANGUAGE FEATURE! (Test-Phase!!!!!)
		The concept of MACROS has been extended to a limited form
		of LET-definitions. The LET-concept is widely known in the
		area of functional languages. It gives you the possibility
		to increase locality. In other words it is the better concept.
		The LET has been inserted in <term> similar to if_then_else.
		<let> ::= "let" <eqn> {<eqn>} "in" <term>
		Note that <let>s may be nested and that <eqn>s are finished
		with a point. They may not occur (sematic check) in macro
		definition or at any left hand side of an equation.
      BE WARNED that because of the different scoping concepts of
      --------- macros and lets, let-variables ARE NOT VISIBLE IN MACROS
		and even worse they undo then hiding of lhs-variables.
		Better do not use macros in lets to avoid confusion.
		For some demonstrations (we have no doc yet, sorry) look
		at ASPINST or NAT in DEMOS. These should be at least intuitive.
12.09.92	A little tool 'aspinst' is now available to check the
		the current aspect environment. Preliminary version.
		If it is not delivered ... compile the source found in DEMOS!
12.09.92	While in the ASpecT debugger a prompt is now printed
		if the systems aspects debugger commands. This give some
		difference to any execution of reads. But still the
		input buffer could not be flushed (unix error) so that
		previous evaluation of a read from stdin may cause an extra
		'next' (waiting for the idea to come).
12.09.92	A little problem in the comand line arguments parser has been
                fixed. Former version do not detect if values are multiple
                set and if some needed are not set.
08.09.92	Running ASpecT with OS/2 on a PC386 reveals a slight bug
		in TIME.xc, SYSTEM.xc and REMOTE.xc (BASIC_DATATYPES). The
		buffer allocated for STRING_TERM_to_CHAR_ARRAY tends to be
		one byte too small. None of the UNIX versions remarked this
		as memory violation. Changed! At the same time the former
		fixed size of maximal 255 characters per filename in
		SYSTEM.AS is now gone - question is, who noticed that limit?
07.09.92	The former 'gen' dislikes moving of modules being imported
		somewhere else or the change of paths in general reporting
		"could not open ..." instead of updating the path (looking
	        for the new location and updating it). The new version 2.1
		should have no more problems of this kind. As well it
		reports some more reasons why jobs are canceled, especially
		if some .x[ch] files are missing.
03.09.92	A little bug in typing macroexpessions is now fixed. Macros
		with functional types should now be typable in all cases.

The new compiler version 1.3 of the ASpecT 2.0 language REQUIRES REPARSING
OF FORMER COMPILED SOURCES.

01.09.92	Some severe bugs occurring while renaming sorts and
		importing modules over several levels have now been
		fixed. This especially caused some problems in the
		usage of synonyms. As a sideeffect complex recursive
		actualisation, where some modules use each other to
		instantiate their formals, is now working again (we
		had lost this more or less 'esotherically feature'
		in the last redesign phase of the compiler (late '91)).
		Remark: look at CYC_TEST.AS in the DEMOS-dir and try
		to understand the exact meaning in less than five
		minutes. If execution loops forever its ok, isn't it?
		But be warned: the study of this example may cause some
		severe problems with the stability of your brain.
26.08.92	NEW SYNTAX! Integer lexemes had been generalized to
		archive some possibilities.
		Now they can be written hexadecimal and octal too.
		Hexadecimals are written by a leading 0 followed by
		and 'x' or 'X' followed by several hex-digits from
		the set [0-9A-Za-z].
		Octals are written by a leading 0 followed by oct-digits
		from the set [0-7].
		The scanner translates them to decimal base. Therefore
		0xff => 255, 077 => 63, 0x => 0, -0xA => -10 ...
		Currently it is NOT POSSIBLE to read these special
		numbers via the read-operation (actualized with integer).
26.08.92	(Uninteresting to normal users)
		The output sc generates with the option -iout has been
		changed slightly. Remark: do not try this out.
24.08.92	NEW SYNTAX! I have changed the syntax of the declaration
		and the actualization of infix functions. The 
		infix functions now have to be put in parenthesis.
		 Former: FORALL + :: integer -> integer -> integer.
		 New   : FORALL (+) :: integer -> integer -> integer.
		 Former: ACTUAL OPNS + = +. ...
		 New   : ACTUAL OPNS (+) = (+). ...
		This change makes the syntax more consistent regarding
		the termsyntax. But the old form
		  FORALL integer + integer :: integer.
		is still available of cause.
24.08.92	Another bug occurring while actualizing in some very
		special cases is now fixed. It caused a core dump too.
20.08.92	A bug occurring while actualizing operations in some very
		special cases is now fixed. It caused a core dump.
19.08.92	It is no more allowed to use underscores and lower case
		letters at the same time in specification names to prevent
		possible naming clashes in the generated C programs.
19.08.92	Some bugs having to do with parametrisation are removed
		now. The parser now detects an error, if you declare an
		global extern sort which is locally defined again by
		actualisation of a module (where it is not extern).
		The parser no more gives an errormessage stating a sort
		to be declared twice, if multiple equal actualisations
		generating some sort are performed. Former versions of
		the parser occasionally reported such situations as
		error if the actualisations are imported in a specific
		(common) order.
14.08.92	Formerly the operation call_argument (SYSTEM) returned
		a copy of a string which is generated at the start of
		a program. Now this string is generated every time
		call_argument is called by accessing _RUNTIME_argc and
		_RUNTIME_argv which are usually pointing at mains' argc and
		argv. It is now possible to change the arguments by
		extern routines before calling call_argument (i.e. while
		using X-Windows). At the same time the limit of 255 chars for
		the command line parameter has been removed.
14.08.92	The compiler now states an error if a sort is declared with
		hidden constructors which contain formal parts. It was not
		stated wrong in former versions but resulted in core-dumps
		while running the program.
		This should be solved in the near future, since it prevents
		the usage of a very common structuring method (implementation
		hiding)!
13.08.92	Extern sorts containing formal data used in a module where
		this sorts are used for polymorphic instantiation and
		local sort generation works now correctly due to a change
		of implicit constructors. No more mixups with subsorting
		and no core-dumps!
13.08.92	A slight bug in sc caused an assignment to be positioned
		before the declaration of local variables in the initialisation
		procedure of a module - under certain circumstances.
13.08.92	Signature-#defines for the common function copy, free, read,
 		write and eq make it more easy to program extern sorts.
27.07.92	NeXT does no more dump the core while exiting any generated
		program. The reason was a slight difference in the library
		definitions which caused a freeing of the setvbuf - buffers.
19.07.92	frontstring (STRING) now works on constant strings too.
18.07.92	We started to log changes in this file because the system
		is going to be published.
