Оглавление
1. Понятие о языках программирования.
3
2. Компиляторы и интерпретаторы.
3
3. Уровни языков программирования.
5
4. Языки низкого уровня.
6
4.1 Ассемблер.
6
5. Обзор языков программирования высокого уровня.
7
5.1 Фортран.
7
5.2 Кобол.
7
5.3 Алгол.
8
5.4 Паскаль.
8
5.5 Бейсик.
9
5.6 Си.
9
5.7 Си++.
10
6. Список литературы:
12
Язык программирования
– один из способов записи алгоритмов; совокупность набора символов системы, правил образования и истолкования конструкций из символов для задания алгоритмов с использованием символов естественного языка.
Понятие о языках программирования.
Процессор компьютера – это большая интегральная микросхема. Все команды и данные он получает в виде электрических сигналов, но их можно представить и как совокупности нулей и единиц, т. е. числами. Поэтому реально программа, с которой работает процессор, представляет собой последовательность чисел, называемых машинным кодом
.
Написать программу в машинном коде достаточно сложно, причем сложность работы непропорционально возрастает с увеличением размера программы. Условно можно считать, что машинный код приемлем, если размер программы не превосходит нескольких десятков байтов и нет потребности в операциях ручного ввода и вывода данных. Такая ситуация встречается, например, при программировании простейших автоматов.
Более сложные программы создают с помощью так называемых языков программирования
. Теоретически программу можно написать и средствами обычного человеческого языка – это называется программированием на метаязыке, но автоматически перевести в машинный код обычный человеческий язык пока невозможно. Перевод выполняют специальные служебные программы, называемые трансляторами
, а трансляторов, способных перевести в машинный код обычный человеческий язык, пока не существует (из-за высокой неоднозначности естественного языка).
Языки программирования – искусственные языки. Они отличаются от естественных человеческих языков малым количеством слов, значение которых понятно транслятору (эти слова называются ключевыми
), и довольно жесткими требованиями по форме записи операторов (совокупность этих требований образует грамматику
и синтаксис
языка программирования). Нарушения формы записи приводят тому, что транслятор не может правильно выполнить перевод и выдает сообщение об ошибке.
Компиляторы и интерпретаторы.
Что же нужно, чтобы «создать язык программирования»?
На первый взгляд, для этого необходимо определить какие инструкции в нем могут использоваться (их называют операторами
), жестко утвердить список ключевых слов, которые допустимо использовать, и разработать правила записи каждого из операторов (правила синтаксиса). Однако этого не достаточно. Это лишь идея языка программирования. Для того, чтобы он имел практическое применение, следует разработать программу, способную транслировать текст, записанный по всем правилам данного языка в машинный код, то есть создать транслятор. Таким образом, именно транслятор представляет собой конкретную реализацию идеи языка программирования.
По принципу действия различают два вида трансляторов: компиляторы
и интерпретаторы
. Соответственно с этим можно выделить два класса языков программирования: компилируемые
и интерпретируемые
.
Трансляция – это перевод. Если мы посмотрим, как работают переводчики с иностранных языков, то тоже увидим, что существует два подхода: синхронный перевод и перевод текстов.
Синхронный переводчик «ловит» услышанную фразу и переводит ее как можно ближе к смыслу. В момент перевода он не знает, какая фраза последует далее, и не успевает учитывать фразы, высказанные ранее. Он как бы в любой момент времени работает с одной конкретной фразой. Для перевода каких-либо специфических понятий ему приходится выстраивать целые конструкции. Фразы синхронного перевода обычно длиннее, чем их оригинал, и не отличаются изяществом.
Литературный переводчик сначала несколько раз прочитает весь текст, подлежащий переводу. Он заранее найдет в нем все особо сложные для перевода места, построит нужные конструкции и будет ими пользоваться всякий раз, когда возникнет необходимость. При переводе одной конкретной фразы переводчик должен учитывать особенность всей книги в целом и даже особенности других произведений того же автора.
Интерпретаторы
работают как синхронные переводчики. Они берут один оператор из программы, транслируют его в машинный код (или в какой-то промежуточный код, близкий к машинному коду) и исполняют его. Если какой-то оператор многократно используется в программе, интерпретатор всякий раз будет добросовестно выполнять его перевод так, как будто встретил его впервые.
Компиляторы
обрабатывают программу в несколько приемов. Сначала они несколько раз просматривают исходный текст (обычно он называется исходным кодом), находят общие места, Выполняют проверку на отсутствие ошибок синтаксиса и внутренних противоречий, и лишь потом переводят текст в машинный код. В результате программа получается компактной и эффективной.
Если программа написана на интерпретируемом языке программирования, то ее можно выполнить только на том компьютере, на котором предварительно будет установлен интерпретатор, ведь он должен участвовать в исполнении программы. Программы, написанные на компилируемых языках программирования, в посредниках не нуждаются – после компиляции уже получен машинный код, в котором есть все необходимее для работы процессора. Поэтому такие программы работают на любом компьютере и делают это в сотни раз быстрее. Это достоинство компилируемых языков программирования.
Однако у программ, написанных на интерпретируемых языках программирования, есть другое преимущество. Так как мы можем исполнять их только под управлением интерпретатора, то соответственно мы можем в любой момент времени остановить работу программы, посмотреть ее операторы, внести нужные изменения, вновь запустить и т. д. Содержание программы открыто для пользователя. Для откомпилированных программ все это сделать практически невозможно. После компиляции программы ее исходный текст остается только у автора. Все остальные пользователи получают машинный код, который можно исполнять, но практически нельзя ни посмотреть, ни изменить. Хотя теоретически это сделать можно, но для этого необходимы огромные затраты времени, наличие специальных программ и высокий уровень знаний и опыта.
Уровни языков программирования.
Существует два уровня языков программирования: языки низкого уровня
и языки высокого уровня
.
Язык программирования низкого уровня
– это язык программирования, созданный для использования со специальным типом процессора и учитывающий его особенности. В данном случае «низкий уровень» не значит «плохой». Имеется в виду, что язык близок к машинному коду (он позволяет непосредственно реализовать некоторые команды процессора).
Языки низкого уровня мало похожи на нормальный, привычный человеку язык. Большие, грамосткие программы на таких языках пишутся редко. Зато если программа будет написана на таком языке, то она будет работать быстро, занимая маленький объем и допуская минимальное количество ошибок. Чем ниже и ближе к машинному уровень языка, тем меньше и конкретнее задачи, которые ставятся перед каждой командой.
Для каждого типа процессоров самым низким уровнем является язык ассемблера
, который позволяет представить машинный код не в виде чисел, а в виде условных обозначений, называемых мнемониками. У каждого типа процессора свой язык ассемблера; его можно рассматривать одновременно и как особую форму записи машинных команд, и как язык программирования самого низкого уровня.
Достоинством языков низкого уровня является то, что с их помощью создают самые эффективные программы (краткие и быстрые). Недостаток таких языков в том, что их трудно изучать из-за необходимости понимать устройство процессора и в том, что программа, созданная на таком язык, неприменима для процессоров других типов.
Языки программирования высокого уровня
заметно проще в изучении и применении. Программы, написанные с их помощью, можно использовать на любой компьютерной платформе, правда при условии, что для нее существует транслятор данного языка. Эти языки вообще никак не учитывают свойства конкретного процессора и не предоставляют прямых средств для обращения к нему. В некоторых случаях это ограничивает возможности программистов, но зато и оставляет меньше возможностей для совершения ошибок.
Языки высокого уровня в большей степени ориентированы на человека; команды этих языков – понятные человеку английские слова. Чем выше уровень языка, тем больше приходится проделать операций для выполнения необходимой команды.
С появлением языков высокого уровня программисты получили возможность больше времени уделять решению конкретной проблемы, не отвлекаясь особенно на весьма тонкие вопросы организации самого процесса выполнения задания на машине. Кроме того, появление этих языков ознаменовало первый шаг на пути создания программ, которые вышли за пределы научно-исследовательских лабораторий и финансовых отделов.
Достоинства языков программирования высокого уровня
:
· алфавит языка значительно шире машинного, что делает его гораздо более выразительным и существенно повышает наглядность и понятность текста;
· набор операций, допустимых для использования, не зависит от набора машинных операций, а выбирается из соображений удобства формулирования алгоритмов решения задач определенного класса;
· конструкции операторов задаются в удобном для человека виде;
· поддерживается широкий набор типов данных.
Существуют также как универсальные, так и специализированные языки программирования.
Языки низкого уровня.
Ассемблер.
К языкам низкого уровня относятся языки Ассемблера. Свое название они получили от имени системной программы Ассемблер, которая преобразует исходные программы, написанные на таких языках, непосредственно в коды машинных команд. Термин «ассемблер» произошел от английского слова assembler – сборщик частей в одно целое. Частями здесь служат операторы, а результатом сборки – последовательность машинных команд. Процесс сборки называется ассемблированием.
Ассемблер машинно-зависимый язык, т. е. он отражает особенности архитектуры конкретного типа компьютера. Исходная программа, написанная на ассемблере, состоит из одного или нескольких модулей, а каждый модуль – из операторов.
Язык Ассемблера объединяет в себе достоинства языка машинных команд и некоторые черты языков высокого уровня. Ассемблер обеспечивает возможность применения символических имен в исходной программе и избавляет программистов от утомительного труда по распределению памяти компьютера для команд, переменных и констант, что неизбежно при программировании на языке машинных команд.
Ассемблер позволяет также гибко и полно использовать технические возможности компьютера, как и язык машинных команд. Транслятор исходных программ в Ассемблере проще транслятора, требующегося для языка программирования высокого уровня. На Ассемблере можно написать столь же эффективную по размеру и времени выполнения программу, как и программу на языке машинных команд. Это достоинство отсутствует у языков высокого уровня.
Данный язык часто применяют для программирования систем реального времени, технологическими процессами и оборудованием, для обеспечения работы информационно-измерительных комплексов. К таким системам обычно предъявляются высокие требования по объему занимаемой
Часто язык Ассемблера дополняется средствами формирования макрокоманд, каждая из которых эквивалентна целой группе машинных команд. Такой язык называют языком макроассемблера. Применение «макстроительных» блоков и приближает язык Ассемблера к языкам высокого уровня.
Обзор языков программирования высокого уровня.
Фортран.
Фортран – исторически первый компилируемый язык программирования, разработанный в 1954-1958 г.г. Джимом Бекусом. Базовые принципы, заложенные в основу этого языка, впоследствии легли в основу многих других языков программирования высокого уровня.
Не отягощенный формальностями, язык Фортран оказался достаточно прост в изучении и потому нашел широкое распространение в среде ученых и инженеров. С его помощью оказалось удобно выполнять сложные научно-технические вычисления, если количество операторов не превосходит нескольких сотен. Обычно в эту категорию укладываются расчеты на прочность теплофизические, термодинамические, электротехнические и т. п. расчеты.
В последующие десятилетия язык существенно модернизировался и расширился. Его и сегодня широко применяют в названных областях техники, хотя современные версии языка отличаются универсальностью и могут использоваться и в других областях науки и техники.
Большинство крупных научно-технических программ написано на Фортране потому, что он обладает переносимостью и устойчивостью, а также благодаря наличию встроенных математических и тригонометрических функций. Неотъемлемой частью любой прикладной программы на языке Фортран является расширенная графическая библиотека, позволяющая использовать различные графические данные и изображения.
Кобол.
Кобол – компилируемый язык программирования для «делового» применения. Этот язык программирования был разработан в 1959-1961 г.г. прежде всего для исследований в экономической сфере. Язык позволяет эффективно работать с большим количеством данных, он насыщен разнообразными возможностями поиска, сортировки и распределения.
О программах на Коболе, основанных на широком использовании английского языка, говорят, что они понятны даже тем, кто не владеет Коболом, поскольку тексты на этом языке программирования не нуждаются в каких-либо специальных комментариях. Такие программы принято называть самодокументирующимися.
К числу других плюсов Кобола относят его структурированность. Довольно мощные компиляторы с этого языка разработаны для персональных компьютеров. Некоторые из них столь эффективны, что программу, отлаженную на персональном компьютере, нетрудно перенести на большие ЭВМ.
Перечисляя недостатки языка, нельзя не вспомнить о том, что на Коболе можно запрограммировать лишь простейшие алгебраические вычисления. Для инженерных расчетов этот язык не годится.
Еще одной причиной, сдерживающей развитие языка, является наличие в США отраслевого комитета, вырабатывающего стандарты, за соблюдением которых следит правительственная комиссия. Как это всегда бывает в подобных случаях, фирмы, занимающиеся разработкой программного обеспечения, не торопятся подгонять свои заготовки к жестким требованиям комиссии, отсутствует конкуренция, а в итоге проигрывает распространение языка.
Алгол.
Алгол – компилируемый язык программирования, впервые опубликованный в 1960 г.
От языка Фортран Алгол отличался значительно более строгими правилами синтаксиса, что позволило создавать с его помощью программы больших размеров, но вызвало существенные сложности в практическом применении для решения повседневных задач. Поэтому Алгол нашел применение не в инженерных, а в научных кругах, в первую очередь среди специалистов по прикладной математике, теоретической и экспериментальной физике. В этих сферах он использовался, пока его не сменил более удобный и не менее строгий язык Паскаль.
Паскаль.
Паскаль – компилируемый язык программирования, созданный в 1968-1970 г.г. в Швейцарском Федеральном институте технологии в Цюрихе Никласом Виртом.
В основу языка Паскаль были положены принципы, впервые представленные Алголом, но правила синтаксиса были несколько упрощены, и язык получил большую популярность. Особенно широкое распространение языка началось после 1984 г., когда был представлен удобный и эффективный компилятор TurboPascal.
Язык Паскаль впервые ввел некоторые принципиально новые типы данных и подвел программистов к понятию о структурном программировании
, что сказалось на самом стиле разработки программ. С распространением этого языка впервые появилось понятие о программировании, как о проектировании программ, которое в дальнейшем было развито другими языками и системами программирования.
Достоинства языка Паскаль
:
· простота языка позволяет быстро его осваивать и создавать алгоритмически сложные программы;
· развитые средства представления структур данных обеспечивают удобство работы как с числовой, так и с символьной и битовой информацией;
· возможность структурного программирования, что делает программу наглядной и дает хорошие возможности для разработки и отладки;
· наличие специальных методик создания трансляторов с Паскаля упростило их разработку и способствовало широкому распространению языка;
· возможность создавать достаточно сложные и мобильные (т. е. легко переносимые на другие PC) программы.
Сегодня Паскаль является одним из трех основных языков программирования. Строгость и четкость делают его почти идеальным для академического изучения. Этот язык считается базовым во многих неспециализированных высших учебных заведениях и университетах мира.
Бейсик.
Бейсик – интерпретируемый язык, хотя существуют некоторые версии, для которых имеются компиляторы. Он был создан в 1963 г. при непосредственном участии в его разработке американцев Джона Кемени и Томаса Курца.
Данный язык программирования считается простейшим. В принципе, Бейсик создавался в качестве учебного языка, средствами которого легко можно представить принципы создания алгоритмов.
Однако простота языка программирования оборачивалась, особенно в ранних версиях, трудностями структурирования. Кроме того, Бейсик не допускал рекурсию – интересный прием, позволяющий составлять эффективные и в то же время короткие программы.
Одно из удобств Бейсика состоит в небольшом размере интерпретатора: существуют реализации, в которых он занимает всего несколько кБайт. В простейших 8-разрядных компьютерах это свойство используют для встраивания интерпретатора в микросхему постоянного запоминающего устройства, и тогда компьютер сразу при включении готов к исполнению команд и программ Бейсика (не надо ничего загружать).
Язык Бейсик хорошо подходит для алгоритмического программирования. С его помощью можно создавать программы длиной до 100-200 операторов, но для более крупных проектов он не подходит, поскольку становится трудно следить за непрерывно возникающими связями между отдельными частями программы.
Си.
Сотрудник фирмы BellLabsДенис Ритчи создал язык Си в 1972 г. во время совместной работы с Кеном Томпсоном, как инструментальное средство для реализации операционной системы Unix, однако популярность этого языка быстро переросла рамки конкретной операционной системы и конкретных задач системного программирования. В настоящее время любая инструментальная и операционная система не может считаться полной, если в ее состав не входит компилятор языка Си.
Ритчи не выдумывал Си просто из головы, прообразом послужил язык Би, разработанный Томпсоном. Язык Си был разработан как инструмент для программистов-практиков. В соответствии с этим главной целью его автора было создание удобного и полезного во всех отношениях языка.
Язык Си задумывался как язык промежуточный между языками высокого и низкого уровня. От компилятора пытались добиться производительности, близкой к производительности Ассемблера, но в то же время сохранить возможность переноса программ между компьютерными платформами, характерную для языков высокого уровня. Хотя язык требует от программистов высокой дисциплины, он не строг в формальных претензиях и допускает краткие формулировки.
Си – современный язык. Он включает в себя те управляющие конструкции, которые рекомендованы теорией и практикой программирования.
Си – эффективный язык. Его структура позволяет наилучшим образом использовать возможности современных персональных компьютеров. Программирование на этом языке отличается компактностью и быстротой исполнения.
Си – переносимый и мобильный язык.
Си – мощный и гибкий язык. Большая часть операционной системы Unix, компиляторы и интерпретаторы языков Фортран, Паскаль и Бейсик написаны именно с его помощью.
Си – удобный язык. Он достаточно структурирован, чтобы поддерживать хороший стиль программирования и вместе с тем не связан жесткими ограничениями.
Необычайную популярность язык Си приобрел благодаря тому, что он, как и Паскаль, является языком структурного программирования, но позволяет генерировать более производительный и компактный рабочий код.
Характерным недостатком языка стала относительно высокая сложность изучения по сравнению с языками Паскаль и Бейсик.
Си++.
Язык Си++ был разработан в 1980 г. Бьерном Страуструпом в компании BellLabs.
Си++ - компилируемый язык программирования. Он позволяет создавать программы более компактные и эффективные, чем, например Паскаль, но его изучение сложнее. Поэтому Си++ обычно изучают в специализированных учебных заведениях, в которых готовят программистов.
Сложность изучения языка Си++ во многом связана с тем, что в самом языке отсутствуют средства для управления вводом и выводом информации. И это понятно, поскольку эти средства у каждой модели компьютера свои, а Си++ является абстрактным языком, не ориентированным на конкретную модель компьютера. Поэтому часто язык изучают не на конкретных примерах, а на абстрактных теоретических конструкциях, что крайне не удобно для начинающих.
Очевидно, что очень многое Си++ позаимствовал у языка Си. Эти заимствования обеспечили Си++ мощными средствами низкого уровня, позволяющими решать сложные задачи системного программирования. Но Си++ отличается от Си в первую очередь разной степенью внимания к типам и структурам данных. Это связано с появлением понятий класса, производного класса и виртуальной функции. Это дает Си++ более эффективные возможности для контроля типов данных и обеспечивает модульность программы.
В отличие от традиционных структур Си и Паскаля, в Си++ членами класса являются не только данные, но и функции. Функции имеют привилегированный доступ к данным внутри объектов этого класса и обеспечивают интерфейс между этими объектами и остальной программой. При дальнейшей работе совершенно не обязательно помнить о внутренней структуре класса и механизме работы встроенной функции. В этом смысле класс подобен электрическому прибору: мало кто знает о его устройстве, но все знают, как им пользоваться.
Язык Си++ является средством объектного программирования, новейшей методики проектирования и реализации программ, которая в текущем десятилетии, скорее всего, заменит традиционное процедурное программирование.
В последнее время появились среды быстрого проектирования на Си++, которые предоставляют готовые компоненты для ввода и вывода информации и поддерживают концепцию виртуального проектирования приложений Windows. Это значительно упростило изучение языка.
Список литературы:
1.
Под редакцией Конюховского П.В. и Колесова Д.Н., «Информатика», Санкт-Петербург: изд-во «Питер», 2000.
2.
К.Г.Скрипкин, «Экономическая эффективность информационных систем», Москва: изд-во «ДМК-Пресс», 2002.
3.
Сухомлин В.А., «Введение в анализ информационных технологий» Москва: изд-во «Горячая линия – Телеком», 2003.