Data DSLs

Created by niquola / @niquola

Что такое Язык?

Язык это знаковая система...

Что такое Знак?

соглашение о приписывании чему-либо какого-либо определённого смысла

Что такое
Предметно-
Специфичный
Язык?

Язык, который, в противоположность языкам общего назначения предназначен для решения определенных задач в конкретной предметной области

Примеры DSL?

  • SQL
  • HTML/CSS
  • BASH
  • ...

Зачем DSL?

  • Выразительность
  • Надежность
  • Поддерживаемость
  • Семантический Разрыв
  • Борьба со сложностью

Насколько можно уменьшить размер наших программ?

Alan Kay / 1000


0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Ver= 4 |IHL= 8 |Type of Service|       Total Length = 576      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|       Identification = 111    |Flg=0|     Fragment Offset = 0 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Time = 123  |  Protocol = 6 |       Header Checksum         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                        source address                         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                      destination address                      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Opt. Code = x | Opt.  Len.= 3 | option value  | Opt. Code = x |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Opt. Len. = 4 |           option value        | Opt. Code = 1 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Opt. Code = y | Opt. Len. = 3 |  option value | Opt. Code = 0 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                             data                              |
|                             data                              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                             data                              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      
TCP/IP in 200 lines

Language-Oriented
Programming


lang -> [dsls]* -> solution


FermaT: lisp -> WSL -> metaWSL -> solution

Чем плох DSL?

  • Design Challenge
  • Высокая квалификация
  • Производительность

Когда стоит разработать DSL?

  • Комбинаторный Взрыв
  • Ощущение Рутины
  • Все слишком сложно

Классификация

  • External (sql, html)
  • Embeded (regexp, linq)
  • Internal (lisp,ruby/rails,scala)

DSL на данных

  • formats (XML, JSON, YAML)
  • domain formats (html, xslt, svg)
  • meta-data (schemas)
  • config files (ini)

LISP homoiconicity

Code is Data

Clojure in 2 min

Reciepe

  • data format
  • interpreter
  • sugar
  • [compiler]

Data DSL

  • simple
  • interoperable
  • dynamic
  • re-interpretable
  • extendable

Code & Data

Our app is
a language
for non-programmers

Write code for interpreter


Write interpreter for data

Write your own langs!

Thx


Q?