Рубрики
Без рубрики

Ява На скорую руку. Компиляторы

Вступление Эта серия будет посвящена базовому пониманию Java…. С тегами java, компьютерные науки, тристан.

  • Эта серия будет посвящена базовому пониманию Java. Всякий раз, когда я ловлю себя на том, что спрашиваю: “Как это работает?”. Я создам сообщение в блоге и размещу его здесь. Эта серия не будет в порядке, поэтому не стесняйтесь читать любой пост, который вы сочтете наиболее актуальным.
  • Этот пост появился в результате размышлений о том, что такое компилятор, что он делает и почему это так важно.

Краткий обзор компиляторов

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

История компиляторов

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

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

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

Что делают компиляторы

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

1) Сгенерированный машинный код 2) Формат машинного кода, который они генерируют

  • Машинный код – это просто код, содержащий все единицы и нули, которые понимает компьютер.

Машинный код, сгенерированный компиляторами

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

1) Чистый машинный код 2) Дополненный машинный код 3) Код виртуальной машины

Чистый машинный код

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

Дополненный машинный код.

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

Код виртуальной машины

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

Форматы Машинного Кода

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

1) Формат исходного кода сборки 2) Перемещаемый двоичный файл 3) Абсолютный двоичный

Формат языка ассемблера

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

Перемещаемый Двоичный файл

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

Абсолютный двоичный

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

  • Не очень подробное руководство но, надеюсь, это даст нам обоим лучшее понимание компилятора.

  • Спасибо, что нашли время в свой день, чтобы прочитать этот мой пост в блоге. Если у вас есть какие-либо вопросы или проблемы, пожалуйста, прокомментируйте ниже или свяжитесь со мной по Твиттер .

Оригинал: “https://dev.to/theplebdev/java-quickie-compilers-jm7”