- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
doc/generic_types/generic_types.tex
re6dceef r32bcef7 1 1 % take off review (for line numbers) and anonymous (for anonymization) on submission 2 \documentclass[format=acmlarge,anonymous,review]{acmart}3 %\documentclass[format=acmlarge,review]{acmart}2 % \documentclass[format=acmlarge, anonymous, review]{acmart} 3 \documentclass[format=acmlarge,review]{acmart} 4 4 5 5 \usepackage{xspace,calc,comment} … … 226 226 \end{lstlisting} 227 227 Within the block, the nested version of @<@ performs @>@ and this local version overrides the built-in @<@ so it is passed to @qsort@. 228 Hence, programmers can easily form alocal environments, adding and modifying appropriate functions, to maximize reuse of other existing functions and types.228 Hence, programmers can easily form local environments, adding and modifying appropriate functions, to maximize reuse of other existing functions and types. 229 229 230 230 Finally, \CFA allows variable overloading: … … 758 758 It is also possible to use @ttype@ polymorphism to provide arbitrary argument forwarding functions. For example, it is possible to write @new@ as a library function: 759 759 \begin{lstlisting} 760 struct pair(otype R, otype S);760 struct Pair(otype R, otype S); 761 761 forall(otype R, otype S) 762 void ?{}( pair(R, S) *, R, S); // (1)762 void ?{}(Pair(R, S) *, R, S); // (1) 763 763 764 764 forall(dtype T, ttype Params | sized(T) | { void ?{}(T *, Params); }) … … 767 767 } 768 768 769 pair(int, char) * x = new(42, '!');769 Pair(int, char) * x = new(42, '!'); 770 770 \end{lstlisting} 771 771 The @new@ function provides the combination of type-safe @malloc@ with a constructor call, so that it becomes impossible to forget to construct dynamically allocated objects. This function provides the type-safety of @new@ in \CC, without the need to specify the allocated type again, thanks to return-type inference. 772 772 773 In the call to @new@, @pair(double, char)@ is selected to match @T@, and @Params@ is expanded to match @[double, char]@. The constructor (1) may be specialized to satisfy the assertion for a constructor with an interface compatible with @void ?{}(pair(int, char) *, int, char)@. 773 In the call to @new@, @Pair(double, char)@ is selected to match @T@, and @Params@ is expanded to match @[double, char]@. The constructor (1) may be specialized to satisfy the assertion for a constructor with an interface compatible with @void ?{}(Pair(int, char) *, int, char)@. 774 775 \TODO{Check if we actually can use ttype parameters on generic types (if they set the complete flag, it should work, or nearly so).} 774 776 775 777 \subsection{Implementation}
Note: See TracChangeset
for help on using the changeset viewer.