Hat Tools:
bugs and wish-list
This is a fuller list of bugs and wishes for
the prototype tracing browsers in Hat.
(There is also an overview page,
and a more detailed page for the trail-building
compiler.)
Please mail us at
ART-team@cs.york.ac.uk
with any other bugs or wishes.
Bugs in hat-trail
- Display blanking.
The upper part of the display is blanked when the current expression
causes previous expressions to scroll upwards, and the topmost
expression is not exactly at the start of the page.
(Test case: trace back recursive calls of player' in Adjoxo.)
- Indirections. Sometimes handled incorrectly?
(Test case: Olaf to supply.)
Wishes in hat-trail
- Interrupted evaluation.
Distinguish this case from undefined. Display as
redex = {interrupted} not redex = _|_.
- String and list navigation.
[ and ] to become commands to move forward/backward to next/previous
list element (implicit user claim that current selection is within a
list).
- Selection and sharing.
There should always be exactly one selected expression, clearly
indicated by a unique form of highlighting. Thus, (1) the highlight
should never vanish, and (2) there should not be multiple highlighting.
[MAYBE: options to show sharing (1) in same redex/equation, or
(2) everywhere, by a different form of highlighting.]
- Dependent source browsers.
Should be closed when user quits hat-explore. Could usefully allow
scrolling to see wider context.
[MAYBE ONE DAY: extend source highlight to show entire expression or
definition, not just its starting point.]
Bugs in hat-observe
- Bogus reductions.
Sometimes equations with identical LHS and RHS are shown:
eg. observe reduceAll in TableauRefac v.3.
(May be a problem of unknown arities and partial applications,
more easily fixed with the new .hat format.)
- Application of the same function to two (separate but?)
identical cyclic structures causes an infinite loop because
of processing to find unique most general representatives.
Wishes in hat-observe
- Identifier Info.
The :info command should also show for each listed name a count
SAT-C (+ SAT-B): eg. 173 (+ 2), or 0 (+ 3), but simplifying
64 (+ 0) to 64 and discarding items with 0 (+ 0) counts
- Patterns/equations after 'in'.
Permit a pattern and/or equation on the RHS of 'in'. For example,
observe f _ = True in g _ = False.
- Observing constructors.
Should be possible -- for example, to check invariants respected.
Corollaries: (1) hat-observe should also have an = toggle which is
always toggled off for constructor observations (and restored
to its previous state afterwards); (2) there should be a command
analogous to i for constructors (an I command would be mnemonic
because of the upper-case convention for constructors).
- Local observations.
There could be an option (with suitable warning) to include
locally-defined names among the observables. Not all depend on
free variables anyway. Locals should perhaps be tagged in some
way in the i listings (name in { }?).
[MAYBE ONE DAY: support full observation of locals with context
of free-variable bindings in .hat file. Add refs to static parent
names in local name nodes; extend local argument lists to include
free variables defined within top-level parent's (and name entries
for these variables).]
- Families of bservations.
[MAYBE: option to group observations with a common source for
the application?]
- Separated observations.
The user may want to observe each separate application (rather than
unique most general representatives) because different applications
have different contexts (if explored) and/or may have different
unevaluated expressions beneath _'s.
(The 'xu' flag is an unsafe and incomplete solution: it is not a
first-class option and needs arity info to be correct.)
Bugs in hat-detect
- hat-detect does not find calls to untrusted functions within trusted
functions unless they are reachable from SAT for the trusted application.
(Eg. calls of a filter predicate.)
Fix requires a linear scan to find relevant untrusted applications,
assuming accurate trustedness info in the .hat file -- Olaf says it
should be "perfect" using the new portable transformation!
- hat-detect does not work for interrupted or failing computations.
The new .hat format will make it easy to remedy this defect, but
meanwhile a linear search could again provide a solution.
Wishes in hat-detect
- A free navigation mode, to browse the full call-graph of the
computation. As a small start: a command to list the immediate
EDT children of the current equation.
General bugs
- Haskell 98 gaps or bitterness: n+k, comprehensions, do-notation, etc.
General wishes
- Merge pretty-printers for all tools to ensure consistency.
- Put arity information into .hat files (even before new format)?
- All tools to support changes in width of display window (ideally
with automatic response, but at least after :resize).
- Tools should compare creation/modification times of sources, executable,
trace and recorded output, and warn of apparent anachronisms.
- CAFs defined by higher-order expressions such as composition chains
do not trace nicely (eg. one has to 'observe' inner calls before one can
'explore' them -- and even 'observe' may not reach them).
Also, trusted CAFS (eg. Prelude functions such as reverse) give only
the single observation of the CAF reduction, not applications.
[MAYBE: de-CAF Prelude functions? Introduce "quasi-trusted" functions
such as composition? (Cannot just make it untrusted or else all
compositions within the Prelude would be recorded too.)]
- A "hat" tool that co-ordinates calls of specialised tools and keeps
track of dependent windows etc.
- [MAYBE: Readline functionality in command-based tools.]
- Some people would like to animate reductions forwards rather than
trace them backwards.
[MAYBE ONE DAY: hat-animate when we have the new .hat format.]
- Further tools for call-graph, data-flow and black-hole tracing.
- Even faster construction of traces.
This page last modified: 15th March 2002.
|