Re: Does anyone else wish the C++ standards committee would give us
parity with other programming languages?
On Mar 30, 1:46 pm, Christof Donat <c...@okunah.de> wrote:
On Mar 29, 2:07 pm, Christof Donat <c...@okunah.de> wrote:
As I said, I've yet to find anything important that I could
do in Java that I couldn't do in C++, and I've extensive
experience in both languages.
I'd say, e.g. writing web applications in C++ is a bit more
difficult than just hacking a servlet.
And I'd agree. But it's not a language problem, and probably
not even a library problem. The existing infrastructure in web
servers is designed to support Java;
No. Most installed web servers use apache as server software.
Apache doesn't support java without any additional modules and
an external server process, but apache supports C modules
without any changes. It is a problem of the API. The apache
module API is - well - a bit more complicated thant the
servlet API.
Do you know of any Apache servers running without the Java
module. (Come to think of it, our intranet server does. But it
just serves up web pages; it doesn't do anything interactive or
that would require any "programming".)
I agree with you, that it is not a language problem, but I
think it is a library problem.
it's not designed to support any compiled language.
Well, C is a compiled language, isn't it? Apart from the
apache module interface the CGI interface as well as the
FastCGI Interfacce is completely language agnostic. You could
even write CGI scripts in Java - just that it will start the
whole VM for every request. The difference is that scripting
languages like Perl, Python or Ruby come with an API that
supports easy writing of portable CGI applications.
Yes. And the Perl interpreter is "compiled" as well. The
lowest level interface has to be at the lowest level, which
means machine code, which is what comes out of the compiler.
But in practice, I can't imagine anyone using this level
directly. As you say, it's a bit more complicated than the
alternatives. But it's true that my distinction concerning
compiled languages is probably not valid. Although it does seem
that all of the higher level API's available are for interpreted
or byte coded languages: Java, Perl, Python, Ruby...
When I spoke of support, I was thinking more in terms of
embedded development tools. I don't think that Apache has any
of these, but other products, like WebLogic or WebSphere do.
But your point is well taken; even before worrying about
embedded debugging, the available API is an issue. And for
whatever reasons, I'm not aware of such an API for C++; I'm not
even sure who should be responsible for it. It obviously
doesn't belong in ISO's hands, since it's only relevant for a
small subset of environments. Maybe Apache should define and
implement one.
If there were a demand for it, it probably wouldn't be that
hard to implement a server which supported C++,
Web developers care much about not binding themselves to a
speciffic implementation. Java servlets work with any servlet
container, not just tomcat. CGI scripts written in Perl work
anywehere where a Perl interpreter is available and the
Webserver supports the CGI interface (virtually any). PHP
scripts just need one of three ways to get the PHP interpreter
run: apache module, CGI or FastCGI.
A C++ program can handle CGI too. As you say, the problem is in
the API for accessing it. CGI is standardized, but it's a bit
low level. (One can argue, however, that C++ already has the
interface, standardized, in the form of getenv() and std::cout.
Except that you can't output binary on std::cout.)
As an example why this might be important: beginning with
version 2 apache supports multithreaded operation in contrast
to just multiple processes. The PHP apache module does not.
whenever you whant to use the PHP apache module you must go
back to processes. For a customer we switched to the FastCGI
Version of PHP without any code changes. Then we could use a
multithreaded MPM module which increased the throughput of the
server more than one order of magnitude on the same hardware.
And how would this have been any different if you'd have used
C++? Except that you would have had to access at a lower level.
but typically, the code the server addresses
directly consists of a lot of small, constantly changing modules
(Java beans)---something where the weaknesses of Java aren't
really significant.
That is not true as well. Typically a web application itsself
doesn't change too much if it is well thought out.
Typically, web applications aren't well thought out:-). I don't
know, but the pages I access do seem to change a lot.
[...]
Whatever happened to JSP?
There still seem to be some people out there using it, but it
has proven to be the worst of two worlds. Well designed web
applications that should stay so usually don't use JSP.
Whenever you use JSP as view abstraction in a application that
will be maintained by multiple developers, someone will come
along and put code into the JSP that doesn't belong in the
view, but in the application layer.
As you see, JSP is considered harmfull. Use explicit template
systems like e.g. XSLT instead.
Well, I wasn't too impressed with the idea when I used it (a
little bit in early 2002). It seemed like a case of mixing
concerns which should have been separate. Putting all the HTML
in the Java (or C++) code was obviously a pain, but hiding the
Java code buried in the middle of a lot of HTML seemed like just
exchanging one problem for another. (I've been doing a lot of
code generation lately, and I ended up designing and
implementing a template approach as well. All those lines
outputting boilerplate ended up obscuring the actual logic.)
Of course the same thing happens with PHP, but that is just a
basic language problem of PHP that Java itsself doesn't have.
Why add it?
And if I were doing a lightweight GUI client, I'd probably
choose Java, simply because Swing seems better than either
wxWidgets or Qt.
Actually I'd prefer either XUL/XBL/JavaScript or Python/PyQt.
Since I don't know them, I can't say.
there's nothing that the standards
committee could do, for example, to force web servers to give
C++ the same level of support they give Java.
As I said, I don't think it should be in the standard.
I don't think it can be. It's a little too specialized. On the
other hand, an organization like W3C could define such.
A well defined API, like WSGI for Python as a start, and a
fiew implementations that are as portable as possible and can
use various server APIs (e.g. apache module, FastCGI and CGI)
or run as a minimal stand allone HTTP server would be a good
beginning. Not in the standard, but very closely related to
it.
How could this happen? The committe I guess has a lot of more
important things to do. So maybe we could find some interested
people and first describe such a API and then implement it. If
the committe spreads the word of that API as the state of the
art way of implementing web applications with C++, that would
be great support for their part.
The problem is that ISO doesn't really have any procedure for
issuing "recommended practices". And it's lead times are
probably too long for this domain as well. The advantage of
Java or C# here is that they belong to a single company, and
don't have to spend the time building consensus. (Of course, in
many ways, that's really a disadvantage. But it sure can
shorten your lead times.)
--
James Kanze (GABI Software) email:james.kanze@gmail.com
Conseils en informatique orient=E9e objet/
Beratung in objektorientierter Datenverarbeitung
9 place S=E9mard, 78210 St.-Cyr-l'=C9cole, France, +33 (0)1 30 23 00 34