PDA

Просмотр полной версии : Великий и ужасный С++



Absurd
17.08.2004, 17:13
Знаешь, Absurd, разработать язык, который нашел такую область применения не каждому дано! Уверен ты на это не способен!

Более чем уверен что создать массовый язык я бы не смог. Но почему-то я больше уважаю авторов непопулярных языков - за интересные идеи и конструкции, и за новые средства структурирования программ.

Языки побеждают и проигрывают в основном не из-за талантливого дизайна или возможностей. Язык побеждает, если он дает возможность превратить программу в выгребную яму.

Поэтому, например так процветает PHP - там не нужно придумывать структуру проекта, или иначе тратить свое время. Там все заточено для быстрого лабания. Взял один кособокий скрипт, подрихтовал, присоединил сбоку другой скрипт, не срастается. Тогда запихал вывод первого скрипта в буффер, запихал содержимое буффера в шаблон страницы, и скормил этот шаблон другому скрипту. Ура! Работает!



Лично я предпочитаю Страуструпа, чем какого-либо посредника, который выступает в роли испорченного телефона!


Вообще Строуструпа читать легко. Только почему-то к мозгам ничего не прилипает. Это как Горбачев выступал: говорит, говорит, умно говорит. Потом пытаешься вспомнить: что говорил? А вот хз.

Элджер или Мейерс как - то интереснее.
Депрессивная информация как-то лучше усваивается. Я заметил, что депрессивные книжки буржуи называют с приставки "Effective". Изучаю тут Java по "Effective Java" - тоже намного лучше, чем thinking in Java или Сановские книжки.



Сорри, AiK. Обидно ведь: обзывают тут шизом и фанатиком того, благодаря которому мы здесь собираемся!

Обычно, чем больше на чем-то пишут, тем меньше это любят. Довольно печально видеть С++ - ный список ошибок, если там чего - то наглючено с STL. Были бы в С++ встроенные хотя бы динамические массивы и строки было бы намного легче.

Anonymous
26.08.2004, 12:09
Лично мне тоже нравится Страуструп - прост оэто не учебник а что-то типа спецификации - а стандарты никогда к мозгам не пристают :)
А в STL строк разве нет ???

Absurd
26.08.2004, 15:04
А в STL строк разве нет ???
Строки должны быть атомарным типом. Чего-то напрягает читать вот такие ошибки
error C2440: 'initializing' : cannot convert from 'class _STL::map<class _bstr_t,class _variant_t,struct _STL::less<class _bstr_t>,class _STL::allocator<struct _STL::pair<class _bstr_t const ,class _variant_t> > > *' to 'class _STL::map<class _bstr_t,class _variant_t,struct _STL::less<class _bstr_t>,class _STL::allocator<struct _STL::pair<class _bstr_t const ,class _variant_t> > > &' A reference that is not to 'const' cannot be bound to a non-lvalue

Anonymous
26.08.2004, 16:31
Отчасти согласен но ведь никто не ругает паскаль за то что там нет динамической работы с памятью (я слышал что в старших версиях есть но точно не знаю потому сильно не пинайте) или битовых операций.
Или ассемблер за его команды.
Так и здесь - реализовать это можно - но надо быть внимательным ;).
Хотя если бы были встроенным типом - было бы немного приятнее. :)

DeeJayC
26.08.2004, 19:14
Хотя если бы были встроенным типом - было бы немного приятнее. :)

Вот уж.. (кхе) нет. Сколько байт строка занимает в памяти?
Скажите, пожалуйста?

строка = массив. И это правильно, товарищи. Кому не
нравится stl класс - пишите свой. Или пишите на паскале.

Kolinus
26.08.2004, 19:50
Строка - количество байт +1 если речь идет о байтовом массиве использующим набор из 255 символов (типа аски)
а объект строки стл - точно не помню вроде 16 байт + количество символов.
По поводу свлего класса - согласен писать стоит.

Absurd
27.08.2004, 10:40
Вот уж.. (кхе) нет. Сколько байт строка занимает в памяти?
Скажите, пожалуйста?
Как любит выражаться Страуструп, это error prone на небрежно написанный код.
Программиста такие вещи как количество символов и количество байт на символ не должны волновать.

Absurd
27.08.2004, 12:10
а объект строки стл - точно не помню вроде 16 байт + количество символов.
Сам экземпляр объекта не требует больше, чем 4 байт, т.к. там достаточно всего одного члена - указателя на буффер.
В буффере может храниться помимо сиимволов еще какая-нибудь лабуда для подсчета ссылок и/или синхронизации
многопотокового доступа.

Kolinus
27.08.2004, 12:51
Это понятно (про указатель (но скоро будет 8 байт :)))я имел ввиду не указатель а сам обэект, созданный статически.

Absurd
27.08.2004, 13:33
я имел ввиду не указатель а сам обэект, созданный статически
Выражение sizeof(std::string) внолне может быть равно и четырем.

DeeJayC
27.08.2004, 13:52
Программиста такие вещи как количество символов и количество байт на символ не должны волновать.

Ню-ню... Ещё как должны.

А также программиста, видимо, не должны волновать
platform-dependent штуки. Ну дык, уважаемый, срочно садимся
за мак и пишем на жабе.

Kolinus
27.08.2004, 15:22
На Java тоже все не так просто и там тоже порой ой как волнует и количество символов на строку и кодировка.
А по поводу плтформ депендент штук - по -моему системного ПРОГРАММИСТА они в первую очередь и должны волновать. А прикладника - скажем так - он о них должен помнить (ИМХО).

Absurd
27.08.2004, 16:19
А также программиста, видимо, не должны волновать
platform-dependent штуки
В С++ объекты отличаются от С-style POD данных. К полноценным объектам, имеющим конструктор, неприменимы операции прямой работы с памятью типа realloc/memmove/memcpy либо их запись на диск с помощью fwrite.
Если бы в C++ был атомарный тип string, то его невозможность помещения в рамки POD структуры не была бы сильным недостатком.
Разумеется, возможность его конверсии в char[] должна была быть предусмотрена.

Ну дык, уважаемый, срочно садимся за мак и пишем на жабе.
Нет уж нет уж. Задача платформеннозависимая. Юзаю _bstr_t и _variant_t в конъюнкции с STL и разгребаю монструозные сообщения об ошибках.
В Дельфи надо брать SDK от каких-то левых лиц, что тоже паршиво.

DeeJayC
27.08.2004, 18:12
На Java тоже все не так просто и там тоже порой ой как волнует и количество символов на строку и кодировка.


В жабе, кстати, string тоже класс.



А по поводу плтформ депендент штук - по -моему системного ПРОГРАММИСТА они в первую очередь и должны волновать. А прикладника - скажем так - он о них должен помнить (ИМХО).

Вот уж фигушки. Если работать с вычислительными задачами - то
ИМЕННО на платформенно-зависимые штуки внимание и стоит обратить.

alexx
27.08.2004, 22:15
Нередко надо точно знать положение данных в памяти и контролировать её потребление, иначе эффективно задачу не решишь. С и С++ для этого идеально подходят.

Но нужна ли эта сила для рутинных операций, например обработка реакций юзверя, строчные манипуляции до 1-2 MB?
С неподходит, но С++ имеет достаточно средств для этого. Ими и пытается научить пользоватся Страуструп. Дать определённый стиль создания кода.

Сам пока ещё это до конца не постиг, но надеюсь получится, уж больно убедительно дядька пишет ;-)

Anonymous
28.08.2004, 15:24
В жабе, кстати, string тоже класс
Там это реализовано довольно прозрачно. В С++ же стиль использования класса std::string надо варьировать в зависимости от реализации STL.


Вот уж фигушки. Если работать с вычислительными задачами - то
ИМЕННО на платформенно-зависимые штуки внимание и стоит обратить.

В Java версии 1.1 BigInteger и BigDecimal были реализованы через JNI.
Потом в 1.3 их переписали на чистый Java. Производительность особо не изменилась.

Kolinus
28.08.2004, 19:32
"Вот уж фигушки. Если работать с вычислительными задачами - то
ИМЕННО на платформенно-зависимые штуки внимание и стоит обратить"
И я о том же - прикладник - в первую очередь думает о пользователе а не о качесвте вычисдительных алгоритмов.