image
DSL (Domain-specific language) — мова, спеціалізований для конкретної області застосування (Вікіпедія)
На написання цього поста мене наштовхнула стаття "Чому Kotlin відстій", в якій автор нарікає на те, що в Kotlin "немає синтаксису для опису структур". За деякий час програмування на Kotlin у мене склалося враження, що в ньому якщо не можна, але дуже хочеться, то можна. І я вирішив спробувати написати свій DSL для опису структури даних. Ось що з цього вийшло.
Читати далі →

PyNSK #12 — лютнева зустріч питонистов Новосибірська

чи Любите ви Python так, як ми любимо його? Запрошуємо всіх любителів і «любителів» Python на зустріч спільноти PyNSK.

26-го лютого (неділя) відбудеться чергова, 12-а, зустріч. Вона пройде в новому для нас місці — в офісі компанії AgoraDoxa (мапа) і розпочнеться о 13-00.

Реєстрація (там пропускний режим)
image
Минулого разу на зустріч прийшло близько 30 чоловік, що для нас рекорд.
Говорили про пакети в Python і чому TOML цілком придатний формат. Зачепили тему управління кодом проекту і довго обговорювали управління релізами. Була цікава дискусія.
Не обійшли боком тему «Python на Android». Було незвично, з'являються все нові і нові способи помістити інтерпретується в microsoft мова в світ Java.

Цього разу ми обрали два цікавих доповіді:

Читати далі →

Робота з DSL: створення власного аналізатора з використанням бібліотек Python



В нашому блозі на Хабре ми пишемо не лише про темах, пов'язаних з інформаційною безпекою, але приділяємо значну увагу питанням розробки софта — наприклад, ведемо цикл про створенні та впровадженні інструментів DevOps. Сьогодні ж мова піде про використання предметно-орієнтованих мов (Domain-specific language, DSL) для рішення конкретних завдань за допомогою Python.

Матеріал підготовлений на основі виступу розробника Positive Technologies Івана Циганова на конференції PYCON Russia (слайди, відео).
Читати далі →

JetBrains Night в Москві. Відео. Перші кроки з TeamCity DSL

29 вересня в Москві відбулася міні-конференція JetBrains Night: 7 годин розробники з JetBrains розповідали розробникам з інших компаній про те, що компанія робить, навіщо, і що буде робити далі, а потім відповідали на запитання, обговорювали спільні проблеми і взагалі ділилися досвідом (т. е. слухали, як розробники з інших компаній розповідають їм про те, що вони роблять і чому їм зручно або поки ще не дуже зручно робити це за допомогою того, що робить JetBrains).

На Хабре ми поступово публікуємо відео всіх доповідей, щоб можна було в коментарях обговорити те, що не встигли обговорити на JetBrains Night, особливо з тими, хто не зміг приїхати особисто.

В попередніх постах Дмитро Жемеров розповідав про мову Kotlin (там досі триває помірно жива дискусія в коментарях), а потім Максим Мазін і Валерія Андріанова ділилися практичними порадами щодо інтеграції серверних продуктів і використанні нових Agile-дощок.

Якщо ви раніше не знали, що білди в TeamCity можна налаштувати за допомогою DSL (наприклад, щоб простіше було змінювати і використовувати ці налаштування в інших проектах),

Читати далі →

DSL для регулярних виразів на Kotlin



Всім привіт!
Ця стаття про реалізацію одного конкретного DSL (domain specific language, предметно-орієнтована мова) для регулярних виразів засобами Kotlin, але при цьому вона цілком може дати загальне уявлення, про те, як написати свій DSL Kotlin і що зазвичай робитиме "під капотом" будь-який інший DSL, використовує ті ж можливості мови.
Багато хто вже використовують Kotlin або хоча б пробували це робити, та й інші цілком могли чути про те, що Kotlin розташовує до написання витончених DSL, чому є блискучі приклади — Anko і kotlinx.html.
Звичайно ж, для регулярних виразів тощо вже робили (і ще: на Java, на Scala, на C# — реалізацій багато, схоже, це поширена розвага). Але якщо хочеться попрактикуватися або спробувати DSL-орієнтовані мовні можливості Kotlin, то ласкаво просимо під кат.
Читати далі →

Dependency Injection з перевіркою коректності на Scala засобами мови

Хочу розповісти про свою невелику бібліотеку Dependency Injection на Scala. Проблема яку хотілося вирішити: можливість протестувати граф залежностей до їх реального конструювання і падати як можна раніше якщо щось пішло не так, а також бачити в чому саме помилка. Це саме те, чого не вистачає в чудовій DI-бібліотеці Scaldi. При цьому хотілося зберегти зовнішню прозорість синтаксису і максимально обійтися засобами мови, а не ускладнювати і влазити в макрос.
Також хочу відразу звернути увагу що я концентруюся на DI через конструктор, як на самому простому і идиоматичном спосіб, що не вимагає змін в реалізацію класів.
Читати далі →

Прокачування @PreAuthorize в Spring Security довільними типами і простим инспектируемым DSL

Spring Security — must-have компонент в Spring-додатках, так як він відповідає за аутентифікацію користувача, а також за авторизацію тих чи інших його дій в системі. Одним з методів авторизації в Spring Security є використання анотації
@PreAuthorize
, в якій за допомогою виразів можна наочно описати правила, дотримуючись яких модуль авторизації вирішує, чи дозволити проведення операції або заборонити.
У моєму REST-сервісі виникла необхідність надати точку доступу до опису правил авторизації для всіх методів контролерів сервісу. Причому, по можливості, уникнути розкриття специфіки саме SpEL-виразів (тобто, замість
permitAll
потрібно щось на кшталт
anybody
, а
principal
уникати зовсім як надмірне вираження), але повертати свої вирази, з якими можна робити що завгодно.

Читати далі →

Введення в розробку предметно-орієнтованих мов (DSL) з допомогою EMFText


Це 5-та стаття циклу з розробки, керованої моделями. У попередніх статтях ми вже розібралися з метамоделями, валідацією моделей, деякими нотаціями для моделей (діаграми і таблиці). Все це було в рамках простору моделювання MOF. Сьогодні ми побудуємо міст у простір моделювання EBNF – познайомимося з текстовою нотацією для MOF-моделей.

Читати далі →

Pro Parboiled (Частина 4 заключна)

Частина 4. Сувора дійсність

Як змусити Parboiled працювати ще швидше? Яких помилок краще не допускати? Що робити зі спадщиною у вигляді Parboiled1? На ці, а також інші питання покликана відповісти містить стаття серії.

Структура циклу:


Читати далі →

Про Parboiled (Частина 3)

Частина 3: Вилучення даних

У цій статті ми побудуємо парсер для вже описаного нами раніше формату конфігураційних файлів. Також ми реалізуємо невеликий DSL для спрощеного доступу до елементів отриманого дерева. Ще з цієї статті ви дізнаєтеся про типи правил, діях парсера, а так само про «темної матерії» Parboiled — стек значень.

Структура циклу:


Читати далі →