Как стать автором
Обновить
2

F# *

Язык из семейства языков .NET Framework

Сначала показывать
Порог рейтинга
Уровень сложности

Когда имён недостаточно. REST-клиент на F#. Часть 1. DTO

Уровень сложностиПростой
Время на прочтение14 мин
Количество просмотров1.2K

В данном цикле я хочу поговорить об одном из вариантов представления REST-клиента. Но я буду обсуждать частное (REST), чтобы использовать его как точку опоры для перехода к общему — проблеме проекций внешних контрактов. В первых двух частях я сосредоточусь на синтаксисе и «архитектурных» ходах, а потом поговорю о генераторах кода. Сложность будет расти с каждой частью, но предлагаемые подходы даже в рамках одной части можно применять независимо. Например, сейчас мы поговорим про DTO (Data Transfer Object), в следующий раз — про перенос методов и их иерархии. Это близкие модули, но их взаимное влияние осознанно будет сведено к минимуму.

Ранее я накатал большой цикл по локальному F#-кодогену и высказал намерение периодически возвращаться к генераторам на примере каких-то узконаправленных задачек. Данный цикл — пробный шар в этом направлении. Он логически вытекает из последних двух частей цикла, так что осилившие «Большой код» смогут посмотреть на уже знакомые концепции немного под другим углом.

Читать далее
Всего голосов 8: ↑7 и ↓1+6
Комментарии0

Новости

Вычислительные выражения: Реализуем Delay и Run

Уровень сложностиСложный
Время на прочтение10 мин
Количество просмотров710

Скотт Влащин продолжает рассказ о вычислительных выражениях в F#. Вычислительные выражения очень похожи на монады из Haskell, но у них есть свои особенности.

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

Но если очень хочется, то можно. В этой статьей Скотт рассказывает, как сделать ленивые вычислительные выражения в F#.

Читать далее
Всего голосов 5: ↑5 и ↓0+6
Комментарии0

Вычислительные выражения: Реализуем Combine

Уровень сложностиСложный
Время на прочтение11 мин
Количество просмотров1.1K

Вычислительные выражения — поистине неисчерпаемая тема. Мы научились возвращать пустые значения, а теперь нам предстоит разобраться, как возвращать множественные. Скотт Влащин рассказывает, как использовать метод Combine.

Читать далее
Всего голосов 3: ↑3 и ↓0+4
Комментарии0

Вычислительные выражения: Реализуем Zero и Yield

Уровень сложностиСложный
Время на прочтение10 мин
Количество просмотров1.5K

Шестая статья из цикла про вычислительные выражения. Скотт Влащин начинает рассказывать детали реализация, и это в два раза интереснее, чем раньше.

Читать далее
Всего голосов 2: ↑2 и ↓0+2
Комментарии0

Истории

Вычислительные выражения: Подробнее про типы-обёртки

Уровень сложностиСложный
Время на прочтение9 мин
Количество просмотров1K

Пятая статья из цикла про вычислительные выражения, написанная популяризатором Скоттом Влащиным.

Глубже погрузимся в исследование типов-обёрток и узнаем, наконец, почему список тоже может быть обёрткой.

Читать далее
Всего голосов 2: ↑2 и ↓0+2
Комментарии2

Вычислительные выражения: Типы-обёртки

Уровень сложностиСложный
Время на прочтение8 мин
Количество просмотров1.2K

Четвёртая статья из цикла Вычислительные выражения Скотта Влащина. Скотт рассказывает о типах-обёртках и об их глубокой связи с вычислительными выражениями.

Читать далее
Всего голосов 3: ↑3 и ↓0+3
Комментарии0

An incursion under C#. Протаскиваем F# в Godot

Уровень сложностиПростой
Время на прочтение18 мин
Количество просмотров1.9K

Godot — игровой движок, который имеет нативную поддержку dotnet. К сожалению, эта поддержка до такой степени заточена под C#, что F# она выходит боком. Почти все проблемы разрешимы, но при недостатке опыта они скатываются в большой пластилиново-волосатый валик у самого входа в подземелье, который иногда приводит к преждевременной и бессмысленной гибели. Чтобы избежать этого в данной статье я дам программу-минимум, которая позволит выжить в Godot, но не выжать из него максимум.

Это не значит, что у сочетания F# + Godot нет своих плюшек. Просто мне хотелось съесть вначале сосредоточить всех мух в одном месте, а котлетами заняться потом и в более свободной манере. Также я предполагаю, что на данную статью будут натыкаться как новички в F#, так и новички в Godot, поэтому местами я буду дублировать базовые руководства.

Читать далее
Всего голосов 10: ↑10 и ↓0+11
Комментарии0

Вычислительные выражения: Введение в 'Bind'

Уровень сложностиСложный
Время на прочтение6 мин
Количество просмотров1.1K

Третья статья из цикла про вычислительные выражения в F#. Продолжаем разбираться с функциями-продолжениями и исследуем метод "Bind".

Читать далее
Всего голосов 3: ↑3 и ↓0+3
Комментарии0

Вычислительные выражения: Разбираемся с продолжениями

Уровень сложностиСложный
Время на прочтение10 мин
Количество просмотров1.1K

Вторая часть из цилка статей про вычислительные выражения в F#. Здесь Скотт Влащин рассказывает про функции-продолжения. Сложная, но очень важная тема.

Читать далее
Всего голосов 2: ↑2 и ↓0+2
Комментарии0

Вычислительные выражения: Введение

Уровень сложностиСложный
Время на прочтение9 мин
Количество просмотров1.9K

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


Группа энтузиастов давно (и с переменным успехом) пытается перевести руководство Скотта на русский.


Я завершаю перевод цикла, посвящённого одной из самых сакральных тем языка — вычислительным выражениям. Это как монады, только в .NET.


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


Далее передают слово автору. Перед вами — первая статья цикла.




По многочисленным просьбам, мы поговорим про тайны вычислительных выражений, о том, что они из себя представляют и как могут применяться на практике (и я постараюсь избегать запрещённого слова на букву М).


В этом цикле статей вы узнаете, что такое вычислительные выражения, как их создавать, а также освоите несколько общих паттернов, связанных с ними. В процессе мы также познакомимся с продолжениями, функцией связывания, типами-обёртками и прочим.


Введение


Кажется, что вычислительные выражениях имеют репутацию заумной штуки, трудной для понимания.


С одной стороны, их достаточно легко применять. Любой, кто написал достаточно кода на F# наверняка использовал стандартные конструкции, такие как seq{...} или async{...}.


Но как вы можете создать новую похожую конструкцию? Как они работают за кулисами?

Читать дальше →
Всего голосов 8: ↑8 и ↓0+8
Комментарии1

Большой код. Учимся генерировать F#-исходники с помощью Fantomas. Часть 4. Расширения, обобщения и методы

Уровень сложностиСложный
Время на прочтение17 мин
Количество просмотров763

В прошлой части мы научились определять собственные типы и модули. Мы облекли все достопримечательности в конкретные типы и теперь можем снабдить их индивидуальными свойствами-ребрами (см. рисунок ниже).

В этой части речь в первую очередь пойдёт про Fluent API, но мы также поковыряем тему параметров в дженериках и функциях. Это последняя статья, где детально разбирается AST. Я определённо будут возвращаться к кодогену, но предметом разбирательств будут принципы формирования выходного кода, а их реализация ввиду их линейности будет выноситься за скобки.

Читать далее
Всего голосов 9: ↑7 и ↓2+7
Комментарии0

Большой код. Учимся генерировать F#-исходники с помощью Fantomas. Часть 3. Модули и типы

Уровень сложностиСложный
Время на прочтение20 мин
Количество просмотров1.2K

В прошлых двух частях мы ознакомились с синтаксической моделью F#-кода и с инструментами для неё. Объёмный пример туда уже не влез, но необходимость в нём осталась. Так родились ещё две заключительные части цикла. Их объединяет общий проект, но в остальном они представляют собой сборную солянку фактов, практик и наблюдений, которые было бы трудно разместить в каталогизированной документации.

Мы возьмём сугубо игровую задачу с понятным результатом и на её примере узнаем:

• на какие ноды AST стоит обратить внимание в первую очередь;
• где Fantomas-у нельзя доверять;
• где можно хакать;
• где лучше придерживаться пуризма;
• и как на F# можно строить Fluent API.

В этой части мы сосредоточимся на общей организации генератора, входных данных и основных элементах AST. В следующей сделаем то же самое, но на более сложном уровне, сместив повествование в сторону устройства Fluent API.

Читать далее
Всего голосов 10: ↑10 и ↓0+10
Комментарии2

ООП в F#

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров3.4K

Привет, Хабр!

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

Читать далее
Всего голосов 13: ↑10 и ↓3+9
Комментарии11

Ближайшие события

AdIndex City Conference 2024
Дата26 июня
Время09:30
Место
Москва
Summer Merge
Дата28 – 30 июня
Время11:00
Место
Ульяновская область

Когда-либо давал. F#-сервер из скрипта на примере локального брокера сообщений

Уровень сложностиСредний
Время на прочтение16 мин
Количество просмотров1.9K

В ходе разработки на F# поднимать локальные web-серверы приходится гораздо чаще, чем это принято на C#. Связано это с большим количеством нехарактерных для C# активностей. То, что в C# делают плагины для IDE, у нас делают скрипты, причём их сферы ответственности пересекаются где-то наполовину. Если не понимать этого аспекта, то можно навечно увязнуть в ситуации перманентного нытья о недостаточной поддержке F# со стороны MS.

В этой статье я расскажу про устойчивую комбинацию из Suave, Fable.Remoting и Hopac, которая может стать для вас молотком универсальным решением для реализации локальных служебных серверов.

Читать далее
Всего голосов 6: ↑6 и ↓0+6
Комментарии0

Большой код. Учимся генерировать F#-исходники с помощью Fantomas. Часть 2. Собираем AST

Время на прочтение16 мин
Количество просмотров1.2K

В прошлой части мы познакомились с Abstract Syntax Tree (AST).
В этой займёмся его сборкой в полезных объёмах и генерации конечного кода.

Читать далее
Всего голосов 2: ↑2 и ↓0+2
Комментарии0

Большой код. Учимся генерировать F#-исходники с помощью Fantomas. Часть 1. Знакомимся с содержимым синтаксического древа

Время на прочтение13 мин
Количество просмотров1.6K

В этом многословном, но сравнительно простом цикле я дам введение в генерацию F#-кода.
Как правило, для этих целей в сообществе рекомендуют использовать Myriad, что, по-моему, не совсем правильно, но на его примере можно увидеть, что тема кодогенерации очень объёмна.

Однако я хочу сосредоточиться лишь на очень маленькой области кустарной кодогенерации по месту требования. Её гораздо легче освоить, в отличие от энтерпрайз-монстров, и уж тем более починить или захакать при поддержке. Так что данный цикл будет полезен в первую очередь для работы малой организованной группой. Обеспечение кодогенерации в крупных долгоживущих проектах я оставлю за скобками.

Читать далее
Всего голосов 5: ↑5 и ↓0+5
Комментарии0

Сервер Юк. Заставляем Yandex Cloud Functions работать на F#

Уровень сложностиПростой
Время на прочтение12 мин
Количество просмотров1.6K

В этой статье я расскажу, как засунуть F# в Yandex Cloud Functions. Навыка работы с Serverless у меня нет, так что это будет не компиляция моего опыта, а отчет о вполне успешном эксперименте.

Судя по всему, разработчики Yandex Cloud Functions считают, что dotnet = C#. Поэтому документация для dotnet написана только c позиции C#-разработчика. О том, что делать F#-разрабу - ни слова. Однако это не означает, что это невозможно в принципе.

Читать далее
Всего голосов 8: ↑7 и ↓1+10
Комментарии3

Fancy Widgets — виджеты рабочего стола на AvaloniaUI

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров4.1K

Привет, Хабр!

Около трёх месяцев назад, я и мой друг - начинающие .NET разработчики, решили разработать свои виджеты на рабочий стол Windows, так как официальных нормальных виджетов нет (те что в Windows 11 не считаются). Недавно мы выпустили наш проект в релиз, пока что есть 2 виджета (Погода и Заметки), но вскоре их может быть больше! Проект называется Fancy Widgets и мы хотим поделиться им с вами. Вы можете попробовать наши виджеты, скачав их с нашего сайта https://fancy-widgets.onrender.com. Это наш pet-проект и поэтому он ни на что не претендует, мы просто делали его для себя и для удовольствия. Но мы будем рады услышать ваше мнение и предложения по улучшению нашего продукта. Вы можете оставить свои комментарии под этой статьей или написать нам на нашу почту fancy.widgets.help@gmail.com. Цель этой статьи - вкратце рассказать о нашем проекте и о сложностях, которые возникли у нас при разработке. Мы надеемся, что вы найдете нашу статью интересной и полезной. Приятного чтения! ?

Читать далее
Всего голосов 4: ↑4 и ↓0+4
Комментарии10

Грань выбора. Учимся строить временные петли на F# при помощи Hopac.Alt. Часть 3. Побочные эффекты

Время на прочтение12 мин
Количество просмотров949

В прошлых частях мы познакомились с концепцией альтернатив. Потом научились их подготавливать и достраивать до полностью замкнутых систем. В этой части мы коснёмся "плохих", ну или как минимум сложных случаев. Научимся брать под контроль серую зону на периферии основного русла исполнения.

Читать далее
Всего голосов 1: ↑1 и ↓0+1
Комментарии0

Грань выбора. Учимся строить временные петли на F# при помощи Hopac.Alt. Часть 2. Предпосылки и следствия

Время на прочтение13 мин
Количество просмотров1.3K

В прошлой части мы освоили самые азы альтернатив. Познакомились с Alt, Alt.choose и коммитом. В этой части мы научимся собирать сложные альтернативы на основе базовых, а также скрывать этап их подготовки при необходимости.

Читать далее
Всего голосов 1: ↑1 и ↓0+1
Комментарии0
1
23 ...