Pull to refresh
73
0.1
Сергей @lamerok

Хоккеист — на микроконтроллерах программист

Send message

 написал консольное приложение для проверки функции вычисления угла между векторами. 

Для этого специально есть такое понятие как юнит тест, запускаете вместе с компиляцей, если прошли, то и сборка создалась, нет, ищете ошибку.

CppUTest можете использовать, подходит ко всем контроллерам.

Ещё и покрытие можете отслеживать, чтобы убедиться, что все ветки проверены.

В CortexM4F за 1.3 доллара есть. Другое дело, что тут double.

public void assign(Author author, Book book) { book.setAuthor(author); book.save(); }

Вообще не чистый код, кроме того, что, вы назначете автора книги, вы ещё сохранение книги делаете. В итоге нарушили принцип единственной ответственности.

Но ладно, тогда метод должен называться AssignAuthorAndSaveBook.

В общем сразу по такой функции ничего не поймёшь и придётся в неё нырять и смотреть, что она делает.

Странно, а че Habr в списке отсутствует.

Это в копилку с отключением рекламы в Youtube для россиян.

Да, уже посмотрел в стандарте:

C++17 §8.2.10/5 [expr.reinterpret.cast]

A value of integral type or enumeration type can be explicitly converted to a pointer. A pointer converted to an integer of sufficient size (if any such exists on the implementation) and back to the same pointer type will have its original value; mappings between pointers and integers are otherwise implementation-defined. [ Note: Except as described in 6.7.4.3, the result of such a conversion will not be a safely-derived pointer value. — end note ]

Но вот аскажем укзатель одного типа в указатель другого уже точно UB

int i = 0; short* ptr = (short*) &i;

тут чтоно уже strict aliasing

Да, прочитал в стандарте 17 еть такое:

C++17 §8.2.10/5 [expr.reinterpret.cast]

A value of integral type or enumeration type can be explicitly converted to a pointer. A pointer converted to an integer of sufficient size (if any such exists on the implementation) and back to the same pointer type will have its original value; mappings between pointers and integers are otherwise implementation-defined. [ Note: Except as described in 6.7.4.3, the result of such a conversion will not be a safely-derived pointer value. — end note ]

Если у вас С++, у вас тоже UB везде по коду, просто вы про это не знаете. Точно же используете преобразование целого в указатель и обратно, ну как минимум для обращения к регистрам, а это UB.

union используете для преобразования из одного типа в другой или обращения к разным типам, а это UB.

То, что писать надо проще это факт, но что такое проще, непонятно, switch это проще? Нет, потому что это ветвление, а код должен быть линейный, любое ветвление, это гемор с юнит тестами, тестами и потенциальная ошибка.

Поэтому я бы сказал, что код должен быть выразительнее. Т. Е. небольшие линейные функции. Ну и понятнее.

Ну для SIL оба языка и С и С++, стоят как рекомендованные только вместе со статический анализатором. Не рекомендованы динамическое выделение памяти, указатели и так далее. Их использование должно быть минимизировано. На Си это конечно сделать намного труднее, если вообще невозможно.

Вот Ada там стоит как рекомендованно без ограничений :).

А так да конечно, практически безопасность обеспечивается правильным процессом, если есть детальные требования к критически важным частям, дизайн, юнит тесты, ревью, анализатор кода, смок тесты, системные тесты, стандарт кодирования и вся команда чётко этому следует вероятность ошибок в коде падает кратно.

Как минимум VS Code поддерживает кучу плагинов, типа cmake, Ctest, pvs stduio, asciidoc, ouml и так далее, все можно делать в одной среде, и код и требования, и дизайн и юнит тесты и проверка статический анализатором и так далее.

Один раз настроил и дальше уже удобно и просто.

Можно. Просто нужно ограничить использование сложных для понимания фишек + статический анализатор использовать.

Любой статический анализатор, например PC Lint, нашёл бы в этом коде сразу все проблемы.

2 пример, классический пример, того, что должно быть чётко прописано в стандарте, да и вообще не надо так делать на любом языке. Лучше передать мьютекс как зависимость из вне.

3 пример тоже как делать в принципе не надо, а не только в С++.

Доля еды в потребительской корзине европейца из развитых стран - около 10%

Из разных стран европы она колеблится от 11% в Германии, до 20% в Литве. Помимо еды есть еще, бензин, ЖКХ, аренда, недвижиость - что также входит в ежемесячные расходы. Эт обудет значительно выше 30%.

Но в целом да, в абсолютном выражении свободных денег остается больше у Европейца.

Дежавю какое-то, по-моему Росатом тоже самое уже делал. Че-то не очень пошло из-за цены.

На самом деле, есть еще такое понятие как Configutation Change Management, где ты управляешь изменениями, в том числи и в каскадной моделе. Ты просто заносишь запрос на изменения (на любом этапе) в систему управления изменениями, а Configuration Change Team (разных уровней) её потом либо апрувит, либо отклоняет, это позвляет внести изменения на любом этапе в любой артифакт предущих этапов.

Просто придется менять дофига всего (скажем если вы находитесь на этапе Implementation, а поменять надо требования, то придется менять требования, дизайн, код), но для этого Configuration Change Team и существует, чтобы все риски и расходы по этому изменению определить и в случае его дороговизны - отклонить либо принять, если изменения незначительные.

Тогда 3 года окупаемость, при условии, что затраты на содержание 0 долларов за этот период.

Линукс выделяется, там дров на такое оборудование нет в принципе и никто их делать не собирается. Под винду есть все, под старую например, как вы и сказали. Поэтому можно поставить старую винду. А под линукс не, хоть какую версию ставьте

Производители всякого промышленного оборудования проходят мимо Linux. Попробуйте найти дрова для какого нить FF модема или HART модема MACTEK, например.

Если разная сигнатура, то и делайте разные методы с разными именами и отдельный интерфейс, в данном примере, это методы с одинаковой сигнатурой и предназначен для одной задачи - сохранить файл.

У вас не метод один, а вот интерфейс должен быть один, при этом реализация разная может быть для разных акторов. Причём тут dry не понял.

Да много кто, Steam, Google play, Касперский...

Обычно отдаю обратно, получаю деньги назад. Либо получаю поддержку и варианты решения, если проблема несложная.

1
23 ...

Information

Rating
2,952-nd
Location
Челябинск, Челябинская обл., Россия
Date of birth
Registered
Activity