⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 readme.txt

📁 STLstlfilt.zip
💻 TXT
📖 第 1 页 / 共 2 页
字号:
the following URL:
    http://www.cuj.com/articles/2001/0107/0107b/0107b.htm?topic=articles

Several substantive changes made to the software since the CUJ article was
frozen for publication render portions of the article out-of-date. They are:

    1. The iterator policy setting in STLFilt.pl was changed from a numeric
        value (1, 2 or 3) to a symbolic value (S, M or L). The original '1'
        setting corresponds to the new 'L' ("Long" or "Large" expansion), and
        the original '3' corresponds to the new 'S' ("Small" or "Short"
        expansion).  The new 'M' means, of course, "Medium" expansion. (Thanks
        to Scott Meyers for suggesting the use of symbolic, rather than
        numeric, designations.)
    2. The STLTask taskbar-based utility was added as a GUI-based alternative
        to the STLFilt.BAT batch file
    3. STLport and VC7/.NET library support has been added to STLFilt.pl.
        The same Perl script now works with all four libraries.
    4. Hash-based containers are now supported (for all libraries that have
        them, anyway...i.e., all libraries *except* native VC6)
    5. The "fine-print status line" I mention in the article actually has a
        name, as I finally learned: the "status bar", and it is turned on and 
        off within Visual Studio via the Tools...Options...Workspace
        checkbox labeled "Display status bar". I recommend you leave it turned
        on; most of the time, this will alleviate the need to scroll the output
        window.
    6. The installation instructions in the article say to place the Proxy
        CL.EXE "somewhere along your system PATH". Beginning with v2.1 of
        CL.CPP (and v2.0 of STLTask), the Proxy CL should be placed directly
        into MSVC's bin directory (...\VC98\bin or ...\VC7\bin).
        See QUICKSTART.txt for the current installation procedure.
    7.  Precompiled versions of both CL.EXE and STLTask.EXE are now included 
        in the distribution. Both programs read configuration information at 
        startup from a config file (Proxy-CL.INI) placed into the Windows
        directory. If the config file is not present, then all options default
        to values configured in the source code and compiled into the programs.
        

================
Bugs/Limitations
================

Perl script:

==> Of the various Perl implementations out there, ActiveState seems to work
    the best. I've had several reports of interprocess bugs when using the
    filter in conjunction with other Perls, such as MKS and Cygwin.
    Therefore, if you experience strange errors involving zombie Perl
    processes and such, first try installing and using ActiveState Perl for
    filtering. You should then still be able to use your *other* Perl(s) for
    whatever else you've been using them for.

==> There are still several kinds of errors that do not get filtered very
    well, including some string-related ones (see tstring.cpp in the
    samples.zip archive, for example) and others relating to some helper
    templates used within the internals of various libraries. 

Proxy compiler:

==> When the Proxy CL.EXE is linked with setargv.obj for support of automatic
    wild-card expansion, the command:

        cl /?   (with or without the space)

    will fail if the root directory of your current drive contains any 
    entries having a name exactly one character in length. Unfortunately,
    setargv.obj does not seem to recognize the slash as an option delimiter,
    and treats the sequence the same as it would "\?".

    Workaround: use /help instead of /? whenever you get a bunch of "illegal
    option" diagnostics while using cl/? .

==> Support for indirect (@filename) command lines is limited to fairly
    typical cases; The proxy CL, when detecting @filename as the *only* 
    argument on the command line, opens the indirect file and looks at only
    the *last* item on the *last* line of it. Filtering is performed only if
    this item has an acceptable C++ extension (one of the entries in the
    filterExt array of strings). That name may have quotation marks around
    it. Thus, indirect command files with more than one line's worth of
    source file names (or when the source file is not the last thing on
    the last line) may behave incorrectly if there is a mixture of
    filtering-enabled and non-filtering-enabled extensions. So far, no one
    has reported to me any VC-generated projects that my scheme fails to
    properly process, but that doesn't necessarily mean it isn't going to
    happen...please let me know if you run across any projects that trip up
    the Proxy CL, and I'll do my best to fix any such issues brought to my
    attention.

    When the first command line arg to CL is *not* an indirect "@" filename,
    then it scans argv right-to-left looking for the first argument that is
    neither a filename with an object file extension (one of the strings
    in the objExt array) nor a string with no extension at all (assumes those
    are options). The decision whether to filter or not is made based on the
    first argument (working from right to left) that *isn't* one of those
    things.

==> Command lines containing escaped double-quotes, as in /D definitions,
    probably won't be handled correctly by CL. It now handles all '"' char-
    acters by prepending a backslash to them. Going further, so as to
    handle quoting of arbitrary complexity such as:
        ... /DHAIRY="Here's a double quote: \" and a backslash: \\"
    would require a full-blown state-driven parser here to handle *all* the
    permutations...for now, anyway, the only way to compile such lines is
    to uninstall the filter (a matter of just a few clicks with STLTask).

When any of the above issues arise and you wish to revert to standard
error messages, the easiest thing to do is use STLTask to uninstall the
proxy CL until you need filtering again. Then use STLTask to install
again. 

If you have problems relating to the project file issues described above,
you might try doing a "compile only" from Visual Studio, with filtering
enabled, instead of building a project.

==================
Debugging Features
==================

CL.CPP and STLTask.EXE have debugging features built-in. CL.CPP supports
runtime debug configuration: set the DEBUG configuration option to true 
to log status messages to a file named CL-dblog.txt in the directory 
configured by the DEBUG_DIR option. For project files, when debugging is
enabled CL.EXE will also make a copy of the temporary project file named
"atfile.txt" and place it into the DEBUG_DIR directory. This may help 
to determine why CL fails to properly handle a project build.

The Proxy CL option LOG_NATIVE_MSGS may be set (via the configuration file
Proxy-CL.INI only) to force the Perl script to log its complete, UN-filtered 
input to a file named NativeLog.txt in the current directory. Sending
me a copy of this file can help me debug the Perl script when issues arise
relating to the filtering algorithm.

STLTask.cpp debugging must be configured at compile time. Set the DEBUG 
symbol to 1 and define the DEBUG_DIR symbol to the name of your
desired log file directory, and STLTask will log various status info to
a file named "debug.out" in that directory.

If you run into a situation where the Proxy CL fails, please let
me know so I can fix it. If you understand the problem and can describe the
circumstances, that's great...if not, I'd be glad to help figure out the
problem and hopefully fix CL for the future; please reduce the project to
the minimum possible configuration that results in CL failure, zip it up
and email it to me (leor@bdsoft.com). I'll do my best to determine the 
problem and correct it. This program is as reliable as it is now *only*
because folks like you informed me about the problems (and even fixed them
for me on many occasions!)

===============
Acknowledgments
===============


Thanks to:

Scott Meyers for putting on his "Effective STL" seminar -- the event that
    inspired this project. 

David Smallberg for Proxy CL idea, allowing seamless integration into MSVC

Thomas Becker for writing the Win32 interprocess communication code in CL.CPP
    and STLFilt.pl

David Abrahams for contributing the long-typename-wrapping algorithm and 
assisting me in the debugging/evolving of it.

The other folks who took the time to email me with bugs and suggestions, and/or
helped with debugging:

    Thomas Becker
    Wilka
    Sam Saariste
    Scott Lewandowski
    Scott Meyers
    Tom Malcolmson
    Jan Stette
    Dominic Mathieu
    Michael Cook
    Andy Philpotts
    Rob Bishop
    John Hattan
    Derek Price
    Bill Torpey
    John Penney
    Jonathan Sambrook 
    Argos
    Matthew Douglass
    Dave Conrad
    Scott McCaskill
    Paul Suggs
    Karl Lean
    Benoit Goudreault-Emond
    Michael Griggs
    Marco Welti
    Ed Kaulakis
    Alex Pirseyedi
    Graeme Prentice
    Larry Evans
    Karl Bouchard

=======
Courses
=======

"Programming is not a commodity" (at least not in my book).

To promote excellence in software development technology, BD Software
offers the following on-site, hands-on seminars for programmers:


==> C++ for non-C Programmers
                   Very intensive, 5-day workshop teaching C++ for those who
                   have never programmed in C. Seminar by me, based on
                   the Stephen Prata textbook "C++ Primer Plus" (4th edition).
                   Prerequisite: *SOME* programming experience, but it
                        doesn't matter in what language.

==> An Effective Introduction to the Standard Template Library (STL)
                   Course by Scott Meyers, who needs no introduction.
                   Teaches the STL to experienced C++ programmers. 4 Days.
                   Prerequisite: Real-world programming experience in C++. 

==> C++ and Object-Oriented Programming
                   5-Day course by Dan Saks, another C++ guru you probably
                   know about.
                   Teaches C++ assuming GOOD (working) knowledge of C. More in
                   depth on OO and C++ subtleties than the first course above.

==> Introduction to Programming in C
                   My own C programming course. Some programming experience
                   (not necessarily in C) is the only prerequisite.
                   4 or 5 days; 5 preferred.
                   What can I say? Not too many folks are still learning
                   "just" C anymore, but if you have two weeks available to
                   learn C++ in, it works out a lot better to take C first and
                   then the C++ and OOP course above than it does to cram
                   both C and C++ into one week. That is, at least until
                   I write a course based on the STL-first approach...

==> Object-Oriented Programming in Java
                   My (I'm co-author) Java course. Does NOT presume any C/C++
                   experience. Uses all public domain / shareware tools (Sun's
                   JDK, ModelWorks' JPadPro (awesome IDE!). 5 Days.
                   Everyone gets a CD full of Java goodies.
                   Again, presumes only some programming experience in SOME
                   language.

==> Introduction to Unix (2-3 days)
==> Korn Shell Programming (3 days)
==> Perl Programming (3 days)

                    I license materials for the three Unix courses above 
                    from a fellow instructor. Good, solid courses, all of 'em.
                    The Perl course is mostly platform-independent, but
                    includes some Unix-specific functionality.



To give feedback on this package, or get additional information on having one
of the courses listed above delivered at your site, please contact:

    Leor Zolman
    BD Software
    74 Marblehead Street
    North Reading, MA 01864-1527
    voice/FAX: 978-664-4178
    email: leor@bdsoft.com
    web: www.bdsoft.com

===============================================================================

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -