LINUX.ORG.RU

История изменений

Исправление den73, (текущая версия) :

ИСТОРИЯ 1

Часть 1: Поддержка эволюции БД

  • migrations
  • описание структуры таблиц в виде DSL на s-выражениях (ключевое слово deftable), где также указаны констрейнты, заголовки полей для вывода в формах и прочие мелочи. Внутри использован AP5 - реляционное расширение Common Lisp, которое позволяет внутри образа лисп системы устанавливать отношения между объектами и делать запросы на языке, похожем на SQL (и в чём-то даже более выразительном). Хотя сегодня я бы подумал, перед тем, как снова использовать AP5 - он всё же несколько тормозной.
  • описание всех вьюх, триггеров и хранимых процедур на DSL, причём основная часть DDL стейтмента сделана не в виде S-выражений, а прямо на языке базы данных.
  • система макросов для облегчения написания SQL-запросов, по сути калька с макросов Common Lisp. См. [lisp][sql]немного похвастаюсь , http://lisp.ru/forums.php?m=posts&p=6873 и ещё где-то писал, но не могу найти уже. Она является практическим доказательством того, что синтаксис S-выражений совершенно не обязателен для создания макросистемы, подобной лисповой
  • большая кнопка «применить миграции»
  • большая кнопка «собрать серверную часть», к-рая берёт кучу файлов *.lisp и по определениях объектов серверной части SQL собирает базу
  • при этом ошибки в DDL запросах к базе данных сразу показываются в исходных файлах .lisp, что не свойственно DSL на базе S-выражений. Таким образом получен гигантский профит и сделан вывод, что генерация других языков из S-выражений - это тупиковый путь для практики, а вот специализированные ридеры для встраивания других языков в CL - это как раз правильно.
  • при этом все исходные тексты базы - это тексты, соответственно их можно хранить в системе контроля версий и мерджить
  • Также с помощью DSL описаны пользовательские формы. Из этого описания генерируется либо форма, либо конфигурация объекта «controller», а форма в этом случае была написана на Delphi (была ещё версия для Qt когда-то, потом отмерла). Т.е. реальная форма состоит из части, генерируемой из лиспа, и классов на «клиентском» ЯП, который выполняет клиентские задачи.

Часть 2: конвертер БД По сути - просто большой скрипт, можно было обычный командный файл написать (*.bat в моём случае, в линуксе это был бы *.sh). Скрипт ночью качал базу. Благодаря тому, что в Common Lisp очень хороший Just In Time Debugger и горячая замена кода, многократно было сэкономлено много ночных часов - вместо перезапуска всего скрипта перезапускался в лучшем случае один запрос. Самое главное - что в дебаггере полноценный REPL, что позволяло провести диагностику в контексте транзакции базы данных.

Часть 3: сервер приложений Интегрировал складскую и торговую части. Ничего особенного, просто реализована трёхзвенка. Показал достаточную надёжность и лёгкость диагностирования. Неоднократно правился на горячую без перезапуска.

Часть 4: транслятор с 1С в Common Lisp Понадобилось ускорить один скрипт на 1С, поэтому был написан транслятор с 1С 7.7 на CL и немаленька часть рантайм-библиотеки. Процесс не был завершён по причинам, лежащим вне техники.

Под категорию production попадают часть 2 и 3.

ИСТОРИЯ 2:

Моя последняя работа. То, что G2 имеет отношение к Common Lisp, в принципе, известно и без меня, а в остальном я подписывал соглашение о неразглашении :) Если что-то уже наболтал - можете нагуглить сами :)

Есть и другие мелочи, но они меркнут на фоне данных двух.

Исходная версия den73, :

ИСТОРИЯ 1

Часть 1: Поддержка эволюции БД

  • migrations
  • описание структуры таблиц в виде DSL на s-выражениях (ключевое слово deftable), где также указаны констрейнты, заголовки полей для вывода в формах и прочие мелочи
  • описание всех вьюх, триггеров и хранимых процедур на DSL, причём основная часть DDL стейтмента сделана не в виде S-выражений, а прямо на языке базы данных.
  • система макросов для облегчения написания SQL-запросов, по сути калька с макросов Common Lisp. См. [lisp][sql]немного похвастаюсь , http://lisp.ru/forums.php?m=posts&p=6873 и ещё где-то писал, но не могу найти уже. Она является практическим доказательством того, что синтаксис S-выражений совершенно не обязателен для создания макросистемы, подобной лисповой
  • большая кнопка «применить миграции»
  • большая кнопка «собрать серверную часть», к-рая берёт кучу файлов *.lisp и по определениях объектов серверной части SQL собирает базу
  • при этом ошибки в DDL запросах к базе данных сразу показываются в исходных файлах .lisp, что не свойственно DSL на базе S-выражений. Таким образом получен гигантский профит и сделан вывод, что генерация других языков из S-выражений - это тупиковый путь для практики, а вот специализированные ридеры для встраивания других языков в CL - это как раз правильно.
  • при этом все исходные тексты базы - это тексты, соответственно их можно хранить в системе контроля версий и мерджить
  • Также с помощью DSL описаны пользовательские формы. Из этого описания генерируется либо форма, либо конфигурация объекта «controller», а форма в этом случае была написана на Delphi (была ещё версия для Qt когда-то, потом отмерла). Т.е. реальная форма состоит из части, генерируемой из лиспа, и классов на «клиентском» ЯП, который выполняет клиентские задачи.

Часть 2: конвертер БД По сути - просто большой скрипт, можно было обычный командный файл написать (*.bat в моём случае, в линуксе это был бы *.sh). Скрипт ночью качал базу. Благодаря тому, что в Common Lisp очень хороший Just In Time Debugger и горячая замена кода, многократно было сэкономлено много ночных часов - вместо перезапуска всего скрипта перезапускался в лучшем случае один запрос. Самое главное - что в дебаггере полноценный REPL, что позволяло провести диагностику в контексте транзакции базы данных.

Часть 3: сервер приложений Интегрировал складскую и торговую части. Ничего особенного, просто реализована трёхзвенка. Показал достаточную надёжность и лёгкость диагностирования. Неоднократно правился на горячую без перезапуска.

Часть 4: транслятор с 1С в Common Lisp Понадобилось ускорить один скрипт на 1С, поэтому был написан транслятор с 1С 7.7 на CL и немаленька часть рантайм-библиотеки. Процесс не был завершён по причинам, лежащим вне техники.

Под категорию production попадают часть 2 и 3.

ИСТОРИЯ 2:

Моя последняя работа. То, что G2 имеет отношение к Common Lisp, в принципе, известно и без меня, а в остальном я подписывал соглашение о неразглашении :) Если что-то уже наболтал - можете нагуглить сами :)

Есть и другие мелочи, но они меркнут на фоне данных двух.