Changeset ad4458f for doc/papers/general


Ignore:
Timestamp:
Feb 22, 2018, 9:31:12 PM (6 years ago)
Author:
Peter A. Buhr <pabuhr@…>
Branches:
ADT, aaron-thesis, arm-eh, ast-experimental, cleanup-dtors, deferred_resn, demangler, enum, forall-pointer-decay, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr, new-env, no_list, persistent-indexer, pthread-emulation, qualifiedEnum, resolv-new, with_gc
Children:
0304215a
Parents:
c27fb59
Message:

Aaron's changes for exceptions

File:
1 edited

Legend:

Unmodified
Added
Removed
  • doc/papers/general/Paper.tex

    rc27fb59 rad4458f  
    117117                _Alignas, _Alignof, __alignof, __alignof__, asm, __asm, __asm__, _At, __attribute,
    118118                __attribute__, auto, _Bool, catch, catchResume, choose, _Complex, __complex, __complex__,
    119                 __const, __const__, disable, dtype, enable, __extension__, fallthrough, fallthru,
     119                __const, __const__, disable, dtype, enable, exception, __extension__, fallthrough, fallthru,
    120120                finally, forall, ftype, _Generic, _Imaginary, inline, __label__, lvalue, _Noreturn, one_t,
    121121                otype, restrict, _Static_assert, throw, throwResume, trait, try, ttype, typeof, __typeof,
     
    260260\Celeven did add @_Generic@ expressions, which can be used in preprocessor macros to provide a form of ad-hoc polymorphism; however, this polymorphism is both functionally and ergonomically inferior to \CFA name overloading.
    261261The macro wrapping the generic expression imposes some limitations; as an example, it could not implement the example above, because the variables @max@ would collide with the functions @max@.
    262 Ergonomic limitations of @_Generic@ include the necessity to put a fixed list of supported types in a single place and manually dispatch to appropriate overloads, as well as possible namespace pollution from the functions dispatched to, which must all have distinct names. 
     262Ergonomic limitations of @_Generic@ include the necessity to put a fixed list of supported types in a single place and manually dispatch to appropriate overloads, as well as possible namespace pollution from the functions dispatched to, which must all have distinct names.
    263263Though name-overloading removes a major use-case for @_Generic@ expressions, \CFA does implement @_Generic@ for backwards-compatibility purposes. \TODO{actually implement that}
    264264
     
    13571357\subsection{Exception Handling}
    13581358
    1359 \CFA provides two forms of exception handling: \newterm{resumption} (fix-up) and \newterm{recovery} (see Figure~\ref{f:CFAExceptionHandling}).
     1359The following framework for \CFA exception handling is in place, excluding a run-time type information and dynamic casts.
     1360\CFA provides two forms of exception handling: \newterm{fix-up} and \newterm{recovery} (see Figure~\ref{f:CFAExceptionHandling}).
    13601361Both mechanisms provide dynamic call to a handler using dynamic name-lookup, where fix-up has dynamic return and recovery has static return from the handler.
    1361 \CFA restricts exception types to those defined by aggregate type @_Exception@.
     1362\CFA restricts exception types to those defined by aggregate type @exception@.
    13621363The form of the raise dictates the set of handlers examined during propagation: \newterm{resumption propagation} (@resume@) only examines resumption handlers (@catchResume@); \newterm{terminating propagation} (@throw@) only examines termination handlers (@catch@).
    13631364If @resume@ or @throw@ have no exception type, it is a reresume/rethrow, meaning the currently exception continues propagation.
    1364 If there is no current exception, the reresume/rethrow results in an error.
     1365If there is no current exception, the reresume/rethrow results in a runtime error.
    13651366
    13661367\begin{figure}
     
    13701371\multicolumn{1}{c@{\hspace{\parindentlnth}}}{\textbf{Resumption}}       & \multicolumn{1}{c}{\textbf{Recovery}} \\
    13711372\begin{cfa}
    1372 `_Exception R { int fix; };`
     1373`exception R { int fix; };`
    13731374void f() {
    13741375        R r;
    13751376        ... `resume( r );` ...
    13761377        ... r.fix // control does return here after handler
     1378}
    13771379`try` {
    13781380        ... f(); ...
     
    13831385&
    13841386\begin{cfa}
    1385 `_Exception T {};`
     1387`exception T {};`
    13861388void f() {
    13871389
    13881390        ... `throw( T{} );` ...
    13891391        // control does NOT return here after handler
     1392}
    13901393`try` {
    13911394        ... f(); ...
     
    14201423        ... write( `datafile`, ... ); ...               $\C{// may throw IOError}$
    14211424        ... write( `logfile`, ... ); ...
    1422 } catch ( IOError err; `err == datafile` ) { ... } $\C{// handle datafile error}$
    1423    catch ( IOError err; `err == logfile` ) { ... } $\C{// handle logfile error}$
     1425} catch ( IOError err; `err.file == datafile` ) { ... } $\C{// handle datafile error}$
     1426   catch ( IOError err; `err.file == logfile` ) { ... } $\C{// handle logfile error}$
    14241427   catch ( IOError err ) { ... }                        $\C{// handler error from other files}$
    14251428\end{cfa}
     
    14291432The resumption raise can specify an alternate stack on which to raise an exception, called a \newterm{nonlocal raise}:
    14301433\begin{cfa}
    1431 resume [ $\emph{exception-type}$ ] [ _At $\emph{alternate-stack}$ ] ;
    1432 \end{cfa}
    1433 The @_At@ clause raises the specified exception or the currently propagating exception (reresume) at another coroutine or task~\cite{Delisle18}.
     1434resume( $\emph{exception-type}$, $\emph{alternate-stack}$ )
     1435resume( $\emph{alternate-stack}$ )
     1436\end{cfa}
     1437These overloads of @resume@ raise the specified exception or the currently propagating exception (reresume) at another coroutine or task~\cite{Delisle18}.
    14341438Nonlocal raise is restricted to resumption to provide the exception handler the greatest flexibility because processing the exception does not unwind its stack, allowing it to continue after the handle returns.
    14351439
     
    16221626\lstMakeShortInline@%
    16231627\end{cquote}
    1624 Specifiers must appear at the start of a \CFA routine declaration\footnote{\label{StorageClassSpecifier}.
     1628Specifiers must appear at the start of a \CFA routine declaration\footnote{\label{StorageClassSpecifier}
    16251629The placement of a storage-class specifier other than at the beginning of the declaration specifiers in a declaration is an obsolescent feature.~\cite[\S~6.11.5(1)]{C11}}.
    16261630
     
    16771681* [ * int, int ] ( int ) jp;                            $\C{// pointer to routine returning pointer to int and int, with int parameter}$
    16781682\end{cfa}
    1679 Note, \emph{a routine name cannot be specified}:
     1683Note, a routine name cannot be specified:
    16801684\begin{cfa}
    16811685* [ int x ] f () fp;                                            $\C{// routine name "f" is disallowed}$
     
    19941998The addition of @one_t@ allows generic algorithms to handle the unit value uniformly for types where that is meaningful.
    19951999\TODO{Make this sentence true} In particular, polymorphic functions in the \CFA prelude define @++x@ and @x++@ in terms of @x += 1@, allowing users to idiomatically define all forms of increment for a type @T@ by defining the single function @T & ?+=(T &, one_t)@; analogous overloads for the decrement operators are present as well.
     2000
    19962001
    19972002\subsection{Integral Suffixes}
     
    26142619\section{Acknowledgments}
    26152620
    2616 The authors would like to recognize the design assistance of Glen Ditchfield, Richard Bilson, and Thierry Delisle on the features described in this paper, and thank Magnus Madsen and the three anonymous reviewers for valuable feedback.
     2621The authors would like to recognize the design assistance of Glen Ditchfield, Richard Bilson, and Thierry Delisle on the features described in this paper, and thank Magnus Madsen for feedback in the writing.
    26172622%This work is supported in part by a corporate partnership with \grantsponsor{Huawei}{Huawei Ltd.}{http://www.huawei.com}, and Aaron Moss and Peter Buhr are funded by the \grantsponsor{Natural Sciences and Engineering Research Council} of Canada.
    26182623% the first author's \grantsponsor{NSERC-PGS}{NSERC PGS D}{http://www.nserc-crsng.gc.ca/Students-Etudiants/PG-CS/BellandPostgrad-BelletSuperieures_eng.asp} scholarship.
Note: See TracChangeset for help on using the changeset viewer.