mirror of
https://github.com/Mercury-Language/mercury.git
synced 2025-12-09 02:43:21 +00:00
Estimated hours taken: 3 Allow a predicate to have matching `cc' and `non-cc' modes. compiler/det_analysis.m: If there is a call to a cc procedure in a non-cc context, then search for a mode of that predicate which is identical to the called mode except that it is not cc. If such a mode is found, use it, rather than reporting an error. compiler/modecheck_call.m: Add predicate modes_are_identical_bar_cc, for use by det_analysis.m. NEWS: LIMITATIONS: doc/reference_manual.texi: Document the new feature and delete documentation about the lack of this feature. tests/hard_coded/Mmakefile: tests/hard_coded/cc_and_non_cc_test.m: tests/hard_coded/cc_and_non_cc_test.exp: Add a test case for the new feature.
28 lines
956 B
Plaintext
28 lines
956 B
Plaintext
|
|
The current implementation does not yet completely implement the
|
|
Mercury language. The main limitations of the current implementation
|
|
are the following:
|
|
|
|
* We do not allow definite aliasing in the mode system.
|
|
Without this, partially instantiated modes are unusable,
|
|
and so are nested unique modes :-(
|
|
|
|
* The compiler does not yet use structure reuse or compile-time
|
|
garbage collection to exploit unique modes :-(
|
|
|
|
* Type inference and mode inference are a bit imperfect.
|
|
|
|
We are working on eliminating all of these problems.
|
|
|
|
In addition, design decisions in this implementation have imposed the
|
|
following fixed limits:
|
|
|
|
* Predicates and functions can have at most about 1000 arguments.
|
|
|
|
* Higher order terms are limited to arity of about 500.
|
|
|
|
These limits can be lifted (with some effort), but would possibly incur
|
|
performance penalties. Contact the Mercury team (mercury@cs.mu.oz.au) if
|
|
you find these limits are affecting your application.
|
|
|