All streams
Search
Write a publication
Pull to refresh
12
0
Андрей Райц @DrReiz

Архитектор ИИ

Send message
Одна из мотиваций автора — это получение качественной обратной связи. Аудитория на Habr-е и на GT — разная. Если статья глубокого уровня публикуется на GT, то автор не получает той обратной связи, на которую расчитывает и которую мог бы получить при публикации на Habr-е.
Тяжелее != Сложнее, Трудность != Сложность.
Не достаточно ограничений «переход только вперёд, нельзя заходить в блок».
if (cond)
  goto x;

T a = GetA();

x:
  Display(a);


Чему равно a при срабатывании cond? И к каким проблемам в runtime-е это приведет?
Почему coalesce ухудшает читабельность? По семантике — это замена одного Null Pattern-а на другой.
foreach (var item in GetItems().Or_Empty())
Семантика исходная с небольшим изменением: было T1 -> T2, стало T1 | null -> T2 | null.
Зачем coalescing, если достаточно расширить результирующий тип до: TResult | null?
Статистика из опредения паттерна Null Object. Null object при вызовах над ним — или возвращает Null Object, или выполняет ничего.
Если обычным кодом назвать код с '?.', то будет выполняться требование «работаю с объектом как обычно и получаю разумные значения».
Значение null совместно с operator-ом '?.' дает поведение: возврат null или выполнение ничего. В 99% задач достаточно такого поведения для паттерна Null Object.
В чем преимущество создания отдельного объекта под паттерн Null Object? Почему не стоит под паттерн NullObject использовать значение null?
Резюмирую.

Минусы исключений:
— хуже производительность
— отсутствует проверка уровня компиляции, что исключения формируются определенного вида и что они все преобразуются в адекватное сообщение для пользователя
— отсутствует нативная конструкция для выполнения независимых проверок с собиранием ошибок в одну агрегированную

Плюсы исключений:
— нативный синтаксис
— согласованность с другими конструкциями языка
— нативная поддержка компилятором
— нативная поддержка framework-ом и сторонними библиотеками
Исключение — это та же монада, но в профиль. Со следующей семантикой: (Func f, IEnumerable<Union<Result, Exception>> args) -> Union<Result, Exception>. var exception = args.FirstOrDefault(arg => arg.IsException)?.Exception; if (exception != null) return exception; return f(args.Select(arg => arg.Result));
Чем плохи исключения для ошибок?
Null reference затруднительно отлаживать в mutable-окружении. В таком окружении бывает затруднительно установить место появления null-а. В immutable-коде такой проблемы нет из-за прозрачности потоков данных.
Зачем необходима борьба с null-ом? Если достаточно написать: Console.WriteLine(customer?.Name).
Тест на проверку, что приложение при длительном запуске не ест бесконтрольно память и диск — это автотест или регрессионный тест?
У современного человека проблема другая — калорий потребляется больше, чем расходуется. Соответственно, для человека рекомендация обратная — двигаться рывками!
Бесконечно генерируемый список используется в переборных алгоритмах: bruteforce пароля, выбор лучшего хода в игре, поиск лекарства от рака и т.д. При генерации используется расширяющийся список комбинаций. На первом этапе — все комбинации из одного элемента, на втором — комбинации из двух элементов и т.д.
Концепция «бесконечные интервалов» удобна для отделения генераторов от самого алгоритма перебора (цикла). Концепция «бесконечных интервалов» удобна при комбинировании генераторов.
Кейс: получить первых N-штук, соответствующих условию F, из бесконечного генерируемого списка.
> Поскольку потоки ввода в принципе границ не имеют, то не существует знакового целого, достаточно большого для них

Достаточно int64. При считывание символа на такт — его хватит на время больше существования вселенной.
Это решается спец-горловиной; выезжающей штангой; спецзамком, сигнализирущем о защелкивании и точной остановкой напротив штанги.

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Registered
Activity