Воркшоп «Практические задачи решаем функционально»
Ещё двухчастное видео с dotnext: часть 1 и часть 2.
Классический REST API тестируют с помощью curl или Postman. Более новый gRPC тестировать сложнее, потому что на входе и на выходе у него бинарные данные. Нужна утилита, которая умеет сериализовать текстовые данные в бинарные и десериализовать их обратно. Задача кажется сложной, потому что языки описания схемы и данных Protobuf — достаточно развитые. Но решается она просто, если пользоваться правильным инструментом. Мы напишем утилиту на языке программирования F#, используя библиотеку FParsec. Научимся по описанию грамматики писать код и тесты для разбора, построим абстрактное синтаксическое дерево и разберёмся, как применять его для сериализации.
Ещё двухчастное видео с dotnext: часть 1 и часть 2.
Классический REST API тестируют с помощью curl или Postman. Более новый gRPC тестировать сложнее, потому что на входе и на выходе у него бинарные данные. Нужна утилита, которая умеет сериализовать текстовые данные в бинарные и десериализовать их обратно. Задача кажется сложной, потому что языки описания схемы и данных Protobuf — достаточно развитые. Но решается она просто, если пользоваться правильным инструментом. Мы напишем утилиту на языке программирования F#, используя библиотеку FParsec. Научимся по описанию грамматики писать код и тесты для разбора, построим абстрактное синтаксическое дерево и разберёмся, как применять его для сериализации.
YouTube
Марк Шевченко — Воркшоп «Практические задачи решаем функционально» (Часть 1)
Подробнее о конференции DotNext: https://jrg.su/3WmFRE
— —
Классический REST API тестируют с помощью curl или Postman. Более новый gRPC тестировать сложнее, потому что на входе и на выходе у него бинарные данные. Нужна утилита, которая умеет сериализовать…
— —
Классический REST API тестируют с помощью curl или Postman. Более новый gRPC тестировать сложнее, потому что на входе и на выходе у него бинарные данные. Нужна утилита, которая умеет сериализовать…
👍13❤3
An incursion under C#. Протаскиваем F# в Godot
Вводная статья по связке F# и игрового движка, который на старте активно противится причинению добра. Потребовалось время, чтобы это сопротивление сломить. Данный текст — компиляция опыта по преодолению встреченных препятствий.
До сравнительного анализа F# vs C# vs GDScript дело не дошло. Но если давать оценки без подкрепления следующей статьёй, авансом, то в умелых руках F# хорошо взлетает на Godot, и по мере возрастания сложности начинает обыгрывать конкурентов. Полностью от C#-проекта избавиться не получится, но в перспективе он почти наверняка перестанет быть источником какой-либо информации и превратится в полностью зависимую детерминированную проекцию над Godot и
Вводная статья по связке F# и игрового движка, который на старте активно противится причинению добра. Потребовалось время, чтобы это сопротивление сломить. Данный текст — компиляция опыта по преодолению встреченных препятствий.
До сравнительного анализа F# vs C# vs GDScript дело не дошло. Но если давать оценки без подкрепления следующей статьёй, авансом, то в умелых руках F# хорошо взлетает на Godot, и по мере возрастания сложности начинает обыгрывать конкурентов. Полностью от C#-проекта избавиться не получится, но в перспективе он почти наверняка перестанет быть источником какой-либо информации и превратится в полностью зависимую детерминированную проекцию над Godot и
.fs-файлами.Хабр
An incursion under C#. Протаскиваем F# в Godot
Вы когда-нибудь бывали на боевом задании? Что вы имеете ввиду? Вторжение под водой с целью взятия крепости, захваченной элитным подразделением, имеющим в своём распоряжении 15 управляемых снарядов с...
👍12
Вычислительные выражения: 4. Типы-обёртки
Под типами-обёртками подразумеваются типы, представляющие ядро билдеров, например:
В этой части говорится о связях данных типов с конструкциями
Под типами-обёртками подразумеваются типы, представляющие ядро билдеров, например:
'a option, 'a Аsync, Result<'ok, 'error> и т.д. Их иногда называют M<'a> в честь того самого слова на букву м.В этой части говорится о связях данных типов с конструкциями
let!, return и return!.Хабр
Вычислительные выражения: Типы-обёртки
В предыдущем посте мы познакомились с процессом "maybe", благодаря которому можно значительно упросить код, работающий с Option<T> . Типичное использование "maybe" выглядит так: let result =...
👍5❤2
Вычислительные выражения: 5. Подробнее про типы-обёртки
В программе:
- Использование дженериков, недженериков и списков в качестве типов-обёрток.
- Правила построения каноничных билдеров.
- Реализация
В программе:
- Использование дженериков, недженериков и списков в качестве типов-обёрток.
- Правила построения каноничных билдеров.
- Реализация
for.Хабр
Вычислительные выражения: Подробнее про типы-обёртки
В предыдущем посте мы познакомились с концепцией "типов-обёрток" и с тем, как они связаны с вычислительными выражениями. В этом посте мы разберёмся, какие типы можно использовать в качестве обёрток....
❤5👍2
Вычислительные выражения: 6. Реализуем Zero и Yield
Полезно знать, как работает
Полезно знать, как работает
let!, однако в реальности билдеры с этим механизмом характерны для абстракций уровня фреймворка. Для уровня бизнес-логики лучше определять локальные билдеры, которые больше напоминают модифицированные [] или seq {}. Базой таких билдеров являются методы Zero и Yield.Хабр
Вычислительные выражения: Реализуем Zero и Yield
В прошлых статьях цикла мы разобрались со связыванием, функциями-продолжениями и типами-обёртками. Теперь мы, наконец, готовы к знакомству с методами классов-построителей. Обратите внимание, что...
👍6🔥2🤔1
Вычислительные выражения: 7. Реализуем Combine
Метод
Метод
Combine отвечает за склеивание нескольких yield. Связка из Zero, Delay, Yield и Combine даст минимальную полноценную версию списочного билдера.Хабр
Вычислительные выражения: Реализуем Combine
В предыдущем посте мы разбирались в методах Zero и Yield . В этом посте мы рассмотрим возврат из вычислительного выражения нескольких значений с помощью метода Combine . Обратите внимание, что...
🔥5❤2👍1
Вычислительные выражения: 8. Реализуем Delay и Run
Метод
Метод
Delay позволит откладывать вычисления, а то и вовсе игнорировать их, если этого требует выражение в билдере. Run преобразует содержимое билдера во внешний результат на заключительном шаге. В статье он нужен для исполнения отложенных вычислений, которые породил Delay, но в случае бытовых билдеров Run часто выполняет роль builder.Build() из мира ООП.Хабр
Вычислительные выражения: Реализуем Delay и Run
В последних постах мы разобрали основные методы ( Bind , Return , Zero и Combine ), нужные для создания собственного построителя вычислительных выражений. Предыдущий пост рассказывал о методе Combine...
❤4👍1
REPL, скрипты, F#: интерактивный подход к прототипированию и дебагу приложений
Небольшой доклад о пользе F# и REPL даже если ваш прод на C#. К сожалению, качество звука такое, что слушать его в прикуску нет никакой возможности.
Лично я расслышал всё, но если у кого-то возникнут вопросы, то автор доклада присутствует в чате.
Небольшой доклад о пользе F# и REPL даже если ваш прод на C#. К сожалению, качество звука такое, что слушать его в прикуску нет никакой возможности.
Лично я расслышал всё, но если у кого-то возникнут вопросы, то автор доклада присутствует в чате.
YouTube
Генри Ковалевский. REPL, скрипты, F#: интерактивный подход к прототипированию и дебагу приложений
Генри Ковалевский
Ведущий разработчик, LC Group
REPL, скрипты, F#: интерактивный подход к прототипированию и дебагу приложений
Многие языки располагают возможностью использования REPL-сессий. В некоторых языках REPL может являться основным инструментом…
Ведущий разработчик, LC Group
REPL, скрипты, F#: интерактивный подход к прототипированию и дебагу приложений
Многие языки располагают возможностью использования REPL-сессий. В некоторых языках REPL может являться основным инструментом…
👍8❤2🔥1
Когда имён недостаточно. REST-клиент на F#. Часть 1. DTO
Начало нового слегка хулиганского цикла по бытовому кодогену. В этот раз на примере REST-клиента посмотрим, как можно сводить роль личности к нулю, чтобы бездушная машина могла разгуляться. Тем не менее в первой части самого кодогена нет, но есть много слов про DTO и F# вообще.
Начало нового слегка хулиганского цикла по бытовому кодогену. В этот раз на примере REST-клиента посмотрим, как можно сводить роль личности к нулю, чтобы бездушная машина могла разгуляться. Тем не менее в первой части самого кодогена нет, но есть много слов про DTO и F# вообще.
Хабр
Когда имён недостаточно. REST-клиент на F#. Часть 1. DTO
В данном цикле я хочу поговорить об одном из вариантов представления REST-клиента. Но я буду обсуждать частное (REST), чтобы использовать его как точку опоры для перехода к общему — проблеме проекций...
👍3🔥3
❤3