Comeau Computing formed in 1985 as a privately held consulting firm specializing in UNIX and C projects. In 1987, the company entered the UNIX commercial software world as developers in Comeau's engineering department devised various programmer tools. For instance, in addition to Comeau C++, another such tool, CCshTM, a UNIX Bourne shell compiler, has been ported to dozens and dozens of platforms by Comeau engineers. Today, CCsh tries to be fully UNIX System V shell compliant and is still being ported to a diverse group of platforms whether a PC running LINUX, or an Amdahl mainframe running UNIX System V Release 4.
The CEO of Comeau Computing, Greg Comeau, is a multi-faceted individual. In addition to leading his company through the 90's, Greg also maintains extremely high visibility as an internationally renowned expert in C++, C, and UNIX. Greg has written may definitive articles in these areas for a host of magazines. He lectures extensively at conferences, colleges, user groups, professional seminars, corporate consulting and panel discussions. Greg is also well known on a host of information services and the Internet where he meticulously avails his expertise to literally thousands of UNIX, Windows, C and C++ programmers in an unbiased and devoted manner. Greg's diversity and energy reflects extensively on Comeau Computing and its staff.
Soon thereafter, during the 1988 time-frame, Comeau engineers began experimenting with C++ in-house. Within a short period of time, Comeau engineers realized that various things in C++ were beneficial over C, while at the same time realizing that nothing from C was lost. After that positive in-house research, Comeau decided that C++ was viable technology and decided to sell C++.
Beginning January, 1989, we began selling Comeau C++ Version 1.2.1 (this version added pointers to members and protected members, new features at the time). The initial platforms supported were XENIX 286, Microport 286, Interactive 386/ix and the AT&T UNIX PC 3B1. As word spread among Comeau customers and the C++ community that a robust, low-cost C++ was available for these platforms, they began to request that it be made available to them, and that we port it onto additional platforms.
Excitement continued to grow. In the summer of 1989, Comeau made a firm commitment to C++. Comeau's leadership role since that point has been unprecedented. AT&T continued with C++ 2.0, with new C++ features, and Comeau kept in close proximity. Comeau C++ Version 2.0, the first 2.0 compatible C++ on the market (supporting multiple inheritance, abstract base classes, etc), was released in early August 1989. Additional UNIX ports were added including XENIX 386, all known UNIX 386's, LYNX/OS 386, the AT&T 3B2, as well as MS-DOS.
In May 1990, Comeau C++ 2.1 was released. This product was the first 2.1 compatible C++ on the market (supporting more new AT&T features such as type safe linkage, nested classes, etc) and remained in such a position for close to one year. By this time, the ANSI C++ committee had formed and Comeau C++ 2.1 offered the most ANSI C++ support for that early specification of the language. On most platforms, Comeau C++ remained the only 2.1 C++ even after almost two years.
Continuing our major commitment to C++, with the superior and welcomed technology of Comeau C++, additional ports took place to still more platforms including the IBM RS/6000 running AIX and Sun 3 running SunOS. Early during this period, Comeau Computing became a founding, attending and voting member of X3J16, the ANSI C++ Committee (and we have remained an attending/voting member ever since).
Comeau's unsurpassed leadership in the C++ community was most notably recognized when we began breaking totally new ground by porting to so-called proprietary platforms. It was considered impossible by many at the time, but we provided ports to such platforms as Data General's AOS/VS, Commodore's Amiga AMIX SVR4, Commodore's AmigaDOS and the Atari ST. Those ports also further emphasized Comeau's multi-platform, multi-operating system capabilities. To our credit, our own success immensely increased our porting savvy. During this period, Comeau Computing also became a founding member of the C++ Resellers Alliance.
Continuing this tradition of being the most up-to-date and most available C++, Comeau C++ 3.0 With Templates was announced in February 1992. Additional ports such as the Sun 4/Sun SPARC running SunOs and a plethora of UNIX SVR4's were made available. Not only was Comeau C++ the only C++ available on some platforms, but it was at the time the only multi-platformed compiler supporting templates.
During 1993, 3.0.1 upgrades for the SPARC and various UNIX SVR4s were released. Similarly, a new port to the COHERENT operating system took place. During 1994, new 3.0.1 ports to Solaris 2, HP9000, a new COHERENT OS (it was binary compatible with some real PC UNIX's) and also to an early version of LINUX took place, as well as more 3.0.1 upgrades to existing platforms.
For the next 4 years, we became focused on educating "the masses". We taught many of our own training seminars as well as speaking at conferences. We also moved away from more generally available ports and into proprietary ports. That is to say, this group of ports would not have made sense to be made generally available given their nature, and further, we were contractually obligated not to make some generally available by some special customers. We also experimented in ports to a number of hopeful operating systems at the time but never released those ports (MINIX, XINU, OS/2, etc) though there were completely functional.
Around this time, it became clear that Comeau C++ needed to be rewritten. Not only were some parts modified extensively, but new language features were added by the ANSI/ISO C++ committee such as namespaces, a modified template specification, the way some names were looked up, etc. When those features stabilized in the committee, they would need to be incorporated. This was also around the time period where Sun Microsystem's marketing machine really "did a number" on the industry regarding the marvels of Java. It was time to make a break.
In January 1998, a totally new source base for Comeau C++, version 4.0, based upon EDG, came into being. This added namespaces, run time type identification, exception handling, enhanced templates, bool, new style casts, etc.. Moreover, even though we were on the cutting edge, we could not discard that every effort needed to be made to ensure that core C++ features (those up to at least 2.1) worked and worked well, including various cfront compatibility modes. Our 4.0 did that "like a champ".
Since then, at the end of 1998, we upgraded to Comeau C++ 4.2.38 which included many new template features added by the committee including partial specialization, partial ordering, explicit specification, explicit instantiation, typename, extensive deduction, member templates, etc.
Another upgrade, Comeau C++ 4.2.42, was released in November 1999 and included so-called "Koenig lookup" for functions, covariant virtual return types, class name injection, function-try-blocks, etc. as well as a huge number of compatibilities with the Microsoft compiler. A new port to NetBSD was also made available. It was at this time that we also broke new ground and made Comeau C++ available online through the web at http://www.comeaucomputing.com/tryitout
In early 2000, Comeau C++ 4.2.43 was made available for some platforms, and in August 2000, a beta of Comeau C++ 4.2.44 was released; it offered optimizations and quality of implementation issues, various compatibilities with the Sun and gnu compilers, as well as numerous language features such as Koenig lookup for templates, two-phased name binding, etc. As 2000 proceeded, `template template parameters' (actually passing a template to a template) was released (leaving just the export keyword as the only major feature to implement) and various other work was underway by Comeau engineers in numerous areas including porting Comeau C++ to various embedded systems. We also began releasing betas of libcomo, derived from SGI's PD Standard Library, for use with Comeau C++ on many platforms.
In very early 2001, we released Comeau C++ 126.96.36.199 as well as completing ports of libcomo to all our generally available platforms. This release supported most C99 features too (C99 is the new revision to C since October 1999 -- don't forget, Comeau C++ is also Comeau C too). Comeau C already supported designated initializers, compound literals, variadic macros, VLAs (variable length arrays), and restrict. This release also added support for flex array members, boolean types, __func__, long long, inline, STDC pragmas, complex and imaginary numbers, C++ style for loops, C++ style comments, C++ style mixed decls and code, universal character names, va_copy, hex floating point constants, etc. This release also added more Microsoft compatibilities.
In mid-2001, Dinkumware released their C++, their C99, and their C90 libraries for use with Comeau C/C++ on LINUX/Intel platforms as well as for Solaris/SPARC. In August 2002, Dinkumware also made a similar release of their libraries for use with Comeau C/C++ on MS-Windows.
Comeau C/C++ 4.3.0 also included:
Version 4.3.1, released April 2003 included a new g++ compatibility mode under LINUX.
4.3.2, released during summer 2003, included more g++ mode enhancements.
4.3.3, released during January 2004, included support for C++03, extended capabilities for -M command line option to support "makefile dependency" generation, IA-64 ABI support under LINUX, and for MS-Windows the support of VC++ 7.1, BCB 6 (bcc32 version 5.6.x), and the --dinkumware option to directly integrate Dinkumware libs. We also re-released Comeau C++ for UNIXWARE.
Most of the months from mid-2004 through 2008 were spent almost exclusively on more proprietary ports and projects. For instance, we worked with hardware manufacturers, cell phone vendors and 3rd parties to support C++ apps on their cell phones, set top boxes, embedded devices, embedded LINUX, custom libraries and specialized applications. In other cases we added language extensions to support vertical market needs, for instance, security. During that timeframe, we celebrated our 20th year! While other compiler companies have gone out of business, we are still a beacon, having survived initial growth, diverse world changes, local economies, the .com bubble, technical craziness, etc. During this timeframe, internal releases of Comeau C++ proceeded from 4.3.4 through 4.3.10 and those versions were provided in custom ports, while the stablity of 4.3.3 versions upheld our out-of-the-box releases.
As 2008 ends, our plans include a bunch of new generally available ports to yet even more popular platforms. For instance, Comeau C++ 188.8.131.52 will support MinGW gcc 3.4.5 as well as VC++ 8.0 and VC++ 9.0 under Windows. Comeau C++ will also be available on OS X, for both PPC Macs and Intel Macs. We have also completed some custom ports for various ARM platforms, including ADS 1.2, CodeSourcery gcc 4.2.3 and DevKitARM gcc 4.3.0. Watch our main web page for details. And don't ever hesitate to email us about a port to a new platform. Chances are good we can provide it on schedule and at a fair price!
We will continue supporting new C++ and C features, as the respective committees make stable progress.
As you can see we have been busy chiseling away on a constant basis breaking new ground and paths for the industry at large. We are proud of our involvement in the growth of C++ over the past decades. Comeau remains committed to C++, C, UNIX and object-oriented technology in the international marketplace. New research into, and subsequent releases of, additional products will allow us to continue to be a world leader in these areas.
The commitment of Comeau Computing to our customer base is first and foremost. We strive to provide the lowest-priced, most robust, most compliant, and most flexible compilers in the industry. Not only are customers offered the opportunity to access top-notch Comeau technology, but they are also assured protection in their investment from the beginning. Comeau C++ is shipped electronically in most cases. Free life-time technical support is provided via email. And time after time after time, free upgrades are often provided (customers since 1997 have received free upgrades). And as always, customers know that Comeau will remain in the forefront of C++ evolution.
In general, C++ provides a bridge for C programmers to enter object-oriented programming and obtain other serious improvements. Comeau C++ 4.3.3 provides another bridge to allow C programmers access to this technology and to increase their productivity. Comeau C++ 4.3.3's strong efforts to be near compatible with Standard C and Standard C++ is a stepping-stone toward this goal. C++ programmers gain the ability to express their algorithms in a more natural manner while retaining the efficiency of C. Furthermore, C programmers can move to C++ without having their code break and they can learn Comeau C++ in a multi-tiered transition (one tier might involve starting new C++ers using the C++ Standard Library immediately, another might consider core language difference such as the bool type, another investigating classes and templates, and so on).
The diversity explained above has been an important concern to our user base. They want to develop source code here and then go use it there. They want to specify generic interfaces to ensure portability. They need compilers on their target machines. They want to be assured that what worked on the source machine will work on the target with no hassles or strings attached. We address these considerations, backed up by our porting savvy, up to date features, robust and solid implementation, overall high quality, superior tech support, and often free upgrades. This is always reinforced by our knowledgeable, friendly and helpful technical support through email.
Email us for a current list of machines or to ask for a port. We are more than happy to review your considerations. Don't hesitate to bring forward embedded systems ports.
email. Unlike other companies who use email as a black hole, we use it is a vital medium. Also do note that often many upgrades are free. For instance, 4.2.38 upgrades to 4.2.42 were free.
proprietary port or a port which we won't generally make available, please contact us for pricing. Check out our licensing agreement for licensing details. Note that all orders are prepaid. Most major credit cards accepted. To order, use our order worksheet in FORMS or HTML or ASCII.
The C compiler is used merely and only for the sake of obtaining native code generation. This means that Comeau C++ is tailored for use with specific C compilers on each respective platform. Please note that it is a requirement that tailoring must be done by Comeau. Otherwise, the generated C code is meaningless as it is tied to a specific platform (where platform includes at least the CPU, OS, and C compiler) and furthermore, the generated C code is not standalone. Therefore, it cannot be used by itself (note that this is both a technical and legal requirement when using Comeau C++), and this is why there is not normally an option to see the generated C code: it's almost always unhelpful and the compile process, including its generation, should be considered as internal phases of translation.
Unlike many languages, an interesting facet of C++ is that no one style is forced upon you. Furthermore, styles can be combined to match the problem at hand, which is as it should be.
Note that C++ is not a second language independent of C, but instead it is a true hybrid graft atop of ANSI C. For instance, all the examples in The C Programming Language 2nd ed, written by the inventors of C, Kernighan and Ritchie, can be compiled by a C++ compiler. In fact, a C++ compiler was the primary compiler used (yes, even though this was a book on C!!).
As it turns out, although C allows you to get dirty and hug the hardware, it keeps you there. You are left with only minimal features in C to directly support abstraction and encapsulation. Although some C code may contain common coding idioms (like while ((c = getchar()) != EOF)), your C code will contain few higher level techniques. This is reinforced by the so-called "Spirit of C", which follows these tenets:
Although these tenets and C's low level'ness is important, they should not have to mean that higher techniques don't need to be be a focus. Such techniques are often the crux of the matter. It's not good enough then that you can write "any program" in C. Programming is hard. It also depends upon a cognitive human involvement. You want something able to model that involvement. You want something that can process the concepts in an organized manner. The difference between the mapping of the so-called conceptual view of the program (the one in your head if you will) and the literal software view (the program itself) should be kept as small as possible.
Language features are not provided for their syntax alone. Some features should also model and map cognitive and design consideration, automate programming housekeeping issues, etc. But the few features provided by C are indirect, hence fostering elaborate and awkward code construction. For instance, C only supports the static keyword, pointers to functions, typedefing, lots of switch/case statements, and lots of preprocessor macro hackery. These things can only go so far, especially when you consider that things like function prototypes are not required by C, or that organizational aspects such as modules (or whatever you want to call them) are mostly up to the whim of the programmer. This begs for expert and disciplined programmers.
While still remaining compatible with C, one can addresses and solve these problems and limitations, and more, with C++. Not only does C++ result in complete major pure extensions to C such as classes and templates, but also differences to C's type system and other new features.
Furthermore, in order for C++ modeling capabilities to be more complete, the ability to express relationships such as inheritance is allowed in various flavors depending upon what it is that you are trying to accomplish. As well, polymorphism (the ability to determine at run time what function is being called upon an object, especially those function with the same interface) is allowed as a cornerstone of OO.
Another paradigm includes generic programming, through templates. In short, they allow programmers to generate types. This is important because the significance is that it allows programmers to express another type of relationship that classes do not express. Classes are often used to express a relationship up and down an inheritance hierarchy, but templates are used to express relationships across a family of entities, classes and functions alike.
C++ also supports a general purpose exception handling model, namespaces (an organizational mechanism to modularly contain the use of global names), run time type identification, etc.
No discussion of C++ would be complete without mentioning the depth of the Standard C++ Library. Not only does it support all of Standard C's library, but it also supports a rich and extensible framework of data structures and algorithms, its own I/O mechanism (iostreams) and various string and numerical class data types, internationalization, memory management, etc.
Using the power of class, you can perform activities such as creating your own user defined types, which supports localization and encapsulation. Details include things such as: constructors and destructors (allows initialization and cleanup of instances of variables, and conversion from any type to another in an automated fashion), operator overloading (allows C operators to be used with user defined types), plus many more features for an enhanced programming experience.
C++'s natural support for OOP is also important. OOP is based on abstraction, inheritance (the ability to derive a new class from a previous one), and polymorphism (the ability of an executing program to dynamically bind a specific operation on a type without requiring knowledge of which operation to perform until run-time). These features can support code re-use and faster program development resulting in both cheaper and more practical programming in some cases. The development cycle is often redistributed with larger up front costs in the short term that are able to be amortized efficiently in the long term.
For instance, although object oriented capabilities are good to have, every problem does not need such an OO solution. Some languages which support OOP tend to box you into a corner and force you to use inappropriate features anyway. Solutions should be matched to their problems. Claiming otherwise is seriously misguided. C++ allows for generality. Therefore, you can take efficient advantage of aspects like OOP to naturally support the construction of your algorithms, while at the same time be able to drop down into C and "get dirty" if you need to. C++ has been termed the perfect hybrid numerous times.
In the cover article of the May 3, 1999 edition of Software Success magazine (Vol 13, No 17), the question of "Which software R&D skills should you fight for?" was considered. CEOs ranked each skill or experience with the #1 or #2 highest value to their companies. The highest percent skill CEOs sought was for C++, at 42.6%. Runners up include Object-oriented design 31.1%, Win NT 26.2%, Visual Basic 23.8%, GUI design 22.1%, SQL server 16.4%, UNIX 15.6%, Oracle 12.3%, Sybase 10.7%, Java 9.8%, Web design or HTML 9.0%, SAP 3.3%, Delphi 3.3%, and Visual FoxPro 2.5%. For more info contact them.
Case studies and white papers are always being presented at most conferences, user groups, magazines and web sites. Major corporations are using C++ for countless projects. Whether via small teams or hundreds of programmers in multi-million line applications, these projects are being successfully written and maintained.
The C++ committee is supported by many companies including giants such as AT&T, Sun Microsystems, IBM, HP, TI, Microsoft, Apple, Siemens, Intel, Motorola, Data General, Merrill Lynch, Boeing, etc. This has resulted in expenses in the millions to specify. It has also resulted in that C++ implementations and libraries are widely available.
The Design and Evolution of C++ by Bjarne Stroustrup, he begins his book by writing:
"C++ was designed to provide Simula's facility for program organization together with C's efficiency and flexibility .... It succeeded."A sample list of significant applications/uses follows (using a very rough grouping):
email us if you have any other questions or concerns you would like to see covered.