Попередження: це не стільки відповідь, скільки критика розмови, з якою "невідомий користувач" пов'язував у своїй відповіді.
Його перший головний пункт - це (нібито) "постійно мінливий стандарт". Насправді приклади, які він наводить, стосуються змін C ++ до того, як існував стандарт. Починаючи з 1998 року (коли був доопрацьований перший стандарт C ++) зміни мови були зовсім мінімальними - насправді багато хто стверджує, що справжньою проблемою є те, що потрібно було внести більше змін. Я абсолютно впевнений, що весь код, який відповідає оригінальному стандарту C ++, все ще відповідає поточному стандарту. Хоча це дещо менш певно, якщо щось не зміниться швидко (і зовсім несподівано), те саме буде в значній мірі і з майбутнім стандартом C ++ (теоретично, весь код, який використовувавсяexport
зламається, але практично не існує; з практичної точки зору це не питання). Я можу придумати кілька інших мов, ОС (або багато чого іншого, пов'язаного з комп'ютером), які можуть висловити будь-яку таку заяву.
Потім він переходить у "постійно мінливі стилі". Знову ж таки, більшість його пунктів досить близькі до дурниць. Він намагається охарактеризувати for (int i=0; i<n;i++)
як "стару та розбиту" та for (int i(0); i!=n;++i)
"нову гарячість". Реальність полягає в тому, що хоча існують типи, для яких такі зміни можуть мати сенс, бо int
це не має ніякого значення - і навіть коли ви могли щось отримати, для написання хорошого чи правильного коду рідко потрібно. Навіть у кращому випадку він робить гору з молі.
Наступним його твердженням є те, що C ++ "оптимізується в неправильному напрямку", зокрема, що, хоча він визнає, що використовувати хороші бібліотеки легко, він стверджує, що C ++ "робить написання хороших бібліотек майже неможливим". Тут я вважаю, що це одна з його найбільш фундаментальних помилок. Насправді написати хороші бібліотеки майже для будь-якої мови вкрай складно. Як мінімум, написання гарної бібліотеки вимагає розуміння деякої проблемної області настільки добре, що ваш код працює для безлічі можливих додатків у цьому домені (або пов'язаному з ним). Більшість того, що C ++ насправді робить, - це "підняти планку" - побачивши, наскільки кращою може бути бібліотека , люди рідко хочуть повернутися до написання такого роду шаблонів, які вони мали б інакше.дійсно хороші кодери пишуть досить багато бібліотек, які потім можуть бути використані (легко, як він визнає) "рештою з нас". Це справді випадок, коли "це не помилка, це особливість".
Я не намагатимусь вдарити кожну точку по порядку (це займе сторінки), але переходжу безпосередньо до точки закриття. Він цитує Б'ярна: "Оптимізація всієї програми може бути використана для усунення невикористаних віртуальних таблиць функцій та даних RTTI. Такий аналіз особливо підходить для відносно невеликих програм, які не використовують динамічне посилання".
Він критикує це, висловлюючи непідтримувані твердження, що "Це дійсно важка проблема", навіть порівнюючи це з проблемою зупинки. Насправді це нічого подібного - насправді це зробив линкер, включений до Zortech C ++ (майже перший компілятор C ++ для MS-DOS, ще в 1980-х). Це правда, що важко бути впевненим, що кожен шматочок можливих сторонніх даних був усунений, але все-таки цілком розумно робити досить справедливу роботу.
Незважаючи на це, проте, набагато важливішим моментом є те, що для більшості програмістів у будь-якому випадку це абсолютно не має значення. Оскільки ті з нас, хто розібрав зовсім небагато коду, знають, якщо ви не пишете мову асемблери без бібліотек, ваші виконувані файли майже напевно містять неабияку кількість "матеріалів" (як код, так і даних, як правило) напевно, навіть не знаю про це, не кажучи вже про те, щоб реально використовувати. Для більшості людей, як правило, це не має значення - якщо ви не розробляєте для найменших вбудованих систем, додаткове споживання сховища просто не має значення.
Врешті-решт, це правда, що в цій розпусті є трохи більше речовини, ніж ідіотизм Лінуса, - але це дає йому саме той прокляття з слабкою похвалою, яку вона заслуговує.
virtual
функцій, правда?