All streams
Search
Write a publication
Pull to refresh
17
0.1

User

Send message

Слона то и не приметил. ;(
Конечно полезно знать как создать с нуля.

Можно упростить жизнь используя https://scapy.net/

Упомянут генератор списка но не упомянут простой генератор через круглые скобки, который будет в большинстве случаев эффективнее.
А также создание множества (set) и словаря (dict)

“ Можно сказать, что подобные изменения кода не исправляют ошибки”
Как раз исправляют:)
Анализатор VS 16.7 наконец научился так же отслеживать case без break.
При запуске обнаружилось довольно достаточно мест с забытым fallthrough, но самое главное, что нашлась ошибка в коде добавленным буквально день назад.
Хотя казалось бы прошёл все тесты и ревью.


Так что статический анализ это суровая необходимость если есть желание работать продуктивно.

Начали с удалением оскорбительных выражений. Посмотрим к чему придут.
https://m.habr.com/ru/news/t/431900/

А само название «git” разве не оскорбительное ?;)

Хочу отметить «разработчики ничего не хотят знать».
Прошёл на собственном опыте.
Имеются классные ребята, все как на подбор, но как есть работа в глобальном масштабе да ещё и непосредственно для бизнеса и денег, так начинают отнекиваться и искать как бы сделать только своё и не вникать в работу других и понимать систему в целом.


Не могу сказать за всех, но у нас WSL а тем более WSL2 покрыл всю потребность в Линуксе на стороне клиента.
Итого у кого был Линукс основной системой либо ушли на Мак либо на Виндоуз.

Попробую помочь.
Я работаю в антивирусной компании и вижу, что мы отмечаем как вирус.
Если есть возможность получить все версии Fresh IDE, то мы их добавим в проверочный набор и научимся диагностировать правильно.

В Nemerle как раз Linq реализован в виде отлётного макро-расширения, и любой может добавить свой синтаксис.

Не должны, но не хочется иметь пессимизацию на ровном месте.
На сегодня, увы, 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
int a[10];
unsigned char x = 10 + std::size(a);
std::array<int, 4> a{1, 2, 3, 4};

C++17 позволяет проще:
std::array a{1, 2, 3, 4};


См. en.cppreference.com/w/cpp/language/class_template_argument_deduction

К сожалению, std::array не полностью аналогичен массиву C.
Размер std::array может быть больше аналогичного массива C, потому как это структура и можем иметь дополнительное выравнивание.

Ещё есть синтаксис для неизменяемых туплов: readonly [string, number]

mariusschulz.com/blog/read-only-array-and-tuple-types-in-typescript
И тут на помощь приходит std::addressof :D

Можно защититься через enum:
enum A { MyConstExprValue = 5} ;

auto x = &(A::MyConstExprValue);  // нельзя
auto x = std::addressof(A::MyConstExprValue);  // и так нельзя
В большинстве таких случаях удобней использовать внешнюю генерацию кода, а не сражаться с макросами 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") // Плохой компилятор, не хочу ошибку компиляции  
    }
}
Увы, да. К сожалению бэкэнд компилятора сильно привязан к .NET Framework, а переписывать его слишком большой объём работы.

Information

Rating
2,983-rd
Registered
Activity