Хабрахабр

Зачем изучать непопулярные языки. Пример сообщества F#

Но коммерческого успеха и широкой популярности нет. Бывают культовые фильмы, игры, книги или музыка — их страшно любит сплоченное сообщество, профессионалы и критики. Мне в таких ситуациях обычно до боли обидно.

Например, F#. В разработке хорошие технологии тоже не всегда становятся массовыми. Все что я о нем знаю — это дико крутой, но совершенно непопулярный язык, после которого разработчики уже не могут просто так возвращаться к своим привычным языкам.

И вообще — кто те люди, которые на нем пишут, и зачем они это делают, если язык не нужен бизнесу? Я попытался узнать, в чем причина. Здесь — наш круглый стол.
Для этого я постучался поговорить в русскоязычное сообщество F# в «Телеграме».

С чего начали изучать F#

Айрат Худайгулов (Szer): Я сам выходец из C#. Была у нас работа связанная с Akka.NET, которая портирована с Akka на Scala. Порт отличный, но к редким кейсам документации не было примеров, они всегда были в Scala-доке. Когда я читал эту доку, в голову лезли одни вопросы — почему в Scala всё записывается в пару строчек, а я страдаю на C#?

С тех пор и не слез. Выход был найден — F#.

Те трудности, что считалось нормой и неизбежностью в ООП мире C# и Java, неизбежными вовсе не являются, и их можно легко предотвратить вместо того, чтобы превозмогать. Роман Лиман (kagetoki): Оказалось — это мощный инструмент для решения вполне реальных будничных проблем любого программиста.

На тот момент я совсем не понимал функциональной парадигмы программирования, и любая информация о ней меня серьёзно раздражала. Фил Ранжин (fillpackart): Как-то на Хабре я прочитал большое интервью с Вагифом Абиловым. Так и то интервью.

Это было вскоре после моего выступления на московской конференции DotNext. Вагиф Абилов (VagifAbilov): Тот материал можно почитать здесь. Конечно, никто не мешает программисту на C# или Java определять свои структуры данных как неизменяемые, но в основе языков, реализующих ООП, лежит возможность мутаций структур данных, и эта возможность никуда из этих языков не уйдет. Если в двух словах, то я начал изучать F# из желания писать более компактный код (меньше кода — меньше зла) и работать с неизменяемыми структурами данных. Функциональное программирование позволяет не тратить усилия на защиту данных от некорректного изменения в многопоточной среде — данные сами о себе позаботятся, они неизменяемы.

Я тогда не знал, кто такой Вагиф, но, естественно, сразу решил для себя, что ничего он не понимает. Фил Ранжин: Вагиф всё говорил, что после церемониальных C# и Java, F# казался чем-то намного более подходящим для разработки. Мощный и красивый. C# не церемониальный, C# именно такой, какой и должен быть. Взял простую задачу, и стал имплементить её на C# и F#, чтобы проиллюстрировать свою правоту. Решил написать статью про то, какое всё-таки функциональное программирование нелепое. Я стал изучать эту технологию. F# в процессе мне зашёл настолько, что статью я дописывать не стал.

Роман Лиман: Многие вещи, которые в C# проверяются в рантайме, теперь перекочевали в компайл-тайм, так что ощущения словно впервые попробовал статическую типизацию — прям откровение снизошло.

Компилятор сам генерирует кучу бойлерплейта за вас, например, structural equality. Там, где на F# вам понадобится семь строк кода, на C# эквивалентный код развернется на 200–300, без преувеличения (и это считая только полезный код).

Я не шучу. Фил Ранжин: Я ещё ни разу не дебажил F# код, потому что в моём F# коде все баги ловятся на этапе компиляции.

Тяжело ли изучать F#

Роман Лиман: Насколько тяжело изучать? По мне вообще не тяжело. Единственное, в начале туговато идет, если впервые сталкиваешься с функциональной парадигмой и иммутабельными типами. Но это проблема не смены языка, а смены парадигмы.

Синтаксис поначалу не очевиден, так что браваду лучше оставить в стороне и почитать про язык, а не надеяться, что знаний C# хватит с головой.

сделать его очевидно несложно). Айрат Худайгулов: F# поддерживает всё, что есть в C# кроме goto (язык полностью expression-based, сделать императивный переход в вычисляемом выражении было бы странно) и ключевого слова protected (это by design, т.к. Для любителей посчитать байты тоже всё есть: ref/out параметры, мутабельность, спаны, unmanaged, pointers, stackalloc. Всё остальное, любимое нами ООП — абстрактные классы, интерфейсы, авто проперти, юзинги, трай-кетчи — конечно есть.

А многие фичи вообще сомневаюсь, что когда-либо заедут (sum types в лице discriminated unions, нативный function currying). Все фичи в C# приходят с лагом в пару лет по сравнению с F# (дженерики, async/await + task, LINQ, паттерн матчинг и многое другое). 0 обещают завезти рекорды и рекурсивный паттерн матчинг. В свежий C# 8. Внимание вопрос — зачем ждать?

Чтобы получать преимущества которые даёт F#, но не даёт C#, придётся понять и другую сторону Силы. И другой вопрос: а зачем учить новый язык чтобы писать на нём точно так же? И это непросто.

Если кто не знает, эти мегафичи появились в C# благодаря F#. Джон Доу: Как C# девелопер благодарен создателям F# за дженерики и асинхронность с человеческим лицом в C#.

Не могу похвастать, что следую этому совету в точности, но главное, по-моему, что хотели им сказать авторы — программист постоянно должен быть готовым к пересмотру принципов написания своих программ. Вагиф Абилов: В известной книге «Прагматичный программист» разработчикам советуют каждый год изучать новый язык программирования.

Если перешел с Java на Clojure, порой отнесутся, как если бы христианин принял ислам. Многие вообще слишком носятся с языками программирования, как жизненным кредо. Изучение новых языков программирования зачастую позволяет переосмыслить наши привычки работы со старыми языками. Почему, собственно, такое внимание? Познакомившиеся с F# пишут на C# по-другому.

подталкивает программировать на абстракциях-интерфейсах, вместо явных классов. Роман Мельников (neftedollar): В F# ООП правильнее (хотя полностью совместимо с ООП в C#) т.к.

Что думают про создателей языка

Николай Матюшин: Однажды я поспособствовал поддержке тайп провайдеров на .NET Core. Довольно долгое время они не работали, и мы с одним человеком из русскоязычного сообщества решили разобраться, в чём беда. Поковырялись, увидели, что в .NET Core нет функции, которая сохраняет assembly (объект) в файл — эта функция использовалась провайдерами.

Получился жуткий костыль, но частично работающий. Мы потратили одну или две недели на прототип, который это делал. Всё это время общались в issue на гитхабе, а потом пришёл Дон Сайм, написал «Few hours of work», и починил тайп провайдеры.

Надеюсь, он доедет до какой-нибудь российской конференции, чтобы российские разработчики смогли с ним познакомиться лично. Вагиф Абилов: Создатель языка Дон Сайм доступен и демократичен.

Поразительно, но он создал всю эту красоту чуть ли не в одиночку. Роман Лиман: Сайм — гений.

Павел Смирнов: Он мой программистский кумир.

NET, иначе сидели бы мы на C# и хардкастили всё из object и обратно, как это было (и частично есть) в Java. Айрат Худайгулов: Дон Сайм между прочим впилил дженерики в . Но это означает что отголосок плохих решений в С# может попасть и в F#. Сайм развивает язык с оглядкой на C#, на совместимость с его новыми фичами, что наверное стратегически правильно. они могут отпугнуть других людей и раздуть стандартную либу (привет C++). Также он против введения «заумных» ФП-фич (привет Scala), и переусложения языка, т.к.

Я согласен с его видением языка как мультипарадигменнного, но я бы докинул в язык кое-что сверху. Я думаю Сайм — герой.

Почему язык не популярен

Роман Лиман: Язык не популярен, на мой взгляд, потому что в целом ФП менее популярно, чем ООП. Плюс, есть порог вхождения. А дальше — уловка 22. Проекты на F# не пишут, потому что программистов на рынке мало, а программисты не учат этот язык, потому что проектов на рынке нет.

Тут F# особенно не повезло — он подходит только тем, кто верит в симбиоз этих парадигм. Фил Ранжин: Я не знаю людей, которые практиковали бы функциональное программирование, но предпочитали бы объектно-ориентированное.

Но язык изначально позиционировался скорее для data science, чем для промышленной разработки. Павел Смирнов: Многие считали его мертворождённым из-за политики Microsoft — F# был всего лишь площадкой для обыгрывания фичей для C#.

Для C# это важная тема, и многие уже на него потратились. Роман Мельников: Решарпер. И решарпер убирает кучу боли сишарперов. Без решарпера на C# писать больновато, нужно много ручками прописывать, типа подсветки аллокаций. В F# этой боли нет, но те, у кого есть решарпер, не могут оценить все прелести языка, не полагающегося на тулинг.

При том, что F# разработан в Microsoft Research, он всегда позиционировался компанией как язык для энтузиастов. Вагиф Абилов: На мой взгляд, причина отставания от успехов Scala лежит в доминировании Майкрософт, которая по-прежнему определяет, что является приоритетным на платформе Windows. Но капля камень точит. У Майкрософт есть метрики, показывающие экономическую обоснованность развития той или иной технологии в зависимости от текущих продаж, и разумеется, какой-нибудь SharePoint согласно этим метрикам выглядит более привлекательным, чем F#.

Вся мощь . Фил Ранжин: Я верю, что он выстрелит. NET в паре с самым современным синтаксисом и самым идиоматичным подходом в истории не могут не выстрелить.

F# постепенно заходит в анализ данных, благодаря провайдерам типов, например. Роман Мельников: Перспективы потрясающие. NET). Есть компиляторы в js и волшебная библиотека elmish (по сути Elm для .

Есть компилятор в ErlangCore, что тоже дико круто. Мигель Де Иказа активно поддерживает F#, и в Xamarin его поддержка всегда была как у C#. SAFE-Stack чумовая вещь, с типизированными вызовами api, крутыми обертками поверх вебсокетов (Elmish. На F# можно писать полностью бэкенд и фронтенд. Bridge) и кучей еще всего.

Я работаю в проекте норвежского телерадиовещания, наша система закачивает в “облако” медиафайлы телевизионных и радиопрограмм, чтобы сделать их доступными для просмотра и прослушивания с компьютеров и мобильных устройств. Вагиф Абилов: Очень радует, что удается применять F#. NET. Система написана на F# и использует Akka. Это не единственный проект в нашей организации, где используется F#, и что особенно радует, это что число таких проектов растет, как и число разработчиков, готовых перейти на этот язык.

Для чего подходит F#

Фил Ранжин: F# идеально ложится на разработку ИИ. Этот язык буквально сделан, чтобы абстрагировать меня от сложностей и сосредоточиться на главном. Когда делаешь ИИ, твоя задача отмапить свой образ мышления на поведение машины. В таких кейсах код — ваш промежуточный язык, который не способен выразить слишком сложные вещи. Вот F# способен быть настолько абстрактным, что бы не мешать тебе и твоей машине творить историю.

В прошлогоднем интервью на Хабре я неосмотрительно сказал, что функциональные языки в большей степени применимы к алгоритмам и бэкенду, и в меньшей — к программированию интерфейса пользователя и веб-страниц. Вагиф Абилов: Он применим к любым задачам, а ложится особенно хорошо на задачи доменного моделирования.

Комментатор был совершенно прав. Мне тогда в комментариях кто-то заметил, что есть такой функциональный язык Elm, который специально написан для программирования веб-страниц. Потрясающие впечатления, комбинация F# + Fable (и еще библиотека Fable-Elmish) открывают доступ к веб-программированию для таких ничего не понимающих в CSS разработчиков, как я. Я с тех пор начался пользоваться Fable, который позволяет писать веб-аппликации на F#, компилируя их в JavaScript.

Actor model — MailboxProcessor в стандартной библиотеке это сказка. Павел Сирнов: Data driven development — лаконичный ФП язык, поддерживающий Type Providers.

Решаются задачи анализа данных и машинного обучения (fslab.org), задачи ETL, задачи по проектированию бизнес логики — система типов позволяет писать так, чтоб неправильных состояний не было.
Потрясающе решаются задачи парсинга (Fparsec). Роман Мельников: Отлично решает задачи веба, интегрируется с react-компонентами. Тот же TypeScript изначально был написан на F#. Отлично подходит для написания своих языков. Пишется код для GPU.
Сам я пишу на нем скрипты fsx вместо баш и пайтона для свой машины.

Но думаю достаточно многие люди могут и без этого обойтись. Да, под микроконтроллеры на нем не попишешь.

Где брать информацию

Книги

Интернет

Телеграм

  • fsharp_news
  • fsharp_chat

Пара слов о сообществе

Роман Лиман: Сообщество классное, всех объединяет желание писать на F# за деньги, поэтому всем новичкам сильно помогают, чтобы увеличить коммьюнити, повысив шансы найти работу.

Но они правы. Фил Ранжин: Опасные сектанты.

Больше всего нравится, что они неравнодушны к своему языку, также как это бывает в других более известных экосистемах. Павел Смирнов: Русскоязычное сообщество F# весьма уютное место.

Николай Матюшин: Может быть в силу того, что язык не сильно популярен, и токсичные люди не задерживаются.

Но жизнь делают интереснее. Роман Мельников: Бывают свои драмы не влияющие на язык.

Теги
Показать больше

Похожие статьи

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
Закрыть