Наскільки важливо, що ви знаєте стандарт C ++?


11

Я намагався шукати, але не бачив подібного запитання (або це, або моя пошукова термінологія була неправильною - якщо так, сміливо закривайте).

Я завзятий користувач ТА, і зауважую, що в дискусіях та відповідях є багато посилань на стандарт C ++ - і я мушу визнати, що я ніколи не читав цього конкретного документа, мова болить мені очі ... Отже , питання полягає в тому, чи може розробник C ++ насправді кодувати на життя, навіть не читаючи цього документа? Чи насправді важливо для нас простих смертних, які не займаються написанням укладачів?


Наполегливість питань, на які відповідають короткі цитати зі стандарту, має бути достатньою доказовою ознакою того, що читання не є обов’язковою умовою для використання мови ... (за умови, що ти маєш куди звертатися, коли ти
застряєш

Відповіді:


16

Ні, ви можете просто добре обійтися без цього

Однак ви будете мати глибше розуміння, якщо у вас буде час, щоб його вивчити. Можливо, слідкуйте за посиланнями з тих питань, які вас турбують, і навчіться невеликий шматок за раз.


8

Якщо ви хочете сперечатися про мовну семантику та стандарти, то стандарт є дуже важливим. (Я не маю в виду це абсолютно принизливо.) Якщо ви хочете отримати роботу в мовному (проти на мові), то він набагато менше.

Стандарт може зробити гідне посилання на стандартну бібліотеку (не стільки для самої мови), коли вам це трохи зручніше, але я не вагаюся, рекомендую використовувати її таким чином. Здається, більшість людей краще справляються з іншими матеріалами. Однак, я звертаюсь до стандарту частіше, ніж ніколи, коли мені потрібно щось подивитися на stdlib.

Однак читання проектів та доповідей комітету - це один із способів бути в курсі C ++ 0x - насправді, це один із дуже нечисленних способів.

Що стосується ТА та інших форумів, я не вагаюся, коли я цитую цей стандарт, за винятком випадків, коли плакат явно і виразно принесе користь - можливо, вони просили цього, або я думаю, що вони неявно очікують цього. У більшості випадків, особливо з програмістами, новими на C ++, цитування, як правило, мало допомагає.


Якщо хтось хоче знати, що мова повинна робити, Стандарт є неоціненним. Якщо вони хочуть знати, чому компілятор щось робить, це часто дуже корисно. Щодо інших питань, не так вже й багато.
Девід Торнлі

1
@DavidThornley: Важко судити після того, як довго звик читати стандарт, але, безумовно, здається, що більшість людей вважають такі тексти, як TC ++ PL, більш доступними навіть для того, щоб дізнатися, що мова повинна робити.
Фред Нурк

1
@Fred Nurk: Майже все є більш доступним, ніж Стандарт. Я мав на увазі відповідати на запитання щодо SO та подібного, і не був про це зрозумілий. Це додає трохи авторитету, коли люди цитують cplusplus.com та інші джерела.
Девід Торнлі

@DavidThornley: Я дуже рідко цитую такі сайти (зокрема, cplusplus.com має занадто багато проблем на мій смак), але для більшості плакатів на SO вони також здаються більш корисними, навіть із помилками, ніж стандартні - і вони легко Доступні в Інтернеті, на жаль, велика частина цього.
Фред Нурк

@Fred, це цікаво знати, я завжди вважав, що cplusplus є хорошим посиланням (мінус - це їх джерело реклами - що вкрай недоречно!), Тепер мені доведеться пам’ятати, щоб перехрестити посилання на sgi.
Нім

6

Ви повинні мати його для довідки, але я не думаю, що ніхто, однак його автори, не прочитали все це, якби вони навіть працювали (вони працюють у групах, зосереджуючись на областях, тож я в цьому сумніваюся).

Причина, по якій ви повинні мати її, полягає в тому, що іноді на запитання про правильність коду можна відповісти лише шляхом посилання на стандарт.


3
У більшості ситуацій вам це не потрібно. Те, що вам потрібно, висвітлено в інших книгах. Це лише тоді, коли ви потрапляєте до тих кутових справ або ніколи не використовуєте куточки мови, які вам потрібно перевірити визначення в стандарті (і зазвичай існує альтернатива використанню кутових справ у мові). Залиште стандарт для розробників-компіляторів, і загальний розробник може поєднуватися з іншими неформальними текстами.
Мартін Йорк

2

Напевно, важливіше, щоб ви знали, де знаходиться стандарт, і знали, коли потрібно шукати речі.

Якщо нічого іншого, ви повинні періодично перевіряти, щоб переконатися, що ви дотримуєтесь останньої версії та не дозволили коду змінитися.


2

У великій команді, як правило, є одна людина (але зазвичай не більше) людина, яка знає стандарт хоча б розумно, тому вони можуть робити такі речі, як врегулювання будь-яких аргументів / запитань щодо речей, наприклад, чи відповідає той чи інший код вимогам стандарту.

Однак реально, ці відповіді мають бути загартовані судженнями та досвідом. Стандарт (поточний) говорить export, що це ключове слово і розповідає, що він робить. Насправді це просто не працює таким чином у більшості компіляторів. Так само у багатьох випадках, якщо у вас троє людей не погоджуються з приводу якогось конкретного коду та того, що стандарт може сказати про нього, це може бути ознакою того, що код може знадобитися переписувати, щоб бути більш простим.

У той же час більшість команд будуть працювати на одній платформі і мати стандартний (і хтось, хто принаймні розумно з ним знайомий) навколо, щоб перевірити, що те, що ви робите, не надто тісно пов'язане з цією платформою, безумовно, може бути корисним.


Мабуть, важливо "не більше" - якщо ви не хочете аргументів між експертами щодо того, як інтерпретувати стандарт <g>
Steve314

2

Я заробляв свій хліб як розробник C ++ загалом близько 4 років, не читаючи стандарту. Насправді, протягом перших двох років я навіть не читав більше, ніж статті C ++ Primer від Стана Ліппмана та статті MSDN. Так це можливо - адже я боюся, що більшість людей, що виробляють код C ++, навіть не читали таких фундаментальних праць, як « Ефективний C ++» та ін. яку я сам виявив лише пізніше.

ІМХО, щоб бути хорошим розробником С ++, повинен розуміти внутрішню логіку мови (мови) (як зазначає Скотт Майєрс, C ++ - це приблизно 4 різні мови) та загальні ідіоми та підводні камені, і бути готовим завжди дізнаватися більше. Читання ниток на SO може багато чого навчити про кутові випадки, коли, в свою чергу, варто прочитати відповідні частини стандарту, якщо хтось хоче дійсно копати глибше. Але читати все це, мабуть, рідко потрібно для більшості з нас.


Хороший момент, що є важливі книги, які набагато важливіші (для більшості програмістів, які не пишуть компілятори), ніж стандартні. +1 - але є значна кількість "важливих" книг.
Steve314

@ Steve314, насправді - початок їх переліку не допоможе відповісти на це конкретне питання. Але я тепер додав посилання на відповідну тему на SO.
Péter Török

@ Péter - приємний дотик, але мій нестандартний пункт полягав у тому, що жодна з "найважливіших" книг не є справді важливою. Більшість програмістів на C ++ повинні були прочитати кілька назв із цього списку, але всі вони? Навряд чи. Навіть якби ви це зробили, я сумніваюся, ви могли б справді зберегти всі ці знання. "Ефективний C ++" є в моєму списку ще не прочитаних, тому я, очевидно, вважаю це менш важливою істотною книгою.
Стів314

@ Steve314, я не мав на увазі, що треба прочитати все це - я теж не був, і деякі з них я прочитав, але мене не вразило :-) Також є деякі перекриття між деякими з них, так що це питання про особистий смак та шанси, з якими стикається перший розробник та / або який (-ла) він (-ла) він назначає "істотним". Я вважаю, що важливим є те, що є деякі загальні ідіоми, які добре слідувати, і загальні підводні камені, яких слід уникати, і слід знати про більшість із них, а найменш болісний спосіб дізнатися це - з (деяких) цих книг .
Péter Török

Звичайно, я не знаю, наскільки це важливо, доки я не прочитав його.
Стів314

1

"Знання стандарту" - це питання ступеня, і не обов'язково означає запам'ятовування оригінального документа.

Документ зі стандартів розроблений як авторитетний - не обов'язково доступний. Є безліч джерел, які вилучені в один крок, які набагато доступніші. Щоправда, у цьому є трохи китайських шепітів, але це рідко є великим питанням - звичайно, на рівні, що знімається в один крок.

Повне розкриття - я обов'язково скажу це - я ніколи не читав стандарт. Хоча я, мабуть, докладу зусиль, щоб отримати повний документ C ++ 0x при його доопрацюванні.

EDIT, звичайно, якщо Stroustrup випустить нове видання "Мова програмування на C ++", я можу знову погодитися з цим.


1

Коли я програмував на C ++, я часто звертався до мовного стандарту для інформації про стандартні функції бібліотеки. Стандартна бібліотека C ++ досить велика, і я знайшов стандарт мови найзручнішим джерелом.


1
Та не вже? Я завжди вважаю необхідними в цьому сенсі Інтернет-ресурси, такі як cplusplus ...
Нім

1

Я міг би присягнути, що раніше відповідав на це питання, але не можу його знайти. В принципі, C ++ на відміну від Java в тому , що він призначений , щоб мати отвір в специфікації інших специфікаціях платформи може заповнити (наприклад , POSIX або специфікації ABI вашої архітектури, або компілятора). Таким чином, відповідаючи на запитання на таких сайтах, як StackOverflow, звичайно висувати специфікацію, яка вказує на те, що лише тому, що щось працює на одному компіляторі, не означає, що він працює скрізь. Іншими словами, багато причин для посилання на конкретні специфікації під час роботи з C ++ полягає в тому, щоб точно з’ясувати, наскільки портативним є певне використання мови.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.