-
Notifications
You must be signed in to change notification settings - Fork 1
/
NEWS
438 lines (392 loc) · 19.5 KB
/
NEWS
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
Main changes in release 0.9.11
Build Environment:
- On Microsoft Windows, the compiler can now also be built with MinGW.
- Versioned installation will allow multiple versions of the Münster
Curry compiler to coexist on a single machine in the future.
- New make target TeXShop for typesetting the documentation on Mac OS
X with TeXShop.app.
- It is now possible to build universal libraries on Mac OS X.
Compiler:
- Function definitions are no longer eta-expanded automatically.
- Let-bound variables can have a polymorphic type in some cases.
- The precedence level in a fixity declaration is now optional and
defaults to 9 if omitted.
- Only the exported entities of the main module and the Prelude are
visible with unqualified names in a goal. On the other hand, the
entities of all other modules imported directly or indirectly from
the main module can now be accessed with qualified names.
- Code generation is now based on a register-based abstract machine
code model, which yields more efficient code.
- The compiler omits redundant module qualifiers from type expressions
in error messages.
- Limited support for compiling mutually recursive modules.
- Compiler options --ccopts and --ldopts allow passing multiple comma
separated options to the C compiler.
- Compiler accepts options -F and -framework and passes them on to the
C compiler.
Debugger:
- Debugging of goals involving IO computations now works.
Interactive Environment:
- The interpreter's :load command takes changes of the search path
with the :set command into account.
- The interpreter allows :loading standard library interfaces so that,
e.g., :l Array no longer fails with an error message "missing source
file for Array".
- The interpreter no longer recompiles source modules each time a goal
is evaluated.
- Only the exported entities of the main module and the Prelude are
visible with unqualified names in a goal. On the other hand, the
entities of all other modules imported directly or indirectly from
the current module can now be accessed with qualified names.
- New command :interface that displays the interface of the current or
a specified module.
Curry Library and Runtime System:
- Improved trampoline implementation (used by default on Mac OS X),
which reduces execution times by 5 to 10% on a PowerPC, and up to
30% on x86.
- Expressions like chr (-1) and const 0 <= id now fail only the
current solution instead of aborting the program with an error
message.
- When a program fails due to a pattern match failure, the error
message now includes the function where the failure was detected.
- Pattern matching (and other) failures are reported in non-IO goals
if the goal was compiled with the -f option or if the program is
invoked with the -f runtime system option.
- The runtime system now uses tagged characters (similar to tagged
integers) by default. This avoids allocation for characters with
codes above 255 (decimal).
- Avoid many name conflicts when interfacing with foreign C code.
- Many portability fixes to allow compilation on Windows with MinGW.
Foreign Function Interface:
- New non-standard calling convention rawcall.
Noteworthy Bug Fixes:
- The compiler no longer fails with an internal error in function
constrKind when importing a module whose interface contains types
T_1 and T_2 whose names differ only by their module qualifiers.
- The compiler no longer fails with a non-exhaustive match when
reporting case mode warnings for a program with explicit type
signatures.
- Setting the initial buffering mode for the standard input and output
channels with the -b runtime system option now works.
- The compiler no longer infers too general types for some functions
in mutually recursive binding groups involving pattern declarations.
- The parser no longer rejects patterns of the form (op) t_1 ... t_n
when op is a qualified operator, e.g., (Assoc.:=) x y.
Main changes in release 0.9.10
Build Environment:
- The compiler can be used without installing it.
- Build issues with ghc 6.4 have been fixed.
- Use ghc --make when it is supported.
- Source distributions now include an abstract machine code to C
compiler.
Compiler:
- The compiler now reports all duplicate or undefined identifiers in a
scope before giving up.
- The compiler can optionally report warnings for case mode
violations, unused identifiers, shadowing definitions, and equations
with overlapping left hand side patterns.
- Existentially quantified types finally enabled again.
- Trust annotations introduced.
- Evaluation annotations removed.
- The compiler generates better code for case expressions in some
cases.
Interactive Environment:
- On systems where GNU Bash or a Korn shell (but not the public domain
version) are installed, the interpreter now supports command line
editing. In addition, a history of previously entered goals and
commands is maintained in file ~/.cyi_history.
- Initialization file .cyirc or ~/.cyirc is read at startup.
- The :cd command now works for directories whose name contains
embedded blanks.
- The value Success is shown in the answer to a constraint expression
only when there are no constraints.
Curry Library and Runtime System:
- Module prelude renamed into Prelude.
- Additional prelude type: ShowS.
- New prelude functions: shows, showChar, showString, showList,
showParen, ($!!), ($#), ($##), unknown, and ensureGround.
- New functions Char.minChar, Char.maxChar, Integer.minInt, and
Integer.maxInt that report the smallest and largest elements of
types Char and Int, respectively.
- Implementation of AllSolutions.getSearchTree changed to use strong
encapsulation for logical variables, too. In addition, the search
tree now properly reflects the state of the goal at the time when
the getSearchTree action is evaluated rather than fixing the state
when the first solution is computed.
- New function IOExts.openFd.
- New library modules Lexing, NameSupply, and Socket.
- An alternative implementation of encapsulated search is available,
which can be enabled with --enable-copying during configuration.
- The full Unicode character set range is now supported.
Noteworthy Bug Fixes:
- A long standing issue where builds would fail when using the vendor
supplied make command on Solaris systems has been fixed.
- Gnu C specific features are now enabled only when using the Gnu C
compiler.
- The import and export specifications T() and T(..) are now also
accepted when T is a type synonym.
- A potential stack overflow problem for functions returning a
variable has been eliminated.
- A problem where programs using encapsulated search could crash in
certain situations has been fixed.
- A problem where a program could fail when show was applied to an
infix constructor application other than the list constructor (:)
has been fixed.
- A space leak has been closed where file handles opened with one of
the functions IOExts.openProcess and IOExts.openTcpSocket were not
closed automatically. Note that these functions are used by the
Ports module, too.
- The functions Integer.ilog, Integer.isqrt, and Integer.pow now fail
for negative arguments.
- The string ['x','y','\200','2','3'] is now printed "xy\200\&23".
Main changes in release 0.9.9
Build Environment:
- The runtime system protects the inactive semi-space of the heap with
mprotect(2) on systems which support it. This can be turned off with
the new configuration option --disable-mprotect.
- The source distribution's Makefile includes rules to build the
internal documentation.
- On Mac OS X, -mdynamic-no-pic is used unless the compiler does not
accept this option.
Compiler:
- cymake passes archive files (*.a, *.so, *.dylib, *.dll) to the
linker instead of complaining about a missing source file.
- The :set and :unset commands in the interpreter accumulate and
remove individual options.
- The :debug and :type commands of the interpreter as well as the new
command :^ use the previous goal if the goal was omitted on the
command line.
Debugger:
- The debugger is no longer restricted to the first solution of a goal.
- User interface improved.
Curry Library and Runtime System:
- The compiler and runtime system should now work on 64-bit
architectures using the LP64 programming model, most notably the AMD
x86-64. Many thanks to Adam Peacock for his help in tracking down
the problems on this architecture.
- Functions rigid and rigidSpine introduced in release 0.9.8 have been
renamed into ensureNotFree and ensureSpine, respectively, following
a consensus on the Curry mailing list about the names of these
functions.
- The range of Int numbers is now always equal to that of C long
values on the target system.
- The functions div and mod now use the semantics mandated by the
Haskell report, i.e. the quotient is rounded toward negative
infinity. Use the new functions quot and rem when the quotient shall
be truncated toward zero.
- Floating-point numbers are now printed with maximum precision.
- Function readFloat for converting strings into floating-point
numbers implemented.
- A more efficient representation is used for lazy applications.
Foreign Function Interface:
- Foreign function declarations using the ccall calling convention
have been extended to support the import of static addresses and
dynamic function wrappers. In addition, the basic marshalable types
now include pointers.
- Most libraries from the Haskell 98 Foreign Function Interface
addendum have been implemented as far as they do not require type
classes.
Documentation:
Sections about porting to a new architecture and building the
internal documentation added.
Noteworthy Bug Fixes:
- It is now possible to use Gnu C version 3.4 and optimization level
-O3 with the default configuration.
- In some rare cases the compiler would print too general types for an
expression.
- In a misguided attempt to avoid duplicate solutions, the (=/=)
operator was using equality constraints for some arguments. This is
no longer the case as it is a source of incompleteness. The new
implementation correctly reports the solution y/=0 for the goal
let x,y free in (x,y) =/= (undefined,0), which was lost before.
- File handles opened with one of the functions IO.openFile,
IOExts.openProcess, and IOExts.connectTcpSocket are no longer closed
automatically at end of file or when an error occurs.
- It is no longer possible to write to a handle opened in
ReadWriteMode after IO.hGetContents has been applied to it.
- Rounding errors for large floating-point numbers in source text are
now avoided.
- Better algorithm used for (Float.^).
- A bug was introduced in release 0.9.7 that caused partial
applications of tuple constructors to be printed incorrectly. This
has been fixed.
Main changes in release 0.9.8
Build Environment:
- The compiler can now be built on Microsoft Windows with CygWin
without special configuration options. [Thanks again to Diego
Berrueta.]
- It is now possible to use g++ as backend C compiler.
- Configure scripts upgraded to autoconf >= 2.50.
- Unix man pages for cyc, cymake, and cyi.
Compiler:
- Let expressions with free variable declarations are no longer
restricted to type Success.
- All functions use flexible evaluation by default.
- choice and rigid are no longer keywords.
- Syntax of external declarations now uses foreign import instead of
external.
- Partial support for ccall calling convention in foreign function
declarations.
- Faster code for lazy applications of nullary and unary functions.
Curry Library and Runtime System:
- The copying garbage collector now uses a segment order preserving
algorithm. The compacting collector has been removed as the new
copying collector is both faster and more accurate than it. The
command line arguments -gc-2space and -gc-compact are deprecated and
will be removed in the next release.
- Type of (&>) generalized to Success -> a -> a.
- Non-deterministic choice operator (?) added to the prelude.
- seq and ($!) are no longer rigid, new functions rigid and rigidSpine
added to the prelude.
- Equality constraints x=:=e, where x is an unbound variable and e is
in normal form are evaluated more efficiently.
- Equality and disequality constraints between two partial
applications are now restricted to ground terms.
- (==) and (!=) can now be used for comparing partial applications and
terms with abstract types (e.g. file handles) for (in)equality.
- compare and the operators (<), (>), (<=), (>=) raise a runtime error
when applied to partial applications and terms with abstract types.
- undefined is equivalent to failed again.
- Fix minor incompatibilities with the Haskell report in the Numeric
module. In particular, readSigned now recognizes parenthesized
numbers, and readDec, readOct, and readHex no longer accept leading
blanks.
- trace function now writes its message to the standard error channel
and appends a newline to the message.
- New modules compatible with PAKCS: AllSolutions, Combinatorial,
Float, Integer, Parser, and Ports (only internal and stream ports).
- The Read module has been replaced by a (mostly) PAKCS compatible one.
- Unsafe module is now compatible with PAKCS.
Documentation:
- Section about limitations of encapsulated search added to the user's
guide.
Noteworthy Bug Fixes:
- The C compiler backend no longer reports an error for out of range
floating-point numbers. In addition, infinite values and NaNs are now
shown as Infinite, -Infinite, and NaN, respectively.
- show no longer encloses the names of abstract data types (e.g.,
files) in parentheses.
- Correct implementation of equality and disequality constraints
between partial applications of tuple constructors computed in
different modules.
- A few rare bugs with nested encapsulated searches have been fixed.
- Two problems with the debugger have been fixed, where computation
trees related to local bindings could be lost in the presence of
guards or case expressions, and programs using if-then-else or case
expressions in arguments could crash.
Main changes in release 0.9.7
- Support for building and using the compiler on Microsoft Windows
using the CygWin environment.
[The necessary changes were kindly contributed by Diego Berrueta.]
- cyc's option -y renamed into -T. cymake now supports -T, too.
- Integer literals can now be used as floating-point numbers.
- The unary negation operator - works for integer and floating-point
numbers. Use of -. for negating floating-point numbers is deprecated.
- The compiler no longer allows to mix import and other
declarations. This change is in conformance with the Curry report
and makes cymake's dependency analysis more fault tolerant.
- It is now possible to define and use (infix) constructor operators.
- Operator fixities must be declared in the same declaration group as
the operator. To this end, fixity declarations are allowed in local
declaration groups. Fixity declarations can still be mixed freely
with other declarations.
- Curried syntax is supported on the left-hand side of declarations.
- Support constraint guards in case expressions. Actually, they have
been supported since the introduction of guarded case alternatives
in release 0.9.6, but the documentation did say otherwise.
- Array module reimplemented. This fixes, in particular, the broken
accum and accumArray functions.
- Finite maps and sets added to the library.
- Add module IOExts which implements a subset of the Hugs/ghc module
with the same name. At present, this includes the monadic fixpoint
function fixIO, mutable references, and mutable arrays.
- Random module added.
- Add new primitive function ground to module Success.
- The generated code has become slightly faster, again.
- Bug fixes.
Main changes in release 0.9.6
- THE COMPILER HAS BEEN RENAMED. The compiler proper must now be invoked
with the name cyc (instead of cycc).
- Hierachical modules mapped onto the filesystem, i.e., module
SubProj.Lib.Mod is now expected in one of the files Mod.curry and
Mod.lcurry in the subdirectory SubProj/Lib of the current directory
or of one of the directories in the import search path.
- Interface files are no longer created in the current directory but
in the same directory as the source file.
- The compiler now uses the source file name to compute the name of
the interface file instead of the module name. This should make a
difference only for the main file of a program.
- The module system finally conforms to the Haskell 98 module
system. In particular, it is now possible to define an entity with
the same name as an imported entity. However, such entities can be
accessed only with their qualified name.
- cyc's -m option renamed into -M because it conflicts with a Gnu C
option.
- cymake can now search for imported modules in other directories.
- Make output of the debugger a little bit more readable when
higher-order functions are used.
- as, hiding, qualified can be used as identifiers in programs. They
are given special treatment only in import declarations.
- Syntax extensions:
* newtype declarations,
* @-patterns,
* lazy patterns,
* guarded right hand sides for pattern declarations and case
alternatives, and
* expression type signatures.
- Prelude changes
* Make if_then_else rigid.
* Fix handling of negative arguments in take, drop, and splitAt.
- Additional modules from the Haskell library (partially) implemented:
* Directory,
* IO,
* Numeric, and
* Time.
- The notorious space leak for lazy pattern bindings has been fixed.
- Performance of the compiler improved, in particular for large files
and files with many constants.
- Bug fixes and minor performance enhancements in the compiled code.
Main changes in release 0.9.5
- Changed to match version 0.8 of the Curry report.
- Faster implementation.
- Characters and strings are no longer displayed using integer numbers.
- Occurs check in unification.
- Restrictions on (partially) solved goals returned from try have been
removed.
- Handle partial applications as data constructors in equality and
disequality constraints.
- IO Exceptions implemented.
Use ioError to throw IO exceptions, and catch to catch IO exceptions.
- Existentially quantified data types disabled because the current
implementation was unsound regarding equality constraints. They will
be included in a future release after fixing the problem.
- New option --clean to cymake.
This removes all compiled files for the target modules and its
imported modules.
- New commands :freshen and :clean in interactive environment.
- The function undefined now aborts the running program with an error
message. Use failed to fail only the current solution.
- More functions from the Haskell prelude: getContents, interact.
- Module Monad from the Haskell library is now included. This module
also implements the functions sequence, sequence_, mapM, and mapM_
from the Haskell prelude.
- New syntax for external declarations which is closer to the proposed
FFI for Haskell.
- It is now possible to change the buffer mode used for standard input
and output with a runtime system option.
- Bug fixes...
Main changes in release 0.9.1
- cyi and cymake now work on Solaris 2.7 and OS'es with test commands
that do not support the -nt operator.
- Runtime option to change the stack size renamed into -k.
- Defaults for all runtime options can now be passed to the compiler
during linking. Thus, all options are now available under the
interactive environment.
Main changes in release 0.9
- Interactive environment cyi.
- Make-like build tool cymake.
- Declarative Debugger.
- More library modules.
- Programs can evaluate arbitrary goals.
No additional flags needed to distinguish IO and non-IO goals.
- Lots of bug fixes.