|
|
|
Philosophy
|
|
The philosophy of STLSoft is very simple: providing robust and lightweight software to the development community.
|
|
STLSoft originally came into being as a means of moving the original proprietary source code from the author's company into the public domain
is as clean a manner as possible. As it has evolved, however, it is able to stand on its own as a reliable source of useful, high-quality,
and widely-compatible software.
|
|
A strong advantage of the STLSoft libraries is that they are, without exception, "header-only". Not only does this provide
transparency to the potential user - nothing is squirrelled away in implementation files, or worse yet, inside opaque binary
modules - but it also eliminates many of the practical issues that are disuasive in the adoption and use of other open-source
libraries. In particular, there are no issues of global object lifetimes to worry about, concerns about coupling (with
implementation files), proprietary error-handling mechanisms, memory-management, debugging facilities and very few concerns over
calling conventions, As much as possible, STLSoft lets the compiler make those decisions, so you don't have to.
|
|
|
|
Projects
|
The STLSoft libraries are split into a number of sub-projects, corresponding to their respective technologies/operating-systems. The
main project, confusingly also referred to as STLSoft (located at http://stlsoft.org) provides
cross-platform, technology/API-neutral classes and functions, within the namespace stlsoft. They also support the other
sub-projects:
-
ATLSTL
(http://atlstl.org). The Active Template Library is the leading library for creating COM
components, and ATLSTL provides software technologies for assisting in its use. Components are defined within the namespace
atlstl.
-
COMSTL
(http://comstl.org). The Component Object Model has become the foundational technology for
component software development on the Windows platform. COMSTL provides software technologies for manipulating COM interfaces
and APIs. Components are defined within the namespace
comstl.
-
.netSTL
(http://dotnetstl.org). The .NET platform is rapidly gaining popularity, and C++.NET is
the powerhouse language of the .NET platform. .netSTL enhances the use of Managed C++ by applying STL techniques to the
.NET framework. Components are defined within the namespace
dotnetstl.
-
InetSTL
(http://inetstl.org). The Internet is the medium of the new millenium, and Internet
programming is an important part of many modern C++ programmers' daily lives. InetSTL enhances the use of C++ for Internet
Programming by applying STL techniques to Internet APIs. Components are defined within the namespace
inetstl.
-
MFCSTL
(http://mfcstl.org). Even if it's showing its age a bit, the Microsoft Foundation Classes
are still a widely used technology for the development of user interface applications and components on the Windows platform.
MFCSTL provides software technologies for manipulating MFC classes and APIs. Components are defined within the namespace
mfcstl.
-
UNIXSTL
(http://unixstl.org) Like its stablemate WinSTL, UNIXSTL provides a number of
libraries for programming with today's other main operating system. Components are defined within the namespace unixstl.
-
WinSTL (http://winstl.org).
Microsoft Windows is the pre-eminent desktop platform of our age: whether you love it or hate it, you'll doubtless end up
programming on it! WinSTL provides a number of libraries for standardising the dizzying array of different APIs, simplifying
your work considerably. Components are defined within the namespace winstl.
|
|
Note: in fact, each of the sub-projects is defined in a nested namespace that is aliased to the given one, e.g. WinSTL components
are defined within stlsoft::winstl_project, to which winstl is aliased. However, you need not concern yourself about
that, and can simply use the notional namespace. (See the white-papers for
details of a C/C++ User's Journal article describing this technique.)
|
|
|
|
Directory structure
|
|
After a number of false-starts through the evolution of the libraries' versions, the directory structure has evolved to the following
(where <DMCDIR> is the location in which you've installed the Digital Mars compiler):
|
| <DMCDIR>/stlsoft/ |
Contains all STLSoft and sub-project library files for the current release |
| <DMCDIR>/stlsoft/help/ |
Contains the Compiled HTML Help file and all HTML help files for the libraries |
| <DMCDIR>/stlsoft/dmconfig/ |
Information files and example configuration files to help you with configuring Digital Mars to work with STLSoft (see below) |
| <DMCDIR>/stlsoft/samples/ |
Non-trivial sample projects |
| <DMCDIR>/stlsoft/test/stlsoft/ |
Test files for the STLSoft main project |
| <DMCDIR>/stlsoft/test/atlstl/ |
Test files for the ATLSTL project |
| . . . |
|
| <DMCDIR>/stlsoft/test/winstl/ |
Test files for the WinSTL project |
| <DMCDIR>/stlsoft/inprogress/ |
Contains library files for works in progress, essentially beta release components. Files in this directory will likely be incorporated into the next release, unless rejected |
| <DMCDIR>/stlsoft/inprogress-test/stlsoft/ |
Test files for the beta release components in the STLSoft main project |
| . . . |
|
| <DMCDIR>/stlsoft/inprogress-test/winstl/ |
Test files for the beta release components in the WinSTL project |
|
|
Installation
|
Because this directory structure is incorporated into the Digital Mars distributions, and the STLSoft libraries are
completely header-only, you have three simple options to accessing the library files.
-
You can amend the Digital Mars C/C++ compiler's configuration file, SC.INI, to include a reference to the
STLSoft directory. SC.INI contains various environment entries including PATH, BIN, LIB.
All that needs to be done is to add the stlsoft directory to the INCLUDE entry, as in
INCLUDE="%@P%\..\include";"%@P%\..\mfc\include";"%@P%\..\stl";"%@P%\..\stlsoft";%INCLUDE%
This is the recommended approach. To help you out there is a sample SC.INI file in the <DMCDIR>/stlsoft/dmconfig/
directory.
-
You can add the actual value of <DMCDIR>/stlsoft/ to your system INCLUDE
environment variable.
-
You can include the actual value of <DMCDIR>/stlsoft/ in your individual project
include directories.
Furthermore, if you wish to use the beta release components in the
<DMCDIR>/stlsoft/inprogress/ directory, you will need to add this to your include
paths (by whatever mechanism you prefer, as above). Alternatively, you can specify relative include paths in your source files, as in
#include <inprogress/winstl_clipboard_format_sequence.h>
but once this component has been added into the main project in a subsequent release you then would need to amend your
includes appropriately.
|
|
Upgrades
|
|
At each release of the Digital Mars C/C++ compiler there will be a release of the latest STLSoft libraries (except
in the case where there have been no significant changes to the STLSoft libraries within a release cycle of Digital
Mars C/C++ compiler).
|
|
However, you may wish to secure updates to the libraries independent of the Digital Mars C/C++ compiler release
cycle. In that case, you should visit the downloads section of
the STLSoft website, where the latest release of the libraries are always
available, along with prior versions.
|
|
Once you've downloaded the latest distribution from the STLSoft website, you
can simply unzip the contents on-top of the <DMCDIR>/stlsoft/ on your
system. The structures for the standard and Digital Mars distributions are compatible and, apart from perhaps
getting some new directories under the <DMCDIR>/stlsoft/ directory, you
will not damage your Digital Mars/STLSoft installation. Simple!
|
|
Documentation
|
Documentation is provided in five forms:
-
HTML Help Files
From version 1.6.2 onwards, HTML help
is available for the STLSoft main project and all sub-projects. Available as either a Compiled HTML Help
module (CHM) - compatible with Windows operating systems - or a HTML document set (in zip format) -
compatible with modern browsers on any operating system.
-
Structured and commented source code
The only documentation that is impossible to get out-of-date is the code itself. All STLSoft code
is written for maximum readability, where this does not interfere with code correctness, or does not unduly affect compiler
compatibility.
-
Magazine articles.
The code in the STLSoft libraries have spawned quite a few magazine articles in leading industry
publications. The White Papers page contains an up-to-date list of these publications
along with those presented only on this site.
-
Test programs
Since the easiest way to learn about software is to see it in action, a pertinent test program
for each major component of each library is included in the archive for each version of the libraries (except some early
releases, prior to version 1.4). These programs contain illustrative, commented code that exercise the functionality
of individual components or of libraries as a whole.
-
Sample programs
Since the test programs are both simplistic and boring, there are a number of non-trivial sample
programs, available from version 1.6.3 onwards.
|
|
Forthcoming Projects
|
Additionally, a number of other projects are slated for release in the near future:
- DBSTL DBSTL will bring STL techniques to the use of open database
standards such as ODBC and OLEDB, as well as to the use of proprietary database application interfaces.
DBSTL's website will be located at http://dbstl.org
- WTLSTL Windows Template Library is a library for generating compact
efficient user-interfaces and applications, and is growing in popularity. WTLSTL will bring STL techniques and technologies to
assist developers in working with WTL.
WTLSTL's website will be located at http://wtlstl.org
- XMLSTL The eXtensible Markup Language is fast becoming the language of
choice for information interchange. Incorporating libraries for manipulating the implementations of DOM and SAX from both Microsoft
and XMLSoft, XMLSTL will aid developers in their use of XML by standardising .
XMLSTL's website will be located at http://xmlstl.org
|
|
Licenses
|
|
As of version 1.8.1 onwards, all the STLSoft
are licensed using the BSD license, one
of the licenses ratified by the Open Source Initiative.
|
|
|
STLSoft for DMC++ News
|
12th September 2004:
STLSoft 1.8.1 is released (incorporating RangeLib, and a change of license)
This major release includes a change of license for all libraries - All STLSoft libraries
are (re-)released under the
BSD license - along with
the addition of several new components. It also includes the release of the STLSoft implementation
of RangeLib, implementing the Range concept
invented by Matthew Wilson and John Torjo.
|
11th June 2004:
STLSoft 1.7.1 is finally released!
This major release includes two new sub-projects - .netSTL
and InetSTL - along with a host of new and updated components
throughout the libraries.
|
|
22nd August 2003:
STLSoft 1.6.5 released with Digital Mars C/C++ 8.35.
The latest version of the STLSoft libraries is released with version 8.35 of the
Digital Mars C/C++ compiler.
|
|
2nd June 2003:
STLSoft is bundled with Digital Mars C/C++ compiler.
The STLSoft libraries will be bundled with the
Digital Mars C/C++ compiler, from
version 8.34 onwards. Also, Digital Mars are generously providing an
STLSoft newsgroup for
discussion about the STLSoft libraries, rapid bug reporting/fixing, suggestions
and complaints.
|
|
STLSoft News
|
|
For general STLSoft news check out the STLSoft website.
|
|