Discussions of the Parallel Programming book
 help / color / mirror / Atom feed
From: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
To: Akira Yokosawa <akiyks@gmail.com>
Cc: perfbook@vger.kernel.org
Subject: Re: [NOT YET PULL] Trial of labeling lines in code snippets
Date: Mon, 23 Jul 2018 14:03:17 -0700	[thread overview]
Message-ID: <20180723210317.GA12945@linux.vnet.ibm.com> (raw)
In-Reply-To: <3a77a91b-6747-0d23-df5e-382c073f48aa@gmail.com>

On Tue, Jul 24, 2018 at 12:12:17AM +0900, Akira Yokosawa wrote:
> On 2018/07/24 00:09:37 +0900, Akira Yokosawa wrote:
> > On 2018/07/22 15:49:06 -0700, Paul E. McKenney wrote:
> >> On Mon, Jul 23, 2018 at 12:43:05AM +0900, Akira Yokosawa wrote:
> >>> On 2018/07/21 09:51:03 -0700, Paul E. McKenney wrote:
> >>>> On Sat, Jul 21, 2018 at 09:19:53AM +0900, Akira Yokosawa wrote:
> >>>>> Hi Paul,
> >>>>>
> >>>>> So, an experimental branch to label particular lines in code
> >>>>> snippets is ready for review.
> >>>>> The branch is based on current master of yours.
> >>>>>
> >>>>> I've converted 4 code snippets in Section 4.2. and updated
> >>>>> corresponding code samples (sans forkjoin.c because it is
> >>>>> quite simplified in Listing 4.1).
> >>>>>
> >>>>> Does this approach look reasonable to you?
> >>>>
> >>>> This does look promising, thank you!  Please give me some time to think
> >>>> this over a bit.  My normal approach would end up with very long labels
> >>>> in the code, which might be OK.  The argument against is that tying the
> >>>> listing caption to the actual code might not be a great thing.
> >>>
> >>> One idea is to embed meta labels in code samples.
> >>> When converting them to a proper Verbatim sources, short labels such
> >>> as " //\lnlbl{foo}" can be converted to long ones such as
> >>> "%lnlbl[ln:<chapter>:<basename of snippet file>:foo]" in the script
> >>> to remove " //".
> >>>
> >>> To do this, we need to embed extra meta data as comments in sample
> >>> code.
> >>>
> >>> For example, the source of waitall() function (in api-pthread.h) can be
> >>> written as the following (in the form of \lnlbl{}):
> >>>
> >>> ----
> >>> /*
> >>>  * Wait on all child processes.
> >>>  */
> >>> static __inline__ void waitall(void)
> >>> {
> >>> // \begin{snippet}[chapter=toolsoftrade,name=waitall,commandchars=[\%\[\]]
> >>> 	int pid;
> >>> 	int status;
> >>>
> >>> 	for (;;) {				//\lnlbl{loopa}
> >>> 		pid = wait(&status);		//\lnlb{wait}
> >>> 		if (pid == -1) {
> >>> 			if (errno == ECHILD)	//\lnlb{ECHILD}
> >>> 				break;		//\lnlbl{break}
> >>> 			perror("wait");		//\lnlbl{perror}
> >>> 			exit(EXIT_FAILURE);	//\lnlbl{exit}
> >>> 		}
> >>> 		poll(NULL, 0, 1);
> >>> 	}					//\lnlbl{loopb}
> >>> }
> >>> // \end{snippet}
> >>> ...
> >>> ----
> >>>
> >>> , and it can be extracted and converted into CodeSamples/api-pthread/waitall.tex
> >>> in the following way (including substitution of escape charactors):
> >>>
> >>> \begin{Verbatim}[commandchars=[\%\[\]]
> >>> 	int pid;
> >>> 	int status;
> >>>
> >>> 	for (;;) {%lnlbl[ln:toolsoftrade:waitall:loopa]
> >>> 		pid = wait(&status);%lnlbl[ln:toolsoftrade:waitall:wait]
> >>> 		if (pid == -1) {
> >>> 			if (errno == ECHILD)%lnlbl[ln:toolsoftrade:waitall:ECHILD]
> >>> 				break;%lnlbl[ln:toolsoftrade:break]
> >>> 			perror("wait");%lnlbl[ln:toolsoftrade:perror]
> >>> 			exit(EXIT_FAILURE);%lnlbl[ln:toolsoftrade:exit]
> >>> 		}
> >>> 		poll(NULL, 0, 1);
> >>> 	}%lnlbl[ln:toolsoftrade:loopb]
> >>> }
> >>> \end{Verbatim}
> >>>
> >>> This file can be read in toolsoftrade.tex in the following way:
> >>>
> >>> ---
> >>> \begin{listing}[tbp]
> >>> \input{CodeSamples/api-pthread/waitall}
> >>> \caption{Using the \tco{wait()} Primitive}
> >>> \label{lst:toolsoftrade:Using the wait() Primitive}
> >>> \end{listing}
> >>> ---
> >>>
> >>> The conversion script should not be so hard to implement.
> >>> Update of build scripts should also be possible to automate these
> >>> conversions.
> >>>
> >>> If you'd like to use the caption of the listing in the final labels,
> >>> the caption should also be given in the meta \begin{snippet} command.
> >>> But for lines in code snippets, using file names as labels sounds
> >>> reasonable to me.
> >>
> >> I believe that your scheme is pretty close.  My thought is directory,
> >> file, function, label.  You have all but file already.  That allows
> >> captions to change without changing the line label, which seems like a
> >> good thing.
> > 
> > In the end, "chapter=foo,name=bar,func=baz" can be expressed as
> > "labelprefix=foo:bar:baz in the option to meta \begin{snippet} command.
> 
> I meant:
> 
>   "labelprefix=foo:bar:baz"

Sounds very good, thank you!!!

							Thanx, Paul

> Akira
> 
> > So you can put any string you like there.
> > 
> > I'll do v2 of the trial branch along this scheme, hopefully
> > including build script/Makefile updates.  Maybe in a week or so.
> > 
> >        Thanks, Akira
> >  
> >>
> >> Seem reasonable?
> >>
> >> 							Thanx, Paul
> >>
> >>> Thoughts?
> >>>
> >>>         Thanks, Akira
> >>>
> >>>>
> >>>> Again, looks promising, thank you!
> >>>>
> >>>> 							Thanx, Paul
> >>>>
> >>>>>         Thanks, Akira
> >>>>>
> >>>>> ---
> >>>>> The following changes since commit e3191997557e0d33b862e267fb4d5971e879ca07:
> >>>>>
> >>>>>   utilities: Provide scripts instead of broken symlinks (2018-07-18 11:40:57 -0700)
> >>>>>
> >>>>> are available in the git repository at:
> >>>>>
> >>>>>   https://github.com/akiyks/perfbook trial-fancyvrb
> >>>>>
> >>>>> for you to fetch changes up to 2154a175e469e6238c89d4c494d204a9ddbaa20a:
> >>>>>
> >>>>>   [EXP] Update hyphen2endash (2018-07-21 09:17:34 +0900)
> >>>>>
> >>>>> ----------------------------------------------------------------
> >>>>> Akira Yokosawa (3):
> >>>>>       [EXP] toolsoftrade: Add labels in code samples as comments
> >>>>>       [EXP] toolsoftrade: Reference line in code snippets by label
> >>>>>       [EXP] Update hyphen2endash
> >>>>>
> >>>>>  CodeSamples/api-pthreads/api-pthreads.h |  14 +-
> >>>>>  CodeSamples/toolsoftrade/forkjoinvar.c  |  10 +-
> >>>>>  CodeSamples/toolsoftrade/pcreate.c      |   5 +-
> >>>>>  perfbook.tex                            |   6 +
> >>>>>  toolsoftrade/toolsoftrade.tex           | 221 +++++++++++++++++---------------
> >>>>>  utilities/hyphen2endash.sh              |   3 +
> >>>>>  6 files changed, 141 insertions(+), 118 deletions(-)
> >>>>>
> >>>>
> >>>
> >>
> > 
> 


  reply	other threads:[~2018-07-23 22:06 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-07-21  0:19 [NOT YET PULL] Trial of labeling lines in code snippets Akira Yokosawa
2018-07-21 16:51 ` Paul E. McKenney
2018-07-22 15:43   ` Akira Yokosawa
2018-07-22 22:49     ` Paul E. McKenney
2018-07-23 15:09       ` Akira Yokosawa
2018-07-23 15:12         ` Akira Yokosawa
2018-07-23 21:03           ` Paul E. McKenney [this message]
2018-07-30 16:04 ` [NOT YET PULL v2] " Akira Yokosawa
2018-07-31 15:10   ` Paul E. McKenney
2018-08-01 15:24     ` Akira Yokosawa
2018-08-01 15:59       ` Paul E. McKenney
2018-08-01 22:14         ` Akira Yokosawa
2018-08-02  0:22           ` Paul E. McKenney
2018-08-02 22:34 ` [GIT PULL v3] " Akira Yokosawa
2018-08-03 14:35   ` Paul E. McKenney
2018-08-03 15:02     ` Akira Yokosawa
2018-08-03 15:49     ` Akira Yokosawa
2018-08-03 16:45       ` Paul E. McKenney
2018-08-03 23:12         ` Akira Yokosawa
2018-08-03 23:43           ` Paul E. McKenney
2018-08-04  0:00             ` Akira Yokosawa
2018-08-04 11:57 ` [GIT PULL v4] " Akira Yokosawa
2018-08-04 15:15   ` Akira Yokosawa
2018-08-05  0:06 ` [GIT PULL v5] " Akira Yokosawa
2018-08-05 16:35   ` Paul E. McKenney
2018-08-05 16:54     ` Paul E. McKenney
2018-08-05 21:58       ` Akira Yokosawa
2018-08-05 22:47         ` Paul E. McKenney
2018-08-05 23:26           ` Akira Yokosawa
2018-08-05 23:40             ` Paul E. McKenney

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20180723210317.GA12945@linux.vnet.ibm.com \
    --to=paulmck@linux.vnet.ibm.com \
    --cc=akiyks@gmail.com \
    --cc=perfbook@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox