Упомянут генератор списка но не упомянут простой генератор через круглые скобки, который будет в большинстве случаев эффективнее.
А также создание множества (set) и словаря (dict)
“ Можно сказать, что подобные изменения кода не исправляют ошибки”
Как раз исправляют:)
Анализатор VS 16.7 наконец научился так же отслеживать case без break.
При запуске обнаружилось довольно достаточно мест с забытым fallthrough, но самое главное, что нашлась ошибка в коде добавленным буквально день назад.
Хотя казалось бы прошёл все тесты и ревью.
Так что статический анализ это суровая необходимость если есть желание работать продуктивно.
Хочу отметить «разработчики ничего не хотят знать».
Прошёл на собственном опыте.
Имеются классные ребята, все как на подбор, но как есть работа в глобальном масштабе да ещё и непосредственно для бизнеса и денег, так начинают отнекиваться и искать как бы сделать только своё и не вникать в работу других и понимать систему в целом.
Не могу сказать за всех, но у нас WSL а тем более WSL2 покрыл всю потребность в Линуксе на стороне клиента.
Итого у кого был Линукс основной системой либо ушли на Мак либо на Виндоуз.
Попробую помочь.
Я работаю в антивирусной компании и вижу, что мы отмечаем как вирус.
Если есть возможность получить все версии Fresh IDE, то мы их добавим в проверочный набор и научимся диагностировать правильно.
На сегодня, увы, std::size не является полной заменой _countof в MSVC.
Компилятор MSVC не умеет заглядывать внутрь constexpr функций и подставлять значение.
Поэтому тут компилятор не видит проблемы
int a[10];
unsigned char x = 10 + (sizeof(a) / sizeof(a[0]));
// и даже так
constexpr size_t a_number_of_elements = sizeof(a) / sizeof(a[0]);
unsigned char y = 10 + a_number_of_elements
А здесь видит уменьшение размера size_t => unsigned char
К сожалению, std::array не полностью аналогичен массиву C.
Размер std::array может быть больше аналогичного массива C, потому как это структура и можем иметь дополнительное выравнивание.
github.com/gcanti/io-ts добавит вам валидацию данных и статические типы при успешной валидации.
Вместо any нужно использовать unknown и тогда без проверок не получится использовать объект неправильно.
В современных языках динамическая типизация или статическая определяется исключительно разработчиком.
TypeScript:
// Динамика это круто
function f(a, b) {
// Будь что будет
return a * b;
}
f(1, "abc") // Ну и что, что получаем NaN, зато не надо писать типы. Красота !
// Укажу динамический тип. Динамика это круто
function g(a: any, b: any): any {
// Будь что будет
return a * b;
}
// Статика это тоже круто
function h(a: number, b: number): number {
// Умножаем числа
return a * b;
}
h(1, "abc") // Плохой компилятор, не хочу ошибку компиляции
C#:
public class Program
{
// Динамика это круто
public static dynamic g(dynamic a, dynamic b) {
// Будь что будет
return a * b;
}
// Статика это тоже круто
public static int h(int a, int b) {
// Умножаем числа
return a * b;
}
public static void Main()
{
g(1, "abc"); // Кидает исключение, ерунда. Зато принимает любые типы
h(1, "abc") // Плохой компилятор, не хочу ошибку компиляции
}
}
Слона то и не приметил. ;(
Конечно полезно знать как создать с нуля.
Можно упростить жизнь используя https://scapy.net/
Советую почитать ещё тут: http://sergeyteplyakov.blogspot.com/2014/08/single-responsibility-principle.html
Упомянут генератор списка но не упомянут простой генератор через круглые скобки, который будет в большинстве случаев эффективнее.
А также создание множества (set) и словаря (dict)
“ Можно сказать, что подобные изменения кода не исправляют ошибки”
Как раз исправляют:)
Анализатор VS 16.7 наконец научился так же отслеживать case без break.
При запуске обнаружилось довольно достаточно мест с забытым fallthrough, но самое главное, что нашлась ошибка в коде добавленным буквально день назад.
Хотя казалось бы прошёл все тесты и ревью.
Так что статический анализ это суровая необходимость если есть желание работать продуктивно.
https://github.com/dotnet/csharplang/issues/116
Начали с удалением оскорбительных выражений. Посмотрим к чему придут.
https://m.habr.com/ru/news/t/431900/
А само название «git” разве не оскорбительное ?;)
Хочу отметить «разработчики ничего не хотят знать».
Прошёл на собственном опыте.
Имеются классные ребята, все как на подбор, но как есть работа в глобальном масштабе да ещё и непосредственно для бизнеса и денег, так начинают отнекиваться и искать как бы сделать только своё и не вникать в работу других и понимать систему в целом.
Не могу сказать за всех, но у нас WSL а тем более WSL2 покрыл всю потребность в Линуксе на стороне клиента.
Итого у кого был Линукс основной системой либо ушли на Мак либо на Виндоуз.
Попробую помочь.
Я работаю в антивирусной компании и вижу, что мы отмечаем как вирус.
Если есть возможность получить все версии Fresh IDE, то мы их добавим в проверочный набор и научимся диагностировать правильно.
В Nemerle как раз Linq реализован в виде отлётного макро-расширения, и любой может добавить свой синтаксис.
Компилятор MSVC не умеет заглядывать внутрь constexpr функций и подставлять значение.
Поэтому тут компилятор не видит проблемы
А здесь видит уменьшение размера size_t => unsigned char
C++17 позволяет проще:
См. en.cppreference.com/w/cpp/language/class_template_argument_deduction
К сожалению, std::array не полностью аналогичен массиву C.
Размер std::array может быть больше аналогичного массива C, потому как это структура и можем иметь дополнительное выравнивание.
mariusschulz.com/blog/read-only-array-and-tuple-types-in-typescript
Можно защититься через enum:
Вместо any нужно использовать unknown и тогда без проверок не получится использовать объект неправильно.
TypeScript:
C#: