Cyberax коротенький тестик привел для замера скорости работы FS, так к этому тесту нужно буст тащить, да еще версию из CVS. Уж на самом деле, на C в таких условиях писать спокойнее.
Проблема в том, что нет кроссплатформенных функций создания/удаления каталогов и #ifdef'ы ставить лень. Ну а CVSный Boost у меня был под рукой, вот и взял первое попавшееся
Здравствуйте, Зверёк Харьковский, Вы писали:
ЗХ>avvaпишет
ЗХ>
ЗХ>Следующие рассуждения в принципе мне кажутся очень простыми, но ни разу их не встречал.
ЗХ>Одна из главных причин, почему C++ плохой язык: для этого надо сначала понять, почему C хороший. В чем состоит то свойство C, из-за которого его называют "портабильным ассемблером"? Дело не в том, что "близко к машине", и всё низкого уровня. Дело в том, что почти всегда в C эффект любой строки кода локален и очевиден. Когда я что-то делаю в C, неважно что, я очень хорошо понимаю, что именно происходит. Если я пишу x=y, я знаю точно, что происходит. Если я пишу f(...), я знаю точно, какая конкретно функция будет вызвана, я могу указать на неё пальцем, и я знаю точно, что произойдёт в момент входа в неё и выхода из неё. Если я выделяю память, я знаю точно, что она не исчезнет, пока я её не освобожу. Итд. итп. Атомарные строки кода переходят в атомарные куски кода во время запуска, и никаких сюрпризов. Есть исключения: например, если я вызываю функцию через ссылку, я не знаю, что собственно я вызвал, до рантайма. Но этих исключений очень мало и они тоже "локализованы" и их легко понять.
ЗХ>Это необязательно хорошо. Но это — в C — выполняется последовательно, и то, что это последовательно — хорошо. Разные языки по-разному решают вопрос о том, как позволить программистам прятать информацию от самих себя. В объектно-ориентированных языках принцип полиморфизма, принципиального незнания мной того, объект какого класса я вызываю по ссылке (базового или наследника), является краеугольным; и это по-своему хорошо, если проведено последовательно.
ЗХ>C++ — смесь разных принципов отношения к информации и средствам её прятать или открывать, которые доступны программисту; смесь, кажется, очень плохо продуманная. С одной стороны, полностью сохранён "низкий уровень" C, в том числе отсутствие сборки мусора, т.е. очень важный пример того, что заставляем программиста за всем следить и обо всём помнить. Множественное наследование — другой пример: если практически оказывается возможным его воплотить, мы его воплощаем, пусть оно концептуально сложно, пусть оно заставляет программиста выслеживать порядок вызова конструкторов, всякие ужасные "ромбики" и прочую хренотень.
ЗХ>Но, с другой стороны: полностью нарушен (я бы сказал, низвергнут с пьедестала и подвержен особо извращенному поруганию) этот самый принцип локальности поведения системы в ответ на строчку моего кода. Я всего лишь объявил переменную какого-то типа, написав "Typename varname;", но эта строчка может привести к вызову неизвестного мне конструктора, а за ним — кода сколь угодно, вообще говоря, сложности. Я всего лишь применяю известный мне оператор к переменной — а он, оказывает, overloaded у этого класса, и черт знает что на самом деле там произойдет. Я всего лишь вышел из функции, что может быть проще, написал }, а в рантайме на самом деле пошли плясать деструкторы всех автоматических объектов в этой функции. И даже и не буду начинать говорить про copy constructor и прочие подобные прелести.
ЗХ>Так вот, поэтому C++ — плохой язык.
ЗХ>Он настолько много прячет за кулисами, чтобы навязать программисту режим работы "моя хата с краю": пиши свой код, не волнуйся насчёт того, что магически происходит вокруг него, всё хорошо, всё идёт по плану... И в то же время того же программиста заставляет следить за всеми malloc()'ами и new, рассчитывать ужасные иерархии наследования и дикие функции-"френды", не говоря уж о темплейтах. По сути дела, медленно и неумолимо превращает программиста в шизофреника.
согласен, но не совсем, да с++ позволяет очень много, но ведь остается право выбора пользоваться ли этим или нет, при строгом соблюдении договоренностей по кодированию многих таких проблем можно избежать. А вот то что в этом языке много рутинной обязаловки я порлностью согласен, программистких сил этот язык не жалеет. Поэтому, его уже давно никто и не воспринимает как язык для создания серьезных бизнес-приложений.
Здравствуйте, Cyberax, Вы писали:
C>last_hardcoder wrote: >> приемника C++ C>Это как "приемник Путина"?
Возможно, в каком то смысле. Просто языков то много появляется. Среди них есть и довольно прогрессивные. Но кроме авторов они никому не интересны. А нужен язык, от которого невозможно отказаться.
last_hardcoder wrote: > C>last_hardcoder wrote: >> > *приемника C++* > C>Это как "приемник Путина"? > Возможно, в каком то смысле. Просто языков то много появляется.
Это я просто не могу удержаться — достало уже слово "приемник" вместо
"преемник", эта ошибка уже на всех сайтах.
> Среди них есть и довольно прогрессивные. Но кроме авторов они никому не > интересны. А нужен язык, от которого невозможно отказаться.
Вот я и говорю — "преемник Путина"
Здравствуйте, Left2, Вы писали:
L>Влад, ну зачем же так L>C живёт только потому что он уже есть везде — для любой платформы. Да, он убогий, да, в нём море граблей — но он стандарт де-факто. Вы бы ещё возмутились неудобной раскладкой клавиш на клавиатуре — 100% уверен в том что можно было сделать лучше, но я бы не стал кричать что QWERTY-раскладка обусловлена глупостью и костностью мышления.
Как раз раскладка на клаве это что называется вымучиный временем стандарт. Вариаций было очень много но выжил именно этот вариант.
Что до стандарта, то реальной необходимости в таком стандарте нет. Более того две самые популярные ОС, написанные на С (Винда и Линух), начинали писаться в 1991-1992 годах. В это время выбор был уже очень велик, но видимо кактусы так заманчивы...
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Denis2005, Вы писали:
D>С++ ориентрован на сильных умом (experts only), и надо заметить, что в программировании далеко не все этим качеством обладают.
Написать качественный код на С пожалуй по сложнее чем на С++. Да и на С++ можно писать как на улученом С. Так что аргумент сомнительный.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Denis2005, Вы писали:
D>Перед программистом стоит достаточно трудоемкая задача, по сути нахождение оптимального решения по следующим критериям (первое что пришло на ум):
D>(Список можно продолжать).
Хватит, он и так слишком детален. Ведь на самом деле задача одна — написать эффективную программу, то есть ту которая утилизирует все доступніе ресурсы. Например, программа под дос — может использовать только 640К (я немножко упрощаю, конечно) и один проц. А у нас есть 2 проца и один гиг. Значит это малоэффективная программа. А эффективной, в данных условиях, была бы программа, которая утилизировала оба проца, весь гиг физической памяти, и пару — виртуальной. При том, если программа утилизирует каждый проц меньше чем на 100% это минус программисту, и на этот процент и должна уменьшаться его зарплата. Если ваша программа не способна утилизировать проц более чем на 1-2%, то вам стоит задуматься о своей профпригодности.
VD>Как раз раскладка на клаве это что называется вымучиный временем стандарт. Вариаций было очень много но выжил именно этот вариант.
Насколько я помню раскладка QWERTY появилась для того чтобы замедлить скорость набора текста — уж больно быстро стирались деревянные молоточки. Киньте камень кто скажет что такая раскладка "вымучена временем". Просто продали достаточно много машинок с такой раскладкой — и всё, назад пути нет, слишком дорого пытаться победить стандарт.
VD>Что до стандарта, то реальной необходимости в таком стандарте нет. Более того две самые популярные ОС, написанные на С (Винда и Линух), начинали писаться в 1991-1992 годах. В это время выбор был уже очень велик, но видимо кактусы так заманчивы...
Хм.. Сейчас на дворе 2006-й — но я не вижу реальной альтернативы — покажите мне хотя бы один язык, который доступен (не "может быть портирован" — а реально доступен, здесь и сейчас) для всех платформ — начиная от стиральных машинок и заканчивая mainframe?
Здравствуйте, Left2, Вы писали:
VD>>Как раз раскладка на клаве это что называется вымучиный временем стандарт. Вариаций было очень много но выжил именно этот вариант.
L>...Киньте камень кто скажет что такая раскладка [QWERTY] "вымучена временем". Просто продали достаточно много машинок с такой раскладкой — и всё, назад пути нет, слишком дорого пытаться победить стандарт.
+1
...а вот раскладка Dvorak целенаправленно проектировалась для того, чтобы ускорить набор текста. Но она все равно не смогла вытестить QWERTY.
Left2 wrote: > Хм.. Сейчас на дворе 2006-й — но я не вижу реальной альтернативы — > покажите мне хотя бы один язык, который доступен (не "может быть > портирован" — а реально доступен, здесь и сейчас) для всех платформ — > начиная от стиральных машинок и заканчивая mainframe?
Хм... C++?
Не уверен.
Взять тот же Symbian (чтоб ему пусто было). Там С++ — это как бы родной язык для их API. Только вот от С++ там только название — нет exceptions, соответственно нет STL и т.д. и т.п. С++ слишком всеобьемлющ — выделить из него подмножество которое гарантированно будет работать на всех компиляторах наверное можно, но тогда это будет не более чем С с классами
Left2 wrote: > Не уверен. > Взять тот же Symbian (чтоб ему пусто было). Там С++ — это как бы родной > язык для их API. Только вот от С++ там только название — нет exceptions, > соответственно нет STL и т.д. и т.п.
В новой версии добавили. Я вообще не понимаю зачем они сделали
самодельную систему исключений вместо нормальной их поддержки.
> С++ слишком всеобьемлющ — выделить > из него подмножество которое гарантированно будет работать на всех > компиляторах наверное можно, но тогда это будет не более чем С с классами
Однако, есть Comeau C++ — он компилирует код на С++ в код на С. Хотя
результирующий код и получается некроссплатформенным, но Comeau можно
адаптировать для любого компилятора С.
C>В новой версии добавили. Я вообще не понимаю зачем они сделали C>самодельную систему исключений вместо нормальной их поддержки.
+100. Было бы куда проще если бы они просто использовали коды возврата а не городили свою систему исключений — по крайней мере за деструкторы стековых обьектов можно было бы быть спокойным.
C>Однако, есть Comeau C++ — он компилирует код на С++ в код на С. Хотя C>результирующий код и получается некроссплатформенным, но Comeau можно C>адаптировать для любого компилятора С.
Ну вот, и в итоге всё равно приходим к pure С, как ни крути
Здравствуйте, Left2, Вы писали:
L>Хм.. Сейчас на дворе 2006-й — но я не вижу реальной альтернативы — покажите мне хотя бы один язык, который доступен (не "может быть портирован" — а реально доступен, здесь и сейчас) для всех платформ — начиная от стиральных машинок и заканчивая mainframe?
Таких языков море. Как не достал этот Оберон, но и он тоже входит в их число. Тот же Ричи создал такой язык. К сожалению я не помню как он называется, но думаю, если глянуть Википедию на Ричи, то быстро найдешь его имя. Просто народ слишком привязан к привычкам и плохо воспринимает новое.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.