Как устроена стандартизация языка программирования
Участвовать в развитии C++, Python, Java и других языков программирования может любой разработчик. Свою идею можно предложить комитету по стандартизации — участники рабочей группы рассмотрят предложение, обсудят вместе с автором и помогут подготовиться к защите перед рабочей группой Комитета ISO C++.
Встреча международного комитета проходит три раза в год. На ней заседает около 200 человек, среди которых автор самого языка, представители от компиляторов и эксперты от крупных компаний.
Члены Комитета ISO C++ рассматривают идею, вносят правки и возвращают проект на доработку. И так до тех пор, пока идею не доведут до совершенства.
Из недавнего: в стандарте C++ приняли inplace vector. Это контейнер, который не аллоцирует динамически, что хорошо для эмбеда. А на этапе компиляции задаётся максимальный размер — вы знаете, что, например, больше 10 элементов вам не придёт. Этот inplace vector можно взять и подставлять, где нужно. Так вот, идею предложил разработчик, который хорошо пишет классы, погружён в тему, но не знает, как всё правильно выразить. Рабочая группа помогла, и получилась красота.
Чем больше людей заседает в группе, тем больше мелких недочётов можно выявить на ранних этапах и тем лучше получается итоговый результат.
Зачем Яндексу влиять на С++
В международные рабочие группы входят представители крупных компаний, среди которых есть и команда от Яндекса. Специалисты работают ради следующих целей:
- Развивать язык программирования. Многие проекты в Яндексе написаны на C++, поэтому специалистам важно актуализировать стандарты.
- Ускорять рабочие процессы. Иногда разработчикам приходится сталкиваться с ограничениями языка, и в масштабах компании это тормозит производство. Рабочие группы помогают отловить баги на этапе компиляции за счёт оптимизации языка.
Изначально создать рабочую группу по C++ предложили специалисты из Яндекса, но сейчас в команду входят и представители других компаний, которым важно развитие языка программирования.
Крупные корпорации участвуют в развитии языков программирования из-за большой кодовой базы, которая на них уже написана. Проще улучшать существующий язык, чем придумывать новый и переписывать все сервисы.
Что нового появится в стандартах С++
В 2023 году члены рабочей группы по стандартам C++ (РГ 23 C++) рассматривали предложения разработчиков. Вот какие обновления в стандартах ждут язык программирования уже скоро:
- Copy Elision — это оптимизация, которая исключает ненужное копирование объектов в компиляторе. Это позволяет значительно сэкономить на рантайме — улучшить производительность приложения.
- BLAS (Basic Linear Algebra Subroutines) — это набор математических функций, которые позволяют выполнять умножение векторов и матриц из линейной алгебры.
- Улучшенная диагностика ошибок — теперь разработчик будет диагностировать ошибки на этапе компиляции, а сами сообщения об ошибках можно сделать полезными. Например, добавить в сообщение совет, как исправить ошибку.
- С++ рефлексия — она будет сильно отличаться от рефлексии в других языках программирования и будет на этапе компиляции.
- Проект Clang AR — опенсорсный проект, который представляет высокоуровневые промежуточные представления для C++. Его разрабатывают для того, чтобы повышать производительность языка программирования.
В каких компиляторах быстрее всего обновляются стандарты
Часть компиляторов сразу внедряет новые стандарты и запускает их поддержку, а в некоторых обновления опаздывают. Чтобы работать с актуальным C++, стоит пользоваться следующими программами:
- GCC — работает с 1985 года и распространяется по принципам свободного ПО
- Clang — создан для работы на базе LLVM и разрабатывался как замена GCC
- Visual Studio — интегрированная среда разработки от Microsoft
Производители компиляторов по-разному реализуют конкретные алгоритмы, поэтому у разработчиков есть доступ к нескольким типам подходов. Со временем они могут выделить подход, который получился лучше всего, и использовать в следующих версиях языка программирования.
Несмотря на то что все эти компиляторы конкурируют, можно совместить две реализации и получить красивый код. Кроме того, люди часто испытывают фичи, экспериментируют, специально что-то ломают, чтобы потом починить. Это ускоряет развитие языка, к чему в итоге и стремится рабочая группа.