Язык это знаковая система...
соглашение о приписывании чему-либо какого-либо определённого смысла
Что такое
Предметно-
Специфичный
Язык?
Язык, который, в противоположность языкам общего назначения
предназначен для решения определенных задач в конкретной предметной области
- Выразительность
- Надежность
- Поддерживаемость
- Семантический Разрыв
- Борьба со сложностью
Насколько можно уменьшить размер наших программ?
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
- 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
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