My talk is about DSLs, their kinds and when it’s worth to be using them. I’ll also demonstrate different approaches to developing internal and external DSLs in Python and will try to give the comparative analysis of those.
Domain driven design (DDD) - отражение модели предметной области в код (Максим Цепков на Software People 2013). Подробнее http://mtsepkov.org/DDD_problem_and_solving
My talk is about DSLs, their kinds and when it’s worth to be using them. I’ll also demonstrate different approaches to developing internal and external DSLs in Python and will try to give the comparative analysis of those.
Domain driven design (DDD) - отражение модели предметной области в код (Максим Цепков на Software People 2013). Подробнее http://mtsepkov.org/DDD_problem_and_solving
Осуществим вводный экскурс в Node.JS. Действительно это что-то новое и гениальное? Что оно может, а что нет? Кому будет полезен? В каких случаях применять, а в каких нет? На все эти вопросы я постараюсь ответить в своём докладе.
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...Ontico
HighLoad++ 2017
Зал «Кейптаун», 8 ноября, 15:00
Тезисы:
http://www.highload.ru/2017/abstracts/2957.html
Расскажем о нашем опыте разработки модуля межсетевого экрана для MySQL с использованием генератора парсеров ANTLR и языка Kotlin.
Подробно рассмотрим следующие вопросы:
— когда и почему целесообразно использовать ANTLR;
— особенности разработки ANTLR-грамматики для MySQL;
— сравнение производительности рантаймов для ANTLR в рамках задачи синтаксического анализа MySQL (C#, Java, Kotlin, Go, Python, PyPy, C++);
— вспомогательные DSL;
— микросервисная архитектура модуля экранирования SQL;
— полученные результаты.
Scala-библиотека Slick прекрасно зарекомендовала себя как развитый и удобный инструмент работы с базами данных. Поддерживаются и простейшие текстовые SQL-запросы, и строго типизированные join’ы нескольких таблиц. Для построения запросов Slick предоставляет DSL, код на котором выглядит как обработка коллекций. Причем простые подзапросы могут использоваться для конструирования более сложных.
Slick имеет весьма любопытную внутреннюю архитектуру, которая делает возможным не только продвинутое использование, но и расширение библиотеки несколькими способами, о которых и пойдет речь в докладе.
(see also video: https://youtu.be/9n1zzwOGado)
Scala, Play Framework и SBT для быстрого прототипирования и разработки веб-пр...Magneta AI
Антон Кириллов, Zeptolab (Москва)
Доклад посвящен обзору ключевых технологий стека Typesafe и анализу ключевых преимуществ и недостатков на примере реального проекта:
* Действительно ли Scala - “более лучшая” Java? Что следует знать, начиная внедрять Scala.
* Play Framework: больше чем просто контейнер. Архитектура и возможности.
* Доступ к базам данных: библиотеки и подходы, эволюция схемы БД во времени
* Actors: безболезненная многопоточность!
* Simple Build Tool: не совсем simple, но крайне функциональный инструмент автоматической сборки.
Рассматриваемые технологии позволяют “из коробки” начать создавать прототипы веб-приложений за очень короткое время и в дальнейшем наращивать их функционал. Тем не менее, из-за молодости стека существует большое количество “граблей”, о которых следует знать, принимая решение об использовании данного набора технологий.
Доклад с митапа MSK .NET Community (http://mskdotnet.org).
Поговорим о самом мощном отладчике для Windows – WinDbg. Разберем как начать использовать этот отладчик, чем он может быть полезен для .NET разработчиков. Подробней остановимся на практических моментах его применения, зачем он прикладным программистам, web-разработчикам. Посмотрим и на другие инструменты отладки, которые занимают нишу между интуитивно управляемым комбайном Visual Studio и легким, но крайне аскетичным WinDbg.
Осуществим вводный экскурс в Node.JS. Действительно это что-то новое и гениальное? Что оно может, а что нет? Кому будет полезен? В каких случаях применять, а в каких нет? На все эти вопросы я постараюсь ответить в своём докладе.
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...Ontico
HighLoad++ 2017
Зал «Кейптаун», 8 ноября, 15:00
Тезисы:
http://www.highload.ru/2017/abstracts/2957.html
Расскажем о нашем опыте разработки модуля межсетевого экрана для MySQL с использованием генератора парсеров ANTLR и языка Kotlin.
Подробно рассмотрим следующие вопросы:
— когда и почему целесообразно использовать ANTLR;
— особенности разработки ANTLR-грамматики для MySQL;
— сравнение производительности рантаймов для ANTLR в рамках задачи синтаксического анализа MySQL (C#, Java, Kotlin, Go, Python, PyPy, C++);
— вспомогательные DSL;
— микросервисная архитектура модуля экранирования SQL;
— полученные результаты.
Scala-библиотека Slick прекрасно зарекомендовала себя как развитый и удобный инструмент работы с базами данных. Поддерживаются и простейшие текстовые SQL-запросы, и строго типизированные join’ы нескольких таблиц. Для построения запросов Slick предоставляет DSL, код на котором выглядит как обработка коллекций. Причем простые подзапросы могут использоваться для конструирования более сложных.
Slick имеет весьма любопытную внутреннюю архитектуру, которая делает возможным не только продвинутое использование, но и расширение библиотеки несколькими способами, о которых и пойдет речь в докладе.
(see also video: https://youtu.be/9n1zzwOGado)
Scala, Play Framework и SBT для быстрого прототипирования и разработки веб-пр...Magneta AI
Антон Кириллов, Zeptolab (Москва)
Доклад посвящен обзору ключевых технологий стека Typesafe и анализу ключевых преимуществ и недостатков на примере реального проекта:
* Действительно ли Scala - “более лучшая” Java? Что следует знать, начиная внедрять Scala.
* Play Framework: больше чем просто контейнер. Архитектура и возможности.
* Доступ к базам данных: библиотеки и подходы, эволюция схемы БД во времени
* Actors: безболезненная многопоточность!
* Simple Build Tool: не совсем simple, но крайне функциональный инструмент автоматической сборки.
Рассматриваемые технологии позволяют “из коробки” начать создавать прототипы веб-приложений за очень короткое время и в дальнейшем наращивать их функционал. Тем не менее, из-за молодости стека существует большое количество “граблей”, о которых следует знать, принимая решение об использовании данного набора технологий.
Доклад с митапа MSK .NET Community (http://mskdotnet.org).
Поговорим о самом мощном отладчике для Windows – WinDbg. Разберем как начать использовать этот отладчик, чем он может быть полезен для .NET разработчиков. Подробней остановимся на практических моментах его применения, зачем он прикладным программистам, web-разработчикам. Посмотрим и на другие инструменты отладки, которые занимают нишу между интуитивно управляемым комбайном Visual Studio и легким, но крайне аскетичным WinDbg.
Web Components usher in a new era of web development based on encapsulated and interoperable custom elements that extend HTML itself. Built atop these new standards, Polymer makes it easier and faster to create anything from a button to a complete application across desktop, mobile, and beyond.
XSLT (eXtensible Stylesheet Language Transformations) is a language for transforming XML documents into other XML documents or HTML. It uses XPath to navigate XML documents and allows adding, removing, rearranging, and sorting elements in the output document. Some key points:
- XSLT transforms an XML source tree into an XML result tree
- It uses templates and applies templates to elements to transform the document
- Common elements include <xsl:template>, <xsl:value-of>, <xsl:for-each>, <xsl:if>, <xsl:choose>, and <xsl:apply-templates>
- XSLT is supported by browsers through built-in or third
2. [ DSL ]
Предметно-ориентированный язык -
это язык программирования с ограниченными
выразительными возможностями,
ориентированный на некую конкретную
предметную область
Мартин Фаулер
9. [ Ключевые моменты ]
Где и кто использует DSL:
- конфигурации
- зависимости пакетов
# Gemfile
source 'http://rubygems.org'
gem 'rails', '3.2.12'
group :assets do
gem 'therubyracer'
gem 'select2-rails', github: "argerim/select2-rails"
end
group :test do
gem "minitest"
gem 'mocha', require: false
end
10. [ Ключевые моменты ]
Где и кто использует DSL:
- конфигурации
- зависимости пакетов
- части фреймворков
# Sample resource route
resources :products do
resources :comments
resources :sales do
get 'recent', on: :collection
end
end
11. [ Ключевые моменты ]
Где и кто использует DSL:
- конфигурации
- зависимости пакетов
- части фреймворков
- системы тестирования
# Rspec example
describe Account do
it "has a balance of zero when first created" do
Account.new.balance.should eq(Money.new(0))
expect { @a = 5 }.to change { @a }.from(nil).to(5)
end
end
12. [ Ключевые моменты ]
Где и кто использует DSL:
- системы тестирования
# language: ru
Функционал: Сложение чисел
Чтобы не складывать в уме
Все, у кого с этим туго
Хотят автоматическое сложение целых чисел
Сценарий: Сложение двух целых чисел
Допустим я ввожу число 50
И затем ввожу число 70
Если я нажимаю "+"
То результатом должно быть число 120
15. [ Ключевые моменты ]
Язык программирования
Декларативный подход
ЧТО делать
вместо
КАК делать
16. [ Ключевые моменты ]
Язык программирования
Декларативный подход
Природа языка
17. [ Ключевые моменты ]
Язык программирования
Декларативный подход
Природа языка
Ограниченные выразительные
возможности
18. [ Ключевые моменты ]
Язык программирования
Декларативный подход
Природа языка
Ограниченные выразительные
Возможности
Ориентированность на предметную область
31. [ Внутренний DSL ]
> Текучий интерфейс (fluent interface)
Связывание методов
Последовательность функций
Вложенные функции
Замыкания:
ComputerBuilder.build do |c|
c.processor do |p|
p.cores 2
p.x64
p.speed 2.2
end
c.disk do |d|
d.size 120
end
c.disk do |d|
d.size 70
d.speed 7200
d.sata
end
end
32. [ Внутренний DSL ]
> Текучий интерфейс (fluent interface)
> Работа с синтаксическим деревом
33. [ Внутренний DSL ]
> Текучий интерфейс (fluent interface)
> Работа с синтаксическим деревом
> Аннотации
34. [ Внутренний DSL ]
> Текучий интерфейс (fluent interface)
> Работа с синтаксическим деревом
> Аннотации
> Макросы
35. [ Внутренний DSL ]
> Текучий интерфейс (fluent interface)
> Работа с синтаксическим деревом
> Аннотации
def method_missing(m, *args, &block)
> Макросы puts "There's no method called #{m} here."
end
> Динамический отклик
41. [ Внешний DSL ]
> Синтаксический анализ
Синтаксически управляемая трансляция
Syntax-Directed Translation
commands
event block
door_opened
link_clicked
end command commandDec commandDec end
command
play_music volume_up 10
play_music
volume_up 10
send_message "Hello, world"
end
42. [ Внешний DSL ]
> Синтаксический анализ
Грамматика входного языка.
list : eventList commandList ;
eventList : 'events' eventDec* 'end';
eventDec : identifier ;
commandList : 'commands' commandDec* 'end';
commandDec : identifier identifier? ;
43. [ Внешний DSL ]
> Синтаксический анализ
Грамматика входного языка.
Форма Бэкуса-Наура
[E]BNF
list : eventList commandList ;
eventList : 'events' eventDec* 'end';
eventDec : identifier ;
commandList : 'commands' commandDec* 'end';
commandDec : identifier identifier? ;
44. [ Внешний DSL ]
> Синтаксический анализ
Синтаксический анализатор на основе
рекурсивного спуска
Recursive Descent Parser
45. [ Внешний DSL ]
> Синтаксический анализ
Комбинатор синтаксических анализаторов
Parser Combinator
Комбинатор
команд
Анализатор Анализатор
начала блока команд конца блока команд
Комбинатор
списка команд
Анализатор Анализатор
команды аргумента команды
46. [ Внешний DSL ]
> Синтаксический анализ
Генератор синтаксических анализаторов
Parser Generator
Генерация
Грамматика
Синтаксический
a : ID INT ; анализатор
ID : 'a'..'z'+ ;
INT : '0'..'9'+;
47. [ Для чего все это? ]
В результате мы должны иметь
построенную семантическую модель
48. [ Для чего все это? ]
В результате мы должны иметь
построенную семантическую модель
> Для использования в программном продукте
49. [ Для чего все это? ]
В результате мы должны иметь
построенную семантическую модель
> Для использования в программном продукте
> Для генерации нового кода
50. [ Генерация кода ]
> Генерация c помощью преобразователя
Transformer Generation
51. [ Генерация кода ]
> Генерация c помощью преобразователя
Transformer Generation
> Шаблонная генерация
Templated Generation