beldmit: (Программизм)
[personal profile] beldmit
Я понял, что бы я хотел вот от этого ChatGPT. Это, конечно, нифига не интеллект. Но это — хрень, которая работает без ошибок и не задалбывается от рутины.

В моём любимом OpenSSL типичная функция на 10 строчек содержательной работы содержит 10 строчек инициализации, 40 строчек проверок того, что инициализация и содержательная работа удались (функция вернула нужное значение) и ругань по этому поводу, и ещё 10 строк очистка тех ресурсов, которые я насоздавал. И форматирование, которое, впрочем, можно поручить редактору, осталось понять, как именно.

А хочу я написать эти 10 содержательных строчек, сказать "а теперь вставь все проверки и очистку как в соседних функциях" и получить на выходе код, обвешанный некоторой обвязкой. Можно ещё проверить на типовые ошибки типа buffer overflow. В общем, даже на первый взгляд производительность содержательно растёт в разы.

Date: 2022-12-28 06:11 am (UTC)
yurikhan: (Default)
From: [personal profile] yurikhan

результат каждой не-void функции должен быть проверен

[[nodiscard]] же? Можно под макросом, чтоб проверять только в одной специальной сборке, а обычным клиентам не мешать жить.

Date: 2022-12-28 02:26 pm (UTC)
yurikhan: (Default)
From: [personal profile] yurikhan

Тогда [[nodiscard]] без дополнительных уточнений. Компилятор откажется компилировать вызов, чей результат немедленно отбрасывается. А если он сохраняется в неиспользуемую переменную, то дальше включаем ворнинг про неиспользуемые переменные и промотируем его до ошибки.

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

Profile

beldmit: (Default)
Dmitry Belyavskiy

May 2025

S M T W T F S
    123
45678910
11121314151617
181920212223 24
25262728293031

Most Popular Tags

Page Summary

Style Credit

Expand Cut Tags

No cut tags
Page generated Jun. 7th, 2025 01:18 am
Powered by Dreamwidth Studios