On 09.04.2020 15:24, Erich Steinböck wrote:
Rony, I'd rather avoid introducing new terminology like
"specializes", "constructor" or "destructor" - none of our ooRexx
docs use it.
You may have noted that "specializes" is given in parentheses
"(specializes)" like in:
4.1.4. The Bag Class
A collection where the index is equal to the value. Bag indexes
can be any object (as with the Table class) and each index can
appear more than once.
The class Bag subclasses (specializes) Object and inherits
(specializes) in addition in the following order:
• MapCollection
• SetCollection
The purpose of this addition of the term "(specializes)" is to
communicate to the reader that in this case the Bag class due to
multiple inheritance specializes all three superclasses, the immediate
one (using the ooRexx term "subclass") and the two inherited ones
(using the ooRexx term "inherits"). So the intention is to communicate
to the reader that in effect the "Bag" class specializes conceptually
three superclasses at the same time which he may not be aware of.
However, if this is seen to be not helpful or superfluous or
distracting then it would not serve its intended purpose.
How does this bode to other readers: is this helpful, not helpful,
even distracting?
---
Ad explicitly denoting which Rexx methods are the Rexx constructor
method and Rexx destructor method has two intentions, one to point
newcomers with oo-expertise to them (they may be seeking them and it
would be hard to guess that the methods named init and uninit are
these important life-cycle related methods), and one to just teach
all-newbies that the generic technical oo-term for the init and uninit
methods are constructor and destructor method (fundamental terms like
"object", "method" that oo-programmers should know).
The way this information got added to the programmer's guide was
attempted in a non-distracting manner by inserting a short sentence to
point out that fact:
* "5.2.1. Initializing Instances Using INIT"
o ... As the INIT method gets invoked automatically at object
creation time it is also known as the Rexx constructor method. ...
* "5.2.3. Uninitializing and Deleting Instances Using UNINIT"
o ... Because this method runs at destruction time only it is
called the Rexx desctructor method. ...
---
The same intention using the opportunity of updating the documentation
is true for adding the term "attribute" wherever "variables", "object
variables", "instance variables", "variable pools" that relate to
"object variable pools" are mentioned to help the reader to learn that
all these terms denote the same, attributes, hoping to clarify and
reduce confusion that otherwise occurs when expecting that different
terms denote different concepts.
It is hoped that by this it is becomes possible for the reader to
relate the ::attribute directive with all those terms ("object
variable", "instance variable", ...) and explanations in the context
of chapter 5.
Using hard-coded cross-book references like below doesn't seem to be
a good idea (and rexxref really isn't called "Open Object Reference
Documentation" either).
Open Object Reference Documentation, section "4.2.11 Required String
Values"
Yes, this is currently stated in the draft. I noticed when searching
on the Internet DocBook related information in the past that in some
hits there were pointers about linking to external DocBooks from
another one, such that somehow external DocBook references are
supported, although I did not take the time to research that while
trying to update this "Programmer Guide" book. (This was planned at a
later time, once my work is concluded on rexxpg.)
What I think important for the reader is that he learns about the
concept of the "required string values" in ooRexx and the exact
mechanism if interested, and where to find the documentation of it.
(The programming guide is not the place to explain that in all detail
like defaultname and string, but give the most important information
from a bird's eye view.) Personally I think that the original author
who thought that the SAY instruction would send the STRING message was
not aware of that fundamental "required string value" concept and how
it works (and that it gets triggered for BIFs as well), so such a
pointer would have been helpful for him as well, if it existed.
As the programming guide should help a newcomer (oo-educated or not)
to get acquainted with the most important concepts of ooRexx quickly
and to learn where to look for more details, if interested, that such
references are important to them.
And yes, you are of course right, the title ought to match exactly
with the rexxref.pdf one (e.g. in my case "ooRexx Documentation
5.0.0.r11986, Open Object Rexx, Reference")!
I noticed instances where the SAY instruction is marked with
<methodname> tags.
Yes, because there are no <instruction> tags that could be used e.g.
for the SAY instruction, the same is unfortunately also true for
routine names as there are no <routine> or <function> tags. (This was
the reason for my questions a couple of weeks ago that went unanswered.)
As with method names that get set apart in the text with a mono-spaced
normal font, instructions, keywords, routine/function names should be
set apart as well with a mono-spaced normal font, IMHO. Except, there
are no such specific tags available!
Here is what the common typographic hints of the ooRexx books tell the
reader (the reader does not get to see the tag names at all) at the
beginning of each ooRexx book:
Here is the XML text for the above renderings:
... cut ...
<section>
<title>Document Conventions</title>
<para>
This manual uses several conventions to highlight certain words
and phrases and draw attention to specific pieces of information.
</para>
<section>
<title>Typographic Conventions</title>
<para>
Typographic conventions are used to call attention to specific
words and phrases. These conventions, and the circumstances they apply to, are
as follows.
</para>
<para>
<literal>Mono-spaced Bold</literal> is used to highlight
literal strings, class names, or inline code examples. For example:
</para>
<blockquote>
<para>
The <classname>Class</classname> class comparison methods return
<literal>.true</literal> or <literal>.false</literal>, the result of performing the
comparison operation.
</para>
<para>
This method is exactly equivalent to <code>subWord(</code><emphasis
role="italic">n</emphasis><code>, 1)</code>.
</para>
</blockquote>
<para>
<methodname>Mono-spaced Normal</methodname> denotes method
names or source code in program listings set off as separate examples.
</para>
<blockquote>
<para>
This method has no effect on the action of any <methodname>hasEntry</methodname>,
<methodname>hasIndex</methodname>, <methodname>items</methodname>, <methodname>remove</methodname>, or
<methodname>supplier</methodname> message sent to the collection.
</para>
<para>
<programlisting>-- reverse an array
a = .Array~of("one", "two", "three", "four", "five")
-- five, four, three, two, one
aReverse =
.CircularQueue~new(a~size)~appendAll(a)~makeArray("lifo")</programlisting>
</para>
</blockquote>
<para>
<emphasis role="italic">Proportional Italic</emphasis> is used
for method and function variables and arguments.
</para>
<blockquote>
<para>
A supplier loop specifies one or two control variables, <emphasis
role="italic">index</emphasis>, and <emphasis role="italic">item</emphasis>, which
receive a different value on each repetition of the loop.
</para>
<para>
Returns a string of length <emphasis role="italic">length</emphasis> with <emphasis
role="italic">string</emphasis> centered in it and with <emphasis role="italic">pad</emphasis>
characters added as necessary to make up length.
</para>
</blockquote>
</section>
<section>
<title>Notes and Warnings</title>
<para>
Finally, we use three visual styles to draw attention to
information that might otherwise be overlooked.
</para>
... cut ...
So "Mono-spaced Normal" is not marked-up with some
monospacednormal-tag, but with the methodname-tag:
"<methodname>Mono-spaced Normal</methodname>", because that tag causes
the marked up text to be rendered as "mono-spaced normal" text shown
to the reader. This works without any problem as the reader does not
get to see the tag, only the result of being rendered as a mono-spaced
normal text!
Short of tag names for instructions (keywords, subkeywords), the names
of routines and functions I have used the methodname-tag in order to
achieve the same rendering while marking them up .
I agree that it would be better if the tag name would indicate the
type that gets marked up, but unfortunately such tag names do not exist!
If you know of a version of the emphasis (or any other neutral) tag
that would cause the marked up text to be rendered as "mono-spaced
normal", then please let me know, I will then change those occurrences
of instructions (keywords, subkeywords), the names of routines and
functions accordingly. (Although for all practical reasons it would
make no difference.)
---
The ooRexx stripped down version of "Conventions.xml" does not use all
tag names that are available in DocBook. This is the reason why I
pointed that out some time ago and created the "test.pdf" book that
got placed in the same directory where the current "rexxpg.pdf" draft
resides for others to inspect.
In it I also gave examples of other existing DocBook tag names (cf.
"1.4. Some Markup in DocBook ...") that could be used for the ooRexx
books, as a result also demonstrating their typographic rendering such
that one becomes able to judge how it would look (and allowing to
decide whether to use those tags or not).
In addition the full original "Conventions.xml" is given in "test.pdf"
as well, just look up all "1.5 Document Conventions ..." there.
---
Because it is important to agree upon how instructions (keywords,
subkeywords), the names of routines and functions get typeset, I have
asked that a couple of weeks ago without getting an answer.
In the current draft I used the methodname tag such that instructions
(keywords, subkeywords), the names of routines and functions get
typeset exactly as method names, namely in mono-spaced normal text,
such that they are set apart from the proportional normal text in
order for the reader to notice that this is an exact ooRexx name for
an instruction/keyword/subkeyword/routine/function.
Adding the markup is the quite a laborious task as everyone knows.
When I started out with rexxpg almost none of such markup was present
in the entire programmers' guide, rather the emphasis-tag was used
here and there (which I used in the beginning before learning about
the tag names that got used in other books and finally what DocBook
makes available).
Maybe the questions that I have in this context are as follows:
* Why would one mark up up the names of methods but not the names of
instructions, keywords, subkeywords, routines and functions as
mono-spaced normal text?
* The reader is only presented with how some kind of terms get
typographically rendered (see screenshot above) and in it the
author even uses the methodname tag to demonstrate mono-spaced,
normal font, short of any other tag that does that. Should the
methodname tag be used for method names only?
* Should the names of Rexx instructions, keywords, subkeywords,
routines and functions be marked up in the text? And if so, how,
if one is not supposed to use the methodname tag that causes the
typesetting in a mono-spaced, normal font?
---rony
On Thu, Apr 9, 2020 at 12:55 AM Rony G. Flatscher
<rony.flatsc...@wu.ac.at <mailto:rony.flatsc...@wu.ac.at>> wrote:
At [1] you will find two versions of "rexxpg.pdf":
* "rexxpg-before-changing-chapter-5.pdf"
* and the latest draft "rexxpg.pdf"
There has been a *lot* of work in correcting, completing,
updating, enhancing this chapter which among other things
contained outright wrong information like:
say myarray /* SAY sends STRING message to Myarray */
Results:
an Array
Whenever a method
The SAY instruction does *not* send the string message,
rather the required string mechanism gets triggered for such
instructions or classic Rexx built-in functions, the output
has changed as Array's makestring method employs its tostring
method which turnes the array object to a string where each
stored item's string value is listed in its own line (items
are separated by CR-LF).
There are many places where a reader, especially a newcomer
cannot realize what the term "variable" denotes in which context.
Now that we have an attribute directive I added in parentheses
that term to make it a) clear that an object/instance variable
a.k.a. attribute is meant and b) that the relationship to the
attribute directive becomes clear.
Many little things got tackled as well, like wrong examples or
new examples to demonstrate the environment object .syscargs,
markup at wrong places, ...
As this was more than a day's work and I am not a native English
speaker I would really appreciate if some native speakers would
proof-read that chapter 5, A Closer Look at Objects. If something
is unclear or the English needs corrections or brush ups, please
let me know. Chances are that you learn something new as a price! ;-)
---rony
[1] Temporary Dropbox link to the above books:
<https://www.dropbox.com/sh/gxvvgskb04gdsqf/AACRo_ZLeFOdoBXUHroPY_-Ca?dl=0>
_______________________________________________
Oorexx-devel mailing list
Oorexx-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/oorexx-devel