Алгоритм решения задачи, заданный в виде последовательности команд на языке вычислительной машины (в кодах машины), называется . или — элементарная инструкция машине, выполняемая ею автоматически без каких-либо дополнительных указаний и пояснений.
— теоретическая и практическая деятельность, связанная с созданием программ. Процесс перевода алгоритма в машинную программу называется .
Осуществление трансляции силами человека — задача очень сложная в силу большого объема работы и сложности системы команд современных ЭВМ. Поэтому в целях облегчения задачи трансляции появились промежуточные способы задания алгоритмов, получившие название .
Первоначально появились программы, переводящие символические имена в машинные коды. Затем были созданы программы, транслирующие арифметические выражения и, наконец, в 1958 году появился транслятор Фортрана — первого широко используемого языка программирования. С тех пор было создано множество языков программирования.
Языки программирования, оперирующие понятиями, близкими к исполнителю, называются . Наиболее распространенным языком низкого уровня является Ассемблер. Такие языки рассчитаны на определенную архитектуру ЭВМ и на определенный тип процессора. Они позволяют писать быстродействующие программы, которые используют минимальные ресурсы, однако, написание программ на них очень трудоемко.
Что с МОЗГОМ делает МУЗЫКА?
Языки программирования, оперирующие понятиями математической или информационной модели (или близкими к ним) называются . Языками высокого уровня являются такие языки, как Паскаль, C++, Бейсик, Java и другие. Языки высокого уровня используются для написания сложных программ, они не привязаны к конкретной архитектуре ЭВМ, значительно легче в изучении и рассчитаны на широкий круг задач.
Ряд языков предназначен не для реализации вычислительных алгоритмов, а для «склеивания» частей, реализованных на других языках программирования. Такие языки называются .
Существует два основных вида трансляторов языков высокого уровня: интерпретаторы, которые сканируют и проверяют исходный код в один шаг, и компиляторы, которые сканируют исходный код для производства текста программы на машинном языке, которая затем выполняется отдельно.
Интерпретаторы исполняют алгоритм медленнее, однако позволяют программисту контролировать ход исполнения программы, облегчают отладку и предоставляют разработчику ряд уникальных возможностей;
Программа на машинном языке, полученная с помощью компилятора, исполняется значительно быстрее, но ее отладка значительно труднее. В современном программировании все чаще применяется прием псевдо компиляции, когда программа компилируется в некий промежуточный псевдокод, который потом исполняется в специальном интерпретаторе, называемом средой исполнения. К таким языкам относятся Java, Visual Bask, языки семейства .NET.
Фортран
Язык Фортран был разработан фирмой IBM. Профессор Дж. Букс и группа американских специалистов в области программирования в 1954 году опубликовали первое сообщение о языке. Дословно название языка FORmula TRANslator — преобразование формул.
Парадокс Монти Холла | Двадцать одно. 2008. Момент из фильма [1080p]
Фортран в 60-70-е годы являлся одним из самых распространенных языков в мире. Он имеет простую структуру, программа на Фортране записывается в последовательности предложений или операторов (описание некоего преобразования информации) и оформляется по определенным стандартам. Эти стандарты накладывают ограничения, в частности, на форму записи и расположения частей оператора в строке бланка для записи операторов. Программа, записанная на Фортране, представляет собой один или несколько сегментов (подпрограмм) из операторов. Сегмент, управляющий работой всей программы в целом, называется основной программой.
Фортран был задуман для использования в сфере научных и инженерно-технических вычислений. Однако на этом языке легко описываются задачи с разветвленной логикой (моделирование производственных процессов, решение игровых ситуаций и т. д.), некоторые экономические задачи и особенно задачи редактирования (составление таблиц, сводок, ведомостей и т. д.).
Бейсик
Бейсик является сокращением от «Beginner’s All-purpose Symbolic Instruction Code» (BASIC) — Многоцелевой Символический Обучающий Код для Начинающих.
Бейсик значительно легче в изучении, чем другие языки, с ним легко работать, программы на нем пишутся обычно быстрее, чем на других языках программирования высокого уровня. Долгое время Бейсик был встроен в ПЗУ персональных компьютеров.
Бейсик считается деловым языком, снабженным мощными средствами решения специфических задач, которые обычно большинство пользователей решают при помощи небольших компьютеров, а именно: работая с файлами и выводя текстовое и графическое изображение на экране дисплея.
Исторически Бейсик обычно реализовался как интерпретатор. Однако сейчас существует множество реализаций Бейсика, использующих методы компиляции и псевдо компиляции.
Версия Бейсика от компании Microsoft — Visual Basic — является самым распространенным средством программирования в мире. Его пользуются более 20 миллионов программистов.
Си
Язык Си — универсальный язык программирования, для которого характерны экономичность выражения, современный поток управления и структуры данных, богатый набор операторов. Язык Си не является языком «очень высокого уровня» и не предназначается для некоторой специальной области применения. Отсутствие ограничений и универсальность языка делают его более удобным и эффективным для многих задач, чем языки, предположительно более мощные.
Язык Си, первоначально предназначавшийся для написания операционной системы UNIX на ЭВМ DEC PDP-11, был разработан и реализован на этой системе Деннисом Ричи. Операционная система, компилятор с языка Си и все прикладные программы системы UNIX написаны на Си. Большинство системного программного обеспечения современных компьютеров разрабатывается на Си и его разновидности Си++.
Паскаль
Язык Паскаль был создан Никлаусом Виртом в конце 60-х годов и назван в честь французского математика Блеза Паскаля. Паскаль по сравнению с другими языками программирования имеет упрощенный синтаксис. Однако Паскаль наиболее близок к идеальному алгоритмическому процедурному языку. Этот язык полностью реализует принципы структурного программирования.
Реализация Паскаля под названием Object Pascal и среда программирования Delphi являются одной из самых популярных систем программирования в мире.
Запись опубликована в рубрике Информатика с метками программирование, язык. Добавьте в закладки постоянную ссылку.
Источник: shkolo.ru
Как работают интерпретаторы компилирующего типа?
1) Интерпретаторы — считывают команды на языке высокого уровня построчно и построчно их выполняют.
То есть считал строку, скомпилировал — получил двоичный код. Выполнил этот двоичный код.
2) Компиляторы — сразу компилируют команды на языке высокого уровня в двоичный код.
При запуске программы эта программа (двоичный код) будет выполнен процессором.
3) Интерпретатор компилирующего типа — компилирует команды на языке высокого уровня в байт код.
Байт код понятен среде/виртуальной машине (.NET, Java), которая компилирует байт код в двоичный код.
Всё верно?
Вопрос в том — работают интерпретаторы компилирующего типа?
Откомпилировал все команды на языке высокого уровня (программу целиком) в байт код. И потом откомпилировал байт код в двоичный код и запустил программу.
Или построчно? Откомпилировал строку из команд на языке высокого уровня, получил «строку» с байт кодом и запустил её?
Или откомпилировал все команды на языке высокого уровня (программу целиком) в байт код. А потом построчно компилируем/запускаем этот байт код?
- Вопрос задан более года назад
- 957 просмотров
Комментировать
Решения вопроса 0
Ответы на вопрос 6
Программист на «си с крестами» и не только
1) То есть считал строку, скомпилировал — получил двоичный код. Выполнил этот двоичный код.
НЕТ. Считал — выполнил. Выполняется машинный код интерпретатора, а не программы.
3) Байт-код понятен среде/виртуальной машине (.NET, Java), которая компилирует байт-код в двоичный код
В ЧИСТОМ СЛУЧАЕ — НЕТ. Считал команду байт-кода — выполнил. Точно так же выполняется машинный код интерпретатора, а не программы. Что-то вроде:
switch (opcode) < case OP_ADD: < auto res = stack.pop() + stack.pop(); stack.push(res); >. >
Байт-код используется по нескольким причинам.
1. 3 быстрее 1.
2. С расширением языка мы меняем только компиляцию в байт-код. Оптимизация байт-кода, интерпретатор — остаются.
А компиляция в машинный код в 1 и 3 — это так называемая JIT-компиляция. Она может выполняться не всегда. Одни команды могут быть в машинном коде, а другие — интерпретироваться.
Кроме того, байт-код часто используется и в классических компиляторах 2-го типа! Это позволяет делать многоплатформенные коллекции компиляторов — все frontend’ы компилируют в байт-код, затем с байт-кодом делаем какую-то магию вроде оптимизации, отдаём его backend’у, и тот готовит OBJ-файл для нужного процессора.
Ответ написан более года назад
Комментировать
Нравится 5 Комментировать
Системный администратор со стажем.
Вы как то неверно представляете себе что такое компиляция, отсюда все вопросы.
- Берем программу целиком, прочитали, проанализировали, и перевели ее целиком в машинный код. Это компиляция.
- Берем одну инструкцию, переводим ее в машинный код, и выполняем это интерпретация
Компиляторы — сразу компилируют команды на языке высокого уровня в двоичный код.
При запуске программы эта программа (двоичный код) будет выполнен процессором.
Не сразу. Компиляторы читают программу, анализируют, и создают программу выполняющую эти же действия но уже в машинном коде.
- Вы можете прочитать инструкцию, проанализировать ее, понять какие материалы, запчасти понадобятся, возможно оптимизировать какие-то действия и составить план действий по ремонту. Это и есть компиляция.
- Но вы можете прочитать первую строку инструкции где написано — снимите двигатель. Выполнить ее, после чего перейти к чтению второй строки инструкции. Это интерпретация.
1) Интерпретаторы — считывают команды на языке высокого уровня построчно и построчно их выполняют.
То есть считал строку, скомпилировал — получил двоичный код. Выполнил этот двоичный код.
Идет поочередное выполнение команд . Прочитал инструкцию на языке программирования, и перевел ее в машинный код и выполнил. Никакой компиляции. Для компиляции нужно прочитать всю программу.
Результат работы компилятора — программа на другом языке.
Результат работы интерпретатора — выполненная инструкция
Разницу замечаете?
Источник: qna.habr.com
Презентация на тему Эволюция и классификация языков программирования. Основные понятия языков программирования. Компиляция и интерпретация
для того, чтобы людям было проще читать и писать для компьютера, но они затем должны транслироваться (транслятором или интерпретатором) в машинный код, который только и может исполняться компьютером. Языки программирования можно разделить на языки высокого уровня и языки низкого уровня.
Язык низкого уровня — это язык программирования предназначенный для определенного типа компьютера и отражающий его внутренний машинный код; языки низкого уровня часто называют машинно-ориентированными языками. Их сложно конвертировать для использования на компьютерах с разными центральными процессорами, а также довольно сложно изучать, поскольку для этого требуется хорошо знать принципы внутренней работы компьютера.
Язык высокого уровня — это язык программирования, предназначенный для удовлетворения требований программиста; он не зависит от внутренних машинных кодов компьютера любого типа. Языки высокого уровня используют для решения проблем и поэтому их часто называют проблемно-ориентированными языками. Каждая команда языка высокого уровня эквивалентна нескольким командам в машинных кодах, поэтому программы, написанные на языках высокого уровня, более компактны, чем аналогичные программы в машинных кодах.
Слайд 4 2. Описание языков програмирования
4
Оглавление
Слайд 5 3. Трансляция
Трансляция программы — преобразование программы, представленной на
одном из языков программирования, в программу на другом языке
и, в определённом смысле, равносильную первой. При трансляции выполняется перевод программы, понятной человеку, на язык, понятный компьютеру. Выполняется специальными программными средствами (транслятором).
Трансляторы реализуются в виде компиляторов или интерпретаторов. С точки зрения выполнения работы компилятор и интерпретатор существенно различаются. Если цель трансляции – преобразование всего исходного текста на внутренний язык компьютера (т.е. получение некоторого нового кода) и только, то такая трансляция называется также компиляцией.
Исходный текст называется также исходной программой или исходным модулем, а результат компиляции – объектным кодом или объектным модулем. Если же трансляции подвергаются отдельные операторы исходных текстов и при этом полученные коды сразу выполняются, такая трансляция называется интерпретацией. Поскольку трансляция выполняется специальными программными средствами (трансляторами), последние носят название компилятора или интерпретатора, соответственно.
Цель трансляции — преобразовать текст с одного языка на другой, который понятен адресату текста. В случае программ-трансляторов, адресатом является техническое устройство (процессор) или программа-интерпретатор.
Виды трансляторов
Трансляторы подразделяют на:
Адресный. Функциональное устройство, преобразующее виртуальный адрес в реальный адрес
Диалоговый. Обеспечивает использование языка программирования в режиме разделения времени.
Многопроходной. Формирует объектный модуль за несколько просмотров исходной программы.
Обратный. То же, что детранслятор (декомпилятор, дизассемблер).
Однопроходной. Формирует объектный модуль за один последовательный просмотр исходной программы.
Оптимизирующий. Выполняет оптимизацию кода в создаваемом объектном модуле.
Синтаксически-ориентированный (синтаксически-управляемый). Получает на вход описание синтаксиса и семантики языка и текст на описанном языке, который и транслируется в соответствии с заданным описанием.
Тестовый. Набор макрокоманд языка ассемблера, позволяющих задавать различные отладочные процедуры в программах, составленных на языке ассемблера
Слайд 6 4. Компиляция
Компиляция — преобразование программой-компилятором исходного текста программы,
написанного на языке высокого уровня в машинный язык, в
язык, близкий к машинному, или в объектный модуль. Результатом компиляции является объектный файл с необходимыми внешними ссылками для компоновщика.
Компилятор читает всю программу целиком, делает ее перевод и создает законченный вариант программы на машинном языке, который затем и выполняется.
Виды компиляции
Пакетная. Компиляция нескольких исходных модулей в одном пункте задания.
Построчная. То же, что и интерпретация.
Условная. Компиляция, при которой транслируемый текст зависит от условий, заданных в исходной программе. Так, в зависимости от значения некоторой константы, можно включать или выключать трансляцию части текста программы.
Слайд 7 5. Интерпритация
Интерпретация — процесс непосредственного покомандного выполнения программы без
предварительной компиляции, «на лету»; в большинстве случаев интерпретация намного
медленнее работы уже скомпилированной программы, но не требует затрат на компиляцию, что в случае небольших программ может повышать общую производительность.
Типы интерпретаторов
Простой интерпретатор анализирует и тут же выполняет (собственно интерпретация) программу покомандно (или построчно), по мере поступления её исходного кода на вход интерпретатора. Его достоинство — мгновенная реакция. Недостаток — такой интерпретатор обнаруживает ошибки в тексте программы только при попытке выполнения команды (или строки) с ошибкой.
Интерпретатор компилирующего типа — это система из компилятора, переводящего исходный код программы в промежуточное представление, например, в байт-код или p-код, и собственно интерпретатора, который выполняет полученный промежуточный код (так называемая виртуальная машина). Его достоинство – большее быстродействие выполнения программ (за счёт выноса анализа исходного кода в отдельный, разовый проход, и минимизации этого анализа в интерпретаторе). Недостатки — большее требование к ресурсам и требование на корректность исходного кода.
Алгоритм работы простого интерпретатора
прочитать инструкцию;
проанализировать инструкцию и определить соответствующие действия;
выполнить соответствующие действия;
если не достигнуто условие завершения программы, прочитать следующую инструкцию и перейти к пункту 2.
Слайд 8 6. Линкование
Линкование (компоновка) — это процесс, при котором
все «недокомпилированные» части программы доводятся до конца и связываются
между собой в исполняемый файл (или файлы) формата, понятного данной операционной системе. В итоге, мы получаем исполняемую программу.
Линкование важно, так как при разработке больших проектов код обычно вырастает настолько, что приходится его для повышения надежности раскидывать по разным файлам.
Для связывания модулей компоновщик использует таблицы имён, созданные компилятором в каждом из объектных модулей. Такие имена могут быть двух типов:
Определённые или экспортируемые имена — функции и переменные, определённые в данном модуле и предоставляемые для использования другим модулям
Неопределённые или импортируемые имена — функции и переменные, на которые ссылается модуль, но не определяет их внутри себя
Работа компоновщика заключается в том, чтобы в каждом модуле разрешить ссылки на неопределённые имена. Для каждого импортируемого имени находится его определение в других модулях, упоминание имени заменяется на его адрес.
Слайд 9 7. Два способа линкования
9
Оглавление
Существует два способа создания линкования:
Слайд 10 Упрощая, можно сказать, что при компилировании перевод программы
в понятную для машины форму осуществляется сразу же после
её создания. То есть из исходного текста на языке высокого уровня получается машинный код, пригодный для исполнения на данном процессоре. Если необходимо выполнить программу на другом типе процессора с несовместимой системой команд, то необходима перекомпиляция исходной программы на языке высокого уровня для данного типа процессора.
Программа же на интерпретируемом языке транслируется в машинные коды лишь при её выполнении. Делается это, по мере поступления команд, следующим образом. Каждой команде интерпретируемого языка в коде интерпретатора соответствует подпрограмма, созданная с использованием поддерживаемых аппаратной частью компьютера средств.
Когда эта команда встречается в коде, связанная с ней подпрограмма запускается, и необходимые действия выполняются. Так как особенности реализации интерпретируемых языков скрыты, кажется, что имеющиеся в них команды проделываются напрямую компьютером. Поэтому соответствующие интерпретаторы называют виртуальными компьютерами (или, чаще, виртуальными машинами). Для переноса программы на другую аппаратную базу (другой процессор) необходимо лишь наличие интерпретатора данного языка программирования для данного типа процессора.
Слайд 11 1. Информатика. (Учебное пособие) Горяев Ю.А. (МИЭМП; 2005, 116с.)
2. Информатика. (Учебник) Макарова Н.В., Волков В.Б. (2011, 576с.)
3. Информатика.
(Учебник) Могилев А.В., Пак Н.И., Хённер Е.К. (2004, 3-е изд., 848с.)
4. Информатика. (Учебник) Каймин В.А. (2001, 2-е изд., 272с.)
5. Информатика. (Учебник) Под общ. ред. А.Н. Данчула (2004, 528с.)
6. Информатика. (Учебник) Соболь Б.В. и др. (2007, 3-е изд, 446с.)
7. Информатика. (Учебник) Степанов А.Н. (2006, 4-е изд., 684с.)
8. Информатика. (Учебное пособие) Терехов А.В., Чернышев А.В., Чернышев В.Н. (ТГТУ; 2007, 128с.)
Источник: findtheslide.com