From d6e1fa52b980c42b8c67e16cde656daa2bf371eb Mon Sep 17 00:00:00 2001 From: NotBigGhost Date: Sun, 30 Aug 2026 20:59:32 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A3=D1=82=D0=BE=D1=87=D0=BD=D0=B8=D1=82?= =?UTF-8?q?=D1=8C=20=D1=86=D0=B5=D0=BD=D1=83=20=D0=B7=D0=B0=D0=BC=D0=B5?= =?UTF-8?q?=D0=BD=D1=8B=20vk-bootstrap=20=D0=B8=D0=B7=D0=BC=D0=B5=D1=80?= =?UTF-8?q?=D0=B5=D0=BD=D0=BD=D1=8B=D0=BC=D0=B8=20=D1=87=D0=B8=D1=81=D0=BB?= =?UTF-8?q?=D0=B0=D0=BC=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Было сказано «около сорока строк вызовов» на глаз. Счёт по одним и тем же модулям (Context и Swapchain целиком, код без пустых и комментариев) даёт 301 строку в C++ против 606 в порте. Co-Authored-By: Claude Opus 5 --- docs/rust_vs_cpp.md | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) 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 с),