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

1.Классификация яп: компилируемые, исполняемые на виртуальных машинах, интерпретируемые. Типизация данных в яп.

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

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

Интерпретируемый язык программирования — язык программирования, в котором исходный код программы не преобразовывается в машинный код для непосредственного выполнения центральным процессором (как в компилируемых языках), а исполняется с помощью специальной программы-интерпретатора. Есть ЯП на которых программы выполняются непосредственно по исходному коду с помощью программ – интерпретаторов. Интерпретатор берёт небольшие фрагменты программы и на лету превращает их в инструкции для процессора.

Интерпрета́тор — программа (разновидность транслятора) или аппаратное средство, выполняющее интерпретацию

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

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

Читайте также:  Программирование работы педагогического коллектива

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

Тип – совокупность элементов со схожими характеристиками . тип данных определяет их способ хранения в памяти, их способ задания и применимые к ним операции.

строгая ( определяются заранее и не могут быть изменены в дальнейшем.)

также выделяют статическую и динамическую типизацию

в статической контроль типов происходит на этапе компиляции, в динамической – во время исполнения программ.

2. ЯП С++. Стандарт языка. Стандартная библиотека. Структура простейшей программы на С++.

C++ — компилируемый статически типизированный язык программирования общего назначения.

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

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

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

Объединенный комитет ANSI/ISO развил исходные принципы предыдущего стандарта, являющийся основным на сегодняшний день.

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

Простейшая программа на C++ выглядит примерно так:

Это её исходный код (source code) — текстовая запись программы, состоящая из символов и команд, понятных прежде всего программисту, знакомому с конкретным языком программирования (или обучающемуся такому языку).

Представленная программа выведет на экран фразу «Hello world», но только после того, как будет откомпилирована и запущена.

3. Встроенные типы данных С++. Способы представления чисел различных типов на уровне ЭВМ.

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

char Для хранения кодов символов или маленьких целых чисел 1 байт signed: [-128;127]

short int (или просто short) Короткие целые числа 2 байт [-32768;32767]

int Целые числа 4 байта signed: [-2147483648;2147483647]

long int (или просто long) Длинные целые числа 4 байта signed: [-2147483648;2147483647]

bool Логические значения 1 байт true либо false

float Вещественные числа одинарной точности 4 байта ≈±3.4*10±38 (~7 цифр после запятой)

double Вещественные числа двойной точности 8 байт ≈±1.7*10±308 (~15 цифр после запятой

long double Длинные вещественные числа 8 байт ≈±1.7*10±308 (~15 цифр после запятой)

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

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

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

Дополнительный код осуществляется по следующему алгоритму :

  1. берётся двоичное представление модуля исходного числа.( берутся все числовые биты из прямого кода, но не берётся старший знаковый бит.)
  2. каждый бит заменяется на противоположный.(0-1,1-0) в результате полуается обратный код числа.
  3. К полученному обратному коду добавляется единица
  4. К полученному числу слева дописывается знаковый бит. В итоге получается дополнительный код числа.

Пример дополнительного кода числа -5 :

5 (10)=0000101(2)  1111010(2) +1 = 1111011 допишем единицу 11111011 (дополнительный код числа -5)

Сумма прямого и дополнительного n-битного кода всегда = 2 в степени n

Вещественные числа в памяти компьютера.

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

Источник

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

img

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

Interpreted vs Compiled

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

Подробное объяснение

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

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

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

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

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

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

Примеры истинных компилируемых языков: C, C++, Erlang, Haskell, Rust и Go.

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

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

Интерпретируемые языки гораздо медленнее компилируемых. Но с появлением JIT-компиляции (динамической компиляции) эта разница начинает сокращаться.

Примеры популярных интерпретируемых языков: PHP, Ruby, Python и JavaScript.

Небольшое пояснение

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

Например, Python можно выполнять как компилируемую программу или интерпретируемый язык в интерактивном режиме. А большинство инструментов командной строки, интерфейсов командной строки и оболочек чисто теоретически относятся к интерпретируемым языкам.

Плюсы и минусы

Плюсы компилируемых языков

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

Минусы компилируемых языков

Основные недочеты компилируемых языков:

  • нужно больше времени для завершения полной компиляции перед тестированием;
  • сгенерированный двоичный код зависит от платформы.

Плюсы интерпретируемых языков

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

Минусы интерпретируемых языков

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

Источник

Оцените статью