Re: What has C++ become?
Pascal J. Bourguignon wrote:
Noah Roberts <user@example.net> writes:
You're calling the STL "low level code" when it is, in fact,
high level code. The find_if algorithm, for instance, is a
high level algorithm that can be used with any data type
that obeys the iterator abstraction.
This is, of course, totally ridiculous. find_if is part of the
compiler---by definition, you can't get any lower.
No. find_if is low level.
Compare:
Key k;
std::vector<Element> v;
std::vector<Element>::iterator end=v.end();
std::vector<Element>::iterator found;
found=find_if(v.begin(),end,boost::bind(&Key::equal,k,boost::bind(&E=
lement::getKey,_1)));
if(found==end){
doSomething(v,NULL);
}else{
doSomething(v,*found);
}
vs.
(lambda (k v) (do-something v (find-if (lambda (e) (equal k (get-key e=
))) v)))
And again, here I already used boost::bind; if I had to use the stl
instead it would have tripled the number of line.
And again, here I transposed directly. In this specific example, lisp
is even higher level (ie. more concise):
(lambda (k v) (do-something v (find k v :key (function get-key) :test =
(function equal))))
You just cannot say tht the STL is high level. You only can
say that it is slightly higher level than pure C code. But it
doesn't qualifies yet as "high level".
That's a different argument. The STL doesn't attempt to furnish
application level abstractions, nor should it. By definition,
you can't have a higher level without a lower level; you need
something to build on. The STL may not be particularly well
designed for what it does, either, but that's orthogonal to the
question.
--
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