Эволюция языков программирования




Глава 8. ЯЗЫКИ ПРОГРАМММИРОВАНИЯ

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

Первым полноценным языком программирования стал язык Assembler - язык программирования низкого уровня, представляющий собой формат за­писи машинных команд, удобный для восприятия человеком (благодаря ему заметно уменьшилось время разработки и возросла надежность работы программ). Команды этого языка один в один соответствуют командам про­цессора и, фактически, представляют собой удобную символьную форму за­писи (мнемокод) команд и их аргументов. Кроме того, язык обеспечивает ба­зовые программные абстракции - связывание частей программы и данных через метки с символьными именами и директивы, которые позволяют вклю­чать в программу блоки данных (описанные явно или считанные из файла), повторить определённый фрагмент указанное число раз, компилировать фрагмент по условию, задавать адрес исполнения фрагмента, менять значе­ния меток в процессе компиляции, использовать макроопределения с пара­метрами и др. Язык ассемблера – машинозависимый. Это обусловлено тем, что каждая команда языка ассемблера обычно транслируется точно в одну команду машинного языка. Так как машинные языки у различных ЭВМ были разные, то и «ассемблеры» тоже различаются.

Следующий шаг - 1954 год, когда был разработан первый язык высокого уровня – Fortran (FORmula TRANslator – переводчик формул), широко ис­пользуемый при написании программ для сложных научных и инженерных вычислений. Языки высокого уровня имитируют естественные языки, ис­пользуя некоторые слова разговорного языка и общепринятые математиче­ские символы. Они более удобны для человека (с помощью них, можно пи­сать программы до нескольких тысяч строк длиной). Однако легко пони­маемый в коротких программах, этот язык становился трудно читаемым и управляемым, когда дело касалось больших программ. Эта задача была ре­шена посредством создания языков структурного программирования, таких как Algol (ALGOrithmic Language - алгоритмический язык) – 1958 г., Pascal (высокоуровневый язык программирования общего назначения) – 1970 г., C (стандартизированный процедурный язык программирования) – 1972 г.

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

В это же время создавались функциональные (аппликативные) языки, например, Lisp (LISt Processing – «обработка спи­сков») – 1958 г. и логиче­ские языки, например, Prolog (PROgramming in LOGic – программирование в терминах логики) - 1972 г. Хотя структурное программирование, при его ис­пользовании, дало выдающиеся результаты, но даже оно оказывалось труд­ным для исполнения тогда, когда программа дос­тигала определенной длинны. Для того чтобы написать более сложную (и длинную) программу, нужен был новый подход к программированию.

В итоге в конце 70-х – начале 80-х гг. прошлого столетия были разрабо­таны принципы объектно-ориентированного программирования, сочетающие лучшие принципы структурного программирования с новыми мощными кон­цепциями, базовые из которых называются инкапсуляцией, полиморфизмом и наследованием. Примером объектно-ориентированных языков являются: Object Pascal (объектно-ориентированный диалект языка Pascal), C++ (компилируемый строго типизированный язык программирования общего на­значения, основанный на синтаксисе C), Java (в достаточной степени схож с С++) и др. Объектно-ориентированные языки позволяют оптимально орга­низовать программы, разбивая проблему на составные части и работая с каж­дой из них по отдельности. Программа на объектно-ориентированном языке, решая некоторую задачу, по сути, описывает часть мира, относящуюся к этой задаче.

Большинство компьютерных архитектур и языков программирования ориентированы на последовательное выполнение операторов программы, но в настоящее время существуют программно-аппаратные комплексы, позво­ляющие организовать параллельное выполнение различных частей одного и того же вычислительного процесса. Для программирования таких систем не­обходима специальная поддержка со стороны средств программирования, в частности, языков программирования. Некоторые языки общего назначения содержат в себе элементы поддержки параллелизма, однако программирова­ние истинно параллельных систем требует специальных приемов. Для этой цели были созданы язык Occam (процедурный язык параллельного програм­мирования высокого уровня) – 1982 г., Linda (язык многопроцессорных сис­тем распределенной обработки данных) – 1985 г. и др.

Появление и активное развитие компьютерных сетей, широкое распро­странение высокопроизводительных компьютеров и ряд других факторов стали причиной создания многочисленных версий так называемых скрипто­вых языков. Эта языки первоначально ориентировались на использование в качестве внутренних управляющих языков во всякого рода сложных систе­мах. Однако многие из них вышли за пределы сферы своего изначального применения и используются ныне во многих областях. Характерными осо­бенностями данных языков являются, во-первых, их интерпретируемость (компиляция либо невозможна, либо нежелательна), во-вторых, простота синтаксиса и, в-третьих, легкая расширяемость. Они идеально подходят для использования в часто изменяемых небольших программах. К ним относятся – многоцелевой язык для решения системных задач Perl(1987), язык для описания сложного поведения веб-страниц JavaScript(1995) и др.

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





©2015-2017 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Нарушение авторских прав и Нарушение персональных данных

Обратная связь

ТОП 5 активных страниц!