Перфолента.Net компилируемый язык со статической типизацией

Материал из ТХАБ.РФ
Перейти к: навигация, поиск

Перфолента, в отличие от интерпретируемых языков 1С, OneScript, Python, является компилируемым языком со статической типизацией, но с элементами динамической типизации, которая используется по мере необходимости. Подробности процесса компиляции и различные варианты применения описаны в этой статье.

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

Язык Перфолента компилируется в CIL.

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

Однако в архитектуре .Net, на которой базируется язык Перфолента, принята двухэтапная компиляция. Сначала компилятор Перфоленты переводит программу на промежуточный низкоуровневый язык CIL (Common Intermediate Language), представляющий из себя подобие машинного языка для некоторой виртуальной машины, а затем, при первом запуске программы (или по мере вызова методов программы), специальный JIT (Just In Time) компилятор платформы .Net переводит программу с промежуточного языка на машинный язык конкретного процессора, установленного в вашем компьютере.

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

pflc.exe myprogram.pfl

В результате, в папке программы образуется запускаемый файл EXE или библиотека DLL.

Статическая типизация.

Статическая, значит однажды определенная и больше не меняющаяся. Компилятор должен во время компиляции определить типы всех переменных, параметров методов, делегатов и других объектов. Если какой либо тип определить не удается, то компиляция прерывается и выдается сообщение об ошибке.

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

В следующем примере все переменные имеют тип Объект. В переменной о1 хранится вещественное число типа Вещ. В переменной о2 хранится целое число типа Целое. А вот в переменную о3 будет помещен результат сложения чисел двух разных типов, причем определение типов, которые необходимо сложить так же произойдет во время выполнения программы. Если между двумя типами порядок выполнения операции сложения будет не определен, возникнет исключение.

Перем о1 тип Объект = 4.3
Перем о2 тип Объект = 3
Перем о3 тип Объект = о1 + о2

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

Ссылки