tag:blogger.com,1999:blog-23093160277062397962024-02-08T05:04:07.622-08:00Extended STLThis blog contains information about my book <a href="http://www.extendedstl.com/">Extended STL, volume 1</a>, additional information about issues that are discussed in the book, and new issues that have been highlighted since the book's publication, some of which may feature in volume 2.Matt Wilsonhttp://www.blogger.com/profile/08032564940029177259noreply@blogger.comBlogger5125tag:blogger.com,1999:blog-2309316027706239796.post-59546293735680466102015-11-08T11:35:00.000-08:002015-11-08T11:35:28.950-08:00Seven Signs of Successful (C++) Software LibrariesI'm in a new role, and we're doing a _lot_ of high-performance C++. Since it's a leadership role, part of my responsibilities is to advocate and educate quality practices and processes.<br />
<br />
In an introductory talk I just gave, I discussed different views on software quality, and mentioned the Seven Signs of Successful (C++) Software Libraries, as presented in detail in the Prologue of Extended STL v1. As I was preparing the talk I realised there was no online resource that one could obtain from the name, hence this post and its searchable title (and URL).<br />
<br />
In brief:<br />
<ul>
<li>Correctness, Robustness, & Reliability;</li>
<li>Discoverability & Transparency;</li>
<li>Efficiency;</li>
<li>Expressiveness;</li>
<li>Flexibility;</li>
<li>Modularity;</li>
<li>Portability;</li>
</ul>
<div>
Each of these is also discussed in detail in the first instalment - "<i><a href="http://accu.org/index.php/journals/1572">Quality Matters #1: Introductions and Nomenclature</a></i>" - of the column <b><i>Quality Matters</i></b> in <b><a href="http://accu.org/">ACCU</a></b>'s <b><a href="http://accu.org/index.php/journals/c78/">Overload</a></b> journal. (Also republished with corrections <a href="https://www.google.com.au/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&cad=rja&uact=8&ved=0CCcQFjABahUKEwjb07SdyIHJAhWEJ6YKHbzJDNc&url=http%3A%2F%2Fwww.synesis.com.au%2Fpublishing%2Fquality-matters%2Fintroductions-and-nomenclature.html&usg=AFQjCNFG5VrfG2xw0ytrkxo4cHgPZNDW0g&sig2=B--e8p4jgqkE_lDtu2bxOA">here</a>.)</div>
Matt Wilsonhttp://www.blogger.com/profile/08032564940029177259noreply@blogger.com0tag:blogger.com,1999:blog-2309316027706239796.post-56307514229526817682010-04-28T15:05:00.000-07:002010-04-28T15:15:23.236-07:00Joining string collections<b>Problem</b>: Join a collection of strings, with a given separator<br />
<br />
<b>Answer</b>: Use <span style="font-family: "Courier New",Courier,monospace;">stlsoft::string_concatenator()</span><br />
<br />
<b>Related Chapter</b>: <a href="http://www.extendedstl.com/"><i>Extended STL, volume 1</i></a> chapter 40<br />
<br />
<b>Example</b>:<br />
<br />
<span style="font-family: "Courier New",Courier,monospace;"> typedef std::string string_t;</span><br />
<span style="font-family: "Courier New",Courier,monospace;"> typedef std::vector<string_t> strings_t;</span><br />
<div style="font-family: "Courier New",Courier,monospace;"><br />
</div><span style="font-family: "Courier New",Courier,monospace;"> strings_t patterns;</span><br />
<br />
<span style="font-family: "Courier New",Courier,monospace;"> patterns.push_back("*.cpp");</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;"> patterns.push_back("*.cxx");</span><br />
<span style="font-family: "Courier New",Courier,monospace;"> patterns.push_back("*.hpp");</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;"> patterns.push_back("*.hxx");</span><br />
<br />
<span style="font-family: "Courier New",Courier,monospace;"> string_t result;</span><br />
<br />
<span style="font-family: "Courier New",Courier,monospace;"> std::copy(coll.begin(), coll.end()</span><br />
<span style="font-family: "Courier New",Courier,monospace;"> , <b>stlsoft::string_concatenator</b>(result, "|"));</span><br />
<div style="font-family: "Courier New",Courier,monospace;"><br />
</div><span style="font-family: "Courier New",Courier,monospace;"> assert("*.cpp|*.cxx|*.hpp|*.hxx" == result);</span>Matt Wilsonhttp://www.blogger.com/profile/08032564940029177259noreply@blogger.com0tag:blogger.com,1999:blog-2309316027706239796.post-79676534830322431212010-01-03T16:47:00.000-08:002010-06-02T18:05:09.328-07:00Extended STL (volume 1) Inventions: IntroductionsAs <a href="http://www.blogger.com/goog_1262738621322">I've done for </a><i><a href="http://blog.imperfectcplusplus.com/2009/12/imperfect-c-inventions-introduction.html">Imperfect C++</a></i>, I'm going to enumerate the <i>inventions</i> (as opposed to techniques, or already established technologies) introduced in <a href="http://www.extendedstl.com/"><i>Extended STL (volume 1)</i></a>. Specifically, what are the (C++) programming components/techniques/technologies that I invented that are documented in the book.<br />
<br />
I will make a series of posts covering the inventions, including:<br />
<ul><li> element reference categories, including the <i>By-Value Temporary Reference</i></li>
<li><i>Argument-dependent Return-type Variance</i> (ARV)</li>
<li><i>External Iterator Invalidation</i><br />
</li>
<li>examination of the separation of <i>Reversibilitty</i> and<i> Bidirectionality</i></li>
<li>UNIXSTL's <a href="http://www.artima.com/cppsource/randomdirectories.html"><span style="font-family: "Courier New",Courier,monospace;">glob_sequence</span></a></li>
<li>UNIXSTL's <a href="http://www.artima.com/cppsource/directoriesviasequences.html"><span style="font-family: "Courier New",Courier,monospace;">readdir_sequence</span></a> </li>
<li>InetSTL's <span style="font-family: "Courier New",Courier,monospace;">findfile_sequence</span></li>
<li><span style="font-family: "Courier New",Courier,monospace;"></span>InetSTL's <span style="font-family: "Courier New",Courier,monospace;">ftpdir_sequence</span></li>
<li> WinSTL's <span style="font-family: "Courier New",Courier,monospace;">findfile_sequence</span></li>
<li>WinSTL's <span style="font-family: "Courier New",Courier,monospace;">listbox_sequence<span style="font-family: inherit;"></span></span> and <span style="font-family: "Courier New",Courier,monospace;"><span style="font-family: inherit;"></span>combo</span><span style="font-family: "Courier New",Courier,monospace;">box_sequence</span></li>
<li>WinSTL's <span style="font-family: "Courier New",Courier,monospace;">pid_sequence</span></li>
<li>WinSTL's <span style="font-family: "Courier New",Courier,monospace;">process_module_sequence</span></li>
<li>MFCSTL's <span style="font-family: "Courier New",Courier,monospace;">CArray_cadaptor</span><br />
</li>
<li>MFCSTL's <span style="font-family: "Courier New",Courier,monospace;">CArray_iadaptor</span><br />
</li>
<li>WinSTL's <span style="font-family: "Courier New",Courier,monospace;">child_window_sequence</span></li>
<li>WinSTL's <span style="font-family: "Courier New",Courier,monospace;">zorder_iterator</span></li>
<li>PlatformSTL's <span style="font-family: "Courier New",Courier,monospace;">environment_map</span></li>
<li>STLSoft's <span style="font-family: "Courier New",Courier,monospace;">string_tokeniser</span></li>
<li>COMSTL's <span style="font-family: "Courier New",Courier,monospace;">enumerator_sequence</span></li>
<li>COMSTL's <span style="font-family: "Courier New",Courier,monospace;">collection_sequence</span><br />
</li>
<li>ACESTL's <span style="font-family: "Courier New",Courier,monospace;">message_queue_sequence</span><br />
</li>
<li>STLSoft's <a href="http://www.drdobbs.com/cpp/201200278"><span style="font-family: "Courier New",Courier,monospace;">ostream_iterator</span></a></li>
<li>STLSoft's <span style="font-family: "Courier New",Courier,monospace;">cstring_concatenator_iterator</span> <br />
</li>
<li>STLSoft's <a href="http://blog.extendedstl.com/2010/04/joining-string-collections.html"><span style="font-family: "Courier New",Courier,monospace;">string_concatenator_iterator</span></a> </li>
<li>STLSoft's <span style="font-family: "Courier New",Courier,monospace;">member_selector_iterator</span></li>
<li>STLSoft's <span style="font-family: "Courier New",Courier,monospace;">adapted_iterator_traits</span></li>
<li>STLSoft's <span style="font-family: "Courier New",Courier,monospace;">filter_iterator</span> <br />
</li>
<li>STLSoft's <span style="font-family: "Courier New",Courier,monospace;">transform_iterator</span></li>
</ul><br />
Over time, I'll post short examples/explanations regarding each of these.<br />
<span style="font-family: "Courier New",Courier,monospace;"><span style="font-family: inherit;"></span></span>Matt Wilsonhttp://www.blogger.com/profile/08032564940029177259noreply@blogger.com0tag:blogger.com,1999:blog-2309316027706239796.post-85972930800023263792009-11-20T11:00:00.000-08:002009-11-20T11:00:02.708-08:00Extended STL online contentI thought it'd be useful to list the available online resources for <a href="http://www.extendedstl.com/"><i>Extended STL</i></a>:<br />
<br />
<b>The Book</b>:<br />
<ul><li><a href="http://www.informit.com/store/product.aspx?isbn=0321514459">The eBook (PDF) version of the book</a>, available from <a href="http://www.awprofessional.com/">Addison-Wesley</a></li>
</ul><b>Front Matter</b>:<br />
<ul><li><a href="http://synesis.com.au/publishing/xstl/xstlv1_toc.pdf">Table of Contents</a></li>
<li><a href="http://synesis.com.au/publishing/xstl/xstlv1_preface.pdf">Preface</a></li>
<li><a href="http://synesis.com.au/publishing/xstl/xstlv1_prologue.pdf">Prologue</a></li>
<li><a href="http://synesis.com.au/publishing/xstl/xstlv1_presconv.pdf">Presentation Conventions</a><br />
</li>
</ul><b>Sample Chapters</b>:<br />
<br />
<ul><li><a href="http://www.informit.com/content/images/9780321305503/samplechapter/0321305507_CH23.pdf">Chapter 23: <i>The Fibonnaci Sequence</i></a> - a PDF of the chapter as it appears in the book</li>
<li><a href="http://www.artima.com/cppsource/scattered_io.html">Chapter 31: <i>Gathering Scattered I/O</i></a> - the sample chapter in article form, published in The C++ Source (September 2007)</li>
<li><a href="http://www.informit.com/content/images/9780321305503/samplechapter/0321305507_CH42.pdf">Chapter 42: <i>Filtered Iteration</i></a> - a PDF of the chapter as it appears in the book<br />
</li>
</ul><b>Related Articles</b>:<br />
<br />
<ul><li><a href="http://ddj.com/dept/cpp/201200278"><i>An Enhanced ostream_iterator</i></a>, Matthew Wilson, <a href="http://www.ddj.com/">Dr Dobb's Journal</a>, June 2007</li>
<li><a href="http://www.ddj.com/cpp/184402050"><i>Adapting Interface-incomplete Types at Compile Time</i></a>, C/C++ Users Journal, December 2005</li>
<li><a href="http://www.ddj.com/cpp/184402038"><i>Argument-dependent Return-type Variance</i></a>, Matthew Wilson, C/C++ Users Journal, November 2005</li>
<li><i><a href="http://www.artima.com/cppsource/randomdirectories.html" target="_blank">Wild-card Searches of UNIX Directories with Random Access Iterators</a></i>, Matthew Wilson, <a href="http://www.artima.com/cppsource/">The C++ Source</a>, September 12, 2004</li>
<li><i><a href="http://www.artima.com/cppsource/directoriesviasequences.html" target="_blank">Reading UNIX Directories via STL-compliant Sequences</a></i>, Matthew Wilson, <a href="http://www.artima.com/cppsource/">The C++ Source</a>, June 21, 2004 </li>
</ul><br />
I'll update this list from time to time as I remember more ...Matt Wilsonhttp://www.blogger.com/profile/08032564940029177259noreply@blogger.com0tag:blogger.com,1999:blog-2309316027706239796.post-86516166458576266692009-11-07T19:12:00.000-08:002009-11-07T19:12:13.757-08:00Welcome to the "Extended STL" blog!Just a first "hello" to all readers of <a href="http://www.extendedstl.com/"><i>Extended STL</i></a>, and of this blog. I've created this blog for three reasons:<br />
<br />
<br />
<ul><li>To announce news regarding the book (such as reprints, reviews, and so on) and other books (including the books I'm currently working on)<br />
</li>
<li>To highlight, or discuss further, issues highlighted within the book</li>
<li>To discuss new issues, libraries, techniques and tools that I think may be of interest to the readers of <a href="http://www.extendedstl.com/"><i>Extended STL</i></a></li>
</ul>Thanks for listening<br />
<br />
MattMatt Wilsonhttp://www.blogger.com/profile/08032564940029177259noreply@blogger.com0