beldmit: (Программизм)
Dmitry Belyavskiy ([personal profile] beldmit) wrote2019-10-22 03:12 pm

Очень понравилось

При работе с сетью нельзя абстрагироваться от порядка байтов, поэтому хотелось бы сделать так, чтобы его нельзя было проигнорировать при написании кода. Более того, у нас не просто число в BE — это номер порта, IP-адрес, номер последовательности TCP, контрольная сумма. Одно нельзя присваивать другому, даже если количество бит совпадает.

Решение известно — строгая типизация, то есть отдельные типы для портов, адресов, номеров. Кроме того, эти типы должны поддерживать конвертацию BE/LE. Boost.Endian нам не подходит, так как в проекте нет Boost.

Размер проекта около 40 тысяч строк на C++17. Если создать безопасные типы-обертки и переписать на них структуры заголовков, автоматически перестанут компилироваться все места, где есть работа с BE. Придется один раз пройтись по ним всем, зато новый код будет только безопасным.


Жаль, что на C это скорее всего не реализовать.
elglin: (Default)

[personal profile] elglin 2019-10-22 01:17 pm (UTC)(link)
А разве вопрос не в компиляторе и его варнингах?
Есть же у нас size_t, почему бы не заиметь tcp_port_t или network_uint_t?
Да, придется использовать самописную альтернативу htons/htonl или оборачивать, но я тут не вижу принципиальной разницы между плюсами и С.
Но я не сварщик, я в свое время писал htons/htonl, и мне было норм. Правда, тогда и за unsigned int вместо size_t по рукам больно не били.
juan_gandhi: (Default)

[personal profile] juan_gandhi 2019-10-22 01:41 pm (UTC)(link)
Интересно. И главное, no implicit transformations чтобы!

Вот пока не знаю, раст для такого дела проканает или нет.
filin: (Default)

[personal profile] filin 2019-10-22 04:10 pm (UTC)(link)
С виду — проканает. Там полноценная система типов и строгая типизация времени компиляции, с zero overhead.

[personal profile] bowhill 2019-10-23 03:20 pm (UTC)(link)
Безопасности от бездумия не бывает. Это хорошо, что хотя бы в Си нет "обёрток". Так что приходится думать, что делаешь.

[personal profile] bowhill 2019-10-24 03:29 pm (UTC)(link)
Лишняя возможность проверки не лишняя, но спихивание мыслительных процессов на железку, как тенденция и как ожидание, заканчивается неудачно. Целая эпоха или культура в программировании проходит под мечтой о том, как любая кухарка сможет управлять программированием. Потому что это дёшево.

Теоретически, неопределённость порядка — проблема дизайна, ну а практически, увы, да, жизнь среди костылей.