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

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

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

Антон Архипов — Байткод для любознательных (StudentDay)

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

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

Применение

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

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

Следующие языки принято считать компилируемыми:

  • Ada
  • ALGOL
  • Algol 60
  • Algol 68
  • SMALL
  • C++
  • Objective-C
  • Sather
  • Ubercode
  • Standard ML
  • Alice

Языки компилируемые в байт-код

Языки компилируемые в другой язык программирования (Транспайлер)

  • Haxe, kPHP (транслируется в языки: C++, ActionScript, Lua, Python и др.)

Источник: racechrono.ru

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

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

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

Как устроен Python? ► Детальный разбор

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

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

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

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

Виртуальная машина исполняет некоторый машинно-независимый код (например, байт-код, шитый код, 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 способа хранения : с фиксированной и с плавающей точкой. Первый способ предусматривает что среди доступного объёма памяти часть битов отводится для целой части, а оставшиеся для цыфр после запятой.

Источник: studfile.net

Компилятор и байт-код

А вы знали, что Java — самый популярный в мире язык программирования?

Согласно рейтингу TIOBE, язык программирования Java используют более 17% всех программистов мира. На втором месте идет C с 16%. А 20 лет назад, когда язык Java только появился, безоговорочным лидером был С++, доля которого сейчас — меньше 7%.

Язык Java появился в середине 90-х годов 20-го века и очень быстро набрал популярность. Программисты тысячами переходили с С++ на Java. Что только лишний раз подтверждает, что Java — это очень крутой язык программирования.

Так что же в нем такого крутого? Какие фишки добавили в него создатели?

Вы очень удивитесь, если сравните язык Java и язык С++: Java очень похож на сильно обрезанный С++!

Да, язык Java — это в какой-то мере сильно урезанный С++ . И если в С++ что-то можно сделать 20-ю способами, то в Java это можно сделать только одним способом . И в чем же тут преимущество, спросите вы?

Все дело в том, что современные программы очень большие, и часто программисты до 90% времени тратят на то, чтобы разбираться в чужом коде. И только 10% — на написание нового кода. Так что да, простота — это преимущество.

2. Java-компилятор

Кстати, вы не раз еще услышите, что неоспоримое преимущество Java над другими языками — это мультиплатформенность. Что же это такое и с чем его едят? Начнем издалека.

Читайте также:
Какой программой можно открыть файл nef

Дело в том, что компьютер умеет исполнять только простейшие команды.

Для собак есть команды «Рядом», «Лапу» и другие, слыша которую собака делает что-то важное. У компьютера роль таких команд выполняют числа: каждая команда закодирована некоторым числом (его еще называют машинным кодом).

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

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

    Программа на языке C++

Компилятор
Этапы компиляции для языка C++

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

Если вы написали программу под Android , то на операционной системе Windows она не запустится!

Но у Java гораздо более инновационный подход.

    Программа на языке Java

Java‑компилятор
Этапы компиляции для языка Java

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

А кто же компилирует программу в машинный код при ее запуске?

Для этого есть специальная программа под названием JVM (Java Virtual Machine) — Виртуальная Машина Java. Сначала запускают ее, а затем — программу, состоящую из байт-кода. А уже JVM перед выполнением нужной программы компилирует ее в машинный код.

Это очень мощный ход и одна из причин тотального доминирования Java.

3. Области доминирования Java

Благодаря вышеописанным преимуществам, программы, написанные на Java , могут выполняться практически на любых устройствах — компьютерах, телефонах, банкоматах, тостерах, банковских карточках.

Преимуществ такого подхода очень много. Именно поэтому программы на Android тоже пишутся на Java . А благодаря развитию мобильного сектора, Java занимает доминирующее положение в следующих отраслях программирования:

  1. Enterprise : тяжелые серверные приложения для банков, корпораций, инвестфондов и т.д.
  2. Mobile : мобильная разработка (телефоны, планшеты), благодаря Android.
  3. Web : лидирует PHP, но и Java держит солидный кусок рынка.
  4. Big Data : распределенные вычисления в кластерах из тысяч серверов.
  5. Smart Devices : программы для умного дома, электроники, холодильников с выходом в интернет.

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

Чем больше вы будете программировать на Java, тем больше будете находить ответов на вопрос «Почему именно Java?» .

Источник: javarush.com

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru