Обзор имеющихся библиотек OneScript

Программирование - Практика программирования

Экосистема OneScript активно развивается. Количество пользователей данного интерпретатора и имеющихся библиотек неуклонно растет, количество решаемых проблем - тоже. Однако остро встает вопрос некоторой разобщенности и размазанности информации по имеющимся библиотекам, их функциональности и проблемам, которые они решают. Данная статья призвана навести порядок в этой теме.

Введение

Для начала разберемся с терминами.
Тем, кто не знает, что такое OneScript, стоит познакомится с первой вводной статьей от самого автора Как решать повседневные задачи с помощью OneScript и с сайтом проекта OneScript. На Инфостарте недавно появилось несколько хороших статей на тему "быстрого старта".

Как только скриптописатель выходит за рамки Сообщить("Привет, мир!")  и начинает решать прикладные задачи, у него появляется желание найти какие-то готовые куски кода или целиком разработанную функциональность. Большинство полезных скриптов упаковывается в так называемые пакеты, упрощающие установку этих скриптов на локальную машину и их последующее использование.

Все пакеты делятся на два типа:

  1. Библиотеки, подключаемые в скрипты через директиву #Использовать и добавляющие разные полезные классы и модули
  2. и Приложения, которые помимо реализованной на OneScript логики имеют специальные обертки запуска из командной строки (cmd/sh). Часть приложений помимо запуска из командной строки позволяют себя подключать через #Использовать (т.е. как библиотеки), но это скорее бонус и желание разработчика приложения, чем возможность, на которую всегда можно надеяться.

Все более-менее работающие и известные пакеты собраны в двух местах:

  1. Организация oscript-library на github.com - https://github.com/oscript-library - содержит оригиналы или форки репозиториев, в которых ведется разработка пакетов. Там лежит весь исходный код, чаще всего там же находится и баг-трекер.
  2. Собранные пакеты выложены на специальном хабе пакетов http://hub.oscript.io/download/ - оттуда их можно скачать руками, если по каким-то причинам не работает пакетный менеджер. Страничка поражает своим минимализмом, но и Москве, как говорится, не сразу стало 870 лет.

Менеджер пакетов OneScript - opm

Перед обзором имеющихся пакетов я хочу немного рассказать о самом главном пакете-приложении в экосистеме OneScript - его пакетом менеджере. opm (onescript package manager) призван упростить установку, обновление и публикацию пакетов из/в хаб пакетов. Данный пакет входит в "стандартную поставку" движка OneScript и готов к работе с момента установки самого движка. С его помощью за одну команду можно установить любой доступный пакет.

Например, библиотека-помощник работы с Яндекс.Диском ставится с помощью команды opm install yadisk. Обновить все установленные пакеты разом можно через команду opm update -all, а opm install -all разом установит все доступные в хабе пакеты. Практически каждое приложение имеет встроенную справку по командам. Выполнив opm help мы получим информацию о всех имеющихся командах, а, например, opm help install выдаст справку конкретно по команде установки пакетов.

Пакетный менеджер имеет свой файл настроек, где можно указать, например, параметры подключения через прокси. Из особенностей работы отмечу лишь довольно очевидное ограничение прав. OneScript по умолчанию ставится в каталог C:/Program Files (x86)/OneScript (или в /usr/share/onescript на linux) и без прав администратора ни один пакет не обновится. Решение простое - либо выдаем себе права на каталог установки OneScript, либо запускаем командную строку от имени администратора/суперпользователя.

Библиотеки

Большая часть функциональности заложена в библиотеках. Здесь я перечислю и кратко опишу все библиотеки, доступные в хабе пакетов. Начну с так называемого "набора стандартных библиотек", поставляемого с OneScript, продолжу всеми остальными библиотеками в алфавитном порядке. После названия библиотеки будет идти ссылка на основной репозиторий, в котором ведется разработка. Иногда этот репозиторий будет вести на личный репозиторий автора библиотеки, однако, все перечисленные здесь библиотеки собраны в организации oscript-library на GitHub.com.

Поставляемые библиотеки

1commands - https://github.com/oscript-library/1commands

Библиотека для запуска различных приложений из OneScript.

Думаю, многие знают про 1сный метод ЗапуститьПриложение() - с его помощью можно запустить любое приложение (и даже открыть файл в ассоциированном приложении). Однако у него есть ряд недостатков:

  • Тяжело анализировать консольный вывод такого приложения
  • Не всегда удобно склеивать строку для запуска
  • Нет управления допустимыми кодами возврата
  • Приходится изобретать велосипед для запуска более сложных команд или последовательности команд под win/linux

Данная библиотека добавляет два класса для запуска приложений - Команда (если команда одна) и КомандныйФайл (если команд несколько). Пример запуска Команды из README проекта:

Команда = Новый Команда;

Команда.УстановитьКоманду("oscript");
Команда.ДобавитьПараметр("-version");	

// или сразу Команда.УстановитьСтрокуЗапуска("oscript -version");

КодВозврата = Команда.Исполнить();
Сообщить(КодВозврата);

Сообщить(Команда.ПолучитьВывод());

assertshttps://github.com/oscript-library/asserts

Реализация функциональности "утверждений" и "ожиданий".

В основном используется в тестах, однако так же позволяет, например, проверять текущее состояние скрипта - заполненность всех нужных параметров и их корректность.

Реализована в виде двух независимых модулей - Утверждения и Ожидаем. Каждый из этих модулей содержит функции проверки переданных значений - на равенство, тип, состав и прочее. Хорошая вводная статья и примеры использования опубликованы в виде статьи на Хабре. Использование этой библиотеки можно увидеть практически во всех пакетах, имеющих тестирование в том или ином виде.

МояПеременная = ВычислитьЧтоТоТам(); 

// xUnit style        
Утверждения.ПроверитьРавенство(1, МояПеременная, "Моя переменная должна быть строго равна 1");

// BDD style
Ожидаем.Что(МояПеременная).Равно(1);

cmdlinehttps://github.com/oscript-library/cmdline

Библиотека для разбора и декларативного задания аргументов командной строки.

OneScript при запуске скрипта позволяет получить все переданные скрипту аргументы через коллекцию "АргументыКоманднойСтроки", однако там они лежат в виде обычного массива строк. При разработке более сложных приложений появляется необходимость добавлять различные параметры-флаги, именованные и позиционные параметры, управлять составом команд... Тут на помощь приходит cmdline. С помощью класса ПарсерАргументовКоманднойСтроки можно указать все имеющиеся у скрипта параметры и/или команды и избавить разработчика от ненужной возни.

Парсер = Новый ПарсерАргументовКоманднойСтроки();

Парсер.ДобавитьПараметр("ПутьКФайлу");
Парсер.ДобавитьИменованныйПараметр("-action");

Параметры = Парсер.Разобрать(АргументыКоманднойСтроки);
Сообщить(Параметры["ПутьКФайлу"]);
Сообщить(Параметры["-action"]);

В данном случае при запуске скрипта через "oscript my_script.os -action МоеДействие C:\temp\tempFile.txt" в соответствии "Параметры" окажется два значения с заранее заданными ключами - "ПутьКФайлу" будет хранить в себе "C:\temp\tempFile.txt", а "-action" - "МоеДействие".

fshttps://github.com/oscript-library/files-common

Помощник по работе с файлами и каталогами.

Данная небольшая библиотека упрощает некоторые операции с файловой системой. В одну строку/вызов функции проверить, что файл или каталог существует, создать новый каталог, если его нет, рекурсивно скопировать все файлы из одного каталога в другой и тому подобное.

ФС.ОбеспечитьПустойКаталог("./build");
Если ФС.КаталогСуществует("C:\МойРабочийКаталог") Тогда
    ФС.КопироватьСодержимоеКаталога("C:\МойРабочийКаталог", "./build");
КонецЕсли;

gitrunnerhttps://github.com/nixel2007/gitrunner

Библиотека-обертка над командами git из OneScript.

Предоставляет "человекочитаемое" API для управления git-репозиторием в объектной технике. Стиль работы с библиотекой похож на v8runner (о котором чуть ниже).

ГитРепозиторий = Новый ГитРепозиторий();
ГитРепозиторий.УстановитьРабочийКаталог(ТекущийКаталог());

ГитРепозиторий.УстановитьНастройку("core.quotePath", "true", РежимУстановкиНастроекGit.Локально);

ГитРепозиторий.ДобавитьВнешнийРепозиторий("origin", "http://github.com/EvilBeaver/oscript-library");

ГитРепозиторий.ПерейтиВВетку("master");
ГитРепозиторий.Получить();

ГитРепозиторий.ОбновитьПодмодули(Истина, Истина);

jsonhttps://github.com/oscript-library/json

Библиотека работы с JSON - порт обработки Александра Переверзева.

Хотя в движке OneScript есть возможность потокового чтения JSON-строк, на мелких файлах намного удобнее (де-)сериализовать объект одной командой. Относительно авторской обработки были внесены некоторые исправления и улучшения, однако общий смысл остался тот же.

ПарсерJSON = Новый ПарсерJSON();

СтрокаJSON = "{
|    ""firstName"": ""Иван"",
|    ""lastName"": ""Иванов"",
|    ""address"": {
|        ""streetAddress"": ""Московское ш., 101, кв.101"",
|        ""city"": ""Ленинград"",
|        ""postalCode"": 101101
|    },
|    ""phoneNumbers"": [
|        ""812 123-1234"",
|        ""916 123-4567""
|    ]
|}";

Объект = ПарсерJSON.ПрочитатьJSON(СтрокаJSON);
		
Утверждения.ПроверитьРавенство(Тип("Соответствие"), ТипЗнч(Объект));

Сообщить(Объект.firstName);

logoshttps://github.com/oscript-library/logos

Логирование в стиле "взрослых языков".

Логирование - больная тема любого продукта, связанного с автоматизацией деятельности. Хочется включать и отключать отладочные логи, сохранять логи в файл и выводить их в консоль, может быть даже как-то их по-хитрому форматировать, управлять настройками из файла или из переменных среды... На все эти вопросы может ответить библиотека logos. Лучше один раз показать:

Лог = Логирование.ПолучитьЛог("oscript.app.messages"); // Инициализация лога
Лог.УстановитьУровень(УровниЛога.Информация); // Можно задать один из пяти уровней, например, Отладка

Лог.Информация("Информационное сообщение"); // выведется в лог
Лог.Отладка("Отладочное сообщение"); // а это - нет, т.к. уровень лога Информация выше, чем Отладка

stringshttps://github.com/oscript-library/strings

Порт модуля СтроковыеФункцииКлиентСервер на OneScript, ни больше ни меньше.

МассивСтрок = Новый Массив;
МассивСтрок.Добавить("Вася");
МассивСтрок.Добавить("пошел в");
МассивСтрок.Добавить("Зоопарк.");
	
// Функция должна объединить строки из массива в строку с разделителями
РезультатСоединения = СтроковыеУтилиты.СтрокаИзМассиваПодстрок(МассивСтрок, " ");
Ожидаем.Что(РезультатСоединения).Равно("Вася пошел в Зоопарк.");

tempfileshttps://github.com/oscript-library/tempfiles

Библиотека для создания временных файлов и каталогов.

Отличительной особенностью является создание файлов в некоторых "пулах", которые можно разом удалить методом ВременныеФайлы.Удалить(). Имеет два режима работы:

  1. Модуль ВременныеФайлы предоставляет общий пул временных файлов среди всех используемых скриптов
  2. Инициализация класса МенеджерВременныхФайлов создаст отдельный пул файлов, которым можно управлять независимо от всех остальных пулов.
ВременныйФайл = ВременныеФайлы.СоздатьФайл();
ВторойВременныйФайл = ВременныеФайлы.СоздатьФайл();

// мой очень полезный код

ВременныеФайлы.Удалить(); // удалит оба созданных временных файла

tool1cdhttps://github.com/oscript-library/tool1cd

Обертка над популярной утилитой для работы с файловыми базами от покинувшего нас Валерия Агеева.

Имеет два класса - ЧтениеТаблицФайловойБазыДанных и ЧтениеХранилищаКонфигурации, позволяющие вычитывать данные из файловых баз в виде таблиц значений.

ЧтениеБазыДанных = Новый ЧтениеТаблицФайловойБазыДанных;
ЧтениеБазыДанных.ОткрытьФайл(ФайлХранилища);
	
ТаблицаБД = ЧтениеБазыДанных.ПрочитатьТаблицу("VERSIONS");
Сообщить(ТаблицаБД.Количество());

ЧтениеБазыДанных.ЗакрытьФайл();

v8runnerhttps://github.com/oscript-library/v8runner

Один из самых популярных пакетов - запуск 1С в режимах Конфигуратора и Предприятие в объектной технике.

Позволяет забыть как страшный сон десятки различных флагов и параметров для запуска 1С из командной строки и поиск нужной версии установленной платформы, инкапсулируя это внутри класса УправлениеКонфигуратором. Список доступных методов в README безбожно устарел, для осознания всей мощи инструмента стоит заглянуть в исходники.

УправлениеКонфигуратором = Новый УправлениеКонфигуратором();

// контекст может быть и не задан, тогда работа выполняется в базе, созданной в каталоге временных файлов
УправлениеКонфигуратором.УстановитьКонтекст("/FC:\1cdb\mydatabase","Admin", "passw0rd");

УправлениеКонфигуратором.ЗагрузитьКонфигурациюИзФайла("C:\source.cf");
УправлениеКонфигуратором.ОбновитьКонфигурациюБазыДанных();

УправлениеКонфигуратором.ВыполнитьСинтаксическийКонтроль();

Прочие библиотеки

Помимо библиотек из "стандартного набора" в хабе есть и другие не менее замечательные разработки.

collections https://github.com/ret-Phoenix/OneScript-Collections

Расширенные коллекции для OneScript.

OneScript позволяет разрабатывать библиотеки не только на языке 1С, но и на C#. Особо желающие могут попробовать даже F#. Специально для тех, кому не хватает стандартных коллекций 1С, была создана данная библиотека. Она добавляет возможность использовать такие объекты как Стек и Очередь (Дек).

Очередь = Новый Очередь();

Очередь.Добавить("1");
Очередь.Добавить("2");
Очередь.Добавить("3");

Очередь.УбратьИзОчереди(); // в очереди останется 2 и 3

confluence https://github.com/bia-tech/os-confluence

Взаимодействие с confluence.

Первая библиотека из категории 1С+ЧтоТо. Позволяет из OneScript управлять страницами в Confluence (собственный взгляд компании Atlassian на Wiki). Создание страниц, их редактирование, получение информации - все это через RestAPI.

Подключение = Confluence.ОписаниеПодключения("https://confluence.myserver.ru", "user", "password");

ИдентификаторНовойСтраницы = Confluence.СоздатьСтраницу(Подключение, "SpaceKey", "Новая страница", "Содержимое новой страницы");
Confluence.ПрикрепитьМеткуКСтранице(ПараметрыПодключения, ИдентификаторНовойСтраницы, "Моя метка");

delegate https://github.com/artbear/delegate

Делегаты/функторы в 1С.

Тем, кто скучает по Функциям как Объектам Первого Класса или кому просто хочется немного функционального программирования, может понравится эта библиотека. С ее помощью можно создать что-то вроде указателя на процедуру или функцию, передать его как параметр в какой-нибудь другой метод и там его исполнить. Является переработкой библиотеки notify.

// Метод, вызываемый из делегата
Процедура Поздороваться(Имя) Экспорт
    Сообщить("Привет, " + Имя + "!");
КонецПроцедуры

Делегат = Делегаты.Создать(ЭтотОбъект, "Поздороваться", "Мир");

Делегаты.Исполнить(Делегат); // или Делегат.Исполнить();

ДелегатНовыйМир = Делегаты.Создать(ЭтотОбъект, "Поздороваться");

ДелегатНовыйМир.Исполнить("Новый мир"); // или Делегаты.Исполнить(ДелегатНовыйМир, "Новый мир");

extensions https://github.com/ret-Phoenix/onescript-extensions

Дополнительные возможности для OneScript, не вошедшие в движок.

Хотя авторы очень рады любым контрибьюторам движка, некоторые возможности все же не попадают в основной движок OneScript. Данный проект - площадка для экспериментов. Возможно какие-то вещи когда-нибудь все же окажутся в основной ветке, а пока вы можете подключить данную библиотеку. Например, для работы с буфером обмена или для получения параметров экрана.

Буфер = Новый БуферОбмена();
Буфер.Установить("есть!");
Ожидаем.Что(Буфер.Получить()).Равно("есть!");

fluent https://github.com/nixel2007/oscript-fluent

Обработка коллекций в "текучем" стиле.

Многие из авторов библиотек помимо 1С пишут на других языках. Автор данной библиотеки был "укушен Джавой", что натолкнуло его на идею обработки коллекций в "потоковом" или "конвейерном" стиле.

Массив = Новый Массив;
Массив.Добавить(3);
Массив.Добавить(4);
Массив.Добавить(7);
Массив.Добавить(5);
Массив.Добавить(7);
Массив.Добавить(0);

Результат = ПроцессорыКоллекций.ИзКоллекции(Массив)
	.Различные()
	.Фильтровать("Результат = Элемент >= 5")
    .Обработать("Сообщить(Элемент)")
	.Обработать("Результат = Элемент + 1")
	.ВМассив();

// На выходе два сообщения в лог (5 и 7) и массив [6, 8]  

ftp https://github.com/dmpas/oscript-ftp

FTP-клиент для OneScript.

Имя библиотеки говорит само за себя - работа с файлами по протоколу ftp.

Соединение = Новый FtpСоединение("example.com");

Соединение.Записать("/local/file.txt", "/dir/");

Файлы = Соединение.НайтиФайлы("/dir/", "file.txt");

Файл = Файлы[0];

РазмерФайла = Файл.Размер();

gui https://github.com/ret-Phoenix/oscript-simple-gui

Графический интерфейс в OneScript.

Одна из самых удивительных и неожиданных библиотек для OneScript. Добавляет возможность кодом создавать графический интерфейс для скриптов. Есть работа с таблицами и деревьями, кнопки, поля ввода и многое другое. Статья-анонс на Инфостарте от автора Сергея Ушакова - //infostart.ru/public/540284/

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

#Использовать gui

Перем Форма;

//# Обработка события первого открытия формы
Процедура ПриОткрытииФормы() Экспорт
    
    ПолеВвода1 = Форма.Элементы.Добавить("ПолеВвода1", "ПолеФормы", Неопределено);
    ПолеВвода1.Вид = Форма.ВидПоляФормы.ПолеВвода;
    ПолеВвода1.Заголовок = "Поле ввода";
    ПолеВвода1.Значение = "Значение задано из скрипта";

КонецПроцедуры

УправляемыйИнтерфейс = Новый УправляемыйИнтерфейс();
Форма = УправляемыйИнтерфейс.СоздатьФорму();

//# Устанавливаем обработку события ПриОткрытии
Форма.УстановитьДействие(ЭтотОбъект, "ПриОткрытии", "ПриОткрытииФормы");
Форма.Показать();

InternetMailhttps://github.com/dmpas/oscript-mail

Реализация протокола SMTP для отправки почти.

Повторение синтаксиса и классов 1С по работе с почтовыми сообщениями, но на C# и из OneScript. 

Сообщение = Новый ИнтернетПочтовоеСообщение;
Сообщение.Получатели.Добавить("receiver@mail.ru");
Сообщение.ОбратныйАдрес.Добавить("someuser@mail.ru");
Сообщение.Отправитель = "someuser@mail.ru";
Сообщение.Тема        = "Server is down";
Текст =  "
	|<h3>Server is down !</h3>
	|Надо что-то делать.<br/>";

Сообщение.Тексты.Добавить(Текст, ТипТекстаПочтовогоСообщения.HTML);
Сообщение.Вложения.Добавить("C:/Пример вложения 1.docx");
Сообщение.Вложения.Добавить(
        Новый ДвоичныеДанные("C:/Пример вложения 2.docx"),
        "Пример вложения 2.docx"
);

messenger https://github.com/oscript-library/messenger

Отправка сообщений в различные сервисы.

Еще одна интеграционная библиотека. На этот раз - для отправки сообщений. На момент написания статьи умеет отправлять SMS (через трех операторов), а так же писать сообщения в Slack, RocketChat, Gitter и Telegram. Слышал о "success story" с отправлением ошибок из Журнала Регистрации в Телеграм-чат с последующей раздачей по шапке получившим сообщение.

ИмяКомнаты = "organization/repo";
Мессенджер = Новый Мессенджер();
Мессенджер.ИнициализацияGitter(ТокенПользователя);
Мессенджер.ОтправитьСообщение(Мессенджер.ДоступныеПротоколы().gitter, ИмяКомнаты, "Всем привет!" );

notify https://github.com/nixel2007/notify

Создание и обработка объектов ОписаниеОповещения.

Не смотря на то, что асинхронных функций как таковых в OneScript нет, объект ОписаниеОповещения и идущий с ним в паре метод ВыполнитьОбработкуОповещения довольно хорошо подошли под реализацию Функций как Объектов Первого Класса, сохранив максимально приближенный к 1С синтаксис. Можно использовать, например, для реализации паттерна "функции обратного вызова" (коллбэка).

// Процедура-обработчик описания оповещения.
//
Процедура СообщитьПриветМир(Результат, ДополнительныеПараметры = Неопределено) Экспорт
    Сообщить("Привет, " + ДополнительныеПараметры + "!");
    ВызватьИсключение "Что-то произошло!";
КонецПроцедуры

// Создание объекта ОписаниеОповещения. Аналогично использованию "Новый ОписаниеОповещения("СообщитьПриветМир", ЭтотОбъект, "Мир")" в 1С.
ОписаниеОповещения = ОписанияОповещений.Создать("СообщитьПриветМир", ЭтотОбъект, "Мир");

// Выполнение обработки оповещения. Аналогично использованию ВыполнитьОбработкуОповещения(ОписаниеОповещения) в 1С.
ОписанияОповещений.ВыполнитьОбработкуОповещения(ОписаниеОповещения);

params https://github.com/artbear/params

Стандартизированное переопределение параметров командной строки из json-файлов конфигурации и переменных окружения.

Данная библиотека условно является надстройкой над библиотекой "cmdline". Используя вывод ПарсераАргументовКоманднойСтроки, анализируя наличие и содержимое файла настроек и переменных среды, позволяет получить итоговые значения параметров. У каждого типа задания параметра есть свой приоритет. Файлы настроек могут быть вложенными друг в друга через специальные поля-ссылки. Является продолжением идей библиотеки ReadParams.

Парсер = Новый ПарсерАргументовКоманднойСтроки();
Парсер.ДобавитьИменованныйПараметр("Параметр");

Параметры = ЧтениеПараметров.Прочитать(Парсер, АргументыКоманднойСтроки);

ParserFileV8ihttps://github.com/ret-Phoenix/parserV8i

Чтение и запись файла списка баз .v8i.

Обработка списка баз в виде соответствия, поиск баз по имени или пути. На сладкое - класс для очистки кэша.

Парсер = Новый ПарсерСпискаБаз;
Парсер.УстановитьФайл("tests/ibases.v8i");

Результат = Парсер.НайтиПоПути("http://localhost/lessons/");

Ожидаем.Что(Результат.Connect.String).Равно("Connect=ws=""http://localhost/lessons/"";");

progbar https://github.com/theshadowco/progbar

Консольный прогресс-бар.

В OneScript по сравнению с 1С добавлены возможности по взаимодействию с окном консоли. Перемещение курсора, перерисовка и прочие милые сердцу старых паскалистов/сишников вещи. Данная библиотека дает удобную возможность по рисованию и управлению консольным прогресс-баром.

ПрогрессБар = Новый ПрогрессБар();
ПрогрессБар.Начать(100, "Прогресс ");

Для Ит = 0 По 100 Цикл

    ПрогрессБар.СделатьШаг();
    Приостановить(200);

КонецЦикла;
ПрогрессБар.Завершить();

ReadParamshttps://github.com/Stepa86/ReadParams 

Чтение параметров скрипта из json-файла.

Выполняет десериализацию JSON-файла настроек в соответствие, поддерживает включение параметров из одного файла в другой через специальные поля-ссылки, а так же подстановку значений одних полей в другие.

записьТекста = Новый ЗаписьТекста(файлПараметров1);
ЗаписьТекста.ЗаписатьСтроку( "{""парам.Число"": 1, ""парам.Строка"": ""1"", ""парам.Булево"": true}" );
ЗаписьТекста.Закрыть();

прочитанныеПараметры = ЧтениеПараметров.Прочитать( файлПараметров1 );

// прочитанныеПараметры["парам.Число"] = 3;
// прочитанныеПараметры["парам.Строка"] = "3";
// прочитанныеПараметры["парам.Булево"] = Истина;

restler https://github.com/oscript-library/restler

Помощник работы с RestAPI.

Довольно молодая библиотека, родившаяся после нескольких мучительных дней работы с HTTPСоединением. Упрощает шаги по вызову различных http-сервисов, сама делает десериализацию, позволяет управлять кодом состояния. Имеет бедное README, однако уже зарекомендовала себя (личным примером) как отличный фундамент для построения более высокоуровневых интеграционных компонентов уже как минимум к пяти различным системам.

Клиент = Новый КлиентВебAPI();
Клиент.ИспользоватьСоединение(Новый HTTPСоединение("localhost"));
ИнформацияОПродажах = Клиент.Получить("sales/totals");

Для Каждого Инфо Из ИнформацияОПродажах Цикл
  Сообщить(СтрШаблон("Продано товара %1 на сумму %2", Инфо["nomenclature"], Инфо["sum"]));
КонецЦикла;

sqlhttps://github.com/ret-Phoenix/oscript-sql

Работа с SQL-базами из OneScript.

Изначально библиотека разрабатывалась для работы с sqlite - чтение и обработка Журнала Регистрации и собственные мини-базы (в том числе in-memory). На данный момент дополнительно поддерживаются MS SQL Server, MySQL и PostgreSQL.

Соединение = Новый Соединение();
Соединение.ТипСУБД = Соединение.ТипыСУБД.sqlite;
Соединение.ИмяБазы = ":memory:";
Соединение.Открыть();

Запрос = Новый Запрос();
Запрос.УстановитьСоединение(Соединение);
Запрос.Текст = "Create table users (id integer, name text)";
Запрос.ВыполнитьКоманду();

Запрос.Текст = "insert into users (id, name) values(1, @name)";
Запрос.УстановитьПараметр("name", "Сергей");
Запрос.ВыполнитьКоманду();

Запрос2 = Новый Запрос();
Запрос2.УстановитьСоединение(Соединение);
Запрос2.Текст = "select * from users where id = @id";
Запрос2.УстановитьПараметр("id", 1);
ТЗ = Запрос2.Выполнить().Выгрузить();

v8storagehttps://github.com/oscript-library/v8storage

Работа с Хранилищем 1С в стиле v8runner.

Библиотека является развитием идей и функциональности v8runner, специализируясь именно на работе с хранилищем.

ХранилищеКонфигурации = Новый МенеджерХранилищаКонфигурации();
ХранилищеКонфигурации.УстановитьКаталогХранилища(КаталогХранилища);

ХранилищеКонфигурации.ПрочитатьХранилище();

ХранилищеКонфигурации.СохранитьВерсиюКонфигурацииВФайл(НомерВерсии, ИмяФайлаКофигурации);

ТаблицаВерсий = ХранилищеКонфигурации.ПолучитьТаблицаВерсий();
МассивАвторов = ХранилищеКонфигурации.ПолучитьАвторов();

v8unpackhttps://github.com/dmpas/oscript-v8unpack

Порт компоненты для работы с контейнерами файлов 1С:Предприятие 8.

Среди людей, которые хоть раз занимались распаковой и анализом внешних обработок или конфигураций 1С (еще до 8.3.7), утилита v8unpack давно известна. Данный порт является переработкой данного приложения в виде компоненты на C# для вызова ее изнутри OneScript без всяких ЗапуститьПриложение(). На данный момент поддерживается только команда -parse в тех рамках, в которых она используется в приложении gitsync (о нем ниже).

#Использовать v8unpack

ЧтениеФайла = Новый ЧтениеФайла8("ПутьКФайлу");
Для Каждого мЭлемент Из ЧтениеФайла.Элементы Цикл
    Сообщить(мЭлемент.Имя);
    ЧтениеФайла.Извлечь(мЭлемент, "Каталог", Истина);
КонецЦикла;

vanessa-behaviorhttps://github.com/silverbulleters/vanessa-behavior2

Фреймворк для разработки через BDD, упакованный в виде пакета.

Не совсем "библиотека", но  по формальному признаку (отсутствие оберток для запуска из командной строки и наличия подключаемых модулей) отнесена в этот раздел. Используется для быстрой установки Vanessa Behavior на машину разработчика или в локальный каталог репозитория через команду opm install -l vanessa-behavior. Обращаю внимание, что данный пакет собирается из репозитория Vanessa-Behavior2, и может отставать по релизом от (пока еще) основного репозитория.

yadiskhttps://github.com/kuntashov/oscript-yadisk

Работа с Яндекс.Диск через RestAPI.

C помощью этого пакета можно автоматизировать загрузку/выгрузку файлов с помощью Яндекс.Диск, получать свойства диска (размер, свободное и занятое пространство), работать с корзиной и прочее. Вот здесь есть пример использования библиотеки от самого автора - отдельное приложение для загрузки файлов.

OAuth_Токен = "..."; // Используйте полученный токен для вашего приложения.

ЯндексДиск = Новый ЯндексДиск;
ЯндексДиск.УстановитьТокенАвторизации(OAuth_Токен);

ИмяФайла = Строка(Новый УникальныйИдентификатор) + ".txt";
ПутьНаДиске = "/test-folder/" + ИмяФайла;

ЯндексДиск.ЗагрузитьНаДиск("c:/data/file-to-upload.txt"), ПутьНаДиске);

Приложения

Как я писал выше, приложения - это те же самые скрипты для интерпретатора OneScript, но предназначенные для запуска из командной строки. При установке таких приложений через opm в PATH добавляются обертки в виде bat/sh-файлов, позволяющие запускать их без лишних телодвижений. Например, вместо строки

"C:\Program Files (x86)\OneScript\bin\oscript.exe" "C:\Program Files (x86)\OneScript\lib\gitsync\src\gitsync.os"

можно просто вызвать приложение "gitsync". Целью создания таких приложений является упрощение выполнения каких-то типовых задач "в одну строку", без написания собственных скриптов. Часто эти же запуск этих приложений встраивается в сборочные линии, например, на Jenkins CI. Аналогично библиотекам, часть приложений поставляется в "стандартном наборе", остальные доступны для установки через opm.

Поставляемые приложения

1bdd https://github.com/artbear/1bdd

Фреймворк для разработки через BDD в OneScript.

Приложение позволяет запускать проверки поведения по заранее написанным feature-файлам. Реализации шагов (step_definitions) описываются в виде скриптов для OneScript. Имеются возможности по пакетному запуску прогона фич, генерации реализаций шагов по feature-файлам, представление результатов отчета в формате jUnit, собственная библиотека шагов. Пакет может быть подключен как библиотека через #Использовать, например, для реализации программного запуска прогона сценариев и файлов задач (tasks) пакетного менеджера opm.

1bdd ./features -junit-out out/

1testrunner https://github.com/artbear/1testrunner

Фреймворк для разработки через TDD в OneScript.

Пакет является портом фреймфорка xUnitFor1C. Предназначен для запуска tdd-тестов. Реализация тестов описывается в виде скриптов для OneScript. Можно запускать отдельные тесты или каталог с тестами целиком. Так же, как и в 1bdd, есть представление результатов тестирования в виде отчета jUnit и подключение как библиотеки через #Использовать.

# запустит все тесты из каталога tests и сформирует отчет о результатах тестирования в каталоге build
1testrunner -runall ./tests xddReportPath ./build

gitsync https://github.com/oscript-library/gitsync

Синхронизация хранилища 1С с репозиторием git.

Наверное, самое известное приложение для OneScript. Осуществляет выгрузку каждого помещения в хранилище в виде коммита в git-репозиторий, переносит автора помещения, дату и текст сообщения. После начальной инициализации репозитория служебными файлами (указатель на версию хранилища и данные об авторах) выгрузку можно запустить командой

gitsync export c:/storage/zup src/cf

Прочие приложения

cpdb https://github.com/arkuznetsov/cpdb

Приложение-комбайн по работе базой данных в файловом формате и MS SQL Server.

Позволяет автоматизировать загрузку/выгрузку базы, отправку базы на Yandex.Диск, работу с сетевыми дисками, выполнять архивацию и прочие частые операции. С полным списком команд можно ознакомится в README проекта.

Пример выполнения бэкапа и отправки его на Я.Диск:

cpdb backup -sql-srvr MySQLName MyDatabase -sql-user sa -sql-pwd 12345 -bak-path "d:\MSSQL\Backup\MyDatabase_copy.bak"
cpdb putyadisk -file "d:\MSSQL\Backup\MyDatabase_copy.bak" -ya-token XXXXXXXXXXXXXXXXXXXXXXXXXXXXX -ya-path "/transfer/MyDatabase_copy.bak" -delsrc

deployka https://github.com/oscript-library/deployka

Развертывание конфигураций 1С.

Приложение позволяет автоматизировать обновление конфигураций из хранилища/файла конфигурации/файла обновления. Приятным дополнением является возможность управления активными сеансами через родные для 1С утилиты rac/ras.

# Блокировка базы с удалением всех сеансов
deployka session kill -ras myserver:1545 -db-user admin -db-pwd pass -lockuccode "123"
# Обновление конфигурации из хранилища
deployka loadrepo /FC:\Infobase C:\Хранилище1С -db-user admin -db-pwd pass -storage-user admin -storage-pwd pass -uccode "123"
# Обновление БД
deployka dbupdate /FC:\Infobase -db-user admin -db-pwd pass -uccode "123"
# Разблокировка базы
deployka session unlock -ras myserver:1545 -db-user admin -db-pwd pass

oscript-config https://github.com/nixel2007/oscript-config

Работа с файлом конфигурации OneScript oscript.cfg

Позволяет зачитывать и устанавливать настройки приложения oscript.exe из командной строки. Этот пакет необходим для работы системы автодополнения кода по библиотекам OneScript в редакторе кода Visual Studio Code.

> oscript-config get lib.system
C:\Program Files (x86)\OneScript\lib

> oscript-config set lib.additional "./oscript_modules"

packman https://github.com/oscript-library/packman

Сборка тиражных релизов конфигураций 1С:Предприятие 8.

Данное приложение позволяет автоматизировать создание поставки конфигурации, как в виде файлов поставки, так и в виде setup.exe. Дополнительно получившийся дистрибутив можно упаковать в zip-архив.

Простой пример работы:

packman load-storage С:/Хранилище1С -storage-user admin -storage-pwd pass
packman make-cf
packman МанифестПоставки.edf -out ./build -setup
packman zip-dist -in ./build -out ./dist

precommit1c https://github.com/xDrivenDevelopment/precommit1c

Приложение для разборки внешних обработок при выполнении коммита в git.

Помимо разборки обработок, данный пакет умеет собирать обработки обратно. Отличительной особенностью использования утилиты в виде пакета является возможность установки всех необходимых файлов в репозиторий в одну команду:

precommit1c --install

scenex https://github.com/arkuznetsov/scenex

Исполнитель сценариев, объявленных декларативно в JSON-файле.

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

Запуск:

scenex batch "./deploy_scenario.json"

Пример файла сценариев:

{
    "stages": {
        "Вывод справки oscript": {
            "description": "Вывод справки oscript",
            "tool": "oscript",
            "command": ""
        },
        "Вывод справки deployka (команда loadcfg)": {
            "description": "Вывод справки deployka",
            "tool": "deployka",
            "command": "help",
            "params": [
                "loadcfg"
            ]
        }
    }
}

vanessa-runnerhttps://github.com/silverbulleters/vanessa-runner

Автоматизация различных операций 1С-разработчика и dev-ops.

Приложение является большим комбайном из возможностей, частично портированных из других библиотек. Умеет разбирать и собирать файлы cf/cfe/epf/erf, упрощает запуск тестирования с помощью фреймворков Vanessa Behavior и xUnitFor1C, создавать и обновлять информационные базы, выполнять миграцию данных конфигураций, построенных на БСП, запускать синтаксический контроль с выводом результата проверки в формат jUnit, делать привязку баз к хранилищу. Полный список возможностей лучше изучать через вывод команды vrunner help. Конфигурируется через параметры командной строки, переменные среды и файл настроек в формате JSON. 

# Выполнение миграции
vrunner run --command "ЗапуститьОбновлениеИнформационнойБазы;ЗавершитьРаботуСистемы;" --execute $runnerRoot/epf/ЗакрытьПредприятие.epf --ibname /FC:\Инфобаза1С
# Запуск проверки поведения с помощью фреймворка Vanessa Behavior
vrunner vanessa --settings tools/vrunner.json --ibname /FC:\Инфобаза1С

Заключение

Данным обзором я постарался разом ответить на большинство вопросов вида "А есть ли библиотека/приложение для вот этого". Если вдруг готовой библиотеки не оказалось, не бойтесь писать свои и выкладывайте их на GitHub. Сообщество будет вам крайне благодарно :) Обсуждение имеющихся библиотек сосредоточено в Gitter-канале EvilBeaver/oscript-library и в Issues каждой конкретной библиотеки.

В следующей статье я опишу как создавать собственные библиотеки и приложения, готовые для публикации в хабе пакетов OneScript.

Спасибо за внимание!

P.S. В последнем релизе расширения поддержки языка 1С в VSCode появился полноценный Синтакс-Помощник по всем классам и модулям всех установленных библиотек. При наличии README в пакете выводится и он. Обновляйтесь, нажимайте ctrl-f1 и выбирайте в выпадающем меню новый раздел oscript-library. Так же не забывайте ставить пакет oscript-config для получения частичной поддержки автодополнения по модулям и классам библиотек прямо при наборе кода.

См. также

Комментарии
1. Артур Аюханов (artbear) 893 14.11.17 13:37 Сейчас в теме
Первое впечатление - очень круто и наглядно!
Спасибо.
TreeDogNight; awk; vlad.frost; +3 Ответить
2. Plague Fox (A1ice1990) 58 14.11.17 15:50 Сейчас в теме
Спасибо, обязательно повнимательнее позже прочту, да и сама OneScript давно пылиться без дела.
Первое ощущение от статьи "Python енто ти?"
3. Никита Грызлов (nixel) 281 14.11.17 16:27 Сейчас в теме
(2)
Первое ощущение от статьи "Python енто ти?"


если вопрос про opm, то он изначально делался с закосом под рубивский gem, а сейчас дописывается в духе npm.
vlad.frost; +1 Ответить
4. Андрей Овсянкин (Evil Beaver) 4387 14.11.17 17:51 Сейчас в теме
Героическая работа!
tsukanov; TreeDogNight; vlad.frost; +3 Ответить
5. Никита Грызлов (nixel) 281 14.11.17 18:01 Сейчас в теме
(4) спасибо :) от автора всей этой движухи это услышать особенно приятно
vlad.frost; +1 Ответить
6. script Мальчинко (script) 201 14.11.17 19:24 Сейчас в теме
А вызывать OneScript из 1С программно можно типа через OneScript = Новый("OneScript")?
7. Никита Грызлов (nixel) 281 14.11.17 19:40 Сейчас в теме
(6) на данный момент через Новый нельзя. Но можно через запустить приложение
8. Андрей Овсянкин (Evil Beaver) 4387 14.11.17 23:19 Сейчас в теме
(6) Нет, это две независимых друг от друга программы и вызывать одну из другой можно только запуская их в явном виде.

Но можно с небольшими допилками и при соблюдении границ применимости просто копипастить код из одной системы в другую
9. Алексей _ (iolko) 160 15.11.17 05:56 Сейчас в теме
Автору, респект. В пользуюсь давно уже многими пакетами, нереально упрощает жизнь. Переписал все свои наработки по автоматизации на односкрип, с vbs. Работа с каждым релизом становиться все более комфортной. Ошибки исправляются просто на лету.
10. Сергей Долинин (ImHunter) 15 15.11.17 07:14 Сейчас в теме
Супер! Очень вовремя! Как раз начал заниматься автоматизацией сборок.
11. Василий Казьмин (awk) 681 15.11.17 09:21 Сейчас в теме
Что значит "от покинувшего нас Валерия Агеева"?
12. Никита Грызлов (nixel) 281 15.11.17 09:34 Сейчас в теме
(11) к сожалению, значит как раз то, что кажется. Валерий скончался в этом году.
13. Василий Казьмин (awk) 681 15.11.17 09:39 Сейчас в теме
(12) Огромная и невосполнимая потеря.
19. Андрей Карпов (karpik666) 553 15.11.17 16:45 Сейчас в теме
(12) очень жаль, спасибо за информацию.
14. Максим *** (premier) 139 15.11.17 11:29 Сейчас в теме
(0) Не удалось осилить всего описания. Но труд, несомненно титанический: "+" .
Есть вопрос: а поддержка работы с Windows registry имеется?
15. Никита Грызлов (nixel) 281 15.11.17 11:44 Сейчас в теме
(14) не сталкивался. Может быть Сергей Ушаков что-то копал в этом направлении (по крайней мере он делал компоненту по работе со службами Windows, а где службы, там и реестр недалеко).

Но если мне не изменяет память, реестр физически хранится в виде файлов на диске. А файловый доступ и чтение/запись файлов есть. Библиотеки по работе с файлами ini-формата тоже есть, но, судя по всему, не в хабе.
16. Максим *** (premier) 139 15.11.17 11:53 Сейчас в теме
(15) У файлов Windows registry довольно сложный формат. Сам когда-то его изучал. Так без специальной обертки (библиотеки) работать с ними не просто. Автору проекта надо бы взять на заметку.
17. Василий Казьмин (awk) 681 15.11.17 16:39 Сейчас в теме
(16) Что мешает использовать "WScript.Shell"?


Новый СОМОюъект("WScript.Shell")
20. Максим *** (premier) 139 15.11.17 16:55 Сейчас в теме
(17) Что тогда мешает использовать в качестве сценарного движка Windows Script Host? Если всё равно придется на другом сценарном языке писать?
21. Артур Аюханов (artbear) 893 15.11.17 17:48 Сейчас в теме
(20) Код-то 1с будет, не какой-то другой.
очень удобно и просто.
Тем более, что примеров использования WSH для 1С полно.
Копипаст простейший.

Пойми - главное, что язык 1С, который мы знаем от и до, и пишем почти без Синтакс-помощника :)
35. Максим *** (premier) 139 16.11.17 10:25 Сейчас в теме
(21) Это-то я как раз понял. Но если код 1С, то почему бы не сделать обертку над некоторыми функциями WSH, чтобы не было копипаста, а был понятный для нас всех язык 1С? С регулярными выражениями та же история. Тоже использовать РегулярноеВыражение = Новый COMОбъект("VBScript.RegExp");?
36. Сергѣй Батанов (baton_pk) 212 16.11.17 10:31 Сейчас в теме
(35) регулярки есть : http://oscript.io/syntax/page/%D0%A0%D0%B5%D0%B3%D1%83%D0%BB%D1%8F%D1%80%D0­%BD%D0%BE%D0%B5%D0%92%D1%8B%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0­%B8%D0%B5


обёртку над WSH можно сделать, просто никому до сих пор это, видимо, не понадобилось.
37. Артур Аюханов (artbear) 893 16.11.17 10:46 Сейчас в теме
(35) У нас 1скрипт - это кроссплатформенный движок.
Регулярки будут работать не только в Винде, но и в Линуксе.
В отличие от WSH
38. Сергѣй Батанов (baton_pk) 212 16.11.17 10:58 Сейчас в теме
(37)
1скрипт - это кроссплатформенный движок.


это не мешает людям пилить сторонние библиотеки, завязанные на винду.
18. Серж Пеленг (Peleng) 18 15.11.17 16:42 Сейчас в теме
Вот интересно, когда я выложу разрабатываемый мной полноценный компилятор под .net с языка похожего на 1С меня сильно заклюют? Конечно все на стадии 0 пока, но возможности OneScript уже давно перекрыты... Беспокоит только как публика встретит...
Конечно язык отличается от 1С в связи с тем, что он типизирован и поддерживает нетовские штучки, но надеюсь программистам 1С будет очень легко с ним работать...
Черт за язык дернул, извините, но очень уж хочется знать интересно это кому-то или нет...
22. Артур Аюханов (artbear) 893 15.11.17 17:51 Сейчас в теме
(18) Уже есть реализации и для Go, но что-то не взлетает :)
Были и другие реализации, похожего на 1С-языка, не удачны.
Например, один из авторов такой реализации (Сергей Батанов) сейчас активнейший разработчик как раз OneScript :)

Вся фишка именно в совместимости с языком 1С, чтобы минимум расхождений.
23. Артур Аюханов (artbear) 893 15.11.17 17:52 Сейчас в теме
(18)
но возможности OneScript уже давно перекрыты

Вот тут бы поаккуратнее :)

Какие Ваши доказательства? (с)
25. Серж Пеленг (Peleng) 18 15.11.17 21:47 Сейчас в теме
(23) пока нет доказательств, еще месяца три по моим подсчетам до релиза альфы.. приблизительно... но сравнение не совсем корректное, конечно, т.к. у меня компилятор, а тут скриптовый движок, т.е. назначение не по всем пунктам может пересекаться...
говорю же, черт за язык дернул... проболтался раньше времени... фальстарт... :)
24. Андрей Овсянкин (Evil Beaver) 4387 15.11.17 18:17 Сейчас в теме
(18) В принципе, да, не так давно появился проект Гонец, но про него ничего сказать не могу, не запускал. Меня больше волнует другой момент: зачем сообществу несколько несовместимых движков? Даже если все другие будут лучше чем 1Script, то чем они будут лучше друг-друга? Это напоминает зарю становления браузеров. Последствия расхлебываем до сих пор.

Я точно клевать не буду, обещаю, но делать еще одно такое же, но другое - сомнительная идея.

Ну и да, наша лицензия MPL2 все-таки запрещает прямую копипасту в закрытые проекты.
artbear; awk; +2 Ответить
26. Серж Пеленг (Peleng) 18 15.11.17 21:50 Сейчас в теме
(24) я согласен с вами, на счет того, что в разнос пускать не желательно... но все же у меня компилятор, а у вас скриптовый движок, это разные ниши, хотя и пересекающиеся... вот и мозгую над тем, как бы сделать большую совместимость...
28. Никита Грызлов (nixel) 281 16.11.17 00:07 Сейчас в теме
(26) я видимо чего-то не знаю, но с каких пор на c# можно писать что-то компилируемое? .Net runtime же все равно нужен, CLR и прочее.
30. Алексей Лустин (lustin) 868 16.11.17 00:39 Сейчас в теме
(28) чую я там может быть Kotlin, а не C#
33. Сергѣй Батанов (baton_pk) 212 16.11.17 09:31 Сейчас в теме
(28)
.Net runtime же все равно нужен, CLR и прочее.


нынче это тоже считается компиляцией. В противовес интерпретации, когда каждый раз бегаешь именно по исходникам. Так-то ОднСкрипт тоже компилируется в свой байткод.
39. Серж Пеленг (Peleng) 18 16.11.17 11:42 Сейчас в теме
(28) да, вы не в курсе... C# компилирует в IL, но при первом запуске программы IL компилируется в машинный код JIT компилятором... т.е. реально работает машинный код. CLR это как бы окружение работающей программы, т.е. разного рода внешний по отношению к программе код, выполняющий разные служебные действия... ну и набор базовых библиотек заодно... JIT компилятор связывает CLR и вашу программу в одно целое...
27. Серж Пеленг (Peleng) 18 15.11.17 22:07 Сейчас в теме
(24)
проект Гонец
посмотрел проект Гонец... у него конечно особая ниша, он возможно понравится тем кто одновременно пишет на 1С и GO.... цитата: "позволяет создавать высокопроизводительные вэб-приложения и микросервисы, с низким треббованием к системным ресурсам". Т.е. позиционирует себя не так, как 1Скрипт и вряд ли пересечется из-за завязанности на GO...
А я круче замахнулся и не факт, что сдюжу :)... у меня фактически конкурент C# и VB.Net намечается :) шучу...
48. IntelInside (G) (IntelInside) 126 17.11.17 21:37 Сейчас в теме
(24)
Меня больше волнует другой момент: зачем сообществу несколько несовместимых движков?

Ответ:
1) Политика 1С
2) Амбиции
3) Проблемы монетизации
4) Невыраженность Миссии проекта
Можно поговорить на эти темы. Если что, то пункт "2" я перерос. Большое дело можно сделать только командой и никак иначе.

Почему 1с++ v7 так и не дал БСП++? Бух++? и т.д.++?
29. Алексей Лустин (lustin) 868 16.11.17 00:38 Сейчас в теме
(18) история с WScript.Sheell мы уже проходили - ключевое слово "Серый кардинал" http://forum.script-coding.com/viewtopic.php?id=2496

По ссылке можно внезапно обнаружить никнейм artbear и неизбежное ИМХО в постах.

Почему отказались и переросли - можно долго диccкутировать, но EvilBEaver в статье на ХабраХабр немного затронул эту тему в своей статье https://habrahabr.ru/post/301064/

1Script - автоматиматизация русскокодирующих программистов бех холиваров какой скриптовый язык выбрать... и главное кроссплатформенный

(20) не заклюём, но лично я НЕ пойму - опять же советую обратить внимание на всех нас... после появления 1Script большинство из нас выбросило свои поделки (вы когда-нибудь видел Groovy на русском ?) и начали решать свои задачи с помощью экосистемы.

зачем надо пилить Гонец - мне не понятно, можно было эти силы направить на доработку v8unpack и на доработку движка и сразу получить все плюшки и уважуху.

то же самое касается и вашего будущего продукта - зачем ? почему это время не потратить на форк и pull-request ?

Электронная подпись коммита на GitHub теперь позволяет четко видеть вклад каждого... По крайней мере за перебивкой копирайтов вроде как никто не был замечен.


P.S. все опечатки сделаны сознательно для эффффекта.

P.S. (24) повторюсь - попробуйте сделать функциональность которую вам нужно на 1Script - быстрей получите благодарных бета-тестеров.
31. Егор Иванов (Infactum) 219 16.11.17 06:54 Сейчас в теме
(29) По вашей логике можно было не тратить силы на 1Script а пользоваться Python. Много базового функционала, написанного для 1Script, не пришлось бы делать с нуля. Это я не холивара ради :-)
И про мантру "русскоговорящие" программисты не могут / не хотят изучать другой язык (путь даже очень простой) помню. Но за таких "программистов", честно говоря, стыдно.
Но как известно, сослагательного наклонения в истории нет, так что спасибо всем активным разработчикам 1Script за инструменты решения некоторых повседневных задач.
32. Сергѣй Батанов (baton_pk) 212 16.11.17 09:17 Сейчас в теме
(18)
но возможности OneScript уже давно перекрыты

работа с конфигуратором? гитсинк? Если да, то с удовольствием бы посмотрел!

когда я выложу разрабатываемый мной полноценный компилятор под .net с языка похожего на 1С

я немножко потроллю, но пока вы там его втихаря в одиночку разрабатываете, тот же самый ОдноСкрипт может уже вас опередить на этом поприще ;-)
40. Серж Пеленг (Peleng) 18 16.11.17 13:27 Сейчас в теме
(32) я писал только про возможности языка, но не про библиотеки... и я не оспариваю ценность OneScript... в конце концов живут же вместе Java и JavaScript, Vb.Net и Vb.Script... и каждому находится свое применение... языков много именно потому, что каждый кому-то приглянулся... и Microsoft сделала великую вещь, позволив языкам работать сообща, особенно после выхода на кроссплатформенность...
41. Сергѣй Батанов (baton_pk) 212 16.11.17 13:40 Сейчас в теме
(40)
я писал только про возможности языка

а, ну тут не хитро дело переплюнуть :-)
43. Серж Пеленг (Peleng) 18 16.11.17 13:57 Сейчас в теме
(41) к сожалению, оказалось, что чем дальше в лес, тем больше дров... когда стал делать классы, интерфейсы, перечисления и т.д., то свет в конце тоннеля несколько потускнел... но через годик прояснился... еще месяца три и выложу на обозрение... а пока благодарен всем, кто написал пару слов... уже понятно, что какой-то интерес будет...
34. Василий Казьмин (awk) 681 16.11.17 09:45 Сейчас в теме
(18) В чем будет изюминка? Если отличия надо изучать, то не проще будет взять другой существующий язык?
42. Серж Пеленг (Peleng) 18 16.11.17 13:49 Сейчас в теме
(34)
В чем будет изюминка? Если о
к сожалению, отличия надо будет изучать, но они не велики и связаны в основном тем, что язык будет типизированным...
Изюминка только в том, что программисту 1С становится доступным весь функционал .Net...
Например, такое вот:

ИмпортИмен System.Collections.Generic
Словарь = Новый Dictionary<Строка,Целое>{{"ключ1",1},{"ключ2",2}}

уже можно свою dll написать и потом хоть в C# ее используй, хоть в 1С...
думаю найдется применение...
44. Василий Казьмин (awk) 681 17.11.17 09:28 Сейчас в теме
(42)
Словарь = Новый Dictionary{{"ключ1",1},{"ключ2",2}}


Данную конструкцию можно и сейчас написать в C#. И все будет работать. В чем смысл? Почему не взять C#?

Например: Есть java, а есть groovy. Groovy позволяет писать программы гораздо быстрее за счет сокращения количества строк кода.

В чем же преимущества вашего языка?
45. Серж Пеленг (Peleng) 18 17.11.17 13:05 Сейчас в теме
(44)
Groovy позволяет писать программы гораздо быстрее за счет сокращения количества строк кода.
но, тем не менее, на него почему-то все толпой не побежали... люди продолжают писать на десятках других языков... и причин этому много... мне, например, нравится писать на родном языке, что бы там не говорили другие... сейчас у меня такой возможности нет, точнее у меня уже есть :), а как решу, что уже можно в народ пустить, то и еще у кого-нибудь появится, надеюсь месяца за три достаточно отладить...
вместо Dictionary надо было конечно написать Соответсвие, это я просто из теста скопировал, когда Соответствия у меня еще не было...
И, кстати, я тоже придумал немного фишек для сокращения строк кода по сравнению с языком 1С от которого естественно отталкивался.... однако, за годы программирования на языке 1С я уже привык, что "многа букаф" это даже хорошо, особенно в свете появления хороших распознавателей речи... сейчас можно код диктовать, а делать это удобнее полными словами, чем разными значками и символами...
46. Василий Казьмин (awk) 681 17.11.17 17:31 Сейчас в теме
(45) Я привел пример "изюминки". Если вы не готовы ответить на вопрос: "В чем "изюминка" вашего языка" - будучи разбуженным посреди ночи, то можете забить на то, что кто-то кроме вас будет его использовать.

В OneScript изюминка - это похожесть до безразличия на 1С.
47. Серж Пеленг (Peleng) 18 17.11.17 18:27 Сейчас в теме
(46) я думаю, что изюминка OneScript в другом, он дает программисту 1С новые возможности на знакомом языке... хотя вам все равно понадобиться некоторое время на изучение, что бы начать им пользоваться... изучить новые библиотеки, подумать в каких задачах сможете использовать...
того же пытаюсь добиться и я... например, можно написать внешнюю компоненту к 1С на знакомом языке... или написать DLL на языке 1С и отдать ее в проект на C#... или утилитку какую-нибудь быстренько написать... да мало-ли еще новых возможностей появляется... надеюсь, что народ примет, а там посмотрим...
49. IntelInside (G) (IntelInside) 126 17.11.17 22:29 Сейчас в теме
(47)
Словарь = Новый Dictionary<Строка,Целое>{{"ключ1",1},{"ключ2",2}}

Вы используете uniforn initialization form {..}. Это требует от русского программиста еще чаще переключать раскладку. Зачем? Вы explicity указываете типы для Dictionary. Зачем? Они могут быть выведены из строки инициализации. Хотелось бы видеть объявление типа Dictionary. И т.д. и т.п.

По видимому вы увлечены C# и реализуете 1С#. Но язык 1С - это Бейсик. Политика 1С - это простота. Сообщество привыкло к простому языку. Разрабатывая язык Вы в первую очередь разрабатываете синтаксис. Все языки отличаются, в конечном итоге, только синтаксисом. После того, как на языке начинают писать код, синтаксис поменять становится архисложно. Это очень большая проблема.

И вообще. На том пути по которому Вы идете расшибли лоб об стену с десяток серьезных людей. В кровь, говно и слезы расшиблись. Нужно быть очень смелым и сильным человеком, чтобы пытаться изменить мир в одиночку. Подумайте над идеей присоединиться к команде OneScript. Или... Или никогда ни с кем не советуйтесь. Это делает человека слабее. Свое видение мира в мир нужно "вбить" и он покорится.

Удачи. Я думаю Вы сделаете правильный выбор.
50. Андрей Овсянкин (Evil Beaver) 4387 18.11.17 17:16 Сейчас в теме
(49)
Подумайте над идеей присоединиться к команде OneScript


Я сознательно не подключаюсь к беседе, ибо уже высказался. И фраза взятая в цитаты попала сюда случайно и никаких намеков не делаю ;) Но, если будет желание добавить в 1Скрипт компиляцию в байт-код MSIL - милости просим.
51. IntelInside (G) (IntelInside) 126 18.11.17 17:56 Сейчас в теме
(50)
Хотя об очках я подумываю уже серьезно, но не настолько чтобы '++' сливалось в '#'.

В качестве вдохновения для будущего (ох...) JIT у меня на операционном столе LLVM (swift, WebAssemly, etc.). Еще MSIL я просто не потяну, да и не вижу смысла - MS меня уже один раз с VB6 кинул.

Над чем я сейчас хожу кругами - это google-gRPC компонента и, соответственно, protocol-buffers compiler для 1С-бейсик. Вернее для ES Language, который видится мне развитием 1С-бейсик. С классами, функторами, плюшками и т.п.

Я от корки до корки прочитал весь http://oscript.io , но не нашел миссии Вашего проекта. Вернее Вашего отношения к развитию языка. Вы видите OneScript исключительно классическим 1С-бейсиком? Принципиально? Тогда не удивительно, что появляются Гонец, я, '1С-Peleng' и проч. Все хотят развития, а не того же самого вид с боку. Прежде чем заняться своими классами и компиляторам я много над этим думал и пришел к выводу, что это системная проблема цивилизации 1С. Угрожающая, кстати, и самой 1С и всему сообществу.

Если Вы где-то высказывались уже на эту тему - просто киньте ссылку. Ей богу не находил.

Спасибо.
Оставьте свое сообщение