metrica
Мы используем куки, чтобы пользоваться сайтом было удобно.
Хорошо
to the top
close form

Заполните форму в два простых шага ниже:

Ваши контактные данные:

Шаг 1
Поздравляем! У вас есть промокод!

Тип желаемой лицензии:

Шаг 2
Team license
Enterprise license
** Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности
close form
Запросите информацию о ценах
Новая лицензия
Продление лицензии
--Выберите валюту--
USD
EUR
RUB
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

close form
Бесплатная лицензия PVS‑Studio для специалистов Microsoft MVP
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

close form
Для получения лицензии для вашего открытого
проекта заполните, пожалуйста, эту форму
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

close form
Мне интересно попробовать плагин на:
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

close form
check circle
Ваше сообщение отправлено.

Мы ответим вам на


Если вы так и не получили ответ, пожалуйста, проверьте папку
Spam/Junk и нажмите на письме кнопку "Не спам".
Так Вы не пропустите ответы от нашей команды.

Вебинар: Трудности при интеграции SAST, как с ними справляться - 04.04

>
>
>
Текстовая трансляция CppCast 277: Препо…

Текстовая трансляция CppCast 277: Преподавание и пленарное заседание в виртуальном формате

03 Мар 2021
Автор:

Выпуск 277 был записан 8 декабря 2020 года. Ведущие Роб Ирвинг и Джейсон Тернер поговорили с Патрисом Роем об intmax_t в C и C++, Lexy, CLion 2020.3, преподавании C++ во время COVID и первом виртуальном пленарном заседании ISO.

0806_cppcast-277_ru/image1.png

Введение

Роб: Добро пожаловать на 277 выпуск подкаста CppCast. В начале каждого выпуска мы обсуждаем обратную связь. На прошлой неделе мы беседовали с Робертом Лихи о Networking TS (технической спецификации по работе с сетью).

0806_cppcast-277_ru/image2.png

Мы получили пару комментариев на Reddit, один из них был от пользователя Xaxxon: "Мне бы хотелось, чтобы C++ сосредоточился на вещах, которые нельзя сделать из-за ограничений, а не на том, что качественно реализовано на всех необходимых платформах. Графика, работа с сетью и т.д. (не знаю, что еще, но, по крайней мере, эти точно) - эти задачи уже решены. А статическое отражение нет. В язык нужно добавлять рабочие функции, которые позволяют создавать новые конструкции. Все остальное можно включать в библиотеки Boost или библиотеки, официально утверждаемые комитетом ISO для C++. Хотя разным специалистам нужны разные возможности языка, я предполагаю, что те, кто работает с основными функциями языка и вынужден задумываться о дополнениях, испытывает стресс."

Патрис, вы можете прокомментировать, например, стандартизацию работы с сетью?

Патрис Рой: Я участвовал в дискуссии на эту тему на платформе https://cpp.chat/. Моя точка зрения всегда одна и та же. Мне нужна стандартизированная работа с сетью, потому что я устал возиться, работать с CAPI и использовать reinterpret_cast. Я был бы доволен, если бы у меня были хотя бы базовые инструменты, которые позволяют уйти от деления по платформам. Так что я тоже выступаю за стандартизацию.

Джейсон: Начиная с 2005 года я использую Qt, или Boost.Asio, или оболочку libcURL. Работать с CAPI мне требовалось только до этого.

Затем я стал использовать библиотеки, уже добавленные в систему.

Патрис Рой: Загвоздка в том, что у преподавателя нет времени устанавливать API. И у студентов нет. Поэтому в таком положении приходится использовать встроенные API у платформ Unix или Windows. Иногда можно добавить какую-нибудь стандартную библиотеку C++, и все. Студентов нельзя заставить установить Boost библиотеки. У меня нет времени на это. Однако такой подход дает мне возможность показать объединения и поговорить об использовании reinterpret_cast и выравнивании объектов в памяти.

Джейсон: Да. Все это - неопределенное поведение. Нет причин беспокоиться.

Роб: Наш гость сегодня - Патрис Рой. Патрис программирует на C++ профессионально, для удовольствия или по работе более 30 лет.

0806_cppcast-277_ru/image3.png

Рисунок 1. Патрис Рой на конференции CppCon 2019.

Несколько лет он занимался исследованиями и разработкой и работал над военными симуляторами полета. Затем он перешел в сферу образования и преподает компьютерные дисциплины с 1998 года. C 2005 года он помогает аспирантам и специалистам в области систем реального времени и программировании игр совершенствовать навыки, необходимые им для решения современных задач.

Стремительная эволюция C++ в последние годы сделала его работу еще более увлекательной. Он является членом комитета ISO с конца 2014 года, а с 2015 года занимается уязвимостями языка программирования для ISO. У него пятеро детей, жена и постоянно меняющееся число кошек, собак и других животных.

intmax_t в C и C++

Роб: Патрис, сначала мы хотим обсудить пару новостных статей. Не стесняйтесь комментировать в любой момент. Затем мы поговорим о том, чем вы занимаетесь в последнее время. Итак, первая статья находится в блоге Жанхида Менида, и называется Специальный котёл в аду - intmax_t в C и C++.

0806_cppcast-277_ru/image4.png

Рисунок 2. Жанхид Менид читает доклад на тему "Unicode for C++23" на конференции CppCon 2019.

В последние год-два мы много говорили о поломках ABI, но в данной статье обсуждаются поломки ABI в C, которые, по-видимому, значительно серьезнее, чем в C++.

Патрис Рой: По словам Жанхида, их невозможно исправить в C и (конечно, это может быть его субъективным мнением) очень сложно - в C++. Что привлекло мое внимание - это его высказывание о том, что у нас уже была такая же проблема с size_t и другими типами. Поэтому я рекомендую эту статью. Отличная работа. Хорошо написано. Очень ясно.

Джейсон: Для C++ есть хоть какая-то надежда, потому что API в стандартной библиотеке C++ позволяет использовать перегрузки, недоступные для C. А потом этот код вплетается в искаженные имена, и это усугубляет проблему.

Патрис Рой: Да. Как он сказал, "У вас есть макросы". Я предпочитаю держать внутренние имена открытыми как типы в классах, например тип размера и тип значения. Для меня это нормально. Потому что это позволяет клиентскому коду развиваться должным образом. Однако, из-за того, как эти вещи используются и определяются, можно оказаться в специальном котле в аду.

Джейсон: Хочу сказать, что я даже не знал, что intmax_t актуален и используется. Я думал, что знаю все типы или единицы typedef.

Патрис Рой: О, здорово. На встречах комитета ISO часто можно встретить людей, которые боятся выходить на сцену и проводить презентации, и есть люди, которые просто поддерживают большинство.

Джейсон: Есть ли также intmin_t для char typedef?

Патрис Рой: Нет, потому что вы не можете опуститься ниже байта. Проблема именно в верхней границе.

Lexy

Роб: Хорошо. Теперь мы обсудим новую библиотеку от Джона Мюллера.

0806_cppcast-277_ru/image5.png

Она называется Lexy и является комбинатором парсеров для C++ 17. Библиотека является довольно эффективной, особенно благодаря возможности настроить новый DSL.

Патрис Рой: Я только сегодня утром посмотрел эту библиотеку, и мне в ней понравились приемы и подходы. Мне интересно познакомиться с ней поближе.

Иногда посмотришь на что-то и сразу видна ценность замысла. Когда я впервые поработал с библиотекой, я обратил внимание на синтаксис, мне понравилось, как он выражает замысел. В библиотеке используется очень эффективный способ именования. Когда этим утром я начал разбираться с библиотекой Джонатана, я сразу обратил внимание на подход. Он определенно вдохновляет.

Спасибо, Джонатан, это круто. Я еще не успел поработать с библиотекой, поэтому не смогу поделиться впечатлениями от работы. Но сама библиотека впечатляет.

Джейсон: Сделаю отступление для наших слушателей. Если вы хотите посмотреть что-то довольно сложное, используйте парсер Json из папки Examples (Примеры).

Если убрать тестовый код, то получится всего 272 строки. Это довольно лаконичный парсер Json.

Патрис Рой: На одном из собраний я видел парсер, написанный Луи Дионном - совсем маленький парсер.

Джейсон: Я тоже встречал маленькие парсеры, но справедливости ради, те маленькие, что я видел, не обязательно проходили тесты на соответствие.

Lexy, похоже, полностью соответствует таким требованиям. Однако, конечно, я не знаю про парсер Луи.

Патрис Рой: Разделение правил и того, как определяются значения - это замечательно. Я призываю слушателей обратить внимание на Lexy, хотя бы на его форму, потому она может дать идеи при создании собственного API.

CLion 2020.3

Роб: Далее у нас пост из блога JetBrains, а именно, CLion 2020.3, их последний релиз CLion в этом году.

0806_cppcast-277_ru/image6.png

В этом посте они освещают множество новых функций: отладку дампа ядра, поддержку CTest, интеграцию стандарта MISRA.

Похоже, они много вложили в этот финальный релиз. Джейсон, ты все еще используешь CLion для разработки?

Джейсон: Да. Знаешь, она экономит мне массу времени, когда дело доходит до работы над большими клиентскими проектами, потому что IDE позволяет мне быстро ориентироваться в коде. Если вы знаете меня хоть немного, год назад я бы такого не говорил. Я считал, что мне не нужна IDE.

Перед тем, как я приступил к своей текущей задаче, я обновился до 2020.3. Я даже не сразу понял, что теперь могу перетаскивать маленькую стрелочку внутри отладчика.

Роб: Да, это здорово. Я знаю, что эта функция уже некоторое время существует в Visual Studio, но теперь приятно видеть ее и в CLion IDE.

Джейсон: Да.

Патрис Рой: Самому мне пока что не довелось много работать в новой версии. Однако, мне понравились подсказки и отображение правил MISRA. Это делает использование MISRA удобным.

Роб: Да. И если вам интересно узнать больше о том, что нового в CLion 2020.3, друг нашего подкаста Фил Нэш демонстрирует множество этих новых функций в своих маленьких видеороликах.

Виртуальное пленарное заседание ISO

Роб: Хорошо. Патрис, вы долго не были у нас на шоу, поэтому первое, что я хочу узнать у вас - это как прошло последнее виртуальное пленарное заседание ISO.

0806_cppcast-277_ru/image7.png

Патрис Рой: Да, оно было достаточно интересным. Мы планировали, что заседание займет несколько часов, а оно прошло гораздо быстрее.

У нас почти не было тем, из-за которых мы спорили. Обычно комитет обсуждает много спорных тем, а в этот раз камнем преткновения был только суффикс для size_t. Некоторые проголосовали "против", но большинство были "за".

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

Также хочу отметить Дэвиса Херринга, который написал большой доклад по ядру, где описал работу, которая ведется сейчас, в особенности, правила разрешения конфликтов перегрузок. Они проделали огромную работу.

Джейсон: Обычно такое пленарное заседание проводится в конце каждого невиртуального заседания комитета ISO, верно?

Патрис Рой: По сути, есть два пленарных заседания - одно в начале и одно в конце заседаний ISO.

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

Затем после заседаний мы проводим пленарное заседание в пятницу вечером, голосуем, и затем есть еще одно пленарное заседание, в субботу, когда мы решаем проблемы с отдельными участниками.

Джейсон: Получается, это первое закрывающее пленарное заседание для вас в этом году, после всех отмененных и невиртуальных собраний?

Патрис Рой: Была Прага, но я не мог туда поехать. У нас была встреча в Болгарии, и, если я правильно помню, мы запланировали встречу в Нью-Йорке на будущее.

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

Здесь стоит отметить то, что мы обсуждали ранее - люди устали от встреч. У людей работа, а заседания - это неоплачиваемый труд, только по желанию. С другой стороны, такие встречи помогают языку эволюционировать и становиться более продвинутым, поэтому здесь нужно искать равновесие.

Преподавание во время пандемии COVID

0806_cppcast-277_ru/image8.png

Джейсон: Про усталость от встреч, Zoom и подобного я слышал довольно много. Я заметил интересную закономерность по поводу своих созвонов - с одной стороны, многие постоянные участники появляться перестали, с другой, пришла и воспользовалась ситуацией совершенно другая группа людей со всей страны и со всего мира.

Патрис Рой: Наверное, это зависит от того, чем вы занимаетесь в течение дня. Я имею ввиду, если вы пишете код, это круто. Я преподаю уроки и провожу в Zoom от 7 до 12 часов.

Джейсон: Ого.

Патрис Рой: Это оказывает сильное влияние на всех вовлеченных в процесс. Мои студенты устали и страдают от изоляции, у них начинается депрессия и тревога. Я пытаюсь заставить их работать в команде, разговаривать с людьми и т.д. Так что здесь дело не в усталости от Zoom. Дело в том, что теряется связь с людьми.

Джейсон: Ух ты. Итак, раз мы начали обсуждать образование, сколько классов вы сейчас преподаете?

Патрис Рой: Два в университете, и у меня три группы в колледже. Студенты третьего семестра, пятого и магистратуры. У меня много студентов из Франции. Так что в пятницу утром я провожу для них занятия по французскому времени. Для меня это семь часов утра.

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

Джейсон: Мне трудно смириться с тем, что вы преподаете целый семестр и даже не знаете, как выглядит чье-то лицо.

Я думаю, если бы я был преподавателем, я бы в какой-то момент сломался и потребовал: "Включите свою камеру!"

Патрис Рой: Нет, мы не можем настаивать на этом, потому что студенты имеют право контролировать свой собственный имидж. Я пытаюсь заинтересовать их и заставить их включить камеру во время экзамена. Ребята, давайте хотя бы один урок сделаем крутым, чтобы вы видели друг друга, видели, с кем вместе вы учитесь.

Если мне это удается, я также могу лучше контролировать, чем они занимаются, но я не могу их заставить включить камеру.

Джейсон: Эти занятия похожи на обычные университетские занятия, которые длятся час - полтора и проходят три раза в неделю или что-то в этом роде?

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

0806_cppcast-277_ru/image9.png

Раньше я говорил громко во время лекций, а теперь перестал, потому что двое жаловались: "Мои уши!". Теперь я так не делаю.

Джейсон: Ого.

Патрис Рой: Когда французские студенты приедут в Квебек в январе, мы посадим их в большую комнату, расставим столы так, чтобы расстояние между ними было большим, как следует проветрим и позаботимся о них.

У меня был один невиртуальный урок в этом семестре. Это был маленький магистерский класс с двумя студентами. Я сам туда приходил и давал лекцию. Это было замечательно. Однако, во второй части семестра первый повредил спину, а второй заболел инфекцией COVID, поэтому во второй половине семестра класс стал удаленным.

Джейсон: Если я правильно понимаю, Великобритания готовится выпустить несколько вакцин в следующем году.

Патрис Рой: Они уже это сделали! Кто-то вчера привился.

Джейсон: Хорошо. Поскольку вы участвуете в учебных программах университета и колледже, есть ли понимание или обсуждение того, что это значит для университетов?

Есть ли у кого-нибудь план, например, после вакцинации мы делаем X? Или?

Патрис Рой: Ну, мы не решаем, в Квебеке, по крайней мере, это правительственное дело. Этой осенью Шербрукский университет, где я провожу занятия, арендовал офисные помещения за пределами университета, чтобы получить больше места и рассадить людей посвободнее. Занятия проводятся в церквях, потому что там есть свободное место.

Джейсон: Удобно.

Патрис Рой: Самое главное - в течение двух третей семестра студенты присутствовали на занятиях лично. Позже такую практику пришлось прекратить из-за вспышки инфекции. Насколько я понимаю, экзамены сейчас тоже сдаются лично.

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

Мои занятия проходят удаленно, потому что моим студентам не нужно учиться делать уколы. У меня есть занятия по робототехнике. Такие занятия будут иногда требовать личного присутствия студентов во время зимы.

Роб: Раз уж вы заговорили о некоторых трудностях с преподаванием за последние несколько месяцев, увидели ли вы какие-либо положительные стороны в удаленном преподавании?

Патрис Рой: Ну, у меня уходит меньше бензина. Я не успеваю прослушать все подкасты, которые собирался. Я и так обычно не успеваю. Я прослушал почти все последние подкасты CppCast. А по пяти другим сериям подкастов я запаздываю выпусков на 20. Самым приятным оказалось, что программные инструменты выдерживают нагрузку. Для меня это было самым большим сюрпризом. Здорово, что Zoom, Teams и подобные инструменты работают и выдерживают нагрузку.

Возможность коллективного доступа к документам очень помогала. Удобно видеть экраны студентов. Более серьезно настроенные студенты задают вопросы, это тоже отлично. Комнаты в приложении Discord удобны.

Студенты обмениваются идеями и помогают друг другу. Так что систему вполне удается использовать для учебного процесса. Удаленное образование не очень приятно, но вполне функционально. Я доволен этим. Сложнее всего мне проверять работы и ставить оценки. Прочесть их письменные работы, проставить оценки - на это требуется целая вечность. Под этим я понимаю - в пять раз больше времени, чем обычно.

Почему? Потому что я их не вижу. Я не могу рассказать о чем-то вживую, не могу обвести что-то красным кружком, написать, чтобы они ко мне пришли, и объяснить концепты лично. Нужно сразу писать словами. Нужно описывать контекст и быть осторожным со словами, потому что там, на другом конце, студенты в депрессии.

Я их не вижу. Я не знаю, в каком они состоянии. Поэтому нужно удостовериться, что они поймут суть в конструктивном ключе. Это занимает действительно много времени. Когда у моего класса в 54% случаев оценка С (3), требуются недели, чтобы проверить домашние задания и проставить оценки. Поэтому я значительно запаздываю в проставлении оценок.

Джейсон: Пробовали ли вы систему автоматизированного оценивания? Студент загружает туда программу, система проверяет результат и выдает оценку "зачет" или "незачет".

Патрис Рой: Нет, я против такого подхода. Такая система подходит для выставления оценки, но она не сообщает, написали ли студенты хороший код.

В экзаменах я стараюсь использовать задания, которые самостоятельно оценивают свое выполнение. Так что я стараюсь автоматически оценивать выполняемость, но я также просматриваю код, а это занимает много времени.

Доклады на CppCon

Роб: Я хотел бы на минутку прервать нашу беседу, чтобы рассказать о нашем спонсоре PVS-Studio. Компания разрабатывает статический анализатор кода PVS-Studio, который выявляет ошибки в коде программ, написанных на языках C, C++, C# и Java. Инструмент является платным b2b-решением, но есть способы получить бесплатную лицензию отдельным клиентам. К таким относятся разработчики открытых проектов, Microsoft MVP, студенты и другие. Анализатор активно развивается. Регулярно появляются новые диагностики и расширяются возможности интеграции. Например, PVS-Studio недавно опубликовала на своем сайте статью, посвященную Azure DevOps.

Итак, Патрис, как я понимаю, на CppCon 2020 вы представили два доклада? Не хотите ли рассказать нам немного о докладе "Что C++ делает правильно"?

0806_cppcast-277_ru/image10.png

Патрис Рой: Сейчас я много занимаюсь C# и JavaScript, потому что в колледже, где я преподаю, эти инструменты используются чаще, чем C++. Мне это не нравится, потому что студенты усвоят материал недостаточно глубоко, например, они поймут управление ресурсами не так хорошо, как могли бы.

Однако я обращаю внимание на все то, что могут другие языки и встречаю людей, которые постоянно жалуются на C++: "Как плохо. Типы небезопасны, управление памятью небезопасно и т.д. и т.п." Конечно, это плохо не зависимо от языка. Однако, ряд вещей у C++ получаются очень хорошо.

Если вы присвоите переменной-члену значение по умолчанию и потом используете ее в конструкторе, который сделает с ней что-то еще, будет только одна инициализация, а не две. Если вы работаете на С#, в таком сценарии у вас будет две инициализации переменной.

Есть много крутых и интересных вещей, которые мы делаем в C++.

Я постарался составить список этих вещей и представить их в докладе.

У меня был еще один доклад, который я назвал "Функции вывода, которые не возвращают значение и другие безобидные зверства". Получилось, что у меня был мрачный доклад на тему слабых сторон C++ и позитивный доклад о том, что в C++ получается эффективно.

Доклад "Что C++ делает правильно" я провел в Монреале, но его также посетили слушатели из Торонто и Ванкувера. Я увидел многих друзей, которые посещают конференции и заседания комитета ISO.

Получилась большая и яркая аудитория. Они хорошо отреагировали на доклад и активно участвовали в дискуссии после доклада. Я был приятно удивлен.

Надеюсь, им понравился доклад. После этого некоторые люди увидели образцы кода на YouTube и сказали: "Ну, это не код C#". Я знаю, в этом все дело. Дело не в том, что C# - плохой язык, но в нем можно делать довольно странные вещи.

Например, у вас есть строка со значением null. Затем вы добавляете null и проверяете длину строки, и длина снова 0, потому что если сложить две строки null, получится пустая строка. Для меня это странно.

Джейсон: Да, это странно.

Патрис Рой: Однако, в коде так можно сделать, и это не страшно. Возможно, для кого-то это нормально, но я люблю, когда строки содержат значения. Семантика значений - вещь потрясающая.

Джейсон: А вспомните JavaScript - там можно сложить строку и число в одном порядке и получить число, а можно сложить их в другом порядке и получить строку.

Патрис Рой: Но мы можем сделать это и в C++, потому что мы хитроумны.

Джейсон: Что-нибудь еще о правильных подходах в языке С++?

Патрис Рой: Самое главное, что C++ позволяет нам быть эффективными.

Если понимать, как работают контейнеры и итераторы, C++ можно использовать, чтобы элегантно написать то, что в других языках написать сложно. Однако, нужно отметить, что для таких случаев в других языках есть готовые функции. Если бы пришлось писать эти функции самому, то это было бы неэффективно. В C++ есть очень хорошие базовые инструменты, которые позволяют писать хороший код на основе чистых абстракций.

Один из примеров в моем докладе была функция для чтения всего текста. В C# нужно использовать специальную функцию, чтобы прочитать текст из файла. Самому такую функцию написать сложно.

В C++ это сделать просто - можно взять два итератора, прочесть строку и построить из результата строку - готово. Таким же образом можно копировать контейнеры. Для этого вам не нужно два массива или два списка. Можно просто попросить конструктор выполнить задачу. Это очень общее решение.

Рабочее, эффективное, чистое. Таким образом, это нормально также иметь большую библиотеку со специальными рабочими инструментами. Это неплохо. Но мне нравится, что в C++ мы пошли другим путем.

Джейсон: У меня всегда остается чувство неясности, когда я работаю в JavaScript, Python или C# - вы говорите о семантике значений, а я задумываюсь о том, копия это или ссылка. Я не понимаю, что происходит. Если это структура или встроенный тип или класс, тогда значение может быть разным в разных языках. Для меня очень важно, что в этом C++ в этом последователен.

Патрис Рой: Подумайте о Лямбда-захватах. При написании Лямбда-выражений разработчик указывает точные критерии информации, которую выражение должно вернуть, а также в каком виде получить данные – в виде значений или ссылок. При написании Лямбда-выражения в C#, разработчик пишет меньше кода, но, если нужно сделать что-то сложнее, чем получить ссылки на что-то, сначала используется значение в закрытом контексте, затем копируется и затем эта копия используется в Лямбда-выражении.

В противном случае можно получить ссылку не на то, что требуется. Например, при создании цикла for, который будет запускать потоки, можно захватить индексную переменную, и тогда с Лямбда-выражением будут проблемы, потому что используется ссылка. Если при работе над циклом for вы создадите локальную копию этой переменной и потом захватите ее, то в каждую итерацию цикла будет поступать новое значение переменной.

Это не так уж плохо. Но для меня это странно. Поэтому я ценю, что в C++ можно ясно выражать идеи и писать чистый код.

Джейсон: Да.

Патрис Рой: В этом нет ничего идеального. Иногда приходится использовать много слов, и в этом нет ничего страшного, во всех языках много слов, но некоторых это отталкивает, по моему мнению, несправедливо. Я думаю, что это прекрасный язык.

C++ в разработке игр

0806_cppcast-277_ru/image11.png

Джейсон: Когда мы готовились к сегодняшнему выпуску, вы отметили, что составляете набор запросов для SG14 - комитета или подгруппы, которая разрабатывает игры и высокопроизводительные приложения. Не хотели ли бы вы рассказать нам немного об этом?

Патрис Рой: Безусловно, группа "Ллойд и С". В 2019 году в Монреале ко мне обратилась одна из крупных игровых компаний, потому что, как они сказали, пришло время рассказать людям, отвечающим за стандарты, что требуется игровой индустрии. И я действительно ценю это. Они пришли со списком, мы пошли в кафе, поболтали около часа и формализовали результаты нашей беседы, переслав друг другу несколько электронных писем. Затем я стал сам обращаться в другие компании, и теперь я составляю список требований этих компаний к библиотекам и основным функциям языка. Я нахожу этот список совершенно разумным, а некоторые пункты соответствуют целям, к которым язык уже идет.

Сейчас я пытаюсь подготовить презентацию, чтобы получить максимальную поддержку от SG14 и от остальной части комитета. Я думаю, это может объединить людей. Это хороший список. К моему удивлению, в список попало не только улучшение производительности, но и безопасность, переполнение целых чисел и совершенствование диагностики.

Сейчас у меня 32 запроса. Я постараюсь их классифицировать по категориям и представить их перед SG14, чтобы приблизить C++ к нуждам разработчиков высокопроизводительных приложений. Я надеюсь представить список в начале 2021 года.

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

Джейсон: Есть ли какие-то пункты в этом списке, на которые вы хотели бы обратить особое внимание?

Патрис Рой: Тенденция к программированию во время компиляции продолжается. В C# есть возможности, которые хотели бы получить разработчики на C++, например форматирование строк во время компиляции.

Я думаю, что мы действительно это можем сделать. Строковая интерполяция, доступная в C#, принесла бы пользу многим разработчикам на C++, и, мы, вероятно, сможем ее сделать.

Джейсон: Поскольку вы упомянули переполнение целых чисел или знаковых целых чисел, могут ли разработчики тестировать игры помощью UBSan для поиска таких проблем, интересно ли вам и разработчикам это попробовать?

Патрис Рой: Да, такой вариант возможен, но я слышал, что некоторые из них хотели бы, чтобы переполнение беззнаковых целых чисел считалось неопределенным поведением с некоторыми опциями компилятора - в таком случае его легче заметить подобными инструментами. То есть, некоторые разработчики хотят, чтобы это было неопределенным поведением, чтобы находить его быстрее.

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

Роб: Патрис, что еще бы вы хотели обсудить сегодня?

Патрис Рой: Что я могу сказать? Я скучаю по тем временам, когда я был свободнее и мог слушать CppCast. Я скучаю по личным встречам с членами комитета. Одним из самых ярких моментов последней встречи для меня было то, что мистер Браун, Уолтер Браун, сказал нам, что уходит на пенсию. У него ясный ум, он очень серьезен. В этом году на CppCon его выступление мне понравилось больше всех. Его доклад освещал то, как мы находим вещи через EDL и другие механизмы. Также хочу отметить, что я скучаю по Мистеру [Биману] Доусу, который скончался на прошлой неделе.

0806_cppcast-277_ru/image12.png

Впервые я познакомился с ним на CppCon и имел удовольствие поработать с ним на нескольких встречах. У него был острый ум. Он был любезен со мной. И я его очень ценю.

Джейсон: Хорошо. Что ж, было здорово снова видеть тебя сегодня на нашем выпуске, Патрис. Спасибо.

Роб: Большое спасибо, что слушали нашу беседу о C++. Мы хотели бы узнать, что вы думаете о подкасте. Пожалуйста, дайте нам знать, интересно ли вам то, что мы обсуждаем, или предложите новые темы для подкастов.

Вы можете отправить обратную связь на feedback@cppcast.com. Вы также можете поставить CppCast лайк на Twitter, мы будем признательны. Вы можете подписаться на меня (@robirving) или Джейсона (@lefticus) в Twitter. Мы также хотели бы поблагодарить всех наших спонсоров, которые помогают поддерживать шоу через Patreon.

Если вы хотите поддержать нас на Patreon, вы можете сделать это по адресу https://www.patreon.com/CppCast. Напомню, что вы можете найти всю эту информацию в заметках к выпуску на сайте https://cppcast.com/. Музыка для этого эпизода была предоставлена podcastthemes.com.

Ресурсы

Подкаст

Новостные статьи

Ссылки

Спонсоры

Гость

Популярные статьи по теме


Комментарии (0)

Следующие комментарии next comments
close comment form