Программа которая переводит в машинные коды программы

— Привет, Амиго. Меня зовут профессор Ханс Нудлс. Я – глава Ученого совета «Galactic Rush», а также курирую проект по обучению тебя программированию на Java.

— День добрый, профессор Нудлс.

— Я хочу рассказать тебе, почему Java – это очень крутой язык программирования.

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

— Дело в том, что компьютер умеет исполнять только простейшие числовые команды. Для собак есть команды «Рядом», «Лапу» и другие, слыша которую собака что-то делает важное.

У компьютера роль таких команд выполняют числа: каждая команда закодирована некоторым числом – кодом (их еще называют машинным кодом).

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

Закадровый перевод видео в любом Веб-браузере.

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

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

Компилятор

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

— Т.е если я написал программу и скомпилировал ее для Android, то она не будет работать, если я попробую запустить ее под Windows?

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

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

Java‑компилятор

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

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

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

— Как интересно. А зачем понадобилось так делать?

Читайте также:
Как установить программу без ведома на компьютер

— Это очень мощный ход. И одна из причин тотального доминирования 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

Компилятор VS интерпретатор: ключевые отличия

Интерпретаторы и компиляторы отвечают за преобразование языка программирования или сценариев (язык высокого уровня) в машинный код. Но если обе программы делают одно и то же, чем они различаются? Давайте разберемся.

Компилятор

Что такое компилятор ?

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

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

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

Интерпретатор

Что такое интерпретатор ?

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

Интерпретатор представляет собой машинную программу, которая непосредственно выполняет набор инструкций без их компиляции. Примерами интерпретируемых языков являются Perl, Python и Matlab.

  • И компилятор , и интерпретатор выполняют одну и ту же работу — преобразовывают язык программирования высокого уровня в машинный код. Однако компилятор преобразовывает исходный материал в машинный код перед запуском программы . Интерпретатор выполняет эту функцию при ее запуске .
Читайте также:
Программы похожие на shareman

Как это работает?

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

После этого запускается программа.

Интерпретатор создает программу. Он не связывает файлы и не генерирует машинный код. Происходит построчное выполнение исходных операторов во время исполнения программы.

Преимущества и недостатки

Преимущества компилятора

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

Недостатки компилятора

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

Преимущества интерпретатора

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

Недостатки интерпретатора

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

Различия

Рассмотрим основные различия между компилятором и интерпретатором

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

Основы компиляторов

Аннотация: Основные понятия. Компиляторы и интерпретаторы. Входной язык, целевой язык, язык реализации. T-диаграммы. Прямой компилятор. Раскрутка. Кросс-трансляторы.

Виртуальные машины. Компиляция «на лету».

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

Компьютеры сами по себе способны выполнять только очень ограниченный набор операций, называемых машинными кодами. В старые времена, когда появились первые компьютеры, программы писались в машинных кодах, представляющих собой последовательности двоичных чисел, однозначно воспринимаемых компьютером. В конце 50-х кодов прошлого века появились первые языки программирования, такие как язык ассемблера и Фортран. Для того, чтобы компьютер мог понять программу, написанную на каком-то языке программирования, необходим переводчик ( транслятор ) такой программы в машинные коды. Отметим, что, если оператор языка ассемблера отображается при трансляции чаще всего 1 Некоторые операторы языка ассемблера, например, такие, как операторы ввода/вывода, отображаются в несколько машинных команд. в одну машинную инструкцию, предложения языков более высокого уровня отображаются, вообще говоря, в несколько машинных инструкций.

Читайте также:
Самая лучшая программа для обработки фотографий на Айфон

Трансляторы бывают двух типов: компиляторы ( compiler ) и интерпретаторы ( interpreter ). Процесс компиляции состоит из двух частей: анализа ( analysis ) и синтеза ( synthesis ). Анализирующая часть компилятора разбивает исходную программу на составляющие ее элементы (конструкции языка) и создает промежуточное представление исходной программы. Синтезирующая часть из промежуточного представления создает новую программу, которую компьютер в состоянии понять.

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

Интерпретатор

В отличие от компилятора, интерпретатор не создает никакой новой программы, а просто выполняет каждое предложение языка программирования. Можно сказать, что результатом работы интерпретатора является «число».

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

В том случае, если исходный язык достаточно прост (например, если это язык ассемблера или Basic ), то никакое промежуточное представление не нужно, и тогда интерпретатор — это простой цикл . Он выбирает очередную инструкцию языка из входного потока, анализирует и выполняет ее. Затем выбирается следующая инструкция . Этот процесс продолжается до тех пор, пока не будут выполнены все инструкции, либо пока не встретится инструкция , означающая окончание процесса интерпретации.

Компилятор

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

Выход компилятора (объектная программа ) также представляет собой цепочку символов, но принадлежащую другому языку L_, например, языку некоторого компьютера. При этом сам компилятор написан на языке L_<3>, возможно, отличающемся от первых двух. Будем называть язык L_ исходным языком, язык L_ — целевым языком, а язык L_<3> — языком реализации. Таким образом, можно говорить о компиляторе как об отображении множества L_ в множество L_, т.е. K_<L3>: L_to L_.

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

Существует огромное количество различных языков программирования, начиная с таких традиционных языков программирования как Fortran и Pascal и кончая современными объектно-ориентированными языками такими, как C# и Java . Практически каждый язык программирования имеет какие-то особенности с точки зрения создателя транслятора. Однако мы начнем с рассмотрения разнообразных целевых языков компиляторов.

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

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