Dmitry
@vshapenko а насколько часто подобные щедрости на вакансии?
Vasily
Vasily
Hog
Dmitry
на всякий случай уточню, что на новую работу :)
со старой еще в феврале ушел
Dmitry
но все равно спасибо
Igor
Dmitry
Hog
Диёр
Ну на совсем джуна мне зп не очень понравится, думаю
Диёр
А так пошёл бы по фану
Hog
Hog
я, вот, не умею :(
Диёр
Но тут не тот случай, думаю
Андрей
торговаться нужно :(
я тут загнал планку до неприличия, думал не возьмут так не возьмут, а они взяли и взяли сцуки. Выгораю терь уже год с цышарпистами :(
Hog
Vladislav
Hog
я это так - для задержки выгорания :)
Vladislav
Vladislav
Я пытался
Vladislav
Оно все очень странное
Hog
Shub
x
Проверил
ну вот, разрушил все мои надежды
Bonart
x
Bonart
https://github.com/louthy/language-ext
Там товарищ слишком уж охаскелился - положил болт на правила именования и т.п. При этом любит пятиэтажные генерики с явным указанием типов-параметров
Анна
x
x
иногда это попросту невозможно
Bonart
x
Пример?
пожалуйста https://stackoverflow.com/questions/49446078/why-do-i-have-to-explicitly-specify-my-type-arguments-for-func-parameters/
x
это я полтора года назад возмущался )
x
This isn't a matter of the C# team being lazy... type inference is hugely complicated, and any change is really fraught with danger in terms of backward compatibility.
Bonart
Заверни Func в структуру с теми же параметрами.
x
Bonart
public void IndexableSumArrayBenchmark() => _array.AsIndexable().Sum(0.AsAdditive());
Bonart
Теперь смотрим на метод Sum :)
Bonart
public static Additive<T, TSummator> Sum<T, TSummator, TIndexator>(
this Indexable<T, int, TIndexator> indexable, Additive<T, TSummator> initial)
where TIndexator : IIndexable<T, int>
where TSummator : ISummator<T>
{
var result = initial;
for (var i = 0; i < indexable.Count; i++)
result += indexable[i];
return result;
}
Bonart
Трехэтажный генерик видишь?
Bonart
А в вызове ни одного явного типа нет
Bonart
public static class ArrayIndexable
{
public static Indexable<T, int, ArrayIndexable<T>> AsIndexable<T>(this T[] array)
=> new Indexable<T, int, ArrayIndexable<T>>(new ArrayIndexable<T>(array));
}
x
чот нихера непонятно, надо будет вчитаться на досуге )
Bonart
public static class IntAdditive
{
public static Additive<int, IntSummator> AsAdditive(this int value) => Additive<int, IntSummator>.Wrap(value);
}
Bonart
Вывод типов в сишарпе чахоточный
x
в любом случае, если это решаемо - контрибуть!
Bonart
Делегаты он не выводит, а вот классы и структуры - пожалуйста
Bonart
Класс как обертка - ацтой, ибо аллокации
Vasily
Структуры это тоже память
Bonart
А вот в структуру надо заворачивать все, что само не выводится
Bonart
На этом весь расчет
x
ну так причём тут хаскелизм головного мозга, если в сишарпе так выводятся типы
x
Bonart
Bonart
Явные типы-параметры он просто недокрутил - это уже не хаскелизм, а скилла в шарпе не хватило
x
хм, он предлагает какие-то интерфейсы имплементить? а типы-параметры вообще чем мешают использованию?
Bonart
ВСЕБОЛЬШИЕБУКВЫ в типах-параметрах
x
я думаю надо меньше смотреть в код либы, ужасаясь, а просто её юзать )
Vladislav
Лучше не юзать
Vladislav
От кода ужасаться будешь
Bonart
Bonart
Сблевнуть не тянет? А это еще простейший кейс
Bonart
Оно при этом под массив еще и не оптимизировано ни хрена
x
x
public async Task<IReadOnlyCollection<DM.InvoiceAllocated>> GetInvoicesAllocatedAsync(int invoiceId)
x
вот обычный метод обычного репозитория на сишарпе
x
вижу трёхэтажный генерик, ничего сделать не могу
Bonart
а что тут плохо?
4 явных типа параметра при каждом вызове надо указывать. Теперь представь, что один из них а) генерик, б) трехэтажный, в) анонимный
Bonart
x
т.е. в вызове генерики нельзя, а в сигнатурах льзя
x
и когда я разбиваю большой метод на кучу подметодов, в каждом идиотически указывая эту трёхэтажную дуру - то это норм, приемлемо, идиоматичный сишарп