Встроенный язык 1С: где он на шкале от ассемблера до Python

· 9 мин

Содержание

Встроенный язык 1С относится к языкам высокого уровня. Он не привязан к процессору, не работает с адресами памяти и исполняется виртуальной машиной платформы. Среднего и низкого уровня в нём нет: ни указателей, ни ручного выделения памяти, ни доступа к регистрам.

Путаница возникает из-за слова «средний». В учебниках так иногда называют C, потому что он сочетает удобный синтаксис с прямой работой с памятью. 1С к этой группе не относится. Ближе всего он к скриптовым языкам вроде Visual Basic for Applications или Python, но с важной оговоркой: это язык предметной области, а не универсальный.

Что такое уровень языка и по каким признакам его определяют

Уровень языка показывает, насколько он далёк от машины. Чем дальше, тем меньше приходится думать про железо и тем больше можно сделать одной строкой.

Упрощённо шкала выглядит так:

УровеньПримерыЧто делает программист
Низкиймашинный код, ассемблерпишет команды процессора, сам размещает данные
Средний (условно)Cработает с указателями и памятью, но синтаксис уже человеческий
ВысокийJava, C#, Python, JavaScriptоперирует объектами и коллекциями, память освобождает среда
Предметно-ориентированныйязык запросов, встроенный язык 1С, VBAрешает задачи узкой области готовыми объектами

Определяют уровень по четырём признакам:

  • 🧠 Управление памятью. Нужно ли выделять и освобождать её вручную.
  • 🔗 Привязка к платформе. Один и тот же код идёт на разное железо без правок или нет.
  • 🧱 Абстракции. Есть ли встроенные коллекции, строки, даты, работа с базой без драйверов.
  • ⚙️ Исполнение. Компилируется в машинный код или выполняется средой.

Чёткой границы между «средним» и «высоким» нет. Это ориентир для разговора, а не стандарт.

Почему 1С плохо ложится в классическую шкалу

Язык создавался не как универсальный. Он нужен, чтобы описывать учёт: документы, справочники, регистры, отчёты. Поэтому в нём нет того, ради чего придумывали C: нет драйверов, потоков операционной системы, прямой работы с сетевыми сокетами.

Зато есть то, чего нет в универсальных языках из коробки:

  • типы СправочникСсылка.Номенклатура, ДокументОбъект.РеализацияТоваровУслуг прямо в языке;
  • встроенный язык запросов, похожий на SQL, с виртуальными таблицами остатков и оборотов;
  • проведение документа по регистрам как штатная операция;
  • права доступа и ролевая модель на уровне платформы.

В итоге язык 1С нельзя честно поставить на одну ось с C и Python. Он решает другую задачу. Это как сравнивать SQL и Rust: оба языки, но уровень «высокий» у них означает разное.

Есть и смешной нюанс. Код 1С привязан не к процессору, а к платформе. Одна и та же конфигурация работает под Windows и Linux, в файловом и клиент-серверном режиме. Для программиста разница в железе невидима, а это признак высокого уровня.

Как 1С выглядит рядом с другими языками

Сравним по тем самым признакам.

Признак1СPythonJavaC
Памятьавтоматическиавтоматическисборщик мусоравручную
Типизациядинамическаядинамическаястатическаястатическая
Исполнениебайт-код в среде платформыинтерпретаторвиртуальная машина JVMмашинный код
Указателинетнетссылки без арифметикиесть
База данныхвстроена в языкчерез библиотекичерез JDBC и ORMчерез драйверы
Универсальностьприкладной учётобщаяобщаяобщая

Вывод из таблицы простой. По памяти, типизации и исполнению 1С стоит рядом с Python и Java. По универсальности он сильно уже.

Один и тот же приём на разных языках

Допустим, нужно пройти по таблице и сложить сумму. В 1С это выглядит так:

Итог = 0;
Для Каждого Строка Из ТаблицаТоваров Цикл
    Итог = Итог + Строка.Сумма;
КонецЦикла;

В C тот же результат потребует знать размер массива, тип элемента и следить за границами. В 1С достаточно обойти коллекцию, а тип поля платформа определит сама.

Ещё одна деталь: код 1С можно писать по-русски и по-английски. Если и If, Цикл и Do равноправны. Это тоже сигнал языка, ориентированного на людей, а не на машину.

Доводы за высокий уровень

Основных доводов пять, и все проверяемые:

  1. Память управляется автоматически. Объект, на который не осталось ссылок, платформа освобождает сама. Утечки через забытый free в 1С невозможны по определению.
  2. Динамическая типизация. Переменная не объявляется с типом, а получает его в момент присваивания. Тип можно узнать функцией ТипЗнч().
  3. Нет указателей. Все объекты передаются по ссылке неявно, но арифметики адресов нет.
  4. Готовые объекты. Массив, Структура, Соответствие, ТаблицаЗначений, ТекстовыйДокумент и десятки других доступны без подключения библиотек.
  5. Переносимость. Код не зависит от архитектуры процессора и операционной системы сервера.

Если спросить разработчика, который писал на C, почему он считает 1С высоким уровнем, он обычно называет третий пункт: «здесь нечем выстрелить себе в ногу».

Аргументы в пользу «низкого» или «среднего»

Такие мнения встречаются, и у них есть основания. Разберём честно.

Что приводят сторонники

  • 🔧 Жёсткая привязка к платформе. Без 1С:Предприятия код не запустить нигде.
  • 🐌 Скорость. Для тяжёлых вычислений язык медленнее компилируемых, поэтому узкие места часто выносят в запросы.
  • 📦 Ограниченные возможности. Нет классов в привычном смысле, нет наследования, нет многопоточности как в универсальных языках.
  • 🧩 Мало «чистых» абстракций. Много кода уходит на служебные операции: открыть форму, передать параметры, обработать события.

Что в этих доводах не так

Скорость и узость возможностей не определяют уровень языка. Python тоже медленнее C, но от этого не становится низкоуровневым. Отсутствие наследования в 1С говорит не о «низком» уровне, а о выбранной модели: объекты платформы создаются конструкторами метаданных, а не руками разработчика.

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

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

Что это даёт разработчику на практике

Классификация не академическая, из неё следуют рабочие выводы.

Когда пригодится знание, что язык высокого уровня

  • 🧮 Оценка скорости. Каждое обращение к базе в цикле стоит дорого, а сложение чисел почти ничего. Поэтому оптимизация в 1С — это в первую очередь запросы, а не микротонкости арифметики.
  • 🚫 Нельзя рассчитывать на контроль над памятью. Если очередной массив разросся до миллионов элементов, поможет только изменение алгоритма, а не ручное освобождение.
  • 📡 Интеграции. Для работы с оборудованием, сетью и нестандартными форматами приходится подключать внешние компоненты, обычно написанные на C++. Именно они закрывают то, что язык высокого уровня не умеет.

Как это влияет на переход на другие языки

Разработчик 1С, который идёт в Python или JavaScript, привыкает к новому быстро: динамическая типизация, коллекции и циклы знакомы. Труднее всего даётся то, что в 1С скрыто платформой: асинхронность, управление зависимостями, работа с файлами и сетью напрямую.

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

Чек-лист для резюме и собеседования

Что сказать про язык 1С на собеседовании
Выполнено: 0 / 5

Язык запросов и контексты исполнения: что ещё поднимает уровень

Помимо основного языка в платформе есть второй, декларативный: язык запросов. Он описывает, какие данные нужны, а не как их доставать. Выборка остатков по складу за пару строк ВЫБРАТЬ ... ИЗ РегистрНакопления.ТоварыНаСкладах.Остатки(...) заменяет сотни строк ручного обхода таблиц. Платформа сама превращает запрос в SQL для конкретной СУБД. Это ещё один шаг вверх по шкале: программист не знает, какая база стоит под конфигурацией.

Второй пример — разделение контекстов. Процедуры помечаются директивами &НаКлиенте и &НаСервере. Разработчик пишет код как единое целое, а платформа решает, где он исполнится и как передать данные между клиентом и сервером. В универсальных языках для этого пришлось бы вручную строить сетевой протокол.

Мини-кейс: одна задача на двух уровнях

Нужно получить сумму продаж по контрагенту за месяц.

  • Ручной обход. Загрузить все документы в таблицу, пройти циклом, отфильтровать по дате и контрагенту, сложить. Работает, но на сотнях тысяч документов тормозит, потому что каждая строка проходит через клиента.
  • Запрос. Одна выборка с условием и группировкой, расчёт на стороне СУБД. Время падает в десятки раз.

Урок для практики: чем выше уровень абстракции, тем важнее выбрать правильный инструмент платформы. Знание «высокий или низкий» здесь превращается в привычку не писать циклы там, где справится запрос.

Чего в языке нет и чем это компенсируется

Новички часто ищут в 1С то, что есть в универсальных языках, и удивляются. Вот короткий список отсутствующего и штатных обходных путей:

Чего нетЧем заменяют
Классов и наследования своими рукамиобщие модули, расширения конфигурации, объекты метаданных
Прямой многопоточностифоновые задания, регламентные задания
Работы с памятью и указателямиколлекции значений, структуры, соответствия
Низкоуровневой работы с оборудованиемвнешние компоненты на C++
Подключаемых пакетов вроде pipобщие макеты, подсистемы, внешние обработки

Каждый пункт говорит об одном: язык защищает программиста от опасных возможностей. Это и есть главная черта высокого уровня. Ограничения не мешают учёту, зато резко снижают число ошибок, которые на C дают падение всей программы.

Если нужна скорость вычислений, сначала проверьте план: можно ли переложить задачу на запрос. Внешняя компонента на C++ — крайняя мера, у неё свои требования к подключению и сопровождению.

Что говорят специалисты и сообщество

Единого официального ответа нет, фирма 1С не публикует классификацию «по уровням». Мнения делятся на три лагеря, и каждый легко узнаётся по аргументам.

ЛагерьПозицияТипичный довод
Классикивысокий уровеньавтоматическая память, динамическая типизация
Скептикисредний или низкийнет универсальности, привязка к платформе
Практики«зависит от задачи»важно не как назвать, а что на нём можно сделать

Если нужен компромисс, его сформулировали так: 1С — язык высокого уровня в рамках своей предметной области. Он удобен для учёта, но не предназначен для системного программирования, игр и драйверов.

Для кадровых целей это означает следующее. Работодатель, нанимая 1С-разработчика, не проверяет знание указателей и памяти. Его интересует, как человек пишет запросы, строит проведение документов и расширяет типовые конфигурации.

Частые вопросы

1С — компилируемый или интерпретируемый язык?
Строго говоря, ни то ни другое. Исходный текст платформа переводит во внутренний байт-код и исполняет его своей виртуальной машиной. Машинный код при этом не создаётся.
Можно ли писать на 1С драйверы и системные программы?
Нет. Язык не имеет доступа к памяти и регистрам. Для подобных задач используют внешние компоненты на C++.
Правда ли, что 1С похож на Visual Basic?
Отчасти. Оба языка динамически типизированы, оба встраиваются в приложение и оба ориентированы на прикладные задачи. Синтаксис 1С отдалённо напоминает Basic и Pascal.
Влияет ли уровень языка на зарплату разработчика?
Напрямую нет. Зарплату определяют опыт, знание отраслевых конфигураций и умение писать быстрые запросы, а не место языка на шкале.
Нужно ли изучать другой язык после 1С?
Не обязательно, но Python или SQL расширяют кругозор. Знание SQL поможет писать запросы 1С, а Python даст представление об универсальных языках.