По-моему этой фразой вы перечеркнули все свои доводы ранее.
Незаменимых людей нет, бывают лишь мудаки-работодатели которые экономят на заменах и сношают своих работников pager-duty обязанностями 24x7
На хабре есть компания (она ещё любит мониторить своих сотрудников чуть ли не поминутно с фотками вебки), бодишоп для удалёнщиков, там зп около этой суммы. Есть меньше, есть больше.
Инженеры в IT есть, но сам программист это проф образование — пара лет вечерки и ты программист (или токарь, или шофёр, по желанию).
Инженер же это образование ВУЗа, ну там структуры данных, архитектуры, матаны, алгоритмы, то есть именно та база которая позволит разбираться в библиотечных проблемах, а не просто "пишу на C#".
Как "батя", который, получив инженерное образование в ВУЗе (теплотехнику, физику, сопромат, электротехнику, детмаш и т.д.), может не только гаечным ключом работать, но и в смежных инженерных делах не быть профаном. Автомобиль он может и не задизайнит сам, с нуля, но разобраться в проблемах вполне по силам.
Поэтому если в .Net FW решили внедрить TPL (Task — это фича фреймворка, а не языка), то это значит что нужно привести синтаксис языка под эту новую функциональность, как это сделали в C#
Поддержку Task конечно же ввели сразу же, добавив Async.AwaitTask и Async.StartAsTask. Я вот лично не видел чтобы авторы C# вводили интероп с Async :)
Если пользоваться этими методами неудобно (можно понять), то вам никто не мешает расширить базовый AsyncBuilder для работы с тасками:
Через строчку писать |> ignore — это не то, что хотелось бы от современного языка.
Можете выключить этот варнинг навсегда через: #nowarn "0020"
и говнокодить как на C# сколько влезет.
разработчики языка решили, что просто сменить язык — это недостаточно круто, и поэтому они отрешились от привычного для c# разработчиков linq.
open System.Linq
[1..10].Select(fun x -> x + 1)
.Where(fun x -> x % 2 = 0)
.ToArray()
Но если что, то Дон Сайм (автор языка), является мейнтейнером либы FSharp.Core.Fluent.
Она даёт доступ к функциям "через точку" для List, Array, Array2D, Array3D, Seq, Event и Observable. Так что там ещё авторы языка сделали плохого?)
Ну и конечно же, LINQ появился позже чем этот синтаксис:
[1..10]
|> Seq.map (fun x -> x + 1)
|> Seq.filter (fun x -> x % 2 = 0)
Поэтому "отрешиться" от LINQ авторы F# не могли в принципе.
Ещё авторы языка решили, что привычные для c# разработчиков Task — это нечто чуждое для такого прекрасного функционального языка, поэтому все вызовы к асинхронным функциями из .Net фреймворка должны сопровождаться |> Async.AwaitTask вместо привычного лаконичного ключевого слова await.
Авторы языка запилили async/await в F# за 2 года до появления async/await в C# :)
Поэтому и Async<T>, и асинхронные методы в стримах и HttpRequestMessage появились сильно раньше. Авторы языка C# решили что они хотят свой Async<T> и назвали его Task<T>.
Вы постоянно путаете причину и следствие.
Почти все фичи в начале появлялись в F#, поэтому авторы языка просто не могли скопировать дизайн из C#. Дизайна просто не было!
внезапно, hackage.haskell.org/packages/search?terms=azure (8 items). Большинство, правда, давно не обновлялось, но по-моему тут уже эффект положительной обратной связи: если бы на хаскеле писало больше народу, то библиотеки к ажуре обновлялись бы почаще.
Ясно же что этого недостаточно. там только способов аутентификации в облаке с десяток. Managed ID, AD, Azure AD, OAuth, ApiKey и пр… Видов сервисов несколько сотен, а тут всего 8 либ.
Очевидно что для работы с Ажуром на Хаскеле мне придётся велосипедить не один месяц.
Ну для начала вам никто не запрещает делать классы в ФП :)
Но если хочется чистоты и фпшности (в описанном случае смысла вижу мало упарываться), то делаем одну функцию с параметром dbClient, которая возвращает рекорд (тупль) из 3х функций (create/read/delete), которые работают с этой db. Во все три уже будет вшит dbClient.
Ой, а для тех, кто в танке — «точечка нет» за пределы винды вышла в промышленных масштабах?
Я для винды уже пару лет ничего не писал, всё кросс платформенное.
Даже не задумывался о "пределах винды", оно просто уже давно по умолчанию такое, вне виндовое.
Ну так насуёт. Библиотек действительно мало, пакетного менеджера нет (ipkg несерьёзно), баги в тайпчекере есть и немало.
Я слишком общо сказал про "по всем статьям". Я имел в виду только систему типов и всякие мозговзрывные вещи. Как хасель умеет в монад трансформер по сравнению с F#, так и Идрис умеет много чего по сравнению с Хаскелем.
Интереса ради, а в какой области вы занимаетесь? А то я бы не сказал, что я испытываю какой-то недостаток библиотек в хаскеле. Даже наоборот, хочешь что-то этакое запилить — а оно уже, блин, сделано :(
облачные микросервисы, ETL.
На прошлой работе Azure, на новой тоже Azure.
Фшарповые Асинки появились на пару лет раньше тасков. Так что это скорее авторы сишарпа не смогли списать домашку и запороли дизайн Тасков
Хе-хе. Границы ренжей в сишарпе 8 имеют разную инклюзивность.
Есть хороший выпуск намберфила по этой же теме
https://youtu.be/AxJubaijQbI
Почему тогда ДЕВ, а не РАЗР?
Что за придумка с ПРОМом?
По-моему этой фразой вы перечеркнули все свои доводы ранее.
Незаменимых людей нет, бывают лишь мудаки-работодатели которые экономят на заменах и сношают своих работников pager-duty обязанностями 24x7
На хабре есть компания (она ещё любит мониторить своих сотрудников чуть ли не поминутно с фотками вебки), бодишоп для удалёнщиков, там зп около этой суммы. Есть меньше, есть больше.
Превосходно, просто превосходно.
Инженеры в IT есть, но сам программист это проф образование — пара лет вечерки и ты программист (или токарь, или шофёр, по желанию).
Инженер же это образование ВУЗа, ну там структуры данных, архитектуры, матаны, алгоритмы, то есть именно та база которая позволит разбираться в библиотечных проблемах, а не просто "пишу на C#".
Как "батя", который, получив инженерное образование в ВУЗе (теплотехнику, физику, сопромат, электротехнику, детмаш и т.д.), может не только гаечным ключом работать, но и в смежных инженерных делах не быть профаном. Автомобиль он может и не задизайнит сам, с нуля, но разобраться в проблемах вполне по силам.
В тегах вроде так и написано :)
Поддержку Task конечно же ввели сразу же, добавив Async.AwaitTask и Async.StartAsTask. Я вот лично не видел чтобы авторы C# вводили интероп с Async :)
Если пользоваться этими методами неудобно (можно понять), то вам никто не мешает расширить базовый AsyncBuilder для работы с тасками:

Или взять taskBuilder, который используется в Giraffe (кстати второй после Zebra Fullstack фреймворк на дотнете по скорости)
Можете выключить этот варнинг навсегда через:
#nowarn "0020"
и говнокодить как на C# сколько влезет.
Но если что, то Дон Сайм (автор языка), является мейнтейнером либы FSharp.Core.Fluent.
Она даёт доступ к функциям "через точку" для List, Array, Array2D, Array3D, Seq, Event и Observable. Так что там ещё авторы языка сделали плохого?)
Ну и конечно же, LINQ появился позже чем этот синтаксис:
Поэтому "отрешиться" от LINQ авторы F# не могли в принципе.
Авторы языка запилили async/await в F# за 2 года до появления async/await в C# :)
Поэтому и
Async<T>
, и асинхронные методы в стримах и HttpRequestMessage появились сильно раньше. Авторы языка C# решили что они хотят свойAsync<T>
и назвали егоTask<T>
.Вы постоянно путаете причину и следствие.
Почти все фичи в начале появлялись в F#, поэтому авторы языка просто не могли скопировать дизайн из C#. Дизайна просто не было!
del
Ну да, ну да.
А LISP как интересно существовал? На нём писались и пишутся (на диалектах) очень сложные программы.
Можно начать отсюда:
https://fsharpforfunandprofit.com/why-use-fsharp/
По мнению подавляющего большинства F#истов, лучший сайт для обучения
Никакой заточки, просто перечислил что знаю. У F# те же технологии.
Но указано было F#/C# Developer, да.
Ну для начала, в F# есть интерфейсы и DI :)
Но чаще всего можно обойтись partial apply.
Марк Симан (автор Dependency Injection in .NET) рассказал об этом на прошлом DotNext:
https://www.youtube.com/watch?v=xG5qP5AWQws
3050 пакетов
https://www.nuget.org/packages?q=azure
1109 пакетов
https://www.nuget.org/packages?q=aws
Экосистема всё ж не пустой звук.
Ясно же что этого недостаточно. там только способов аутентификации в облаке с десяток. Managed ID, AD, Azure AD, OAuth, ApiKey и пр… Видов сервисов несколько сотен, а тут всего 8 либ.
Очевидно что для работы с Ажуром на Хаскеле мне придётся велосипедить не один месяц.
Ну для начала вам никто не запрещает делать классы в ФП :)
Но если хочется чистоты и фпшности (в описанном случае смысла вижу мало упарываться), то делаем одну функцию с параметром dbClient, которая возвращает рекорд (тупль) из 3х функций (create/read/delete), которые работают с этой db. Во все три уже будет вшит dbClient.
Я бы так не делал.
Я для винды уже пару лет ничего не писал, всё кросс платформенное.
Даже не задумывался о "пределах винды", оно просто уже давно по умолчанию такое, вне виндовое.
Я слишком общо сказал про "по всем статьям". Я имел в виду только систему типов и всякие мозговзрывные вещи. Как хасель умеет в монад трансформер по сравнению с F#, так и Идрис умеет много чего по сравнению с Хаскелем.
облачные микросервисы, ETL.
На прошлой работе Azure, на новой тоже Azure.
У F# фора — все SDK для Azure уже написаны)