Ну и другая чуть меньшая боль у меня была, когда нужно было использовать bytemuck, у которого есть derive который валидирует, что #[repr(C)] структура хорошая и её можно побайтово копировать в памяти и ничего страшного не произойдёт (мне нужно из хоста в васм и наоборот тривиальные структурки гонять). И всё было хорошо, пока я не попробовал этот derive накинуть на дженерик структуру. Оно сказало что такое не умеет, добавляй #[repr(C, packed)], а то не поверю, что там паддингов нет. Добавил, но теперь думаю таки убрать, ибо проблемы создаёт, а я вот стопроцентно не параметризирую эту структуру чем-то, что сделало бы паддинги, но никак не могу это компилятору/библиотечке доказать. Пока писал, тоже придумал, что могу рядом с этой структурой объявить модуль тестов в котором определю эту же структуру, но с конкретными типами которые я туда подставляю (их два всего) и с derive-валидацией этой, которая сборку бы уронила если бы такое нельзя было бы использовать, а трейты unsafe'но реализую, ибо «зуб даю, оно работает». Мне интересно, кстати, что мне нужно будет делать, если я захочу архитектуру с big-endian поддержать (тогда хост будет BE, а wasm продолжит быть LE), но это уже совсем другая история.
#rust #мужчина_вы_что_не_видите_у_нас_обед
#rust #мужчина_вы_что_не_видите_у_нас_обед