Changeset 08065aa4


Ignore:
Timestamp:
Jun 25, 2019, 8:55:45 AM (2 years ago)
Author:
Peter A. Buhr <pabuhr@…>
Branches:
arm-eh, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr
Children:
62dbb00, b0ab7853
Parents:
2856438
Message:

update Stream I/O section

File:
1 edited

Legend:

Unmodified
Added
Removed
  • doc/user/user.tex

    r2856438 r08065aa4  
    1111%% Created On       : Wed Apr  6 14:53:29 2016
    1212%% Last Modified By : Peter A. Buhr
    13 %% Last Modified On : Sat Jun 15 16:29:45 2019
    14 %% Update Count     : 3847
     13%% Last Modified On : Tue Jun 25 08:51:33 2019
     14%% Update Count     : 3871
    1515%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    1616
     
    33463346
    33473347
    3348 \section{I/O Stream Library}
    3349 \label{s:IOStreamLibrary}
     3348\section{Stream I/O Library}
     3349\label{s:StreamIOLibrary}
    33503350\index{input/output stream library}
    33513351\index{stream library}
    33523352
    3353 The goal of \CFA input/output (I/O) is to simplify the common cases\index{I/O!common case}, while fully supporting polymorphism and user defined types in a consistent way.
    3354 \CFA I/O combines ideas from C ©printf©, \CC, and Python.
    3355 I/O can be unformatted or formatted.
    3356 Unformatted means \CFA selects the output or input format for values that match with the type of a variable.
    3357 Formatted means additional information is specified to augment how an output or input of value is interpreted.
    3358 \CFA formatting is a cross between C ©printf© and \CC ©cout© manipulators.
     3353The goal of \CFA stream input/output (I/O) is to simplify the common cases\index{I/O!common case}, while fully supporting polymorphism and user defined types in a consistent way.
     3354Stream I/O can be implicitly or explicitly formatted.
     3355Implicit formatting means \CFA selects the output or input format for values that match with the type of a variable.
     3356Explicit formatting means additional information is specified to augment how an output or input of value is interpreted.
     3357\CFA formatting is a cross between C ©printf© and \CC ©cout© manipulators, and Python implicit spacing and newline.
     3358Specifically:
    33593359\begin{itemize}
    33603360\item
    3361 ©printf© format codes are dense, making them difficult to read and remember.
     3361©printf©/Python format codes are dense, making them difficult to read and remember.
    33623362\CFA/\CC format manipulators are named, making them easier to read and remember.
    33633363\item
    3364 ©printf© separates format codes from associated variables, making it difficult to match codes with variables.
     3364©printf©/Python separates format codes from associated variables, making it difficult to match codes with variables.
    33653365\CFA/\CC co-locate codes with associated variables, where \CFA has the tighter binding.
    33663366\item
    3367 Format manipulators in \CC have global rather than local effect, except ©setw©.
     3367Format manipulators in \CFA have local effect, whereas \CC have global effect, except ©setw©.
    33683368Hence, it is common programming practice to toggle manipulators on and then back to the default to prevent downstream side-effects.
    33693369Without this programming style, errors occur when moving prints, as manipulator effects incorrectly flow into the new location.
    33703370(To guarantee no side-effects, manipulator values must be saved and restored across function calls.)
     3371\item
     3372\CFA has more sophisticated implicit spacing between values than Python, plus implicit newline at the end of a print.
    33713373\end{itemize}
    33723374The \CFA header file for the I/O library is \Indexc{fstream.hfa}.
    33733375
    3374 For unformatted output, the common case is printing a sequence of variables separated by whitespace.
     3376For implicit formatted output, the common case is printing a series of variables separated by whitespace.
    33753377\begin{cquote}
    3376 \begin{tabular}{@{}l@{\hspace{3em}}l@{}}
    3377 \multicolumn{1}{c@{\hspace{3em}}}{\textbf{\CFA}}        & \multicolumn{1}{c}{\textbf{\CC}}      \\
     3378\begin{tabular}{@{}l@{\hspace{2em}}l@{\hspace{2em}}l@{}}
     3379\multicolumn{1}{c@{\hspace{2em}}}{\textbf{\CFA}}        & \multicolumn{1}{c@{\hspace{2em}}}{\textbf{\CC}}       & \multicolumn{1}{c}{\textbf{Python}}   \\
    33783380\begin{cfa}
    33793381int x = 1, y = 2, z = 3;
     
    33853387cout << x ®<< " "® << y ®<< " "® << z << endl;
    33863388\end{cfa}
     3389&
     3390\begin{cfa}
     3391x = 1;  y = 2;  z = 3
     3392print( x, y, z )
     3393\end{cfa}
    33873394\\
     3395\begin{cfa}[showspaces=true,aboveskip=0pt,belowskip=0pt]
     33961® ®2® ®3
     3397\end{cfa}
     3398&
    33883399\begin{cfa}[showspaces=true,aboveskip=0pt,belowskip=0pt]
    338934001® ®2® ®3
     
    34293440There is a weak similarity between the \CFA logical-or operator and the \Index{Shell pipe-operator} for moving data, where data flows in the correct direction for input but the opposite direction for output.
    34303441
    3431 For unformatter input, the common case is reading a sequence of values separated by whitespace, where the type of an input constant must match with the type of the input variable.
     3442For implicit formatted input, the common case is reading a sequence of values separated by whitespace, where the type of an input constant must match with the type of the input variable.
    34323443\begin{cquote}
    34333444\begin{lrbox}{\LstBox}
     
    34363447\end{cfa}
    34373448\end{lrbox}
    3438 \begin{tabular}{@{}l@{\hspace{3em}}l@{}}
     3449\begin{tabular}{@{}l@{\hspace{3em}}l@{\hspace{3em}}l@{}}
    34393450\multicolumn{1}{@{}l@{}}{\usebox\LstBox} \\
    3440 \multicolumn{1}{c@{\hspace{3em}}}{\textbf{\CFA}}        & \multicolumn{1}{c}{\textbf{\CC}}      \\
     3451\multicolumn{1}{c@{\hspace{2em}}}{\textbf{\CFA}}        & \multicolumn{1}{c@{\hspace{2em}}}{\textbf{\CC}}       & \multicolumn{1}{c}{\textbf{Python}}   \\
    34413452\begin{cfa}[aboveskip=0pt,belowskip=0pt]
    34423453sin | x | y | z;
     
    34463457cin >> x >> y >> z;
    34473458\end{cfa}
     3459&
     3460\begin{cfa}[aboveskip=0pt,belowskip=0pt]
     3461x = int(input());  y = float(input());  z = input();
     3462\end{cfa}
    34483463\\
    34493464\begin{cfa}[showspaces=true,aboveskip=0pt,belowskip=0pt]
    34503465®1® ®2.5® ®A®
     3466
     3467
    34513468\end{cfa}
    34523469&
    34533470\begin{cfa}[showspaces=true,aboveskip=0pt,belowskip=0pt]
    34543471®1® ®2.5® ®A®
     3472
     3473
     3474\end{cfa}
     3475&
     3476\begin{cfa}[showspaces=true,aboveskip=0pt,belowskip=0pt]
     3477®1®
     3478®2.5®
     3479®A®
    34553480\end{cfa}
    34563481\end{tabular}
     
    370537300b0 0b11011 0b11011 0b11011 0b11011
    37063731sout | bin( -27HH ) | bin( -27H ) | bin( -27 ) | bin( -27L );
    3707 0b11100101 0b1111111111100101 0b11111111111111111111111111100101 0b(58 1s)100101
     37320b11100101 0b1111111111100101 0b11111111111111111111111111100101 0b®(58 1s)®100101
    37083733\end{cfa}
    37093734
     
    37823807®  ®4.000000 ® ®4.000000 4.000000
    37833808®  ®ab ® ®ab ab
    3784     ab    ab ab
    37853809\end{cfa}
    37863810If the value is larger, it is printed without truncation, ignoring the ©minimum©.
Note: See TracChangeset for help on using the changeset viewer.