Re[12]: плохой язык C++ :)
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 07.03.06 13:16
Оценка:
Здравствуйте, IT, Вы писали:

IT>Забавно, но за много лет писанины на плюсах, я ничего из этого не использовал Интересно как другие. Я, конечно, понимаю, что незнание не освобождает, но, с другой стороны, талант всегда пробьёт себе дорогу, а об этих талантах мне не часто приходилось слышать, а видеть я их вообще никогда не видел. Всё больше приходилось пользоваться более популярными, но менее стандартными и переносимыми вещами, как MFC, ADO, MSXML.


У нас используется Qt. По сравнению с MFC -- небо и земля, гораздо удобнее именно для GUI (работа со всякими COM не требовалась).
Для работы с XML использовали Xerces и libxml2.
Для доступа к данным OTL.

Qt вообще хорошая штука, жалко дорогая.

А взрослых GUI библиотек (которые проверены временем и имеют репутацию) для C++ не так уж мало:
— Qt;
— wxWidgets;
— FOX Toolkit;
— FLTK.

Есть еще масса, но они поменьше масштабом, имхо.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[13]: плохой язык C++ :)
От: IT Россия linq2db.com
Дата: 07.03.06 13:24
Оценка: +2
Здравствуйте, eao197, Вы писали:

E>А взрослых GUI библиотек (которые проверены временем и имеют репутацию) для C++ не так уж мало:


Мне не надо много, да ещё и совершенно разных реализаций. Мне нужна всего лишь одна, в крайнем случае её расширения.
... << RSDN@Home 1.2.0 alpha rev. 0>>
Если нам не помогут, то мы тоже никого не пощадим.
Re[14]: плохой язык C++ :)
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 07.03.06 13:28
Оценка:
Здравствуйте, IT, Вы писали:

E>>А взрослых GUI библиотек (которые проверены временем и имеют репутацию) для C++ не так уж мало:


IT>Мне не надо много, да ещё и совершенно разных реализаций. Мне нужна всего лишь одна, в крайнем случае её расширения.


Ты сейчас в филосовском смысле? Вроде -- вот в Java есть Swing и это стандартная библиотека со всеми вытекающими...
Или же ты для реального проекта GUI-библиотеку для C++ ищещь?


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[10]: плохой язык C++ :)
От: Left2 Украина  
Дата: 07.03.06 13:33
Оценка:
E>Да потому, что и без него все замечательно работает

Хм... Просто много раз нарывался на ошибку когда меняешь сигнатуру виртуальной функции в предке и забываешь изменить её в потомке. Отслеживать такие ошибки на этапе компиляции было бы очень правильным решением. Да, я понимаю что в современных компиляторах есть warning-и для такой ситуации, но даже в VC 2005 этот ворнинг по умолчанию выключен.

E>Кстати, под "как я рожал ежиков" понимается "Дизайн и эволюция языка C++", да?


Ага

E>Жаль, но я не смог эту книгу приобрести И в peer-to-peer сетях не нашел в электронном виде (если не считать варианта то ли на китайском, то ли на японском языке, в иероглифах).


Книжка действительно интересная, читал с удовольствием.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[12]: плохой язык C++ :)
От: vdimas Россия  
Дата: 07.03.06 13:39
Оценка:
Здравствуйте, eao197, Вы писали:


E>А если учесть что в двух местах используется одинаковый код, то хотелось иметь возможность написать так:

E>
E>auto predicat = bool lambda( int x ) { return ( 5 < x && x <= 10 };

E>int count = count_if( ints.begin(), ints.end(), predicat );
E>...
E>auto int_it = find_if( ints.begin(), ints.end(), predicat );
E>


а так нельзя разве?:
inline bool predicat( int x ) { return ( 5 < x && x <= 10 };

int count = count_if( ints, predicat );


либа для переопределенных for_each, count_if, find_if и т.д. видел в форумах на С++. В принципе, один раз написать эти переопределения — мелочи.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[15]: плохой язык C++ :)
От: IT Россия linq2db.com
Дата: 07.03.06 13:40
Оценка: :))
Здравствуйте, eao197, Вы писали:

E>Или же ты для реального проекта GUI-библиотеку для C++ ищещь?


Спаси и сохрани!
... << RSDN@Home 1.2.0 alpha rev. 0>>
Если нам не помогут, то мы тоже никого не пощадим.
Re[11]: плохой язык C++ :)
От: dshe  
Дата: 07.03.06 13:45
Оценка: 20 (2)
Здравствуйте, Left2, Вы писали:

E>>Да потому, что и без него все замечательно работает


L>Хм... Просто много раз нарывался на ошибку когда меняешь сигнатуру виртуальной функции в предке и забываешь изменить её в потомке.


Насколько я понимаю, здесь речь шла о перегрузке, а не о переопределении.

Что касается ключевого слова overload, то по-моему оно нужно было для того, чтобы компилятор приукрасил имя функции информацией о типах параметров. А в том, случае если функция не была объявлена overload, то имя оставалось Сишным. Сейчас имена функций по умолчанию приукрашаются. Но для того, чтобы компилятор, этого не делал, достаточно объявить функцию extern "C"
--
Дмитро
Re[11]: плохой язык C++ :)
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 07.03.06 13:48
Оценка: 4 (1)
Здравствуйте, Left2, Вы писали:

L>Хм... Просто много раз нарывался на ошибку когда меняешь сигнатуру виртуальной функции в предке и забываешь изменить её в потомке. Отслеживать такие ошибки на этапе компиляции было бы очень правильным решением. Да, я понимаю что в современных компиляторах есть warning-и для такой ситуации, но даже в VC 2005 этот ворнинг по умолчанию выключен.


Ключевое слово overload использовалось не для переопределения виртульных методов в производных классах, а для перегрузки методов и функций. Например:
overload Complex add( Complex, Complex );
overload Matrix  add( Matrix, Matrix );
overload Vector  add( Vector, Vector );


Забавно, что я заимел первое издание "Язык программирования C++" где-то в конце 1991-го в электронном виде. Начитался, начал лабораторные на C++ делать (кажется у нас тогда был Turbo C++ 1.00). И вот дошел до задачки, где нужно было перегрузить несколько функций. Начал писать программу с overload, а она не компилируется! И про Интернет мы тогда ничего не знали. Где узнать, что за проблемы с overload?
Экспериментальным путем удалось установить, что overload писать не нужно (в примерах к Turbo C++ нашел работающую перегрузку функций без overload). И только через несколько лет узнал всю правду про overload
Забавно, что печатное издание этой книги я смог купить где-то в 1993-м, то там overload еще использовался


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[13]: плохой язык C++ :)
От: WolfHound  
Дата: 07.03.06 13:49
Оценка: +2 :)
Здравствуйте, vdimas, Вы писали:

V>а так нельзя разве?:

V>
V>inline bool predicat( int x ) { return ( 5 < x && x <= 10 };

V>int count = count_if( ints, predicat );
V>

А если так
void Foo(int min, int max)
{
    auto predicat = bool lambda( int x ) { return min < x && x <= max };
    
    int count = count_if( ints.begin(), ints.end(), predicat );
    ...
    auto int_it = find_if( ints.begin(), ints.end(), predicat );
    ...
}

Ы?
Вся суть этого примера в том что функция имеет доступ к контексту.
Без таких вещей STL так и останится жутиком которым пользоваться невозможно.
... << RSDN@Home 1.1.4 beta 6a rev. 436>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[14]: плохой язык C++ :)
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 07.03.06 13:57
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>
WH>void Foo(int min, int max)
WH>{
WH>    auto predicat = bool lambda( int x ) { return min < x && x <= max };
    
WH>    int count = count_if( ints.begin(), ints.end(), predicat );
WH>    ...
WH>    auto int_it = find_if( ints.begin(), ints.end(), predicat );
WH>    ...
WH>}
WH>


+1

Причем здесь даже не нужно делать настоящие closure и продлевать время жизни min и max до тех пор, пока живет predicat. Достаточно использовать обычные правила C++ -- если сделал на что-то ссылку, то сам контролируй, чтобы ссылка оставалась валидной. В C++ к этому уже привыкли и ничего нового в идеалогии C++ не добавиться.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[14]: плохой язык C++ :)
От: kan_izh Великобритания  
Дата: 07.03.06 14:10
Оценка: :))
IT wrote:

> Мне не надо много, да ещё и совершенно разных реализаций. Мне нужна

> всего лишь одна, в крайнем случае её расширения.

Да вы, батенька, коммунист. Партийный, поди?
Posted via RSDN NNTP Server 2.0
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[16]: плохой язык C++ :)
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 07.03.06 14:12
Оценка: +1
Здравствуйте, IT, Вы писали:

IT> Спаси и сохрани!




Тогда понятно. Хотелось бы иметь одну стандартную библиотеку, которая была бы всегда и везде И чтобы голова не болела.
Java вспоминается с AWT, Swing и нынешней модой на SWT (или что там в Eclipse используют).

В C++ для одного стандартного GUI поезд уже ушел, имхо. Слишком большие и автономные community у тех же Qt, wxWidgets, FOX, FLTK, Ultra++, OpenGUI и пр. Да и эти GUI для разных типов задач предназначены. Qt -- большой и тяжеловесный, для соответствующих приложений. В ту же степь и wxWidgets. А если нужна быстрая графика, для быстрого динамического отображения чего-нибудь, то здесь FLTK и OpenGUI могут быть полезными.

Кстати знаю случаи, когда для GUI-приложений вместо Java+Swing использовали C++ и Qt для получения более быстрого и компактного приложения.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[15]: плохой язык C++ :)
От: IT Россия linq2db.com
Дата: 07.03.06 14:21
Оценка: :))) :))) :))
Здравствуйте, kan_izh, Вы писали:

_>Да вы, батенька, коммунист. Партийный, поди?


Дык. Член палитбюро РСДН с 2000 года. Номер партбилета — 1
Если нам не помогут, то мы тоже никого не пощадим.
Re[14]: плохой язык C++ :)
От: vdimas Россия  
Дата: 07.03.06 14:38
Оценка: :)
Здравствуйте, WolfHound, Вы писали:


WH>Вся суть этого примера в том что функция имеет доступ к контексту.


Да, в С++ очень нехватает замыканий. С другой стороны, их не вводили потому, что есть возможность вручную эмулировать их функциональными объектами:

struct predicate {
    int max;
    
    predicate(int max_) : max(max_) {}
    
    bool operator(int x) { return SomeFunc(max, x); }
}

int i = count_if(ints.begin(), ints.end(), predicate(maxArg));
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[15]: плохой язык C++ :)
От: WolfHound  
Дата: 07.03.06 15:07
Оценка: +2
Здравствуйте, vdimas, Вы писали:

V>Да, в С++ очень нехватает замыканий. С другой стороны, их не вводили потому, что есть возможность вручную эмулировать их функциональными объектами:

Не ну ты сравни колличество и понятность кода...
... << RSDN@Home 1.1.4 beta 6a rev. 436>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[17]: плохой язык C++ :)
От: igna Россия  
Дата: 07.03.06 15:14
Оценка:
Здравствуйте, eao197, Вы писали:

E>В C++ для одного стандартного GUI поезд уже ушел, имхо.



Но не помешало бы вот что:

C++0x Standard Library wishlist (draft revision 6)
. . .
GUI

Requester: Bjarne Stroustrup, Michael Rasmussen, John Medema, others
Paper:

Some form of simple graphic/GUI library (possibly a simple interface to the simpler parts of larger libraries)—a recurent theme.

Re[16]: плохой язык C++ :)
От: vdimas Россия  
Дата: 07.03.06 15:28
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Здравствуйте, vdimas, Вы писали:


V>>Да, в С++ очень нехватает замыканий. С другой стороны, их не вводили потому, что есть возможность вручную эмулировать их функциональными объектами:

WH>Не ну ты сравни колличество и понятность кода...

Да не спорю, хотя... описанный функциональный объект повторно применим, а замыкание — это "местное" решение.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[17]: плохой язык C++ :)
От: WolfHound  
Дата: 07.03.06 18:58
Оценка: +1
Здравствуйте, vdimas, Вы писали:

V>Да не спорю, хотя... описанный функциональный объект повторно применим, а замыкание — это "местное" решение.

В подавляющем большинстве случаев повторная применимость таких классов нафиг не уперлась. Вот скажи мне часто тебе нужна возможность повторного использования ветки оператора if? Или тела цикла for?
... << RSDN@Home 1.1.4 beta 6a rev. 436>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[3]: плохой язык C++ :)
От: Шахтер Интернет  
Дата: 07.03.06 19:46
Оценка:
Здравствуйте, zzzale, Вы писали:

Z>Здравствуйте, Шахтер, Вы писали:


Ш>>Автор (видимо в силу своей высокообразованности) плохо знает, во что выливается такая невинная строчка как



Ш>>
Ш>>printf("File %s has length=%d\n",file_name,length);
Ш>>


Ш>>или


Ш>>
Ш>>FILE *f=fopen("coolfile.txt");
Ш>>


Z>Касперски приводил пример, что-то вроде этого:


Z>
Z>char str[size];
Z>char user[size];
Z>char pwd[size];
Z>printf(str);
Z>


Z>вводом %s вместо имени кода во многих случаях можно добиться имя пользователя,ну и пароль при желании.

Z>А вообще — во что она может вылиться?

Ну, вообще-то это достаточно сложно устроенные внутри функции.
Фактически, printf -- это простейший интерпретатор строки формата.
В XXI век с CCore.
Копай Нео, копай -- летать научишься. © Matrix. Парадоксы
Re[18]: плохой язык C++ :)
От: vdimas Россия  
Дата: 07.03.06 20:23
Оценка:
Здравствуйте, WolfHound, Вы писали:


V>>Да не спорю, хотя... описанный функциональный объект повторно применим, а замыкание — это "местное" решение.

WH>В подавляющем большинстве случаев повторная применимость таких классов нафиг не уперлась. Вот скажи мне часто тебе нужна возможность повторного использования ветки оператора if? Или тела цикла for?

Функциональщики считают, что да. посмотри на программы на Схеме, например. Там программы — это макраме из массы очень коротких, по сравнению с "обычными", процедур.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.