Re[39]: плохой язык C++ :)
От: Cyberax Марс  
Дата: 10.03.06 11:54
Оценка:
Дарней wrote:
> C>Горячие BDB-шные парни пишут на чистом С
> C>Но отображение файлов в память они как раз именно так и используют.
> а я и не говорил, что MMF это плохо. Я говорил, что отображение
> приплюснутых объектов в бинарной форме в персистентное хранилище — это
> плохо.
Потому как непортабельно, а ненормальнопортабельный aspx — это хорошо
Двойные стандарты, однако.
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[40]: плохой язык C++ :)
От: Дарней Россия  
Дата: 10.03.06 11:59
Оценка: :)
Здравствуйте, Cyberax, Вы писали:

C>Потому как непортабельно, а ненормальнопортабельный aspx — это хорошо

C>Двойные стандарты, однако.

как раз aspx под никсами уже хостят. Не знаю правда, насколько это проблематично. В любом случае, ситуация будет улучшаться с развитием Моно. А плюсам уже ничто не поможет.
... << RSDN@Home 1.1.4 stable rev. 510>>
Всех излечит, исцелит
добрый Ctrl+Alt+Delete
Re[41]: плохой язык C++ :)
От: Cyberax Марс  
Дата: 10.03.06 12:01
Оценка:
Здравствуйте, Дарней, Вы писали:

Д>как раз aspx под никсами уже хостят. Не знаю правда, насколько это проблематично.

Как в рекламе: "Сынок, это фантастика". Наблюдается стандартная ситуация — приложения для Mono работают в .NET, обратное неверно.

Д>В любом случае, ситуация будет улучшаться с развитием Моно. А плюсам уже ничто не поможет.

С++ поможет новый Стандарт и новые компиляторы.
Sapienti sat!
Re[42]: плохой язык C++ :)
От: Дарней Россия  
Дата: 10.03.06 12:05
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>Как в рекламе: "Сынок, это фантастика". Наблюдается стандартная ситуация — приложения для Mono работают в .NET, обратное неверно.


обратное тогда тоже верно — только с небольшой доработкой.

C>С++ поможет новый Стандарт и новые компиляторы.


новый стандарт только всё ухудшит. Но это уже тема для отдельного флейма
... << RSDN@Home 1.1.4 stable rev. 510>>
Всех излечит, исцелит
добрый Ctrl+Alt+Delete
Re: плохой язык C++ :)
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 10.03.06 12:13
Оценка: 34 (4)
Здравствуйте, Зверёк Харьковский

Очень точную и емкую характеристику языка C++ я нашел в owerview к языку D (перевод мой):

Индустрия программного обеспечения прошла большой путь после изобретения C. Много новых коцепций было добавлено в язык посредством C++, но обратная совместимость с C была сохранена, включая совместимость почти со всеми слабыми сторонами исходного дизайна. Было много попыток исправить эти слабые стороны, но вопрос совместимости сделал их тщетными. Между тем, и C, и C++ подвергаются постоянному дополнению новыми возможностями. Эти возможности должны очень аккуратно встраиваться в существующие конструкции для избежания переписывания старого кода. Получаемый результат очень сложен -- стандарт C почти 500 страниц, а стандарт C++ больше 750! C++ является очень сложным и дорогим в реализации языком, в результате в реализациях есть отличия, которые делают очень сложным написание полностью переносимого C++ кода.

C++ программисты стремяться программировать на отдельных островках языка, т.е. очень искусно использует некоторые возможности, избегая множества других. Хотя код более-менее переносим с компилятора на компилятор может быть очень тяжело перенести его от программиста к программисту. Великая сила C++ в том, что он поддерживат много совершенно разных стилей программирования, но при длительном использовании перекрывающиеся и несовместимые стили программирования становятся преградой.


Это слова Walter Bright, разработчика компилятора Digital Mars C++ и языка D.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[43]: плохой язык C++ :)
От: Cyberax Марс  
Дата: 10.03.06 12:20
Оценка:
Дарней wrote:
> C>Как в рекламе: "Сынок, это фантастика". Наблюдается стандартная
> ситуация — приложения для Mono работают в .NET, обратное неверно.
> обратное тогда тоже верно — только с небольшой доработкой.
Тогда это уже не обратная, а прямая ситуация.

> C>С++ поможет новый Стандарт и новые компиляторы.

> новый стандарт только всё ухудшит. Но это уже тема для отдельного флейма
Конечно ухудшит Тот же C# будет по сравнению с ним выглядеть
маломощным карликом.
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[21]: плохой язык C++ :)
От: z00n  
Дата: 10.03.06 13:01
Оценка:
Здравствуйте, vdimas, Вы писали:

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


V>>>Функциональщики считают, что да. посмотри на программы на Схеме, например. Там программы — это макраме из массы очень коротких, по сравнению с "обычными", процедур.


Рискну предположить, что макраме из процедур — это обычно интерфейс к ADT.

VD>>У функциональщиков как раз есть замыкания и "массы очень коротких" функций они объявляют по месту используя контекст методов в которые они вложены.


V>Чего гадать? Возьми любые исходники на Схеме чего-нить (полно в сети) да посмотри. Локальные замыкания в Паскалевском стиле не так уж часто используются. А по мне, есть в этом что-то от использования глобальных переменных. Кстати, в Паскале, глобальные переменные — это окружение замыкания процедуры program. (на слух звучит коряво, но "envirounment/окружение" — это термин такой для замыканий)


Что такое "локальные замыкания"? let — локальное замыкание? cond ? Если нет, почему?
Re[30]: плохой язык C++ :)
От: VladD2 Российская Империя www.nemerle.org
Дата: 10.03.06 16:33
Оценка: :)
Здравствуйте, Cyberax, Вы писали:

>> C>.NET дает возможность писать кривые и уродские приложения. Причем не

>> C>менее неэффективно, чем VB3.
>> Понимаш ли в чем дело. Твое злопыхательство ни на грам не повредит
>> .NET-у, но вот тебя подобные слова выставляют в не очень хорошем свете.
C>Если ты не заметил, то я просто утрирую твои слова

И в чем же заключается утрирование?

C>Ну так ты ведь утверждаешь, что всегда надо использовать GC.


Я утверждаю, что в 99% случаев ЖЦ порвет вашу самопальщину. И делаю столь смелые утверждения потому, что сам сделал один из самых быстрых "аллкаторов
Автор(ы): Чистяков Владислав
Дата: 26.11.2002
".
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[26]: плохой язык C++ :)
От: VladD2 Российская Империя www.nemerle.org
Дата: 10.03.06 16:33
Оценка:
Здравствуйте, vdimas, Вы писали:

V>Вот не надо эту мысль озвучивать без уточнений, а то черезчур неграмотно выглядит. GC "рвет" не все аллокаторы и далеко не во всех сценариях использования.


Ты за свой проффесионализм бойся, а за мой не надо. Я понимаю что говорю. В большинстве случаев порвет. А тот 1-2% происходят когда оптимизацией занимаются действительно знающие люди и в довольно редких случаях. Пока хорошему ЖЦ хватает памяти он весьма эффективен.

V> Кстати, даже в С++ юзают аллокаторы, построенные по принципу GC. И некоторые так и делают, особенно в тех сценариях, где GC действительно является наиболее подходящим.


Вот и срани как нибудь эти реализации. ЖЦ под обычным С++ — это слезы.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[20]: плохой язык C++ :)
От: VladD2 Российская Империя www.nemerle.org
Дата: 10.03.06 16:33
Оценка: 44 (1) +1
Здравствуйте, vdimas, Вы писали:

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


VD>>Темболее, что если надо, то это в любом языке делается.

VD>>Вот только с замыканиями и локальными фунциями это можно делать удобнее и чаще:

V>Можно сравнить "синтаксический оверхед" и run-time эффективность на твоем любимом C# и С++:


А что же с C# то? Давай как с Nemerle-ом сравним. Хотя и тут в общем то видно, что из С++ пытаются выжать то на что он явно не рассчитан. Что за "var(x)" иди "_1"? Что это за не определенная грязь?

V>Тем более, что вместо typedef я могу по месту писать требуемый function<type1(type2, ... and so on)>, а в C# я должен явно декларировать делегат перед использованием.


В Nemerle вообще писать ничего не нужно. Да и в C# можно определить 4-5 дженерик-делегатов и забыть про их объявление навсегда.

Ты лучше вспомни, о том, что boost::lambda вынуждает:
1. Тащить за собой огромную библиотеку.
2. Резко замедляет компиляцию.
3. Применима только в примитивнихшых случаях.
4. Неполноценная реализация.

Что же ты, например, не смог воспроизвести даже примитивного кода? Почему у тебя в последней функции:
Predicate GreaterOrEquals = var(x) >= _1;

не используются две другие (Greater и Equals)? Напомню, оригинал выглядел так:
def GreaterOrEquals(y)  { Greater(y) || Equals(y) }


В общем, очередная демонстрация так называемой аргументации. Какая на фиг краткость в плюсах? Акстись! Погляди на реальный код на С++. Это же ужасно!
Тут рядом
Автор: VladD2
Дата: 06.03.06
орел даже не поверил, что понравившеся ему извращение на плюсах можно во много раз более кратко записать на шарпе.

V>Замыкание красиво и элегантно создается конструкцией var(x)


Красота не описуемая.
Да и что же ты этой красотой так же Greater и Equals не замкнул?

V> (есть еще константная версия, для избежания копирования по значению больших объектов, если мы не собираемся их модифицировать). Созданное замыкание — суть функциональный объект, который затем используется в функциях высшего порядка. Примеры эти тривиальны, иначе можно было бы показать такое же элегантное порождение curring-функций через bind.


Я плякаль. Тут уже до тебя приводили примеры этой "элегантности". Поверь от нее тошнит.

V>Но это все синтаксис. С точки зрения run-time, в C# динамически создаются экземпляры объектов/замыканий, так что подобный код я бы не рекомендовал


Твои рекомендации к щастью ничего не стоят.

V> применять при обработке значительных объемов данных.




V> Оссобенно хотелось бы отметить эффективность замыкания GreaterOrEquals. Причем ситуация такова, что на данном этапе развития CLR нет никакой возможности оптимизировать это дело, ввиду самой механики эмуляции замыканий. Эти замыкания и код по их вызову "по-честному" создает компилятор. Только вот сам характер генерируемого кода таков, что платформа CLR не в состоянии предотвратить динамическое создание объектов-замыканий никакими оптимизациями, ибо классы, их реализующие, декларативно никак не связаны с целевым методом в конечном байт-коде, кроме как в момент вызова из оного. Т.е. пока что для замыканий существует слишком высокий "abstraction penalty", о котором необходимо помнить (динамическое создание объектов-замыканий!!!).


Ты хоть знаешь сколько стоит создать один мелкий объект? Что касается невозможности оптимизаций, то это не правда. Подобные вещи потенциально полностью устраняются совершенно универсальными алгоритмами.

V>Напротив, в С++ не создаеются динамические объекты, не используется ни полиморфизм или коссвенная адресация, а значит все инлайнится в момент компиляции таким образом,


Хм. Нэемерле тоже не пользуется для таких случаев полиморфизмом. А инлайнится или нет — это уже качество оптимизатора кокретного компилятора. К языку это отношение не имеет.

Зато С++-ный код точно не полноценный. Такое замыкание ни передать никуда нельзя, ни продлить время жизни за пределы функции.


В общем, оправдания убогости стремлением к скорости явно не прокатывает. Скорости ведь хватает. Куда больше можно "выжать" используя более подходящие алгоритмы. А вот выразительности и простоты явно не хватает. Их никогда хватать не будет.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[27]: плохой язык C++ :)
От: Cyberax Марс  
Дата: 10.03.06 16:44
Оценка:
VladD2 wrote:
> V> Кстати, даже в С++ юзают аллокаторы, построенные по принципу GC. И
> некоторые так и делают, особенно в *тех сценариях*, где GC действительно
> является наиболее подходящим.
> Вот и срани как нибудь эти реализации. ЖЦ под обычным С++ — это слезы.
Кхм.

Boehm GC в Mono ничем почти не отличается от обычного Boehm'а,
применимого для С++. Собственно, в Mono их GC сканирует и C-шную часть кода.
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[31]: плохой язык C++ :)
От: Cyberax Марс  
Дата: 10.03.06 16:49
Оценка:
VladD2 wrote:
>> > C>.NET дает возможность писать кривые и уродские приложения. Причем не
>> > C>менее неэффективно, чем VB3.
>> > Понимаш ли в чем дело. Твое злопыхательство ни на грам не повредит
>> > .NET-у, но вот тебя подобные слова выставляют в не очень хорошем свете.
> C>Если ты не заметил, то я просто утрирую твои слова
> И в чем же заключается утрирование?
"Если что-то может быть использовано неправильно — то это отстой и
маздай" — почти ваши слова.

> C>Ну так ты ведь утверждаешь, что всегда надо использовать GC.

> Я утверждаю, что в 99% случаев ЖЦ порвет вашу самопальщину. И делаю
> столь смелые утверждения потому, что сам сделал один из самых быстрых
> "аллкаторов <http://rsdn.ru/article/cpp/QuickHeap.xml&gt;
Автор(ы): Чистяков Владислав
Дата: 26.11.2002
".

Но не самый быстрый. Знаю коммерческий аллокатор, работающий за O(1) для
блоков небольшого размера.

Я уж не говорю, что ваш QuickHeap совершенно непригоден для быстрый
MT-приложений (в них рулит Hoard).

Кроме того, с GC может быть _аллокация_ будет быстрее. Но вот циклы GC
съедают это преимущество.
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[4]: язык C++ :)
От: VladD2 Российская Империя www.nemerle.org
Дата: 10.03.06 17:39
Оценка:
Здравствуйте, KosTiger, Вы писали:

KT>На свете много идиотов — усложнить простые вещи можно на любом языке!


Несомнно, но согласись, С++ будто бы создан для этой задачи!
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[32]: плохой язык C++ :)
От: VladD2 Российская Империя www.nemerle.org
Дата: 10.03.06 17:46
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>"Если что-то может быть использовано неправильно — то это отстой и

C>маздай" — почти ваши слова.

Где я такое говорил?

C>Но не самый быстрый.


Ты провоил измерения?

C>Знаю коммерческий аллокатор, работающий за O(1) для

C>блоков небольшого размера.

QuickHeap именно O(1). Причем с очень незначительной константой.

C>Я уж не говорю, что ваш QuickHeap совершенно непригоден для быстрый

C>MT-приложений (в них рулит Hoard).

Измерял?

C>Кроме того, с GC может быть _аллокация_ будет быстрее. Но вот циклы GC

C>съедают это преимущество.

Дык я как раз сравнивал общее время работы.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[28]: плохой язык C++ :)
От: VladD2 Российская Империя www.nemerle.org
Дата: 10.03.06 17:46
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>Boehm GC в Mono ничем почти не отличается от обычного Boehm'а,

C>применимого для С++. Собственно, в Mono их GC сканирует и C-шную часть кода.

Не потому ли Моно проигрывает дотнету в 2-10 раз по скорости?
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[29]: плохой язык C++ :)
От: Cyberax Марс  
Дата: 10.03.06 18:37
Оценка:
VladD2 wrote:
> C>Boehm GC в Mono ничем почти не отличается от обычного Boehm'а,
> C>применимого для С++. Собственно, в Mono их GC сканирует и C-шную часть
> кода.
> Не потому ли Моно проигрывает дотнету в 2-10 раз по скорости?
В частности из-за этого — специализированый точный GC обычно лучше
консервативного. Ну и JIT у них намного хуже.

PS: а кто тут утверждал, что .NET замечательно работает на куче платформ??
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[33]: плохой язык C++ :)
От: Cyberax Марс  
Дата: 10.03.06 18:41
Оценка:
VladD2 wrote:
> C>"Если что-то может быть использовано неправильно — то это отстой и
> C>маздай" — почти ваши слова.
> Где я такое говорил?

Аллокаторы — это возможность угробить память и насандалить глюков. А с
данными в файлах можно и без них работать. Причем не менее эффективно.


> C>Но не самый быстрый.

> Ты провоил измерения?
Уже да

> C>Знаю коммерческий аллокатор, работающий за O(1) для

> C>блоков небольшого размера.
> QuickHeap именно O(1). Причем с очень незначительной константой.
У меня меньше — только простые битовые операции используются (всего с
одним ветвлением, от него тоже можно избавиться).

> C>Я уж не говорю, что ваш QuickHeap совершенно непригоден для быстрый

> C>MT-приложений (в них рулит Hoard).
> Измерял?
Вижу по коду — есть синхронизации. В Hoard'е в большинстве случаев даже
атомарные операции при распределении памяти не используются — она
берется из арены текущего потока.

Ну и сложность у Hoard'а соответствующая.

> C>Кроме того, с GC может быть _аллокация_ будет быстрее. Но вот циклы GC

> C>съедают это преимущество.
> Дык я как раз сравнивал общее время работы.
Тесты в студию. И еще надо помнить, что в С++ есть автоматические объекты.
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[27]: плохой язык C++ :)
От: vdimas Россия  
Дата: 10.03.06 18:59
Оценка:
Здравствуйте, VladD2, Вы писали:

V>>Вот не надо эту мысль озвучивать без уточнений, а то черезчур неграмотно выглядит. GC "рвет" не все аллокаторы и далеко не во всех сценариях использования.


VD>Ты за свой проффесионализм бойся, а за мой не надо. Я понимаю что говорю. В большинстве случаев порвет. А тот 1-2% происходят когда оптимизацией занимаются действительно знающие люди и в довольно редких случаях. Пока хорошему ЖЦ хватает памяти он весьма эффективен.


Влад, я очень часто использую аллокаторы стекового типа. Причем они абсолютно безопасны, в отличие от обычных сишных массивов. И они очень сильно рвут GC. Причем, если брать сервер под нагрузкой, то надо учитывать не только быстрое выделение памяти, но и "небыстрый" GC при освобождении. А в стековых аллокаторах практически нулевые издержки на обе операции.

Эффективность ЖЦ зависит не только от кол-ва памяти (ведь потребность в памяти — величина относительная), а так же от сценариев использования. Например, если мы в одном потоке создаем данные, а потом передаем для обработки в другие потоки, то GC здесь — идеальное решение, и он порвет все, что можно порвать. В таких случаях и в С++ будет грамотно задействовать GC. Кстати, все сишные и плюсовые реализации Лиспа и Схемы используют GC. ВСЕ БЕЗ ИСКЛЮЧЕНИЯ.

V>> Кстати, даже в С++ юзают аллокаторы, построенные по принципу GC. И некоторые так и делают, особенно в тех сценариях, где GC действительно является наиболее подходящим.


VD>Вот и срани как нибудь эти реализации. ЖЦ под обычным С++ — это слезы.


Я не понял, что именно ты имеешь в виду. В С++ работу с GC осуществляют через GC-хендлы, и значения этих GC-хендлов точно так же корректируются при уплотнении памяти. Если ты именно это имел в виду... то это не проблема.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[39]: плохой язык C++ :)
От: alexeiz  
Дата: 10.03.06 21:13
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>igna wrote:

>> P.S. Думаю, это непродумано в стандарте, что std::string с разными
>> аллокаторами нельзя присваивать друг другу.
C>Ага, и то что allocator::pointer и allocator::const_pointer должны быть
C>простыми указателями.

C>Обещают исправить в C++09


Ничего подобного. Новая модель аллокаторов не прошла. Она не дружит с временными копиями, RVO и rvalue reference.
Re[32]: плохой язык C++ :)
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 10.03.06 21:46
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>Запросто — формировать кэш для быстрой работы. В .NET же используется GAC — чем я хуже?


Ты это, если не знаешь что такое GAC, лучше его не упоминай.
... << RSDN@Home 1.2.0 alpha rev. 646 on Windows XP 5.1.2600.131072>>
AVK Blog
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.