Функциональное программирование презентация

Содержание

Распределенный API: по 22 сервера в 2-х датацентрах (Америка, Европа). Разнообразные клиентские приложения: 40 desktop и web приложений. Датацентр обрабатывает 12 000 запросов в минуту. Ресурсоёмкие запросы и пакетные запросы. Немного

Слайд 1КОМБИНАТОРНЫЕ ПАРСЕРЫ ДЛЯ ПРОСТЫХ СМЕРТНЫХ
Функциональное программирование


Слайд 2Распределенный API: по 22 сервера в 2-х датацентрах (Америка, Европа).
Разнообразные клиентские

приложения: 40 desktop и web приложений.
Датацентр обрабатывает 12 000 запросов в минуту.
Ресурсоёмкие запросы и пакетные запросы.

Немного о проекте


Слайд 3
Возникла необходимость добавить новый источник данных HBase.
С чего все началось?


Слайд 4NoSql – ;
написана на Java;
аналог Google Big table;
не является заменой

SQL;
интерфейсы взаимодействия: REST, Java API, Apache THRIFT.

Что такое HBase?


Слайд 5Apache Avro — система сериализации данных.
Система использует JSON для определения структуры

данных (схемы), которые сериализуются в компактный бинарный формат.

AVRO


Слайд 6 AVRO – схема


Слайд 7 HBase + Thrift-AVRO + .NET = ?


AVRO
AVRO
TCP Socket
TCP Socket


Слайд 8 Workflow


Слайд 9META-DRIVEN;
результат – простая таблица;
возможность выполнять Map/Reduce;
сохранить отношения данных;


Требования


Слайд 10 Проблемы
большие вложенные AVRO схемы до 1 000 000 строк;
AVRO не дружит

с .NET;
после десериализации AVRO Dictionary.

Слайд 11 Что делать?
А давайте напишем свой DSL!


Слайд 12 Разработка синтаксиса


Слайд 13 А давай еще Join’s


Слайд 14 А как быстро написать парсер?


Слайд 15 Парсинг(синтаксический анализ текста)
ОБЩИЙ ПОДХОД


Слайд 16Парсер генератор на основе формальных языков (ANTLR).
Подключаемая библиотека комбинаторных парсеров (Sprache,

SuperPower).
...

Выбор


Слайд 17 Написать руками


Слайд 18ANTLR (Another Tool for Language Recognition)







Расширенная форма Бэкуса — Наура

Генератор на

основе формальных языков

Слайд 19декларативный синтаксис;
строгое соблюдение грамматики;
не нужно думать о performance;
не нужно писать документацию.
Генератор

на основе формальных языков

строгие грамматики;
интеграция с системой сборки;
тяжело отлаживать;
кастомные ошибки;
медленные парсеры;
проблемы с кодировками;
проблемы переносимости.

Плюсы

Недостатки


Слайд 20реализован как библиотека языка;
модульный и поддерживаемый;
полуавтоматическая генерация сообщений об ошибках;
backtracking и

look ahead;
возможности в runtime;
не требует предварительной токенизации(лексера).

Комбинаторные парсеры (Sprache и т.д.)

компромисс между декларативностью производительностью;
проблемы с левой рекурсией;
придется учить API;
только для вашего языка.
может не иметь предварительной токенизации.

Плюсы

Недостатки


Слайд 21никакого внешнего кода;
поддается к индивидуальным требованиям;
потенциально быстр, как только это возможно.
Рукописные

парсеры

все писать с 0;
создание быстрых парсеров требует опыта;
выражения с инфиксными операторами(приоритеты).

Плюсы

Недостатки


Слайд 22 Причем тут функциональное прог-ие?
Основные концепции:
неизменяемые структуры данных;
чистые функции;
функции высших порядков;
рекурсия.


Слайд 23 Императивное vs Функциональное


Слайд 24Написать примитивные парсеры(функции).
Написать функции для комбинирования.
Скомбинировать простые парсеры в более сложные.
PROFIT!
Don’t

panic it’s monadic!

Слайд 25type Parser = String -> Tree
type Parser = String -> (String,

Tree)
type Parser = String -> (String, T)
type Parser = TInput -> (TInput, T)

Сигнатура нашего парсера


Слайд 26 Пишем простой комбинаторный парсер
Выражение : “42 + 5”
42 + 5
expression
+

42

5

Left operand

right operand

operator


Слайд 27 Парсим простое выражение : “42 + 5”
Railroad - диаграмма
Грамматика в БНФ


Слайд 28 Библиотеки с готовым набором комбинаторных парсеров для С#
небольшая библиотека, совместима .NET

Core;
простой, но богатый API;
много используется в “боевых проектах”: R#, Octostache, EasyNetQ, Seq.

форк Sprache с блэк джеком и …;
использует токинезатор;
парсит потоки токенов, а не поток символов;
хорошие сообщения об ошибках, легко кастомизируются;
работает быстрее.

https://github.com/sprache/Sprache

https://github.com/datalust/superpower

Sprache


Слайд 29 Готовый код парсера для “42 + 5”


Слайд 30 Ну, а как же без TDD?


Слайд 31 Давайте усложним : “42 + 5 - 7”
Railroad - диаграмма
Грамматика в

БНФ

Слайд 32 Парсер на Sprache “42 + 5 - 7”


Слайд 33DSL (Domain-specific language) Пример: XPath, SQL;
использование NoSQL;
не хватает всей “Мощи” XML;
разработка

IDE или плагинов к ним;
клиентские приложения, например, поиск;
анализ документов.

Когда и зачем писать свои парсеры?


Слайд 34 Что внутри?


Слайд 35 Тип Result


Слайд 36 Тип Input (обертка над string)


Слайд 37 Начнем с простых парсеров


Слайд 38 Пишем первый комбинирующий парсер
Parser
Parser
Then


Слайд 39 Строим путь к LINQ’s query синтаксису


Слайд 40 Комбинируем


Слайд 41 Полный код на GitHub


Слайд 42Фрагмент из клипа Thrift shop ☺
HASL – HBase Avro Snapshot Language


Слайд 43прототип был написан за 1 вечер на Sprache;
был переписан на Superpower;
в

дальнейшем все изменения занимали 1-2 часа.

Разработка


Слайд 44 Что получилось достичь за 1 день?


Слайд 45Транформирует объекты в таблицу.
Ориентирован на AVRO-схему.
Селекторы для всех типов: object, type[],

примитивы.
Фильтры для [].
API функций для сложных вычислений и фильтраций.
Поддержка Join’ов.

Особенности HASL


Слайд 46 Перформанс HASL - Основа
Core-I7 6700 3.40 GHz.
Windows server 2010.

x64.




Слайд 47 3 424 знаков.
120 строк.
3 Join’а.
102 селектора.

25 с фильтрами.
Полностью отформатирован.

Перформанс HASL – Тестовые данные


Слайд 48 Перформанс HASL - Результаты


Слайд 49 Схема


Слайд 50 Пример запроса


Слайд 51 Результат


Слайд 52 Спасибо за внимание!


Слайд 53 Вопросы?


Обратная связь

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

Email: Нажмите что бы посмотреть 

Что такое ThePresentation.ru?

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


Для правообладателей

Яндекс.Метрика