Про удовольствие работать с большой кучей кода на С++ написано много и здорово. К сожалению, люди, потратив кучу времени и убедившись в бессмысленности попыток писать съедобный код на С++, редко хотят тратить время еще и на то, чтобы убедить в этом других.
А между тем было бы хорошо убедить людей не начинать новых проектов на С++. Вот я и написал C++ FQA Lite. FQA есть Frequently Questioned Answers; там приводятся вопросы и ответы из C++ FAQ Lite, а также технические подробности, о которых FAQ умалчивает или же, как бы это помягче, сообщает не то, что есть на самом деле.
FQA, как и FAQ, большой, и выдержать столько C++ зараз нормальному человеку не под силу - FQA расчитан на "пробежку" по интересующим вопросам. "Линейно" читабельные секции:
Defective C++ - про технические проблемы
Big Picture Issues - про контраст между мыслью из FAQ'а о том, что "C++ is a solid, mature, mainstream tool, good from an overall business perspective" и суровой действительностью.
UPDATE: Характер общения здесь и на reddit.com привел меня к решению обсуждать FQA по мейлу, поэтому на комментарии я больше не отвечаю. Спасибо всем, кто выступает здесь или где-либо на стороне FQA, помогая наблюдателям, особенно неопытным, полнее увидеть картину отношения программистов к С++. Я со своей стороны интересуюсь аргументированной критикой как С++, так и С++ FQA, и собираюсь публиковать и то, и другое с указанием авторства. Мейл гораздо больше подходит для сбора такого материала, чем комментарии.
Ответы на наиболее часто встречающиеся вопросы и утверждения - здесь.
← Ctrl← Alt
Ctrl →Alt →
October 23 2007, 22:27:29 UTC 4 years ago
October 23 2007, 23:03:51 UTC 4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
October 23 2007, 22:57:56 UTC 4 years ago
October 23 2007, 23:05:58 UTC 4 years ago
Или очень красивый код на C++ превращает грамматику C++ в контекстно-свободную?
Магия!
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
October 23 2007, 23:41:35 UTC 4 years ago
Вопрос в том, что, кроме критики, хотелось бы услышать конструктивные предложения.
На данный момент, С++ для меня - наименьшее из зол, учитывая что я стремлюсь к полноте языковой функциональности вместе с максимальным сохранением эффективности.
Например, я многое прощал C++Builder, пока единственной ему альтернативой был MFC. С появлением QT и в особенности Ultimate++, я с радостью пересел на них и доволен по многим пунктам.
Критика является важной частью поступательного развития в качестве создания базы, на которой формируется следующий скачок прогресса. Просто я был бы благодарен, если бы вы развили свою мысль в сторону конкретных предложений (модификация языка, либо предложение альтернатив).
October 23 2007, 23:49:17 UTC 4 years ago
Взгляните, опять же, на D (если ещё не).
А если на то пошло, то haskell или erlang на некоторых классах весьма практических задач любому C++ фору дадут.
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
October 23 2007, 23:54:49 UTC 4 years ago
October 24 2007, 11:04:48 UTC 4 years ago
October 24 2007, 00:56:15 UTC 4 years ago
October 24 2007, 00:59:30 UTC 4 years ago
4 years ago
October 24 2007, 03:01:38 UTC 4 years ago
это гон. при определении шаблона иметь operator<< не надо. надо при инстанциировании, а это уже не в хедере.
October 24 2007, 10:07:30 UTC 4 years ago
gcc 4 с вами не согласен:
//try.cpp #include using namespace std; template void f(const T& x) { cout << "default f: " << x << endl; } #ifdef VISIBLE_BEFORE_POINT_OF_DEF void f(const int& x) { cout << "non-default f (defined before user_func() definition): " << x << endl; } #endif template void user_func(const T& x) { f(x); } #ifndef VISIBLE_BEFORE_POINT_OF_DEF void f(const int& x) { cout << "non-default f (defined before user_func() call): " << x << endl; } #endif int main() { user_func(5); }Результат:
А вот gcc 3 (более старый и менее стандартный) двумя руками за вас:
В обоих случаях он нашел f(int). Честь ему и хвала. Когда вы будете портировать ваш код, испещренный кучей темплэйтов на новый компилятор, вы не раз помянете толерантный gcc 3 добрым словом.
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
October 24 2007, 03:56:34 UTC 4 years ago
October 24 2007, 10:08:31 UTC 4 years ago
October 24 2007, 05:34:52 UTC 4 years ago
October 24 2007, 09:36:28 UTC 4 years ago
EDA? Здорово! Synopsys сегодня продает ваш продукт?
А у Denali мы DDR2 controller закупаем...
Я писал компилятор для hardware description language собственного сочинения, но для внутреннего пользования, и без синтезирования/генерации RTL. То есть без оптимизации и без поддержки существующих стандартов - no-brainer, так сказать. Но инженер, который его юзал, положил болт на ранее написанный им код на SystemC. Он не мог понять, откуда столько operator<< берется в сообщениях об ошибках. Это было как раз тогда, когда я неожиданно для самого себя начал подозревать, что без C++ работается гораздо быстрее.
October 24 2007, 05:42:24 UTC 4 years ago
Альтернатив ему нет.
October 24 2007, 06:58:49 UTC 4 years ago
Альтернатив попсе нет.
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
October 24 2007, 05:44:22 UTC 4 years ago
Мне еще нравится вот что.
October 24 2007, 09:49:15 UTC 4 years ago
Когда-то давно я пытался заставить класс, который представлял fixed point numbers, заставить тихо каститься в float, но не int. explicit-конструкторы есть, а вот кастов - нет! Кончилось тем, что я сделал отдельные операторы каста в int, а внутри - static assert какой-то.
4 years ago
4 years ago
4 years ago
October 24 2007, 05:50:13 UTC 4 years ago
Почитать текст со всеми комментариями можно тут
Это Ваш 2-й ТОПовый пост за последний год. Посмотреть статистику автора можно тут.
Этот "бот не имеет отношения к Яндексу" © НадежныйИсточник
October 24 2007, 06:54:48 UTC 4 years ago
October 24 2007, 08:57:03 UTC 4 years ago
2. Русский перевод FAQ-а неполный, а там линки на FAQ и пересказы его ответов.
3. Вставлять в русский текст "шаблон"/"темплейт"/"template", конечно, можно, но если текст все время упоминает такие понятия, это начинает надоедать.
October 24 2007, 08:24:10 UTC 4 years ago
Во-вторых, не нравится - не кушай.
В-третьих, С++ - инструмент, и как любым инструментом им нужно уметь пользоваться, чтобы получить желаемый результат. Какой смысл обвинять молоток в том, что им плохо гайки закручивать...
October 24 2007, 08:52:43 UTC 4 years ago
Во-вторых, по-возможности стараюсь не кушать. Более того, нравится - кушай. Особенно если ты из конкурирующей фирмы. Я же не государственный чиновник, призывающий в законодательном порядке программировать на Аде, скажем, и запретить С++.
В-третьих, язык - это не совсем инструмент. Не говорить по-английски, конечно, можно, но затруднительно - network effects. В этом смысле grep - инструмент, а Linux - язык/инфраструктура/как угодно можно называть, но не совсем инструмент. Поэтому "не кушать" С++ часто требует отказаться от участия в хорошем проекте. Хотелось бы не делать этот выбор.
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
October 24 2007, 08:50:34 UTC 4 years ago
Я об этом давно писал.
http://arbinada.com/main/node/85
October 24 2007, 14:53:09 UTC 4 years ago
Например, очень много ПО пишется для embedded systems. Большая часть сетевых обсуждений ПО касается исключительно IT. В embedded С++ только начинает теснить С, и может пройти очень много времени, пока С начнет восстанавливать позиции.
Но дело не в прогнозах. На С++ пишет больше трех миллионов человек. Многие не пробовали писать на других языках. Они принимают проблемы С++ как неизбежные проблемы программирования как такового. FQA я писал, чтобы убедить их в обратном, или, на худой конец, развлечь их коллег, которым приходится иметь дело с их системами. Тренды меня не интересуют.
4 years ago
October 24 2007, 11:21:55 UTC 4 years ago
Все правильно
Почитал я в свое время про C++ (шаблонов тогда еще не было) и подумал - да идите-ка вы в уй с таким мутным языком. С тех пор дел с ним не имел, чем и доволен.October 24 2007, 12:01:57 UTC 4 years ago
Re: Все правильно
Завидую. У меня С++ был практически первый серьезный язык. То есть я довольно долго думал, что так и надо.А С++ без темплейтов - это просто сказка :) Темплейты - это и потрясающая скорость компиляции, и отличные сообщения об ошибках, и зверские осложниния с overload resolution, и невозможность парсить код...
4 years ago
Deleted comment
3 years ago
October 24 2007, 12:09:57 UTC 4 years ago
Выпей иаду!
Аффтар! Убей сибя ап стену!October 24 2007, 13:43:22 UTC 4 years ago
Расслабтесь и наслаждайтесь.
Этот "бот не имеет отношения к унылому говну" © Инквизиция
October 24 2007, 14:39:17 UTC 4 years ago
только Вы там часто пишете "it's" вместо "its"
"it's" -- это просто аббревиатура для "it is"
"its" -- это "его (вещь), её (вещь)"
October 24 2007, 14:46:02 UTC 4 years ago
И еще раз спасибо. Теоретически я это знаю, а практически как бы и нет...
4 years ago
October 25 2007, 13:45:40 UTC 4 years ago
Гораздо жальче свою собственную бедную голову, которую при использовании C++ придется забивать всякой не относящейся к делу чепухой. И времени, потраченного на починку багов, возникших потому, что вся потребная чепуха в человеческую голову просто не помещается.
October 25 2007, 13:55:01 UTC 4 years ago
Я согласен насчет головы и времени. Важность скорости компиляции варьируется от проекта к проекту. Однако вылечить проблемы скорости компиляции заменой чего-либо, кроме языка, в данном случае маловероятно. Скорость компиляции С++ обуславливается объективной сложностью его грамматики и #include files, а частота рекомпиляции - теми же #include files и способом определения private data. Современные компиляторы, бегущие на очень хороших машинах, компилируют С++ медленно, и довести любой из них до internal compiler error довольно легко. То, что не изменилось за 30 лет, несмотря на финансовую заинтересованность тысяч преуспевающих организаций, вряд ли изменится теперь.
October 26 2007, 07:56:41 UTC 4 years ago
должен отдельно прокомментировать проблему, описываемую в пунктах 11.5-11.8. непонятно почему автор исходного faq об этом не пишет, но оно решается элементарно с помощью std::auto_ptr. он может быть и NULL и может удалить объект тогда когда хочет разработчик, а не только когда он goes out of scope. и никаких ручных вызовов деструктора и placement new.
ещё мне кажется, вы в тексте используете многовато эмоциональных слов, словно anti-C++ evangelist какой-то, честное слово. :) вроде всё по делу, но букв таки многовато.
насчёт инструментария, помогающего сопровождать разработку, вы правы - Visual Assist для студии, несмотря на годы разработки и невероятные способности по разбору сложнейших ситуаций, до сих пор спотыкается об тот же boost. по сравнению с resharper для с#, который с самых первых версий без проблем обеспечивает нормальный code completion и refactoring, это наводит на печальные размышления.
единственный пожалуй случай, когда мегавозможности с++ действительно оказываются полезны - это как раз таки code obfuscation. для защиты приложения приходится скрывать методы проверки регистрационного ключа (мои проекты - шареварь) и тут использование шаблонов превращает код в такое спагетти, что ломать его и впрямь становится проблематично. в противоположность дотнету, которому никакой обфускатор не поможет...
главное забыл написать - спасибо за текст. :) ваш английский не так уж плох, чтобы за него извиняться. пожалуй, учитывая большое количество нативных терминов, этот текст был бы гораздо менее понятен, будь он написан на русском. :)
October 26 2007, 08:43:16 UTC 4 years ago
Ну да, у меня, скажем, есть библиотека на С++, 25 кило строк, и я живу с ней нормально. Да, компиляция занимает минуты вместо секунд, был геморрой с поддержкой исключений, когда есть несколько динамических библиотек одновременно, но жить можно...
"...оно решается элементарно с помощью std::auto_ptr"
В принципе решается, за счет new/malloc. Некоторые не любят лишних malloc-ов, и С++ в целом очень старательно их избегает (сует private в headers, например). Так что инерцию программистов можно понять, хотя на самом деле malloc - это далеко не так страшно. Еще прикол - точки на стрелки заменять, когда поймешь, что нужен std::auto_ptr. Но это мелочи, как и сами вопросы. Я про них и писал-то для полноты картины, так сказать...
"ещё мне кажется, вы в тексте используете многовато эмоциональных слов..."
Дело в том, что люди и так могут заснуть, а если бы я писал в стиле, скажем, Страуструпа - холодная объективность, придаточные предложения и миллион оговорок - то 99 человек из 100 упали бы через 5-10 минут. Кроме того, сам FAQ весьма эмоционален, а я с ним вроде как дискутирую, так что мне можно :)
"насчёт инструментария, помогающего сопровождать разработку, вы правы"
ООО! Особенно здорово в дебаггере ковыряться в этих объектах, или рефакторинг делать.
"единственный пожалуй случай, когда мегавозможности с++ действительно оказываются полезны - это как раз таки code obfuscation."
Честно говоря, я в шоке - не думал, что кто-то использует С++ по назначению :)
"спасибо за текст"
Спасибо за ответ! Тем более тут во многих саб-трэдах небогато.
За английский я извиняюсь в основном перед теми, у кого он родной, полагая, что им может довольно сильно резануть то, на что другие, даже заметив, не особо отреагируют.
А писать по-русски про шаблоны, строки, массивы и исключения - печальная штука.
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
October 26 2007, 11:54:38 UTC 4 years ago
Кстати, совет/просьба. Поскольку документ, я так понимаю, вы составили в дискуссионных целях (и даже закинули в c.l.c++.m.), было бы неплохо снабдить его параграфы, для облегчения ссылок, якорями. Типа http://blablabla.com/fqa#10.9.
October 26 2007, 13:35:41 UTC 4 years ago
10.9 - это действительно очень печальное явление.
А якоря есть, например: http://yosefk.com/c++fqa/ctors.html#f
В каждой секции сверху есть оглавление, и если нажать на линки, то в адрес-баре браузера и будет якорь.
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
October 26 2007, 15:09:13 UTC 4 years ago
И чем ругаться на "плохой" язык лучше его освоить.
October 26 2007, 17:02:09 UTC 4 years ago
Поддержка объектно-ориентированного программирования в С++" - та самая хорошая фиксация, которая заменяет анестезию.
Если ФП есть функциональное программирование - то тут дело еще хуже (сравните поддержку и того, и другого с D, например). Насчет скорости пробега - C и D бегут довольно резво, а программы на С++ тратят немало времени на копирование строк из одного класса в другой (есть еще char*, это тоже кончается копированием). К сожалению, многие люди думают, что скорость пробега им важна, но никогда ее не измеряют. Однако у меня нет достаточных причин предполагать, что вы из их числа.
Если вы хотите продолжать дискуссию, обсуждая при этом тему, а не личность незнакомого собеседника, я со своей стороны охотно поучаствую. В противном случае вы сможете лишь сказать последнее слово.
4 years ago
October 26 2007, 15:25:25 UTC 4 years ago
October 26 2007, 17:06:15 UTC 4 years ago
October 26 2007, 21:48:42 UTC 4 years ago
October 26 2007, 22:39:06 UTC 4 years ago
Есть немало людей, которые все это очень хорошо знают, просто облом писать про такие вещи - человек уже сам все понял, зачем описывать запах дыни тому, кто всю жизнь жевал сапожные шнурки (с) Шкловский/Довлатов, особенно если он еще предлагает выпить яду или еще чего-нибудь дельное? Я и сам много раз хотел бросить это дело.
В связи с обилием реакций, через несколько часов должны быть готовы мега-баннеры для линкования к FQA. Буду благодарен за их юзанье (или просто линк)...
October 27 2007, 01:13:29 UTC 4 years ago
кстати, советую посмотреть на BitC, nesC, и Cyclone - раз уж Вы рассматриваете альтернативы. и на проект L4Ka::Pistachio тоже посмотрите, если считаете, что на C++ нельзя писать мощно и элегантно. а ещё выскажите свои мысли в Edison Design Group - они знают, каково это - делать компилятор C++. посмотрите C++0x - создаётся впечатление, что Вы о нём и не слышали, хотя 2009 год уже скоро. сравните важность введения в язык рефлекшна о котором вы столько пишете, и концепций, о которых молчите...
по сути Ваш FQA - констатация собственного бессилия. да, C++ язык сложный; да, хорошо на нём писать научится очень непросто, это требует времени и упорства. Вы сдались, пошли более простым путём. это Ваше право. но знайте - Вы всё же потеряли на этом один из инструментов в собственном арсенале
October 27 2007, 20:54:40 UTC 4 years ago
Стирать я в любом случае ничего не буду, включая коммент про "выпей йаду". Зачем редактировать суровую действительность?
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
3 years ago
3 years ago
3 years ago
3 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
← Ctrl← Alt
Ctrl →Alt →