Comments 13
F# в продакшене реально где-то используется?
Смотрел на него лет восемь назад, тогда был очевидный хайп вокруг функционального программирования. Потом переключился на C#. Сейчас вижу что C# методично забирает всё что было интересного в F# — records, pattern matching, nullable reference types.
Похоже MS потерял к нему интерес.
У меня основной язык Erlang/OTP но он достаточно нишевый, F# интересен как функиональный язык для работы со всем .Net стеком,
Идея лёгких типов-обёрток это классно, но учить "мертвый язык" не охота...
Ответ двоякий. С одной стороны, в индустрии язык не задержался. Есть проекты в мире и у нас, но их немного. С другой: есть большое дружное сообщество. Которое, кстати, считает, что основная причина нишевости языка это недоработка MS. Сейчас над компилятором, как говорят, работают полтора человека.
С деньгами MS можно было посадить и пять человек, и двадцать. Так что это политическая, не очень понятная с точки зрения программистов, ситуация.
Впрочем, сам материал вполне полезен. Не в F#, так в OCaml, да даже в Rust вполне можно использовать алгебраические типы.
В расте есть идиамотический new type для таких задач и он не одновариантный энум, а одноместный тупл. Я зашёл посмотреть почему именно одноваритный энум т.к. у меня была претензия к такому подходу в расте и вижу что в ф шарпе это имеет прекрасное объяснение, а в расте все совсем не так приятно и удобно. + тот случай для чего у нас он используется совсем иной - версионирование на очень светлое будущее.
Видимо, мне надо уточнить, что когда я писал “полезность”, я имел в виду не только этот пост, но и весь цикл. Наверное, к Rust можно применить 60% или даже 80% из написанного. Make invalid data unpresentable, Parse, don’t validate — всё это подходит и к Rust.
Ещё TS хорош для этого.
Ну и написали бы на них (Rust+TS) тоже. Хоть бы и под катом
Тут два варианта. Если пример может быть локально адаптирован, то эту задачу может сделать нейронка. А если пример надо переписывать глобально, то придётся по всему тексту запускать ещё одно повествование. Это уйма работы. Думаю, что всем жаждующим лучше самостоятельно найти авторов, которые уже адаптировали идеи из этого цикла под свой язык.
Тогда зачем эта статья с примерами на латыни? (тоже мертвый язык)
Пробовал написать на f# кусок и интегрировать в c# проект. Когда понял, что они на границе не совместимы по типам (list и ещё много чего из распространенного) то бросил
Рекомендуют границу делать C#-friendly, а F# держать внутри. Но выглядит как лишнее трение
Я должен на серьёзных щах объяснять, почему F# используется в примерах статьи, которая является переводом главы из почти канонического цикла по F# с сайта fsharpforfunandprofit?
То, как C# видит мой код, меня не беспокоит, так как C#-ом мы лет 7+ фактически не пользуемся. В тех редких случаях, когда нужно скормить код C#-ерам или генератору кода, я могу добавить какую-то проекцию дружественную к C#, но вносить изменения в ядро я не буду.
В тележном F#RU-чате есть любители миксовать языки, но я к ним не отношусь и последствия их движухи наблюдаю со стороны. Если хочешь помусолить эту тему, иди туда. На хабре этот лагерь фактически не представлен.
C# методично забирает, но криво и, так сказать, с элементами не самой удачной отсебятины. Из-за этого исчерпывающе F# исходники на C# перекладывать не получается. Особенно в тех ситуациях, когда разработка проекта достигла стадии конвейера с распрыгами на гранатомёте. Однако до непосредственной попытки переноса это может быть незаметно. В результате межлагерная коммуникация местами даже ухудшилась, так как до этого C#-еры не знали, с чем имеют дело, и поэтому прилагали усилия к изучению, а сейчас лишь думают, что знают, и поэтому ничего не делают.
Есть фичи, которые C# уже не перенесёт (либо перенесёт с большими костылями). Например, computation expressions, так как они очевидно входят в конфликт с существующими IEnumerable и Task. Это важно, так как у нас до четверти кода на проекте может находиться в рамках кастомных CE.
Наконец, по поводу “мёртвости” языка. F# не бросили посреди крупной миграции, так что он находится в очень стабильном состоянии (за что мс таки можно сказать спасибо). И всё, что в него можно было быстро добавить, добавили почти в самом начале, а не через 15 лет. Почти всё, что хотят добавить теперь, потребует высадки космодесанта от мира программирования (он есть, но занят). В данный момент наибольшее влияние на код F# оказывают либы, которые пилят сами F#-исты (публично или приватно). Скажем, замена Hopac.Stream на что-то очень похожее, но чуть более сложное и совершенное на базе того же Hopac, сказалась на моём коде куда радикальнее, чем всё, что пережили C#-коллеги за последний десяток лет. Кейс, конечно, не рядовой, но с опытом в Erlang (у меня его нет) на F# можно и не так разгуляться.
Спасибо.
Вы что на на F# пилите? И есть идеи как его в корпоративную разработку протащить? А-то С# как в анекдоте: мыши плакали, кололись….
Исторически специализируюсь на десктопных приложениях. Остальное идёт как побочный результат. Плюс сейчас по фану начал заползать в геймдев. Отголоски этого процесса можно глянуть в хабе F#.
По протаскиванию в корпоративную разработку соображений нет. Я вполне сознательно залез в осаждённую крепость со всеми её преимуществами и недостатками. Иногда накатывает желание перейти в что-то мирское, но на этапе брачных танцев я вспоминаю, почему не хочу в этом участвовать, и наваждение проходит.
Однако точно могу сказать, что нет никакого смысла напирать на эффективность, контролируемость, тактильность, безопасность и так далее. Коллективной Раисе Максимовне важна только безответственность. Поход команды вверх по лестнице в режиме думгая её если и интересует, то явно не в том ключе. Так что собрать на своём планшете (в настольном смысле) самый лучший “движок” и пойти валить всех, кто посмел проявить слабину, вам никто не даст. Протаскивать придётся иными средствами, и в любом случае потребуется административный ресурс. Если конечно, мы не говорим о сопровождающих работу утилитах. Их можно пилить на F# явочным порядком.
Язык мертвеца мертвый язык в примерах это так интригует. Возбуждает, я бы даже сказал.
Вообще, это от Влашина пошло: идеи хорошие, а мейнстрим языки не доросли ещё
2. Проектирование с помощью типов: одновариантные типы-объединения