Компилируемые и интерпретируемые языки программирования. Разбор понятий. Особенности языков программирования

  • 18.06.2019

От Ali Çehreli . Большая часть материала ориентирована на начинающих, но так как большая часть аудитории уже имеет базовые знания в программировании, то этот материал убран под хабракаты. В данной части рассматриваются фундаментальные типы, свойства типов, основы компиляции и императивного программирования.

Базовый материал

Компилятор

Ранее мы увидели, что наиболее часто используемые инструменты в D - текстовый редактор и компилятор . Программы на D пишутся в текстовых редакторах (прим. ваш КО).

При использовании компилируемых языков , таких как D, необходимо понимать концепцию компиляции и функцию компилятора.

Машинные коды

Мозгом компьютера является микропроцессор (или ЦПУ, сокращение от центрального процессорного устройства ). Кодированием называется указывание, что именно должен делать ЦПУ, и инструкции, которые используются при этом, называются машинными кодами .

Большинство архитектур ЦПУ используют специфичные для них машинные коды. Эти машинные инструкции определяются с учетом ограничений аппаратных средств во время проектирования архитектуры. На самом низком уровне эти инструкции реализованы как электические сигналы. Так как простота программирования на этом уровне не является главной целью, написание программ напрямую в машиннах кодах ЦПУ является очень сложной задачей.

Эти машинные инструкции представляют собой специальные числа, которые представляют различные операции, поддерживаемые конкретным ЦПУ. Например, для воображаемого 8-битного ЦПУ, число 4 может представлять операцию загрузки, число 5 - операцию сохранения, и число 6 - операцию увеличения значения на единицу. Предполагая, что первые 3 бита слева - номер операции и 5 последующих бита - значение, которое используется в этой операции, программа-пример в машинных кодах этого ЦПУ может выглядеть следующим образом:
Operation Value Meaning 100 11110 LOAD 11110 101 10100 STORE 10100 110 10100 INCREMENT 10100 000 00000 PAUSE

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

Языки программирования

Языки программирования разработаны быть эффективным способом программирования ЦПУ с возможностью представления высокоуровневых концепций. Языкам программирования не приходится иметь дело с ограничениями аппаратуры; их главная задача - простота использования и выразительность. Языки программирования легче понимаются людьми, они ближе к естественным языкам:
if (a_card_has_been_played()) { display_the_card(); }

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

Компилируемые языки

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

В общем случае компилируемые языки помогают в обнаружении ошибок даже до того, как программа начинает выполняться.

D - компилируемый язык.

Интерпретируемые языки

Некоторые языки программирования не требует компиляции. Такие языки называются интерпретируемыми . Программа может запущена прямо из свеженапечатанного исходного кода. Некоторые примеры интерпретируемых языков: Python, Ruby и Perl. Так как этап компиляции отсутствует, для таких языков разработка программы может быть проще. С другой стороны, так как инструкции программы должны быть разобраны для интерпретации каждый раз, когда программа запускается, программа на таких языках медленнее, чем их эквиваленты, написанные на компилируемых языках.

В общем случае для интерпретируемых языков, многие типы ошибок в программе не могут быть обнаружены до момента начала выполнения.

Компилятор

Назначение компилятора - трансляция: он транслирует программы, написанные на языке программирования, в машинный код. Это перевод из языка программиста на язык ЦПУ. Такая трансляция называется компиляцией . Каждый компилятор понимает какой-то конкретный язык программирования и описывается, как компилятор для этого языка, например «компилятор для D».

Ошибки компиляции

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

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

Фундаментальные типы

Ранее мы выяснили, что мозгом компьютера является ЦПУ. Большинство задач программы выполняются на ЦПУ, и остальные распределены по другим частям компьютера.

Наименьшая единица данных в компьтере называется битом , которая может принимать значения 0 или 1.

Так как тип данных, который может содержать только значения 0 или 1 имел бы очень ограниченное применение, ЦПУ определяет бОльшие типы данных, которые являются комбинациями из более одного бита. Например, байт содержит 8 битов. Наиболее производительный тип данных определяет битность ЦПУ: 32-битный ЦПУ, 64-битный ЦПУ и т.п.

Типов, определенных ЦПУ, все еще недостаточно: они не могут описать высокоуровневые понятия, как имя студента или игральная карта . D предоставляет множество полезных типов данных, но даже этих типов не хватает для описания многих высокоуровневых концепций. Такие концепции должны быть определены программистом как структуры (struct) или классы (class), которые мы увидим в следующих главах.

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

Тип Определение Начальное значение
bool Логическое значение Истина/Ложь false
byte 8 битное число со знаком 0
ubyte 8 битное число без знака 0
short 16 битное число со знаком 0
ushort 16 битное число без знака 0
int 32 битное число соз знаком 0
uint 32 битное число без знака 0
long 64 битное число со знаком 0
ulong 64 битное число без знака 0
float 32 битное действительное число с плавающей точкой float.nan
double 64 битное действительное число с плавающей точкой double.nan
real наибольшое число с плавающей точкой, которое поддерживается оборудованием real.nan
ifloat мнимая часть комплексного числа для float float.nan * 1.0i
idouble мнимая часть комплексного числа для double double.nan * 1.0i
ireal мнимая часть комплексного числа для real real.nan * 1.0i
cfloat комплексный вариант float float.nan + float.nan * 1.0i
cdouble комплексный вариант double double.nan + double.nan * 1.0i
creal комплексный вариант real real.nan + real.nan * 1.0i
char символ UTF-8 (code point) 0xFF
wchar символ UTF-16 (code point) 0xFFFF
dchar символ UTF-32 (code point) 0x0000FFFF

В довесок к вышеперечисленным, ключевое слово void описывает сущности не имеющие типа . Ключевые слова cent и ucent зарезервированы для будущего использования для представления знаковых и безнаковых 128-битных значений.

Вы можете использовать int для большинства значений, до тех пор пока нет особых причин не делать это. Рассмотрите double для представления понятий, которые имеют дробную часть.

Разъяснения понятий, представленных в таблице

Логическое значение : тип логического выражения, имеющий значения true для истины и false для лжи.

Тип со знаком: Тип, который может принимать отрицательные и положительные значения. Например, byte может иметь значения от 0 до 255. Буква u в начале названия этих типов взята от слова unsigned .

Число с плавающей точкой: Тип может представлять значения с десятичной дробной частью, как у 1.25. Точность вычислений с плавающей точкой напрямую зависит от числа битов в типе: больше число битов, получаем более точные результаты.

Только числа с плавающей точкой могут представлять десятичные дроби; целочисленные типы (например, int ) могут держать только такие значения, как 1 и 2.

Комлексные типы чисел: Эти типы могут представлять комплексные числа из математики.

Мнимые типы чисел: Эти типы могут представлять только мнимую часть комплексных чисел. Буква i , которая находится в колонке начальных значений, в математике является квадратным корнем из -1.

nan: Сокращение от «not a number», представляющее некорректное значение с плавающей точкой .

Комментарии переводчика

Может показаться странным, что для чисел с плавающей точкой используются NaN значения как инициализаторы. Оффициальное объяснение от разработчиков (хотя я не согласен с этой позицией):

NaN"ы обладают интересным свойством, что в какой бы операции они не использовались, то в результате получается снова NaN. Поэтому NaN будет распространяться и будет результатом любых вычислений, где он был использован. Это означает, что внезапно появляющийся NaN является недвусмысленным индикатором того, что была использована непроиницилизированная переменная.

Если бы 0.0 использовался как начальное значение, его последствия легко было бы не заметить на выходе, поэтому если инициализация по умолчанию была непреднамеренная, баг мог бы остаться незамеченным.

Не подразумевается, что инициализатор по умолчанию должен быть полезным значением, его цель - вскрытие багов. NaN хорошо подходит под эту роль.

Но, конечно, компилятор может обнаружить и сгенерировать ошибку о переменных, которые не были проинициализированы? В большинстве случаев он может, но не всегда, и то, что он может, зависит от сложности внутреннего анализа потоков данных. Поэтому надежда на этот механизм - непереносимое и ненадежное решение.

Из-за особенностей реализации ЦПУ, NaN отсутствует для целочисленных, поэтому вместо этого D использует 0. Нулевое значение не имеет таких преимуществ для обнаружения ошибок, какими обладает NaN, но, по крайней мере, ошибки от непреднамеренной инициализации будут повторимы и поэтому более отлаживаемыми.

Свойства типов

В D у типов есть свойства . Чтобы получить значение свойства, нужно написать имя свойства после типа через точку. Например, sizeof свойство int вызывается так: int.sizeof . В этой главе рассматриваются только следующие четыре атрибута:

Программа, которая печатает эти свойства для int

import std.stdio ;

void main()
{
writeln("Тип: " , int .stringof ) ;
writeln("Длина в байтах: " , int .sizeof ) ;
writeln("Минимальное значение: " , int .min ) ;
writeln("Максимальное значение: " , int .max ) ;
}


Примечания переводчика

Некоторые типы имеют другие свойства, например float и double не имеют свойства min , вместо него используется -float.max и -double.max , .

size_t

Вы также встретитесь с типом size_t , имя которого расшифровывается как «size type». Он не является самостоятельным типом, а псевдонимом безнакового типа, которого хватит для представления всех возможных адресов в памяти. Поэтому этот тип зависит от системы: uint на 32-х битных, ulong для 64-х битных системах и т.д.

Можно использовать свойство .stringof , чтобы увидеть на какой тип ссылается size_t на вашей системе:

Код

import std.stdio ;

void main()
{
writeln(size_t .stringof ) ;
}

Вывод на моей системе:
ulong

Упражнения

Распечатайте свойства других типов.

Примечание :Нельзя использовать зарезервированные типы cent и ucent в любой программе; как исключение, void не имеет свойств .min и .max .

Решение

import std.stdio ;

void main()
{
writeln("Тип: " , short .stringof ) ;
writeln("Размер в байтах: " , short .sizeof ) ;
writeln("Минимальное значение: " , short .min ) ;
writeln("Максимальное занчение: " , short .max ) ;

Writeln() ;

Writeln("Тип: " , ulong .stringof ) ;
writeln("Размер в байтах: " , ulong .sizeof ) ;
writeln("Минимальное значение: " , ulong .min ) ;
writeln("Максимальное занчение: " , ulong .max ) ;
}



Базовый материал

Оператор присваивания и порядок вычислений

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

Оператор присваивания
Вы будете встречать подобные строчки практически во всех программах, практически во всех языках программирования:
a = 10;

Значение этой строчки - «сделай значение a равным 10». Аналогично следующая строчка обозначает «сделай значение b равным 20»:
b = 20;

На основе вышеизложенной информации что можно сказать о следущей строчке?
a = b;

К сожалению, эта строчка не содержит оператор сравнения из математики, который, я предполагаю, все знают. Выражение выше не означает «a равно b»! Когда мы используем ту же логику, что и в предыдущих двух строчках, выражение выше должно означать «сделай значение a равным значению b ».

Хорошо известный символ = в математике имеет совершенно другой смысл в программировании: «сделать значение слева равным значению с правой стороны».

Порядок вычислений
Операции программы выполняются шаг за шагом в определенном порядке. Предыдущие три выражения в программе можно увидеть в следующем порядке:
a = 10; b = 20; a = b;

Смысл этих строк вместе: «сделай значение a равным 10, затем сделай значение b равным 20, затем сделай значение a равным значению b ». Соответственно, после выполнения этих трех операций оба значения a и b будут равны 20.

Упражнение

Изучите, как следующие три операции меняют местами значения a и b . Если в начале их значения были равны 1 и 2 соответственно, то после выполнения операций значения становятся равны 2 и 1:
c = a; a = b; b = c;

Решение

Значения a , b и c напечатаны справой стороны каждой операции:
в начале → a 1, b 2, c неважно c = a → a 1, b 2, c 1 a = b → a 2, b 2, c 1 b = c → a 2, b 1, c 1
В конце значения a и b меняются местами.


Теги:

  • dlang
  • tutorials
  • tutorials d
Добавить метки

Лекция 1 – Языки программирования. Visual Basic

{Материал из Википедии - свободной энциклопедии}Язы́к программи́рования - формальнаязнаковая система, предназначенная для описанияалгоритмов в форме, которая удобна для исполнителя (например,компьютера ). Язык программирования определяет наборлексических ,синтаксических исемантических правил, используемых при составлениикомпьютерной программы . Он позволяетпрограммисту точно определить то, на какие события будет реагировать компьютер, как будут храниться и передаватьсяданные , а также какие именно действия следует выполнять над этими данными при различных обстоятельствах. Со времени создания первых программируемых машин человечество придумало уже более двух с половиной тысяч языков программирования (См.Список языков программирования (англ.)). Каждый год их число пополняется новыми. Некоторыми языками умеет пользоваться только небольшое число их собственных разработчиков, другие становятся известны миллионам людей. Профессиональные программисты иногда применяют в своей работе более десятка разнообразных языков программирования.Cоздатели языков по-разному толкуют понятиеязык программирования . Среди общих мест, признаваемых большинством разработчиков, находятся следующие:

    Функция: язык программирования предназначен для написания компьютерных программ, которые применяются для передачи компьютеруинструкций по выполнению того или иноговычислительного процесса и организации управления отдельнымиустройствами .

    Задача: язык программирования отличается отестественных языков тем, что предназначен для передачикоманд и данных от человека компьютеру, в то время, как естественные языки используются для общениялюдей между собой. В принципе, можно обобщить определение "языков программирования" - это способ передачи команд, приказов, четкого руководства к действию; тогда как человеческие языки служат также для обмена информацией.

    Исполнение: язык программирования может использовать специальные конструкции для определения и манипулированияструктурами данных и управления процессом вычислений.

Особенности языков программирования

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

    Типов и структур данных

    Операционную семантику (алгоритм вычисления конструкций языка)

    Семантические конструкции языка

    Библиотеки примитивов (например, инструкции ввода-вывода)

    Философии назначения и возможностей языка

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

Типы данных

Во внутреннем представлении все данные в современных цифровых компьютерах сохраняются просто как нули и единицы (в двоичном виде ). Данные, которые представляют информацию из реального мира (имена, банковские счета, измерения и др.) - это низкоуровневые двоичные данные, которые преобразуются языками программирования в эти высокоуровневые концепции.

Особая система, по которой данные организуются в программе, - это система типов языка программирования; разработка и изучение систем типов известна под названиемтеория типов . Языки могут быть классифицированы как системысо статической типизацией и языки сдинамической типизацией . Статически-типизированные языки могут быть в дальнейшем подразделены на языки собязательной декларацией , где каждая переменная и объявление функции имеет обязательное объявление типа, и языки свыводимыми типами . Иногда динамически-типизированные языки называютсялатентно типизированными .

Структуры данных

Системы типов в языках высокого уровня позволяют определять сложные, составные типы, так называемые структуры данных . Как правило, структурные типы данных образуются какдекартово произведение базовых (атомарных) типов и ранее определённых составных типов. Основные структуры данных (списки, очереди, хэш-таблицы, двоичные деревья и пары) часто представлены особыми синтаксическими конструкциями в языках высокого уровня. Такие данные структурируются автоматически.

Компилируемые и интерпретируемые языки

Языки программирования делятся на два класса - компилируемые иинтерпретируемые . Программа на компилируемом языке при помощи специальной программыкомпилятора преобразуется (компилируется ) в набор инструкций для данного типа процессора (машинный код) и далее записывается висполняемый файл , который может быть запущен на выполнение как отдельная программа. Другими словами, компилятор переводит программу с языка высокого уровня на низкоуровневый язык, понятный процессору. Если программа написана на интерпретируемом языке, тоинтерпретатор непосредственно выполняет (интерпретирует ) ее текст без предварительного перевода. При этом программа остается на исходном языке и не может быть запущена без интерпретатора. Можно сказать, что процессор компьютера - это интерпретатор машинного кода. Кратко говоря, компилятор переводит программу на машинный язык сразу и целиком, создавая при этом отдельную программу, а интерпретатор переводит на машинный язык прямо во время исполнения программы. Разделение на компилируемые и интерпретируемые языки является несколько условным. Так, для любого традиционно компилируемого языка, как, например,Паскаль , можно написать интерпретатор. Кроме того, большинство современных «чистых» интерпретаторов не исполняют конструкции языка непосредственно, а компилируют их в некоторое высокоуровневое промежуточное представление (например, с разыменованием переменных и раскрытием макросов). Для любого интерпретируемого языка можно создать компилятор - например, язык Лисп, изначально интерпретируемый, может компилироваться без каких бы то ни было ограничений. Создаваемый во время исполнения программы код может так же динамически компилироваться во время исполнения. Как правило, скомпилированные программы выполняются быстрее и не требуют для выполнения дополнительных программ, так как уже переведены на машинный язык. Вместе с тем при каждом изменении текста программы требуется ее перекомпиляция, что создает трудности при разработке. Кроме того, скомпилированная программа может выполняться только на том же типе компьютеров и, как правило, под той же операционной системой, на которую был рассчитан компилятор. Чтобы создать исполняемый файл для машины другого типа, требуется новая компиляция. Интерпретируемые языки обладают некоторыми специфическими дополнительными возможностями (см. выше), кроме того, программы на них можно запускать сразу же после изменения, что облегчает разработку. Программа на интерпретируемом языке может быть зачастую запущена на разных типах машин и операционных систем без дополнительных усилий. Однако интерпретируемые программы выполняются заметно медленнее, чем компилируемые, кроме того, они не могут выполняться без дополнительной программы-интерпретатора. Некоторые языки, например,Java иC# , находятся между компилируемыми и интерпретируемыми. А именно, программа компилируется не в машинный язык, а в машинно-независимый код низкого уровня,байт-код . Далее байт-код выполняетсявиртуальной машиной . Для выполнения байт-кода обычно используется интерпретация, хотя отдельные его части для ускорения работы программы могут быть транслированы в машинный код непосредственно во время выполнения программы по технологии компиляции «на лету» (Just-in-time compilation,JIT ). Для Java байт-код исполняется виртуальной машиной Java (Java Virtual Machine,JVM ), для C# -Common Language Runtime . Подобный подход в некотором смысле позволяет использовать плюсы как интерпретаторов, так и компиляторов. Следует упомянуть также оригинальный языкФорт(Forth) , который является как бы одновременно интерпретируемым и компилируемым.

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

Общие сведения

Список языков программирования настолько широк и многообразен, что полностью выкладывать его - задача практически невыполнимая. Среди всех языков можно выделить три основные подгруппы:

  • машинные (языки программирования низкого уровня);
  • машинно-ориентированные (ассемблеры);
  • машинно-независимые (высокого уровня);

Среди разработчиков современного программного обеспечения наиболее популярны следующие основные языки программирования. Список приведён в порядке убывания популярности:

  1. Java.
  2. HTML.
  3. Visual Basic.
  4. Delphi.

Этот список языков программирования далеко не полный, однако это наиболее востребованные языки, знание которых могут потребовать у программиста при устройстве на работу. Все они являются языками программирования высокого уровня.

Основы программирования

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

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

Минусом таких языков программирования является то, что программы на них пишутся для выполнения конкретных задач, на конкретном устройстве и их выполнение невозможно в случае переноса на другой процессор.

Разработка приложений

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

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

Рассмотрим подробнее языки программирования высокого уровня. Список составлять не будем, просто распишем несколько подробнее о каждом из наиболее популярных.

SQL

Специализированный язык программирования предназначен в первую очередь для работы с системами управления базами данных и их программирования. SQL переводится как "специализированный Поскольку в последние десятилетия рынок СУБД вырос многократно, популярность этого языка не становится сюрпризом.

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

Javascript

По праву занимает второе место среди языков программирования высокого уровня. Прост в освоении, удобен в работе. Повышенная по сравнению с прародителем приспособленность к программированию приводит к тому, что работают с этим языком миллионы человек по всему миру. Объектно-ориентированный язык основанный на С++, приспособлен к созданию программ и приложений, способных обрабатывать огромные потоки информации в специализированных средах и учитывать специфику среды внедрения готового

Технология Java - это основа, позволяющая в неограниченных количествах увеличивать инфраструктуру предприятий и компаний, способная связать воедино системы самого различного калибра, начиная от подключения к сети телефона по Wi-fi и заканчивая суперкомпьютерами.

XML

Потомок HTML, эта технология являет собой расширяемый язык разметки. Она приспособлена для интерпретирования документов. На нем проводятся сложнейшие преобразования и изменения документов. Язык XML используется для передачи и временного хранения данных при работе с различными реляционными базами через интернет.

XML уже достиг того уровня, когда может претендовать на роль основополагающей технологии для построения корпоративных сетей.

Программируем по-русски

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

  • 1С:Предприятие. Целая система, предназначенная для управления организацией во всех сферах деятельности. Нередко в объявлениях по поиску сотрудников можно встретить "Программист 1С".
  • Глагол. Аналог англоязычного Pascal.
  • Робик. Специализированный язык программирования, предназначенный для обучения детей основам программирования.
  • Рапира. Язык с основанный на процедурах.

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

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

Большое количество языков, включая BASIC , , Lisp , Pascal и Python , имеют обе реализации. В Java используется JIT-компиляция для генерации машинного кода, хотя изначально он переводится в интерпретируемую форму. Языки Microsoft .NET Framework компилируются в Common Intermediate Language (CIL) , который во время выполнения компилируется в нативный код. Большинство реализаций Lisp позволяют смешивать оба вида кода.

История

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

Изначально интерпретируемые языки преобразовывались в машинный код построчно, то есть каждая логическая строка компилировалась непосредственно перед выполнением. В результате каждая инструкция, заключенная в тело цикла и исполняемая несколько раз, столько же раз обрабатывалась транслятором. В настоящее время такие эффекты редки. Большинство интерпретируемых языков предварительно транслируются в промежуточное представление. Оно представляет собой байт-код или шитый код (threaded code) . Это набор инструкций по вызову небольших фрагментов более низкоуровнего кода, эквивалентный нескольким командам ассемблера или командам виртуальной машины соответственно. Уже этот код испольняется интерпретатором или виртуальной машиной.

Например, такую схему используют следующие языки:

  • Ruby (использует представление кода в виде абстрактного синтаксического дерева)

Промежуточный код может создаваться как явной процедурой компиляции всего проекта (Java), так и скрытой трансляцией каждый раз перед началом выполнения программы (Perl, Ruby) и при изменении исходного кода (Python).

Преимущества

Есть ряд возможностей, которые значительно легче реализовать в интерпретаторе, чем в компиляторе:

  • использование динамической области видимости и замыканий

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

Недостатки

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

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

Области использования

Исключение этапа компиляции позволяет производить более быструю разработку программ, поэтому интерпретируемые языки используются при написании сложных одноразовых программ (например, для проведения однократного вычисления).

Пример


Wikimedia Foundation . 2010 .

Смотреть что такое "Интерпретируемый язык программирования" в других словарях:

    Разработанный корпорацией Sun Microsistems межплатформенный, интерпретируемый, объектно ориентированный язык программирования, используемый для создания приложений, работающих в под управлением веб браузера и характеризующихся высоким уровнем… … Финансовый словарь

    Ruby Семантика: мультипарадигмальный Тип исполнения: интерпретатор Появился в: 1995 г. Автор(ы): Юкихиро Мацумото Последняя версия: 1.9.1 … Википедия

    Язык программирования формальная знаковая система, предназначенная для записи компьютерных программ. Язык программирования определяет набор лексических, синтаксических и семантических правил, задающих внешний вид программы и действия,… … Википедия

    У этого термина существуют и другие значения, см. B. У этого термина существуют и другие значения, см. БИ (значения). B Класс языка: процедурная Тип исполнения: интерпретируемый Появился в: 1969 А … Википедия

    У этого термина существуют и другие значения, см. Диалект (значения). Диалект Тип исполнения: интерпретируемый Автор(ы): Джордж Харт Диалект интерпретируемый язык программирования, созданный Джорджем Хартом в рамках институтского проекта по … Википедия Википедия

    ABC Класс языка: императивный, процедурный, структурный Тип исполнения: интерпретируемый, компилируемый Появился в: 1987 Автор(ы): Leo Geurts, Lambert Meertens (… Википедия

Языки программирования могут быть разделены на компилируемые и интерпретируемые.

Программа на компилируемом языке при помощи специальной программы компилятора преобразуется (компилируется) в набор инструкций для данного типа процессора (машинный код) и далее записывается в исполнимый модуль, который может быть запущен на выполнение как отдельная программа. Другими словами, компилятор переводит исходный текст программы с языка программирования высокого уровня в двоичные коды инструкций процессора.

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

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

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

Для любого интерпретируемого языка можно создать компилятор -- например, язык Лисп, изначально интерпретируемый, может компилироваться без каких бы то ни было ограничений. Создаваемый во время исполнения программы код может так же динамически компилироваться во время исполнения.

Как правило, скомпилированные программы выполняются быстрее и не требуют для выполнения дополнительных программ, так как уже переведены на машинный язык. Вместе с тем, при каждом изменении текста программы требуется её перекомпиляция, что создаёт трудности при разработке. Кроме того, скомпилированная программа может выполняться только на том же типе компьютеров и, как правило, под той же операционной системой, на которую был рассчитан компилятор. Чтобы создать исполняемый файл для машины другого типа, требуется новая компиляция.

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

Однако интерпретируемые программы выполняются заметно медленнее, чем компилируемые, кроме того, они не могут выполняться без дополнительной программы-интерпретатора.

Некоторые языки, например, Java и C#, находятся между компилируемыми и интерпретируемыми. А именно, программа компилируется не в машинный язык, а в машинно-независимый код низкого уровня, байт-код. Далее байт-код выполняется виртуальной машиной. Для выполнения байт-кода обычно используется интерпретация, хотя отдельные его части для ускорения работы программы могут быть транслированы в машинный код непосредственно во время выполнения программы по технологии компиляции «на лету» (Just-in-time compilation, JIT). Для Java байт-код исполняется виртуальной машиной Java (Java Virtual Machine, JVM), для C# -- Common Language Runtime.

Подобный подход в некотором смысле позволяет использовать плюсы как интерпретаторов, так и компиляторов. Следует упомянуть также оригинальный язык Форт(Forth) имеющий и интерпретатор и компилятор.

Современные языки программирования рассчитаны на использование ASCII, то есть доступность всех графических символов ASCII является необходимым и достаточным условием для записи любых конструкций языка. Управляющие символы ASCII используются ограниченно: допускаются только возврат каретки CR, перевод строки LF и горизонтальная табуляция HT (иногда также вертикальная табуляция VT и переход к следующей странице FF).

Ранние языки, возникшие в эпоху 6-битных символов, использовали более ограниченный набор. Например, алфавит Фортрана включает 49 символов (включая пробел): A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 = + - * / () . , $ " :

Заметным исключением является язык APL, в котором используется очень много специальных символов.

Использование символов за пределами ASCII (например, символов KOI8-R или символов Юникода) зависит от реализации: иногда они разрешаются только в комментариях и символьных/строковых константах, а иногда и в идентификаторах. В СССР существовали языки, где все ключевые слова писались русскими буквами, но большую популярность подобные языки не завоевали (исключение составляет. Встроенный язык программирования 1С: Предприятие).

Расширение набора используемых символов сдерживается тем, что многие проекты по разработке программного обеспечения являются международными. Очень сложно было бы работать с кодом, где имена одних переменных записаны русскими буквами, других -- арабскими, а третьих -- китайскими иероглифами. Вместе с тем, для работы с текстовыми данными языки программирования нового поколения (Delphi 2006, C#, Java) поддерживают Unicode.

Задание №1

язык программирование семантика компилируемый

1. Для создания на диске D папок первого уровня нужно выполнить следующие действия:

Открыть Мой компьютер, перейти на диск D:

Выбрать пункт меню Файл, Создать, Папку, напечатать имя создаваемой папки П1.

Аналогично создаются папки П2 и П3.

Для создания папок второго уровня необходимо:

Перейти в папку первого уровня, в которой нужно создавать папку второго уровня. Например папку П21 нужно создавать в папке П2, папку П31 - в папке П3 и т.д.

Повторить действия из 1-го пункта при создании папок 3-его уровня нужно папку П311 создавать в папке П31 и т.д.

2. Чтобы переименовать папку нужно

Выбрать папку П31

Выбрать пункт меню Файл, Переименовать, напечатать фамилию Хомченко

Выбрать папку П1 и дать имя Инна.

3. Для переноса 9-ой папки во 2-ю папку нужно

Выбрать папку П312

Выбрать пункт меню Правка, Вырезать

Перейти в нужную папку П2

Выбрать пункт меню Правка, Вставить.

4. Дерево диска D до выполнения пунктов 2-3 будет выглядеть так:

Так выглядит дерево диска D: после выполнения пунктов 2-3:

Пояснения к выполнению задания №4

1. Для форматирования ячеек нужно выполнить следующее:

* выделить ячейку или диапазон ячеек

* выбрать пункт меню Формат, ячейки, выравнивание.

2. Чтобы ввести в ячейку формулу нужно:

* активизировать нужную ячейку

* набрать знак =, а затем нужную формулу вручную на клавиатуре или с использованием мыши.

Например, в ячейку H7 нужно ввести формулу: =G7+C7-F7

3. Для заполнения колонки Примечание 1 нужно использовать функцию

ЕСЛИ(). Таким образом в ячейке К7 будет размещена формула:

ЕСЛИ(I7>=15000;"Очень хорошая работа"; ЕСЛИ(I7>=5000; "Хорошая работа"; ЕСЛИ(I7<0; "Надо больше покупать валюты"; "Надо меньше продавать валюты")))

4. Для заполнения колонки Примечание 2, предварительно необходимо преобразовать условие в таблицу:


Затем в ячейку L7 занести формулу:

ПРОСМОТР(I7;$O$7:$O$12;$P$7:$P$12)

В результате у вас должно получиться такое же значение, как и в колонке Примечание 1;


5. Для использования "автозаполнения" нужно

* выделить ячейку с формулой

* указатель мыши установить в правый нижний угол ячейки, чтобы появился маркер заполнения

* не отпуская левой клавиши мыши растянуть выделение на нужный диапазон ячеек.

6. Для заполнения итоговой строки нужно: установите курсор в нужную ячейку и произвести двойной щелчок по кнопке Автосуммирование на панели инструментов.

Описание выполнения пункта №2

Установить курсор в любую свободную ячейку и ввести формулу:

МАКС(F7:F16). Аналогично: =МИН(G7:G16) и =СРЗНАЧ(H7:H16). Формулу можно

вводить вручную с клавиатуры, а можно с использованием мастера функций.

Для создания имени нужно

* выделить диапазон (например H7:H16)

* выбрать поле имен и задать нужное имя (например Остаток) или выбрать пункт меню Вставка, Имя, Присвоить.

Тогда формула из предыдущего пункта будет выглядеть так:

СРЗНАЧ(Остаток)

Для построения диаграммы нужно

  • ? выделить диапазон данных по которым будем строить диаграмму например В2:D8. Левый столбец и верхняя строка будет использоваться в качестве меток осей.
  • ? вызываем мастер диаграмм.
  • ? выбираем тип диаграммы, например гистограмма, трехмерная.
  • ? Вводим соответствующие надписи для осей и название диаграммы.
  • ? выбираем лист, на котором будем строить диаграмму и выбираем кнопку Готово.

Для распечатки списка имен нужно выбрать пункт меню Вставка, Имя, Вставить, Все имена.

Чтобы получить таблицу с расчетными формулами нужно выбрать пункт меню

Сервис, Параметры, Вид, Параметры окна, Формулы.

Для оформления колонтитулов можно

* выбрать пункт меню Вид, Колонтитулы.

* выбрать пункт меню Файл, Параметры страницы, Колонтитулы.

Чтобы убрать сетку для печати нужно выбрать

Файл, Параметры страницы, Лист и отменить печать сетки.

Для распечатки полученной книги нужно выбрать:

  • ? Файл, Печать или
  • ? соответствующую пиктограмму на панели инструментов

Если диаграмма построена на том же рабочем листе, что и таблица, то печатать следует вместе с таблицей. Если диаграмма построена на новом рабочем листе, то нужно:

  • ? перейти на лист с построенной диаграммой
  • ? выполнить печать как в пункте №5

Пояснения к выполнению задания №5

  • 1. Для того чтобы отсортировать список необходимо:
    • ? установить курсор на то поле списка, по которому нужно провести

сортировку.

  • ? выбрать соответствующую пиктограмму на панели инструментов.
  • 2. Для работы с автофильтром необходимо:

установить курсор в любую ячейку списка.

выбрать пункт меню Данные, Фильтр, автофильтр.

1. выбрать изделия, цена которых <= 100000 и >300000 или расход которых не превышает 100 единиц.

Описание выполнения пункта 1.

  • 1. Включаем Автофильтр.
  • 2. Нажимаем кнопку автофильтра в поле Цена.
  • 3. Выбираем пунк меню Условие:
    • ? задаем условие
    • ? выбираем логическое условие И
    • ? задаем условие >300000
    • ? кнопка ОК