Часто целевая платформа содержит патченый компилятор
Я бы сказал, что наоборот, это крайне редко. Куча железок имеют только кроссы. Даже на тех же линуксах собирают кроссами, чтобы гарантированно запускаться на системах с нужной версией (g)libc
В принципе, можно сделать тулчейн не зависящий от gcc, нужно собрать compiler-rt, libunwind, libc++, libc++abi из состава llvm. Правда, это может быть довольно хлопотно для некоторых архитектур.
Gcc тулчейн хоть и неудобен, но зато собирается под гораздо более широкий набор платформ, чем полноценный clang тулчейн.
Довольно интересно, спасибо. А почему вы не воспользовались dumpbin /disasm для получения ассемблерного кода? Если я правильно помню, то он еще и отладочные символы умеет потреблять, сами символы можно загрузить с помощью symchk
Я имею ввиду, что лучше билд систем не справится никто, а баги в любом софте есть.
Вообще я бы переформулировал свой посыл так: если уж и делать стат анализ с помощью ML, то кто это сделает лучше разработчиков текущих решений? Кто лучше вас знает теорию и практику этой области? Поэтому, хоть Андрей и написал, что мы не луддиты, но выглядит эта статья именно так, при всем уважении
Здравствуйте, статья интересная. В целом я согласен с выводами, но мне кажется что вы не совсем корректно обозначили скоуп ответственности ML в задаче анализа: например, препроцессированием должны заниматься билд системы, и это они делают довольно успешно, насколько я помню PVS тоже в конечном итоге работает с препроцессированным файлом и делает препроцессинг за него компилятор.
Построением AST тоже может заниматься не ML, к тому же уже есть готовые решения — ваш продукт, clang и пр.
Насчет обучения — можно его "легко" научить на том же гитхабе, только прогоните весь гитаре через стат анализаторы и вы получите критерии хорошего кода
Мой комментарий был к предложению в статье, о том что полноценные гетерогенные контейнеры в C++ сделать нельзя. Можно! Правда реализация и недостатки не позволяют использовать это в production.
Что касается visitor, по-моему, по другому обойти гетерогенный контейнер не получится, так что в любой реализации будет visitor
А я и не пытался сравнивать. Просто от поддержки структурных исключений до поддержки плюсовых — пара шагов. Самое сложное то вы сделали — поиск обработчика.
Насколько я помню, плюсовые исключения можно сделать через структурные исключения, ну только там еще нужно будет функцию сделать, что-то типа _CxxThrowException
В целом, насколько я понял, UEFI специфики здесь нет. Скорее здесь информация о том как добавить поддержку структурных исключений для исключений процессора для PE образов, собранных компилятором MSVC.
Тоже самое в принципе, можно сделать и на BIOS окружении.
Вот кстати, ребята пошли еще дальше, и сделали поддержку плюсовых исключений в ядре Windows: правда проект скорее мертв чем жив, но посмотреть там есть на что.
С точки зрения корутин, практически никаких отличий нет от того же драйвера (посмотрите на гитхабе файлы crt.cpp для драйвера и EFI приложения).
Компилятор MS начиная с VS2008 умеет собирать EFI бинарники, посмотрите проект EDK2. Файлы .vcxproj и efi.props — это по сути копия параметров сборки из EDK2, но только для MsBuild
Вообще EFI SDK — это только заголовочные файлы, хедера можно взять из того же EDK
К вопросу о помощи, где вы храните исходники? Если позволяет ваша лицензия, может выложите их на github, bitbucket, etc. Тогда больше вероятность, что вам помогут
Есть еще такая штука, как typeswitch, исходный код можно найти здесь. Правда эта библиотека делает немного другое, она позволяет осуществить диспетчеризацию по типам, вот пример использования:
> начальство было против данной замены (
Не повезло, сочувствую.
Кстати я как-то на работе нечаянно провел тест: я написал одну программу — демон, и забыл ее выключить (там тоже были sleep и все такое) и она крутилась на тестовом сервере и все про нее забыли (случайно наткнулся на нее), я посмотрел, что за несколько месяцев работы, она сожрала день процессорного времени — а это был только простой, по факту она ничего не делала. При этом висящий рядом демон ftpd сожрал не более нескольких минут процессорного времени. Меня эта ситуация в свое время очень мотивировала на обучение параллельному программированию, возможно это вам поможет
Использовать значение ГИСЧ в качестве сида для ГПСЧ. Через определенное количество использований повторять такую процедуру
Я бы сказал, что наоборот, это крайне редко. Куча железок имеют только кроссы. Даже на тех же линуксах собирают кроссами, чтобы гарантированно запускаться на системах с нужной версией (g)libc
В принципе, можно сделать тулчейн не зависящий от gcc, нужно собрать compiler-rt, libunwind, libc++, libc++abi из состава llvm. Правда, это может быть довольно хлопотно для некоторых архитектур.
Gcc тулчейн хоть и неудобен, но зато собирается под гораздо более широкий набор платформ, чем полноценный clang тулчейн.
Как вариант, один раз написать или найти toolchain файл для cmake. В cmake PVS можно кучей разных способов инткгрировать
У windbg, кстати, есть .dbgdbg, но она, конечно, не спасет в вашей ситуации. Статья просто супер, спасибо!
Довольно интересно, спасибо. А почему вы не воспользовались dumpbin /disasm для получения ассемблерного кода? Если я правильно помню, то он еще и отладочные символы умеет потреблять, сами символы можно загрузить с помощью symchk
Я имею ввиду, что лучше билд систем не справится никто, а баги в любом софте есть.
Вообще я бы переформулировал свой посыл так: если уж и делать стат анализ с помощью ML, то кто это сделает лучше разработчиков текущих решений? Кто лучше вас знает теорию и практику этой области? Поэтому, хоть Андрей и написал, что мы не луддиты, но выглядит эта статья именно так, при всем уважении
Здравствуйте, статья интересная. В целом я согласен с выводами, но мне кажется что вы не совсем корректно обозначили скоуп ответственности ML в задаче анализа: например, препроцессированием должны заниматься билд системы, и это они делают довольно успешно, насколько я помню PVS тоже в конечном итоге работает с препроцессированным файлом и делает препроцессинг за него компилятор.
Построением AST тоже может заниматься не ML, к тому же уже есть готовые решения — ваш продукт, clang и пр.
Насчет обучения — можно его "легко" научить на том же гитхабе, только прогоните весь гитаре через стат анализаторы и вы получите критерии хорошего кода
p.s. Вы правы, ваша формулировка допускает, что они могут быть :)
Что касается visitor, по-моему, по другому обойти гетерогенный контейнер не получится, так что в любой реализации будет visitor
Вот как можно сделать НАСТОЯЩИЕ гетерогенные контейнеры: https://gieseanw.wordpress.com/2017/05/03/a-true-heterogeneous-container-in-c/
Насколько я помню, плюсовые исключения можно сделать через структурные исключения, ну только там еще нужно будет функцию сделать, что-то типа _CxxThrowException
Я понимаю, что сделать это можно, но насколько это легитимно?
На EDK-шной реализации UEFI спеки я бы еще понял, но на чистом UEFI — тут вопрос?
Тоже самое в принципе, можно сделать и на BIOS окружении.
Вот кстати, ребята пошли еще дальше, и сделали поддержку плюсовых исключений в ядре Windows: правда проект скорее мертв чем жив, но посмотреть там есть на что.
С точки зрения корутин, практически никаких отличий нет от того же драйвера (посмотрите на гитхабе файлы crt.cpp для драйвера и EFI приложения).
Компилятор MS начиная с VS2008 умеет собирать EFI бинарники, посмотрите проект EDK2. Файлы .vcxproj и efi.props — это по сути копия параметров сборки из EDK2, но только для MsBuild
Вообще EFI SDK — это только заголовочные файлы, хедера можно взять из того же EDK
Или здесь
Причем сами авторы позиционируют данную библиотеку, как максимально быструю и эффективную.
Не повезло, сочувствую.
Кстати я как-то на работе нечаянно провел тест: я написал одну программу — демон, и забыл ее выключить (там тоже были sleep и все такое) и она крутилась на тестовом сервере и все про нее забыли (случайно наткнулся на нее), я посмотрел, что за несколько месяцев работы, она сожрала день процессорного времени — а это был только простой, по факту она ничего не делала. При этом висящий рядом демон ftpd сожрал не более нескольких минут процессорного времени. Меня эта ситуация в свое время очень мотивировала на обучение параллельному программированию, возможно это вам поможет