R:Оптимизация/Компиляция в байт-код — различия между версиями

Материал Psylab.info - энциклопедии психодиагностики
Перейти к: навигация, поиск
м (Параметры компиляции)
м (Параметры компиляции)
Строка 11: Строка 11:
 
== Параметры компиляции ==
 
== Параметры компиляции ==
  
Все рассмотренные ранее функции из пакета {{r-package|compiler|core=true}} имеют опции, которые могут быть переданы в качестве аргументов функциям компиляции (аргумент <code>options</code>), или заданы глобально с помощью функции <code>setCompilerOptions()</code>. Рассмотрим эти опции:
+
Все рассмотренные ранее функции из пакета {{r-package|compiler|core=true}} имеют опции, которые могут быть переданы в качестве аргументов функциям компиляции (аргумент <code>options</code>), или заданы глобально с помощью функции <code>setCompilerOptions()</code>.
  
* <code>optimize</code> --- определяет уровень оптимизации (принимает значения от 0 до 3);
+
Рассмотрим эти опции:
* <code>suppressAll</code> --- управляет сообщениями (принимает значения <code>TRUE</code> или <code>FALSE</code>);
+
 
* <code>suppressUndefined</code> --- управление сообщения о неопределённых (undefined) переменных (может принимать значения: <code>TRUE</code> или список имён переменных).
+
* <code>optimize</code> --- определяет уровень оптимизации: принимает значения от 0 до 3 (по умолчанию 2);
 +
* <code>suppressAll</code> --- управляет сообщениями: принимает значения <code>TRUE</code> или <code>FALSE</code> (по умолчанию code>FALSE</code>);
 +
* <code>suppressUndefined</code> --- управление сообщения о неопределённых (undefined) переменных: может принимать значения <code>TRUE</code> или список имён переменных (по умолчанию ".Generic", .Method", ".Random.seed", ".self").
 +
 
 +
Получить текущее значение глобальных опций компиляции можно с помощью функции <code>getCompilerOption()</code>:
 +
 
 +
{{r-code|code=<nowiki>> getCompilerOption("optimize")
 +
[1] 2
 +
> getCompilerOption("suppressAll")
 +
[1] FALSE
 +
> getCompilerOption("suppressUndefined")
 +
[1] ".Generic"    ".Method"      ".Random.seed" ".self"</nowiki>}}
  
 
== Компиляция функций и выражений ==
 
== Компиляция функций и выражений ==

Версия 08:59, 4 мая 2014


В данном материале рассматривается один из способов ускорения выполнения кода путём компиляции в байт-код. Байт-код - машинно-независимый код низкого уровня, генерируемый транслятором и исполняемый интерпретатором. Большинство инструкций байт-кода эквивалентны одной или нескольким командам ассемблера. Трансляция в байт-код занимает промежуточное положение между компиляцией в машинный код и интерпретацией.

Программа на байт-коде обычно выполняется интерпретатором байт-кода (обычно он называется виртуальной машиной, поскольку подобен компьютеру). Преимущество - в портируемости, т. е. один и тот же байт-код может исполняться на разных платформах и архитектурах. То же самое преимущество дают интерпретируемые языки. Однако, поскольку байт-код обычно менее абстрактный, более компактный и более «компьютерный», чем исходный код, эффективность байт-кода обычно выше, чем чистая интерпретация исходного кода, предназначенного для правки человеком.

В составе базовых пакетов R поставляется пакет compiler, который входит состав ядра R, но не загружается по умолчанию при старте R-сессии. Данный пакет включает в себя ряд функций для компиляции R-кода в байт-код.

Параметры компиляции

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

Рассмотрим эти опции:

  • optimize --- определяет уровень оптимизации: принимает значения от 0 до 3 (по умолчанию 2);
  • suppressAll --- управляет сообщениями: принимает значения TRUE или FALSE (по умолчанию code>FALSE</code>);
  • suppressUndefined --- управление сообщения о неопределённых (undefined) переменных: может принимать значения TRUE или список имён переменных (по умолчанию ".Generic", .Method", ".Random.seed", ".self").

Получить текущее значение глобальных опций компиляции можно с помощью функции getCompilerOption():

КодR

<syntaxhighlight lang="r">> getCompilerOption("optimize") [1] 2 > getCompilerOption("suppressAll") [1] FALSE > getCompilerOption("suppressUndefined") [1] ".Generic" ".Method" ".Random.seed" ".self"</syntaxhighlight>

Компиляция функций и выражений

Примечания