yigal_s: (Default)
[personal profile] yigal_s
http://yosefk.com/c++fqa/

Эт сильно. Очень сильно. Чую, я буду это читать и перечитывать.

via link

Date: 2007-10-24 01:36 am (UTC)
From: [identity profile] solomon2.livejournal.com
Да фигня это все. Нормальные люди ограничиваются неким разумным подмножеством языка и на нем пишут. Большой плюс сиплюсплюса в том, что решение о разумном подмножестве принимает сам программист в отличие от провидцев-творцов других языков.

Date: 2007-10-24 01:41 am (UTC)
From: [identity profile] disbalanced.livejournal.com
Это верно, но лишь до определённой степени.
Вменяемый программист напишет вменяемый код на любом языке.
Пижонистый мудак в С++ может наворотить такого...
В жабке у него простору всё же поменьше. В шарпе тоже, вроде, даже несмотря на то, что там своих мудацких наворотов достаточно.
Плюс отсутствие reflection - действительно серьёзный минус. Иногда бывает такое ощушение, что хочешь что-то сказать - а не можешь :)

Date: 2007-10-24 01:37 am (UTC)
From: [identity profile] disbalanced.livejournal.com
Спасибо! Тащусь!

Date: 2007-10-24 02:10 am (UTC)
From: [identity profile] dr-tambowsky.livejournal.com
Гыгыгы :) Это что, шутка юмора такая? ;)

Date: 2007-10-24 07:19 am (UTC)
From: [identity profile] aamonster.livejournal.com
Да нет, это очень слабо. В силу того, что автор уперся в идею показать, что C++ - это плохо, и даже не думает о том, чтобы сказать - а что же, собственно, надо сделать, чтобы было хорошо.

Т.е. много умного сказано - но сильно перемешано с глупостями, и разгребать... ну, с учетом того, что практически все умное, что мне попалось, я и так знаю - нет смысла.

Date: 2007-10-24 11:37 am (UTC)
From: [identity profile] cmm.livejournal.com
сильно перемешано с глупостями

можно пример?
(только действительной глупости, а не скучного непопадания в Ваш вкус).

Date: 2007-10-24 12:09 pm (UTC)
From: [identity profile] aamonster.livejournal.com
Ну, к примеру, претензия "No run time encapsulation" - это всего лишь непонимание того факта, _почему_ ее нет. То же относится к "No reflection". И то, и другое - не минусы языка, а его особенности, которые надо учитывать. Которые создают некоторые неудобства (про них написано), но дают и преимущества (попробуйте написать какую-либо обработку изображения, обеспечив тот самый encapsulation - вы очень быстро поймете, что это _тормозит_).

Или вот пиздеж про "C++ doesn't have garbage collection, since that, folks, is inefficient". Такую хуйню сморозить - уметь надо. Во первых, garbage collection не обязана быть частью языка, и пользоваться ей в C++ никто не мешает. Во вторых, в изрядной части случаев как раз использование gc ведет к неэффективности.

А вот для сравнения претензия "Very complicated type system" (на примере типов из STL) мне очень близка и понятна. Но как раз это - вкусовщина, кто-то стерпит (хотя я с нетерпением жду введения в стандарт возможностей вроде auto типа переменных).

Короче, надо понимать, что и как устроено в C++. Да, он далек от совершенства, но вполне себе язык.

Кстати, что еще раздражает. Автор пишет, что что-то плохо - но не предлагает лучшего решения. И даже не думает, что будет, если изменить то, что ему не нравится. Неконструктивная критика...

Date: 2007-10-24 12:24 pm (UTC)
From: [identity profile] cmm.livejournal.com
претензия "No run time encapsulation" - это всего лишь непонимание того факта, _почему_ ее нет. То же относится к "No reflection".

да понимает, он, понимает.
пишет же что C++ — unmanaged, что позволяет втискивать программы в маленькую память и оптимизировать всякую низкоуровневую хрень.
для "general-purpose" языка отсутствие рефлексии непростительно.

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

garbage collection не обязана быть частью языка, и пользоваться ей в C++ никто не мешает.

спасибо, посмеялся.  это примерно как заявить, что exception handling можно игнорировать, никто типа не мешает.

в изрядной части случаев как раз использование gc ведет к неэффективности.

посмеялся ещё раз, причём несколько громче.

но вполне себе язык.

Интеркал — тоже вот вполне себе язык.

Неконструктивная критика

вот это, кстати, интересная фигня.  этой фразой обычно начинаются фасцинирующие беседы следущего вида:

- то есть как не предлагают лучшего решения, да вы блин вот сюда посмотрите и вот тут почитайте
- но позвольте, это же совсем не C++!
- ну да, не C++
- ну и кто будет этим пользоваться? (вариант: никто не будет этим пользоваться, потому что есть C++)

Date: 2007-10-24 12:30 pm (UTC)
From: [identity profile] aamonster.livejournal.com
На самом деле давайте упростим спор. На каком языке вы предпочитаете писать? Могу на выбор или раскритиковать его (для случая, когда хотя бы мало-мальски сносно его знаю) или послать туда, где раскритикуют обоснованно.

Хотя на самом деле суть бОльшей части критики будет в том, что подберут условия, для которых он не подходит, и покажут, что не подходит. Сравнив со своим любимым языком, который подходит. Потом вы подберете подходящие условия для своего языка (и неподходящие для чужого), и так далее.

P.S. Меня самого C++ во многом не устраивает. Но с альтернативами для моих задач пока не густо: я вынужден не то что держаться за конкретный язык - держаться за конкретный компилятор/среду и с ощутимым трудом мигрировать с одной версии на другую.

Date: 2007-10-24 12:44 pm (UTC)
From: [identity profile] cmm.livejournal.com
да неочем спорить, собственно.
для меня обсуждаемый текст ценен своим форматом и презентацией: это удобное место тыкать людей носом.
написано, опять же, живенько.

Date: 2007-10-24 01:00 pm (UTC)
From: [identity profile] aamonster.livejournal.com
Написано живенько, но тыкать носом не советую: если попадется человек, который пишет на C++ и тот его пока не достал - будет holy war. А если человек, которого достал - то он в рамках своих задач недостатки и сам знает, ему будет просто неинтересно. Ну а уж человеку, который не пишет на C++, это и знать не надо.

Date: 2007-10-24 12:16 pm (UTC)
From: [identity profile] aamonster.livejournal.com
А вообще, конечно, любой подход типа "xxx sux, yyy rulez" ведет к такой аргументации. Пойдите, пообщайтесь с фанатами Haskell - они вам так обругают C++ (и все прочие императивные языки заодно), что закачаетесь.
И ведь обоснуют не хуже (а то и лучше), чем автор FQA.
Или поищите старые споры "C vs Pascal".

Date: 2007-10-24 12:25 pm (UTC)
From: [identity profile] cmm.livejournal.com
Или поищите старые споры "C vs Pascal".

C и Pascal — это, в обчем-то, один и тот же язык.

Date: 2007-10-24 12:32 pm (UTC)
From: [identity profile] aamonster.livejournal.com
Гы, скажите тем, кто годами спорил =).
И если это один и тот же язык - то где, блин, мой любимый оператор with? Почему я вынужден писать гребаные конструкции типа
срань* p=моя_великая срань;
p->call1();
p->call2();

А? ;-)

Date: 2007-10-24 03:15 pm (UTC)
From: [identity profile] juan-gandhi.livejournal.com
Классное чтение. Я-то, тёмныё джавщик, как залезу в си, так начинаю спрашивать - а где это, а где это? А нэту. В перле есть, а в си нету. И вот наши интервьюёры тож - когда послушаешь их, какие они вопросы задают про стековые переменные - уши вянут. Это как 20 лет назад всех доставали битами в байтах, типа ну как ну как мы инвертируем биты с помощью арифметики, и т.д. Кого это трахает? Не хватало ещё про задержки на триггерах начать спрашивать.

Date: 2007-10-24 08:28 pm (UTC)
spamsink: (Default)
From: [personal profile] spamsink
Не хватало ещё про задержки на триггерах начать спрашивать.

Смотря кого. Кое-кто на этих задержках деньги делает.

Date: 2007-10-24 08:31 pm (UTC)
spamsink: (Default)
From: [personal profile] spamsink
С половиной можно согласиться, а другая половина - вся "ах, C++ unmanaged, а я так люблю managed!" Ну и люби свой свиной хрящик, и не лезь в наши арбузы. Не приходилось, видать, ему ни разу писать коммерческие программы, у которых не увеличивается вдвое потребность в памяти при переходе с 32-битной на 64-битную платформу, так и пусть молчит в тряпочку.

Date: 2007-10-24 09:09 pm (UTC)
spamsink: (Default)
From: [personal profile] spamsink
этот человек очень долго писал практически исключительно на С++.

Верю, но на чем именно он писал - не главное. Главное - что именно он писал.

А где такие суровые требования к 64-битной платформе?

Там, где размеры задач становятся больше 4 Гб, и где переход на 64-битную платформу не должен вызывать ухудшения производительности в связи с возросшей вдвое нагрузкой на кэш.

Date: 2007-10-24 09:06 pm (UTC)
From: [identity profile] cmm.livejournal.com
Не приходилось, видать, ему ни разу писать коммерческие программы, у которых не увеличивается вдвое потребность в памяти при переходе с 32-битной на 64-битную платформу

мне приходилось.  клиенты переходили на 64 бита, поскольку их большущим симуляциям на 32 битах элементарно переставало хватать адресного пространства.  то что при этом расход памяти увеличивался в 1.5 раза (не в два, int типа всё равно 32 бита), не трогало решительным образом никого.
(движок был managed, ага).

Date: 2007-10-24 09:11 pm (UTC)
spamsink: (Default)
From: [personal profile] spamsink
У нас другие структуры данных и другой паттерн обращения к памяти. Кэш - не резиновый.

Date: 2007-10-24 09:18 pm (UTC)
From: [identity profile] cmm.livejournal.com
Кэш - не резиновый.

конечно, но причём тут C++?
это единственный язык, позволяющий не пользоваться пойнтерами (или pointer-sized объектами) без необходимости?
или, может быть, managed runtime есть автоматически loss of memory layout control?

оба эти утверждения неверны; видимо, Вы имели в виду что-то иное?

Date: 2007-10-24 09:40 pm (UTC)
spamsink: (Default)
From: [personal profile] spamsink
N лет назад это был единственный язык, обладающий набором свойств, пригодных для создания коммерческих программных продуктов с приемлемым для рынка соотношением цена/производительность труда, позволяющий не пользоваться пойнтерами (или pointer-sized объектами) без необходимости. Если не забывать о том, что продолжительность жизни программных продуктов иногда заметно отличается от нуля, то это становится существенно.

managed runtime есть автоматически loss of memory layout control

Наверное, нет. Но и не автоматическое приобретение контроля на желаемом уровне.

Date: 2007-10-24 09:47 pm (UTC)
From: [identity profile] cmm.livejournal.com
N лет назад это был единственный язык, обладающий набором свойств, пригодных для создания коммерческих программных продуктов с приемлемым для рынка соотношением цена/производительность труда, позволяющий не пользоваться пойнтерами (или pointer-sized объектами) без необходимости.

сложно спорить со словами "приемлемым для рынка соотношением цена/производительность труда", да и просить привести примерное значение числа N как-то скучно, так что не вижу смысла в дальнейшем обсуждении. :)

Date: 2007-10-24 10:01 pm (UTC)
spamsink: (Default)
From: [personal profile] spamsink
Ну вот и договорились. Надо было заранее договориться, о чем мы спорим: о том, на каком языке начинать писать новый проект, где спору, в сущности, нет - ибо сегодня кидаться с нуля делать это на любом unmanaged языке было бы ярчайшим примером premature optimization; или о том, что делать с существующим корпусом кода на C++ - на этот вопрос автор ответа не дает и не может.

А гадостей про C++ я и сам мог бы порассказать, только неконструктивно это.

(N ~= 10)