The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"Выпуск языка программирования Rust 1.57"
Отправлено Ordu, 03-Дек-21 20:50 
> Вам всё-таки нужно что? Протестировать программу или сохранить результат теста в константе?

В данном случае, нужно обломаться на этапе компиляции, если размер типа не соответствует. Это может быть полезно, например, на границах с внешним миром, когда ты описываешь типы, бинарно соответствующие тому, что ты читаешь из сокета. У тебя в спецификации написано, что размер записи 24 байта, а описываешь ты эту запись поле за полем, указывая размер для каждого, как проверить, что ты не ошибся в описании ни одного из полей?

Это можно тестами проверять, но... эмм... А если у меня функция:

fn read_24_bytes_into_struc<T>(dst: &mut T) {
    // как ты здесь в компайл-тайме убедишься, что size_of::<T>() равен 24 байтам?
    // а тут надо проверить, потому что дальше пойдёт unsafe код, который сможет, если что, записать за границу выделенного буфера
    // понятно, что можно проверить в рантайме, но _зачем_ выносить в рантайм проверку, которую можно сделать в компайл тайме?
}

В C это делается как-то так:

#if sizeof(typeof(*dst)) != 24
#error "Go check sizes of your structs, moron"
#endif

Точнее делалось бы, если бы C умел бы в параметризацию по типу. Как это делается в C++, мы не знаем, не интересовались ни разу. Возможно, так же как в C.

> И что здесь необдуманного, не могли бы вы прояснить?

Нет, не могли бы. Мы не понимаем, что здесь необдуманного. Всё продумано отлично.

 

Ваше сообщение
Имя*:
EMail:
Для отправки ответов на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру