четверг, 8 октября 2020 г.

[prog.c++] Наш RESTinio упомянули в докладе про I/O Objects из Networking TS на CppCon2020

При просмотре доклада "The Networking TS from Scratch: I/O Objects" от Robert Leahy уронил челюсть на пол при появлении вот этого слайда:

Отрадно. Не зря, выходит.

Пользуюясь случаем хочу напомнить, что если вам не хватает чего-то в RESTinio или же вам что-то не нравится в RESTinio, то об этом можно рассказать нам. Возможно, мы сможем вам помочь.

понедельник, 5 октября 2020 г.

[prog.c++] Смешанные впечатления от трюка с dont_deduce

Несколько дней назад на Reddit-е появилась ссылка на статью dont_deduce<T>. Если кто не читал, но итересуется различными плохоосвещенными закутками языка C++, то рекомендую. Станет понятно, зачем в C++20 появился шаблон std::type_identity.

На меня знакомство с трюком dont_deduce/type_identity произвело двойственное впечатление.

С одной строны, интересно было о нем узнать. Никогда о подобных вещах не задумывался, а тут такое! :)

Но, с другой стороны, C++ вполне обоснованно критикуют за то, что в C++ часто и бесконтрольно происходит автоматическая конвертация типов. Начиная от (может быть) безобидных преобразований из int в float/double и заканчивая неявным вызовом конструкторов классов с единственным параметром (как, например, конструирование std::string из строкового литерала). А применение трюка dont_deduce/type_identity, как по мне, есть не что иное, как целенаправленное закладывание в код этих самых неявных преобразований типов. О которых другой программист, использующий ваши API, скорее всего, даже не будет знать.

Так что я бы лично предпочел бы получить от компилятора ошибку о том, что он не может вывести шаблон функции т.к. один параметр имеет тип Vec3<float>, а второй -- int. Чтобы поправить код и явным образом вписать константу 1f вместо 1.

Возможно, трюк dont_deduce/type_identity может применяться в коде шаблонных функций/классов. В котором приходится хардкодить константы (типа явно описываемых в коде единичек или ноликов). Но в современном C++ есть же всякие decltype, чтобы легко определить какой тип должны иметь захардкоженные константы, так что серьезной проблемы из-за неприменения dont_deduce/type_identity я не вижу.

Итого: если кто-то не в курсе что такое dont_deduce/type_identity, то ознакомиться с вышеозначенной статьей полезно. Но вот наскольо оправданно будет применение этого трюка на практике... Это большой вопрос.