Да, мы используем nuget.org/packages/Tp.Core.Functional повсеместно в наших продакшн проектах. Как перешли? Да, в принципе, никто и не был против. У нас в компании привествуется software craftsmanship движение, а maybe просто добавляют коду явность — я явно указываю, что ожидаю праметр с возможно отсутствующим значением или наоборот — мой метод может вернут пустое значение. И компилятор мне подскажет, где я пренебрегаю этим, выдав ошибку типов. Ошибка в компайл-тайм дешевле ошибки, пойманной в тестах в десятки раз и ошибки из продакшена в сотни — простая арифметика.
Ничем. Это же «Ненормальное программирование», просто забавное наблюдение, что ленивое вычисление (или, скорее, call-by-ref) — это тоже монада, эквивалетная maybe.
8 пункт — неправда. Запрос выполняется, если он возвращает скаляр(Count, Sum, First...). Даже если на нем вызвать foreach (то есть, выполнить GetEnumerator()) он будет выполнен так лениво, как только можно. То есть, такое выражение не выполнится сразу:
Схему передавать и не надо — это просто стандратный способ проверить целостность данных, то есть вместо громоздкого текстового описания моего API и тучи реализаций на разных языках, я могу просто предоставить одну схему. Отсутствие схемы — это не минус самого формата, это минус его инфраструктуры, и хорошо, что json schema уже, как минимум, internet draft.
Для дат есть замечательный ISO 8601, самый распротраненный формат данных после строк и чисел. Иметь его в стандрате передачи данных было бы очень приятно.
Если сборщик запускается в момент обработки дерева, все текущие объекты попадут в Gen1. Судя по графику, так и происходило — CMS поднимал весь сайт в память, в процессе памяти не хватало, запускался сборщик, и так несколько раз.
Ээ нет. Вы не сможете создать еще один экземпляр класса, реализующего паттерн синглтон. Просто потому что конструктор у него приватный. Плюс с другой стороны, клиенту синглтона абсолютно пофиг, синглтон он или нет — это просто объект нужного ему класса.
Синглтон сам по себе ни в чем не виноват. Все зло, которое приписывают синглтону, происходит от наличия глобальной переменной (или метода-геттера). Синглтон нужен только для определения единственности объекта, доступ к нему — на совести программиста. Никто не мешает создать синглтон и пропихивать его как зависимость, например, в конструкторы.
Если джуниор приходит на существующий проект, то задавать вопросы — его прямая работа. Нельзя нагуглить решения, которые используются внутри команды, нельзя слепо копировать нагугленные решения — потому что у джуниора нет «чутья», которое должно приобретаться с опытом.
IEnumerator стал Disposable после добавления yield return. Например:
using (var disposable = new SomeDisposable())
{
yield return 1;
yield return 2;
// some code
}
}
Когда мы закончим итерироваться по этому генертору (причем, мы же можем закончить даже не доходя до конца), нужно закрыть someDisposable. Поэтому компилятор вычисляет такие структуры и кладет их Dispose в Dispose() метод сгенеренного IEnumerator.
Не совсем так. Скала, насколько я помню, свои range хранит как объект и при par вполне может очень эффективно этот объект разбить, не итерируясь по всему range. Донетовский Range, считай, простой набор yield return.
Для дат есть замечательный ISO 8601, самый распротраненный формат данных после строк и чисел. Иметь его в стандрате передачи данных было бы очень приятно.
Когда мы закончим итерироваться по этому генертору (причем, мы же можем закончить даже не доходя до конца), нужно закрыть someDisposable. Поэтому компилятор вычисляет такие структуры и кладет их Dispose в Dispose() метод сгенеренного IEnumerator.