Ignore:
Timestamp:
Feb 26, 2018, 12:49:55 PM (6 years ago)
Author:
Rob Schluntz <rschlunt@…>
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:
eddb399
Parents:
17fc7a5 (diff), 2c39855 (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:/u/cforall/software/cfa/cfa-cc

File:
1 edited

Legend:

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

    r17fc7a5 r45c43e5  
    4141
    4242\newcommand{\Textbf}[2][red]{{\color{#1}{\textbf{#2}}}}
    43 \newcommand{\TODO}[1]{\textbf{TODO}: {\itshape #1}} % TODO included
    44 %\newcommand{\TODO}[1]{} % TODO elided
     43%\newcommand{\TODO}[1]{\textbf{TODO}: {\itshape #1}} % TODO included
     44\newcommand{\TODO}[1]{} % TODO elided
    4545
    4646% Default underscore is too low and wide. Cannot use lstlisting "literate" as replacing underscore
     
    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,
     
    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@.
    262262Ergonomic 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.
     263Though name-overloading removes a major use-case for @_Generic@ expressions, \CFA does implement @_Generic@ for backwards-compatibility purposes. \TODO{actually implement that}
    263264
    264265% http://fanf.livejournal.com/144696.html
     
    13561357\subsection{Exception Handling}
    13571358
    1358 \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}).
    13591361Both 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.
    1360 \CFA restricts exception types to those defined by aggregate type @_Exception@.
     1362\CFA restricts exception types to those defined by aggregate type @exception@.
    13611363The 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@).
    13621364If @resume@ or @throw@ have no exception type, it is a reresume/rethrow, meaning the currently exception continues propagation.
    1363 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.
    13641366
    13651367\begin{figure}
     
    13691371\multicolumn{1}{c@{\hspace{\parindentlnth}}}{\textbf{Resumption}}       & \multicolumn{1}{c}{\textbf{Recovery}} \\
    13701372\begin{cfa}
    1371 `_Exception R { int fix; };`
     1373`exception R { int fix; };`
    13721374void f() {
    13731375        R r;
    13741376        ... `resume( r );` ...
    13751377        ... r.fix // control does return here after handler
     1378}
    13761379`try` {
    13771380        ... f(); ...
     
    13821385&
    13831386\begin{cfa}
    1384 `_Exception T {};`
     1387`exception T {};`
    13851388void f() {
    13861389
    13871390        ... `throw( T{} );` ...
    13881391        // control does NOT return here after handler
     1392}
    13891393`try` {
    13901394        ... f(); ...
     
    14191423        ... write( `datafile`, ... ); ...               $\C{// may throw IOError}$
    14201424        ... write( `logfile`, ... ); ...
    1421 } catch ( IOError err; `err == datafile` ) { ... } $\C{// handle datafile error}$
    1422    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}$
    14231427   catch ( IOError err ) { ... }                        $\C{// handler error from other files}$
    14241428\end{cfa}
     
    14281432The resumption raise can specify an alternate stack on which to raise an exception, called a \newterm{nonlocal raise}:
    14291433\begin{cfa}
    1430 resume [ $\emph{exception-type}$ ] [ _At $\emph{alternate-stack}$ ] ;
    1431 \end{cfa}
    1432 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}.
    14331438Nonlocal 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.
    14341439
     
    16211626\lstMakeShortInline@%
    16221627\end{cquote}
    1623 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}
    16241629The 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}}.
    16251630
     
    16761681* [ * int, int ] ( int ) jp;                            $\C{// pointer to routine returning pointer to int and int, with int parameter}$
    16771682\end{cfa}
    1678 Note, \emph{a routine name cannot be specified}:
     1683Note, a routine name cannot be specified:
    16791684\begin{cfa}
    16801685* [ int x ] f () fp;                                            $\C{// routine name "f" is disallowed}$
     
    19841989
    19851990In C, @0@ has the special property that it is the only ``false'' value; by the standard, any value which compares equal to @0@ is false, while any value that compares unequal to @0@ is true.
    1986 As such, an expression @x@ in any boolean context (such as the condition of an @if@ or @while@ statement, or the arguments to an @&&@, @||@, or ternary operator) can be rewritten as @x != 0@ without changing its semantics.
     1991As such, an expression @x@ in any boolean context (such as the condition of an @if@ or @while@ statement, or the arguments to @&&@, @||@, or @?:@) can be rewritten as @x != 0@ without changing its semantics.
    19871992The operator overloading feature of \CFA provides a natural means to implement this truth value comparison for arbitrary types, but the C type system is not precise enough to distinguish an equality comparison with @0@ from an equality comparison with an arbitrary integer or pointer.
    1988 To provide this precision, \CFA introduces a new type @zero_t@ as type type of literal @0@ (somewhat analagous to @nullptr_t@ and @nullptr@ in \CCeleven); @zero_t@ can only take the value @0@, but has implicit conversions to the integer and pointer types so that standard C code involving @0@ continues to work properly.
     1993To provide this precision, \CFA introduces a new type @zero_t@ as type type of literal @0@ (somewhat analagous to @nullptr_t@ and @nullptr@ in \CCeleven); @zero_t@ can only take the value @0@, but has implicit conversions to the integer and pointer types so that C code involving @0@ continues to work properly.
    19891994With this addition, the \CFA compiler rewrites @if (x)@ and similar expressions to @if ((x) != 0)@ or the appropriate analogue, and any type @T@ can be made ``truthy'' by defining an operator overload @int ?!=?(T, zero_t)@.
    19901995\CC makes types truthy by adding a conversion to @bool@; prior to the addition of explicit cast operators in \CCeleven this approach had the pitfall of making truthy types transitively convertable to any numeric type; our design for \CFA avoids this issue.
     
    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.