>просто некоторые основополагающие принципы си, унаследованные плюсами, являются не только негативными, но и позитивными (называется компромис).А зачем нужен этот компромис? Почему программист, мыслящий объектами, должен по старинке думать о том, сколько битов в памяти занимает его переменная или указатель? И зачем вообще нужны эти указатели, если мы переходим уже на такой высокий уровень абстракции как объекты и метапрограммирование? Я считаю, для каждого класса задач нужно использовать свой инструмент, специально для этого предназначенный. Это, кстати, больше соответствует и принципу Unix Way ;) А Страуструп попытался объять необъятное и сделал инструмент, которым можно и гвозди забивать и в мозгах поковыряться. В результате ни то ни то сделать удобно не получается. Сравните, например, как на С++ и на Перле можно получить и распечатать страницу с сайта.
use LWP::UserAgent;
my $ua = LWP::UserAgent->new;
my $req = HTTP::Request->new(GET => 'http://slashdot.org/');
my $res = $ua->request($req);
print $res->content if $res->is_success;
Логика ясна: создать юзерагента, создать запрос, выполнить его, в случае успеха распечатать результат. Всё.
URLStream url;
URLStream::Error status;
#ifdef CCXX_EXCEPTIONS
try {
#endif
status = url.get("http://slashdot.org/");
if (!status) {
while(!url.eof()) {
char buffer[1024];
url.read(buffer, sizeof(buffer));
int len = url.gcount();
if (len > 0)
cout.write(buffer, len);
}
}
#ifdef CCXX_EXCEPTIONS
} catch(...) {
// No response, we just want to print nothing
}
#endif
А здесь начинается... Нужно определить буфер, отслеживать конец файла, учитывать поддерживаются ли исключения... И это называется "язык программирования высокого уровня"! :)
>сами то на чем программите, ежели не секрет?
Сейчас в основном на С[++] и Паскале.