Статьи

JavaScript и доменные языки

Недавно я наткнулся на группу интересных проектов JavaScript от Стива Йена: шаблоны JavaScript , TrimQuery и TrimSpreadsheet . Первый — это шаблонизатор JavaScript, похожий на PHP Smarty . Изначально меня не убедила мудрость шаблонов на стороне клиента, но у Стива есть хорошо продуманная запись в блоге, в которой он защищает идею в свете растущей сложности веб-приложений. В качестве альтернативы ручному склеиванию струн это может стать ценным инструментом.

TrimQuery и TrimSpreadsheet еще более интересны: первый — это язык запросов данных в стиле SQL для опроса структур данных JavaScript, снова разработанный для помощи в сложных веб-приложениях, а второй — полная реализация электронных таблиц, содержащая всего 1700 строк кода .

Все три проекта являются частью более широкого исследования, связанного с использованием JavaScript для доменных языков. Специфичный для предметной области язык — это язык, предназначенный для решения конкретной проблемы, например, SQL для обработки реляционных структур данных или регулярных выражений для сопоставления шаблонов в тексте. Стив подчеркивает, что JavaScript хорошо подходит для реализации таких мини-языков благодаря мало используемым и часто клеветническим ключевым словам «eval» и «with». Вот хороший пример из TrimPath, который использует ‘with’:

var queryLang = TrimPath.makeQueryLang(tableColumnDefinitions);
with (queryLang) {
stmt = SELECT(X.a.AS("Foo"), Y.ALL,
FROM(X, Y), WHERE(EQ(X.a, Y.a)), ORDER_BY(Foo.ASC)
)
}

Код Стива хорошо написан и с открытым исходным кодом; это стоит посмотреть.