Dsl ориентированность


#1

в свете задачи https://bitbucket.org/EvilBeaver/1script/issue/58

Возникает опасность в создание полноценного объектно-ориентированного языка, вместо основной фишки 1С - DSL языка. То есть - все же люди ждут объектов как в 1С конфигураторе с полезным применением, как верно заметил @EvilBeaver на Новом Году.

То есть объекты, с методами:

Конфигуратор.СоздатьБазу();
РабочаяБаза.ОбновитьФайлКонфигурации();

Вариантов 2:

  1. доработка 1Script - добавление объектов в ядро.
  2. создание библиотек для 1Script - создание управляющих Сценариев на самом языке

Вопросы подобного характера, странным образом становятся стратегическими и требуют архитектурной проработки.

P.S. Оставлю эту заметку здесь, чтобы не забыть при случае вернуться к этому вопросу


#2

По старому обычаю поделюсь наработками. Попробовал сделать наподобие JavaScript: в качестве основы для объекта используется структура, элементами которой могут быть значения типа Действие (как в 1С в обычных формах).

Получается что-то вроде такого:

Объект = Новый Структура("Метод", Новый Действие("ФункцияВЭтомМодуле"));
Объект.Метод();

Или более наглядно тут


#3

@lustin, имхо, я видел это, как другой проект на базе 1Скрипта. Ну т.е. ближе ко второму варианту - библиотека, которая низом использует скриптовый движок, а наверх выдает крупноуровневые методы типа “Сделай бэкап”.

Я за DSL язык поверх 1Скрипта, отдельным продуктом (см. тот же Gradle, который низом использует Groovy)

Технически это может быть, так, как ты сказал. Библиотечный скрипт или бинарь, подключаемый к основному движку.

P.S. а issue 58 я взял в работу из-за задачи по сокету. Нужен объект, метод которого дергать в качестве обработчика. В стартовом скрипте такого объекта нет.


#4

Согласен. На мой взгляд, как можно больше кода должно писаться на Скрипте, а в движок Скрипта закладывать как можно более низкоуровневые операции.


#5

Нашел https://atom.io/docs/v0.174.0/creating-a-package
То есть вроде как можно реализовать грамматику своего языка - но почему-то через regexp. Разбираюсь пока как это сделать

Исследование веду в части работы с resolve conflicts https://atom.io/packages/merge-conflicts
Уж очень красиво.


#6

ага, если еще blame вывести для конфликтных строк, что-бы сразу было видно кто и с каким комментарием изменял… Есть у меня мечта добавить это в meld.