login  home  contents  what's new  discussion  bug reports help  links  subscribe  changes  refresh  edit

# Edit detail for SandBox Trace with )math revision 4 of 4

 1 2 3 4 Editor: test1 Time: 2015/06/01 19:33:59 GMT+0 Note:

added:
Actually, if FriCAS this specific example should work regardless of ')math'.
In the past ')math' caused trouble because ')math' uses coercion to
'OutputForm' and this coercion sometimes was traced causing infinite
recursion.  There was similar problem without 'math': FriCAS before
first use of a routine must first search its internal tables.  To make
subsequent uses faster FriCAS stores inside domains a search function.
At first use this function performs search, replaces entry in domain
vector and calls proper function.  Subsequent calls go directly to
proper function.  Tracing replaces functions stored in domain by
wrappers that print argument and call proper functions.  Resulting
indirection is confusing and in the past FriCAS code was wrong which
could lead to wrapper infinitely calling itself.  Both problems
are fixed in current FriCAS.

Currently using ')math' typically works better because of types.

changed:
-frequently) also contains a type).
frequently) also contains a type.


The addition of )math below stopped the infinite loop from occurring! For the version without )math, see SandBox Trace in Windows :

 \begin{axiom}
)trace INT
)trace EXPR INT )math -- added, I thought, to surpress output, but expecting same error
)trace SMP
1::EXPR INT
\end{axiom}


Actually, if FriCAS this specific example should work regardless of )math. In the past )math caused trouble because )math uses coercion to OutputForm and this coercion sometimes was traced causing infinite recursion. There was similar problem without 'math': FriCAS before first use of a routine must first search its internal tables. To make subsequent uses faster FriCAS stores inside domains a search function. At first use this function performs search, replaces entry in domain vector and calls proper function. Subsequent calls go directly to proper function. Tracing replaces functions stored in domain by wrappers that print argument and call proper functions. Resulting indirection is confusing and in the past FriCAS code was wrong which could lead to wrapper infinitely calling itself. Both problems are fixed in current FriCAS.

Currently using )math typically works better because of types. Basically, anything containing types, will cause trouble when tracing without )math. Namely, types usually have many fields, one field contains lists of operations which may be quite long. Worse yet, typical types contain several other types. So printing type means printing huge, deeply nested data structure which leads to unreadable result. During printing this looks like an infinite loop, but given enough time and memory it will eventually finish. Now, Spad functions contain a type (namely domain in which they are defined). So anything containing functions (which happens frequently) also contains a type.