Как запустить раст directx 12
Обновлено: 04.07.2024
Предлагаем в этой статье разобраться, что нужно знать обычному пользователю ПК о приложении DirectX.
Для обычного игрока разработка компьютерных программ может показаться сложным и длительным процессом. И это действительно так. Например, каждая модель консолей (Xbox, PlayStation, Nintendo) содержит в себе один конкретный процессор, видеокарту, встроенную память, слоты ввода и другие аппаратные компоненты. Поэтому для них не требуется дополнительное ПО.
В то же время разработчики компьютерных игр сталкиваются с большим изобилием аппаратных конфигураций. Как следствие, возникает необходимость в приложении, способном заставить весь этот “зоопарк” работать слаженно и без ошибок.
Что такое DirectX в Windows 10
Простыми словами, DirectX это программное обеспечение, взаимодействующее с аппаратными компонентами ПК. Оно участвует в вычислительных процессах, связанных с рендерингом 2D и 3D графики, рендеринге видео и воспроизведении звука на платформе Windows.
Комментарий NVIDIA: Основное внимание DirectX 12 направлено на значительное увеличение качества графики за счет снижения нагрузки на центральный процессор.
Приложение яростно соперничает с OpenGL, другим графически ориентированным софтом, представленным в 1992 году. Он представляется с открытым исходным кодом и находится в непрерывной разработке технологического консорциума Khronos Group. И хотя OpenGL является кросс-платформенным API, он вряд ли когда-либо станет конкурентом для DirectX в Windows.
Преимущества DirectX 12
Вплоть до выхода DirectX 12, недостатком программы было отсутствие низкоуровневого доступа к аппаратным компонентам компьютера. Для решения этой проблемы AMD выпустили свой собственный пакет, под названием Mantle API. Это помогло оптимизировать работу старых версий DirectX с аппаратурой AMD. Тем не менее, данный софт никак не повлиял на владельцев видеокарт NVIDIA.
Исторически сложилось так, что драйверы и программное обеспечение ОС управляли памятью и другими ресурсами ПК отдельно от имени их разработчиков. Однако это было неэффективно. Низкая производительность связана в первую очередь с тем, что данный алгоритм не мог проанализировать потребности активной программы. DirectX 12 в свою очередь помогает приложениям напрямую управлять ресурсами компьютера и выполнять синхронизацией аппаратуры. В результате разработчики игр могут наладить эффективную работу GPU относительно других компонентов.
Дополнительной особенностью DirectX 12 является функция распределения нагрузки между ядрами центрального процессора. Если раньше, в DirectX 11, “отдуваться за всех” могло лишь одно ядро, то теперь задействованы все элементы ЦП.
Частые вопросы о DirectX
Как определить версию DirectX
Часто на DirectX не обращают такого же внимания, как оно уделяется версии драйвера видеокарты или любого другого устройства. Это вполне естественно. И по этой причине многие пользователи не знают какая версия программного обеспечения у них установлена. К счастью, уточнить ее довольно легко.
1. Воспользуйтесь комбинацией клавиш Windows + R и откройте утилиту Выполнить .
Вы используете устаревший браузер. Этот и другие сайты могут отображаться в нём некорректно.
Вам необходимо обновить браузер или попробовать использовать другой.
Andrey1234
Новичек
Как запустить Rust с DirectX 9/10/11 у друзей вылетает из-за того что Rust не поддерживает их DirectX
ZiPPY
С 9 никак, уже убрали поддержку, с 10 параметр запуска - "-force-feature-level-10-0" , с 10.1 - "-force-feature-level-10-1"
Andrey1234
Новичек
Как установить параметры запуска на старом devblog?
ZiPPY
Как установить параметры запуска на старом devblog?
если старый девблог, то думаю можно будет подключить и 9 версию. Параметр запуска "-force-d3d9", Как создать - ПКМ по RustClient.exe, создать ярлык - заходи в свойства этого ярлыка, и в поле обьект (там могут быть "" в конце), после ковычек или если их нету, то просто в конце допиши параметр
Kaidoz
вышел покурить
@Andrey1234, какой толк в этом? Чтобы друзья наблюдали на экранах слайд шоу?
Andrey1234
Новичек
@Andrey1234, какой толк в этом? Чтобы друзья наблюдали на экранах слайд шоу?
Чтобы друзья могли зайти. У всех разные DirectX на ПК, но это не значит что ПК самый слабый или нет оперативки.
Pclayer
@Andrey1234, какой толк в этом? Чтобы друзья наблюдали на экранах слайд шоу?
Kaidoz
вышел покурить
Чтобы друзья могли зайти. У всех разные DirectX на ПК, но это не значит что ПК самый слабый или нет оперативки.
про оперативку ничего не говорил. Если у людей не поддерживает DirectX 11 , то у людей уже неактуальные видеокарты и соответственно о нормальном фпс идти речи не может.
11 директ вышел еще в далеком 2009 году, в 2010 вышли первые игры с этой технологии и соответственно новые игровые видеокарты должны в обязательном порядке поддерживать эту технологию, в принципе какой толк от игровой видеокарты, которая даже новинки не запустит?
Добавлю, что есть способ запустить игры на видяхе без поддержки DirectX11, но как я выше сказал, что фпс будет крайне мал(5-15 фпс, 6 цива, gtx 250). Может видеокарта слабая для цивы или из-за костыля так, возможно с растом будет лучше(ну и шутканул). Ссылку на способ не кину, дело было в 2016, но думаю не составит труда загуглить.
Может быть частично с фпс'ом решит проблему длл-ка(делает из игры мыло с бегающими игроками), которую делал на зеро и ультра раст, лично у меня прибавила 20-30фпс. С новым с растом тоже работала со слов игроков, но сейчас думаю нет из-за изменений в гуи.
ZiPPY
про оперативку ничего не говорил. Если у людей не поддерживает DirectX 11 , то у людей уже неактуальные видеокарты и соответственно о нормальном фпс идти речи не может.
11 директ вышел еще в далеком 2009 году, в 2010 вышли первые игры с этой технологии и соответственно новые игровые видеокарты должны в обязательном порядке поддерживать эту технологию, в принципе какой толк от игровой видеокарты, которая даже новинки не запустит?
Добавлю, что есть способ запустить игры на видяхе без поддержки DirectX11, но как я выше сказал, что фпс будет крайне мал(5-15 фпс, 6 цива, gtx 250). Может видеокарта слабая для цивы или из-за костыля так, возможно с растом будет лучше(ну и шутканул). Ссылку на способ не кину, дело было в 2016, но думаю не составит труда загуглить.
Может быть частично с фпс'ом решит проблему длл-ка(делает из игры мыло с бегающими игроками), которую делал на зеро и ультра раст, лично у меня прибавила 20-30фпс. С новым с растом тоже работала со слов игроков, но сейчас думаю нет из-за изменений в гуи.
Тут ты не прав. Я играл на старой видеокарте (gt 240 512mb), и она поддерживала максимум директ 10. Я играл на 10, и фпс был нормальный. 35-40 кадров
Kaidoz
вышел покурить
Тут ты не прав. Я играл на старой видеокарте (gt 240 512mb), и она поддерживала максимум директ 10. Я играл на 10, и фпс был нормальный. 35-40 кадров
Не понял при чем тут это)
Моя gtx 250(речь идет про старую версию 2012 года примерно) тоже поддерживала 10 directx, но не поддерживала 11. Поэтому я через костыль запускал Циву, которая поддерживала онли 11 и 12 директ.
Да и по мне фпс 35-40 играбелен только для игры в стратегии, но никак не для шутеров, где важна плавность картинки. Старый дев поддерживает минимум 10, а у некоторых даже он не поддерживается, так что даже сложно предположить какой будет фпс на подобных картах.
Уже 29 числа, с выходом Windows 10, станет доступна новая версия DirectX, которая обещает увеличить производительность в играх и не только. В отличие от DirectX 11, вам не потребуется покупать новую видеокарту, и это не может не радовать. DirectX 12 обещает работу на многих устройствах: на смартфонах, планшетах, ноутбуках, персональных компьютерах и Xbox One. Для последнего сама Microsoft предрекает увеличение производительности, даже по сравнению с PS4.
Что такое DirectX?
«DirectX (от англ. direct — прямой, непосредственный) — это набор API, разработанных для решения задач, связанных с программированием под Windows. Наиболее широко используется при написании компьютерных игр. Пакет средств разработки DirectX под Windows бесплатно доступен на сайте Microsoft. Зачастую обновленные версии DirectX поставляются вместе с игровыми приложениями.» (с) Wikipedia
Нововведения в DirectX 12
Низкоуровневый доступ
Поскольку ранее DirectX завоевывал рынок, Microsoft была нацелена на универсальность программного обеспечения и не давала разработчикам прямого доступа к низкоуровневым функциям видеокарты. Но теперь, благодаря новым процедурам вызова, доступ к ним открыт. Но если разработчики не используют новшества, то драйверы смогут автоматически оптимизировать их использование для решения стандартных задач.
Многопоточная оптимизация и разгрузка CPU
В марте 2014 года свет увидела большая (на то время) порция информации о новой версии API. Главной темой была оптимизация использования CPU, и в качестве примера были показаны результаты теста скорости вывода кадра в бенчмарке 3DMark. На скриншоте ниже можно увидеть сокращение скорости отображеня кадра в два (!) раза из-за оптимизации использования лишь CPU и более «умного» распределения ресурсов по ядрам.
Также оптимизирована работа процессоров, имеющих более четырех ядер. Если раньше не имело смысла переплачивать за лишние ядра, если процессор покупался для игр, то теперь все поменялось.
Использование нескольких GPU
Настал праздник для геймеров, имеющих встроенное видео ядро в своих процессорах, но не слишком мощную дискретную видеокарту. DirectX 12 позволит работать одновременно не только видеокартам с технологиями SLI или CrossFire, но и связкам «дискретная + интегрированная».
Но и для владельцев известных связок есть приятная новость. Видеокарты работают одновременно, а не поочередности, а видеопамять ваших видеокарт суммируется. Теперь multi GPU системы имеют раздельный буфер, где доступна вся память видеоадаптера, а не общий, как раньше.
DirectX 12 и встраиваемые low-end GPU
Улучшение производительности, как и сам DirectX 12, будет доступно не только на суперсовременных игровых станциях, но и для относительно слабых встраиваемых решений. По тестам, проведенным на Surface Pro 3 с процессором Core i5, имеющим встроенное видео ядро Intel HD Graphics 4400, производительность увеличилась на 50%. Все благодаря более рациональному использованию GPU.
Использование всего потенциала eSRAM (только Xbox One)
eSRAM – особая высокоскоростная память, используемая в GPU Xbox One. Ранее использовалось специальное API для управления, но сейчас, с выходом DirectX 12, всем управляет одно API – DirectX. Данное улучшение обещает увеличение быстродействия памяти и более рациональное ее использование. Вероятно это поможет сократить, а может и вовсе избавиться, от отставания от PS4.
Обратная совместимость с DirectX 11 видеокартами
Большинство современных видеокарт, которые поддерживают DirectX 11, полностью совместимы с DirectX 12. Но, к сожалению, далеко не все смогут использовать все нововведения в новом API.
- Windows 10;
- Видеокарта, совместимая с DirectX 12 API;
- Видео драйвер, поддерживающий DirectX 12 API;
Моя видеокарта поддерживает DirectX 12?
Список видеокарт с поддержкой DirectX 12 API:
*В этом списке предоставлены видеокарты, поддерживающие DirectX 12 API, но далеко не все из них поддерживают DirectX 12_0 и DirectX 12_1.
- AMD Radeon™ R9 285, 290/290X, 295X2, M295X
- AMD Radeon™ R7 260/260X
- AMD Radeon™ HD 8770
- AMD Radeon™ HD 7790
- GeForce, GTX Titan X
- GTX 980, GTX 980Ti
- GTX 970
- GTX 960
- GeForce, GTX Titan X
- GTX 980, GTX 980Ti
- GTX 970
- GTX 960
DirectX 12_0
Только GPU или архитектуры, специально разработанные для поддержки DirectX 12, будут поддерживать уровень функций DirectX 12_0, который содержит ряд новых технологий. Среди них – тайловые ресурсы Tiled Resources. В принципе, тайловые ресурсы известны ещё по DirectX 11, они отличаются высокой эффективностью по используемой памяти, а также могут значительно улучшить уровень детализации. С помощью мелких текстур в многократных ориентациях можно симулировать крупные текстуры. Кроме того, существенно экономится память. А качество картинки приносить в жертву не придётся.
В примере приводится классическая текстура Texture 3D под DirectX 11 с разрешением 1.200 x 600 x 600 пикселей с 32-битным цветом – она занимает 1,6 Гбайт. С тем же качеством можно использовать тайловую текстуру Tiled Texture 3D через многократные повторения – она будет иметь разрешение 32 x 32 x 16 пикселей с 32-битным цветом. Размер при этом будет составлять 156 Мбайт. В одном из примеров приведена сцена рендеринга, в которой тайловая 3D-текстура используется 2.500 раз. Для создания и симуляции некоторых материалов в 3D добавляется ещё одно информационное поле. Им может быть, например, значение прозрачности или вязкости. Такой подход позволяет лучше симулировать жидкости и газы.
Ещё один тип тайловых ресрусов – объёмные тайловые ресурсы (Volume Tiles Resources), однако они относятся к уровню функций уже не DirectX 12_0, а 12_1.
К уровню DirectX 12_0 относится Typed UAV и новая модель Bind, которые ориентируют API на большее число ядер CPU, что обеспечивает более широкую параллелизацию и производительность.
DirectX 12_1
Ещё на шаг дальше Microsoft и разработчики GPU пошли с DirectX 12_1. Но данный урвоень функций поддерживают только самые новейшие GPU. К ним относятся все GPU на основе 2-го поколения "Mawell". Одна из новых технологий – консервативная растеризация (Conservative Rasterization). Она используется для фильтра динамического суперразрешения (Dynamic Super Resolution) и сглаживания Multiframe Sampled Anti-Aliasing.
При растеризации небольшого объекта/пикселя в некоторых случаях лучше учитывать все покрытые точки семплирования, пусть даже частично. Также консервативная растеризация важна при вокселизации VXGI. Улучшенная методика наиболее заметна и при расчете теней.
Видео демонстрации DirectX 12:
Заключение
Все выглядит очень многообещающе. Для AMD в частности. AMD славится своими шести и восьми-ядерными процессорами – улучшена поддержка многоядерных процессоров. AMD имеет процессоры с хорошими графическими ядрами (APU) – мощности встроенной и дискеретной графики суммируются. Улучшена поддержка высоких разрешений, в которых даже не самые новые видеокарты от AMD и так хорошо себя чувствуют. Графика от Nvidia или Intel тоже не останется в дураках, все получат прирост производительности. Но на самом деле, больше от этого выиграем мы – игроки.
Остается надеяться, что игры с ужасной оптимизацией будут выходить реже, чем сейчас, а железо не придется апгрейдить так часто. Мечты-мечты :)
//Статья не является копипастой. Вся собранная тут информация была получена из общедоступных источников, обработана и описана в этой статье. Весь заимствованный контент имеет под собой ссылку на первоисточник.
а есть что-то более симпатичное на вид?
сейчас оно выглядит чуть ли не хуже плюсов.
Начал потихоньку комментировать исходники тестовой программки.
Программа выводит некоторое количество текстурированных кубов, подготавливая списки команд для GPU в несколько потоков.
Может быть кому-то будет интересно посмотреть что представляет из себя DX12 и Rust.
Здравствуйте, neFormal, Вы писали:
F>а есть что-то более симпатичное на вид?
F>сейчас оно выглядит чуть ли не хуже плюсов.
Гм. Наверно на чей-то вкус очень симпатичная.
F>а есть что-то более симпатичное на вид?
F>сейчас оно выглядит чуть ли не хуже плюсов.
Нечего тут катить бочку на С++. Задействовать DirectX в С++ можно вполне лаконично и читабельно.
Тут скорее проблема в том, что это вроде как почти прямой проброс заголовков из SDK в раст.
Удобства раста (если они имеются) с таким подходом почувствовать не получается.
Некоторые места вообще вызываю отторжение. Вот например:
Второй swap_chain может из-за криво названных переменных получился, но почему нельзя как-то сделать hresult из одного слова?
Явный this (self?) — это шаг обратно в С.
И еше непонятно, как толком реализовывать обработку ошибок с подходом раста "исключения не нужны"?
Проверки результатов с unwrap (?) чуть ли не на каждой строчке — это ужасно, еще одна деградация в С.
Здравствуйте, VTT, Вы писали:
VTT>Нечего тут катить бочку на С++. Задействовать DirectX в С++ можно вполне лаконично и читабельно.
и это будет примерно на таком же уровне, как приведённый код.
поэтому хочется более выразительных примеров.
Здравствуйте, VTT, Вы писали:
VTT>Нечего тут катить бочку на С++. Задействовать DirectX в С++ можно вполне лаконично и читабельно.
Строчка из Microsoft'овского хелло-ворлда. Можно, конечно, привести к более приличному виду чем-то вроде макроса, который я привел ниже.
VTT>Тут скорее проблема в том, что это вроде как почти прямой проброс заголовков из SDK в раст.
VTT>Удобства раста (если они имеются) с таким подходом почувствовать не получается.
Одна только передача размера массива вместе с самим массивом устраняет множество точек в которых можно сделать ошибку.
Или попробуйте переписать
submit_in_parallel() на С++, так, чтобы заработало с первого раза.
ДОБАВЛЕНО НЕМНОГО ПОЗЖЕ:
Чем хорош Rust, это тем что можно построить гарантированно стабильную платформу для написания кода.
В отличии от С++, в котором, сколько темплейтов и макросов не накручивай, всегда можно словить
инвалидированный итератор, или ссылку, которая указывает на деаллоцированную память.
VTT>Некоторые места вообще вызываю отторжение. Вот например:
VTT>
А как вам это чудо из глубин заголовочных файлов?
Я set_fullscreen тоже написал, чтобы меньше лазить во внутренности DXSwapchain.
VTT>Второй swap_chain может из-за криво названных переменных получился, но почему нельзя как-то сделать hresult из одного слова?
Но это не очень частый случай, когда функция может вернуть не ошибку, а, например, DXGI_STATUS_MODE_CHANGE_IN_PROGRESS.
Обычно я пишу HResult<()>.
VTT>Явный this (self?) — это шаг обратно в С.
Это не очень приятное следствие стремления разработчиков Rust'а избегать неявных вещей.
Есть в аргументах функции self? Есть. Значит должен быть и в вызове.
Может и уберут когда-нибудь. Но особо не напрягает.
А шаг к С — это не всегда плохо. И не всегда обратно. Hint: composition over inheritance.
VTT>И еше непонятно, как толком реализовывать обработку ошибок с подходом раста "исключения не нужны"?
VTT>Проверки результатов с unwrap (?) чуть ли не на каждой строчке — это ужасно, еще одна деградация в С.
Вы мой код смотрели? Кое-где там try! есть. Как соберусь реализовывать error recovery, добавлю везде.
А пока ничем не хуже примера Microsoft'а. Исключения они там кидают, но заботы о сохранении консистентного состояния после вызова исключения там нет, да что там, там даже поимки исключений нет.
Здравствуйте, red75, Вы писали:
R>Здравствуйте, VTT, Вы писали:
VTT>>Нечего тут катить бочку на С++. Задействовать DirectX в С++ можно вполне лаконично и читабельно.
R>
R>Строчка из Microsoft'овского хелло-ворлда. Можно, конечно, привести к более приличному виду чем-то вроде макроса, который я привел ниже.
VTT>>Тут скорее проблема в том, что это вроде как почти прямой проброс заголовков из SDK в раст.
VTT>>Удобства раста (если они имеются) с таким подходом почувствовать не получается.
R>Или попробуйте переписать
R>submit_in_parallel() на С++, так, чтобы заработало с первого раза.
Под "лаконично и читабельно" я обычно подразумеваю что-то похожее на Simple English;
существительные-переменные, глагол-метод, с минимумом скобочек, палочек и прочих крякозябр, например:
Откровенно говоря, моих познаний в расте явно недостаточно, чтобы осилить этот фрагмент.
Многие места с ходу вообще нереально переварить, например:
первый scope похож на метод, второй на какое-то особое ключевое слово или директиву, а третий — на переменную, хз что это все значит.
цикл (?) наводит ужас.
многие методы выглядят так, как будто вызывают сами себя рекурсивно
R>Одна только передача размера массива вместе с самим массивом устраняет множество точек в которых можно сделать ошибку.
R>Чем хорош Rust, это тем что можно построить гарантированно стабильную платформу для написания кода.
R>В отличии от С++, в котором, сколько темплейтов и макросов не накручивай, всегда можно словить
R>инвалидированный итератор, или ссылку, которая указывает на деаллоцированную память.
Ну размер массива никто и в С++ передавать не мешает.
Лично для меня такие проблемы остро не стоят.
R>А как вам это чудо из глубин заголовочных файлов?
R>
хорошо, что я давно отказался от использования этого макроса.
R>Но это не очень частый случай, когда функция может вернуть не ошибку, а, например, DXGI_STATUS_MODE_CHANGE_IN_PROGRESS.
R>Обычно я пишу HResult<()>.
А нет ли какого-то способа эмулировать исключения чтобы не пробрасывать везде эти HRESULT?
R>Это не очень приятное следствие стремления разработчиков Rust'а избегать неявных вещей.
Желание похвальное. Но реализовано как-то странно. Как я понял, проблемы с заслонением переменных из внешних областей видимости такой подход не решает никак.
R>Вы мой код смотрели? Кое-где там try! есть. Как соберусь реализовывать error recovery, добавлю везде.
Вот кстати наличие в языке таких макросов (вообще наличие макросов) вызывает очень нехорошее ощущения.
R>А пока ничем не хуже примера Microsoft'а. Исключения они там кидают, но заботы о сохранении консистентного состояния после вызова исключения там нет, да что там, там даже поимки исключений нет.
Ну примеры MS явно не стоит рассматривать в качестве эталона качества. А в каких это примерах они так лихо кидаются исключениями?
Говорить дальше не было нужды. Как и все космонавты, капитан Нортон не испытывал особого доверия к явлениям, внешне слишком заманчивым.Здравствуйте, VTT, Вы писали:
R>>Или попробуйте переписать
R>>submit_in_parallel() на С++, так, чтобы заработало с первого раза.
VTT>Под "лаконично и читабельно" я обычно подразумеваю что-то похожее на Simple English;
VTT>существительные-переменные, глагол-метод, с минимумом скобочек, палочек и прочих крякозябр, например:
VTT>
VTT>Многие места с ходу вообще нереально переварить, например:
VTT>
VTT>первый scope похож на метод, второй на какое-то особое ключевое слово или директиву, а третий — на переменную, хз что это все значит.
crossbeam::scope это вызов функции scope из модуля crossbeam. В принципе, тоже что и в С++ с неймспейсами (а году к 2017-му вроде и модули добавят).
это лямбда. Аналог в С++:
правда не помню, позволяет С++ auto в лямбдах или нет.
crossbeam::scope передаёт в лямбду RAII-guard (scope).
Гарантируется, что RAII-guard выйдет из области видимости только тогда когда все потоки,
созданные с его помощью (scope.spawn() это как-раз создание потока, имеющего доступ к локальным переменным),
будут завершены.
означает, что лямбда получает не ссылки на локальные переменные, а становится их владельцем.
Тут это не особенно важно, да и долго объяснять.
VTT>
VTT>цикл (?) наводит ужас.
Цикл. В С++ было бы что-то вроде. Хм. Ну, наверно.
VTT>
VTT>многие методы выглядят так, как будто вызывают сами себя рекурсивно
Предпочитаю использовать функции. Если перед идентификатором нет точки, это всегда функция.
R>>Одна только передача размера массива вместе с самим массивом устраняет множество точек в которых можно сделать ошибку.
R>>Чем хорош Rust, это тем что можно построить гарантированно стабильную платформу для написания кода.
R>>В отличии от С++, в котором, сколько темплейтов и макросов не накручивай, всегда можно словить
R>>инвалидированный итератор, или ссылку, которая указывает на деаллоцированную память.
VTT>Ну размер массива никто и в С++ передавать не мешает.
VTT>Лично для меня такие проблемы остро не стоят.
Ни одного core-dump'a, buffer overrun'a, abstract method call'a, use of uninitialized variable,
overlapping memory region copy? Честно? Проверьте статическим анализатором свой код.
R>>Но это не очень частый случай, когда функция может вернуть не ошибку, а, например, DXGI_STATUS_MODE_CHANGE_IN_PROGRESS.
R>>Обычно я пишу HResult<()>.
VTT>А нет ли какого-то способа эмулировать исключения чтобы не пробрасывать везде эти HRESULT?
unwrap() убивает поток в котором выполняется, с вызовом всех деструкторов.
Из другого потока можно обработать эту ситуацию. Но такое не рекомендуется.
R>>Это не очень приятное следствие стремления разработчиков Rust'а избегать неявных вещей.
VTT>Желание похвальное. Но реализовано как-то странно. Как я понял, проблемы с заслонением переменных из внешних областей видимости такой подход не решает никак.
На этот случай есть предупреждеие.
R>>Вы мой код смотрели? Кое-где там try! есть. Как соберусь реализовывать error recovery, добавлю везде.
VTT>Вот кстати наличие в языке таких макросов (вообще наличие макросов) вызывает очень нехорошее ощущения.
Ну, у меня std::cout<<std::hex<<std::width(8)<<static_cast<intptr_t>(ptr)<<std::endl; вызывает смех.
Таки, println!("",ptr) получше будет.
R>>А пока ничем не хуже примера Microsoft'а. Исключения они там кидают, но заботы о сохранении консистентного состояния после вызова исключения там нет, да что там, там даже поимки исключений нет.
VTT>Ну примеры MS явно не стоит рассматривать в качестве эталона качества. А в каких это примерах они так лихо кидаются исключениями?
А exception-safe программу нужно ооочень долго искать.
Здравствуйте, red75, Вы писали:
R>Ни одного core-dump'a, buffer overrun'a, abstract method call'a, use of uninitialized variable,
R>overlapping memory region copy? Честно? Проверьте статическим анализатором свой код.
Такие вещи если и случаются, то обычно из-за внешних причин: баги в сторонних библиотеках, бинарные несовместимости, проблемы с конфигурацией, аппаратные проблемы и т.п.
Чтобы словить abstract method call надо очень сильно напортачить, я даже не припомню таких случаев.
И да, я и так стараюсь проверять не только статическим анализатором (тут правда все плохо, ибо доступа к корпоративным коммерческим решениям нет, анализатор в VS слабоват и не доступен под linux, а cppcheck уже все), но и в рантайм.
R>Ну, у меня std::cout<<std::hex<<std::width(8)<<static_cast<intptr_t>(ptr)<<std::endl; вызывает смех.
R>Таки, println!("",ptr) получше будет.
Ну не знаю, эти примеры демонстрируют работу с API DirectX, а не exception-safe программирование.
Мне кажется, что игнорирование hresult было бы более тяжелой ошибкой, нежели выкидывание при этом неловящегося исключения без заботы о дальнейшей жизни программы.
А какой смысл экономить на длине названий? Почему M4, а не Matrix4?
Matrix3<T>, Matrix4<T> импортируются из крейта cgmath. М4, чтобы меньше печатать и показать что
это более примитивный тип. Кроме того M4 используется только в модуле cubes.
А экспорт этих типов из модуля действительно надо убрать, спасибо.
Здравствуйте, red75, Вы писали:R>Matrix3<T>, Matrix4<T> импортируются из крейта cgmath. М4, чтобы меньше печатать
Т.е. из-за проблем редактора (отсутствует автодополнение) нужно превращать код в набор иероглифов понятных только автору?
R>и показать что
R>это более примитивный тип.
По Matrix4 и так понятно.
Здравствуйте, Nikе, Вы писали:
N>Здравствуйте, red75, Вы писали:
R>>Matrix3<T>, Matrix4<T> импортируются из крейта cgmath. М4, чтобы меньше печатать
N>Т.е. из-за проблем редактора (отсутствует автодополнение) нужно превращать код в набор иероглифов понятных только автору?
В VisualRust автодополнение в этом случае как-раз работает. И не иероглифы, а аббревиатуры.
Перенес type M4=.. к единственному месту где он используется (struct Constants).
Здравствуйте, red75, Вы писали:
R>В VisualRust автодополнение в этом случае как-раз работает. И не иероглифы, а аббревиатуры.
Аббревиатуры имеют право на существование только когда они общеприняты или отображают пространство имён (т.е. встречаются очень часто).
Читайте также: