среда, 15 января 2020 г.

[prog.c++] Как много одна простая строчка может рассказать об эволюции С++

Вот в этой строке с декларацией простейшего метода:

[[nodiscard]] bool empty() const noexcept;

можно отследить насколько много C++ вобрал в себя за время своей эволюции:

  • изначально, насколько я помню, в C++ не было контантности для методов, она была добавлена уже после публичного релиза C++ в 1985-ом году. И очень выгодно отличала C++ времен 1990-х годов от первых версий Java (да и от последующих тоже);
  • специальный булевский тип bool, которого так же изначально не было, но который был добавлен на основании опыта хождения по доставшимся в наследство граблям языка Си;
  • noexcept как результат эволюции отношения к исключениям. Не то, чтобы это был уже тот результат, который хотелось бы. Но уже сильно лучше, чем выпиленный, к счастью спецификатор throw();
  • аттрибут nodiscard. Во-первых, просто само понятие аттрибута, чего на протяжении многих лет в C++ не было. Но которое появилось под влиянием опыта других языков программирования. И, во-вторых, собственно nodiscard, т.е. явное указание того, что возвращаемое значение нельзя просто так проигнорировать. Опять же, на основании опыта хождения по граблям.

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

Если дать себе время остановиться и порефлексировать на эту тему, то это внушаить :)

Комментариев нет: