Changeset f6f0d06f
- Timestamp:
- Jun 7, 2018, 11:12:28 AM (6 years ago)
- Branches:
- ADT, arm-eh, ast-experimental, enum, forall-pointer-decay, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr, pthread-emulation, qualifiedEnum
- Children:
- b4e1876
- Parents:
- 214e8da
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
doc/papers/concurrency/Paper.tex
r214e8da rf6f0d06f 217 217 \lstMakeShortInline@% 218 218 219 \newcommand{\commenttd}[1]{{\color{red}{Thierry : #1}}} 220 219 221 \let\OLDthebibliography\thebibliography 220 222 \renewcommand\thebibliography[1]{ … … 308 310 `&`r3 = &y; `&&`r3 = &`&`r4; // change r1, r2: cancel implicit dereferences (&*)**r3, (&(&*)*)*r3, &(&*)r4 309 311 \end{cfa} 310 A reference is a handle to an object, like a pointer, but is automatically dereferenced the specified number of levels.312 A reference is a handle to an object, like a pointer, but is automatically dereferenced by the specified number of levels. 311 313 Referencing (address-of @&@) a reference variable cancels one of the implicit dereferences, until there are no more implicit references, after which normal expression behaviour applies. 312 314 … … 478 480 479 481 The signature feature of \CFA is parametric-polymorphic routines~\cite{} with routines generalized using a @forall@ clause (giving the language its name), which allow separately compiled routines to support generic usage over multiple types. 480 For example, the following sum routine works for any type that supports construction from 0 and addition :482 For example, the following sum routine works for any type that supports construction from 0 and addition \commenttd{constructors have not been introduced yet.}: 481 483 \begin{cfa} 482 484 forall( otype T | { void `?{}`( T *, zero_t ); T `?+?`( T, T ); } ) // constraint type, 0 and + … … 530 532 { 531 533 VLA x, y = { 20, 0x01 }, z = y; $\C{// z points to y}$ 532 // x{}; y{ 20, 0x01 }; z{ z, y }; 534 // x{}; y{ 20, 0x01 }; z{ z, y }; 533 535 ^x{}; $\C{// deallocate x}$ 534 536 x{}; $\C{// reallocate x}$ … … 567 569 The resulting execution system now follows a cooperative threading-model, called \newterm{non-preemptive scheduling}. 568 570 569 Because the scheduler is special, it can either be a stackless or stackfull coroutine. 571 Because the scheduler is special, it can either be a stackless or stackfull coroutine. \commenttd{I dislike this sentence, it seems imply 1-step vs 2-step but also seems to say that some kind of coroutine is required, which is not the case.} 570 572 For stackless, the scheduler performs scheduling on the stack of the current coroutine and switches directly to the next coroutine, so there is one context switch. 571 573 For stackfull, the current coroutine switches to the scheduler, which performs scheduling, and it then switches to the next coroutine, so there are two context switches. 572 A stackfull scheduler is often used for simplicity and security, even through there is a slightly higher runtime-cost. 574 A stackfull scheduler is often used for simplicity and security, even through there is a slightly higher runtime-cost. \commenttd{I'm not a fan of the fact that we don't quantify this but yet imply it is negligeable.} 573 575 574 576 Regardless of the approach used, a subset of concurrency related challenges start to appear. … … 775 777 }; 776 778 void main( Format & fmt ) with( fmt ) { 777 for ( ;; ) { 779 for ( ;; ) { 778 780 for ( g = 0; g < 5; g += 1 ) { // group 779 781 for ( b = 0; b < 4; b += 1 ) { // block
Note: See TracChangeset
for help on using the changeset viewer.