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