Новое в версии 2.0

Executor IDE

Прекращение поддержки

Завершение поддержки и развития Executor IDE. Для написания и отладки скриптов используйте плагин для среды разработки Visual Studio Code.

Отладка

Новые возможности отладки

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

Встроенный язык

Модификатор «исп»

Реализована возможность использовать модификатор исп без объявления переменной. Это нужно, чтобы захватить Закрываемое значение, которое будет закрыто автоматически при выходе из текущей области видимости.

Функциональные типы

Добавлены функциональные типы.

Пространство имен «Стд»

Включен автоимпорт всех пространств имен из Стд. Больше нет необходимости вручную импортировать пространства имен из Стд.

Интерполяция строк

Строковые литералы поддерживают интерполяцию строк.

Операции

Добавлены операции:

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

Изменен обобщенный синтаксис литералов Байты, Ууид, Время, Дата, ДатаВремя, Момент, ЧасовойПояс:

Байты{FF01AA}
Ууид{3298d7dd-93f5-4778-9084-14afb7fc89ca}
Время{12:00}
Дата{2020-01-01}
ДатаВремя{2020-01-01 12:00}
Момент{2020-01-01 12:00 Z}
ЧасовойПояс{Europe/Moscow}

Изменен синтаксис литерала типа на Тип<ИмяТипа>, например Тип<Строка>.

Ключевое слово «ничто»

Добавлено ключевое слово ничто. Его можно использовать только в качестве:

  • типа возвращаемого значения метода (для общности), что равносильно отсутствию указания типа;
  • типа результата функционального типа.

ничто нельзя никуда присвоить и с ним нельзя никак взаимодействовать.

(XXX)→YYY можно присвоить в (XXX)→ничто.

Запрещено вызывать «процедуры» как «функции»

Запрещено вызывать методы, не возвращающие значение, так, как будто они возвращают значение.

Исключение составляет системный метод Вычислить():

  • При этом вызов процедуры должен быть последним, т. е. результатом всего Вычислить();
  • Результатом вычисления будет значение Неопределено .
Обобщенные типы

Добавлены обобщенные типы.

Синтаксис обобщенных типов

Больше не поддерживается синтаксис обобщенных типов без явного указания параметров типа. Все типы встроенных коллекций теперь обобщенные. Нельзя написать просто Массив — нужно всегда явно задавать параметры типа (если он не может быть автоматически выведен).

Системные обобщенные методы

Реализованы системные обобщенные методы — методы, имеющие тип-параметр, влияющий на типизацию метода.

Такой метод может быть вызван для аргумента (аргументов), типы которых определяются типом-параметром метода. Таким же образом тип результата метода может быть связан с типом-параметром метода.

Синтаксис вызова с указанием типа:
имя-метода<имя-типа-1, ..., имя-типа-N>(параметры)

Методы, которые становятся обобщенными:

Минимум<имя-типа это Сравнимое>(имя-типа, имя-типа) 
ЧитаемоеСоответствие<тип-ключа, тип-значения>
.ПолучитьИлиУмолчание<тип-умолчания>(
     ключ: тип-ключа, 
     умолчаниетип-значения|тип-умолчания
): тип-значения|тип-умолчания 
ЗапланированныеЗадания.Создать<имя-типа-1, имя-типа-2>(
     обработчик: (имя-типа-1, имя-типа-2)->Объект?, 
     параметр-1: имя-типа-1, 
     параметр-2: имя-типа-2
) 
ФоновыеЗадания.Выполнить<имя-типа-1, имя-типа-2>(
     обработчик: (имя-типа-1, имя-типа-2)->Объект?, 
     параметр-1: имя-типа-1, 
     параметр-2: имя-типа-2
) 
Именованные параметры

Добавляется возможность вызывать методы и конструкторы с именованными параметрами. Можно смешивать позиционную и именованную формы в вызове. Все именованные параметры должны идти после позиционных.

Аннотации во встроенном языке

Реализованы аннотации во встроенном языке.

Доступна аннотация @ИменованныеПараметры, которая может быть размещена на методах и конструкторах. Данная аннотация запрещает вызывать метод с позиционными аргументами (допускаются только именованные аргументы).

Пример метода с аннотацией:
@ИменованныеПараметры 
метод Тест(Параметр: Число) 
;
Создание экземпляра по известному типу
Реализовано создание экземпляра типа по известному типу во время работы приложения. Добавлен метод Тип.СоздатьЭкземпляр().
Регулярные выражения

Реализованы регулярные выражения.

Для работы с регулярными выражениями используется новый тип Образец. Для него реализован литерал вида '\W+'.

Для работы с совпадениями используется новый тип Совпадение. Он описывает очередное совпадение и работает с подстроками, захваченными группами захвата.

Расширен тип Строка:

  • добавлены методы Строка.Содержит(), Строка.ПолноеСовпадение();
  • добавлены перегрузки для методов Строка.Разделить(), Строка.Заменить().

В случае некорректного синтаксиса регулярных выражений выбрасывается исключение ИсключениеНекорректноеРегулярноеВыражение.

Отражение свойств типов

Реализовано отражение свойств типов:

  • перечисление имеющихся свойств,
  • установка значений и чтение значений свойств через отражение.
Форматирование и округление чисел

Добавлена возможность форматирования чисел через вызов метода Число.Представление(Формат: Строка) по строке форматирования Формат.

Поведение метода Число.Представление() (без параметров) изменилось. Теперь результатом будет строка, содержащая исходное число, отформатированное в соответствии с форматной строкой "_".

Добавлено перечисление РежимОкругления с режимами округления чисел. Метод Число.Округлить() теперь принимает режим округления. Добавлена перегрузка метода Число.Округлить(), принимающая только режим округления и округляющая число до целого в соответствии с заданным режимом.

Добавлена перегрузка метода Число.ВСтроку(), позволяющая переводить число в другие системы счисления.

Прикладная функциональность

Списки отозванных сертификатов ЭЦП

Добавлена поддержка чтения и генерации списков отозванных сертификатов электронной цифровой подписи (ЭЦП) в формате CRL.

Добавлены типы криптографии:

  • СписокОтозванныхСертификатов,
  • ГенераторСпискаОтозванныхСертификатов.

Тип генерации сертификатов ЭЦП ПараметрыСертификата переименован в ГенераторСертификата.

Для сертификата добавлена возможность при генерации указать адрес сертификата издателя, точки распространения списков отзыва и сервиса OCSP (Online Certificate Status Protocol).

Чтение даты и времени из JSON

Методы ЧтениеJSON.ПрочитатьСодержимоеКакДата() и ЧтениеJSON.ПрочитатьСодержимоеКакВремя() теперь умеют читать значения из представления даты и времени. Например, из строки "2021-01-01 10:11:12". Контроль «отсечения» лишних частей даты и времени лежит на параметрах этих методов ИгнорироватьДату и ИгнорироватьВремя.

Методы СериализацияJSON.ПрочитатьМассив(), СериализацияJSON.ПрочитатьОбъект() и СериализацияJSON.ПрочитатьСоответствие() умеют считывать значения из представления даты и времени в поля структур с типами Дата или Время. Например, из строки "2021-01-01 10:11:12". Контроль «отсечения» лишних частей даты и времени лежит на свойстве НастройкиЧтенияОбъектовJson.ИгнорироватьЛишниеЧастиДатыВремени.

Пустые части даты и времени игнорируются по умолчанию. Например, "2021-01-01 00:00" для типа Дата и "0001-01-01 10:11:12" для типа Время.

Работа с пустыми значениями и коллекциями в JSON

У типа НастройкиЗаписиОбъектовJson, используемого в методе СериализацияJson.ЗаписатьОбъект(), появились новые свойства:

  • НастройкиЗаписиОбъектовJson.ПропускатьНеопределено — при записи объекта в JSON будут пропущены свойства со значением Неопределено;
  • НастройкиЗаписиОбъектовJson.ПропускатьПустыеКоллекции — при записи объекта в JSON будут пропущены свойства со значениями с типом коллекций, если они пусты.

У типа НастройкиЧтенияОбъектовJson, используемого в методах СериализацияJSON.ПрочитатьМассив(), СериализацияJSON.ПрочитатьОбъект() и СериализацияJSON.ПрочитатьСоответствие(), появились новые свойства:

  • НастройкиЧтенияОбъектовJson.ИнициализироватьОтсутствующиеПоля — при чтении из JSON, отсутствующие поля у структур будут заполнены явными значениями инициализации (Неопределено имеет приоритет);
  • НастройкиЧтенияОбъектовJson.ИнициализироватьПустыеКоллекции — при чтении из JSON, отсутствующие поля структур с типами коллекций будут инициализированы пустыми значениями этого типа.
Тип «ХешированиеДанных»

Тип ХешированиеДанных теперь умеет вычислять хеш на основе различных типов данных. Ранее это было возможно только для типов Байты и ПотокЧтения.

Реализован новый метод ХешированиеДанных.Хеш(), который упрощает вычисление хеша. Например:

знч Значение = новый ДатаВремя(2022, 4, 1) 
знч Хеш = ХешированиеДанных.Хеш(Значение, АлгоритмХеширования.Sha1) 

Для хеширования строк появилась возможность указать кодировку, например:

знч Хеш = ХешированиеДанных.Хеш("Какое-то строковое значение", 
                                 АлгоритмХеширования.Sha1, 
                                 "UTF-16") 
Тип «ГенераторQrКода»

Реализован тип ГенераторQrКода, поддерживающий генерацию QR-кодов для текста, телефона, почты, визитной карты, подключения Wi-Fi, URL, календарного события.

Тип «ПотокЧтения»
  • Добавлен метод КопироватьВФайл. Метод реализует частый сценарий и исключает явную работу с ресурсом (потоком записи для файла) и риск забыть закрыть поток записи.
  • Добавлен метод ПрочитатьКакСтроку. Отличие от удаленного метода ПрочитатьКакТекст — удаляется UTF-8 BOM при чтении из потока.
  • Добавлен метод ПрочитатьКакБайты.
Тип «ЗаписьZip»

Добавлена поддержка многопоточного сжатия при создании zip-архивов. Максимальное количество потоков для сжатия можно указать в конструкторе ЗаписьZip; по умолчанию значение равно единице. Количество потоков для сжатия будет выбираться исходя из технической возможности использовать многопоточное сжатие и некоторых параметров.

Переименования

Во встроенном языке:

  • Ключевое слово любой переименовано в неизвестно,
  • Ключевое слово enumeration переименовано в enum.

В системе типов:

  • У типа Форматируемое метод Форматировать переименован в Представление()
  • Метод глобального контекста Число заменен на конструктор
    новый Число()
  • Метод глобального контекста Булево заменен на конструктор
    новый Булево()
  • Метод глобального контекста Строка удален. Вместо него следует использовать метод Объект.ВСтроку()
  • Тип СимволыМенеджер переименован в Символы,
  • Тип ФиксированныйМассив переименован в ЧитаемыйМассив,
  • Тип ФиксированноеСоответствие переименован в ЧитаемоеСоответствие,
  • Тип ФиксированноеМножество переименован в ЧитаемоеМножество,
  • Тип ФиксированнаяКоллекция переименован в ЧитаемаяКоллекция,
  • Тип ФиксированныеЗаголовкиHttp переименован в ЧитаемыеЗаголовкиHttp,
  • Тип ВременнаяЗона переименован в ЧасовойПояс,
  • Статический метод ВременнаяЗона.Текущая() переименован в ЧасовойПояс.Текущий(),
  • Удалены типы ДиапазонТекста и АдминистрированиеДиапазонПортов. Вместо них следует использовать обобщенный тип Диапазон.

Глобальное переименование:

  • Идентификатор переименован в Ид,
  • ИнформационнаяБаза переименован в Инфобаза,
  • ОткрытьПотокДляЧтения переименован в ОткрытьПотокЧтения.