Changeset 4271a1e for doc

Mar 8, 2018, 4:43:09 PM (6 years ago)
Aaron Moss <a3moss@…>
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

Stub extra related work section

2 edited


  • doc/bibliography/pl.bib

    r037c072 r4271a1e  
    36443644    month       = nov,
    36453645    pages       = {9-16},
     3649  title={ispc: A SPMD compiler for high-performance CPU programming},
     3650  author={Pharr, Matt and Mark, William R},
     3651  booktitle={Innovative Parallel Computing (InPar), 2012},
     3652  pages={1--13},
     3653  year={2012},
     3654  organization={IEEE}
     6064  title={Sierra: a SIMD extension for C++},
     6065  author={Lei{\ss}a, Roland and Haffner, Immanuel and Hack, Sebastian},
     6066  booktitle={Proceedings of the 2014 Workshop on Workshop on programming models for SIMD/Vector processing},
     6067  pages={17--24},
     6068  year={2014},
     6069  organization={ACM}
    60556073    keywords    = {monitors},
  • doc/papers/general/Paper.tex

    r037c072 r4271a1e  
    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.
    2715 \subsection{Control Structures / Declarations / Literals}
    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.
    2723 Java has labelled break/continue. \\
    2724 Languages with and without exception handling.
    2726 Alternative C declarations. \\
    2727 Different references \\
    2728 Constructors/destructors
    2730 0/1 Literals \\
    2731 user defined: D, Objective-C
     2710\subsection{C Extensions}
     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.
     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.
     2723% \subsection{Control Structures / Declarations / Literals}
     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.
     2731% Java has labelled break/continue. \\
     2732% Languages with and without exception handling.
     2734% Alternative C declarations. \\
     2735% Different references \\
     2736% Constructors/destructors
     2738% 0/1 Literals \\
     2739% user defined: D, Objective-C
    27332741\section{Conclusion and Future Work}
Note: See TracChangeset for help on using the changeset viewer.