x
это бесспорно
x
но расширять её саму, оставляя мкутабельность - боль
x
поэтому нобежали с аггрегейтами
x
так понимаю
Vladislav
Ayrat
x
можешь!
x
Quod licet Iovi, non licet bovi.
Aleksandr
Ayrat
x
да не в том дело )
Ayrat
Я не использую эту функцию
Aleksandr
Нет-нет
Aleksandr
Я понял твой поинт
Ayrat
Это пример.
Aleksandr
Я все предыдущие сообщения прочитал
Aleksandr
Просто у меня вопрос к оптимизации функции sum
Ayrat
Пример, демонстрирующий использование мутабельности для получения тред сейф, супер пьюр функции
Ayrat
без рекурсий, фолдов, прокидывания стейтов, внутренних лупов и тейл колов
Ayrat
В коде я пользуюсь
|> Seq.sum, да
Aleksandr
Я слышал, что foreach в сишарпе вроде подстраивается под тип коллекции и оптимизируется в зависимрсти от того, имплиментирует ли она вдобавок еще и ICollection или IList или нет
Aleksandr
А вот делает ли это Seq.sum?
Aleksandr
Говорит ли # в сигнатуре о чем-то таком или нет?
Vladislav
Vladislav
Пока
Dr. Friedrich
Dr. Friedrich
foreach в C# (думаю, в F# тоже) действительно использует знание о типе коллекции. Но на ICollection и IList там никаких оптимизаций нету :)
Dr. Friedrich
Есть зависимость аллокаций от типа энумератора, предоставляемого коллекцией (структура или класс). Ну и на массивах всё ещё лучше работает, потому что они — особенные и под них много чего руками доделано.
Dr. Friedrich
Dr. Friedrich
https://msdn.microsoft.com/en-us/visualfsharpdocs/conceptual/seq.sum%5B%5Et%5D-function-%5Bfsharp%5D
Dr. Friedrich
Но таки получается, что это инлайн?
Dr. Friedrich
Значит, очень хорошо будет использовать особенности переданного типа.
Hog
https://twitter.com/sforkmann/status/1087599607671123969?s=12
Ayrat
Но поинт нормальный, да
Ayrat
C#ерам сказали, если не хотите боли, вот вам лок файл для ПАКЕТА.
- WTF is Paket?
Hog
Можно ж прекомпайленные заливать. Не?
Ayrat
Hog
В ажурных фциях рантайм прибит гвоздиками. Версии вот это всё
Ayrat
Azure Functions - это серверлесс технология от MS
развивалась в начале как in-the-process, same-app-domain подгрузка твоего кода в некий рантайм.
Для упрощения и обмазывания сахарочком, там в аппдомен уже подгружалось примерно ТЫЩА либ.
Ну потому что там уже рантайм должен был работать с очередями (Azure.Storage.SDK), с боди хттп запросов (привет Newtonsoft.JSON) и прочей ебаниной, полный список - сотня либ
Ayrat
и если ты писал свою функцию, тебе надо было знать какие версии либ в рантайме загружаются, т.к. биндинг редирект не завезли (твои либы просто копировались в магическую папку и все твои app.config игнорились нахуй)
Ayrat
Это было хождение по минному полю от ManifestMismatch Expcetion до MethodNotFoundException
Hog
Ayrat
пока MS не пришли к Форкману (автору Paket) и не попросили его помочь с ужасом в транзитивных зависимостях
Ayrat
Форкман добрая душа сделал в paket отдельную фичу - external lock file
Ayrat
которая работает так - ты можешь в своё dependency файле потаргетить внешний лок файл с зависимостями, который будет работать как базовый. Сверху накрутить своих хотелок. Пакет попытается составить граф на основе внешнего лок файла и скажет тебе что ты мудак и ничего не собирается ДО того как ты загрузишь всё в рантайм
Ayrat
Фича охуенная, MS внедрили пакет в Azure Functions v1 и выложили лок файл как рекомендуемый способ на страдать 24/7
Ayrat
В ажурных функциях V2 они накостыляли как боги чтобы их либы которые пользует рантайм не конфликтовали с твоими, но при этом JObect возвращаемый рантаймом нормально кастился без ексепшнов в JObject юзера
Ayrat
поэтому там пакет почти не нужен
Vladislav
Ayrat
https://github.com/Azure/azure-functions-host/issues/2446
Dr. Friedrich
Ayrat
Vladislav
почему функции тащат рантайм а не дают тебе паблишить под них?
Ayrat
Vladislav
странная архитектура
Vladislav
ну типо в условиях неткора устроили как полный фреймворк
Dr. Friedrich
Vladislav
аля вот 4.5 - ебитесь
Vladislav
)
Ayrat
Ayrat
Azure Functions V2 на неткоре
Ayrat
у них щас планы сделать как в aws Lambda - вывести код юзера out-of-process через grpc
Ayrat
у них даже протокол уже есть
Ayrat
на grpc :)
Ayrat
Dr. Friedrich
Vladislav
Dr. Friedrich
ball of mud?
Вообще bill of materials, но твой вариант мне нравится больше.
Ayrat
Vladislav
Dr. Friedrich
а твоя фраза откуда?
У Maven'а есть такое понятие — это отдельный файлик, в котором версии доступных зависимостей описаны. Если ты потом в приложение включаешь зависимость, то она включается именно той версии, которая указана в BOM.
Что-то типа external lock file с запасом, так скажем. Т.е. в нём перечислены все возможные зависимости, а ты себе берёшь только какие надо.
Ayrat
кстати, вот лок файл для V1
https://github.com/Azure/azure-functions-host/blob/v1.x/src/azurefunctions-v1-paket.lock
зацените кол-во говна
Dr. Friedrich
Ayrat
и если вы подгрузите какой-нибудь я хз Posgtre Driver ну чтобы пообщаться с БДшечкой из своей функции, а он случайно подгрузит транзитивно какой-нибудь Microsoft.AspNetCore.Http.Abstractions, то тобi pizda в рантайме, т.к. всё запустится, но наебнётся уже в процессе
Ayrat
потому что в рантайме уже загружен Microsoft.AspNetCore.Http.Abstractions (1.0.2)