Stories
Slash Boxes
Comments

News for nerds, stuff that matters

C++ Answers From Bjarne Stroustrup
Programming Posted by Roblimo on Friday February 25, @12:00PM
from the thoughtful-questions-get-thoughtful-answers dept.
Monday we had over 550 assorted questions and comments for and about Bjarne Stroustrup. Excellent moderation (Thanks, Monday Moderators!) helped cull this mass down to 10 extremely high-quality questions Bjarne has kindly answered in amazing depth, for which he deserves a loud round of applause. Update: 02/28 02:12 by R: Bjarne later took the time to dig through all the comments and reply to some of them. The additional material is appended to the end of the original Q&A session.

C++ Answers From Bjarne Stroustrup

1) Has OO run out of steam?
by rambone

After 20-some years, it's obvious that object-oriented programming is not a panacea. What are your thoughts on the future of the OO paradigm? What other paradigms do you see challenging it?

Bjarne:

Well. It was obvious to me 20-some years ago that OOP wasn't a panacea. That's the reason C++ supports several design and programming styles.

If you like long words, you can say C++ is a "multi-paradigm language," but simply saying "C++ is an OOPL" is inaccurate. I wrote a paper about that "Why C++ isn't just an Object-Oriented Programming Language" (download from my papers page). I presented that paper at OOPSLA - and survived.

In the first edition of "The C++ Programming Language," I didn't use the phrase "object-oriented programming" because I didn't want to feed the hype. One of the problems with OOP is exactly that unscrupulous people have hyped it as a panacea. Overselling something inevitably leads to disappointments.

That said, OOD/OOP is my favorite way of approaching design and programming. It just isn't the right style for every program and for every detail of a program. Some good abstractions are best represented outside class hierarchies. Trying to force everything into a hierarchy - especially into a single-rooted hierarchy - can give truly contorted programs.

I use a lot of simple data abstraction (classes without inheritance) and generic programming (templates and algorithms parameterized on types). However, I don't see these as "paradigms challenging OOP." Rather, they are complementary techniques. The key is always to find designs that fit the problems and use the language constructs that best represent the designs in the code.

Combinations of style can lead to very elegant code. For example,

void draw_all(list& lst)
{
for_each(lst.begin(),lst.end(),mem_fun(&Shape::draw));
}

Here, list and for_each() are examples of the C++ standard library's generic facilities. What they are used for is to invoke a virtual function of a base in a traditional class hierarchy.

You can even write a version of draw_all() that works for every standard container type with Shape* elements:

template
void draw_all(Container& c)
{
for_each(c.begin(),c.end(),mem_fun(&Shape::draw));
}

I chose this example to wake up people who still live in the dark ages and think that C++ is C with a few uninteresting additions.

Naturally, the code generated for draw_all() is as efficient as an list traversal code and the polomorphism used to call Shape::draw() boils down to a call of a function through an array of pointers to functions. The mechanism has been used to invoke device drivers.

New "paradigms" are touted every year, but most are not fundamental and few are genuinely new. Probably the most interesting are those based on "components" such as COM and CORBA. I'm undecided whether these constitutes a "new paradigm" or simply a new set of systems-level building blocks. Would we talk of Unix processes as a new paradigm? Anyway, my main concern with such components is that they are still less than perfectly integrated with programming languages, such as C++, and with the various "traditional" programming paradigms, such as OOP and generic programming.

2) C++ for systems programming
by ajs

C has long been the UNIX-world's systems programming language, and still remains that way. I know you don't like to compare languages, so I'll just ask if you feel that there are any core reasons why C++ either does not make a good systems programming language or failed to capture the interest of the systems C programmers.

Bjarne:

It is hard to teach old dogs new tricks.

Unix was first written 25+ years ago (I first tried in in 1973). All of its interfaces are defined in terms of C function calls, arrays, and structs. By the time C++ became available, there were 10+ years of tradition for almost exclusively using C.

There is no good reason for Unix programmers to avoid C++ and several good reasons to use it. However, there are no end of reasons/excuses offered. Let me list a few:

  • C++ is slow
  • C++ generates bloated code
  • There are no good C++ compilers
  • C++ is complicated
  • C++ doesn't offer much to systems programmers
  • "Advanced" C++ features are unsuitable for systems work
  • C++ code isn't portable
  • C++ doesn't have an ABI.
These are all either flat wrong or largely irrelevant. Some of these reasons make some sense on other systems (say on a minute embedded system without proper C++ tools), but not on Unix/Linux. Let me briefly try to explain why. Naturally, a complete discussion would take hundreds of pages because it is not possible to prove a negative. That is, it is not possible to prove that there isn't some problem that could be unsolvable for somebody.
  • C++ generates as good code as C for equivalent programs. Just try it.
  • C++ was designed to do that and current compilers deliver on that promise.
Naturally, you can write poor programs in any language. C++ is a powerful tool and in the wrong hands it can generate code that is *obviously* contorted and bloated. That may be preferable to the traditional spaghetti that poor programmers produce in C. Note that someone who is a good C programmer isn't automatically a good C++ programmer. Many problems have been caused by good C programmers assuming that they could adopt a semi-random collection of C++ language features and then magically become a good C++ programmer in a week.

A C programmer can benefit from C++ in a week, but only by sticking to a subset of C++'s facilities and by using libraries.

C++ supports powerful techniques that are at best weakly supported by C and learning these techniques takes time. C programmers might do well remembering how long it took them to become "master level" C programmers. I see no reason why it would take less time to become a "master level" C++ programmer.

The current generation of C++ compilers is far superior in standards conformance to compilers from a couple of years ago. The optimizers are shared with C. This can be a problem because it precludes some useful optimizations that cannot be done for C, but at least sharing of major compiler parts should convince sceptics that equivalent code it produced.

I'll deal with the roots of language complexity in my answer to question 9. Here, I'll just point out that many of the C++ facilities directly help people who needs to write efficient, reliable, and maintainable code. If you don't use these facilities, you typically end up simulating them with lower-level language constructs.

Even the "new"/"advanced" features of C++, such as templates, exceptions, and run-time type information (RTTI) are designed to meet the 0-overhead rule. If you need such features, it is more efficient (in run-time and memory space) to use them with a modern compiler than to fake their functionality in C. I do not know of a C++ language feature that has not been found useful and affordable by someone in some systems or embedded application.

Naturally, if you don't need a feature (often, RTTI is not needed) or if is unsuitable in a particular context (I can think of programs where exceptions would be unsuitable), you just don't use that feature. The 0-overhead rule is there to allow such decisions. This is not so different from not using a C feature that is unsuitable for a given application (in some embedded systems, malloc() is banned).

C++ is as portable as C. In both cases you need to encapsulate the system dependences to ease portability. Large classes of programs are portable across Unix platforms, and some programs can be made portable across other platforms also. The techniques are well known and when used well, C++ even has an edge when it comes to formalizing the notion of a system to allow trivial portability. For example, see the C++ library that defines the ACE platform (link on my C++ page).

The technical hardest problem is probably the lack of a C++ binary interface (ABI). There is no C ABI either, but on most (all?) Unix platforms there is a dominant compiler and other compilers have had to conform to its calling conventions and structure layout rules - or become unused. In C++ there are more things that can vary - such as the layout of the virtual function table - and no vendor has created a C++ ABI by fiat by eliminating all competitors that did not conform. In the same way as it used to be impossible to link code from two different PC C compilers together, it is generally impossible to link the code from two different Unix C++ compilers together (unless there are compatibility switches).

The current solution is usually a combination of using a single compiler and of providing C-level interfaces. This is not ideal - see also my answer to question 10.

That said, I think the main problem is educational. Many simply have seriously inaccurate ideas of what C++ is and what can be done with it. Often "inaccurate ideas" add up to a strong disincentive to learn. C++ is now very different from Release 1 from 1985. The ISO standard for C++ was ratified in 1998 and current compilers approximate it well enough for me to move programs that stress the newer facilities from compiler to compiler for performance testing on a variety of platforms. The standard library makes a difference here.

3) What would you do differently?
by spiralx

If you could go back to when you designed C++, what would you change and why?

Bjarne:

You can never go back. However, I think my most obvious mistake was not to introduce templates before multiple inheritance and not to ship a larger library with Release 1 of my C++ compiler. The two mistakes are somewhat related.

The reason I didn't ship a library was that I didn't know how to write one that was good enough. To get efficiency and type safety for containers, you need templates (and I didn't have an implementation supporting templates until 1988 or 1989). However, templates are not enough, you also need a design for containers and uses of containers that can deliver that safety. We didn't have such an architecture until Alex Stepanov came along with the STL. If you want a real firework of interesting opinions and insights, read this interview with Alex. The STL is the nucleus of the C++ standard library, providing the standard containers and algorithms, and the framework for their use and their extension with user-defined containers and algorithms. Naturally, this is extensively discussed in "The C++ Programming Language."

One problem with introducing MI before templates was that it encouraged further overuse of class hierarchies. Templates provide a simple and efficient alternative to some of the more contorted uses of inheritance.

Let me just mention something I wouldn't have done differently: compatibility. Had C not been there to be compatible with, I'd have chosen compatibility with some another language. Innovation should focus on improvements and what works should be left as unchanged as possible. That way, people keep their existing tools and techniques and can develop from a base that is functionally complete. Also it saves the effort to re-invent the wheel and to teach "new" stuff that is equivalent to old stuff. Thus, C++ is as close to C as possible - but no closer.

The flip side of this is that you have to deal with old mistakes and with compatibility problems. For example, I consider the C declarator syntax an experiment that failed. Nevertheless, I adopted it for C++. The alternatives and improvements I considered at the time would not have improved matters. I rate is as a minor problem. The more serious problem is to maintain closeness of language definitions as C evolves.

Also, there is no major language feature, I'd remove for Standard C++ - even in retrospect. New major facilities have to be added with care. Often, a library can provide functionality that people thought required language changes.

I think the C++ standards committee did a good job. It is not easy to create a consensus about a specification. Commercially competing companies have to agree and nations with conflicting traditions of standards work have to be satisfied. However, I think that the the time and effort was well spent. Standard C++ is a better approximation to my ideals than any previous version, and a great standard library to go with it. The time and effort is necessary unless you want to give free reign to "de facto standards" and proprietary languages. My 3rd edition describes ISO standard C++ and current C++ compilers approximate the standard.

4) Why no templated typedefs?
by Venomous Louse

Well, this is weird. Just the guy I wanted to talk to this morning!

It would occasionally be handy to have typedef templates (or template typedefs?! help!), something like this:

template< class T >
typedef bool (* func)( const T &r );

. . . but that doesn't seem to be legal. I don't recall seeing anything about this issue in The Design and Evolution of C++. So what's the deal?

Bjarne:

I, and the standards committee, underestimated the importance of templated typedefs. My guess is that they will be added in the future.

Actually, D&E (pg 357) does discuss templated typedefs and points out a technique that is often an alternative:

The extension is technically trivial, but I'm not sure how wise it would be to introduce yet another renaming feature.

Derivation also allows for partial specification of template arguments in the definition of a new type: template class X { /* ... */ };
template class XX : public X { };

I guess that in this case, my reluctance to add new features without a clear practical need caused problems. I'm more often accused of the opposite mistake - to be too aggressive in adding features - but as people learn to use what is available, new requests based on new experience are starting to appear.

Incidentally, your example "function of T returning a bool" is often best represented as a function object. And function objects are natural templates:

template< class T >
struct Predicate {
bool operator()(const T &r) { /* ... */ };
};

This way, you don't need a typedef; you can simply say:

Predicate* p;

Function objects also inline better than pointers to functions, so their use leads to faster code as well as cleaner code.

In general, I recommend "The Design and Evolution of C++" for people with "why is/isn't it like that in C++?" questions.

5) Question...
by MrHat

I (and maybe most of "us") know you solely through your creation of the C++ language and your assistance in authoring the ANSI standard for said language.

Aside from this one (albeit major) project, what do you work on from day to day? What projects are you currently involved in? Do you have any more language definitions/standards in the pipeline?

Bjarne:

C++ related work is a major part of my day. The standard is in "maintenance mode," but it still requires a bit of attention. I do some work related to libraries and programming techniques (I'll have a paper on "wrappers" in "The C++ Report" later this year), and I worry about the poor state of C++ education - and the way C++ is often seriously misused by misguided programmers. Look at me paper "Learning Standard C++ as a New Language" (download from my papers page). As you can see, I write a bit, give talks, and interviews.

In the standards committee, I'm spending most time on the performance working group. This group was created to investigate sources of inefficiency and implementation and programming techniques to deliver "lean and mean" code. Embedded systems is one area where this is needed. The current language allows close-to-optimal solutions, but not every implementation is well tuned for that degree of efficiency, and not every programmer knows the basic techniques for delivering compact and efficient code.

There is - as ever - much talk about extensions and new libraries on the net, but the C++ community still haven't learned to fully utilize the new facilities. My guess is that there is a lot of benefits to be had from better libraries. The Standard library in general and the STL in particular shows some of what could be done. Eventually, some of those new libraries will be standardized.

I'm trying to understand distributed computing better. To that end I read a lot and experiment with computerized gadgets. I worry about mobility, reliability, fault tolerance, and security. These areas of research were among the ones that led me to the design of C++, so in a sense I'm returning to my roots in "systems." Being a manager at AT&T Labs - Research also takes some time, but not as much as you might think, and it doesn't feel like real work: in that capacity, I don't produce code or technical literature.

6) Multiple inheritance
by MosesJones

Three linked questions:

a) Do you think that multiple inheritance is a requirement for a true OO Language?

b) When designing a system with multiple inheritance what do you see as the pitfalls to avoid, especially when it comes to maintainability?

c) Do you know of anyway to simplify the readability of multiple inheritance to enable first time users to do less damage?

Bjarne:

If you rely on static (compile time) typechecking, you need MI. If you don't have MI, many programs get contorted and you have to use explicit type conversion (casting) far too often. I wouldn't claim to know what - if anything - is "a true OO Language" but if you have to use explicit type inquiry essentially all the time, you don't have one.

I don't see MI as a particularly serious source of pitfalls. The obvious problem - which MI shares with single inheritance and every other powerful language feature - is overuse. I tend to use MI for simple aggregation and for adding implementations to interfaces. For example:

class network_file_error : public network_error,
public file_error {
// ...
};

and

class interface { // abstract class
// pure virtual functions
};
class base_implementation { // useful functionality
// data, functions, virtual functions
};

class my_implementation
: public interface,
protected base_implementation {
// data, functions
// override some base_implementation functions
// override all interface functions
};

In the latter case, you then have the users of my_implementation access it exclusively through pointers or references to interface. That was user code is independent on the implementation class and the system doesn't suffer from the so-called "brittle base class" problem. The implementation class can be exchanged for an improved version without recompilation of user code (except my_implementation itself).

Following those two styles avoids most problems. Naturally, you can find a more extensive discussion in "The C++ Programming Language (3rd Edition)" and in the new "The C++ Programming Language (Special Edition)." (See my home pages for details, sample chapters, reviews, etc.).

Actually, questions about multiple inheritance usually indicate that the questioner has been distracted into technicalities. To almost all programs, questions about use of abstract classes, templates, exceptions, and the standard library would bring far more benefits. MI is necessary in a statically typed language with inheritance, but it is not among the features that should be used most often.

If you focus on defining concrete classes to represent simple types and abstract classes to represent major interfaces, a good design is likely to emerge. Then, MI may or may not be needed to complete the program, but will be pretty obvious where it might be needed.

7) Questions
by Edward Kmett

Is there any hope for the introduction of constrained templates? Right now using templates is an exercise in willpower for the programmer. I know that constrained genericity went before the committee when templates were first introduced, but has there been any thought to revisiting that decision?

Another item that has gained a lot of momentum in the Eiffel community is Design by Contract, for which I would love to see a standardized approach in C++, but I doubt I'll ever see it.

Lastly, Bjarne, you were quoted once as saying 'When (not if) reference counting becomes available in C++ that it would be optional' (in a book on object oriented programming languages of which I cannot find on Amazon at the moment to post the ISBN). Has much progress been made on the front of making reference counted objects available? Or has your thinking changed since you were quoted?

Bjarne:

Actually, what I said was something like "When (not if) auotmatic garbage collection becomes part of C++, it will be optional".

Reference counting can be very useful for less frequently used resources, but I'm not advocating it as a general mechanism for keeping track of memory. C++ has good mechanisms for keeping memory management under control (such as constructors and destructors and the standard library containers), but if you need something more automatics, plugging in one of the available garbage collectors is the right answer (see section C.9.1 of "The C++ Programming language", my C++ page, or my FAQ).

Incidentally, the ISBN for the new hardbound "Special Edition" is 0-201-700735 and the ISBN for the softbound "3rd Edition" is 0-201-889544.

"Constraining" templates without taking away their power isn't as easy as it sounds. See D&E for a detailed discussion. One problem is that if you express template argument constraints in terms of base classes, you warp your system design towards a style where every property becomes a base class. This easily becomes a mess of over-used multiple inheritance and indirect expression of things that are better said directly. For example, It's clearer to say that a class must have a << operator than to say that it must be derived from "Printable" (that then has a << operator). The more direct code is shorter and generates better code than does the version where a base class was added to represent a constraint.

Specialization and partial specialization provide much of the expressive power that people want from constraints. For example, if I have a general sort template

template void mysort(Container& c);

and I want want special sort algorithms for vectors then I can simply write:

template void mysort(vector& v);

I'd like much better error messages from templates with type errors. Some of this can be done with better compiler technology (people are working on that) and some will be hard to do without some kind of template argument constraints/checking (but I don't know how to do that). Fortunately, a programmer can help. Consider the example I gave in my answer to question 1:

template
void draw_all(Container& c)
{
for_each(c.begin(),c.end(),mem_fun(&Shape::draw));
}

If there is a type error, it will be in the resolution of the fairly complicated for_each() call. For example, if the element type of the container is an int, then we get some kind of obscure error related to the for_each() call (because we can't invoke Shape::draw() for an int).

What I really wrote was:

template
void draw_all(Container& c)
{
Shape* p = c.front(); // accept only Shape*s

for_each(c.begin(),c.end(),mem_fun(&Shape::draw));
}

The initialization of the spurious variable "p" will trigger a comprehensible error message from most current compilers. Tricks like this are common in all languages and have to be developed for all novel constructs. In production code, I'd probably have written something like:

template
void draw_all(Container& c)
{
typedef typename Container::value_type T;
assert_equiv(); // accept only Shape*s
for_each(c.begin(),c.end(),mem_fun(&Shape::draw)); }

This makes it clear that I'm making an assertion. I leave the definition of assert_equiv() as an exercise to the reader :-)

This leads use to the second part of the question: design by contract. Since "design by contract" is a design style, you can apply it to C++. To do so you need to use asserts systematically. I personally prefer to rely on some specialized assert templates (see my 3rd edition). I agree that some such templates are good candidates for standardization as part of the library.

However, I don't think we'll see direct language support for things such as preconditions and postconditions. I don't think that pre- and postconditions written in essentially the same language as the program itself are a significant improvement on asserts(). Also, I'm not sure that the checking of class hierarchies afforded by language-supported conditions is worth the effort. For starters, people can gain very significant benefits today using current standard C++ simply by using assertions more systematically.

8) A quick question (ha!)
by jd

C++ is an Object-Based, rather than a "pure" (in a Software Engineering sense) Object-Oriented language. However, it's still centered around the notion of objects, rather than procedures.

However, all existing processors are procedural, and there is no real concept of an OO CPU.

Do you feel that OO languages, such as C++, will result in OO systems, at the hardware level, or will it always be easier to confine OO thinking to the abstract, using extremely complex compilers to translate between OO and procedural paradigms?

Bjarne:

One of the things I worked with before designing C++ was architectures for direct support of "higher level" facilities. I came to the conclusion that as long as hardware were growing cheaper and faster at a rapid pace, sowtware-based approaches would have an advantage over high-level hardware. These advantages are in cost, in flexibility, in the number of potential users, and in the vintage of computers that the software could run on (it takes longer to design and build a high-level machine than a traditional one).

In the forseeable future compilers mapping high-level constructs onto low-level hardware primitives will be the dominant approach.

9) C++ complexity vs. OOP simplicity
by hanwen

[Sorry for the potential inflammatory matter in this question].

How do you relate the complexity of current C++ with the much-touted simplicity of Object Oriented Programming?

Longer explanation:

Over the years, the C++ implementation has ballooned; If I recall correctly, your book the C++PL has more than doubled in size. C++ has become a very large and complicated language, and I doubt whether there are any individuals (besides you, that is) that know the entire definition by heart, let alone teams of programmers.

This means that it is not practical to use C++ fully in any project, and one also has to set strict guidelines for a project what features to use and which not. Seen, in this light, it is doubtful whether C++ has made writing software more manageable. So I think, that as tool for writing better software more efficiently, C++ is a failure.

C++'s evolution was motivated by a few mottos (you don't pay for what you don't use, C compatibility, etc.), and seen in this light, C++ is a success. Do you think that these mottos need reconsideration?

Bjarne:

Inflammatory? I think you are remarkably polite and technical here - and that your "editor/moderator" weeded out the real flames :-)

Complexity has to go somewhere and I think that putting it in the language in the form of direct support of common and powerful techniques is a good idea (or else I wouldn't have done it :-). Have you seen C code that simulates class hierarchies, parameterized types, or exceptions? Such code tend to be a complete mess of pointers, casts, and macros. In C++, such code can be clean and simple. Most importantly, the constructs have well-specified semantics rather than just comments explaining the intent of code fragments. What has happened is that the complexity has been transferred from the code to the language definition (and compiler).

You are right that there is little need to use all of C++ explicitly in every project. However, that doesn't mean that you need to impose restrictive "gudelines". When did you last use all of Unix or all of NT explicitly on a project? Would you like some manager to tell you exactly which OS facilities you could and couldn't use - independently of the nature of a project?

The typical "guideline" is straight out of the dark ages, based on information about the state of the world years ago and on strange assumptions on what is and isn't complicated. In the defense of people issuing such "guidelines," it must be said that the educational establishment has on average done a poor job at focussing students on the key programming techniques that are effective in C++. The results have been much muddled C-style code combined with bloated Smalltalk-style class hierarchies. The common denominator for these sub-optimal uses of C++ is losts of casts and lots of macros.

That said, I have seen many successful C++ projects (many more than failures) and much good C++. By good I mean, elegant, efficient, reliable, and maintainable. So, for many, C++ has delivered exactly what it was designed to deliver. Please remember that I made few, specific, and well-documented promises about C++ (See D&E and "The C++ Programming Language"). I was not a contributor to commercial OO hype.

I think I see a correlation between successful use of C++ and respect for its limitations (the deliberate constraints on its design) and a willingness to adapt design approaches to the facilities offered. For example, if you reject the use of abstract classes and build deep hierarchies with lots of data defined at each level, you really shouldn't be surprised by long compile times, frequent recompilations, and problems understanding what is defined where. Similarly, if you refrain from using C++ facilities and litter your code with C-style strings, arrays, plain structs, and lots of pointers into low-level data structures, you shouldn't really be surprised to get C-style problems rather than the promised benefits from C++.

The main tutorial presentation of the C++ language was 186 in the 1st edition, 282 pages in the 2nd, and 360 pages in the 3rd. Part of that increase is a greater emphasis on programming technique. The rest of the increase in book size (from 327 pages in the 1st edition to 1040 pages of the new special edition) is due to more information on programming and design technique, and the standard library. The "special edition" has 363 pages on the standard library - in addition to the uses of the standard library as examples in other parts of the book.

10) Questions for Bjarne
by scherrey

I was introduced to the C++ language in 1989 on the BIX online service by you and Greg Comeau whereupon the both of you set out to demonstrate (and finally convinced me) that this OO stuff wasn't just a fad and that C++ was a language that could efficiently implement it. This was during the time when Computer Language magazine had there "Language of the Month" feature article so languages had a tendency to come and go quickly back then.

As I recall, the two major goals that you stressed were a) to build a language that could get a handle on these huge projects that C was having difficulties with and b) to provide a balance of features and efficiency so that a developer should have to pay for features he doesn't use.

From my own experience using C++ in an extreme variety of projects (including very cramped embedded systems and large, multi-platform enterprise systems), there's no doubt that the great progress has been made on the first goal and that the second might have been fully achieved.

The biggest disappointment to me, however, has been the lack of ability to fully replace plain-old-C in system level development which is an area that stands to gain the most from the language's abstraction features and your stated goals of the language. I understand that early on, it would have been impossible to define standard ABI's since implementation techniques for things such as virtual method and inheritance resolution were very experimental. Now that a full decade has gone by and a surprisingly strong standard has been produced, these differences in implementations are more contrived than based on architectural considerations.

Presently the Open Source movement is growing wildly in popularity in commercial and non-commercial segments of the industry. Unfortunately, C++ cannot be used to provide linkable API's without either downgrading to severely limiting C-based linkage or forcing everyone to use the same compiler that wants to call your library because of non-standard representations of structures and calling conventions.

Do you think that standardized application binary interfaces should be a priority time now? If so, what should be the mechanism used to define these interfaces (defacto vs. formal standards, etc), who should do it, and what can be done to encourage this development?

Bjarne:

Hi Ben,

I think I nailed the efficiency, the generality, and to some extent the elegance. However, I underestimated the linker problems. I may also have underestimated the problems stemming from C compatibility.

If I were a platform provider, I would have made a C++ ABI a priority a couple of years ago, so that all vendors on my platform could be ready to provide conforming implementations when the compilers reached a high degree of standards compliance. I know such efforts have been started by Sun for SPARC and by a group of vendors for Intel's upcoming Merced architecture (IA-64, see http://reality.sgi.com/dehnert_engr/cxx/).

I would encourage everyone - and especially people who write software intented as part of a collaborative efforts - to encourage such platform ABI standards. If you are among people who can, lobby for a C++ ABI on your favorite platform. Unfortunately, I don't have specific suggestions on how to do this.

The compatibility with C at the system interface level has encouraged people to use C-style strings, arrays, and structs, where they would have been better off with some higher-level abstractions presented as classes or templates. Instead of leaving the low-level facilities at the system level and within the implementations of classes, people have let the low-level constructs - and pointers to them - permeate their designs. Type errors, wild pointers, array bounds errors, and memory leaks are the obvious results. Lots of macros and casts often adds to the obscurity of the code. It saddens me to see some of the unnecessary messes people get themselves into.

Poor educations is part of the problem and better education must be part of the solution. However, education can only do so much. Libraries and tools must that takes advantage of modern C++ must become ubiquitous before we can expect novice programmers to venture out of the C subset and apply more powerful techniques.

For starters, people ought to realize that starting to learn C++ is easier than starting to learn C. The optimal initial subset of C++ to learn is not "most of C" and C++ can provide a much smoother learning curve than is commonly done. See "Learning Standard C++ as a New Language" (download from my papers page) for a further discussion.

We have always had applications and specialized libraries that used C++ to give programmers a higher-level environment to work in. One significant aspect of the standard library is that it provides an example of that to everybody. Writing code using standard facilities such as string, vector, map, and algorithms really can change the way people program and the way people think about programming. I hope to see the techniques used for defining and implementing the standard library applied in many other areas to yield equivalent benefits in source code size, type safety, code clarity, and run-time efficiency.

I think the time has come to experiment with the more advanced/interesting parts of Standard C++. For example, my new Standard-Library Exception Handling appendix shows a style of programming that departs rather dramatically from "C common wisdom" yet leads to simpler code. This is not written for novices, though, but it gives a peek into the inner workings of the standard library.

Naturally, we must be more cautious in production code and there compatibility concerns with older code weighs stronger. However, we should not be so bound by older styles and compatibility that we never dare try out more modern and more effective styles. There now are native C++ styles, and we should use them.

-----------

I did take peek at the "raw questions" on slashdot.org. I had to resist the temptation to explain all of C++ here, and explain how to use it, and explain why the facilities are the way they are. For more information, have a look at The C++ Programming Language (Special Edition), The Design and Evolution of C++, and my papers.

It appears that I'll have to update my FAQ with several new questions, but that'll take me a few weeks.

Thanks for asking hard questions.

- Bjarne


Update: 02/28 02:14 by R: Additional comments...

Comment by Anonymous Coward
Friday February 25, @12:53PM EST (#44):

Some really, really interesting stuff. I'm going to forward this to everyone at work here.

My only negative question is did he have to plug his books so much?? It seems like he never passed up a chance to "refer to my 3rd edition of C++PL", etc..... I tend not to trust people who plug themselves and their products too much.

This, of course, is a minor concern. Thanks to /. for getting this great interview!

Bjarne:

Imagine a radio interview with a serious painter or sculptor. To such an artist, his/her work is what matters, but there is no way that work can be presented on the radio. You would expect many references to individual works and to museums where people can go to see such work. Descriptive words simply aren't enough. Poor artist can compensate by distracting the discussion away from their work and into their personal lives or politics, but that's not an option for serious ones.

I'm not an artist, but for an interview like this, I have a similar problem. I want to show code and serious discussions of problems, but the Q&A format doesn't allow that. My solution is to refer to my published work and to my homepages.

After all, my published work are the primary sources on C++. So, unabashed, if you want more see my home pages, read TC++PL, D&E, or my papers.

C++ and scientific computing
by J. Chrysostom on Saturday February 26, @12:32AM EST (#308)

As a soon-to-be graduate student in scientific computing, I sit and wonder sometimes why the support for mathematical and scientific computation in C++ is so limited. FORTRAN, the ugly and unmanageable beast that it is, is the only haven for computational mathematics.

Bjarne:

Have a look at the links to numeric libraries in C++ (such as Blitz++, POOMA, MTL, and ROOT). Maybe also track down some of the numeric C++ pages.

Comment by Davorama
Friday February 25, @12:37PM EST (#22)

These other questions were so great I didn't make the cut but maybe you folks have opinions you'd like to share?

What do you think of template meta programming? Do you consider it a boon, enabling clever programmers to do outrageously cool things like the Blitz project? Or is any benefit derived from it's use washed away by the obscure, nearly unreadable code it takes to implement it?

Bjarne:

I really like some of the things being done with C++ in numerics. The common thread is that templates are used to eliminate spurious temporaries. The results tend to beat Fortran in its own game while maintaining Math textbook notation. On my homepage you can find links to POOMA from LANL, Blitz++ from Warterloo U., and MTL from Notre dame. TC++PL has an explanation of the basic technique in the Numerics chapter.

I don't mind the obscure code in the implementations. Actually, I find most of that code far less obscure than, say, C kernel code. Where efficiency is paramount, you shouldn't complain too much about obscure optimizations, and anyway if you are a real user, you shouldn't read the implementation code.

Comment by sethg
Friday February 25, @01:12PM EST (#65):

A common theme in the answers seems to be "that complaint is based on outdated information; get a new compiler that follows the standard and use the STL."

For the benefit of us C++ newbies, does anyone maintain a chart showing which currently-available "C++" compilers violate which sections of the C++ standard?

Bjarne:

A first approximation: Compilers currently shipping from major suppliers are reasonably up to date (I use them). Examples include. Borland, GNU, Metrowerks, Microsoft, and SGI.

For more details see LANL's list (link from the POOMA site, see my C++ page) or a site in NZ that tries to keep track. Some vendors, such as Borland, keep the results of the Plumm Hall validation suiye public on their websites.

And, yes. It is my opinion that a very large proportion of problems reported with C++ can be traced to misunderstandings and misuse. A modern C++ implementation is a prerequisite for trying out some of the techniques that I'm suggesting, but please don't think that a new compiler by itself will help much. You need to actually change the way you work - and unfortunately there are many real-world factors that makes such changes hard (legacy code, lack of time to learn new techniques, co-workers, antique style rules, etc.). I dit not say it would be easy, just that it is possible and that many have succeeded.

Comment by hanwen
Friday February 25, @01:25PM EST (#77)

-- much stuff omitted --

Maybe nowadays some of my gripes may be soothed by the Standard Libraries, but I don't feel like learning yet another big C++ component, all the more because I know that afterwards C++ will still not be good enough (or will it ever have reflection, higher order functions, GC?)

In this light, I find your statement that "starting to learn C++ is easier than starting to learn C" dangerous, as are the examples in your "learning C++ as a new language paper" for they imply that any of these two languages can or should be a "first" language.

Do you really want people grow up with a language that has distinction between non-immediate objects on the heap and stack, no automatic garbage collection, pointers, no initialization, no higher-order anything?

You're educating people about C++: fighting misconception, telling them where it is good for. But you're not telling them what it is bad for. C++ is immensely popular, and people easily get the misconception that this popularity makes it a good language to start programming with, or to write their highly tweakable programs, etc.

Bjarne:

Actually, yes. I don't feel that it is right to start off people with a language that they don't have a chance using once they graduate. The Lisp and functional language community failed to make automatic garbage collection and higher-order everything mainstream even though they had the enthusiastic backing of the academic and educational establishment for more than two decades. Clearly, I don't feel that leaving people with a lower-level language like C is optimal either.

Given the current miserable state of programming and design education, C++ can be a major advance. Of course, people can also fail to take advantage of C++'s abstraction mechanisms and fall back to writing the equivalent of assembly code in C or C++. Through STL, the C++ community may have introduced more people to functional programming techniques and may have applied such techniques to more real-world problems than all previous languages put together. The fact that function objects are not the most flexible "closures" available doesn't detract from the fact that people understand them, like them, and use them.

The "Learning Standard C++ as a New Language" paper (link on my papers page) clearly states that I think that these approaches scale - and argues why. Looking at C++ as it was in 1988 (no templates, no exceptions, no RTTI, and no standard library) is really to look at a different language - one that simply doesn't support most modern C++ techniques.

If you want garbage collection, then there are excellent free or commercially supported garbage collectors available for C++ (see links from my C++ page). One reason that the C++ garbage collectors are so effcient is exactly that C++ has the distinction between stack-allocated objects and free-store-allocated objects.

Comment by Anonymous Coward
Friday February 25, @02:54PM EST (#118)

Yeah this is the guy who at one time usurped the name "C" for his new language, and was referring to K&R as "old C" around AT&T ... until Dennis Ritchie told him to knock it off :)

I think he does acknowledge that the committees have straightened out a lot of the problems in the earlier versions of the language, and I don't think he would claim current C++ is perfect.

Given his success and recognition, I'd probably be a bit arrogant myself :)

Bjarne:

I don't actually think that I'm seriously "humility deficient".

Remember, I worked with Dennis (though not closely) and closely with Brian Kernighan for more than a decade. I don't think I "appropriated" the name "C", but if I had, nobody would have had a better claim to it :-)

It was not me who referrend to C as "Old C." It was me who acted to defuse the confusion and the possible slur on Dennis by finding a name for "C with Classes" that was less likely to cause confusion: C++.

Also, I worked hard in the committee (few language designers have bothered with such "tedious details"), and I think the committee did a very good job.

Making Linux Beautiful | Mating Human Cells With Circuitry  >

 
Slashdot Login
Nickname:

Password:

Don't have an account yet? Go Create One. A user account will allow you to customize all these nutty little boxes, tailor the stories you see, as well as remember your comment viewing preferences.

Related Links
  • Linux
  • Slashdot
  • Intel
  • papers page
  • this interview with Alex
  • D&E
  • papers page
  • AT&T Labs - Research
  • my C++ page
  • my FAQ
  • papers page
  • Standard-Library Exception Handling
  • The C++ Programming Language (Special Edition)
  • The Design and Evolution of C++
  • my papers
  • my FAQ
  • Bjarne
  • R
  • my home pages
  • a site in NZ that tries to keep track
  • questions and comments
  • Bjarne Stroustrup
  • R
  • More on Programming
  • Also by Roblimo
  • Interviews
    Welcome to the interviews section - this is place to come to read the assorted conversations that Slashdot and the readers have had with various people involved in the Internet, computers, or anything of interest.

    This discussion has been archived. No new comments can be posted.
    One of Bjarne's articles on the Web... (Score:4, Funny)
    by mav[LAG] (m@verick.co.za) on Friday February 25, @12:18PM EST (#6)
    (User Info)
    ...came up at me like this:

    Why no single programming language can solve every need. By Bjarne Stroustrup
    The Red Herring magazine
    From the April 1999 issue
    Why would investors or executives care what programming languages their companies use? After all, customers don't care, and shouldn't. When I dial an 800 number, I don't stop to consider which language was used to write the program that translates it into the number of a phone on someone's desk. But software is crucial to the products and services we deliver -- and the programming languages we use to write that software can make the difference between success and failure.

    [an error occurred while processing this directive] LANGUAGE ARTS
    A good programming language allows programmers to express the ideas of an application simply, directly, and affordably. It gives programmers who want to improve on a program a decent chance of grasping the structure of the system. This is critical for a software development organization's effectiveness: a programming language that makes the structure explicit helps engineers and makes it easier for software tools to analyze and display programs.

    I'm not sure that the programming language used to write the software that generated this page has made that difference between success and failure :)


    "Am I paying for this abuse or is it extra?" - Edmund Blackadder

    Server Side HTML (Score:1)
    by delmoi (delmoi at hot mail dot com) on Friday February 25, @02:47PM EST (#115)
    (User Info)
    They were using serverside HTML on apache, as that the standard error message. I know that wasn't really the point of your post... but...

    [ c h a d   o k e r e ]
    "Subtle Mind control? why do html buttons say submit??
    ObjC (Score:0, Offtopic)
    by PHroD (zephcATearthlinkDOTnet) on Friday February 25, @12:19PM EST (#7)
    (User Info) http://hotsos.8m.com
    i just dig objective-c more than C++ ...i find it more elegant and easier to write for and read (comments are alomost unnecessary as the code reads almost like english!) I think most people that say they cant understand it just have to wrap their brains around a few ideas in it, and maybe some not-exactly-C syntax, and they will discover how powerful an OO language it can be :)

    "There is no spoon"-Neo, The Matrix
    "SPOOOOOOOOON!"-The Tick, The Tick
    "Redeyes! Didn't expect to see you so...SPOON!"-Blue Raja, Mystery Men
    Re:ObjC (Score:1)
    by OaITw on Friday February 25, @12:59PM EST (#52)
    (User Info)
    I would grant you that it is easy to write and read, but it suffers from bad association with the horrible compiler that apple puts out for NT. God am I glad I don't have to work with that everyday anymore. I never had a chance to try the compiler on the MACH system or on a MAC but I have been told by people who have that the IDE is weak compared to Visual Studio/Borland Builder type IDEs. Of course I do most of my programming on a SUN system without an IDE so that is not terrible critical. Now that I think about it, it was the IDE and WebObjects together that was buggy. Just random thoughts. Forgive.
    Re:ObjC (Score:2)
    by anatoli (anatoli@my-dejanews.com) on Friday February 25, @01:14PM EST (#66)
    (User Info) file:///unix
    As Bjarne once said, Smalltalk is the best Smalltalk around. And ObjC is just C that tries to be Smalltalk.
    --
    Industrial space for lease in Flatlandia.
    Re:ObjC (Score:0)
    by Anonymous Coward on Friday February 25, @05:24PM EST (#182)
    It is in the interest of your personal safety that you read this. My name is Amadou. I was shot to death by N.Y. police officers for fitting the 'description' of a rapist. That is to say I was a person with dark skin. I was shot because my skin color mistakenly identified me as someone who might possess a gun and attempt to shoot police officers. I had no gun. I had no gun and now I am dead because I was unfortunate enough to have dark skin color matching that of a rapist. The New York police officers believed I would shoot them because of my skin color. The belief of danger means the four police officers were legally entitled to shoot me 46 times. I am dead. I had no gun. I was not a rapist. The police officers who shot me are found NOT GUILTY of any of the charges brought against them arising out of my murder. I was unfortunate enough to have dark skin and to find myself in front of a firing squad of white police officers who mistook me for a rapist with a gun about to shoot them. I still have dark skin but now I am dead. The officers walk free. They can shoot you next. They need only believe you to be a threat. I hope that you do not have dark skin.
    Re:ObjC (Score:2)
    by alkali (alkali@my-deja.com) on Friday February 25, @07:06PM EST (#236)
    (User Info)
    If you're up, around and posting to Slashdot, it's no wonder the officers were acquitted.

    Grim humor aside, police mistreatment of minorities is a serious issue. Your time would be well spent considering how you might do something more serious to address that issue than posting anonymously to discussions of object oriented programming, which serves only to make you look ridiculous.

    [OT] Murder for the crime of BB in NYC (Score:0)
    by Anonymous Coward on Saturday February 26, @12:09AM EST (#306)

    No more ridiculous than the cops who claimed that they thought the wallet that Mr. Diallo was holding looked like a gun. Which is why they felt it was necessary to shoot him 46 times. And why they felt it was was necessary to continue firing even after he fell to the ground.

    Or as ridiculous as the state's decision to have the cops tried in Albany rather than the Bronx. Gee, maybe because the Bx is so full of those dreadful colored people. They might get upset if the police were to continue killing for the crime of Being Black. Boy, that would look bad when Der Führer Giuliani goes for the Senate seat, wouldn't it?

    It makes me sick.

    Re:[OT] Murder for the crime of BB in NYC (Score:0)
    by Anonymous Coward on Saturday February 26, @02:58AM EST (#326)
    I'm with you, man. I haven't been able to stop thinking about this all night. It's obscene to see that prick Giuliani up there bragging about his great officers. How could that defense lawyer claim that Diallo "left the officers no choice?" They could have made the choice to just leave law-abiding people alone.
    Re:ObjC (Score:1)
    by MacOSNeedsDeath on Friday February 25, @01:20PM EST (#76)
    (User Info)
    I've also used Objective-C, and must say that it produced some of the most unreadable code I've ever seen, in part because people didn't feel the need to write comments. The other part is that prototypes are optional and there is no access control. If you can name a function, you can call it. This does not encourage readable code. Objective-C also doesn't fix some of the same parts of C that C++ doesn't fix (declarator syntax and others). Java, on the other hand, puts the best parts of Objective-C into a reasonable syntax. It'll be interesting to see how efficient the GCC Java front-end ends up being.
    Re:ObjC (Score:0)
    by Anonymous Coward on Friday February 25, @01:49PM EST (#94)
    You're criticizing Obj-C readability because of people not writing comments? I could criticize any language for that -- and what I'd really be criticizing is the programmer.

    Anyway, I can't stand C++/Java style message passing syntax. The Smalltalk/Objective-C style is so much more expressive. (And the typing system is much less confining.) I also don't see what's so "unreadable" about calling a function you can name. You don't have to use the feature, anyway, but when you need it, you tend to really need it.

    Re:ObjC (Score:1)
    by Baki (plm@gmx.li) on Friday February 25, @04:41PM EST (#170)
    (User Info)
    Java, on the other hand, puts the best parts of Objective-C into a reasonable syntax

    Hmm, for the past few months I've been programming Java (after using C++ for some time) and I have to say its syntax is completely spoiled by the type casts that need to be all over the place. As Bjarne said, the lack of MI in a strongly typed language means typecasts, everywhere. Especially since no such thing as templates exists. Brrrr.

    All containers (such as Lists) are containers of Ojbects. You must cast those back to what they were, each time with the risk of a Class-mismatch (causing exceptions). Not only is this ugly, you also loose all advantage of a strongly typed language.

    Re:ObjC (Score:1)
    by osu-neko (osuneko(whirlpool)iname(spot)com) on Friday February 25, @06:07PM EST (#197)
    (User Info)
    All containers (such as Lists) are containers of Ojbects. You must cast those back to what they were, each time with the risk of a Class-mismatch (causing exceptions).

    Actually, there's usually no risk at all of a Class-mismatch -- I know nothing has been put into the container other than Thingamabobs. What bothers me is, I know that what's coming out is a Thingamabob, and thus a run-time type check here is not necessary, but there's no way for me to tell the compiler that.

    Not only is this ugly, you also loose all advantage of a strongly typed language.

    You can avoid the ugliness by creating a specialized container (e.g. make a class ThingamabobContainer). This also means you don't need to typecast what comes out. Unfortunately, this doesn't really avoid the typecast, it just hides it (it occurs inside the code for ThingamabobContainer), and adds another level of crud into the code.

    This would all look much prettier and be more elegant if Java had simply given in and been the weakly-typed language it should have been. Of course, this is the opinion of a warped Lisp fan...

    --
    I'm not a monotheist; the world was obviously designed by a committee.

    Re:ObjC (Score:2)
    by jacobm on Friday February 25, @07:16PM EST (#239)
    (User Info)
    I agree with you that it's a pain to have to do a cast on something the compiler ought to have figured out can't cause a type safety violation. Type polymorphism (ie, templates) is definitely the biggest thing missing from Java. Fortunately, they're adding it (see?). In fact, there's already an compiler that will do it- it's just not Sun-blessed. (But the .class files that GJ spits out are ostensibly bytecode-compatible with regular java, so no special JVM is required to run them.)
    Re:ObjC (Score:1)
    by /ASCII on Friday February 25, @07:56PM EST (#260)
    (User Info)
    I've found that interfaces and inner classes take away allmost ALL the needs for MI, and considering all the UGLY ambigouties (misspelled?) introduced by MI, I think it's a good thing (tm).
    But I have to agree with you on the template stuff though. All those stupid casts where you really KNOW what type everything is of. Plain silly. Either use a weakly typed language or non-awfull template implementations. But MI would in no way solve this problem.


    "The time has come", the Walrus said, "To talk of many things: Of shoes and ships and sealing wax, of cabbages and kings."

    Re:ObjC (Score:1)
    by Art Tatum (jhclouse at hotmail dot com) on Saturday February 26, @07:08PM EST (#372)
    (User Info) http://www.gnustep.org
    Honestly, I much prefer ObjC syntax; I find both C++ and Java confusing and hard to read. Maybe this is just preference, I don't know.

    Help! Help! I'm being repressed!

    Re:ObjC (Score:2, Interesting)
    by Mr Neutron (neutron@doppke.com) on Friday February 25, @01:31PM EST (#82)
    (User Info)
    Obj-C has advantages and disadvantages with reference to C++. I used a NeXTstation as my primary development platform 1992-1995 and became intimately familiar with Obj-C. Its elegance comes from the inclusion of only a minimal set of OO features - there's no multiple inheritance, no template classes, all object access is accomplished via reference variables (pointers), there's not even a public/protected/private distinction (everything is effectively protected). This greatly simplifies the resulting code. The object syntax, while elegant, is borrowed wholesale from Smalltalk and therefore looks somewhat strange when mixed in with C syntax. C++'s object syntax is definitely more consistent with its C origins. Also, Obj-C relies heavily on "run-time magic," which Bjarne specifically sought to avoid in C++. This dependence can increase the elegance of your source code at the expense of performance.

    Part of what made Obj-C so pleasant to use on the NeXTstation was the rich object class library that NeXT developed. My big indictment of C++ is its lack of such a library; the STL is nice, but it's only a small part of what we need. I think C++'s wide installed base actually hinders such an effort to a great degree. Java's JFC/Swing libs are certainly rich but somewhat strangely organized.

    Neutron
    I get my kicks above the .sigline, Sunshine.

    Let the nominations begin! (Score:1)
    by osu-neko (osuneko(whirlpool)iname(spot)com) on Friday February 25, @06:12PM EST (#199)
    (User Info)
    Java's JFC/Swing libs are certainly rich but somewhat strangely organized.

    I hearby nominate this for Understatement of the Month!

    --
    I'm not a monotheist; the world was obviously designed by a committee.

    Re:ObjC (Score:1)
    by Art Tatum (jhclouse at hotmail dot com) on Friday February 25, @10:21PM EST (#292)
    (User Info) http://www.gnustep.org
    The object syntax, while elegant, is borrowed wholesale from Smalltalk and therefore looks somewhat strange when mixed in with C syntax.

    Personally, I find it much easier to read because of this. Perhaps it's just preference.

    C++'s object syntax is definitely more consistent with its C origins.

    Hmmm...I wonder if my preference is because I don't think traditional C syntax is very efficient for object oriented concepts.

    Also, Obj-C relies heavily on "run-time magic," which Bjarne specifically sought to avoid in C++. This dependence can increase the elegance of your source code at the expense of performance.

    As I understand things (and I may be wrong), the quality of ObjC compilers has risen to a point where messages are pretty close to regular C function calls. I have at least been told by "people who benchmark this stuff" that ObjC is on par with regular C now.

    Part of what made Obj-C so pleasant to use on the NeXTstation was the rich object class library that NeXT developed.

    I'll drink to that!

    Java's JFC/Swing libs are certainly rich but somewhat strangely organized.

    My dad is currently learning Swing and said that the book claims that it's related to NeXTSTEP. Perhaps I'll get the chance to take a look at it soon...

    Help! Help! I'm being repressed!

    ObjC (Score:4, Interesting)
    by Julian Morrison (julian.morrison@virgin.net) on Friday February 25, @01:54PM EST (#98)
    (User Info)
    From my way of seeing it, ObjC is way more similar to smalltalk or perl than it is to C++. So much is resolved at run time - and quite a lot is also left to programmer discipline. Coupled with the Foundation library, it can do neat tricks like opt-in reference counting, simple clean distributed-objects without ugly hacks like CORBA, and building "selectors" (function identifiers) at runtime and calling them on arbitrary objects. Plus, it's proof against "fragile base class" except with instance variables.

    ObjC's attitude reminds me of perl: "You wanna do something wierd? Your program, your problem; don't let me stop you."

    I'd pick ObjC over C++ any day for everything except kernel bit-twiddling or projects needing huge-scale multiparty co-ordination, but if I had my way I'd add in proper exceptions and some java-like threadsafety primitives.
    Re:ObjC (Score:1)
    by JasonAsbahr on Tuesday February 29, @12:26AM EST (#393)
    (User Info)
    Absolutely! One of the reasons I like Python so much is that working with it is like working with ObjC.

    Re:ObjC (Score:0, Offtopic)
    by SquierStrat (colskywalker@dontspamme.thepentagon.com) on Friday February 25, @02:23PM EST (#110)
    (User Info)
    Actually no, you're just a a loser. :-) Cuz the Matrix == 2nd only to Star Wars.
    "I'm just a sucker with no self-esteem!"-The Offspring
    2nd? (Score:0, Offtopic)
    by Axe (Axe@HATESPAM@Mindless.com) on Friday February 25, @05:29PM EST (#183)
    (User Info)
    To that kiddie crap? Who is the loser here...
    ----------------------------,
    Who's a loser? (Score:0)
    by Anonymous Coward on Saturday February 26, @02:55AM EST (#325)
    Why would anyone care what an Offspring fan thinks? Geez, they must be the absolute worst band ever. I'm not just being chippy, either, I mean it. They're terrible.
    humility deficient (Score:1, Flamebait)
    by lophophore on Friday February 25, @12:20PM EST (#8)
    (User Info)
    Wow! Can he do no wrong? I guess there's just nothing wrong with C++ at all. There's nothing that could have been better implemented.

    I was looking for some reference to "I wish I had done that better" or something. Even Gosling has his regrets...


    there are 3 kinds of people:
    * those who can count
    * those who can't

    Re:humility deficient (Score:3, Insightful)
    by DaveHowe (DaveHowe@Hawkswing) on Friday February 25, @12:28PM EST (#14)
    (User Info)
    Wow! Can he do no wrong? I guess there's just nothing wrong with C++ at all. There's nothing that could have been better implemented.
    I think this is far from a problem - what he is saying is that anything he saw as being wrong he has fixed or is fixing - If someone builds a tool, and it is perfectly suited to his hands and his reach, then you also use that tool, and find it less well suited, it just means you are different to him - not that either of you are "wrong" in some abstract sense.....
    --
            -=DaveHowe=-
    He had a tough crowd (Score:0)
    by Anonymous Coward on Friday February 25, @12:45PM EST (#33)
    He did mention things that he'd wished he'd done better or different, like a better/earlier standard libaray (amen!) and promoting a C++ ABI. What do you want, a confession?
    Yes, a confession. He is a criminal. (Score:0)
    by Anonymous Coward on Friday February 25, @02:14PM EST (#106)

    Stroustrup is denying the validity of my opinions by refusing to agree with them. This is tyrrany. It's a symptom of the radical left-wing nature of the C++ programming language: It's completely -- one might even say brutally -- authoritarian. Linguistic sovereignty resides in the very broadest possible level of authority: The International Standards Organizaiton. I don't think I really need to clarify the implications of that, do I? Or maybe I do: Your mindless, slavish parrotting of the Party Line demonstrates a level of delusion and pure ignorance consistent with liberalism or worse.

    The very concept of coercive language design, much less a militantly centralized standards process, speaks of a violently dictatorial and anti-American point of view regarding programming. The language should be defined at the local level, by committees of Christian men of known good character. This, of course, will never happen: The socialist establishment is hell-bent on chipping away at every vestige of sovereignty left at any level below the UN. This is to serve their short-range goal of totally annihilating all wealth creation in the world. When they've done away with wealth, the world will be ripe for the next and final stage of their conquest: The imposition of an infinitely cruel medieval agricultural slave-state. Cambodia was their dress rehearsal, and it went well. Clinton came back from his apprenticeship in Cambodia ready to take on his assigned role as the so-called "Final Controller" of what the liberals call "The United States Occupied Zone". He has done well. We will not be permitted to remove him. We tried once, with undeniable evidence of his treasons and murders, and we were defeated. He will never leave office. His ultimate reward will be an appointment as the first King of the USA, which in its medieval slave-state form will be known in liberal terminology as "Subdued Slave Zone 53". Ignore the election. It's just window dressing, circuses to keep the plebians distracted while the real work of conquest is done. The real decisions have already been made. Your "excess" children will be ground up and sold as dog food in accordance with the protocols of the Gore Population Control Agenda.


    Re:Yes, a confession. He is a criminal. (Score:0)
    by Anonymous Coward on Friday February 25, @03:42PM EST (#140)
    Oh, now I get it. I guess I never thought about it that way before :)
    Re:Yes, a confession. He is a criminal. (Score:0)
    by Anonymous Coward on Friday February 25, @09:13PM EST (#278)
    Story By Mad Gerald

    The contents of this story is of sexual nature and
    does involve blackmail, and non-consensual sex.

    ANYONE WHO MAY BE OFFENDED BY THIS STUFF
    PLEASE DO NOT READ. YOU WERE WARNED OK!

    All characters are fictitious. Any resemblance to
    anyone either alive or dead is purely coincidental.

    This story is intended for ADULTS only.

    IF YOU ARE UNDER 18 PLEASE DO NOT READ.

    LEGAL STUFF:
    The attached story may be shared with others and
    freely posted in newsgroups and on the Internet,
    provided no money is charged to read this document,
    or if it is I am offered free entrance to that site in payment
    and no part of this document, including the notices
    and attached fiction are modified, and the original
    author is given proper credit for their work.

    My grateful thanks to First Independent Films for
    their story which I have borrowed material from.

    "G.I. JANE." an Adaption to the sexual by Mad Gerald.

    Synopsis (You've all seen it yeah, otherwise see it!!"

    Navy Intelligence officer Lt. Jordan O'Neil (DEMI MOORE) sets a historic
    precedent when she is recruited as a test case to be the first woman
    allowed to train for the highly covert operations unit known as the Navy
    SEALs. Selected for her courage, skills, and level headedness, O'Neil is
    determined to succeed in the most demanding, most merciless and most
    honoured fighting force in the world, in which 60% of her male counterparts

    will fail. Under the relentless command of Master Chief John Urgayle (VIGGO

    MORTENSEN), O'Neil is put through weeks of physical and emotional hell, and

    is not expected to succeed. Indeed, military and high ranking government
    officials including her sponsor, Senator Lillian DeHaven (ANNE BANCROFT)
    are counting on her to fail. However, to their dismay and perplexity,
    O'Neil perseveres.

    Part One.

    S.E.R.E. Training Facility Captive Island, Florida.

    A Helicopter interior. US Marine corps.

    "Survival evasion resistance and escape this is it tadpoles! Your target
    is inside of five miles if you are to locate this facility you are to
    gather as much intel as possible, within the allotted time frame
    and get the hell out of there you will be penalized for early extraction
    but you will be even further penalized for capture. trust me welcome
    to sere get ready stand up 30 seconds 1st man out go .go go.!"

    Lt O'Neil hit the water with a hard slam and made for the shore. she rose
    up out of the water slowly followed by the others of her unit. water gushed

    from every nook and cranny of her well muscled frame. They made their
    way to a line of driftwood, trees and bushes, and took up point positions.
    gathered around her, preparing their weapons

    "So were they drop us LT?"

    "A line of march TWO. ONE. ZERO. and just for shits and giggles
    lets switch to channel FIVE for tactical traffic. maintain casual
    dialogue on assigned channels. Slovolic it's TWO. ONE. ZERO.
    kotec lets move out, move out!"

    They moved off into the trees, from clump to to clump along the
    beech.

    "Four clicks 226!" whispered the radio guy. O'Neil looked at
    the map getting her bearings.

    Two of the others sniggered.

    "She don't even know where we're goin'"

    "Shut up"

    "Gotezlav you take my left flank, lets go!" they moved forward.
    Into the estuary.

    They moved through the shallow water on their belly and on
    to the sand on the other side. O'Neil slipped out of the water
    glancing about. The other moved up into the trees.

    Through the trees across the water lay the target.

    "Looks like she's right on the money!"

    "Yeah I had a busted watch once it was right twice a day!"

    "Cortez target ahead, belay my last new rally point my location."

    "Cool, Newberry, right side, flea you come with me, lets move out"

    "Listen up everybody, we need film from all angles, record of
    weapons, vehicles, count their guys, ranks if visible, Slav,
    Cortez check antenna for comms capability."

    "Mc Cool?"

    "There's nothing there O'Neil there are no prisoners and no
    guards, maybe we found this place a little too easy There's
    nobody here!"

    "Cortez, Cortez!"

    "Mc Cool 3 o'clock!"

    "What the hell are you doing? This is team leader to team
    fuck up! knock the grab ass off, get back to your positions.
    You are compromising the unit!"

    "That is an order do it now!!"

    Cortez and Slav were through the water now to the barge,
    slob moved forward to grab the helmet on the barge.

    "No Slav don't touch it man!"

    "Hey it's just a souvenir"

    "No Slav!"

    as he does automatic fire rips out of the undergrowth
    hammering into the barge.

    Tannoy speakers begin to blare out.

    "HEYHOHOHOHOHO WELCOME TO SUMMER CAMP
    BOYS AND GIRLS!! (Auto fire) FOR HE EXPECTED
    NOTHING AND SO HE SHALL NOT BE DISAPPOINTED!!"

    "All units!! Rond-a-vue at the rally point, lets get out of here!"

    O'Neil turned and sprinted back into the tree line, ducking
    and weaving as rounds flew around her. Flea followed on
    her heels he screamed as he tripped over some roots
    wrenching his knee. He rolled into the stream howling.

    "Oh Shitttt!" O'Neil dragged him out, and tore open the
    guys BDU'S above the knee,

    "Put your hand there! don't move you'll make it worse
    arghh Jesus!"

    Inside blood poured from a deep gash.

    Suddenly a thick plastic bag was thrust down over her face and pulled
    tight. O'Neil tore at it with her fingers desperate for air. She was
    dragged over backwards and away.

    She fought to stay conscious as she was dragged through the jungle and
    thrown heavily on her face. Then up again and she was picked up and
    thrown into a cage. She squealed in pain as she hit the hard wood floor.
    She scrabbled with her fingers and managed to tear away the bag
    gasping for breath.

    She looked about and found Flea in the next cage. "Flea! Flea are you OK?"

    "Yeah yeah I'm OK"

    The others of her unit were dragged into the compound and thrown on their
    knees.

    "Get down! who's in charge here? huh who's the officer in charge?"

    They started beating on them. and then they were all forced into
    similar cages.

    Lt O'Neil tried to keep her breathing shallow, her shoulders ached,
    'She must not panic' she kept telling herself. 'Keep control' she could
    hear the heavy tread of their boots as they approached the cages.

    They stopped outside flea and took him away.

    She drifted off to exhausted sleep as darkness fell.

    The cage roof was lifted freezing water was thrown on her jerking her to
    consciousness, strong hands grabbed her upper arms, dragging
    her upright. There were two of them her arms were twisted around
    behind her and her wrists tywraped. They pushed her down the pier
    to the boathouse.

    She was shoved through the door inside Master Chief John Urgayle
    stood in the centre of the room grinning.

    "Hi Lieutenant time to play!" he laughed.

    She was shoved to the centre of the room and forced down on the small
    stool in the centre of the room. The rest of the room was bare apart from
    a bench like table. a fan span slowly from the ceiling.

    One of the guards walked slowly around her muscular frame. she
    sat legs open, bent before her, her arms painfully forced behind her.
    She stared at the floor. Sweat trickled down her forehead and
    dripped from her eyebrow.

    "What's your fathers name, it's a simple question Lieutenant no
    reason not to answer unless you want to bleed?"

    "Dad"

    "How about brothers and sisters you got any o'them?"

    "Dick, jane and spot!"

    Bright lights came on suddenly, above her. She blinked.

    "You for real O'Neil?" he came close, blew cigarette smoke in her face.

    " What's your favourite food Honey, perhaps we could get some to eat huh?"

    The master chief watched from the bench. He checked the monitor, pictures
    from the camera's look good. Then got up and walked behind her.

    "Green eggs and ham"

    Suddenly the master chief loomed over her, he punched her face hard
    throwing her head back.

    "Why didn't you carry out your wounded Lt. was he too heavy or were you
    just plain chicken shit!" he stared into her face. She smiled.

    "You ain't getting nothing out of me so you might as well put me back in
    the cage"

    He hit her again full in the face. She went over backwards to the side of
    the stool and landed with a groan, face down on the floor. She
    lifted her head and spat out some blood grimacing.

    "You are in a cage! right here right now!"

    "I'm sorry am I supposed to be afraid?" she managed.

    The master chief stood astride her back and gripped her upper arms from
    behind wrenching her up from the floor. She winced groaning in pain.

    "Right down to your worthless wound. This is my island!!"

    He threw her bodily into the wall. She struck it with a yell and bounced
    off, twisting, fell backwards on the floor, she grunted the wind knocked
    from
    her. Her legs falling open. He ran at her and kicked her exposed groin.
    Lt O'Neil screamed as pain lanced through her from her cunt.

    "You worthless piece of shit, bitch!"

    He nodded the two guards went over and hauled her up to her feet.
    She was leant forward, he grabbed her head locking it under his arm.

    "You think we should go easy on women O'Neil? do yer?"

    She gasped blood bursting from her mouth, "GO FUCK YOURSELF!!"

    The guards let go and he ran at the wall with her head slamming it
    viciously. She reeled back yelling. He threw her back over the bench
    pinning her bound arms to the edge. One of the others threw a chain
    over her head and snapped it taught around her neck almost throttling
    her.

    He fastened it to a bolt. She grunted and gasped in pain and shock.
    Her booted feet kicking trying to get purchase on the dusty planks.
    She gritted her teeth straining to get up.

    Jack went away and came back with a bucket.

    "The enemy I'm sure will take into account your gender while carrying
    out interrogation, one assumes!"

    He poured the freezing water down onto her panting chest. the water
    soaking her t shirt making her breasts ache as her teats went rigid.
    Both heavy mammaries were outlined beautifully by the wet material.

    "Especially when the P.O.W. has such big stiff hooters eh Lieutenant?"

    "Go to hell dickweed!" she spat groaning in pain.

    At a nod from Jack one of the guards thrusts a plastic bag over her face
    and drags it tight. O'Neil goes wild trying to pull free as Jack grips the
    neck of her shirt and cuts it open with a combat knife. Her breasts bounce
    free. two hard globes mounted by thick coral aureole and wrinkled stiff
    nipples. As she struggles the jiggle and jerk stiffly. Jack throws his leg
    over hers and sits astride them. He produces some thick cord and throws it
    around her back, pulls it tight and ties it off above her jugs.

    He cuts the rest off and repeats the process under them. then he pulls
    the sides together and lashes them, then between them now her breasts
    are two heavy jutting balloons. He nods and the pull up the bag. O'Neil
    gulps for air almost feinting from lack of it. Jack grins down at her.
    Her expanding chest forces more of her breast flesh to bulge out.

    "Y .Y .You bastard!"

    He pats her tits slowly.

    "Now now Lieutenant, we're only doing what the enemy would do to a
    nice piece of ass like you".

    He nods, the bag is thrust over her mouth again. She starts, arching her
    back trying to pull her head free. Her tits jut out and he grips her
    nipples between finger and thumb and yanks them out hard
    making her scream into the bag.

    "What d'you think boys are these good enough to ice or what?"

    He twists her nipples making her writhe, he nods the bag comes up.

    "Hey Lieutenant what was your mission objective?"

    She stares at him gasping for breath.

    "Come on Baby you going to keep quiet until we've all fucked you in the
    butt?"

    "GET THE FUCK OFF ME YOU PIECE OF SHIIIIII . .!!"

    The bag came down again stifling her cry. He wrenched and pulled her tits,
    his fingers kneading and pinching, pulling each breast hard, bruising.

    "Any o' you boys ready to blow yet?"

    "Oh yeah am I ready" one of the guards squeezes his cock through his pants.

    "Lets go then!" He yanks his cock out and begins wanking next to O'Neils
    bag encased features. faster and faster.

    "Say when man!"

    "When when!!" he groaned the bag came up. Lt O'Neil gasped for air her
    mouth wide in a desperate 'O' as she sought air. With a groan of pleasure
    the guard let loose a heavy spurt of semen straight into her suprised open
    throat. Then another.

    "Yeeeehaaaaa how'd yer like those cookies Lieutenant!!"

    Jack shouted as she choked and coughed, grimacing shutting her mouth
    as fast as she had opened it as more Jiz splattered across her face and
    lips.

    She spluttered and spat trying to get rid of his load. More went in her
    eyes and across her shaved head.

    "You know lieutenant I think he likes you!" They laughed.

    "Y You Filthy bastards I'll fucking kill you all (Cough, splutter) I
    will you pieces of fucking . . !!" the bag came down again.

    "My my that has made her pissed" they all laughed.

    O'Neil strained and wrenched desperate to get away her body screaming
    out for a few deep breaths. Jack rubbed and pinched her teats, making
    them ache and throb. Her chest thrust out hard as she fought.

    Jack nodded and the bag came up again. O'Neil gasped a huge breath,

    semen strung between her lips and teeth. She stared at him and spat.

    "You fucking shit! I'm gonna rip your dick off and ram it up your ass"

    Jack grinned at her, "Aw now you love it really O'Neil!" he pulled her
    nipples hard to emphercise the point.

    "Now you tell me your mission objective!" he grinned.

    "Fuck your mission objective . . Fuck your . . . uhhhh!!"

    At a nod the bag came down again, O'Neil jerks and struggled.

    "Hey Dobs get some of the others, get the ring thing too!"

    Jack gets off her squirming legs. She immediately began to kick.

    "OK lets get these BDU's off and see if the Lieutenants wearing pink
    fluffy panties today!"

    Her legs kick and fight viciously as they're hands grab them. The belt and
    waistband are torn open and she gurgles and moans as she feels them
    wrenched down off her hips, she strains trying to pull her legs free as
    the bag comes up and she gulps air spluttering.

    "Huh . . huh G . Get offa me get off you fuckers . . uhhh uhh I'll
    fucking kill all of you. You fucking creeps!!" she dragged her
    legs up hard.

    They strained trying to pull them out, her strong legs holding out.
    Jack punched her belly hard. She grunted and swore still straining.
    He rabbit punches her ribs, The bag come's down stifling her cry of
    animal rage as they forced her legs slowly out.

    More men came in and with whoops joined in, they're added strength
    forcing her legs out. Jack grabs her hips and drag's her ass off
    the edge of the bench. With a painful yelp O'Neil was now suspended
    by her bound arms and throat. Her BDU trousers were torn from one
    leg and her legs were wrenched cruelly wide. Her struggles became
    less as the lack of breath began to take it's toll. A guy on either side
    quickly ties thick cord around each knee and them to the bench legs.

    O'Neil slumps as she blacks out, as the thick cord bites into her strong
    muscles. Her ass hanging off the bench her strong legs spread wide,
    displaying her white panty clad pussy, which bulges against the material.

    Jack nods the bag comes up. He slaps her round and she groans and come
    too with a shuddering breath.

    UHHHH . . UHHHHH . . Y . you F . . Faggots!!" he grins into her face.

    Now with her ass unsupported and her whole weight on her knees, arms
    and neck, she realizes how helpless she is. She gulps in air as they stand
    around her admiring the view.

    Jack viciously punches her in the twat, making her gasp and choke in shock
    and pain her legs snatch and strain to no avail.

    "What's your mission objective Lieutenant?"

    "Ughhh . . OK Ok I get your point th . . this has gone far enough OK!"

    Jack grins and traces his fingers along her inner thigh to her pussy mound.

    He slowly feels it. She glares at him.

    "I asked you a question Lieutenant?"

    "Look cut the crap I get the picture OK . . . No don't . . don't do that!"

    He drags her pants to one side so they can all see her twat.

    "You know what happens when you get captured Lieutenant?"

    "I get the idea YEAH!"

    "THEN ANSWER THE QUESTION!!" He yanks her pants up hard and they tear,
    Then he rips them off.

    "ARGHHH YOU FUCKIN . . .UHHHHHHH!" the bag comes down again.

    She struggles to push her chin down to stop it but then she's struggling
    again.
    They watch as her tits bob about and her legs strain as she begins to
    panic.

    "Dobs! the gag, lets have some safe sex with this one huh I bet she bites!"

    Dobs brings the gag over and hands it to him he readies it then the bag
    comes up.

    As O'Neil gasps for breath Jack tries to force the two side shields between

    her molars she tries to pull her face away. Dobs grabs her face, she
    snarls, and he howls letting go, snatching at his bitten thumb.

    "AH AH NAUGHTY BAD GIRL!" Jack punches her face. and again stunning her.
    her mouth is rammed full of the gag which goes between her back teeth and
    behind her front sets. forcing her mouth into a wide 'O' leaving her tongue

    lolling
    about in her open maw. He fastens the belt around the back of her head
    tightly.

    "That's better now you see we got two holes to play with!"

    He steps back.

    "And now for number three"

    "Dobs where's that asshole Flea?"

    Flea was pushed forward and thrown on the floor. His arms tied
    behind him like hers. His leg was a bloody mess. He let out a cry
    of pain as they held him down. Jack stood over him.

    "Lesson Lieutenant, your troops will be used against you
    during interrogation!" He slams his foot down on Fleas injured
    knee. Flea screams in agony, writhing under him.

    O'Neal snatched at her bonds in anger and despair as Flea
    screamed. Her eyes flashed with anger. she mouthed stifled
    entreaties past the gag.

    "NOOOH NOH UU PHUKKER!!"

    "Only I don't want some crap intel. I want you to do me a favour
    Lieutenant. I want you to shit for us O'Neil, Believe me It's
    going to be far easier if you do. Otherwise we're going to have
    pound all that shit back up your ass. I don't think you're going to
    appreiciate the taste when we make you suck our cocks clean.
    So you have a nice long shit and I stop being nasty to Mr Flea
    here yeah!"

    He stamps down. Flea howls in agony, thrashing in mind numbing pain.

    O'Neil couldn't believe what he wanted her to do, her face twisting
    in disgust at his demand.

    "So what do you say Lieutenant? you going to shit for us or do we
    keep smashing this poor mans knee!" he stamps on it again.

    Flea screams sobbing and begging for him to stop.

    "I mean hey it's not like I'm asking you to piss now is it?"

    They all laugh as O'Neil slowly flushes with humiliation realizing
    that she's going to have to do it or Flea will never walk again.

    "You going to be able to live with that lieutenant? huh? this man
    crippled because you were too proud to take a shit?"

    His foot slams down again. Flea screams a bony crack coming
    from his knee as he writhes in awful pain.

    "OH HAY OH HAY OO ASTARD IYL OO ITT!!"

    "Now that's more like it lieutenant, you hear that Flea she's
    does give a shit! Ok O'Neil lets see that stuck up arse of
    yours take a dump"

    One of the men brought a metal bucket over and clanked it
    down under her. They all gathered closer.

    Lieutenant O'Neils eyes flooded with tears as a wave of awful
    humiliation went through her. She couldn't believe they're
    depravity.

    "C'mon we're waiting You shit or he never walks again cunt!"

    She closed her eyes and swallowing her revulsion pressed down.

    They watched in silence as her belly tightened up, her anus
    distending and pushing out. She grunted with effort, some of them
    sniggered heightening her humiliation as suddenly her sphincter
    eased open and she shat into the bucket. They cheered.

    O'Neil was mortified as more and more piled out. Eventually
    with a gasp she was finished.

    Jack laughed "See you were so full o'shit. I just love that,
    the way that tight little star spread open, an' then clamps
    shut. You're husband fuck you in you're ass O'Neil? I guess
    not, by the look of it huh? and now we're gonna fill you full
    o' Jiz honey!"" She shuddered in disgust and revulsion.

    Two of the guards come forward with a small table, on it
    are tubes and a large syringe (A veterinarian syringe 3" diameter
    and 10" long).

    Lt. O'Neils eyes are bulging as she sees the syringe, a wave
    of panic floods through her and she struggles. her eyes darting
    from item to item on the table. There's a rubber bung device as well.
    Jack picks up the tube and connects it to the syringe.

    "Now we ain't gonna Fuck your butt while it's full of all that feminist
    crap. Me and the guys like to get you all warmed up first, So we've
    had a little collection on the go."

    He holds the thick long syringe in front of her face.

    "We've been filling this with semen since you joined the course bitch,
    now I'm gonna wash your ass out with it!" He laughs.

    O'Neil goes wild struggling helplessly as he busies himself inserting the
    end of the tube up her ass. With one swift stroke, he jams the nozzle of
    the cum-syringe up between her shapely ass-cheeks and into her little
    brown starfish, and none to gently, either. Kneading her ass-cheeks
    while she yells in pain.

    She stiffens as it's forced in and he rams it deep into her rectum. Her
    big bound tits bounce and jiggle as he lets it go and grips the body
    of the syringe.

    "Gonna fill you up!" He sneers.

    "Phuck oou!" she replies.

    "Here we go Bitch!" He starts to press the plunger home.

    O'Neil Jerks and arches her back howling 'no' through he gag
    as she feels it start to squirt into her bowels. The muscles in her
    legs stand out hard as she tries to lift away. She gasps and groans,
    biting on the ring gag as Jack grins down at her.

    "OHHHHHH AWHHHHH AWWWWHHHH NOHHHH NOHHHH!!" she writhes.

    It's half way down now and Jack grins evilly.

    "Enough Lieutenant, full?" he queried.

    She nods enthusiastically "ESS! NOH ORE. NOH OREEEE!"

    "Unlucky whore!" He laughs, and forces the rest in hard making
    her sob and gasp. Her belly bloating with the warm slick enema.

    Suddenly with out warning the bag comes down over her face again she
    struggles for breath, unable to shut her mouth helplessly drawing the
    plastic in. Her body goes rigid as she asphyxiates.

    Jake yanks the tube out of her ass and snatches up the bung. He rams
    it into her anus twisting and forcing it until it's home.

    He quickly pumps the handle. It inflates cruelly wedging itself in her ass
    holding the semen in.

    He nods the bag comes up O'Neil gasps great gulps of air, her
    ass is aching and hot as if she's doing an enormous turd. Her
    belly cramps and her rectum spasms trying to shit but she can't.

    "There Lieutenant now it's really time to play". He slaps her twat
    hard making her cringe and squirm as it smarts. They drag the
    bucket away and Dobs kneels in front of her.

    He wrenches his pants open and pulls his hard cock out. He drags her
    cunt lips open and forces the head into her dry cunt mouth. She sobs
    and grunts as he forces it in a few inches. Then his fingers find her clit
    hood and he pinches it hard making her jolt and heave.

    "Oh yeah Lieutenant I've been waiting a long time for this cunt, you like
    that huh? huh?" he violently rams up into her while the others egg him on.
    forcing inch by inch into her cunt. His cock amplifying her need to shit as

    he forces into her.

    "Bag her! bag her!" the others shout and she shakes her head 'No' as it's
    rammed down over her features. He starts to fuck her hard enjoying her
    struggles. He flicks and rubs her clit as he grinds deep up her tight dry
    twat.

    Two others start to paw and pull her tits from each side. She twitches and
    writhes as they stretch and twist her nipples. Both are wanking their
    cocks.

    The bag comes up. One grabs her face twisting it he thrusts his meat into
    her helpless mouth and begins to shaft her face.

    She snorts and gags trying to breath as he starts to force into her throat.

    Dobs is viciously fucking her wettening cunt. his legs straight as he
    grunts and groans. He then stiffens as he hammers his load into
    her flinching cunt.

    O'Neil sobs as she feels his heat spurt into her. He pulls out and
    someone else eagerly mounts her. his cock larger and longer
    ramming in forcing her cunt walls to give with each hard thrust.
    The bastard holding her face groans and snorts and she jolts
    and struggles as her throat flash fills with semen.

    She gags and chokes, swallowing his heavy load to take a
    desperate breath. Her face is twisted and another soldiers
    load gushes over her face. She gasps trying to blink away
    the semen coating one eye. More fingers grab her hair
    snatching her face around to meet another cock which is
    shoved deep into her mouth.

    Her eyes flash open to see it's one of Jacks big Black soldiers
    his meat a thick hard dark pole, the head a wide fat slab.

    She tries to pull away as he heaves it into her throat. Impaling
    her face.

    Hard rough hands squeeze and pull her hips as her cunt aches
    and contracts around the thick pole which hammers at her cervix.
    Short, hard, deep thrusts.

    His pubes rubbing and teasing her hardening clit as he saws in
    and out. O'Neils belly cramps and aches as the contents of her
    rectum is forced back and too.

    Her anus squeezes and twitches around the awful bung filling it.
    Her rapist pulls out and lets loose a thick heavy stream of cum
    all over her belly.

    O'Neils head is held fast as four inches are firmly rammed
    mercilessly into her throat. It's not going anywhere but deeper.
    She could feel it was up against her tonsils. His glans banged
    against them.

    She starts to gag. He lunges hard feeling another two inches
    slip in. He now grips her shaved head refusing to remove his
    cock from her heaving mouth, he rocks his cock back and forth
    going deeper each time. As he was tries to piledrive another inch
    into her windpipe.

    O'Neil helplessly tries to swallow to ease the pain as he begins to
    fuck her face violently, shoving his prick in until his balls cram
    against her held open teeth and his cock is shoved wholly down
    her throat. In the middle of one of these plunges he begins to cum.

    O'Neil's body jolts and shudders as he does. Somehow she
    manages to gulp down his salty bolts of jism. Mouthful after
    mouthful he feeds into her. Instinctively she starts to gulp down
    each hard flood of sperm as it explodes in her mouth. There's
    a lot. The others laughed watching as her cheeks began
    to balloon with the amount of thick hot cum.

    She swallows as fast as she can trying not to choke. She
    snorts and sperm spurts out of her nose. Her belly was rapidly
    filling with his heat. as more and more pumps straight down
    her unwilling throat.

    She could feel someone pulling her cunt lips open, fingers
    ramming into her twisting and turning. Forcing her cunt walls
    open as more fingers were eased in. making the pressure in
    her ass unbearable.

    Another couldn't wait and spray's hot Jiz across the peaks
    of her bound jutting hooters. Her teats coated with thick globs
    of hot semen, which is quickly rubbed in by cruelly kneading
    hands.

    She had to breath, she was on the brink of blacking out again,
    all she could hear was the others chanting.

    "Fist her, Fist her!"

    As it all went black.

    End of Part One. Enjoy MG.

    Re:Yes, a confession. He is a criminal. (Score:0)
    by Anonymous Coward on Friday February 25, @09:31PM EST (#281)
    Part Two

    Thrown on her back over a bench in the beach house
    Her tywraped arms pinned to the edge. A chain
    over her head snapped taught around her neck
    almost throttling her. Fastened to a bolt. Thick cord
    around each knee lifting them to the bench legs

    O'Neil was now suspended by her bound arms and throat,
    her ass hanging invitingly over the edge. Her BDU's torn
    from her legs, a plastic bag thrust down over her face . .

    Jack looked on as O'Neil went limp he barked an order
    the bag was lifted. She sucked in a desperate breath.
    staying out. Greg, one of his Sergeants was ramming
    four fingers into her cunt. The others looked on avidly
    as he worked and twisted them forcing her cunt walls
    to give. The others semen coating his fingers as he
    worked them in and out.

    Jack grinned and admired her tits. Coming to
    a decision he leant over and gripped her teats. Pinching
    and twisting them. He yanked and pulled more of her
    bulging breast flesh through the taught ropes. She
    groaned and stirred he gripped her breasts hard
    and viciously yanked them. more of her tits ballooned out.

    He grabbed the knot he had placed earlier and partially
    undid it and with his muscles bulging he pulled and
    snatched it tighter. and then tighter again. Now her breasts
    were two big fat udders forced up hard, her teats two thick
    hard nubs.

    She shuddered and moaned he looked back down at
    her cunt Greg's arm was punching up into her twat only
    the heel of his wrist visible. Her swollen labia bulging on
    either side. He flexed his arm and pressed and twisted.
    He chuckled and thumbed her lips wider, stretching and
    easing them out as he pushed and pushed.

    Her body jerked and her hips began to lift as his hand
    slipped deeper. He thrust it in and up again her hips
    began to dance as he strained. The muscles on his arm
    stood out hard as suddenly her cunt walls gave up the fight
    and his hand slid home encased deep inside her spasming
    vagina.

    "UHHH NOH NOH UUUHHHAARGGHH!!" she bellowed
    snapping to conciousness as his hand filled her aching twat.

    "Wakey wakey Lieutenant you don't want to miss being fisted!"
    he gloated her whole body strained and shook as they laughed.

    Jack rubbed his hands over her bloated tits. her nipples were rigid
    her aureole thick and crinkled as his attentions forced them to
    thicken and swell. Slick with the sperm that he rubbed in.

    "What's the problem O'Neil feeling full?"

    The fist was rammed hard up into her making her stiffen. Her
    cunt lips clenched around his thick wrist, as her twat burned and ached.

    Jack pulled her nipples enjoying the way they resisted his
    pinching and twisting.

    "Dobs get Captain Blondell in here!"

    O'Neils eyes went wide as the Dobs disappeared and came back
    with the Navy Doctor. She looked matter of factly at Lieutenant O'Neils
    predicament.

    "My my we have been busy gentlemen, OK what do you want this time
    Jack?"

    "Hey less of the attitude captain! we can easily swap your little
    voyeurs nest back there with a place on this bench yeah, did you
    get off yet? or have we disturbed your frigging?"

    "Shut up! just tell me what you want?" she looked really flustered.

    "I want you to give the Lieutenant here one of those nice big shots
    in her titties here. You know the ones I mean".

    "OK I can only do it the once though you know that yeah!"
    she started to rummage in her bag.

    O'Neil struggled frantically as she readied a syringe and filled it. Jack
    squose up her left breast cruelly. She winced in pain as the hypodermic
    entered her aureole and it started to heat as Blondell emptied the syringe
    into it.

    "OHHH GOHD GOHD NOH NOH URHHHHH!!"

    Jack let it go as the needle came out. leaving a speck of blood. He gripped

    the other and forced it up.

    "OHH UHUH OUU PHUKKERS UUURRGHHHH!"

    The refilled syringe sank into the other teat. and the contents was
    thumbed home. Jack let go and roughly rubbed both sore nipples.

    "How Quick?"

    "Quick!" she smiled. "Now if you don't mind I'll let you get on OK?"

    She closed her bag and turned to leave.

    "You want a piece of this?" jack asked, she turned back.

    "Oh yes later" she smiled and went.

    "BOOYAHHH!!" the others yelled and O'Neil jolted in pain and
    shock as Greg began fisting her poor impaled twat again.

    Her tits were on fire, aching and throbbing her nipples were
    itching and burning. Jack grinned down at her watching as
    her breasts began to swell. Her nipples were now sat on thick
    stiff aureole, they were beginning to swell themselves. He
    flicked them hard making her writhe and scream through the ring gag.

    "Oh you like that whore Oh Yeah!" he started to slap them
    feeling how hard both globes had become.

    He squeezed them and bounced them and played with them roughly
    by lifting them and then dropping them. He then placed his fingers on
    her nipples, using all his fingers around each nipple so that he pulled
    them in towards the nipple and captured each one with all his fingers.

    He squeezed hard over and over again pulling his fingers up and
    around the nipples squeezing and pulling over and over. Her nipples
    were getting harder and harder. He squeezed tightly and pulled her
    nipples up, lifting each one of her tits as he pulled. He pulled harder
    and harder so that her chest was forced up pulling more of each
    heavy swollen breast through the ropes he saw tears in her eyes.

    He laughed enjoying her distress.

    "Oh yeah O'Neil I love these babies I will never tire of abusing
    these fuckers, hey you like how big they've got, I bet they hurt too.
    Oh yeah they ache don't they? and you know what, we're gonna
    fuck em till they're blue baby uh huh!"

    "Talking of babies whore, That stuffs gonna make your titties
    believe that's what you've had. Oh Yeah an then your gonna be
    one big uddered milky cow, you gonna be filling up for weeks!"

    O'Neil groaned and shook as Greg began to spread his fingers as he
    fisted her. jerking and heaving his hand inside her. Her guts were awful
    her butt seemed to be pulsing around the bung, her rectum spasmed
    with the need to shit.

    "Bag Her" Jack ordered. It came down as she gasped for air.
    Her head thrashed back and forth. He lifted and dropped each tit,
    watching as they bounced and formed their ballooned shape again.
    He lifted them up again and then let them go. he started slapping
    the stiff flesh the same way as before, hurting her more each time
    and letting them fall back each time, marvelling at the bounce of
    each luscious tittie.

    "Oh Lieutenant I love your titties and I'm going to love shafting
    the fuck out of them baby!"

    He started slapping her breasts lightly at first as she strained
    and struggled her chest jutting out as she fought for air so that
    they bounced, and bounced with each heavy slap. He started
    slapping them from underneath lifting them up so that they would
    bounce heavily down, shuddering into place. He slapped them
    from the side.

    Jack watched he loved seeing them getting redder and redder as
    he slapped them really hard. He knew that constantly slapping
    them made her sore as he hit them harder. He got enormous
    pleasure as they slammed against each other. as she winced and
    fought to pull them away. Trying to twist her chest away from his hard
    strikes.

    He nodded the bag came up she sobbed and gulped air as he
    started smacking her nipples with the tips of his fingers.

    His fingers were long and acted like little floggers on each nipple.
    He would hit one nipple several times in a row before switching to
    the other one. Then he'd alternate flogging each one with his fingers.
    He loved the smack Thwack Flap smack sound his fingers made
    on her tits. He knew her tits had to be sore O'Neils face bore it out.
    Her eyes showed her pain as did her face which was incredibly tense.

    As her vision cleared O'Neil couldn't believe the size of her breasts
    they seemed huge. and so tender. Her teats burned and throbbed
    as he teased them. She could feel her cunt contracting around the
    fist rammed in it and his thumb kept circling and sweeping over her
    clit. She knew they were turning her on her body betraying her animal
    sexuality. She was losing control she could feel it. If only she could get
    rid of this awful pressure in her ass.

    Greg pushed his face to her clit and began lapping at it. Dob's shouted
    out.

    "Hey This whores gonna cum Look at her ass lift! C'mon O'Neil you
    piece of shit!"

    Jack stopped his slapping and began rubbing and pulling her nipples,
    He Shouted at one of the others.

    "You! suck and play with teats c'mon we've got the whore going. Heh Heh
    O'Neil your gonna be our fuck slave no doubt about it honey!"

    The soldier jumped at the chance and put his head down and his lips
    caught one of the tight sore nips in his mouth. He started sucking it like
    he was a baby. Sucking and sucking on it strong and hard.

    "BAG!" Jack shouted. it came down setting her struggling instantly.

    Her cunt ground down on Greg's fist as she arched her back. Her clit was
    a tight ridged button, which he flicked and clamped his lips over sucking
    hard. Her ass danced and swerved as he pulled and drew on it, pulsing
    his hand inside her cunt tube.

    O'Neil was thrashing wildly as the soldiers fed from her both breasts,
    catching her teats lightly in their teeth. Chewing and running their
    tongues around them. They're hands squeezing and pulling worrying
    her breasts to their hungry faces squeezing and pulling and rolling
    them around.

    Jack inhaled, through the sweat, he could smell her arousal
    she wouldn't ever want to admit it but they had her and she
    was going to come.

    She struggled and strained her mind screamed for air and them,