Большая часть работы программистов связана с написанием исходного кода, тестированием и отладкой программ на одном из языков программирования. Различные языки программирования поддерживают различные стили программирования. Единственный язык, напрямую выполняемый процессором — это машинный язык (также называемый машинным кодом).
Изначально все программисты прорабатывали программы в машинном коде, но сейчас эта трудная работа уже не делается. Вместо этого программисты пишут исходный код на языке программирования высокого уровня, и компьютер (используя компилятор, интерпретатор или ассемблер) транслирует его, в один или несколько этапов, уточняя все детали, в машинный код, готовый к исполнению на целевом процессоре.
Запись исходных текстов программ при помощи языков программирования облегчает понимание и редактирование человеком. Этому, в частности, помогают комментарии, допустимые в синтаксисе большинства языков. Для выполнения на компьютере готовый текст программы преобразуется (компилируется) в машинный код. Некоторые языки программирования позволяют обходиться без предварительной компиляции программы и переводят её в инструкции машинного кода непосредственно во время исполнения. Этот процесс называется динамической компиляцией, и он позволяет добиться большей переносимости программ между разными аппаратными и программными платформами при сохранении многих плюсов компиляции.
Просто о программах, компиляторах и интрерпретаторах. #3
Интерпретируемые программы, для которых, как правило, не применяется процесс компиляции и которые интерпретируются операционный системой или специальными программами-интерпретаторами, называются скриптами или «сценариями».
Технология программирования задач различается для операторных и функциональных языков программирования. Ограничимся рассмотрением вопроса для операторных языков. Тогда этот этап разбивается на два последовательных шага – разработку алгоритма и отладку программы.
Отладка программы – это самый трудоемкий этап. Его цель – проверка синтаксической и логической правильности программы, а также определение того, что программа функционирует на всем диапазоне допустимых данных.
В процессе отладки программы выделяются этапы:
1. трансляция исходного текста программы;
2. компоновка программы;
3. выполнение программы с целью определения логических ошибок;
4. тестирование программы
Трансляция, компиляция, интерпретация, линкование
1. Трансляция. Компиляция. Интерпретация
Трансляция программы — преобразование программы, представленной на одном из языков программирования, в программу на другом языке и, в определённом смысле, равносильную первой. При трансляции выполняется перевод программы, понятной человеку, на язык, понятный компьютеру. Выполняется специальными программными средствами (транслятором).
Трансляторы реализуются в виде компиляторов или интерпретаторов. С точки зрения выполнения работы компилятор и интерпретатор существенно различаются. Если цель трансляции – преобразование всего исходного текста на внутренний язык компьютера (т.е. получение некоторого нового кода) и только, то такая трансляция называется также компиляцией.
Надо ли знать программисту: историю ЭВМ, машинный код, уметь работать с низкоуровневыми языками?
Исходный текст называется также исходной программой или исходным модулем, а результат компиляции – объектным кодом или объектным модулем. Если же трансляции подвергаются отдельные операторы исходных текстов и при этом полученные коды сразу выполняются, такая трансляция называется интерпретацией. Поскольку трансляция выполняется специальными программными средствами (трансляторами), последние носят название компилятора или интерпретатора, соответственно.
Цель трансляции — преобразовать текст с одного языка на другой, который понятен адресату текста. В случае программ-трансляторов, адресатом является техническое устройство (процессор) или программа-интерпретатор.
Трансляторы подразделяют на:
· Адресный. Функциональное устройство, преобразующее виртуальный адрес в реальный адрес
· Диалоговый. Обеспечивает использование языка программирования в режиме разделения времени.
· Многопроходной. Формирует объектный модуль за несколько просмотров исходной программы.
· Обратный. То же, что детранслятор (декомпилятор, дизассемблер).
· Однопроходной. Формирует объектный модуль за один последовательный просмотр исходной программы.
· Оптимизирующий. Выполняет оптимизацию кода в создаваемом объектном модуле.
· Синтаксически-ориентированный (синтаксически-управляемый). Получает на вход описание синтаксиса и семантики языка и текст на описанном языке, который и транслируется в соответствии с заданным описанием.
· Тестовый. Набор макрокоманд языка ассемблера, позволяющих задавать различные отладочные процедуры в программах, составленных на языке ассемблера
Компиляция — преобразование программой-компилятором исходного текста программы, написанного на языке высокого уровня в машинный язык, в язык, близкий к машинному, или в объектный модуль. Результатом компиляции является объектный файл с необходимыми внешними ссылками для компоновщика.
Компилятор читает всю программу целиком, делает ее перевод и создает законченный вариант программы на машинном языке, который затем и выполняется.
· Пакетная. Компиляция нескольких исходных модулей в одном пункте задания.
· Построчная. То же, что и интерпретация.
· Условная. Компиляция, при которой транслируемый текст зависит от условий, заданных в исходной программе. Так, в зависимости от значения некоторой константы, можно включать или выключать трансляцию части текста программы.
Рисунок 1. Компиляция размеченного документа
Интерпретация — процесс непосредственного покомандного выполнения программы без предварительной компиляции, «на лету»; в большинстве случаев интерпретация намного медленнее работы уже скомпилированной программы, но не требует затрат на компиляцию, что в случае небольших программ может повышать общую производительность.
Простой интерпретатор анализирует и тут же выполняет (собственно интерпретация) программу покомандно (или построчно), по мере поступления её исходного кода на вход интерпретатора. Его достоинство — мгновенная реакция. Недостаток — такой интерпретатор обнаруживает ошибки в тексте программы только при попытке выполнения команды (или строки) с ошибкой.
Интерпретатор компилирующего типа — это система из компилятора, переводящего исходный код программы в промежуточное представление, например, в байт-код или p-код, и собственно интерпретатора, который выполняет полученный промежуточный код (так называемая виртуальная машина). Его достоинство – большее быстродействие выполнения программ (за счёт выноса анализа исходного кода в отдельный, разовый проход, и минимизации этого анализа в интерпретаторе). Недостатки — большее требование к ресурсам и требование на корректность исходного кода.
Алгоритм работы простого интерпретатора
1. прочитать инструкцию;
2. проанализировать инструкцию и определить соответствующие действия;
3. выполнить соответствующие действия;
4. если не достигнуто условие завершения программы, прочитать следующую инструкцию и перейти к пункту 2.
Рисунок 2. Схема интерпретации текста Ю. Лотмана
Линкование (компоновка) — это процесс, при котором все «недокомпилированные» части программы доводятся до конца и связываются между собой в исполняемый файл (или файлы) формата, понятного данной операционной системе. В итоге, мы получаем исполняемую программу.
Линкование важно, так как при разработке больших проектов код обычно вырастает настолько, что приходится его для повышения надежности раскидывать по разным файлам.
Для связывания модулей компоновщик использует таблицы имён, созданные компилятором в каждом из объектных модулей. Такие имена могут быть двух типов:
· Определённые или экспортируемые имена — функции и переменные, определённые в данном модуле и предоставляемые для использования другим модулям
· Неопределённые или импортируемые имена — функции и переменные, на которые ссылается модуль, но не определяет их внутри себя
Работа компоновщика заключается в том, чтобы в каждом модуле разрешить ссылки на неопределённые имена. Для каждого импортируемого имени находится его определение в других модулях, упоминание имени заменяется на его адрес.
Рисунок 3. Наглядная схема линкования
Существует два способа создания линкования:
Рисунок 4. Схема «Кольцо»
Рисунок 5. Схема «Елочка»
Упрощая, можно сказать, что при компилировании перевод программы в понятную для машины форму осуществляется сразу же после её создания. То есть из исходного текста на языке высокого уровня получается машинный код, пригодный для исполнения на данном процессоре. Если необходимо выполнить программу на другом типе процессора с несовместимой системой команд, то необходима перекомпиляция исходной программы на языке высокого уровня для данного типа процессора.
Программа же на интерпретируемом языке транслируется в машинные коды лишь при её выполнении. Делается это, по мере поступления команд, следующим образом. Каждой команде интерпретируемого языка в коде интерпретатора соответствует подпрограмма, созданная с использованием поддерживаемых аппаратной частью компьютера средств.
Когда эта команда встречается в коде, связанная с ней подпрограмма запускается, и необходимые действия выполняются. Так как особенности реализации интерпретируемых языков скрыты, кажется, что имеющиеся в них команды проделываются напрямую компьютером. Поэтому соответствующие интерпретаторы называют виртуальными компьютерами (или, чаще, виртуальными машинами). Для переноса программы на другую аппаратную базу (другой процессор) необходимо лишь наличие интерпретатора данного языка программирования для данного типа процессора.
· Роберт У. Себеста. Основные концепции языков программирования
· Вольфенгаген В. Э. Конструкции языков программирования.
Информация о работе «Трансляция, компиляция, интерпретация, линкование»
Раздел: Информатика, программирование
Количество знаков с пробелами: 10385
Количество таблиц: 0
Количество изображений: 5
Источник: kazedu.com
Понятие о машинных языках. Автоматизация программирования.
Машинный язык – язык программирования для представления программ в форме, допускающей их непосредственную реализацию аппаратными средствами конкретной ЭВМ. Программа на машинном языке представляет собой последовательность машинных команд, поэтому иногда машинным языком называют систему команд ЭВМ.
Перевод исходной программы, подлежащей выполнению на ЭВМ, осуществляется автоматически самой ЭВМ с помощью ассемблера. Команда (инструкция) – элемент программы, приводящий к выполнению определенных действий. Команда представляет собой код, содержащий информацию, необходимую для управления машинной операцией.
Под операцией понимают преобразование информации, выполняемое машиной под воздействием одной команды. Содержанием машинной операции может быть запоминание, передача, арифметическое и логическое преобразование некоторых машинных слов (операндов). Система команд (также набор команд) — соглашение о предоставляемых архитектурой средствах программирования, а именно: определённых типах данных, инструкций, системы регистров, методов адресации, моделей памяти, способов обработки прерываний и исключений, методов ввода и вывода.
Автоматизация процесса программирования — отстранение человека от процесса написания программного кода, как полностью, так и частично. Достигается путём разработки инструментария для формулировки и постановки задачи от человека машине (человеко-машинный язык), представлением средств данного инструмента в терминах области специализации человека-оператора, разработки анализатора входных данных (полученных средствами инструментария, описанного выше) и генерации конечного кода на языке машинного уровня, интеграции систем учёта и коррекции допущенных ошибок (системы ИИ).
Архивация файлов
Архивация – это сжатие одного или более файлов с целью экономии памяти и размещение сжатых данных в одном архивном файле. Архивация данных – это уменьшение физических размеров файлов, в которых хранятся данные, без значительных информационных потерь.
Архивация проводится в следующих случаях:
· когда необходимо создать резервные копии наиболее ценных файлов;
· когда необходимо освободить место на диске;
· когда необходимо передать файлы по E-mail.
Архивный файл представляет собой набор из нескольких файлов (одного файла), помещенных в сжатом виде в единый файл, из которого их можно при необходимости извлечь в первоначальном виде. Архивный файл содержит оглавление, позволяющее узнать, какие файлы содержатся в архиве.
· размер файла на диске и в архиве;
· сведения о местонахождения файла на диске;
· дата и время последней модификации файла;
· код циклического контроля для файла, используемый для проверки целостности архива;
Любой из архивов имеет свою шкалу степени сжатия.
Чаще всего можно встретить следующую градацию методов сжатия:
· Без сжатия (соответствует обычному копированию файлов в архив без сжатия).
· Быстрый (характеризуется самым быстрым, но наименее плотным сжатием).
· Максимальный (максимально возможное сжатие является одновременно и самым медленным методом сжатия).
Лучше всего архивируются графические файлы в формате .bmp, документы MS Office и Web-страницы.
Архиваторы – это программы (комплекс программ) выполняющие сжатие и восстановление сжатых файлов в первоначальном виде. Процесс сжатия файлов называется архивированием. Процесс восстановления сжатых файлов – разархивированием.
В настоящее время лучшим архиватором для Windows является архиватор WinRAR – это 32 разрядная версия архиватора RAR для Windows.
· Позволяет распаковывать архивы CAB, ARJ, LZH, TAR, GZ, ACE, UUE, BZ2, JAR, ISO, и обеспечивает архивирование данных в форматы ZIP и RAR.
· Обеспечивает полную поддержку архивов ZIP и RAR.
· Имеет специальные алгоритмы, оптимизированные для текста и графики. Для мультимедиа сжатие можно использовать только с форматами RAR.
· Поддерживает технологию перетаскивания (drag просмотров: 174 ; ЗАКАЗАТЬ НАПИСАНИЕ РАБОТЫ
Источник: poznayka.org
Преобразование программы на машинный язык это
1. Машинные языки
2. Языки ассемблера
3. Языки высокого уровня
Любой компьютер может непосредственно понимать лишь свой собственный машинный язык. Машинный язык — это природный язык определенного компьютера. Он определяется при проектировании аппаратных средств этого компьютера. Машинные языки в общ;ем случае содержат строки чисел (в конечном счете сокраш;енные до единиц и нулей), которые являются командами компьютеру на выполнении большинства элементарных операций в тот или иной момент времени. Машинные языки машинно-зависимы, т.е. каждый машинный язык может быть- использован только на компьютере одного определенного типа. Машинные языки тяжелы для человеческого восприятия, как это можно видеть из следующ;его примера программы на машинном языке, которая складывает сверхурочную зарплату с основной и запоминает результат как обш;ую зарплату:
+1300042774 +1400593419 +1200274027
По мере повышения популярности компьютеров стало очевидно, что программирование на машинных языках просто слишком медленно и утомительно для большинства программистов. Вместо использования строк чисел, которые компьютер мог бы понимать непосредственно, программисты начали использовать похожие на английский язык аббревиатуры для представления элементарных компьютерных операций. Эти аббревиатуры, напоминаюш;ие английский язык, сформировали основу языков ассемблера. Для преобразования программ на языке ассемблера в машинный язык со скоростью компьютера были разработаны программы трансляции, называемые ассемблерами. Следуюш;ий фрагмент программы на языке ассемблера также складывает сверхурочную зарплату (OVERPAY) с основной (BASEPAY) и запоминает результат как обш;ую зарплату (GROSSPAY), но он более понятен по сравнению со своим машинным аналогом:
LOAD BASEPAY ADD OVERPAY STORE GROSSPAY
Хотя такой код более понятен людям, он непонятен компьютеру до тех пор, пока не будет преобразован в компьютерный код.
Использование компьютеров резко возросло с появлением языков ассемблера, но эти языки все еще требовали много команд для полного описания даже простых задач. Для ускорения процесса программирования были разработаны языки высокого уровня, в которых иногда достаточно написать всего один оператор для решения реальной задачи. Программы трансляции, которые преобразуют программы на языках высокого уровня в машинные коды, называются компиляторами. Языки высокого уровня позволяют программисту писать программы, которые выглядят почти так же, как повседневный английский, и используют общепринятую математическую нотацию. Программа расчета зарплаты, написанная на языке высокого уровня, могла бы содержать такой оператор как:
grossPay = basePay + overTimePay
Очевидно, что языки высокого уровня гораздо удобнее с точки зрения программистов по сравнению с языками ассемблера и с машинными кодами. С и С++ относятся к числу наиболее мощных и наиболее распространенных языков высокого уровня.
Процесс компиляции программы с языка высокого уровня в машинный язык может занимать значительное время. Для непосредственного выполнения программ на языке высокого уровня без необходимости их компиляции в машинный язык были разработаны программы интерпретаторы. Хотя скомпилированные программы выполняются быстрее чем интерпретируемые, интерпретаторы популярны в таких условиях, когда программы часто перекомпилируются для добавления в них новых возможностей и исправления ошибок. Но когда программа разработана, ее скомпилированная версия будет выполняться более эффективно.
Язык С++ развился из С, который в свою очередь был создан на основе двух предшествующих языков — BCPL и В. Язык BCPL был создан в 1967 году Мартином Ричардом как язык для написания компиляторов и программного обеспечения операционных систем. Кен Томпсон предусмотрел много возможностей в своем языке В — дубликате BCPL и использовал В для создания ранних версий операционной системы UNIX в Bell Laboratories в 1970 году на компьютере DEC PDP-7. И BCPL, и В были нетипичными языками — каждый элемент данных занимал одно слово в памяти и бремя обработки элемента данных, например, как целого или действительного числа падало на плечи программиста.
Язык С был развит из В Деннисом Ритчи в Bell Laboratories и первоначально реализован на компьютере DEC PDP-H в 1972 году. С использует многие важные концепции BCPL и В, а также добавляет типы данных и другие свойства. Первоначально С приобрел широкую известность как язык разработки операционной системы UNIX. Сегодня фактически все новые операционные системы написаны на С или на С++.
В течение двух последних десятилетий С стал доступным для большинства компьютеров. С независим от аппаратных средств. При тщательной разработке на С можно написать мобильные программы, переносимые на большинство компьютеров.
В конце 70-х годов С развился в то, что теперь относят к традиционному С , классическому С или С Кернигана и Ритчи . Публикация издательством Prentice-Hall книги Кернигана и Ритчи Язык программирования С привлекла широкое внимание к этому языку. Эта публикация стала одной из наиболее удачных книг по вычислительной технике за все время.
Широкое распространение С на различных типах компьютеров (иногда называемых аппаратными платформами) привело, к сожалению, ко многим вариациям языка. Они были похожи, но несовместимы друг с другом. Это было серьезной проблемой для разработчиков программ, нуждавшихся в написании совместимых программ, которые можно было бы выполнять на нескольких платформах. Стало ясно, что необходима стандартная версия С. В 1983 году при Американском Национальном Комитете Стандартов в области вычислительной техники и обработки информации был создан технический комитет X3J11, чтобы обеспечить недвусмысленное и машинно-независимое определение языка . В 1989 году стандарт был утвержден. ANSI скоопери-
ровался с Международной Организацией Стандартов (International Standards Organizations — ISO), чтобы стандартизировать С в мировом масштабе; совместный стандарт был опубликован в 1990 году и назван ANSI/ISO 9899: 1990. Копии этого документа можно заказать в ANSI. Второе издание книги Кернигана и Ритчи, вышедшее в 1988 году, отражает эту версию, называемую ANSI С; эта версия языка используется теперь повсеместно.
Замечание по мобильности 1.1
Поскольку с — стандартизированный, аппаратно-независимый, широко доступный язык, приложения, написанные на С, часто могут выполняться с минимальными модификациями или даже без них на самых различных компьютерных системах.
C-t-b — расширение С — был разработан Бьерном Строустропом в начале 80-х годов в Bell Laboratories. С++ обеспечивает ряд свойств, которые приводят в порядок язык С, но, что более важно, он обеспечивает возможность объектно-ориентированного программирования. Это явилось революционной идеей в мире программного обеспечения.
Быстрое, корректное и экономное создание программного обеспечения остается иллюзорной мечтой и это в то время, когда требуется проектирование нового и все более мощного программного обеспечения. Объекты — это эффективные повторно используемые компоненты программного обеспечения, моделирующие элементы реального мира. Разработчики программного обеспечения обнаруживают, что использование достижений модульного, объектно-ориентированного проектирования может значительно повысить продуктивность групп разработки по сравнению с предшествующей популярной технологией программирования, такой, как структурное программирование. Объектно-ориентированные программы легче понимать, корректировать и модифицировать.
Было разработано много других объектно-ориентированных языков, включая наиболее заметный из них Smalltalk, разработанный в Центре Исследований Palo Alto компании Xerox (Palo Alto Research Centre — PARC). Smalltalk — чистый объектно-ориентированный язык — в нем буквально все является объектом. С++ — это гибридный язык, он предоставляет возможность программировать и в стиле С, и в объектно-ориентированном стиле, и в обоих стилях сразу. Существует глубокая уверенность в том, что с середины 90-х годов С++ станет доминирующим системно-образующим языком.
1.8. Библиотеки классов С++ и стандартная библиотека С
Программы на С++ содержат части, называемые классами и функциями. Вы можете программировать каждую часть, если вам необходимо сформировать С++ программу. Но большая часть программистов на С++ пользуется преимуществами богатого собрания уже существующих классов и функций из библиотек классов С++ и библиотеки стандартных функций ANSI С (которую С++ заимствовал из языка С версии ANSI). Таким образом, реально существуют две области изучения мира С++. Первая — это изучение С++ как такового и вторая — изучение того, как использовать классы из различных библиотек классов С++ и функции из стандартной библиотеки
Источник: www.pmbk.ru