Нативный режим компиляции
Существует отдельный экспериментальный режим компиляции - Native. Его суть в том, что код компилируется в родной код машины .net и таким образом имеет производительность уровня .net.
Как обычно, есть нюанс: код должен быть строго-типизированным, а язык 1С не является таковым. В результате, код, который может быть скомпилирован в режиме native не является 100% совместимым с классическим режимом выполнения.
А в тех местах, где мы сохраняем все еще динамическую типизацию - код перестает быть очень быстрым и становится просто быстрым, как обычно.
Чтобы модуль скомпилировался в нативном режиме необходимо в начале модуля разместить директиву #native
Типизация известным типом
Пример несовместимости с классическим режимом: переменную нельзя перезаписать другим типом
#native
А = 8; // Переменная получит тип Число
Б = "Привет"; Переменная получит тип Строка
А = "Другой тип"; // Ошибка компиляции, тип Строка нельзя присвоить в тип Число
Потеря статической типизации
При вызове метода или возврате из метода переменная теряет информацию о типе. Это переключает рантайм в режим динамического выполнения и скорость выполнения теряется (пока, планируется работать над этим)
#native
Функция РаботаСЧислами()
// Внутри цикла все работает с известными типами и типизация статическая.
Для Сч = 1 По 10 Цикл
Если Сч = 5 Тогда
Возврат Сч;
КонецЕсли;
КонецЦикла;
КонецФункции
// Тип переменной ЧислоИзМетода на этапе компиляции неясен
// Она будет иметь универсальный тип, который обрабатывается динамически
ЧислоИзМетода = РаботаСЧислами();
А = ЧислоИзМетода + 8; // А тоже имеет универсальный тип, который не очень быстрый.
Аналогично тип теряется при работе с универсальными коллекциями. Мы планируем расширить синтаксис языка, чтобы можно было явно задавать типы и сохранять таким образом строгую типизацию.