Ignore:
Timestamp:
Sep 9, 2021, 3:56:32 PM (4 years ago)
Author:
Thierry Delisle <tdelisle@…>
Branches:
ADT, ast-experimental, enum, forall-pointer-decay, master, pthread-emulation, qualifiedEnum
Children:
d0b9247
Parents:
dd1cc02 (diff), d8d512e (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Merge branch 'master' of plg.uwaterloo.ca:software/cfa/cfa-cc

File:
1 edited

Legend:

Unmodified
Added
Removed
  • doc/theses/andrew_beach_MMath/future.tex

    rdd1cc02 r5a40e4e  
    22\label{c:future}
    33
     4The following discussion covers both possible interesting research
     5that could follow from this work as long as simple implementation
     6improvements.
     7
    48\section{Language Improvements}
    5 \todo{Future/Language Improvements seems to have gotten mixed up. It is
    6 presented as ``waiting on language improvements" but really its more
    7 non-research based impovements.}
     9
    810\CFA is a developing programming language. As such, there are partially or
    9 unimplemented features of the language (including several broken components)
    10 that I had to workaround while building an exception handling system largely in
    11 the \CFA language (some C components).  The following are a few of these
    12 issues, and once implemented/fixed, how they would affect the exception system.
     11unimplemented features (including several broken components)
     12that I had to workaround while building the EHM largely in
     13the \CFA language (some C components). Below are a few of these issues
     14and how implementing/fixing them would affect the EHM.
     15In addition there are some simple improvements that had no interesting
     16research attached to them but would make using the language easier.
    1317\begin{itemize}
    14 \item
    15 The implementation of termination is not portable because it includes
    16 hand-crafted assembly statements.
    17 The existing compilers cannot translate that for other platforms and those
    18 sections must be ported by hand to
    19 support more hardware architectures, such as the ARM processor.
    2018\item
    2119Due to a type-system problem, the catch clause cannot bind the exception to a
     
    2422result in little or no change in the exception system but simplify usage.
    2523\item
     24The @copy@ function in the exception virtual table is an adapter to address
     25some limitations in the \CFA copy constructor. If the copy constructor is
     26improved it can be used directly without the adapter.
     27\item
    2628Termination handlers cannot use local control-flow transfers, \eg by @break@,
    2729@return@, \etc. The reason is that current code generation hoists a handler
    2830into a nested function for convenience (versus assemble-code generation at the
    29 @try@ statement). Hence, when the handler runs, its code is not in the lexical
    30 scope of the @try@ statement, where the local control-flow transfers are
    31 meaningful.
     31try statement). Hence, when the handler runs, it can still access local
     32variables in the lexical scope of the try statement. Still, it does mean
     33that seemingly local control flow is not in fact local and crosses a function
     34boundary.
     35Making the termination handlers code within the surrounding
     36function would remove this limitation.
     37% Try blocks are much more difficult to do practically (requires our own
     38% assembly) and resumption handlers have some theoretical complexity.
    3239\item
    3340There is no detection of colliding unwinds. It is possible for clean-up code
    3441run during an unwind to trigger another unwind that escapes the clean-up code
    3542itself; such as a termination exception caught further down the stack or a
    36 cancellation. There do exist ways to handle this but currently they are not
    37 even detected and the first unwind will simply be forgotten, often leaving
     43cancellation. There do exist ways to handle this case, but currently there is
     44no detection and the first unwind will simply be forgotten, often leaving
    3845it in a bad state.
    3946\item
    40 Also the exception system did not have a lot of time to be tried and tested.
    41 So just letting people use the exception system more will reveal new
    42 quality of life upgrades that can be made with time.
     47Finally, the exception system has not had a lot of programmer testing.
     48More time with encouraged usage will reveal new
     49quality of life upgrades that can be made.
    4350\end{itemize}
    4451
     
    4754project, but was thrust upon it to do exception inheritance; hence, only
    4855minimal work is done. A draft for a complete virtual system is available but
    49 it is not finalized. A future \CFA project is to complete that work and then
     56not finalized. A future \CFA project is to complete that work and then
    5057update the exception system that uses the current version.
    5158
     
    5360exception traits. The most important one is an assertion to check one virtual
    5461type is a child of another. This check precisely captures many of the
    55 correctness requirements.
     62current ad-hoc correctness requirements.
     63
     64Other features of the virtual system could also remove some of the
     65special cases around exception virtual tables, such as the generation
     66of the @msg@ function, could be removed.
    5667
    5768The full virtual system might also include other improvement like associated
    5869types to allow traits to refer to types not listed in their header. This
    5970feature allows exception traits to not refer to the virtual-table type
    60 explicitly, removing the need for the current interface macros.
     71explicitly, removing the need for the current interface macros,
     72such as @EHM_IS_EXCEPTION@.
    6173
    6274\section{Additional Raises}
     
    7486Non-local/concurrent raise requires more
    7587coordination between the concurrency system
    76 and the exception system. Many of the interesting design decisions centre
     88and the exception system. Many of the interesting design decisions center
    7789around masking, \ie controlling which exceptions may be thrown at a stack. It
    7890would likely require more of the virtual system and would also effect how
     
    93105Checked exceptions make exceptions part of a function's type by adding an
    94106exception signature. An exception signature must declare all checked
    95 exceptions that could propagate from the function (either because they were
    96 raised inside the function or came from a sub-function). This improves safety
     107exceptions that could propagate from the function, either because they were
     108raised inside the function or came from a sub-function. This improves safety
    97109by making sure every checked exception is either handled or consciously
    98110passed on.
    99111
    100112However checked exceptions were never seriously considered for this project
    101 because they have significant trade-offs in usablity and code reuse in
     113because they have significant trade-offs in usability and code reuse in
    102114exchange for the increased safety.
    103115These trade-offs are most problematic when trying to pass exceptions through
     
    129141not support a successful-exiting stack-search without doing an unwind.
    130142Workarounds are possible but awkward. Ideally an extension to libunwind could
    131 be made, but that would either require separate maintenance or gain enough
    132 support to have it folded into the standard.
     143be made, but that would either require separate maintenance or gaining enough
     144support to have it folded into the official library itself.
    133145
    134146Also new techniques to skip previously searched parts of the stack need to be
     
    158170to leave the handler.
    159171Currently, mimicking this behaviour in \CFA is possible by throwing a
    160 termination inside a resumption handler.
     172termination exception inside a resumption handler.
    161173
    162174% Maybe talk about the escape; and escape CONTROL_STMT; statements or how
Note: See TracChangeset for help on using the changeset viewer.