Единица трансляции

Единица трансляции

В языках программирования единица трансляции — минимальный блок исходного текста, который физически можно оттранслировать (преобразовать во внутреннее машинное представление; в частности, откомпилировать). Важная концепция языков Си и Си++.

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

Сейчас текст разбивают на единицы трансляции в первую очередь ради повторного использования кода. Да и современные оптимизирующие компиляторы зачастую медленны настолько, что пересборка большой программы может длиться десятки минут.[1]

Содержание

В языках Си и Си++

В языках программирования Си и Си++ единица трансляции (англ. translation unit) — подаваемый на вход компилятора исходный текст (файл с расширением .c или .cpp) со всеми включёнными в него файлами.

В отличие от многих других языков программирования (Паскаль, Java, C#), в Си единицы трансляции компилируются по отдельности, никак не пересекаясь. За «стыковкой» единиц в программу следит исключительно компоновщик. Есть две технологии написания программ на Си: «множество единиц трансляции» и «одна единица трансляции».

Множество единиц трансляции

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

Одна единица трансляции

Техника, при которой несколько c-файлов объединяются не компоновщиком, а с помощью #include. Например:

// compile_me.cpp
#include "foo.cpp"
#include "bar.cpp"
// foo.cpp
#include <iostream> // Крупный стандартный заголовок
#include "bar.hpp" // Заголовок функции 'bar'
 
int main()
{ 
  bar();
}
// bar.cpp
#include <iostream> // Всё тот же крупный заголовок (второй раз подключен не будет!)
 
void bar()
{
  ...
}

Плюсы такой структуры: ускоряется полная сборка, расширяется диапазон возможных оптимизаций. Упрощается адаптация чужих библиотек под экзотические компиляторы (например, Embarcadero C++ Builder в режиме __fastcall)[2]. Минус — при небольших изменениях в коде перекомпилируется вся программа.

В виде одной единицы трансляции часто выпускают крупные открытые библиотеки (например, SQLite). При этом программируют их «по старинке», огромным количеством единиц, а из одного вида в другой переводят несложным препроцессором.

В прочих языках

  • Фортран: единицей трансляции является отдельная программная единица (основная программа, подпрограмма или функция) или модуль вместе с включенными файлами. Т.о. в Фортране один файл может содержать несколько единиц трансляции.
  • Паскаль: единицей трансляции является программа или модуль.
  • PHP, Perl: единиц трансляции нет, оттранслировать можно только программу целиком.
  • Java: единица трансляции — класс.

См. также

Примечания

  1. Так, компиляция SQLite на процессоре 2010 года с помощью MinGW длится около полуминуты.
  2. Для версии XE2 приходится отключать предупреждения, а #include стандартной библиотеки оборачивать в соглашение вызова __cdecl.

Wikimedia Foundation. 2010.

Игры ⚽ Поможем сделать НИР

Полезное


Смотреть что такое "Единица трансляции" в других словарях:

  • единица трансляции — — [Л.Г.Суменко. Англо русский словарь по информационным технологиям. М.: ГП ЦНИИС, 2003.] Тематики информационные технологии в целом EN translation unit …   Справочник технического переводчика

  • ГЕН — (от греч. genos род, происхождение), наследственный фа ктор, функционально неделимая единица генетич. материала; участок молекулы ДНК (у нек рых вирусов РНК), кодирующий первичную структуру полипептида, молекулы транспортной или ри босомальной… …   Биологический энциклопедический словарь

  • Список генетических терминов — Эта страница глоссарий. См. также: Список генетических пороков развития и заболеваний Термины генетики в алфавитном поряд …   Википедия

  • Кэш процессора — Кэш микропроцессора  кэш (сверхоперативная память), используемый микропроцессором компьютера для уменьшения среднего времени доступа к компьютерной памяти. Является одним из верхних уровней иерархии памяти[1] …   Википедия

  • Дезоксирибонуклеиновая кислота — Двойная спираль ДНК Дезоксирибонуклеиновая кислота (ДНК) макромолекула(одна из трех основных, две другие РНК и белки), обеспечивающая хранение, передачу из поколения в поколение и реализацию генетической программы развития и функционирования… …   Википедия

  • ДНК — Двойная спираль ДНК Дезоксирибонуклеиновая кислота (ДНК) один из двух типов нуклеиновых кислот, обеспечивающих хранение, передачу из поколения в поколение и реализацию генетической программы развития и функционирования живых организмов. Основная… …   Википедия

  • Двойная спираль — ДНК Дезоксирибонуклеиновая кислота (ДНК) один из двух типов нуклеиновых кислот, обеспечивающих хранение, передачу из поколения в поколение и реализацию генетической программы развития и функционирования живых организмов. Основная роль ДНК в… …   Википедия

  • Модель Уотсона — Крика — Двойная спираль ДНК Дезоксирибонуклеиновая кислота (ДНК) один из двух типов нуклеиновых кислот, обеспечивающих хранение, передачу из поколения в поколение и реализацию генетической программы развития и функционирования живых организмов. Основная… …   Википедия

  • StarCraft II: Wings of Liberty — Обложка StarCraft II Разработчик Blizzard Entertainment Издатель Activision Blizzard Локализатор Blizzard Entertainment …   Википедия

  • ГЕН (наследственный фактор) — ГЕН (от греч. genos род, происхождение), участок молекулы геномной нуклеиновой кислоты, характеризуемый специфической для него последовательностью нуклеотидов, представляющий единицу функции, отличной от функций других генов, и способный… …   Энциклопедический словарь


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»