Ос windows интерпретатор это транслятор который

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

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

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

Для чего нужны интерпретаторы

Языки программирования создаются такими, чтобы писать на их было удобно человеку. Они близки к английскому языку, команды на них — человекопонятные. Это в первую очередь касается высокоуровневых ЯП — тех, которые ближе к человеку, чем к «железу».

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

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

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

Как работает интерпретатор

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

Интерактивный режим. Это обычно работа в консоли. Его еще называют REPL — Read-eval-print loop, цикл чтения, исполнения и печати. Работает он так. Человек пишет в консоли какую-то команду интерпретатору, и она тут же выполняется, как только он нажимает Enter.

Обычно для этого сначала нужно запустить интерпретатор отдельной командой, но не всегда. Например, если команда на JavaScript пишется в консоли браузера, ничего дополнительно включать не надо — в браузеры по умолчанию встроен интерпретатор JS.

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

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

Разница между интерпретатором и компилятором

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

У интерпретаторов и компиляторов есть ряд различий — теоретических и чисто практических.

  • Интерпретатор работает с кодом построчно, а компилятор переводит весь блок кода целиком.
  • Интерпретатор исполняет код, как только «прочтет» нужную строку, а компилятор отдает его на выполнение системе — сам он только переводит.
  • С компилятором нельзя работать в режиме REPL — только в пакетном.

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

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

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

Другие примеры интерпретируемых языков — PHP, который активно применяют в вебе для «серверной» части, универсальный Ruby и Perl — его часто используют для автоматизации, системного администрирования или работы с текстом.

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

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

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

Несколько интерпретаторов у одного языка

Чаще всего бывает так, что у одного языка есть несколько интерпретаторов, или, как говорят, несколько реализаций или движков. Яркий пример — JavaScript: там основных интерпретаторов три, причем одним пользуются браузеры на базе Chromium, другим — Mozilla, а третьим — браузеры Apple.

Разные реализации могут чуть-чуть отличаться в исполнении или в обработке некоторых сложных запросов. У каждого движка свои механизмы оптимизации, свои особенности. Если предполагается, что код будет запускаться из-под разных движков, желательно учесть их все. Например, тот же JavaScript: фронтенд-разработчики, работающие с «браузерной» частью сайта, должны учитывать и тестировать поведение кода в разных браузерах. Но общий принцип работы похож у всех.

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

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

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

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

Удобство отладки. Отлаживать код, написанный на интерпретируемом языке, проще по той же причине: он исполняется сразу. В случае с компилируемыми языками ошибка может возникнуть в одном месте, а заметной для компилятора стать в другом. Это затрудняет отладку. С интерпретируемыми языками в этом смысле проще: интерпретатор начинает «ругаться», как только доходит до ошибочного места.

Более того: если компилируемая программа обнаружит ошибку, она не выполнится совсем. А интерпретируемая — выполнится до места сбоя. Это тоже удобно при поиске ошибок, а еще помогает решить хотя бы часть задачи, прежде чем программа «упадет».

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

Независимость от платформы. Исполнение берет на себя интерпретатор, а не система. Поэтому язык не зависит от ОС, то есть по умолчанию кроссплатформенный. Это выгодно отличает интерпретируемые языки от компилируемых: в них исполнение напрямую зависит от системы. Ведь разные ОС воспринимают машинные коды по-разному, поэтому программы-компиляторы — свои для каждой системы. И код, скомпилированный для Windows, не запустится в Linux или на Mac.

Механизмы оптимизации. На руку программисту играют и сами интерпретаторы: в них встраивают механизмы, которые оптимизируют код сами. Это значит, что, если код написан не самым оптимальным способом, интерпретатор сгладит недостаток оптимизации за счет встроенных механизмов.

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

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

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

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

Зависимость от установленного интерпретатора. Интерпретируемые языки не зависят от операционной системы, но зависят от интерпретатора. Чтобы код запустился, нужно не только скачать файл с ним, но и установить интерпретатор. Если тот не установлен, компьютер просто не сможет выполнить программу — нечему будет понимать ее. А вот исполняемый файл, созданный через компилятор, можно запустить где угодно, но только в нужной ОС.

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

Какие языки лучше учить: компилируемые или интерпретируемые

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

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

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

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

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

Первый готовый к работе Компилятор был представлен в 1952 году Грейс Хоппер — американским учёным и коммодором флота США. 

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

Интерактивный режим еще называют циклом «чтения – исполнения – печати» (Read-eval-print loop или REPL). Пользователь пишет в консоли какую-то команду и как только нажимает клавишу Enter, команда выполняется. Такой режим используют для быстрых подсчетов, отправки запросов и других действий, которым достаточно одной команды.
Пакетный режим используется для более крупных задач, которые неудобно писать построчно и выполнять сразу же. Пользователь пишет код в файле и сохраняет его с нужным расширением. Интерпретатор получает файл, построчно считывает написанный там код и выполняет его.

Первый Интерпретатор был создан в 1958 году Стивом Расселом — американским ученым-программистом, наиболее известным благодаря созданию «Spacewar!», одной из самых ранних видеоигр.

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

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

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

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

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

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

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

Что все это значит для языка программирования Python?

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

 А о том, каков именно язык программирования Python, мы расскажем в следующей статье!

Следите за продолжением…

 Наш адрес: г. Могилев, ул. Чайковского, дом 11 (БЦ «БРИКС»), офис 214

 +375 (29) 737-37-87 

Viber  +375 (29) 737-37-87

          

Компиляторы и интерпретаторы: в чем разница?

Пройдите тест, узнайте какой профессии подходите

Работать самостоятельно и не зависеть от других

Работать в команде и рассчитывать на помощь коллег

Организовывать и контролировать процесс работы

Введение

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

Кинга Идем в IT: пошаговый план для смены профессии

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

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

Этапы работы компилятора

  1. Лексический анализ: На этом этапе исходный код разбивается на токены — минимальные единицы смысла, такие как ключевые слова, идентификаторы и операторы.
  2. Синтаксический анализ: Токены объединяются в синтаксические конструкции, такие как выражения и операторы, проверяется правильность их расположения.
  3. Семантический анализ: Проверяется смысловая корректность кода, например, соответствие типов данных.
  4. Оптимизация: Улучшается производительность кода, удаляются избыточные операции.
  5. Генерация кода: Создается машинный код или промежуточный код, который может быть выполнен процессором.

Пример работы компилятора

Представьте, что у вас есть программа на языке C:

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

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

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

Этапы работы интерпретатора

  1. Чтение кода: Интерпретатор читает исходный код построчно.
  2. Анализ: Каждая строка кода анализируется на предмет синтаксической и семантической корректности.
  3. Выполнение: Код выполняется немедленно после анализа, результаты выполнения отображаются или используются в дальнейшем.

Пример работы интерпретатора

Рассмотрим программу на языке Python:

Интерпретатор Python берет эту строку кода и сразу же выполняет ее, выводя «Hello, World!» на экран. В отличие от компилятора, интерпретатор не создает исполняемый файл; он выполняет код непосредственно. Это позволяет быстро тестировать и отлаживать программы, так как изменения в коде сразу же отражаются в результатах выполнения.

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

1. Время выполнения

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

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

2. Ошибки

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

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

3. Платформенная независимость

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

Интерпретируемые языки часто более платформенно независимы, так как интерпретатор может быть реализован для различных операционных систем. Например, интерпретатор Python доступен для Windows, macOS и Linux, что позволяет запускать один и тот же код на разных платформах без изменений.

4. Промежуточный код

Некоторые компиляторы, такие как Java-компилятор, генерируют промежуточный код (байт-код), который затем выполняется виртуальной машиной (JVM). Это позволяет достичь некоторой степени платформенной независимости. Промежуточный код может быть выполнен на любой платформе, для которой существует виртуальная машина, что упрощает переносимость программ.

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

5. Удобство отладки

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

Интерпретаторы позволяют быстро вносить изменения и тестировать их, что делает процесс отладки более интерактивным. Вы можете использовать интерактивные среды разработки (IDE) и REPL (Read-Eval-Print Loop) для быстрого тестирования и отладки кода.

Заключение

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

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

Читайте также

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

  • Все объединяет идея языков
  • От цифр к словам
  • Первым переводчиком был компилятор
  • Как интерпретатор делает построчную трансляцию
  • Транслятор влияет на опыт пользователя

Это адаптированный перевод статьи A Deeper Inspection Into Compilation And Interpretation от разработчика Vaidehi Joshi из компании Vimeo. Повествование ведется от имени автора.

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

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

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

Все объединяет идея языков

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

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

  • Проверить текст на ошибки
  • Сделать лексический и синтаксический анализ
  • Сохранить результат перевода.

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

Чтобы познакомиться с ними, а заодно и с магией перевода, перенесемся в США прошлого века.

От цифр к словам

Преспер Эккерт и Джон Мокли делали компьютеры для военных. Сначала они работали в родном университете, но потом тот стал присваивать патенты преподавателей. Эккерту и Мокли это не понравилось, они ушли и открыли собственную фирму по продаже компьютеров.

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

В том числе и Грейс Хоппер.

Читайте также:
От эксперимента до стандарта. Пионеры веба рассказывают историю появления синей гиперссылки

Однажды Хоппер предложила коллегам не мучиться с машинным кодом, а говорить с компьютером на английском языке. Например, сказать ему: «Вычти подоходный налог из зарплаты». Как отреагировали ее коллеги и начальство, вы уже знаете: «Они мягко объяснили мне, что компьютеры могут решать лишь арифметические задачи и что они никогда не смогут выполнять программы», — рассказывала Хоппер в своей биографии «Grace Hopper: Navy Admiral and Computer Pioneer».

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

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

Первым переводчиком был компилятор

Хоппер показала коллегам свой переводчик в 1952 году, и ее проигнорировали. Три года технологией никто не пользовался, пока, наконец, проект не заметили в Министерстве обороны США.

Зачем военным понадобился компьютер, который заказали в Бюро переписи населения? Зачем им нужна была технология Хоппер, на которую махнули рукой ее более авторитетные коллеги?

Дело в устройстве первого переводчика (как говорят в программировании, транслятора). Вот как работал этот транслятор:

  1. Хоппер писала инструкцию на английском языке — «Вычти подоходный налог»
  2. Компилятор переводил инструкцию в машинный код — тогда это были цифры и буквы
  3. Компьютер выполнял машинный код, не зная ничего про инструкцию на английском.

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

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

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

Люди в американском правительстве считали компилятор временным решением. Однако концепция трансляторов, как и принципы языка COBOL, прочно вошли в инженерные практики на многие годы.

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

Этот транслятор придумал другой бунтарь: его тоже отвергали авторитеты, и он тоже определил черты индустрии на многие годы. История Хоппер повторилась, но в этот раз в другом штате.

Как интерпретатор делает построчную трансляцию

На дворе идет 1958 год, компиляторы давно и успешно используются — в том числе в Массачусетском технологическом университете, где стоит IBM 704. Эта гигантская дорогая штуковина занимает всю комнату. И на ней куется Lisp — язык, на котором 30 лет после этого писался весь код для разработок в области искусственного интеллекта.

Но сейчас, в октябре 58-го, один из местных разработчиков прохлаждается вместо того, чтобы кормить адскую машину перфокартами. Он углубился в чтение статьи своего профессора и по совместительству босса, Джона Маккарти. Бездельника звали Стив Рассел.

«Потом Стив подошел ко мне и сказал: «Слушай, а почему у нас нет функции eval?». Я посмеялся конечно, и отвечаю: «Слушай, не путай теорию и практику, хорошо? Eval — это теоретическое понятие»», — Джон Маккарти для симпозиума ACM 1984 года.

Маккарти хотел как лучше, отказывая Расселу в проекте. Подумайте сами: eval — это команда, которая превращает любую строку в функцию и потом еще выполняет ее. Это два действия за один перевод! Невыполнимый трюк для транслятора, который умеет отдавать процессору только одну инструкцию за раз.

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

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

Но если вы просто будете отправлять инструкции процессору построчно, то у вас не будет интерпретатора. Он отправляет результат перевода не в процессор, а обратно в программу — это позволяет создавать интересные многоступенчатые команды вроде eval.

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

Транслятор влияет на опыт пользователя

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

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

Еще нам неважно, что у другого студента MacOS, а у вас — Windows: интерпретатор берет всю работу по совместимости на себя, для работы кода важно, чтобы у всех стоял интерпретатор.

Интерпретация идеальна для распространения небольших программ, но для больших проектов не подойдет.

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

Компилятор и интерпретатор делают одну и ту же работу, так почему компилятор быстрее?

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

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

Системы программирования — это программы для создания новых программ и их отладки.

Что входит в состав?

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

Разберём подробнее понятие «транслятор» и какие они бывают.

Используется два вида трансляторов — интерпретаторы и компиляторы.

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

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

Программы разрабатывают на языках программирования.

Язык программирования — формальный язык, который предназначен для разработки программ.

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

Классификация языков программирования

Языки для обучения программированию Бейсик, Pascal, Logo, Python, КуМир
Языки для написания интернет-сайтов PHP, JavaScript, Python
Профессиональные языки Java, C, C\(++\), C#, Delphi, Lazarus

Любая система программирования имеет ряд динамически подключаемых библиотек. Разберём использование модулей, входящих в библиотеки в двух самых распространённых языках программирования: PascalABC и Python.

PascalABC

Название (как вызвать) Назначение
Uses crt Позволяет открывать выполнение программы в новом окне
Uses GraphABC Позволяет работать с графикой

Python

Название (как вызвать) Назначение
import math Подключает дополнительные возможности — использование математических функций: sqrt, abc, sin, cos и др.
from fractions import Fraction                            Поддерживает работу с рациональными числами

Понравилась статья? Поделить с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
  • Как вызвать меню восстановления windows 10 при загрузке компьютера
  • Установка windows server 2003 на hyper v
  • Код ошибки программы почта windows live 0x800ccc0f протокол pop3 порт 995 защита ssl да
  • Настройка мыши в windows 10 приложение
  • Почта майл ру клиент для windows 10