«Я хотел обучить сообщество в целом и в частности, члены WG21 — о моих взглядах на предполагаемое направление эволюции C ++», — сказал TNS Бьярн Страустерп.
74-летний создатель C ++ провел 40 лет своей жизни, наблюдая за ростом языка, который он разработал в 1985 году.
Чтобы поощрять некоторые давние функции, в прошлом месяце в связи с сообщением ACM Stroustrup опубликована «21-й век C ++», статья из 6300 слов, обещая показать «ключевые концепции» для современных типовых «C ++» 21-го века для создания «C ++ на стероидах». Например, в статье Stroustrup подчеркнул давние эксперименты в таких подходах, как написание более безопасного кода с профилями для прикрепления руководства. Чтобы поддерживать совместимость с десятилетиями уже написанного кода C ++, «мы не можем изменить язык»,-пишет Stroustrup. «Но мы можем изменить способ его использования…»
И все же эта эволюция не полностью зависит от него. В разделе ближе к концу Stroustrup признает WG21, рабочую группу стандартизации и как он неизбежно будет играть роль в том, насколько язык может измениться. «Я неохотно делаю прогнозы о будущем, — писал Stroustrup, — отчасти потому, что это по своей природе опасно, и, в частности, потому что определение C ++ контролируется огромным комитетом по стандартам ISO, действующим на консенсусе».
«Последнее, что я проверил, в списке членства было 527 записей. Это указывает на энтузиазм, широкий интерес и обеспечивает широкий опыт, но он не идеально подходит для дизайна языка программирования, и правила ISO не могут быть резко изменены ».
Тем не менее, когда дело доходит до этой важнейшей аудитории, «некоторые из них эйсторичны и, следовательно, пропускают ключевые моменты», сказал Stroustrup TNS, «например, эти руководящие принципы и профили соответствуют долгосрочному направлению C ++». Поэтому он предпринимает шаги, чтобы обучить их, и «для этого я должен показать, где подходят ключевые функции».
Его подробная статья была хорошим местом для начала-но она также является частью многостороннего толчка. И, в конце концов, все это может изменить траекторию всей экосистемы C ++, а также привести программистов, которые исполняют, тип безопасно и гибкий язык, который они долго жаждали.
И делать все это при выполнении собственных давних целей Stroustrup с 1980-х годов …
Призыв к срочному действию
Stroustrup также напрямую общался с WG21. Регистр отметил, что «эксперты по кибербезопасности промышленности и правительства за последние три или четыре года обескураживают использование C и C ++ при евангелизации языков с лучшей безопасностью памяти». Таким образом, через три дня после публикации своей статьи Stroustrup оставил официальную ноту в Комитет по стандартам C ++, который он назвал «призывом к срочным действиям частично в ответ на беспрецедентные, серьезные атаки на C ++.
«Я думаю, что WG21 должен сделать что -то важное и видеть это. Профили — это структура, которая может это сделать ».
Видение Stroustrup ясно. «Руководящие принципы хороши и полезны, но по сути невозможно последовательно следовать за ними в большой кодовой базе», — написал он в своей статье. Что нужно, так это некоторый принудительный механизм, который на самом деле будет помечать и предотвратить такие вещи, как висящие указатели, ошибки в диапазоне и Nullptr.
И, к счастью, именно такой правопримененный механизм уже доступен в форме этих профилей, обеспечивающих руководство. Сноска приводит пример их использования в Visual Studio 2019, которая внедрила раннюю версию профиля «срок службы», который проверяет C ++ на то, чтобы свисать указатели и ссылки и другие общие ошибки в срок службы объекта…
По сути, каждый профиль проверяет, что требования выполняются для достижения определенного результата, обычно во время компиляции. Помимо профиля проверки «срока службы», существуют также планы для большего, включая профиль «границы», который гарантирует, что все массивы доступа к коду включают проверки безопасности диапазона.
В нашем интервью по электронной почте Stroustrup отметил, что C ++ уже поддерживает лучшую защиту от ошибок в диапазоне через свой новый шаблон класса SPAN, представленные в 2020 году. Профиль границ просто подтверждает, что эти функции, предоставляющие безопасность, фактически действуют.
«Многое из этого является стандартным и доступным для использования сегодня», — сказал мне Страуструп. Существуют также планы для нескольких других профилей, чтобы помочь коду избежать типа или ошибок арифметических. Stroustrup считает, что «в ближайшем будущем профили обеспечат основу для обеспечения соблюдения различных ограничений».
Надеемся, что это может предоставить C ++ гарантии безопасности, которые люди ищут. Но это также естественное развитие в оригинальном 40-летнем видении Stroustrup для C ++.
«Гораздо лучшее приближение»
Такие функции, как безопасность типа, всегда были среди целей безопасности и производительности Stroustrup для C ++.
«Это не изменилось с самых ранних дней», — пишет он в своей статье, с сноской, направляющей читателей к его книге, дизайну и эволюции C ++ 1994 года. Но современный C ++ может достичь этих давних целей намного лучше, чем более ранние версии C ++, отчасти потому, что язык «был разработан для развития»,-пишет Страуструп в конце своей статьи. Таким образом, после десятилетий улучшения он называет «современным C ++», таким как C ++ 23 (версия, выпущенная в октябре) «гораздо лучшим приближением» его оригинальных идеалов.
Он также подчеркнул этот момент в своей записке, призывая WG21 принять профили: «Как я уже говорил, это также возможность, поскольку безопасность типа и безопасность ресурсов (включая безопасность памяти) были ключевыми целями C ++ с самого начала».
«Я очень чувствую это. Пожалуйста, не одурачивайте мой относительно спокойный язык ».
Одна проблема с развивающимся языком заключается в том, что «многие люди застряли с устаревшим представлением о том, что такое C ++», согласно статье Stroustrup. «Сегодня мы по -прежнему видим бесконечные упоминания о мифическом языке C/C ++, обычно подразумевая представление о C ++ как незначительное расширение C, воплощающего все худшие аспекты C вместе с гротескными ошибками сложных функций C ++…», но C ++ продолжает расти, Stroustrup акцентирует, с «работой в прогрессе» и экспериментальными особенностями, которые уже доступны для импровизирования, такие как общие модели.
«Одним из серьезных забот является то, как интегрировать различные идеи в последовательное целое», — пишет Stroustrup. В отличие от большинства программных проектов — и даже большинство CS работают в академических кругах — проектирование языка требует «решений в пространстве, где могут быть известны не все соответствующие факторы, и где принятые результаты не могут быть значительно изменены в течение десятилетий».
Короче говоря, это сложная проблема — и это остается известной проблемой. «Тот факт, что почти все усилия по проектированию языка за десятилетия провалились, демонстрирует серьезность этой проблемы».
Но это не значит, что C ++ просто перестал пытаться развиваться…
Драматические улучшения
Профили не единственный способ 21 -го века C ++ улучшился. «Я также укажу на модули как механизм для более чистого кода и значительно улучшенное время компиляции», — сказал Stroustrup в нашем электронной почте.
В статье Stroustrup приведен «преимущество 7-10 раз» в скорости при импорте скомпилированных модулей, а не в использовании старомодных операторов #include.
«Большинство людей могут значительно улучшить свой код сегодня, используя то, что предлагается C ++ 23», — говорит он мне. И, глядя в будущее, Stroustrup предсказывает еще больше функций повышения производительности. «В C ++ 26 мы, вероятно, увидим улучшенную поддержку параллелизма, статическое отражение и контракты, а также множество незначительных улучшений и компонентов стандартной библиотеки».
Эта перспективная надежда может объяснить, почему Stroustrup хотел обосновать свой призыв к профилям в более широкой истории C ++. Stroustrup рассказал мне свою статью «Представляет направление эволюции C ++. Гарантии безопасности приходят, и это не новая идея в контексте C ++, а часть долгосрочных целей. Полная безопасность типа и безопасность ресурсов была среди начальных целей C ++, но перемещение огромного диапазона областей применения вперед требует времени и должно быть сделано постепенно ».
Он знает, что уже установленная кодовая база широко распространена и что C ++ «сегодня охватывает огромный спектр областей применения. Гарантии безопасности должны и будут учитывать те области, где C ++ уже используется для предоставления высококачественных приложений.
«Люди, сосредоточенные на безопасности памяти, должны отметить, что C ++ не C, и что решения, основанные на более безопасных стилях программирования и закаленных библиотеках, уже широко развернуты в C ++».
Я спросил, есть ли признаки того, что его статья ACM оказала влияние — хотя это, очевидно, трудно определить количественно. «Я неохотно делаю прогнозы о будущем, — говорит Страуструп, — но мы уже видим лучшую поддержку общего программирования в форме концепций».
И если вы ищете эффективные улучшения, Stroustrup отмечает, что вы также можете заглянуть за пределы самого языка. В настоящее время широкий спектр инструментов доступен для разработчиков C ++.
«Язык — это не только то, что вы найдете в языковой спецификации или формальном стандарте».
Trending Stories youtube.com/thenewstack Tech движется быстро, не пропустите эпизод. Подпишитесь на наш канал YouTube, чтобы транслировать все наши подкасты, интервью, демонстрации и многое другое. Группа подпишитесь с эскизом. Дэвид Кассель — гордый житель района залива Сан -Франциско, где он освещал технологические новости более двух десятилетий. За эти годы его статьи появлялись повсюду от CNN, MSNBC и The Wall Street Journal Interactive … Подробнее от Дэвида Касселя