diff --git a/docs/rust_vs_cpp.md b/docs/rust_vs_cpp.md index 65387e2..8ec3ef9 100644 --- a/docs/rust_vs_cpp.md +++ b/docs/rust_vs_cpp.md @@ -285,13 +285,17 @@ winit забирает его себе и зовёт приложение чер **Замены vk-bootstrap нет.** В C++ выбор физического устройства по требуемым возможностям, поиск семейств очередей, проверка наличия слоя валидации и сборка цепочки -показа — это `vkb::InstanceBuilder`, `vkb::PhysicalDeviceSelector`, `vkb::SwapchainBuilder`, -суммарно около сорока строк вызовов. В порте это `context.rs` и `swapchain.rs`, написанные -руками: перебор устройств, чтение `PhysicalDeviceFeatures2` с цепочкой `Vulkan12/13Features`, -разбор флагов семейств очередей, проверка поддержки показа на поверхность, выбор формата -с откатом, зажим размера и числа образов по возможностям поверхности. Это **самая -большая статья расходов порта** и главная причина, по которой `simv-vk` вышел длиннее -своего прообраза. +показа — это `vkb::InstanceBuilder`, `vkb::PhysicalDeviceSelector` и +`vkb::SwapchainBuilder`. В порте всё это написано руками: перебор устройств, чтение +`PhysicalDeviceFeatures2` с цепочкой `Vulkan12/13Features` и сверка девяти возможностей, +разбор флагов семейств очередей с проверкой поддержки показа на поверхность, выбор +формата с откатом на первый доступный, зажим размера и числа образов по возможностям +поверхности, создание представлений. + +Счёт по одним и тем же модулям (`Context` и `Swapchain` целиком, строки кода без пустых и +комментариев): **301 строка в C++ против 606 в порте**. Эти 305 строк разницы и есть +главная причина, по которой `simv-vk` вышел длиннее прообраза, — весь остальной перевес +Vulkan-слоя укладывается в четыре десятка строк. **Ритм выпусков разный.** `ash` 0.38 вышел в апреле 2024 и с тех пор не обновлялся — это не заброшенность (Vulkan 1.3 он покрывает полностью, а генерируемый API стабилен), @@ -356,10 +360,10 @@ C++ тоже опасен, не притворяясь, что их нет. сводится. Что можно утверждать по итогам порта: **Порт занял примерно на пятую часть больше строк**, и почти весь перевес пришёлся на -`simv-vk`. Причина одна и она названа выше: замены vk-bootstrap нет, и сорок строк -вызовов превратились в двести пятьдесят строк выбора устройства и сборки цепочки показа. -Вне Vulkan-слоя объёмы сопоставимы. Если проект растёт дальше именно в Vulkan-часть, -перевес разовый: инициализация пишется один раз. +`simv-vk`. Причина одна и она названа выше: замены vk-bootstrap нет, и 301 строка +`Context` с `Swapchain` превратилась в 606. Остальной Vulkan-слой — запись кадра, барьеры, +сборка конвейеров — совпадает почти строка в строку. Если проект растёт дальше именно в +Vulkan-часть, перевес разовый: инициализация пишется один раз. **Сборка: паритет везде, кроме одной клетки.** Полная сборка release у C++ вдвое быстрее (114 с против 194 с), полная debug — наоборот, медленнее (112 с против 83 с),