mirror of
https://github.com/Mercury-Language/mercury.git
synced 2025-12-20 08:19:28 +00:00
123 lines
2.8 KiB
Plaintext
123 lines
2.8 KiB
Plaintext
*******************************************************************************
|
|
|
|
TODO LIST:
|
|
----------
|
|
|
|
followvars.nl
|
|
-------------
|
|
|
|
- Make it work.
|
|
|
|
code_gen.nl
|
|
----------
|
|
|
|
- some semideterministic code generation (mostly done)
|
|
|
|
- nondeterministic code generation
|
|
|
|
- handle string equality, string constants, etc.
|
|
|
|
- types with constants only (enumerations) should be handled as ints.
|
|
|
|
typecheck.nl
|
|
------------
|
|
|
|
- improve error messages for unification of var & functor
|
|
|
|
- see also wish list comments at the start of typecheck.nl
|
|
|
|
modes.nl
|
|
--------
|
|
|
|
- detect incorrect usage of `bound(...)' insts.
|
|
|
|
- handle undefined insts/modes gracefully
|
|
|
|
- handle polymorphic modes
|
|
|
|
- see also comments at the start of modes.nl
|
|
|
|
stack_alloc.nl
|
|
--------------
|
|
|
|
- make it work: it needs to assign stack slots for variables
|
|
which need to be saved over a call
|
|
|
|
general
|
|
-------
|
|
|
|
- tail recursion optimization (vanilla) and also pass-by-reference
|
|
tail recursion.
|
|
|
|
- (modes.nl, make_hlds.nl, hlds.nl, codegen.nl):
|
|
split construct/deconstruct unifications into their atomic
|
|
"micro-unification" pieces: functor construct/deconstruct and
|
|
argument get/put.
|
|
|
|
- warn about predicates with no clauses.
|
|
|
|
- warn about predicates with no modes.
|
|
|
|
- handle abstract insts in the same way abstract types are handled (???)
|
|
|
|
- test & debug the determinism analysis
|
|
|
|
- improve efficiency of implicit quantification
|
|
|
|
- renaming apart of different occurences
|
|
of the same variable; warning about variables which occur in
|
|
overlapping scopes.
|
|
|
|
- optimization of various sorts
|
|
|
|
- generate code for complicated_unify's (there are some comments about
|
|
this in the paper.)
|
|
|
|
- array.nl: write a predicate to resize arrays.
|
|
|
|
- garbage collection
|
|
|
|
mercury_to_goedel.nl
|
|
--------------------
|
|
|
|
- see comments at the start of that file
|
|
|
|
*******************************************************************************
|
|
|
|
WISH LIST
|
|
---------
|
|
|
|
codegen.nl
|
|
----------
|
|
|
|
- The generated code should include some profiling hooks.
|
|
In particular, we should add a version of the heap allocation
|
|
macro which takes an extra string parameter identifying which
|
|
routine allocated the memory. Then we can do heap-allocation
|
|
profiling to identify which routines use up all the bloody memory.
|
|
|
|
- Generate constant compound terms at compile time rather than at runtime.
|
|
|
|
- Add a peephole optimization pass
|
|
|
|
general
|
|
-------
|
|
|
|
- handle module qualifiers properly
|
|
|
|
- more work on module system, separate compilation, and the multiple
|
|
specialization problem
|
|
|
|
- implement user-defined operators:
|
|
Add a new construct `:- op(Pred, Type, Op).' as in Prolog;
|
|
change prog_io.nl to parse this construct and call io__op
|
|
accordingly.
|
|
|
|
- better error handling
|
|
|
|
- fix all the `XXX's, `xxx's, `YYY's and `%%%'s.
|
|
|
|
- implement a debugger and a profiler
|
|
|
|
*******************************************************************************
|