Единственный язык напрямую выполняемый процессором это
Большая часть работы программистов связана с написанием исходного кода, тестированием и отладкой программ на одном из языков программирования. Различные языки программирования поддерживают различные стили программирования. Единственный язык, напрямую выполняемый процессором — это машинный язык (также называемый машинным кодом). Изначально все программисты прорабатывали программы в машинном коде, но сейчас эта трудная работа уже не делается. Вместо этого программисты пишут исходный код на языке программирования высокого уровня, и компьютер (используя компилятор, интерпретатор или ассемблер) транслирует его, в один или несколько этапов, уточняя все детали, в машинный код, готовый к исполнению на целевом процессоре. Запись исходных текстов программ при помощи языков программирования облегчает понимание и редактирование человеком. Этому, в частности, помогают комментарии, допустимые в синтаксисе большинства языков. Для выполнения на компьютере готовый текст программы преобразуется (компилируется) в машинный код. Некоторые языки программирования позволяют обходиться без предварительной компиляции программы и переводят её в инструкции машинного кода непосредственно во время исполнения. Этот процесс называется динамической компиляцией, и он позволяет добиться большей переносимости программ между разными аппаратными и программными платформами при сохранении многих плюсов компиляции.
Интерпретируемые программы, для которых, как правило, не применяется процесс компиляции и которые интерпретируются операционный системой или специальными программами-интерпретаторами, называются скриптами или «сценариями».
Технология программирования задач различается для операторных и функциональных языков программирования. Ограничимся рассмотрением вопроса для операторных языков. Тогда этот этап разбивается на два последовательных шага – разработку алгоритма и отладку программы.
Отладка программы – это самый трудоемкий этап. Его цель – проверка синтаксической и логической правильности программы, а также определение того, что программа функционирует на всем диапазоне допустимых данных.
В процессе отладки программы выделяются этапы:
1. трансляция исходного текста программы;
2. компоновка программы;
3. выполнение программы с целью определения логических ошибок;
4. тестирование программы
Трансляция, компиляция, интерпретация, линкование
Трансляция. Компиляция. Интерпретация
Трансляция программы — преобразование программы, представленной на одном из языков программирования, в программу на другом языке и, в определённом смысле, равносильную первой. При трансляции выполняется перевод программы, понятной человеку, на язык, понятный компьютеру. Выполняется специальными программными средствами (транслятором).
Трансляторы реализуются в виде компиляторов или интерпретаторов. С точки зрения выполнения работы компилятор и интерпретатор существенно различаются. Если цель трансляции – преобразование всего исходного текста на внутренний язык компьютера (т.е. получение некоторого нового кода) и только, то такая трансляция называется также компиляцией. Исходный текст называется также исходной программой или исходным модулем, а результат компиляции – объектным кодом или объектным модулем. Если же трансляции подвергаются отдельные операторы исходных текстов и при этом полученные коды сразу выполняются, такая трансляция называется интерпретацией. Поскольку трансляция выполняется специальными программными средствами (трансляторами), последние носят название компилятора или интерпретатора, соответственно.
Цель трансляции — преобразовать текст с одного языка на другой, который понятен адресату текста. В случае программ-трансляторов, адресатом является техническое устройство (процессор) или программа-интерпретатор.
Трансляторы подразделяют на:
· Адресный. Функциональное устройство, преобразующее виртуальный адрес в реальный адрес
· Диалоговый. Обеспечивает использование языка программирования в режиме разделения времени.
· Обратный. То же, что детранслятор (декомпилятор, дизассемблер).
· Однопроходной. Формирует объектный модуль за один последовательный просмотр исходной программы.
· Оптимизирующий. Выполняет оптимизацию кода в создаваемом объектном модуле.
· Синтаксически-ориентированный (синтаксически-управляемый). Получает на вход описание синтаксиса и семантики языка и текст на описанном языке, который и транслируется в соответствии с заданным описанием.
· Тестовый. Набор макрокоманд языка ассемблера, позволяющих задавать различные отладочные процедуры в программах, составленных на языке ассемблера
Компиляция — преобразование программой-компилятором исходного текста программы, написанного на языке высокого уровня в машинный язык, в язык, близкий к машинному, или в объектный модуль. Результатом компиляции является объектный файл с необходимыми внешними ссылками для компоновщика.
Компилятор читает всю программу целиком, делает ее перевод и создает законченный вариант программы на машинном языке, который затем и выполняется.
· Пакетная. Компиляция нескольких исходных модулей в одном пункте задания.
· Построчная. То же, что и интерпретация.
· Условная. Компиляция, при которой транслируемый текст зависит от условий, заданных в исходной программе. Так, в зависимости от значения некоторой константы, можно включать или выключать трансляцию части текста программы.
Рисунок 1. Компиляция размеченного документа
Интерпретация— процесс непосредственного покомандного выполнения программы без предварительной компиляции, «на лету»; в большинстве случаев интерпретация намного медленнее работы уже скомпилированной программы, но не требует затрат на компиляцию, что в случае небольших программ может повышать общую производительность.
Простой интерпретатор анализирует и тут же выполняет (собственно интерпретация) программу покомандно (или построчно), по мере поступления её исходного кода на вход интерпретатора. Его достоинство - мгновенная реакция. Недостаток — такой интерпретатор обнаруживает ошибки в тексте программы только при попытке выполнения команды (или строки) с ошибкой.
Интерпретатор компилирующего типа — это система из компилятора, переводящего исходный код программы в промежуточное представление, например, в байт-код или p-код, и собственно интерпретатора, который выполняет полученный промежуточный код (так называемая виртуальная машина). Его достоинство – большее быстродействие выполнения программ (за счёт выноса анализа исходного кода в отдельный, разовый проход, и минимизации этого анализа в интерпретаторе). Недостатки — большее требование к ресурсам и требование на корректность исходного кода.
Алгоритм работы простого интерпретатора
1. прочитать инструкцию;
2. проанализировать инструкцию и определить соответствующие действия;
3. выполнить соответствующие действия;
4. если не достигнуто условие завершения программы, прочитать следующую инструкцию и перейти к пункту 2.
Рисунок 2. Схема интерпретации текста Ю. Лотмана
Линкование
Линкование (компоновка) - это процесс, при котором все "недокомпилированные" части программы доводятся до конца и связываются между собой в исполняемый файл (или файлы) формата, понятного данной операционной системе. В итоге, мы получаем исполняемую программу.
Линкование важно, так как при разработке больших проектов код обычно вырастает настолько, что приходится его для повышения надежности раскидывать по разным файлам.
Для связывания модулей компоновщик использует таблицы имён, созданные компилятором в каждом из объектных модулей. Такие имена могут быть двух типов:
· Определённые или экспортируемые имена — функции и переменные, определённые в данном модуле и предоставляемые для использования другим модулям
· Неопределённые или импортируемые имена — функции и переменные, на которые ссылается модуль, но не определяет их внутри себя
Работа компоновщика заключается в том, чтобы в каждом модуле разрешить ссылки на неопределённые имена. Для каждого импортируемого имени находится его определение в других модулях, упоминание имени заменяется на его адрес.
Рисунок 3. Наглядная схема линкования
Существует два способа создания линкования:
Рисунок 4. Схема «Кольцо»
Рисунок 5. Схема «Елочка»
Заключение
Упрощая, можно сказать, что при компилировании перевод программы в понятную для машины форму осуществляется сразу же после её создания. То есть из исходного текста на языке высокого уровня получается машинный код, пригодный для исполнения на данном процессоре. Если необходимо выполнить программу на другом типе процессора с несовместимой системой команд, то необходима перекомпиляция исходной программы на языке высокого уровня для данного типа процессора.
Программа же на интерпретируемом языке транслируется в машинные коды лишь при её выполнении. Делается это, по мере поступления команд, следующим образом. Каждой команде интерпретируемого языка в коде интерпретатора соответствует подпрограмма, созданная с использованием поддерживаемых аппаратной частью компьютера средств. Когда эта команда встречается в коде, связанная с ней подпрограмма запускается, и необходимые действия выполняются. Так как особенности реализации интерпретируемых языков скрыты, кажется, что имеющиеся в них команды проделываются напрямую компьютером. Поэтому соответствующие интерпретаторы называют виртуальными компьютерами (или, чаще, виртуальными машинами). Для переноса программы на другую аппаратную базу (другой процессор) необходимо лишь наличие интерпретатора данного языка программирования для данного типа процессора.
Термин программирование означает процесс и искусство создания компьютерных программ с помощью специальных языков программирования.
В общем смысле слова, программирование есть формализация предопределенного состояния, по реакции на событие, реализуемого средствами математики или естественных наук.
В узком смысле слова, программирование рассматривается как кодирование алгоритмов на заданном языке программирования. В более широком смысле программирование - процесс создания программ, то есть разработка программного обеспечения.
Программирование включает в себя:
· Проектирование - разработка комплекса алгоритмов
· Кодирование и компиляцию - написание исходного текста программы и преобразование его в исполнимый код с помощью компилятора
· Тестирование и отладку - выявление и устранение ошибок в программах
· Испытания и сдачу программ
Различные языки программирования поддерживают различные стили программирования (так называемые«парадигмы программирования»). Отчасти, искусство программирования состоит в том, чтобы выбрать один из языков, наиболее полно подходящий для решения имеющейся задачи. Разные языки требуют от программиста различного уровня внимания к деталям при реализации алгоритма, результатом чего часто бывает компромисс между простотой и производительностью (или между временем программиста и временем пользователя).
Единственный язык, напрямую выполняемый процессором - это машинный язык (также называемый «машинным кодом»). Как уже было сказано, изначально, все программисты прорабатывали каждую мелочь в машинном коде, но сейчас эта трудная работа уже не делается. Вместо этого, программисты пишут исходный код, и компьютер (используя компилятор, интерпретатор или ассемблер, речь о которых пойдёт чуть позже) транслирует его, в один или несколько этапов, уточняя все детали, в машинный код, готовый к исполнению на целевом процессоре. Однако, в некоторых языках, вместо машинного кода генерируется интерпретируемый двоичный код «виртуальной машины», также называемый байт-кодом (byte-code). Такой подход применяется в Forth, Lisp, Java (данному языку посвящена 3 Глава реферата).
Теперь, когда мы знаем немного о понятии «программирование», можно переходить к материальной части процесса создания программ. Это, разумеется, технические (аппаратные) средства обеспечения программирования - совокупность электрических, электронных и механических компонентов автоматизированных систем составляет их техническое обеспечение (в отличие от программных средств, представляющих собой программное обеспечение автоматизированных систем). Например, электронная вычислительная машина (ЭВМ) или компьютер - комплекс технических и программных средств, основанных на использовании электроники и предназначенных для автоматической или автоматизированной обработки данных в процессе решения вычислительных и информационных задач.
Понятие языка программирования
Процесс работы компьютера заключается в выполнении программы, то есть набора вполне определённых команд во вполне определённом порядке. Машинный вид команды, состоящий из нулей и единиц, указывает, какое именно действие должен выполнить центральный процессор. Значит, чтобы задать компьютеру последовательность действий, которые он должен выполнить, нужно задать последовательность двоичных кодов соответствующих команд. Программы в машинных кодах состоят из тысячи команд. Писать такие программы - занятие сложное и утомительное. Программист должен помнить комбинацию нулей и единиц двоичного кода каждой программы, а также двоичные коды адресов данных, используемых при её выполнении. Гораздо проще написать программу на каком-нибудь языке, более близком к естественному человеческому языку, а работу по переводу этой программы в машинные коды поручить компьютеру. Так возникли языки, предназначенные специально для написания программ, - языки программирования.
Язык программирования - это специальный язык, на котором пишут команды для управления компьютером. Языки программирования созданы для того, чтобы людям было проще читать и писать для компьютера, но они затем должны транслироваться (транслятором или интерпретатором) в машинный код, который только и может исполняться компьютером. Языки программирования можно разделить на языки высокого уровня и языки низкого уровня.
Язык низкого уровня - это язык программирования, предназначенный для определенного типа компьютера и отражающий его внутренний машинный код; языки низкого уровня часто называют машинно-ориентированными языками. Их сложно конвертировать для использования на компьютерах с разными центральными процессорами, а также довольно сложно изучать, поскольку для этого требуется хорошо знать принципы внутренней работы компьютера.
Язык высокого уровня - это язык программирования, предназначенный для удовлетворения требований программиста; он не зависит от внутренних машинных кодов компьютера любого типа. Языки высокого уровня используют для решения проблем и поэтому их часто называют проблемно-ориентированными языками. Каждая команда языка высокого уровня эквивалентна нескольким командам в машинных кодах, поэтому программы, написанные на языках высокого уровня, более компактны, чем аналогичные программы в машинных кодах.
Создатели языков по-разному толкуют понятие язык программирования. Среди общин мест, признаваемых большинством разработчиков, находятся следующие:
Функция: язык программирования предназначен для написания компьютерных программ, которые применяются для передачи компьютеру инструкций по выполнению того или иного вычислительного процесса и организации управления отдельными устройствами.
Задача: язык программирования отличается от естественных языков тем, что предназначен для передачи команд и данных от человека компьютеру, в то время как естественные языки используются лишь для общения людей между собой. В принципе, можно обобщить определение «языков программирования» - это способ передачи команд, приказов, чёткого руководства к действию; тогда как человеческие языки служат также для обмена информацией.
Исполнение: язык программирования может использовать специальные конструкции для определения и манипулирования структурами данных и управления процессом вычислений.
Со времени создания первых программируемых машин человечество придумало уже более двух с половиной тысяч языков программирования. Каждый год их число пополняется новыми. Некоторыми языками умеет пользоваться только небольшое число их собственных разработчиков, другие становятся известны миллионам людей. Профессиональные программисты иногда применяют в своей работе более десятка разнообразных языков программирования.
Но создать язык, удобный для написания программ, недостаточно. Для каждого языка нужен свой переводчик. Такими переводчиками являются специальные программы-трансляторы.
Транслятор- это программа, предназначенная для перевода программы, написанной на одном языке программирования, в программу на другом языке программирования. Процесс перевода называется трансляцией. Тексты исходной и результирующей программ находятся в памяти компьютера.Примером транслятора является компилятор.
Компилятор- это программа, предназначенная для перевода программы, написанной на каком-либо языке, в программу в машинных кодах. Процесс такого перевода называется компиляцией.
Компилятор создаёт законченный результат - программу в машинных кодах. Затем эта программа выполняется. Откомпилированный вариант исходной программы можно сохранить на диске. Для повторного выполнения исходной программы компилятор уже не нужен. Достаточно загрузить с диска в память компьютера откомпилированный в предыдущий раз вариант и выполнить его.
Существует другой способ сочетания процессов трансляции и выполнения программы. Он называется интерпретацией. Суть процесса интерпретации состоит в следующем. Вначале переводится в машинные коды, а затем выполняется первая строка программы. Когда выполнение первой строки окончено, начинается перевод второй строки, которая затем выполняется и так далее. Управляет этим процессом программа-интерпретатор.
Интерпретатор- это программа, предназначенная для построчных трансляции и выполнения исходной программы. Такой процесс называется интерпретацией.
Иногда один и тот же язык может использовать и компилятор, и интерпретатор. К числу таких языков относится, например, Бейсик.
Классификация языков программирования
Если вы успели заметить, в тексте уже прозвучали несколько отдельных названий языков программирования. Но перед тем как более подробно их описать, необходимо классифицировать их по группам для удобства восприятия.
Во-первых это машинно-ориентированные языки, т.е. языки, наборы операторов и изобразительные средства которых существенно зависят от особенностей ЭВМ (внутреннего языка, структуры памяти и т.д.). Машинно-ориентированные языки позволяют использовать все возможности и особенности Машинно-зависимых языков:
· высокое качество создаваемых программ (компактность и скорость выполнения);
· возможность использования конкретных аппаратных ресурсов;
· предсказуемость объектного кода и заказов памяти;
· для составления эффективных программ необходимо знать систему команд и особенности функционирования данной ЭВМ;
· трудоемкость процесса составления программ ( особенно на машинных языках и ЯСК), плохо защищенного от появления ошибок;
· низкая скорость программирования;
· невозможность непосредственного использования программ, составленных на этих языках, на ЭВМ других типов.
Машинно-ориентированные языки по степени автоматического программирования подразделяются на классы.
Как я уже упоминал, отдельный компьютер имеет свой определенный Машинный язык (далее МЯ), ему предписывают выполнение указываемых операций над определяемыми ими операндами, поэтому МЯ является командным. Однако, некоторые семейства ЭВМ имеют единый МЯ для ЭВМ разной мощности. В команде любого из них сообщается информация о местонахождении операндов и типе выполняемой операции.
В новых модулях ЭВМ намечается тенденция к повышению внутренних языков машинно - аппаратным путем реализовывать более сложные команды, приближающиеся по своим функциональным действиям к операторам алгоритмических языков программирования.
Языки Символического Кодирования (далее ЯСК), так же, как и МЯ, являются командными. Однако коды операций и адреса в машинных командах, представляющие собой последовательность двоичных (во внутреннем коде) или восьмеричных (часто используемых при написании программ) цифр, в ЯСК заменены на символы (идентификаторы), форма написания которых помогает программисту легче запоминать смысловое содержание операции. Это обеспечивает существенное уменьшение числа ошибок при составлении программ и в значительной степени облегчает труд программиста.
Есть также языки, включающие в себя все возможности ЯСК, посредством расширенного введения макрокоманд - они называются Автокоды.
В различных программах встречаются некоторые достаточно часто использующиеся командные последовательности, которые соответствуют определенным процедурам преобразования информации. Эффективная реализация таких процедур обеспечивается оформлением их в виде специальных макрокоманд и включением последних в язык программирования, доступный программисту.
Язык, являющийся средством для замены последовательности символов описывающих выполнение требуемых действий ЭВМ на более сжатую форму - называется Макрос (средство замены).
В основном, Макрос предназначен для того, чтобы сократить запись исходной программы. Компонент программного обеспечения, обеспечивающий функционирование макросов, называется макропроцессором. На макропроцессор поступает макроопределяющий и исходный текст. Реакция макропроцессора на вызов- выдача выходного текста.
Следующий вид языков - машинно-независимые языки. Это средства описания алгоритмов решения задач и информации, подлежащей обработке. Они удобны в использовании для широкого круга пользователей и не требуют от них знания особенностей организации функционирования ЭВМ и ВС.
Подобные языки получили название высокоуровневых языков программирования. Программы, составляемые на таких языках, представляют собой последовательности операторов, структурированные согласно правилам рассматривания языка(задачи, сегменты, блоки и т.д.). Операторы языка описывают действия, которые должна выполнять система после трансляции программы на МЯ.
Таким образом, командные последовательности (процедуры, подпрограммы), часто используемые в машинных программах, представлены в высокоуровневых языках отдельными операторами. Программист получил возможность не расписывать в деталях вычислительный процесс на уровне машинных команд, а сосредоточиться на основных особенностях алгоритма.
С расширением областей применения вычислительной техники возникла необходимость формализовать представление постановки и решение новых классов задач. Необходимо было создать такие языки программирования, которые, используя в данной области обозначения и терминологию, позволили бы описывать требуемые алгоритмы решения для поставленных задач, ими стали проблемно - ориентированные языки. Эти языки, ориентированные на решение определенных проблем, должны обеспечить программиста средствами, позволяющими коротко и четко формулировать задачу и получать результаты в требуемой форме.
Универсальные языки были созданы для широкого круга задач: коммерческих, научных, моделирования и т.д. Первый универсальный язык был разработан фирмой IBM. Он позволяет работать с символами, разрядами, числами с фиксированной и плавающей запятой. Язык учитывает включенные во многие машины возможности прерывания и имеет соответствующие операторы. Предусмотрена возможность параллельного выполнения участков программ.Появление новых технических возможностей поставило задачу перед системными программистами - создать программные средства, обеспечивающие оперативное взаимодействие человека с ЭВМ их назвали диалоговыми языками.Эти работы велись в двух направлениях. Создавались специальные управляющие языки для обеспечения оперативного воздействия на прохождение задач, которые составлялись на любых раннее неразработанных (не диалоговых) языках. Разрабатывались также языки, которые кроме целей управления обеспечивали бы описание алгоритмов решения задач.Непроцедурные языки составляют группу языков, описывающих организацию данных, обрабатываемых по фиксированным алгоритмам (табличные языки и генераторы отчетов), и языков связи с операционными системами.Позволяя четко описывать как задачу, так и необходимые для её решения действия, таблицы решений дают возможность в наглядной форме определить, какие условия должны быть выполнены, прежде чем переходить к какому-либо действию. Одна таблица решений, описывающая некоторую ситуацию, содержит все возможные блок-схемы реализаций алгоритмов решения.Программы, составленные на табличном языке, удобно описывают сложные ситуации, возникающие при системном анализе.
Рис. 2.1. Технологический процесс переработки информации в виде иерархической структуры по уровням
Используемые в производственной сфере такие технологические понятия, как "технологический процесс", "технологическая операция", "метрика", "норматив" и т. п. могут применяться и в ИТ. Для этого нужно начинать с определения цели. Затем следует попытаться провести структурирование всех предполагаемых действий, приводящих к намеченной цели, и выбрать необходимый программный инструментарий (рис. 2.1).
1-й уровень - этапы, где реализуются базовые технологические процессы, состоящие из операций и действий последующих уровней.
2-й уровень - операции, в результате выполнения которых будет создан конкретный объект в выбранной на 1-м уровне программной среде.
3-й уровень - действия, совокупность стандартных для каждой программной среды приемов работы, приводящих к выполнению поставленной в соответствующей операции цели.
4-й уровень - элементарные операции по управлению элементарными действиями объектов.
ИТ, как и другие технологии, должны отвечать следующим требованиям:
- обеспечивать высокую степень расчленения всего процесса обработки информации на этапы, операции, действия;
- включать весь набор элементов, необходимых для достижения поставленной цели;
- иметь регулярный и масштабируемый характер;
- этапы, действия, операции технологического процесса должны быть стандартизированы и унифицированы, что позволит более эффективно осуществлять целенаправленное управление информационными процессами.
Традиционно в процессе обработки информации используются как измерительная аппаратура, обеспечивающая входные данные, так и собственно обрабатывающие (вычислительные) системы. И те и другие прошли длинную дорогу развития вместе с человеческой цивилизацией. В следующем пункте будут перечислены основные вехи их истории.
Если раньше обрабатывающей системой был человек или какие-то механические приспособления, то для проведения процесса обработки было достаточно сформулировать набор правил (инструкций). Давно подметили, что повторяющиеся операции целесообразно автоматизировать в первую очередь и желательно перепоручить машинам. При этом человек, задавая циклическое правило работы машине, колоссально выигрывает в трудозатратах.
Предположим, вам надо сложить 1000 последовательных данных измерений. Заводим специальный счетчик-сумматор и присваиваем ему значение 0. Для каждого из данных надо получить результат измерений и добавить его к счетчику, то есть вам надо сделать 2001 операцию при "ручном" счете. Другой вариант - написать шесть инструкций для машины:
- завести счетчик-сумматор и присвоить ему значение 0;
- завести индекс (номер) текущей операции и присвоить ему значение 0;
- получить новый результат измерений;
- добавить его к счетчику-сумматору;
- увеличить на 1 индекс текущей операции;
- если он меньше 1000, то перейти к шагу 3.
За прошедшее время существенно усложнились задачи обработки информации, развились способы формулировки и записи правил работы машин (программ работы). Вычислительные устройства превратились в компьютеры, а правила работы - в компьютерные программы.
Программирование - процесс создания компьютерных программ с помощью языков программирования. Программирование сочетает в себе элементы искусства, науки, математики и инженерии.
В узком смысле слова программирование рассматривается как кодирование - реализация одного или нескольких взаимосвязанных алгоритмов на некотором языке программирования. Под программированием также может пониматься разработка логической схемы для интегральной микросхемы, а также процесс записи информации в микросхему ПЗУ (Постоянного Запоминающего Устройства) некоторой электронной системы. В более широком смысле программирование - процесс создания программ, то есть разработка программного обеспечения.
Составителями программ являются программисты. Большая часть работы программиста связана с написанием и отладкой исходного кода на одном из языков программирования.
Различные языки программирования поддерживают различные стили программирования (или парадигмы программирования). Отчасти искусство программирования состоит в том, чтобы на одном из языков эффективно реализовать алгоритм, наиболее полно подходящий для решения имеющейся задачи. Разные языки требуют от программиста различного уровня внимания к деталям при реализации алгоритма, результатом чего часто бывает компромисс между простотой и производительностью (или между временем программиста и временем пользователя).
Типичный процесс разработки программ состоит, в общем, из семи этапов:
- постановка задачи;
- формализация и специфицирование;
- выбор или составление алгоритма;
- программирование;
- компиляция (трансляция);
- отладка и тестирование;
- запуск в эксплуатацию.
Эксплуатируемая программа имеет дело с данными различных типов, предназначенных для решения конкретных задач.
Единственным языком , который непосредственно понимает процессор компьютера, является язык машинных кодов, который представляет собой последовательность двоичных чисел, изображаемых нулями и единицами. Эта особенность языка машинных кодов объясняется причинами технического характера. Оказалось, что технически гораздо легче построить компьютер на базе элементов, каждый из которых может находиться в одном из двух устойчивых состояний, одно из которых соответствует нулю, а другое единице. [2]
Применение единственного языка , играющего роль как ОЯ так и МЯ, называется амальгамированием, и, для того чтобы оно было эффективным, следует воспользоваться некоторым определением Рг ( записанным в этом языке) отношения доказуемости. [3]
Машине понятен единственный язык - язык двоичных цифр. Хранимые в памяти команды и данные представляются в двоичной форме, и только в таком виде они могут быть интерпретированы ЭВМ при выполнении программ, инструкции на естественном языке машина, к сожалению, понимать не в состоянии. [4]
Фортран остается сегодня единственным языком программирования , реализованным на всех без исключения типах ЭВМ - от персональных компьютеров до мощнейших супер - ЭВМ. Существует обширная справочная и методическая литература по программированию на этом языке ( например, [ 6]), публикуются и тиражируются на магнитных носителях библиотеки и ППП, многие научные монографии содержат в качестве иллюстраций или приложений тексты Фортран-программ. На фоне этого тотального успеха пользователи персональных компьютеров должны помнить только об одном уязвимом месте в идеологии Фортрана - отсутствии современных средств обеспечения надежности создаваемых программ. В Фортране сравнительно легко допустить труднообнаружи-мую ошибку, а отсутствие диалоговых реализаций языка ограничивает возможности отладки и тестирования программ. [5]
ПЛ / 1 - единственный язык программирования , позволяющий в полной мере использовать богатые возможности, предоставляемые вычислительными машинами третьего поколения в рамках операционной системы ОС ЕС. [6]
Не следует думать, однако, что АЛГОЛ является единственным языком , предназначенным для математических вычислений. [7]
Из предыдущего может сложиться впечатление, что язык ЛИСП ( а вернее его современные диалекты) - единственный язык ИИ . В действительности, конечно, это не так. Уже в середине 60 - х годов, то есть на этапе становления ЛИСПа, разрабатывались языки, предлагающие другие концептуальные основы. Наиболее важными из них в области обработки символьной информации являются, по нашему мнению, СНОБОЛ [ Griswold, 1978 ], разработанный в лабораториях Белла, и язык РЕФАЛ [ Турчин, 1968 ], созданный в ИПМ АН СССР. [8]
Все сказанное говорит о том, что новый язык высокого уровня ПЛ / 1 мог бы стать единственным языком программирования для реализации разнообразных возможностей любых вычислительных систем. Он мог бы позволить эффективно работать на ЭВМ различной конфигурации и управлять устройствами ввода-вывода. [9]
Три года спустя выяснилось, что выступавший в роли переводчика бухгалтер свободно владел гуджарати и хинди, но единственный язык , на котором он имел возможность общаться с миссис Игбал, был урду. [10]
Три года спустя выяснилось, что выступавший в роли переводчика бухгалтер свободно владел гуджарати и хинди, но единственный язык , на котором он имел возможность общаться с миссис Игбал, был урду. [11]
Проблема единства научного знания, его объективной истинности заменяется таким путем поисками единого, или, точнее, единственного языка науки . Вместо анализа объективной связи различных наук, их единства физика листы стремятся перевести специфические виды существующего знания на язык физики и на этой основе достигнуть их унификации. [12]
В общем случае под языком программирования понимается формальная система для записи алгоритмов в виде программ для ЭВМ, однако единственный язык , который понимает ЭВМ, является языком двоичных чисел, называемым часто языком машинных кодов. [14]
Программирование – процесс и искусство создания компьютерных программ и/или программного обеспечения с помощью языков программирования. Программирование сочетает в себе элементы искусства, фундаментальных наук (прежде всего математики) и инженерии.
В узком смысле слова, программирование рассматривается как кодирование — реализация одного или нескольких взаимосвязанных алгоритмов на некотором языке программирования. Под программированием также может пониматься разработка логической схемы для ПЛИС (Программируемая логическая интегральная схема (англ. programmable logic device, PLD) – электронный компонент, используемый для создания цифровых интегральных схем), а также процесс записи информации в ПЗУ. В более широком смысле программирование — процесс создания программ, то есть разработка программного обеспечения.
Программирование включает в себя:
- Анализ
- Проектирование - разработка алгоритма
- Кодирование и Компиляцию - написание исходного текста программы и преобразование его в исполнимый код с помощью компилятора
- Тестирование и отладку - выявление и устранение ошибок
- Сопровождение
Языки программирования
Большая часть работы программиста связана с написанием исходного кода на одном из языков программирования.
Различные языки программирования поддерживают различные стили программирования (т. н. парадигмы программирования). Отчасти искусство программирования состоит в том, чтобы выбрать один из языков, наиболее полно подходящий для решения имеющейся задачи. Разные языки требуют от программиста различного уровня внимания к деталям при реализации алгоритма, результатом чего часто бывает компромисс между простотой и производительностью (или между временем программиста и временем пользователя).
Единственный язык, напрямую выполняемый процессором — это машинный язык (также называемый машинным кодом). Изначально все программисты прорабатывали каждую мелочь в машинном коде, но сейчас эта трудная работа уже не делается. Вместо этого программисты пишут исходный код, и компьютер (используя компилятор, интерпретатор или ассемблер) транслирует его, в один или несколько этапов, уточняя все детали, в машинный код, готовый к исполнению на целевом процессоре. Даже если требуется полный низкоуровневый контроль над системой, программисты пишут на языке ассемблера, мнемонические инструкции которого преобразуются один к одному в соответствующие инструкции машинного языка целевого процессора.
См. также
- Компьютерная программа
- Язык программирования
- Разработка программного обеспечения
- Экстремальное программирование
- Олимпиады по программированию
- Блок-схема
Ссылки
- см. Lisp 1.5 в России
- Программирование в DMOZ
- Библиотека программного кода (offline)
- Сообщество разработчиков программ
- Ассоциация ISDEF
- Теоретический минимум по информатике: Основы программирования (курсы и учебные материалы)
Литература
- Роберт В Себеста "Основные концепции языков программирования", 5-е издание : Пер. с англ. - М. : 2001. - 672 стр. с ил., «Вильямс»
- Иан Соммервилл "Инженерия программного обеспечения", 6-е издание : Пер. с англ. - М. : 2002. - 624 стр. с ил., «Вильямс»
- М.В.Мозговой - Занимательное программирование
- Иан Грэхем "Объектно-ориентированные методы. Принципы и практика", 3-е издание : Пер. с англ. - М. : 2004. - 880 стр. с ил., «Вильямс»
- Стив Мак-Коннел, «Совершенный код» (Steve McConnel. Code Complete. Microsoft Press, 1993)
Основные понятия
Проекти́рование – процесс создания проекта, прототипа, прообраза предполагаемого или возможного объекта, состояния.
В технике — разработка проектной, конструкторской и другой технической документации, предназначенной для осуществления строительства, создания новых видов и образцов. В процессе проектирования выполняются технические и экономические расчёты, схемы, графики, пояснительные записки, сметы, калькуляции и описания.
Проект — комплект указанной документации и материалов (определённого свойства). Проект какого-либо объекта может быть индивидуальным или типовым. При разработке индивидуальных проектов широко применяются типовые или типовые проектные решения.
Исполнимый код = машинный код.
Машинный код (также употребляются термины собственный код, или платформенно-ориентированный код, или родной код, или нативный код — от англ. native code) – система команд (язык) конкретной вычислительной машины (машинный язык), который интерпретируется непосредственно микропроцессором или микропрограммами данной вычислительной машины.
Транслятор – программа, которая принимает на вход программу на одном языке (он в этом случае называется исходный язык, а программа — исходный код), и преобразует её в программу, написанную на другом языке (соответственно, целевой язык и объектный код).
Наиболее часто встречаются две разновидности трансляторов:
· Компиляторы – выдают результат в виде исполняемого файла (в данном случае считаем, что компоновка входит в компиляцию). Этот файл:
o транслируется один раз – может быть запущен самостоятельно
o не требует для работы наличия на машине создавшего его транслятора
· Интерпретаторы – исполняют программу после разбора (в этом случае в роли объектного кода выступает внутреннее представление программы интерпретатором). Исполняется она построчно. В данном случае программа
o транслируется (интерпретируется) при каждом запуске (если объектный код кэшируется, возможны варианты)
o требует для исполнения наличия на машине интерпретатора и исходного кода
Компилятор – транслятор, который осуществляет перевод всей исходной программы в эквивалентную ей результирующую программу на языке машинных команд (микропроцессора или виртуальной машины).
Интерпретатор (языка программирования) – программа для интерпретации, т.е. непосредственного исполнения программ (производства вычислений, предписываемых этими программами) из исходного кода на определённом языке.
Ассемблер (от англ. assembler – рабочий-сборщик) – компьютерная программа, компилятор исходного текста программы написанной на языке ассемблера, в программу на машинном коде.
Системное программирование
Системное программирование (или программирование систем) – род деятельности, заключающийся в работе над системным программным обеспечением. Основная отличительная черта системного программирования по сравнению с прикладным программированием заключается в том, что результатом последнего является выпуск программного обеспечения, предлагающего определённые услуги пользователям (например, текстовый процессор). в то время как результатом системного программирования является выпуск программного обеспечения, предлагающего сервисы по взаимодействию с аппаратным обеспечением (например, дефрагментация жёсткого диска), что подразумевает сильную зависимость таких программ от аппаратной части. В частности выделим следующее:
· программист должен учитывать специфику аппаратной части и другие свойства системы в которой функционирует программа, использовать эти свойства, например, применяя специально оптимизированный для данной архитектуры алгоритм.
· обычно используется низкоуровневый язык программирования или такой диалект языка программирования, который
o позволяет функционирование в окружении с ограниченным набором системных ресурсов
o работает максимально эффективно и имеет минимальное запаздывание по времени завершения
o имеет маленькую библиотеку времени выполнения (RTL) или не имеет вообще её
o позволяет прямое управление (прямой доступ) к памяти и управляющей логике
o позволяет делать ассемблерные вставки в код
· отладка программы может быть затруднена при невозможности запустить её в отладчике из-за ограничений на ресурсы, поэтому может применяться компьютерное моделирование для решения этой проблемы.
Системное программирование существенно отличается от прикладного, что обычно приводит к специализации программиста в одном из них.
Часто, для системного программирования доступен ограниченный набор средств. Использование автоматической сборки мусора довольно редкое явление и отладка обычно сложна. Библиотека времени выполнения, при её наличии, часто менее способная и совершает меньшее количество проверок. В связи с этими ограничениями обычно применяют при мониторинге и записи данных — операционные системы.
История
Изначально, программисты безвариантно писали на языке ассемблера. Эксперименты с поддержкой оборудования в языках высокого уровня (1960s привели к появлению таких, как BLISS и BCPL. Однако, язык программирования Си, сыгравший значительную роль в создании UNIX, завоевал большую популярность и распространился повсеместно к 1980-м годах.
В настоящее время (2006) некоторое применение нашлось для встраиваемого C++. Реализация основных частей в операционной системе и при использовании сетей нуждается в разработчиках системного ПО. Например, реализация постраничности (через виртуальную память) или драйверы устройств.
Термин Системное программирование непосредственно связан с термином Системный программист. Это программист, работающий (создающий, отлаживающий, диагностирующий и т. п.) над системным программным обеспечением.
Основные научные достижения Средневековья: Ситуация в средневековой науке стала меняться к лучшему с.
Читайте также: