Changeset 4271a1e for doc/papers


Ignore:
Timestamp:
Mar 8, 2018, 4:43:09 PM (4 years ago)
Author:
Aaron Moss <a3moss@…>
Branches:
aaron-thesis, arm-eh, cleanup-dtors, deferred_resn, demangler, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr, new-env, no_list, persistent-indexer, resolv-new, with_gc
Children:
deb52a0
Parents:
037c072
Message:

Stub extra related work section

File:
1 edited

Legend:

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

    r037c072 r4271a1e  
    26542654\subsection{Polymorphism}
    26552655
    2656 \CC is the most similar language to \CFA;
    2657 both are extensions to C with source and runtime backwards compatibility.
    2658 The fundamental difference is the engineering approach to maintain C compatibility and programmer expectation.
    2659 While \CC provides good compatibility with C, it has a steep learning curve for many of its extensions.
    2660 For example, polymorphism is provided via three disjoint mechanisms: overloading, inheritance, and templates.
     2656\CC provides three disjoint polymorphic extensions to C: overloading, inheritance, and templates.
    26612657The overloading is restricted because resolution does not use the return type, inheritance requires learning object-oriented programming and coping with a restricted nominal-inheritance hierarchy, templates cannot be separately compiled resulting in compilation/code bloat and poor error messages, and determining how these mechanisms interact and which to use is confusing.
    26622658In contrast, \CFA has a single facility for polymorphic code supporting type-safe separate-compilation of polymorphic functions and generic (opaque) types, which uniformly leverage the C procedural paradigm.
     
    27122708Tuples are a fundamental abstraction in most functional programming languages, such as Standard ML~\cite{sml} and~\cite{Scala}, which decompose tuples using pattern matching.
    27132709
    2714 
    2715 \subsection{Control Structures / Declarations / Literals}
    2716 
    2717 Java has default fall through like C/\CC.
    2718 Pascal/Ada/Go/Rust do not have default fall through.
    2719 \Csharp does not have fall through but still requires a break.
    2720 Python uses dictionary mapping. \\
    2721 \CFA choose is like Rust match.
    2722 
    2723 Java has labelled break/continue. \\
    2724 Languages with and without exception handling.
    2725 
    2726 Alternative C declarations. \\
    2727 Different references \\
    2728 Constructors/destructors
    2729 
    2730 0/1 Literals \\
    2731 user defined: D, Objective-C
     2710\subsection{C Extensions}
     2711
     2712\CC is the best known C-based language, and similar to \CFA in that both are extensions to C with source and runtime backwards compatibility.
     2713\CC and \CFA have been extensively compared in this paper, but the key difference between their design philosophies is that \CFA aims to be easy for C programmers to understand, by maintaining a procedural paradigm and avoiding complex interactions between extension features.
     2714\CC, on the other hand, has multiple overlapping features (such as the three forms of polymorphism), many of which have complex interactions with its object-oriented design.
     2715As such, though \CC provides good runtime performance and compatibility with C, it has a steep learning curve for even experienced C programmers.
     2716
     2717There are many other C extension languages with less usage and dramatic changes than \CC.
     2718Objective-C and Cyclone are two other extensions to C with different design goals than \CFA, as discussed above.
     2719Many other languages extend C with more focused single features.
     2720CUDA\cite{CUDA}, ispc\cite{Pharr12}, and Sierra\cite{Leissa14} add data-parallel primitives to C or \CC; such features have not yet been added to \CFA, but are not precluded by the design.
     2721Other C extensions attempt to provide a more memory-safe C;\TODO{find some} type-checked polymorphism in \CFA covers many of C's memory-safety holes, but more aggressive approaches such as annotating all pointer types with their nullability are contradictory to \CFA's backwards compatibility goals.
     2722
     2723% \subsection{Control Structures / Declarations / Literals}
     2724
     2725% Java has default fall through like C/\CC.
     2726% Pascal/Ada/Go/Rust do not have default fall through.
     2727% \Csharp does not have fall through but still requires a break.
     2728% Python uses dictionary mapping. \\
     2729% \CFA choose is like Rust match.
     2730
     2731% Java has labelled break/continue. \\
     2732% Languages with and without exception handling.
     2733
     2734% Alternative C declarations. \\
     2735% Different references \\
     2736% Constructors/destructors
     2737
     2738% 0/1 Literals \\
     2739% user defined: D, Objective-C
    27322740
    27332741\section{Conclusion and Future Work}
Note: See TracChangeset for help on using the changeset viewer.