- Timestamp:
- Jun 2, 2017, 5:42:10 PM (8 years ago)
- 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. - File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
doc/user/user.tex
r2164637 rf94ca7e 11 11 %% Created On : Wed Apr 6 14:53:29 2016 12 12 %% Last Modified By : Peter A. Buhr 13 %% Last Modified On : Tue May 30 11:45:46201714 %% Update Count : 2 09813 %% Last Modified On : Fri Jun 2 10:07:51 2017 14 %% Update Count : 2128 15 15 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 16 16 … … 185 185 While 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}). 186 186 187 This document is a user manual for the \CFA programming language, targeted at \CFA programmers. 187 This document is a programmer reference-manual for the \CFA programming language. 188 The manual covers the core features of the language and runtime-system, with simple examples illustrating syntax and semantics of each feature. 189 The manual does not teach programming, i.e., how to combine the new constructs to build complex programs. 190 A 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. 188 191 Implementers 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.190 192 Changes to the syntax and additional features are expected to be included in later revisions. 191 193 … … 5242 5244 \begin{description} 5243 5245 \item[fill] 5244 after allocation the storage is or is notfilled with a specified character.5246 after allocation the storage is filled with a specified character. 5245 5247 \item[resize] 5246 5248 an existing allocation is decreased or increased in size. 5247 5249 In 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 notbe filled.5250 For an increase in storage size, new storage after the copied data may be filled. 5249 5251 \item[alignment] 5250 5252 an allocation starts on a specified memory boundary, e.g., an address multiple of 64 or 128 for cache-line purposes. 5251 5253 \item[array] 5252 5254 the allocation size is scaled to the specified number of array elements. 5253 An array may or notbe filled, resized, or aligned.5255 An array may be filled, resized, or aligned. 5254 5256 \end{description} 5255 5256 The following table show the allocation routines supporting different combinations of storage-management capabilities: 5257 The table shows allocation routines supporting different combinations of storage-management capabilities: 5257 5258 \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 \\ 5260 5261 \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\\5262 C & ©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 \\ 5267 C11 & ©aligned_alloc© & no & no & yes & no \\ 5268 \CFA & ©alloc© & no/copy/yes & no/yes & no & yes \\ 5269 & ©align_alloc© & no/yes & no & yes & yes \\ 5269 5270 \end{tabular} 5270 5271 \end{center} 5271 % When ©amalloc© resizes and fills, the space after the copied data from the source is set to the fill character.5272 5272 It 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. 5273 5273 5274 5274 \leavevmode 5275 5275 \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 5277 extern "C" { 5278 void * mallac( size_t size );§\indexc{memset}§ 5279 void * calloc( size_t dim, size_t size );§\indexc{calloc}§ 5280 void * realloc( void * ptr, size_t size );§\indexc{realloc}§ 5281 void * memalign( size_t align, size_t size );§\indexc{memalign}§ 5282 int posix_memalign( void ** ptr, size_t align, size_t size );§\indexc{posix_memalign}§ 5283 } 5284 5285 // §\CFA§ safe equivalents, i.e., implicit size specification 5286 forall( dtype T | sized(T) ) T * malloc( void ); 5287 forall( dtype T | sized(T) ) T * calloc( size_t dim ); 5288 forall( dtype T | sized(T) ) T * realloc( T * ptr, size_t size ); 5289 forall( dtype T | sized(T) ) T * memalign( size_t align ); 5290 forall( dtype T | sized(T) ) T * aligned_alloc( size_t align ); 5291 forall( dtype T | sized(T) ) int posix_memalign( T ** ptr, size_t align ); 5292 5293 // §\CFA§ safe general allocation, fill, resize, array 5294 forall( dtype T | sized(T) ) T * alloc( void );§\indexc{alloc}§ 5295 forall( dtype T | sized(T) ) T * alloc( char fill ); 5296 forall( dtype T | sized(T) ) T * alloc( size_t dim ); 5297 forall( dtype T | sized(T) ) T * alloc( size_t dim, char fill ); 5298 forall( dtype T | sized(T) ) T * alloc( T ptr[], size_t dim ); 5299 forall( dtype T | sized(T) ) T * alloc( T ptr[], size_t dim, char fill ); 5300 5301 // §\CFA§ safe general allocation, align, fill, array 5302 forall( dtype T | sized(T) ) T * align_alloc( size_t align ); 5303 forall( dtype T | sized(T) ) T * align_alloc( size_t align, char fill ); 5304 forall( dtype T | sized(T) ) T * align_alloc( size_t align, size_t dim ); 5305 forall( dtype T | sized(T) ) T * align_alloc( size_t align, size_t dim, char fill ); 5306 5307 // C unsafe initialization/copy 5308 extern "C" { 5309 void * memset( void * dest, int c, size_t size ); 5310 void * memcpy( void * dest, const void * src, size_t size ); 5311 } 5312 5313 // §\CFA§ safe initialization/copy 5306 5314 forall( dtype T | sized(T) ) T * memset( T * dest, char c );§\indexc{memset}§ 5307 5315 forall( dtype T | sized(T) ) T * memcpy( T * dest, const T * src );§\indexc{memcpy}§ 5308 5316 5309 // data, array types5310 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/destructor5314 forall( dtype T , ttype Params | sized(T) | { void ?{}(T *, Params); } ) T * new( Params p );§\indexc{new}§5317 // §\CFA§ safe initialization/copy array 5318 forall( dtype T | sized(T) ) T * memset( T dest[], size_t dim, char c ); 5319 forall( dtype T | sized(T) ) T * memcpy( T dest[], const T src[], size_t dim ); 5320 5321 // §\CFA§ allocation/deallocation and constructor/destructor 5322 forall( dtype T | sized(T), ttype Params | { void ?{}( T *, Params ); } ) T * new( Params p );§\indexc{new}§ 5315 5323 forall( 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 ); 5324 forall( 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 5328 forall( dtype T | sized(T), ttype Params | { void ?{}( T *, Params ); } ) T * anew( size_t dim, Params p );§\indexc{anew}§ 5329 forall( dtype T | sized(T) | { void ^?{}( T * ); } ) void adelete( size_t dim, T arr[] );§\indexc{adelete}§ 5330 forall( dtype T | sized(T) | { void ^?{}( T * ); }, ttype Params | { void adelete( Params ); } ) 5331 void adelete( size_t dim, T arr[], Params rest ); 5317 5332 \end{cfa} 5318 5333
Note:
See TracChangeset
for help on using the changeset viewer.