[m-rev.] diff: convert LIMITATIONS to Markdown
Julien Fischer
jfischer at opturion.com
Sat Jan 1 15:30:11 AEDT 2022
As recently proposed on the developers list. This probably doesn't
really require a review since the content hasn't changed.
Note, I will make the additions mentioned on the list separately.
--------------------------------
Convert LIMITATIONS to Markdown.
Rename LIMITATIONS -> LIMITATIONS.md.
There are no changes to the content of the file with the exception of the
addition of a missing hyphen.
LIMITATIONS:
As above.
Julien.
diff --git a/LIMITATIONS.md b/LIMITATIONS.md
index 8ff208439..20af7e57e 100644
--- a/LIMITATIONS.md
+++ b/LIMITATIONS.md
@@ -1,3 +1,6 @@
+LIMITATIONS
+-----------
+
The current implementation does not yet completely implement the
Mercury language. The main limitations of the current implementation
are the following:
@@ -7,25 +10,26 @@ are the following:
instantiated terms (i.e. terms which contain both function symbols and
free variables) are unusable, and so are nested unique modes :-(
When partial instantiation appears to work, it is only by chance.
+
The detailed explanation is:
- If you unify a free variable (say X) and an argument of a term
- which is also free at the time (say the third argument of g in g(a, b, Y)),
- then when either the variable X or the argument Y is bound, the other
- should be bound to the same thing. In the absence of a recorded
- alias between X and Y, this won't happen. The only situation in which
- this is ok is if "the other" does not exist anymore, which the current
- compiler can be sure about only if its scope is restricted to the
- unification (i.e. if whichever of X and Y is "the other" appears
- *only* in the unification, and nowhere else).
-
- Even for code in which a free variable's scope is confined to its
- unification with a free variable in a term, the code generators are
- not guaranteed to handle the resulting partially instantiated terms
- correctly, simply because they weren't *designed* to. Mantis bug 311
- shows this very clearly. Though I can imagine the different backends
- misbehaving differently on such code. Some may even generate correct
- code by accident :-)
+ > If you unify a free variable (say `X`) and an argument of a term
+ > which is also free at the time (say the third argument of `g` in `g(a, b, Y)`),
+ > then when either the variable `X` or the argument `Y` is bound, the other
+ > should be bound to the same thing. In the absence of a recorded
+ > alias between `X` and `Y`, this won't happen. The only situation in which
+ > this is ok is if "the other" does not exist anymore, which the current
+ > compiler can be sure about only if its scope is restricted to the
+ > unification (i.e. if whichever of `X` and `Y` is "the other" appears
+ > *only* in the unification, and nowhere else).
+
+ > Even for code in which a free variable's scope is confined to its
+ > unification with a free variable in a term, the code generators are
+ > not guaranteed to handle the resulting partially instantiated terms
+ > correctly, simply because they weren't *designed* to. Mantis bug 311
+ > shows this very clearly. Though I can imagine the different backends
+ > misbehaving differently on such code. Some may even generate correct
+ > code by accident :-)
This does not affect support for instantiation state subtyping.
@@ -41,9 +45,8 @@ following fixed limits:
* Predicates and functions can have at most about 1000 arguments.
-* Higher order terms are limited to arity of about 500.
+* 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 at mercurylang.org)
+performance penalties. Contact the Mercury team (<mercury at mercurylang.org>)
if you find these limits are affecting your application.
-
More information about the reviews
mailing list