SlideShare a Scribd company logo
1 of 22
DSL без купюр
IT Global Meetup, Санкт-петербург
6 июня 2015
Козлов Никита, MySale Group
Обо мне
План
Теория
― Какие задачи может решить DSL
― Что такое DSL
― Разновидности DSL
― Границы DSL
― Жизненный цикл DSL
Практика
― ANTLR
― Семантическая модель
― Транслятор
Пример
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{0F68510D-80C8-4B59-9301-ED77611AAF0D}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>Antlr.SemanticModel</RootNamespace>
<AssemblyName>Antlr.SemanticModel</AssemblyName>
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
</PropertyGroup>
Пример
<Button Content="Click Me" Click="OnButtonClick">
<Button.Background>
<LinearGradientBrush>
<LinearGradientBrush.GradientStops>
<GradientStop Color="Yellow" Offset="0" />
<GradientStop Color="Green" Offset="1" />
<LinearGradientBrush.GradientStops>
</LinearGradientBrush>
</Button.Background>
</Button>
Предметно-ориентированные языки
― Производительность
― Улучшение связи с экспертами
― Косметический фасад
Предметно-ориентированные языки
Задачи становятся более лёгкими для понимания
― Быстрее писать
― Легче понимать
― Меньше ошибок
Предметно-ориентированные языки
― Язык программирования
― Природа языка
― Ограниченные выразительные возможности
― Ориентированность на предметную область
― Что делать, а не как делать
Разновидности DSL
― Внешний DSL
― Внутренний DSL
― Языковые инструментальные средства
Границы DSL
Зачем нужен DSL
Плюсы
― Производительность
― Улучшение связи с экспертами
― Простота разработки
― Простота поиска ошибок
― Простота понимания
Минусы
― Отсутствие плюсов
( которые стоят затраченных усилий )
Жизненный цикл DSL
― Анализ предметной области
― Взаимодействие с экспертами
― Выделение ограничений
― Выделение бизнес проверок
― Развитие
― Поддержка
Архитектура обработки DSL
― Сценарий DSL
― Синтаксический анализ
― Семантическая модель
― Генерация
― Целевой код
AST или 2+(5-5)
calculator : statement+
statement : expression
expression :
multexpression
( ( PLUS | MINUS ) multexpression )*
multexpression :
atom
( ( MULT | DIV ) atom )*
atom : INT | LPAREN expression RPAREN
Тестирование DSL
― Синтаксис
― Семантика
― Неверные входные данные
― Сценарии
― Обработка ошибок
Внешний DSL своими руками
― ANTLR
― MSVS
― Литры кофе 
Практика
Примеры
Архитектура транслятора
― Пайплайн
― Расширяемость
― Конфигурабельность
― Унифицированный интерфейс
Обработка скрипта Бизнес логика Генерация «кода»
Кодогенерация
― Семантическая модель
― Генерация в паблик контракт
― Генерация на основе шаблонов
― Генерация на основе преобразования
Подводные камни
― Восстановление от ошибок
― Конфигурабельность на уровне ключей компилятора
― ...
Спасибо за внимание!
Полезные ресурсы
― Альфред В. Ахо, Моника С. Лам, Рави Сети, Джеффри Д. Ульман. Компиляторы:
принципы, технологии и инструментарий — 2 изд., ISBN 978-5-8459-1349-4
― Мартин Фаулер. Предметно-ориентированные языки программирования, ISBN
0-321-71294-3
― antlr.org
― https://www.nuget.org/packages/Antlr/
― Visual Studio Gallery: ANTLR Language Support

More Related Content

Similar to DSL без купюр

Презентация Дроздова А. (Вице-президента Soft Machines), Владиславлева В.(Зам...
Презентация Дроздова А. (Вице-президента Soft Machines), Владиславлева В.(Зам...Презентация Дроздова А. (Вице-президента Soft Machines), Владиславлева В.(Зам...
Презентация Дроздова А. (Вице-президента Soft Machines), Владиславлева В.(Зам...Наталия Егорова
 
Новые модели серверов DEPO Storm на базе Intel Xeon. Практический опыт постро...
Новые модели серверов DEPO Storm на базе Intel Xeon. Практический опыт постро...Новые модели серверов DEPO Storm на базе Intel Xeon. Практический опыт постро...
Новые модели серверов DEPO Storm на базе Intel Xeon. Практический опыт постро...DEPO Computers
 
Js templating stepan_reznikov
Js templating stepan_reznikovJs templating stepan_reznikov
Js templating stepan_reznikovyaevents
 
Степан Резников "Шаблонизация на клиенте"
Степан Резников "Шаблонизация на клиенте"Степан Резников "Шаблонизация на клиенте"
Степан Резников "Шаблонизация на клиенте"Yandex
 
Brocade - ЦОД будущего
Brocade - ЦОД будущегоBrocade - ЦОД будущего
Brocade - ЦОД будущегоPetr Dyakov
 
Анонс новых моделей серверов ДЕПО Шторм российского производства
Анонс новых моделей серверов ДЕПО Шторм российского производстваАнонс новых моделей серверов ДЕПО Шторм российского производства
Анонс новых моделей серверов ДЕПО Шторм российского производстваDEPO Computers
 
JavaScript on frontend and backend (in Russian
JavaScript on frontend and backend (in RussianJavaScript on frontend and backend (in Russian
JavaScript on frontend and backend (in RussianMikhail Davydov
 
разработка бизнес приложений (8)
разработка бизнес приложений (8)разработка бизнес приложений (8)
разработка бизнес приложений (8)Alexander Gornik
 
Проектирование систем связи
Проектирование систем связиПроектирование систем связи
Проектирование систем связиMATLAB
 
SDN: Что это? Что оно нам дает и как его использовать
SDN: Что это? Что оно нам дает и как его использоватьSDN: Что это? Что оно нам дает и как его использовать
SDN: Что это? Что оно нам дает и как его использоватьCisco Russia
 
Решения DEPO Computers для консолидации данных и серверной виртуализации на б...
Решения DEPO Computers для консолидации данных и серверной виртуализации на б...Решения DEPO Computers для консолидации данных и серверной виртуализации на б...
Решения DEPO Computers для консолидации данных и серверной виртуализации на б...DEPO Computers
 
Как выбрать сетевое решение для нового ЦОД или расширения существующего?
Как выбрать сетевое решение для нового ЦОД или расширения существующего?Как выбрать сетевое решение для нового ЦОД или расширения существующего?
Как выбрать сетевое решение для нового ЦОД или расширения существующего?Cisco Russia
 
Реализация тестового фреймворка на основе OPEN-SOURCE инструментов
Реализация тестового фреймворка на основе OPEN-SOURCE инструментовРеализация тестового фреймворка на основе OPEN-SOURCE инструментов
Реализация тестового фреймворка на основе OPEN-SOURCE инструментовSQALab
 
Open Source Testing Framework: real project example and best practices
Open Source Testing Framework: real project example and best practicesOpen Source Testing Framework: real project example and best practices
Open Source Testing Framework: real project example and best practicesAliaksandr Ikhelis
 
2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, ParallelsNikolay Samokhvalov
 
[RU] Connecting AutoCAD and Python (by Alex Bausk)
[RU] Connecting AutoCAD and Python (by Alex Bausk)[RU] Connecting AutoCAD and Python (by Alex Bausk)
[RU] Connecting AutoCAD and Python (by Alex Bausk)Alexander Bausk
 
Embarcadero All-Access
Embarcadero All-AccessEmbarcadero All-Access
Embarcadero All-AccessSerghei Urban
 
IT-инфраструктура. FAQ для разработчика
IT-инфраструктура. FAQ для разработчикаIT-инфраструктура. FAQ для разработчика
IT-инфраструктура. FAQ для разработчикаMikhail Chinkov
 
Hl2008 Spy Log Architechture 169
Hl2008 Spy Log Architechture 169Hl2008 Spy Log Architechture 169
Hl2008 Spy Log Architechture 169Media Gorod
 

Similar to DSL без купюр (20)

Презентация Дроздова А. (Вице-президента Soft Machines), Владиславлева В.(Зам...
Презентация Дроздова А. (Вице-президента Soft Machines), Владиславлева В.(Зам...Презентация Дроздова А. (Вице-президента Soft Machines), Владиславлева В.(Зам...
Презентация Дроздова А. (Вице-президента Soft Machines), Владиславлева В.(Зам...
 
Новые модели серверов DEPO Storm на базе Intel Xeon. Практический опыт постро...
Новые модели серверов DEPO Storm на базе Intel Xeon. Практический опыт постро...Новые модели серверов DEPO Storm на базе Intel Xeon. Практический опыт постро...
Новые модели серверов DEPO Storm на базе Intel Xeon. Практический опыт постро...
 
Js templating stepan_reznikov
Js templating stepan_reznikovJs templating stepan_reznikov
Js templating stepan_reznikov
 
Степан Резников "Шаблонизация на клиенте"
Степан Резников "Шаблонизация на клиенте"Степан Резников "Шаблонизация на клиенте"
Степан Резников "Шаблонизация на клиенте"
 
Brocade - ЦОД будущего
Brocade - ЦОД будущегоBrocade - ЦОД будущего
Brocade - ЦОД будущего
 
Анонс новых моделей серверов ДЕПО Шторм российского производства
Анонс новых моделей серверов ДЕПО Шторм российского производстваАнонс новых моделей серверов ДЕПО Шторм российского производства
Анонс новых моделей серверов ДЕПО Шторм российского производства
 
JavaScript on frontend and backend (in Russian
JavaScript on frontend and backend (in RussianJavaScript on frontend and backend (in Russian
JavaScript on frontend and backend (in Russian
 
разработка бизнес приложений (8)
разработка бизнес приложений (8)разработка бизнес приложений (8)
разработка бизнес приложений (8)
 
Проектирование систем связи
Проектирование систем связиПроектирование систем связи
Проектирование систем связи
 
SDN: Что это? Что оно нам дает и как его использовать
SDN: Что это? Что оно нам дает и как его использоватьSDN: Что это? Что оно нам дает и как его использовать
SDN: Что это? Что оно нам дает и как его использовать
 
Решения DEPO Computers для консолидации данных и серверной виртуализации на б...
Решения DEPO Computers для консолидации данных и серверной виртуализации на б...Решения DEPO Computers для консолидации данных и серверной виртуализации на б...
Решения DEPO Computers для консолидации данных и серверной виртуализации на б...
 
Как выбрать сетевое решение для нового ЦОД или расширения существующего?
Как выбрать сетевое решение для нового ЦОД или расширения существующего?Как выбрать сетевое решение для нового ЦОД или расширения существующего?
Как выбрать сетевое решение для нового ЦОД или расширения существующего?
 
Реализация тестового фреймворка на основе OPEN-SOURCE инструментов
Реализация тестового фреймворка на основе OPEN-SOURCE инструментовРеализация тестового фреймворка на основе OPEN-SOURCE инструментов
Реализация тестового фреймворка на основе OPEN-SOURCE инструментов
 
Open Source Testing Framework: real project example and best practices
Open Source Testing Framework: real project example and best practicesOpen Source Testing Framework: real project example and best practices
Open Source Testing Framework: real project example and best practices
 
2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels
 
[RU] Connecting AutoCAD and Python (by Alex Bausk)
[RU] Connecting AutoCAD and Python (by Alex Bausk)[RU] Connecting AutoCAD and Python (by Alex Bausk)
[RU] Connecting AutoCAD and Python (by Alex Bausk)
 
Embarcadero All-Access
Embarcadero All-AccessEmbarcadero All-Access
Embarcadero All-Access
 
Big Data и Ruby
Big Data и RubyBig Data и Ruby
Big Data и Ruby
 
IT-инфраструктура. FAQ для разработчика
IT-инфраструктура. FAQ для разработчикаIT-инфраструктура. FAQ для разработчика
IT-инфраструктура. FAQ для разработчика
 
Hl2008 Spy Log Architechture 169
Hl2008 Spy Log Architechture 169Hl2008 Spy Log Architechture 169
Hl2008 Spy Log Architechture 169
 

More from Mikhail Shcherbakov

Mythbusters - Web Application Security
Mythbusters - Web Application SecurityMythbusters - Web Application Security
Mythbusters - Web Application SecurityMikhail Shcherbakov
 
Михаил Щербаков "WinDbg сотоварищи"
Михаил Щербаков "WinDbg сотоварищи"Михаил Щербаков "WinDbg сотоварищи"
Михаил Щербаков "WinDbg сотоварищи"Mikhail Shcherbakov
 
Apache Ignite.NET в действии
Apache Ignite.NET в действииApache Ignite.NET в действии
Apache Ignite.NET в действииMikhail Shcherbakov
 
Архитектура Apache Ignite .NET
Архитектура Apache Ignite .NETАрхитектура Apache Ignite .NET
Архитектура Apache Ignite .NETMikhail Shcherbakov
 
Знакомство с In-Memory Data Grid
Знакомство с In-Memory Data GridЗнакомство с In-Memory Data Grid
Знакомство с In-Memory Data GridMikhail Shcherbakov
 
сценарии использования статического анализатора
сценарии использования статического анализаторасценарии использования статического анализатора
сценарии использования статического анализатораMikhail Shcherbakov
 
WCF. Легко или проблемно
WCF. Легко или проблемноWCF. Легко или проблемно
WCF. Легко или проблемноMikhail Shcherbakov
 
Поиск ошибок в программах на языке C#
Поиск ошибок в программах на языке C#Поиск ошибок в программах на языке C#
Поиск ошибок в программах на языке C#Mikhail Shcherbakov
 
Когда в C# не хватает C++ . Часть 3.
Когда в C# не хватает C++. Часть 3. Когда в C# не хватает C++. Часть 3.
Когда в C# не хватает C++ . Часть 3. Mikhail Shcherbakov
 
WinDbg в руках .NET разработчика
WinDbg в руках .NET разработчикаWinDbg в руках .NET разработчика
WinDbg в руках .NET разработчикаMikhail Shcherbakov
 
RESTful API: Best practices, versioning, design documentation
RESTful API: Best practices, versioning, design documentationRESTful API: Best practices, versioning, design documentation
RESTful API: Best practices, versioning, design documentationMikhail Shcherbakov
 
Простой и кросс-платформенный WEB-сервер на .NET
Простой и кросс-платформенный WEB-сервер на .NETПростой и кросс-платформенный WEB-сервер на .NET
Простой и кросс-платформенный WEB-сервер на .NETMikhail Shcherbakov
 
Использование Visual Studio Tools for Apache Cordova в реальных проектах
Использование Visual Studio Tools for Apache Cordova в реальных проектахИспользование Visual Studio Tools for Apache Cordova в реальных проектах
Использование Visual Studio Tools for Apache Cordova в реальных проектахMikhail Shcherbakov
 
Когда в C# не хватает C++ . Часть 2.
Когда в C# не хватает C++. Часть 2.Когда в C# не хватает C++. Часть 2.
Когда в C# не хватает C++ . Часть 2.Mikhail Shcherbakov
 
Распространённые ошибки оценки производительности .NET-приложений
Распространённые ошибки оценки производительности .NET-приложенийРаспространённые ошибки оценки производительности .NET-приложений
Распространённые ошибки оценки производительности .NET-приложенийMikhail Shcherbakov
 
Когда в C# не хватает C++
Когда в C# не хватает C++Когда в C# не хватает C++
Когда в C# не хватает C++Mikhail Shcherbakov
 

More from Mikhail Shcherbakov (20)

Delegates and events in C#
Delegates and events in C#Delegates and events in C#
Delegates and events in C#
 
Mythbusters - Web Application Security
Mythbusters - Web Application SecurityMythbusters - Web Application Security
Mythbusters - Web Application Security
 
Михаил Щербаков "WinDbg сотоварищи"
Михаил Щербаков "WinDbg сотоварищи"Михаил Щербаков "WinDbg сотоварищи"
Михаил Щербаков "WinDbg сотоварищи"
 
Apache Ignite.NET в действии
Apache Ignite.NET в действииApache Ignite.NET в действии
Apache Ignite.NET в действии
 
Архитектура Apache Ignite .NET
Архитектура Apache Ignite .NETАрхитектура Apache Ignite .NET
Архитектура Apache Ignite .NET
 
Знакомство с In-Memory Data Grid
Знакомство с In-Memory Data GridЗнакомство с In-Memory Data Grid
Знакомство с In-Memory Data Grid
 
сценарии использования статического анализатора
сценарии использования статического анализаторасценарии использования статического анализатора
сценарии использования статического анализатора
 
WCF. Легко или проблемно
WCF. Легко или проблемноWCF. Легко или проблемно
WCF. Легко или проблемно
 
Поиск ошибок в программах на языке C#
Поиск ошибок в программах на языке C#Поиск ошибок в программах на языке C#
Поиск ошибок в программах на языке C#
 
Когда в C# не хватает C++ . Часть 3.
Когда в C# не хватает C++. Часть 3. Когда в C# не хватает C++. Часть 3.
Когда в C# не хватает C++ . Часть 3.
 
Project Rider
Project RiderProject Rider
Project Rider
 
WinDbg в руках .NET разработчика
WinDbg в руках .NET разработчикаWinDbg в руках .NET разработчика
WinDbg в руках .NET разработчика
 
Structured logging
Structured loggingStructured logging
Structured logging
 
RESTful API: Best practices, versioning, design documentation
RESTful API: Best practices, versioning, design documentationRESTful API: Best practices, versioning, design documentation
RESTful API: Best practices, versioning, design documentation
 
Простой и кросс-платформенный WEB-сервер на .NET
Простой и кросс-платформенный WEB-сервер на .NETПростой и кросс-платформенный WEB-сервер на .NET
Простой и кросс-платформенный WEB-сервер на .NET
 
Использование Visual Studio Tools for Apache Cordova в реальных проектах
Использование Visual Studio Tools for Apache Cordova в реальных проектахИспользование Visual Studio Tools for Apache Cordova в реальных проектах
Использование Visual Studio Tools for Apache Cordova в реальных проектах
 
Sandboxing in .NET CLR
Sandboxing in .NET CLRSandboxing in .NET CLR
Sandboxing in .NET CLR
 
Когда в C# не хватает C++ . Часть 2.
Когда в C# не хватает C++. Часть 2.Когда в C# не хватает C++. Часть 2.
Когда в C# не хватает C++ . Часть 2.
 
Распространённые ошибки оценки производительности .NET-приложений
Распространённые ошибки оценки производительности .NET-приложенийРаспространённые ошибки оценки производительности .NET-приложений
Распространённые ошибки оценки производительности .NET-приложений
 
Когда в C# не хватает C++
Когда в C# не хватает C++Когда в C# не хватает C++
Когда в C# не хватает C++
 

DSL без купюр