=head1 Various

=over 4

=item interactive tclsh

new parser breaks ability to send interactive commands to the shell, add it
back

=item remove .is_space macro

looks like <is_whitespace> opcode will handle this.

=item PIR Tree

From autrijus's talk.
can we use this instead of the current string-based compilation.

=item Makefile deps

Should be more explicit about the PMC dependencies in the makefile. *something*
is causing things to get rebuilt unecessarily each time "make tclsh" is run.

=item keyed access

tcl is not using Keys when getting from aggregates. It probably should,
at least for language interoperability.

=item interactive tclsh

Still have to:

 o catch any real_exceptions thrown.
 o respect tcl_prompt1, tcl_prompt2
 o deal with incomplete input (needs better error handling)

=item [interpinfo name]

how to do this from inside parrot? RT#36277

=item migrate all these issues to RT or TODO tests

=item update docs [will]

(including add pod to all .pir)

=back

=head1 Programming Issues

=head2 C-level tasks

=over 4

=item string to list

TclList's new_from_string method should use the string to list code
...except that it turnsout this is non-trivial.

=back

=head2 PIR-level tasks

=over 4

=item __set/__read

All commands should use the __set and __read functions defined in
variables.pir instead of get_var. __read's interface conflicts slightly
with the way tclparser splits things up - it over-helpfully tries to 
break the variable part out into array and index - while read is
already doing that for us.

On a related note: No builtins or library code should be dealing with var
sigils (i.e. C<$>) other than __set and __read. 

=item subcommand processing

Convert any commands that use subcommands to [info] style dispatch to ease
maintenance. Subcommands invoked in this style get a single container PMC
with all their args, but *NOT* the invoking command. so, given the tcl:

 [info args foo]

C<Tcl::info> is called with (args, foo), which then dispatched to:

C<_Tcl::builtins::info::args((foo))>

=item implement default globals, etc.

global variables provided by tcl libary. L<tclvars>.

global variables provided by tcl interpreter. L<tclsh>

source per-user settings. L<tclsh>

=back

=head2 Tests

We should be using the tcl-test target as our language goal. For now, keep
enough tests in our local test harness (C<t/>) so that we don't get any
regressions. (Running the tcl test suite takes a while). This means we
can get by with basic tests in C<t/> for now.

Long term goal would be to remove any tests in C<t/> that are testing things
that are already tested in tcl. Partcl's checked in test suite should just
be checking partcl-specific functionaliity.

=head1 Uncategorized Issues

=over 4

=item provide a way to access existing library PIR from Tcl.

Perhaps via [namespace import]? Can fake it right now with [inline]

=item multiple level lists

=item [expr]

Clean up [expr]. MUUUUCH room for improvement there. [expr] is the source
of most of our abysmal performance in bench.tcl.

the expr AST could use a rework. Be nice if it just passed around something
invokable.

clean up expr so that it's not passing around
type indicators. - just use PMCs everywhere. (Though we may still need
to have CONST vs. VARIABLE types.)

The type indicator is also used to disambiguate operators and function calls
from operands. We can easily remove it for operands, but how to cleanly
remove this for operators?

TBD: strings, floats as operands - (many of the math funcs return floats
but you can't specify them, and not everything takes them
(try, for example, [expr sin(1) + sin(1)] vs [expr sin(1) * sin(1)].)

TBD: blocks, commands, and strings as operands

TBD: logical binary ops & ternary op (need deferred evaluation) ; unary ops;
ops that work on strings only.

TBD: functions that take > 1 arg.

TBD: Argument type requirements - Currently works ONLY on bitand - esp need
to get any that require int-only args, as we can now /generate/ floats,
even if we cannot specify them. This is all supportable by MMD - we just
need to specify the correct errors to throw.

=back

=cut
