Здравствуйте, merge, Вы писали:
M>Зарегался тут на джетбрейновскую конфу и один из топиков звучит
M>"Why Every Day as a Developer Would Be Easier with F#"
M>дискас
Судя по числу вакансий на hh.ru не очень.
Rust или Go из новых языков учить, мне кажется выгоднее.
Здравствуйте, BlackEric, Вы писали:
BE>Судя по числу вакансий на hh.ru не очень.
Немного странный ответ на тезис, содержащий вопрос "почему"...
BE>Rust или Go из новых языков учить, мне кажется выгоднее.
И это тоже не вписывается в тему дискуссии
Здравствуйте, merge, Вы писали:
M>Зарегался тут на джетбрейновскую конфу и один из топиков звучит
M>"Why Every Day as a Developer Would Be Easier with F#"
M>дискас
Жив, более того, очень активно развивается. Т.к. главный архитектор Дон Сайм до сих пор не потерял к нему интереса и даже
утверждает, судя по темам выступлений, что он "🧡 F#".
И жив он потому что позволяет красиво и кратко выражать многие абстракции, если сравнивать с C#.
Ну и по производительности(исключая старт приложений) он уделывает на сложных вещах его.
А вот такое, наверно, вообще никогда не появится в C#. https://github.com/rspeele/Rezoom.SQL
Хотя с появлением Source Generators быть может. По сути для вебсервисов было бы приятней его юзать.
Вообще плюшка в строгости, т.е. меньшей неоднозначности при работе с асихронным кодом, явные преобразования и т.п.
Другой вопрос решается ли в F# "проблема выражений"? Не уверен. Хотя вроде ка вычислительные выражения позволяют что-то делать более чисто.
Здравствуйте, varenikAA, Вы писали: AA>А вот такое, наверно, вообще никогда не появится в C#. https://github.com/rspeele/Rezoom.SQL
Ты имеешь в виду автовывод типов из миграционных скриптов?
Потому что всё остальное там — слабое подобие Linq
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, varenikAA, Вы писали:
AA>И жив он потому что позволяет красиво и кратко выражать многие абстракции, если сравнивать с C#.
Нет. Жив он потому что жив автор и не потерял интерес к языку.
AA>Ну и по производительности(исключая старт приложений) он уделывает на сложных вещах его.
Это чушь полнейшая. С точки зрения производительности они принципиально одинаковые, так как в итоге компилируются в MSIL. А конкретная производительность зависит от применяемого стиля и алгоритмов. ФП на F# ни разу не способствует росту производительности, так как в отличии от какого-нибудь Хаскеля имеющего хитрые оптимизации для ФП F# (как и C#) генерирует классы для замыканий и не преобразует последовательность фукнций высшего порядка в эквивалентный код без замыканий.
AA>А вот такое, наверно, вообще никогда не появится в C#. https://github.com/rspeele/Rezoom.SQL
Именно такое когда-нибудь появится. Но не скоро, так как МС очень медленно переваривает идеи. Причем "это" есть не только в F#. В Nemerle "это" есть с 2003-года.
AA>Хотя с появлением Source Generators быть может. По сути для вебсервисов было бы приятней его юзать.
Ну, вот лет через 10 он и дорастет до того, что сейчас в F# есть. А до Немерловых возможностей еще лет через 10 после того (т.е. через 20). В остальном же современный шарп по возможностям с F# почти сравнялся.
AA>Вообще плюшка в строгости, т.е. меньшей неоднозначности при работе с асихронным кодом, явные преобразования и т.п.
"строгость" это как раз недостаток системы вывода типов в F#.
AA>Другой вопрос решается ли в F# "проблема выражений"? Не уверен. Хотя вроде ка вычислительные выражения позволяют что-то делать более чисто.
Не решается. Но это на практике проблем не создает.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>Ну, вот лет через 10 он и дорастет до того, что сейчас в F# есть. А до Немерловых возможностей еще лет через 10 после того (т.е. через 20). В остальном же современный шарп по возможностям с F# почти сравнялся.
Недостаточно просто наличие или отсутствие фичей у языков, важно учитывать, какой код на языке является идеоматичным, то есть как фактически язык используется. С этой точки зрения, несмотря на то, что в C# есть много функциональных фичей, это ему мало что дает, так как 99% кода на C# — это императивный код с крохотными функциональными вставками, которые по сути почти ничего не меняют. А у F# — всё почему-то наоборот.
Здравствуйте, Sinclair, Вы писали:
S>Ты имеешь в виду автовывод типов из миграционных скриптов? S>Потому что всё остальное там — слабое подобие Linq
Он имеет в виду провадеры-типо, ака метапрограммирование. Эта хрень лезет в СУБД вовремя работы иде или компиляции, читает из нее метаинформацию, и на лету формирует по ней типы. А Linq это не более чем встроенная фича языка. К тому же на фиг на практике не нужная (речь о синтаксисе).
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, mrTwister, Вы писали:
T>Недостаточно просто наличие или отсутствие фичей у языков, важно учитывать, какой код на языке является идеоматичным, то есть как фактически язык используется.
Нет. Это проблема не языка, а программиста. Возможность писать в том или ином стиле определяется именно фичами языка. Если язык обладает достаточным количеством функциональных фич, на нем можно писать в функциональном стиле. Что лично я и делаю. Просто C# до недавнего времени не обладал необходимым набором, что и делало применение в нем ФП ограниченным.
T>С этой точки зрения, несмотря на то, что в C# есть много функциональных фичей, это ему мало что дает, так как 99% кода на C# — это императивный код с крохотными функциональными вставками, которые по сути почти ничего не меняют. А у F# — всё почему-то наоборот.
Это только точка зрения. Более того сама догма, что нужно придерживаться одного стиля — это догма. ФП не во всех случаях хорош и полезен. Иногда нужна производительность. Иногда ты решаешь императивные задачи (например, ГУИ). Язык поддерживающий разные стили позволяет выбрать подходящий стиль для части задачи.
А главный недостаток C# в том, что он развивался в сторону поддержки ФП эволюционно. Хейльсберг ничего не понимал в ФП когда создавал C#. Плюс они глупо криативили, когда вставляли фичи. В итоге некоторые фичи получились не так удобны. Но, в целом, приемлемо.
На сегодня C# уступает F# только в поддержке метапрограммирования, так как F# поддерживает дата-провайдеры и зачатки квази-цитирования.
Можно, конечно, еще притянуть за уши каринг и бесскобочных синтаксис, но на практике это ничего не дает. Больше строк не проблема, если строки не значащие (скобки). А каринг спокойно заменяется вложенными локальными функциями. Да и вообще не так то уж часто нужен.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
VD>Нет. Это проблема не языка, а программиста. Возможность писать в том или ином стиле определяется именно фичами языка. Если язык обладает достаточным количеством функциональных фич, на нем можно писать в функциональном стиле. Что лично я и делаю.
Одних фич мало, С++ тоже давно всё умеет, толку то. Фичи языка существуют не в вакууме. Кроме них есть существующие синьор программисты, которые пишут, как диды писали и которые учат мидлов. Есть мидлы, которых научили синьоры и которые учат джунов. Есть существующие книжки и курсы, которые в случае C# как правило учат императивщине. Есть существующая гигантская кодовая база по аналогии с которой пишут новый код и с которой интегрируются. Есть стандартная библиотека, ориентированная на императивный стиль.
VD>Просто C# до недавнего времени не обладал необходимым набором, что и делало применение в нем ФП ограниченным.
Да и сейчас не обладает, но об этом ниже.
VD>Это только точка зрения. Более того сама догма, что нужно придерживаться одного стиля — это догма. ФП не во всех случаях хорош и полезен. Иногда нужна производительность. Иногда ты решаешь императивные задачи (например, ГУИ). Язык поддерживающий разные стили позволяет выбрать подходящий стиль для части задачи.
Проблема разных стилей в том, что они как правило превращают кодовую базу в помойку, особенно если над ней работают много программистов. Один старообрядец начинает делает развесистые иерархии наследования, второй, начитавшись хаскеля, в жалких потугах начинает лепить монады, третий прочитал книжку про паттерны и вот у него теперь везде визиторы с бриджами и стратегиями, а четвертый проперся от акторов. В результате код — помойка потому что выбранный стиль выбирается не под задачу, а просто в зависимости от того, какому программисту задача досталась. Когда все пишут в одном стиле получается гораздо лучше и пример Go это прекрасно демонстрирует.
VD>На сегодня C# уступает F# только в поддержке метапрограммирования, так как F# поддерживает дата-провайдеры и зачатки квази-цитирования.
VD>Можно, конечно, еще притянуть за уши каринг и бесскобочных синтаксис, но на практике это ничего не дает. Больше строк не проблема, если строки не значащие (скобки). А каринг спокойно заменяется вложенными локальными функциями. Да и вообще не так то уж часто нужен.
Метапрограммирование — это баловство и не нужно. В C# отсутствуют гараздо более важные фичи, а именно: discriminated unions (а вместе с ними и поддержка алгебраических типов данных), поддержка хвостовой рекурсии и, самое главное, immutability by default