Skip to content

Latest commit

 

History

History
115 lines (96 loc) · 10.4 KB

bsl-surface.md

File metadata and controls

115 lines (96 loc) · 10.4 KB

Поверхность языка BSL и стандартной библиотеки

Сводка, собранная из reference/OneScript/tests/*.os (186 файлов, формат xUnitFor1C). Ориентир для задач T3–T19 — что обязаны поддержать лексер/парсер/ рантайм/stdlib.

Полный справочник реализованных функций и объектов (с параметрами, возвращаемыми значениями, полями и методами) — reference.md. Здесь — поверхность языка по эталонным тестам, а не по текущей реализации.

Синтаксис (подтверждённые конструкции)

  • Модульная переменная: Перем юТест;
  • Структура модуля: #Использовать → Перем → процедуры/функции → исполняемый код; импорт после кода — ошибка, локальные Перем — в начале метода. Объявления после кода и вложенные методы — ошибка разбора. Возврат — только в методе (функция — со значением, процедура — без), Прервать/Продолжить — только в цикле, ВызватьИсключение; — только в Исключение.
  • Присваивание: имя = "Никита"; (в выражении = — сравнение на равенство).
  • Функции/процедуры: Функция Имя(Парам) Экспорт … Возврат X; КонецФункции, Процедура Имя() … КонецПроцедуры.
  • Условия: Если X Тогда … ИначеЕсли Y Тогда … Иначе … КонецЕсли;
  • Циклы: Для Сч = 0 По N Цикл … КонецЦикла;, Для Каждого Эл Из Коллекция Цикл … КонецЦикла;, Пока Условие Цикл … КонецЦикла;, Прервать;, Продолжить;
  • Исключения: Попытка … Исключение … КонецПопытки;, ВызватьИсключение "текст";
  • Объекты: Новый Массив, Новый Массив(2,4), индексация М[0] / М[1][2], методы М.Добавить(...).
  • Препроцессор: #Использовать asserts (встроенная библиотека, no-op) и #Использовать "lib/Модуль.osjs" — импорт файла: модуль или класс (ПриСозданииОбъекта). Путь — относительно текущего файла или от / (корень ФС в Node, корень сервера в браузере).
  • Строки: "…" (экранирование ""), многострочные |….
  • Литералы: Истина/Ложь, Неопределено, Null, числа, даты '20260101'.

Типы значений (двуязычные имена)

Число/Number, Строка/String, Булево/Boolean, Дата/Date, Неопределено/Undefined, Null, Массив/Array, Сценарий/Script, Обещание/Promise и др. Тип("Булево") и Тип("Boolean") — один тип; ТипЗнч(значение) — тип значения; Строка(значение) — строковое представление.

Глобальные функции (выборка)

Сообщить/Message (2-й аргумент — СтатусСообщения.*), Тип, ТипЗнч, Строка, Число, Pow, Мин/Макс, Окр, Найти, Сред, СтрНачинаетсяС/StrStartsWith, СтрЗаканчиваетсяНа, СтрРазделить, СтрСоединить, СтрШаблон, СтрЗаменить, СтрЧислоВхождений, СтрЧислоСтрок, СтрПолучитьСтроку, НСтр, Символ, КодСимвола, ОписаниеОшибки, ИнформацияОбОшибке(), КраткоеПредставлениеОшибки, ПодробноеПредставлениеОшибки, ЗагрузитьСценарийИзСтроки (резолвит #Использовать относительно имени сценария), ЗагрузитьСценарий (файл, только Node; импорты — относительно файла), XMLСтрока/XMLЗначение, Base64, ТекущаяДата, Приостановить/Sleep (кооперативная пауза) и др.

Методы коллекций (выборка)

Массив: Добавить, Удалить, Найти (индекс или Неопределено), Количество, ВГраница; многомерные через Новый Массив(2,4,…). Также Структура, Соответствие, ТаблицаЗначений, СписокЗначений, ДеревоЗначений.

HTTP-клиент (выборка)

HTTPСоединение/HTTPConnection: Получить/Get, ОтправитьДляОбработки/Post, Записать/Put, Удалить/Delete, Изменить/Patch, ПолучитьЗаголовки/Head, ВызватьHTTPМетод/CallHTTPMethod; свойства Сервер, Порт, Пользователь, Пароль, Таймаут, РазрешитьАвтоматическоеПеренаправление. HTTPЗапрос/HTTPRequest: АдресРесурса, Заголовки, УстановитьТелоИзСтроки/SetBodyFromString, УстановитьТелоИзДвоичныхДанных, ПолучитьТелоКакСтроку/GetBodyAsString, ПолучитьТелоКакДвоичныеДанные. HTTPОтвет/HTTPResponse: КодСостояния/StatusCode, Заголовки/Headers, ПолучитьТелоКакСтроку, ПолучитьТелоКакДвоичныеДанные, Закрыть/Close. Вызовы синхронные (как в эталоне); в браузере — CORS и запрещённые заголовки, прокси/SSL-сертификаты/файловое тело/потоки не поддерживаются.

Фоновые задания (выборка)

ФоновыеЗадания/BackgroundJobs (единственный МенеджерФоновыхЗаданий): Выполнить/Execute(Объект, ИмяМетода, Параметры?, Длительное?), Очистить/Clear, ОжидатьВсе/WaitAll(Задания, Таймаут?), ОжидатьЛюбое/WaitAny(Задания, Таймаут?), ОжидатьЗавершенияЗадач/WaitCompletionOfTasks, ПолучитьФоновыеЗадания/GetBackgroundJobs(Фильтр?), ПолучитьТекущее/GetCurrent. ФоновоеЗадание/BackgroundTask: свойства УникальныйИдентификатор/UUID, ИмяМетода/MethodName, Объект/Object, Состояние/State, Параметры/Parameters, Результат/Result, ИнформацияОбОшибке/ExceptionInfo; метод ОжидатьЗавершения/Wait(Таймаут?). СостояниеФоновогоЗадания/BackgroundJobState: НеВыполнялось/NotRunned, Активно/Active, Завершено/Completed, ЗавершеноАварийно/Failed. Модель кооперативная: задания разделяют состояние модуля, настоящего параллелизма нет; ТекущийПоток, БлокировкаРесурса и асинхронность языка (Асинх/Ждать) — вне scope.

Асинхронные методы (выборка)

Асинх/Async — модификатор перед Процедура/Функция; Ждать/Await — унарный оператор в async-методе и в исполняемом теле модуля (расширение; вне async-контекста Ждать/Асинх — обычные идентификаторы). Вызов async-метода сразу возвращает Обещание/Promise; Ждать даёт результат (для процедуры — Неопределено) или бросает исходную ошибку, ловимую Попыткой; повторное ожидание кэшируется, ожидание не-Обещания возвращает значение как есть. Параметры async-методов передаются по значению. Обещание непрозрачно: без конструктора и публичных методов/свойств; Строка(Обещание) = "Обещание". Необработанные ошибки async-процедур идут в console.error/stderr, сценарий продолжается.

Формат тестов (xUnitFor1C)

Функция ПолучитьСписокТестов(ЮнитТестирование) Экспорт
    юТест = ЮнитТестирование;
    ВсеТесты = Новый Массив;
    ВсеТесты.Добавить("ТестДолжен_ПроверитьВерсию");
    Возврат ВсеТесты;
КонецФункции

Процедура ТестДолжен_ПроверитьВерсию() Экспорт
    юТест.ПроверитьРавенство("0.1", Версия(), "Версия()");
КонецПроцедуры

Утверждения: юТест.ПроверитьРавенство(ожид, факт, msg), юТест.ПроверитьНеРавенство(...), юТест.Проверить(условие). Библиотека asserts (#Использовать asserts) — флюент: Ожидаем.Что(факт).Равно(ожид).