Changeset f94ca7e for doc/user


Ignore:
Timestamp:
Jun 2, 2017, 5:42:10 PM (8 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:
0db6fc0
Parents:
2164637 (diff), 2c6c893 (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/user/user.tex

    r2164637 rf94ca7e  
    1111%% Created On       : Wed Apr  6 14:53:29 2016
    1212%% Last Modified By : Peter A. Buhr
    13 %% Last Modified On : Tue May 30 11:45:46 2017
    14 %% Update Count     : 2098
     13%% Last Modified On : Fri Jun  2 10:07:51 2017
     14%% Update Count     : 2128
    1515%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    1616
     
    185185While the \CFA I/O looks similar to the \Index*[C++]{\CC{}} output style, there are important differences, such as automatic spacing between variables as in \Index*{Python} (see~\VRef{s:IOLibrary}).
    186186
    187 This document is a user manual for the \CFA programming language, targeted at \CFA programmers.
     187This document is a programmer reference-manual for the \CFA programming language.
     188The manual covers the core features of the language and runtime-system, with simple examples illustrating syntax and semantics of each feature.
     189The manual does not teach programming, i.e., how to combine the new constructs to build complex programs.
     190A reader should already have an intermediate knowledge of control flow, data structures, and concurrency issues to understand the ideas presented as well as some experience programming in C/\CC.
    188191Implementers may refer to the \CFA Programming Language Specification for details about the language syntax and semantics.
    189 In its current state, this document covers the intended core features of the language.
    190192Changes to the syntax and additional features are expected to be included in later revisions.
    191193
     
    52425244\begin{description}
    52435245\item[fill]
    5244 after allocation the storage is or is not filled with a specified character.
     5246after allocation the storage is filled with a specified character.
    52455247\item[resize]
    52465248an existing allocation is decreased or increased in size.
    52475249In either case, new storage may or may not be allocated and, if there is a new allocation, as much data from the existing allocation is copied.
    5248 For an increase in storage size, new storage after the copied data may or may not be filled.
     5250For an increase in storage size, new storage after the copied data may be filled.
    52495251\item[alignment]
    52505252an allocation starts on a specified memory boundary, e.g., an address multiple of 64 or 128 for cache-line purposes.
    52515253\item[array]
    52525254the allocation size is scaled to the specified number of array elements.
    5253 An array may or not be filled, resized, or aligned.
     5255An array may be filled, resized, or aligned.
    52545256\end{description}
    5255 
    5256 The following table show the allocation routines supporting different combinations of storage-management capabilities:
     5257The table shows allocation routines supporting different combinations of storage-management capabilities:
    52575258\begin{center}
    5258 \begin{tabular}{@{}r|l|l|l|l@{}}
    5259                                         & fill                          & resize        & alignment     & array \\
     5259\begin{tabular}{@{}lr|l|l|l|l@{}}
     5260                &                                       & \multicolumn{1}{c|}{fill}     & resize        & alignment     & array \\
    52605261\hline
    5261 ©malloc©                        & no/yes                        & no/yes        & no            & no    \\
    5262 ©amalloc©                       & no/copy data/yes      & no/yes        & no            & yes   \\
    5263 ©calloc©                        & yes (0 only)          & no            & no            & yes   \\
    5264 ©realloc©                       & no/copy data          & yes           & no            & no    \\
    5265 ©memalign©                      & no/yes                        & no            & yes           & no    \\
    5266 ©amemalign©                     & no/yes                        & no            & yes           & yes   \\
    5267 ©align_alloc©           & no                            & no            & yes           & no    \\
    5268 ©posix_memalign©        & no                            & no            & yes           & no    \\
     5262C               & ©malloc©                      & no                    & no            & no            & no    \\
     5263                & ©calloc©                      & yes (0 only)  & no            & no            & yes   \\
     5264                & ©realloc©                     & no/copy               & yes           & no            & no    \\
     5265                & ©memalign©            & no                    & no            & yes           & no    \\
     5266                & ©posix_memalign©      & no                    & no            & yes           & no    \\
     5267C11             & ©aligned_alloc©       & no                    & no            & yes           & no    \\
     5268\CFA    & ©alloc©                       & no/copy/yes   & no/yes        & no            & yes   \\
     5269                & ©align_alloc©         & no/yes                & no            & yes           & yes   \\
    52695270\end{tabular}
    52705271\end{center}
    5271 % When ©amalloc© resizes and fills, the space after the copied data from the source is set to the fill character.
    52725272It is impossible to resize with alignment because the underlying ©realloc© allocates storage if more space is needed, and it does not honour alignment from the original allocation.
    52735273
    52745274\leavevmode
    52755275\begin{cfa}[aboveskip=0pt,belowskip=0pt]
    5276 // allocation, non-array types
    5277 forall( dtype T | sized(T) ) T * malloc( void );§\indexc{malloc}§
    5278 forall( dtype T | sized(T) ) T * malloc( char fill );
    5279 
    5280 // allocation, array types
    5281 forall( dtype T | sized(T) ) T * calloc( size_t dim );§\indexc{cmalloc}§
    5282 forall( dtype T | sized(T) ) T * amalloc( size_t dim );§\indexc{amalloc}§  // alternate name for calloc
    5283 forall( dtype T | sized(T) ) T * amalloc( size_t dim, char fill );
    5284 
    5285 // resize, non-array types
    5286 forall( dtype T | sized(T) ) T * realloc( T * ptr, size_t size );§\indexc{realloc}§
    5287 forall( dtype T | sized(T) ) T * realloc( T * ptr, size_t size, char fill );
    5288 forall( dtype T | sized(T) ) T * malloc( T * ptr, size_t size );  // alternate name for realloc
    5289 forall( dtype T | sized(T) ) T * malloc( T * ptr, size_t size, char fill );
    5290 
    5291 // resize, array types
    5292 forall( dtype T | sized(T) ) T * amalloc( T * ptr, size_t dim );
    5293 forall( dtype T | sized(T) ) T * amalloc( T * ptr, size_t dim, char fill );
    5294 
    5295 // alignment, non-array types
    5296 forall( dtype T | sized(T) ) T * memalign( size_t alignment );§\indexc{memalign}§
    5297 forall( dtype T | sized(T) ) T * memalign( size_t alignment, char fill );
    5298 forall( dtype T | sized(T) ) T * aligned_alloc( size_t alignment );§\indexc{aligned_alloc}§
    5299 forall( dtype T | sized(T) ) int posix_memalign( T ** ptr, size_t alignment );§\indexc{posix_memalign}§
    5300 
    5301 // alignment, array types
    5302 forall( dtype T | sized(T) ) T * amemalign( size_t alignment, size_t dim );§\indexc{amemalign}§
    5303 forall( dtype T | sized(T) ) T * amemalign( size_t alignment, size_t dim, char fill );
    5304 
    5305 // data, non-array types
     5276// C unsafe allocation
     5277extern "C" {
     5278void * mallac( size_t size );§\indexc{memset}§
     5279void * calloc( size_t dim, size_t size );§\indexc{calloc}§
     5280void * realloc( void * ptr, size_t size );§\indexc{realloc}§
     5281void * memalign( size_t align, size_t size );§\indexc{memalign}§
     5282int posix_memalign( void ** ptr, size_t align, size_t size );§\indexc{posix_memalign}§
     5283}
     5284
     5285// §\CFA§ safe equivalents, i.e., implicit size specification
     5286forall( dtype T | sized(T) ) T * malloc( void );
     5287forall( dtype T | sized(T) ) T * calloc( size_t dim );
     5288forall( dtype T | sized(T) ) T * realloc( T * ptr, size_t size );
     5289forall( dtype T | sized(T) ) T * memalign( size_t align );
     5290forall( dtype T | sized(T) ) T * aligned_alloc( size_t align );
     5291forall( dtype T | sized(T) ) int posix_memalign( T ** ptr, size_t align );
     5292
     5293// §\CFA§ safe general allocation, fill, resize, array
     5294forall( dtype T | sized(T) ) T * alloc( void );§\indexc{alloc}§
     5295forall( dtype T | sized(T) ) T * alloc( char fill );
     5296forall( dtype T | sized(T) ) T * alloc( size_t dim );
     5297forall( dtype T | sized(T) ) T * alloc( size_t dim, char fill );
     5298forall( dtype T | sized(T) ) T * alloc( T ptr[], size_t dim );
     5299forall( dtype T | sized(T) ) T * alloc( T ptr[], size_t dim, char fill );
     5300
     5301// §\CFA§ safe general allocation, align, fill, array
     5302forall( dtype T | sized(T) ) T * align_alloc( size_t align );
     5303forall( dtype T | sized(T) ) T * align_alloc( size_t align, char fill );
     5304forall( dtype T | sized(T) ) T * align_alloc( size_t align, size_t dim );
     5305forall( dtype T | sized(T) ) T * align_alloc( size_t align, size_t dim, char fill );
     5306
     5307// C unsafe initialization/copy
     5308extern "C" {
     5309void * memset( void * dest, int c, size_t size );
     5310void * memcpy( void * dest, const void * src, size_t size );
     5311}
     5312
     5313// §\CFA§ safe initialization/copy
    53065314forall( dtype T | sized(T) ) T * memset( T * dest, char c );§\indexc{memset}§
    53075315forall( dtype T | sized(T) ) T * memcpy( T * dest, const T * src );§\indexc{memcpy}§
    53085316
    5309 // data, array types
    5310 forall( dtype T | sized(T) ) T * amemset( T * dest, size_t dim, char c );§\indexc{amemset}§
    5311 forall( dtype T | sized(T) ) T * amemcpy( T * dest, const T * src, size_t dim );§\indexc{amemcpy}§
    5312 
    5313 // allocation/deallocation and constructor/destructor
    5314 forall( dtype T, ttype Params | sized(T) | { void ?{}(T *, Params); } ) T * new( Params p );§\indexc{new}§
     5317// §\CFA§ safe initialization/copy array
     5318forall( dtype T | sized(T) ) T * memset( T dest[], size_t dim, char c );
     5319forall( dtype T | sized(T) ) T * memcpy( T dest[], const T src[], size_t dim );
     5320
     5321// §\CFA§ allocation/deallocation and constructor/destructor
     5322forall( dtype T | sized(T), ttype Params | { void ?{}( T *, Params ); } ) T * new( Params p );§\indexc{new}§
    53155323forall( dtype T | { void ^?{}( T * ); } ) void delete( T * ptr );§\indexc{delete}§
    5316 forall( dtype T, ttype Params | { void ^?{}( T * ); void delete(Params); } ) void delete( T * ptr, Params rest );
     5324forall( dtype T, ttype Params | { void ^?{}( T * ); void delete( Params ); } )
     5325  void delete( T * ptr, Params rest );
     5326
     5327// §\CFA§ allocation/deallocation and constructor/destructor, array
     5328forall( dtype T | sized(T), ttype Params | { void ?{}( T *, Params ); } ) T * anew( size_t dim, Params p );§\indexc{anew}§
     5329forall( dtype T | sized(T) | { void ^?{}( T * ); } ) void adelete( size_t dim, T arr[] );§\indexc{adelete}§
     5330forall( dtype T | sized(T) | { void ^?{}( T * ); }, ttype Params | { void adelete( Params ); } )
     5331  void adelete( size_t dim, T arr[], Params rest );
    53175332\end{cfa}
    53185333
Note: See TracChangeset for help on using the changeset viewer.