    <rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:admin="http://webns.net/mvcb/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:content="http://purl.org/rss/1.0/modules/content/">
     <channel>
        <title>ACCU  :: ACCU Spring Conference 2001 Roundup</title>
        <link>https://members.accu.org/index.php/journals/1102</link>
        <description>Professionalism in Programming</description>
        <dc:language>en-us</dc:language> 
        <dc:creator>Administrator</dc:creator> 
        <admin:generatorAgent rdf:resource="http://www.xaraya.org" /> 
        <admin:errorReportsTo rdf:resource="mailto:webeditor@accu.org" />
       <sy:updatePeriod>hourly</sy:updatePeriod>
       <sy:updateFrequency>1</sy:updateFrequency>
       <docs>http://backend.userland.com/rss</docs>


        <h2>Journal Articles</h2>


<div class="xar-mod-head"><span class="xar-mod-title">CVu Journal Vol 13, #2 - Apr 2001</span></div>

<table border="0" cellpadding="1" cellspacing="0">
    <tbody>
    <tr>
        <td valign="top">
            Browse in :
       </td>
       <td valign="top">

                                            <a href="https://members.accu.org/index.php/journals/">All</a>

                     &gt;                         <a href="https://members.accu.org/index.php/journals/c76/">Journals</a>

                     &gt;                         <a href="https://members.accu.org/index.php/journals/c77/">CVu</a>

                     &gt;                         <a href="https://members.accu.org/index.php/journals/c121/">132</a>
                    (14)
<br />
</td>
   </tr>
   </tbody>
</table>




<div class="xar-error">
   <p>
 <strong>Note:</strong> when you create a new publication type,
the articles module will automatically use the templates
<em>user-display-[publicationtype].xt</em>
and <em>user-summary-[publicationtype].xt</em>.
If those templates do not exist when you try to preview or display a new article,
you'll get this warning :-)  Please place your own templates in themes/<em>yourtheme</em>/modules/articles . The templates will get the extension .xt there. </p>
</div>
<div class="xar-norm xar-standard-box-padding">
   <h1><strong>Title:</strong>&nbsp;ACCU Spring Conference 2001 Roundup</h1>
<p><strong>Author:</strong>&nbsp;</p>
<p>
<strong>Date:</strong> 03 April 2001 13:15:44 +01:00 or Tue, 03 April 2001 13:15:44 +01:00</p>
<p><strong>Summary:</strong>&nbsp;</p>
<p><strong>Body:</strong>&nbsp;<div class="sect1" lang="en">
<div class="titlepage">
<h2><a name="d0e18" id="d0e18"></a></h2>
</div>
<p>The recent ACCU spring conference held at Christ Church College
in Oxford, England had something for everyone. There were a number
of language agnostic seminars that covered various topics relevant
to all developers including discussions on current software
development practices and how to improve them as well as various
aspects of the Open Source phenomenon and how developers could best
partake of this steadily rising tide.</p>
<p>There were several technical seminars, mostly focused on C++,
which covered a number of subjects such as Policy classes, advanced
template techniques and namespaces. Also potential changes, defects
and extensions to the C++ Standard were discussed.</p>
<p>The following are short repoerts on eleven of the twenty-eight
seminars in the three-day event.</p>
</div>
<div class="sect1" lang="en">
<div class="titlepage">
<h2><a name="d0e26" id="d0e26"></a>Thursday 29th
March</h2>
</div>
<div class="sect2" lang="en">
<div class="titlepage">
<h3><a name="d0e29" id="d0e29"></a>Keynote:
Minimalism - Kevlin Henney</h3>
</div>
<p>Kevlin Henney opened the conference with a &quot;less is more&quot;
keynote speech in which he tried to convince the programmers in the
audience to &quot;write less code&quot;. His focus was not on minimalism in
the feature set, but rather on the need for developers to &quot;omit
needless code&quot;, and &quot;remove to improve&quot;. &quot;There is too much code,
and not enough software&quot; he said, pointing out that &quot;there is no
code faster than no code&quot; and that &quot;less code, equals less bugs&quot;,
as the bugs per line of code is constant across this industry,
irrespective of the size of the project.</p>
<p>His advice also extended to documentation, saying &quot;if you
document everything then nothing is significant&quot;, alluding to those
people who would comment: <tt class="literal">i++; //increment
i</tt>&quot;.</p>
<p>He berated both java strings (<tt class="literal">length</tt> or
<tt class="literal">size</tt>?) and c++ strings (<tt class=
"literal">[i]</tt> or <tt class="literal">.at(i)</tt>?) for their
inconsistencies, and criticised stl allocators for being complex
and &quot;fragile&quot;, with very little practical use.</p>
<p>He concluded that design is about embracing constraints, and
that we should consider constraints and affordances,and how to
reduced the latter.</p>
</div>
<div class="sect2" lang="en">
<div class="titlepage">
<h3><a name="d0e55" id="d0e55"></a>Improving Reuse in
C++ through Policy Classes - Andrei Alexandrescu</h3>
</div>
<p>Andrei Alexandrescu, Development Manager at Real Networks Inc,
presented the first heavy weight lecture of the conference,
describing policy classes (a technique which should be familiar in
concept to those who have read my An introduction to C++ Traits
article) and using the implementation of the ultimate Smart Pointer
class as an example.</p>
<p>&quot;Design is Choice&quot; he told us, introducing the policy class
idiom as a solution to the &quot;evil multiplicity&quot; of real world
situations. He showed that large interfaces undermine design by
compromising size, efficiency and clarity, and went on to
demonstrate the limitations of a Multiple Inheritance solution,
which &quot;juxtaposes names, features and vtables&quot;, and a Template
based solution, which could not specialise structure, only
behaviour, and did not scale. He also claimed that the template
only based solution placed an unreasonable burden on the user.</p>
<p>Policy based design, he explained, was a way of constructing
classes with complex behaviour by combining classes called
policies. Policies being a low fat variant of interface based
design, and the Template Method pattern, where each policy
establishes an interface to a to be implemented policy class.</p>
<p>The policy classes idiom is too large a subject for me to go
into here, those of you interested in it might want to check out
Andrei Alexandrescu's book <i class="citetitle">Modern C++ Design:
Generic Programming and Design Patterns Applied</i> for a more
in-depth look at this topic.</p>
</div>
<div class="sect2" lang="en">
<div class="titlepage">
<h3><a name="d0e69" id="d0e69"></a>Expressing
Constraints a la Standard ML Signatures - Gabriel Dos Reis</h3>
</div>
<p>ML is a high-level functional programming language with which
Gabriel Dos Reis has worked extensively. The essence of his talk
was that C++ could benefit from a technique used in ML to constrain
types.</p>
<p>He started by talking about compiler error messages: when you
get something wrong and templates are involved the compiler will
nearly always report an error (good) but the messages you get can
be extremely verbose and unhelpful (bad). Often this is because you
have more than one template function or template specialisation for
a particular name and the compiler does not have sufficient type
information to pick the &quot;right&quot; one.</p>
<p>His proposed solution to this problem was to extend the C++
language to allow the definition of <span class=
"emphasis"><em>signatures</em></span>. A signature declaration
looks like a class declaration except that it starts with
<span class="emphasis"><em>__signature__</em></span> instead of
<span class="emphasis"><em>class</em></span>. When you declare a
class or template class you can specify that it is associated with
a particular signature. The compiler uses the signature information
to enforce extra constraints on the class or template class (at
instantiation time in the case of templates) and thus finds any
ambiguity or mismatch problems at an early stage. For example, a
method or operator specified in the signature must also appear in
the class or template class being declared.</p>
<p>Gabriel Dos Reis is currently implementing a proof of concept of
signatures using the gcc codebase and plans to submit a proposal to
extend the C++ language later on this year.</p>
</div>
<div class="sect2" lang="en">
<div class="titlepage">
<h3><a name="d0e89" id="d0e89"></a>Namespaces &amp;
the Interface Principle - Herb Sutter</h3>
</div>
<p>In his first lecture, Herb Sutter, CTO of PeerDirect Inc, and
Secretary of the ISO/ANSI C++ Standards Committee, addressed the
question &quot;Why namespaces?&quot; and introduced the audience to the
&quot;Interface Principle&quot;. Namespaces were added to the standard after
if became clear that the common C practice of prefixing identifiers
in a library with a library name has its own C++ equivalent, in
enclosing whole libraries in a single class, which was cumbersome,
and intrusive to development. We were advised that by using
namespaces we could &quot;avoid the pollution of the global namespace&quot;,
and &quot;avoid accidental name clashes&quot; (such as those that can happen
when using libraries from multiple vendors).</p>
<p>The Interface Principle addresses the question: What is 'part
of' a class? Consider the following example:</p>
<pre class="programlisting">
class X { ... };
void foo(const X &amp; ... ) { ... };
</pre>
<p>Is <tt class="function">foo</tt> part of X? What about now:</p>
<pre class="programlisting">
class X {
...
  void foo() const { ... };
};
</pre>
<p>What's the difference? Herb showed that for <tt class=
"classname">X</tt> all functions, including free functions, that
mention <tt class="classname">X</tt>, and come with <tt class=
"classname">X</tt> are part of <tt class="classname">X</tt>. This
doesn't just apply to C++ - consider <tt class="literal">FILE</tt>
in C, and its associated functions as well.</p>
<p>He then went on to talk about Koening Lookup in great detail,
which I don't have space to go into here, but is something that all
C++ programmers should make themselves familiar with.</p>
<p>Namespaces, and the Interface Principle are addressed in detail
in Herb Sutter's book <i class="citetitle">Exceptional C++: 47
Engineering Puzzles, Programming Problems, and Solutions</i>. Herb
Sutter's article for Dr. Dobb's Journal &quot;<i class=
"citetitle">Migrating to Namespaces</i>&quot; is also available online,
along with his <i class="citetitle">Guru Of The Week #53 :
&quot;Migrating to Namespaces&quot;</i>.</p>
</div>
<div class="sect2" lang="en">
<div class="titlepage">
<h3><a name="d0e137" id="d0e137"></a>Template
Techniques - Nicolai Josuttis</h3>
</div>
<p>In a session billed as &quot;intermediate/advanced&quot;, Nicolai
Josuttis, C++ Standard Committee member, gave a solid if
uninspiring lecture on C++ template techniques. Opening by
establishing key terminology (notably &quot;Function Template&quot;, not
&quot;Template Function&quot;, &amp; &quot;Class Template&quot;, not &quot;Template Class&quot;),
he went on to discuss the problems surrounding header dependencies,
and the problem with export not working.</p>
<p>He discussed the difference between declaration and definition
and suggested that one solution to compile time problems was to
<tt class="literal">#include</tt> a header containing the template
declaration, and instantiate the template for specific types in a
separate <tt class="literal">cpp</tt> file, observing that this
technique only works when you know which types will be used in
which headers, you avoid inline functions, and are prepared to
accept the inevitable proliferation of files.</p>
<p>Debugging issues and compiler support where discussed, and
Nicolai observed that with some implementations of the STL a
<tt class="classname">map</tt> of <tt class=
"classname">string</tt>s to <tt class="classname">string</tt>s can
result in symbols tens of thousands of characters long!</p>
<p>Nicolai 's talk finished on a light note, with a limerick which
appears in the C++ ISO Standard:</p>
<div class="blockquote">
<blockquote class="blockquote">
<p>when writing a specialization, be careful about its location, or
to make it compile, will be such a trial, as to kindle its self
immolation!</p>
</blockquote>
</div>
<p>So who says the C++ Standard Committee doesn't have a sense of
humour!</p>
</div>
</div>
<div class="sect1" lang="en">
<div class="titlepage">
<h2><a name="d0e168" id="d0e168"></a>Friday 30th
March</h2>
</div>
<div class="sect2" lang="en">
<div class="titlepage">
<h3><a name="d0e171" id="d0e171"></a>Keynote: 13
Pitfalls of the Software Industry - Herb Sutter</h3>
</div>
<p>Subtitled &quot;Miss Conceptions&quot;, Herb Sutter opened the second day
of the conference by outlining the 13 main mistakes that the
software development industry makes, which in his opinion
where:</p>
<div class="itemizedlist">
<ul type="disc">
<li>
<p><span class="emphasis"><em>Assuming that Communication equals
Community:</em></span> Herb asked the audience to consider the
question: Does all the communication technology we have at our
disposal draw us together as a community?</p>
</li>
<li>
<p><span class="emphasis"><em>Communications Failure:</em></span>
Highlighting his point by &quot;crashing&quot; the slide show, he addressed
the issues of people failing to &quot;hear&quot; what is being said, and
people failing to raise problems. He also pointed out that there is
a tendency for people in the software industry to assume that
people are criticising them, and asked us to ask ourselves if
&quot;ignorance is bliss&quot;.</p>
</li>
<li>
<p><span class="emphasis"><em>Failure to allow Failure:</em></span>
Pointing out that both high reliability systems, and backup systems
are good things, he asked &quot;how good is good enough?&quot;</p>
</li>
<li>
<p><span class="emphasis"><em>Language Wars: &quot;Use the best
language!&quot;</em></span> he told us. Sounds obvious, but ask
yourselves which is the best language? Best for what? Best for
whom? He gave the example of Garbage Collection (as a language
feature), stating that it was 'best', unless you're writing a hard
real-time system, unless you're not using dynamic memory (for
example, in an embedded system), unless there are other reasons not
to. Note also that Garbage Collection does not necessarily imply
Java.</p>
</li>
<li>
<p><span class="emphasis"><em>Truthtelling &amp;
Naysaying:</em></span> &quot;Its not a bug, its a 'fee-chur'&quot; he said,
condoning marketing speak, and then going on to &quot;documentation that
isn't&quot; (Question: Which documentation is right? Hint: Read the
source) and &quot;the little comments that couldn't&quot; - referring to the
ubiquitous &quot;<tt class="literal">i++; //increment i</tt>&quot;.</p>
</li>
<li>
<p><span class="emphasis"><em>Geekspeak &amp;
Technobabble:</em></span> &quot;Mean what you say! Say what you mean!&quot;
he told us, going on to condemn the use of sloppy terms such as
&quot;start&quot;, &quot;friend&quot;, &quot;real-time&quot;, &quot;undefined behaviour&quot;, &quot;thread safe
containers&quot; and so on.</p>
</li>
<li>
<p><span class="emphasis"><em>Automation and Dependency
Inversion:</em></span> Should we question our dependency on
electricity and computers? EMP, hacking, viruses are all a risk.
Ask yourself, would you rather ICBM firing mechanisms were manual,
or computer controlled?</p>
</li>
<li>
<p><span class="emphasis"><em>Size Doesn't Matter</em></span>,</p>
</li>
<li>
<p><span class="emphasis"><em>Mega Mania:</em></span> Is bigger
really better? In a world where mega-bucks have taken over from
mega-bytes, and things are valued over people, (why) are the
dot-com billionaires (un)happy?</p>
</li>
<li>
<p><span class="emphasis"><em>Silver Bullet Syndrome:</em></span>
In the software industry we have our werewolves - but there are no
silver bullets. There is no one &quot;silver bullet&quot; methodology,
language or framework, so why do we expect each new technology that
comes along to fix everything?</p>
</li>
<li>
<p><span class="emphasis"><em>Know Your Limits:</em></span> Not
only should developers know their own limits, they should know the
limits of their development tools, their compiler, their code, and
their space/performance constraints. &quot;Software is not Magic&quot;.</p>
</li>
<li>
<p><span class="emphasis"><em>Insane Programming:</em></span>
Knocking out code at a rate of knots, and beating tight deadlines
is an addictive headrush, extreme programming may be 'cool', but
does not focus on design. Insane Programming is worse, what happens
to trust, when there is a lack of sanity checking? How does this
impact on robustness and error recovery.</p>
</li>
<li>
<p><span class="emphasis"><em>Neuroses &amp; Phobias:</em></span>
&quot;Just Ship It&quot; and &quot;We Can't Tell Them That (even if its true)&quot;
mentalities. Group think.</p>
</li>
</ul>
</div>
<p>Concluding that it all comes down to a Failure To
Communicate.</p>
</div>
<div class="sect2" lang="en">
<div class="titlepage">
<h3><a name="d0e247" id="d0e247"></a>Optimising
&quot;plain&quot; and &quot;multi threaded&quot; C++ - Herb Sutter</h3>
</div>
<p>Herb Sutter's began his third talk by asking the audience the
question he ultimately aimed to answer: How do you optimise a C++
Program? He then went on to explain that it all depends on what you
mean by &quot;optimise&quot;. You could be optimising for space efficiency,
in which case, would that be the space taken up by the program
code? The data? The working set? Or perhaps you want to optimise
for speed/time efficiency, in which case, would that be start up
time? Worst case time? Best case time? Average time? Which
operation? On what platform or processor? Or perhaps you wanted to
optimise stability, or compile time efficiency, or time to market,
or your profit margin! The point being, when you say that you will,
or you are asked to, optimise a program, there are more questions
that need to be answered before you continue.</p>
<p>That said, Herb went on to say that today he would be looking at
micro optimisation (the small stuff that you should do
automatically, at no cost to code clarity), improving build times,
the inline keyword, and the Copy On Write 'optimisation' in a multi
threaded environment.</p>
<p>Having pre-warned the audience that optimisation is the last
thing you do (&quot;make it clear, make it right, cut the fat&quot;), and
even then only when you have to (&quot;1st Law of optimisation - Don't
optimise. 2nd Law of optimisation - Don't optimise yet.&quot;), that by
using the stl containers and algorithms you would get most of what
he was about to explain for free, and that there was no substitute
for profiling, he went on to focus on the standard techniques for
avoiding temporary objects in C++, i.e., prefer <tt class=
"literal">++i</tt> to <tt class="literal">i++</tt>, pass by
reference, and avoiding implicit conversions (use explicit!).</p>
<p>He then moved on to the <tt class="literal">inline</tt> keyword
which he explained, could do anything, including making you code
faster, slower, bigger, and smaller, among other things.</p>
<p>Following that Herb explored build time optimisations, the key
points of which were:</p>
<div class="itemizedlist">
<ul type="disc">
<li>
<p>Remove unnecessary <tt class="literal">#include</tt>s This may
seem obvious, but reconsider what is necessary.</p>
</li>
<li>
<p>Avoid <tt class="literal">using</tt> in headers</p>
</li>
<li>
<p>Prefer <tt class="literal">#include &lt;iosfwd&gt;</tt> over
<tt class="literal">#include &lt;ostream&gt;</tt> in headers (see
also virtual print idiom)</p>
</li>
<li>
<p>Forward declare what can be forward declared: Forward declare
template instantiations, see also &quot;used in name only&quot;
principle.</p>
</li>
<li>
<p>Compiler Firewall/Pointer To Implementation (pimpl) idiom:
(note: comes with runtime overhead)</p>
</li>
<li>
<p>Prefer composition to private inheritance: (for those using the
pimple idiom)</p>
</li>
</ul>
</div>
<p>The discussion then moved on to the issues surrounding
optimising multi threaded apps, and Copy On Write. There isn't
space to go into it here, but Herb Sutters article <i class=
"citetitle">Optimizations That Aren't (In a Multithreaded
World)</i> is available online.</p>
</div>
<div class="sect2" lang="en">
<div class="titlepage">
<h3><a name="d0e305" id="d0e305"></a>C++ Standard
Library : Changes, Corrections, and Extensions - Dietmar Kuhl,
Nicolai Josuttis, Beman Dawes, et al.</h3>
</div>
<p>The panel of C++ Standard committee members introduced this
session by explaining that the C++ Standard is split into two
parts, &quot;core&quot; and &quot;library&quot;, and that this talk would focus on
&quot;library&quot;. It should be noted that there is a possibility that core
and library, which are both currently covered by one ISO standard
could be split into two separate standards in the future.</p>
<p>There were 300 issues submitted to the standard committee, 125
have been accepted as defects in the standard. Only 2 or 3 of these
defects are real problems, most are typos and errors in examples.
16 issues were duplicates. 58 issues submitted to the committee
were not defects. For example, compiler vendors sometimes submit a
defect report stating that a feature of the language is &quot;not
implementable&quot;, which has actually been implemented elsewhere.
There are (at time of writing) 41 new issues that have not been
considered by the committee, and 25 open, that is, they have been
looked at, and need to be considered further. It should be noted
that missing components are not considered to be defects.</p>
<p>Of the defects in the standard, there are two that stand out,
and these where given significant discussion time by the panel. The
first of these revolves around <tt class=
"classname">std::vector&lt;bool&gt;</tt>, the second around
<tt class="classname">valarray</tt>.</p>
<p>The subject of <tt class=
"classname">std::vector&lt;bool&gt;</tt>, is a controversial one.
There are several problems with this part of the library, and they
are compounded by the fact that it is in real world use (a show of
hands in the room revealed one developer out of about 50). The main
problem with <tt class="classname">std::vector&lt;bool&gt;</tt> is
that it has a different interface to <tt class=
"classname">std::vector&lt; ... &gt;</tt>, that violates the stl
container requirements, and that for <tt class=
"literal">std::vector&lt;bool&gt; v;, v[i].flip();</tt> is
undefined. This situation came about because the STL was a
relatively late addition to the standard, and while Stepanov had
intended to include proxy reference types, there was no time and
they were removed, all except the one used by <tt class=
"classname">std::vector&lt;bool&gt;</tt>.</p>
<p>The problems with <tt class="classname">valarray</tt>, are less
controversial. It simply does not work. The solution is more
complex, the committee have to decide to fix it, or deprecate it.
The problem with fixing it is that it may be broken on the
conceptual level, and even were the standard to be fixed, it would
be very hard to get vendors to support it fully, and to regain the
developers' trust it. The problem with deprecating it is that
deprecated features stay broken, and never really go away. In
addition to this, the possible inclusion of the <tt class=
"literal">restrict</tt> keyword from C99, in combination with the
<span class="emphasis"><em>OO Numerics/Blitz++</em></span> library,
would solve most of the problems that valarray tried to.</p>
<p>The panel closed with a discussion with the audience on the
subject of future extensions to the standard library. Those of you
interested in this should note that the boost library (described
later in this document) is going to be the focus for change in the
future. Other libraries of interest are ACE for multi threading,
and the SGI container extensions to the STL.</p>
</div>
</div>
<div class="sect1" lang="en">
<div class="titlepage">
<h2><a name="d0e350" id="d0e350"></a>Saturday 31st
March</h2>
</div>
<div class="sect2" lang="en">
<div class="titlepage">
<h3><a name="d0e353" id="d0e353"></a>Keynote: Open
Source - Alan Lenton</h3>
</div>
<p>Alan Lenton, Technical and Creative Director for ibgames, and
linux user since v1.0, gave the final keynote speech of the
conference on the subject of Open Source, or to be more accurate,
he addressed the much asked question: Is your (company's) product
suitable for open source?</p>
<p>Before addressing this question directly, he then went on to
separate &quot;Open Source&quot; into three conceptual parts:</p>
<div class="itemizedlist">
<ul type="disc">
<li>
<p>open source Licences, such as the GPL,</p>
</li>
<li>
<p>open source as a Development Model, and finally,</p>
</li>
<li>
<p>open source as a business model.</p>
</li>
</ul>
</div>
<p>Which poses the killer question: How do you make money out of
open source? A question that is especially relevant in the post
dot-com bubble economy. Alan suggests that support services are a
valid revenue model, and cited ibgames as a successful example.</p>
<p>He then went on to list what he considers to be the strengths
and weaknesses of open source development, listing the production
of development tools, and applications that have been done before
and are clearly defined as examples of projects that work, and
rapid correction of bugs as an other benefit, although he claimed
that in practice having the source does not necessarily mean that
you can fix bugs yourself.</p>
<p>Making a joke about flameproof pants, he went on to cite what he
considered to be the weakness of open source, listing choice,
innovation and standards, as the key points. He explained that the
problem with &quot;choice&quot; for companies who want to get into open
source is that the development &quot;community&quot; has a choice, and that
they can choose not to become involved with your project.
Innovation within open source was criticised, and Alan suggested
that this problem might stem from a clash of egos within the
community, where innovative and original ideas might be ignored due
to the &quot;not invented here&quot; syndrome. The problem with &quot;standards&quot;
he said, was multifold, first of all was motivation to comply to
standards, he told us, citing POSIX conformance in Linux as an
example, second was the need for some companies to meet ISO 9000,
which involves documenting process, which may be difficult with an
open source project. The third 'standards' problem that open source
projects may meet is that of software patents, and the subversion
of standards by third parties.</p>
<p>The final topic covered in the session was that of &quot;Managing
your Open Source Project&quot;. His main points were getting it out,
getting it noticed (SourceForge hosts 18000+ projects), getting
people to work with (not for) you, code ownership, managing bug
fixes, collective decisions, revision control, negative
productivity, and feature creep.</p>
<p>Alan Lenton has posted the document <i class="citetitle">Aspects
of Open Source Software Development</i>, which is based on this
talk, online.</p>
</div>
<div class="sect2" lang="en">
<div class="titlepage">
<h3><a name="d0e383" id="d0e383"></a>Meta Programming
in C++ - Gabriel Dos Reis</h3>
</div>
<p>Template meta-programming is the use of templates to perform
operations at compile time: this can improve both the efficiency
and the type-safety of a program. Unfortunately template
metaprograms are extremely difficult to write and understand; this
is because they were not designed into C++, they're only possible
because of an accidental combination of C++ features - i.e.
template partial specialisation, typedefs and enums with
expressions using compile-time constants. In 1995 Todd Verhuizen
published an article Template Metaprograms in the May issue of C++
Report and thus the art was born.</p>
<p>Gabriel Dos Reis had an unusual approach to the subject; he
started with a program written in Scheme and showed how it could be
implemented as a template metaprogram. Scheme is a functional
language derived from Lisp and because looping and assignment are
not available to template metaprogram writers it turns out that the
sort of techniques used to write functional programs are the same
as you would use for writing template metaprograms.</p>
<p>For example, a conditional (introduced by if in most programming
languages) in Scheme is implemented using a special form called
cond, which is followed by one or more condition-expression pairs;
the conditions are evaluated in order and the first one which is
&quot;true&quot; (non-nil) is selected and the value of the whole conditional
is the value of the true condition's expression.</p>
<p>The corresponding construct in template metaprogramming is
partial specialisation: you define the template first of all for
the general case using a standard (unspecialised) template
definition and this contains the code for the &quot;else&quot; branch of your
conditional. Then you define one or more specialisations of the
template for particular types or integers (depending on what is
being passed to the template as parameters) and these correspond to
the if and else if branches of the conditional.</p>
<p>Similarly, template metaprograms follow the functional paradigm
in that they use recursion instead of looping constructs such as
for and while. Variables - at least variables whose value can be
changed - are not available either.</p>
<p>Unfortunately, those of you who have no experience of defining
template classes/functions will be completely lost by now but there
is insufficient space here to go into more detail. I will just
re-iterate the recommendation of Andrei Alexandrescu's book that is
the best introduction I've found to template metaprogramming.</p>
</div>
<div class="sect2" lang="en">
<div class="titlepage">
<h3><a name="d0e398" id="d0e398"></a>Introducing
Boost - Beman Dawes</h3>
</div>
<p>Boost, Beman Dawes, C++ standard library group committee member,
and boost.org webmaster, told us, is a &quot;repository of free peer
reviewed portable C++ source libraries which work well with the C++
standard library&quot;.</p>
<p>In addition to that, boost is a website, a mailing list, a
public CVS service, a public &amp; private FTP service, and a
community of volunteers, comprising of individuals, universities,
businesses and other organisations. The people behind boost, we
where told, have tried to engineer a culture of positivity and
inclusion - for example, commercial/proprietary developers are
'included' by placing the libraries under non-restrictive licences.
In addition to this, boost is inclusive of other language
developers - a C++ to Python bindings library is one of the most
popular downloads.</p>
<p>The talk then went on to outline the key points potential users
of the library may want to consider. These points where:</p>
<div class="itemizedlist">
<ul type="disc">
<li>
<p>Boost is a library in development. This means that it is subject
to change.</p>
</li>
<li>
<p>Boost uses the latest c++ techniques. This means that stresses
compilers, sometimes to breaking point.</p>
</li>
</ul>
</div>
<p>So how do you cope with these issues? Beman suggests:</p>
<div class="itemizedlist">
<ul type="disc">
<li>
<p>Freeze on one version of the library. Don't automatically
upgrade, instead only update at points in your development cycle
when change is tolerable, and you will have time to deal with
broken code.</p>
</li>
<li>
<p>Test Boost on your system before putting it into production use
There is a compiler status page on the boost website that may be of
help.</p>
</li>
</ul>
</div>
<p>One often asked question about free libraries is: What do I (my
company) have to gain by contributing to this library? Beman
answered this by saying that the boost community acts as a free QA
department to companies that submit a library under a suitable
licence.</p>
<p>Boost is worth checking out, it is the future of C++, and many
components of it will be up for inclusion in future revisions of
the C++ library.</p>
</div>
</div>
</p>
<p><strong>Notes:</strong>&nbsp;</p>
<p><em>More fields may be available via dynamicdata ..</em></p>
</div>
</channel>
</rss>
