КАТЕГОРИИ:
АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
О языках программированияКогда мы по-русски говорим "компьютер", то представляем себе некоторое устройство, которое нужно запрограммировать, чтобы оно заработало. Американцы, которые, естественно, думают на своем английском, представляют себе компьютер сразу состоящим из двух частей – "твердой" ("хардуэр") и "мягкой" ("софтуэр"), что на русский язык казенно переводится как аппаратные и программные средства вычислительной машины. Это различие в понимании отражает и некоторую реальную ситуацию: у нас первая составляющая компьютера стоит во много раз дороже второй. У них наоборот. Умственный труд они ценят много дороже промышленного, что обычно для развитых стран. В наши дни особое внимание уделяют составлению текстовых описаний к новым программам, поскольку освоение этих программ требует большого труда и занимает много времени. Возникла насущная проблема составления таких описаний к программам, которые были бы понятны обычному или даже начинающему пользователю. Она достигла столь большой остроты, что появилась специальная профессия "технических писателей", так как программисты не могут понять, что именно затрудняет пользователей при освоении их программ. Не будучи специалистом, трудно говорить о вычислительных машинах, но еще труднее об их программировании. Дело в том, что сама сущность программирования, кажущаяся такой простой на элементарном уровне машинных кодов, оказывается крайне сложной для формулирования. Может быть, поэтому авторы, популяризирующие искусство (или науку, как полагают некоторые) программирования, так любят прибегать к аналогиям, которыми сами почти всегда остаются недовольны. Сравнение компьютера с автомобилем, а программирования – с управлением механистично и мало что объясняет, компьютера с телевизором, а программы – с передачей, которую он принимает, тоже отражает лишь внешнюю сторону дела. Пожалуй, ближе всего к существу отношений компьютера с его программой сравнение их с музыкальным инструментом и нотами. Действительно, комбинацией нескольких нотных знаков можно записать любое музыкальное произведение, а пределов для творчества композиторов и исполнителей не существует. Так и программа, написанная на одном из специальных языков, в котором используется ограниченный набор символов, служит для решения многих творческих задач, от простых вычислений до игры в шахматы. Но и здесь сходство сводится к идеальности и многообразию содержания информации и материальности и ограниченности средств ее фиксации и воспроизведения. Любая, самая сложная программа формальна и определяется алгоритмом решения задачи. Вместе с тем, возможность или границы формализации человеческого мышления, которое стремятся моделировать при помощи компьютера, пока еще не поддаются определению. В преодолении этого противоречия, в нахождении путей его разрешения скрыт важный фактор дальнейшего развития данной проблемной области. По всей вероятности, задача такого уровня должна решаться не одними программистами и информатиками, но всем научным сообществом. Это один из серьезных стимулов достижения всеобщей компьютерной грамотности. А. Кэй, из статьи которого взяты некоторые сведения о языках программирования, писал об этом в следующих выражениях: "Грамотность применительно к компьютерам – это проникновение в суть процессов программирования, причем достаточно глубокое, чтобы было легко и приятно производить вычисления и решать различные задачи на ЭВМ, подобно тому, как истинно грамотный человек может свободно читать и писать. Как и в любом искусстве, здесь необходимо хорошо знать и любить материал. Если мы полагаем важным овладеть литературой и искусством для развития человека и общества, то имеем ли мы право меньше усилий тратить на то, чтобы сделать вычислительные средства и методы частью нашей жизни"[50]. История современных языков программирования насчитывает всего лишь пять десятилетий, если считать от момента создания языка Планкалкюль немецким инженером К. Цузе в 1946 г. С тех пор появились сотни языков программирования, а с вариантами, возможно, тысячи. Конечно, не все они употребляются на практике, и если бы их развитие шло другим путем, их могло бы быть и меньше. Но их многообразие оправдано, так как нельзя создать язык, пригодный для всех случаев. Язык должен быть пригоден для решения данной задачи на данном компьютере и удобен для программиста. При всех различиях языков программирования все они, в конечном счете, сводятся к высоким и низким уровням электрического напряжения, соответствующим единицам и нулям двоичного кода. Комбинации единиц и нулей могут интерпретироваться компьютером как адрес в его памяти, фрагмент обрабатываемых данных или команда выполнить определенное действие. Язык самой машины – машинный код – очевиден и однозначен для каждого вида компьютеров. Но эта последовательность нулей и единиц противоестественна для памяти человека, хотя несколько поколений программистов работали только в машинных кодах. Программа может состоять из миллионов комбинаций единиц и нулей, и ошибка лишь в одном знаке приведет к неправильной работе всей программы. Это повело к созданию языков ассемблера, в которых двоичные последовательности были заменены символами и словами. Первым таким языком был ассемблер компьютера "Эдсак", созданный в 1949 г. английским математиком М. Уилксом. Разумеется, ассемблеры проще и мнемоничнее машинных кодов, в них можно создавать инструкции для определенных действий. Однако каждая команда должна определяться отдельно и за ее прохождением в машине нужно следить, Кроме того, ассемблер жестко связан с типом компьютера, для которого он создан. Ограниченность ассемблеров была преодолена в языках более высокого уровня. Первым распространенным языком высокого уровня явился Фортран, разработанный в 1954–1957 гг. Дж. Бекусом в фирме IBM и до сих пор применяемый для научных расчетов. Поскольку его применение занимало много времени "тихоходных" в то время машин, для него был создан компилятор, переводивший его программы в машинный код. Это положило начало особым видам программ – т р а н с л я т о р а м, которые для каждого типа компьютеров переводят программы, написанные на языке высокого уровня, в их машинный код. Они бывают двух видов – компиляторы и интерпретаторы. При использовании к о м п и л я т о р а весь цикл трансляции завершается до начала выполнения программы, так что прохождение этой программы требует меньше времени. Программа, составленная на интерпретаторе, записывается в оперативную память в виде команд на языке высокого уровня, каждая из которых транслируется в машинный код по мере прохождения программы. Это требует больше времени, но дает оператору возможность контролировать результат каждой операции. Все исследования в области программирования с 1957 г. стимулировались стремлением усовершенствовать Фортран, который подвергался неоднократным переделкам. Стало появляться большое число языков, что беспокоило программистов, которые создали Международный комитет для выработки единого языка программирования (КОДАСИЛ). Результатом работы комитета явились два языка, до сих пор широко распространенные у пользователей, эксплуатирующих большие машины. Один из них, К о б о л был разработан для выполнении однородных операций над большими массивами чисел. Он применяется в сфере бизнеса и эффективен при простых арифметических вычислениях. Две трети конторских программ на Западе все еще написаны на Коболе. Но как универсальный язык, к которому по тем временам все стремились, он был неудовлетворителен. Вторым языком стала первая версия А л г о л а (1956 г.), который хотя и не стал желанным универсальным языком, но в последующих версиях сохраняет значение многоцелевого средства. Тогда же Дж. Маккарти из Массачусетского технологического института создал язык Л и с п, в котором программы и данные представляются в виде списков. Его простота и сила определяются тем, что в нем применяется только один вид команд – вызов функции, а ее значением может быть другая функция. С тех пор он стал популярным в исследованиях по искусственному интеллекту и послужил моделью для многих других языков. Для персональных компьютеров чаще всего используется Б е й с и к, разработанный в 1965 г. Дж. Кемени и Т. Курцем из Дартмутского колледжа в США. Он предназначался для изучения вводного курса программирования, но затем стал популярным среди программистов-непрофессионалов. Каждая строка программы на этом языке обозначается номером, а управление прохождением программы в основном осуществляется путем указания этих номеров. Близок к нему и язык П а с к а л ь, также первоначально созданный для обучения студентов в 1970 г. Н. Виртом, преподавателем Федерального технологического института в Цюрихе. В отличие от Бейсика в нем необходимо объявлять каждую переменную и указывать ее тип, а процедуры и функции обозначать не номерами строк, а именами функций, что облегчает чтение программы. Решая какую-либо задачу, специалист не может оперировать двоичными кодами, регистрами и адресами машинной памяти. Он мыслит формулами своей науки, например, "Площадь = длина X ширина", "Прибыль = доход – затраты". Действия, описываемые этими формулами, транслируются в машинные коды компиляторами и интерпретаторами, которые можно считать средствами реализации языка программирования. На этом и были основаны такие языки программирования, как Фортран, Паскаль, Бейсик. Эти и подобные им языки называются процедурными. Каждый такой язык как бы предоставляет программисту некую виртуальную (воображаемую) машину. Составляя программу, пользователь видит решение своей задачи как процесс вычисления, осуществляемый этой виртуальной машиной. Тем самым сразу описывается и задача, и метод ее решения. Появились непроцедурные стили программирования – функциональный, логический – и соответствующие языки. Основная идея логического программирования – отделение описания задачи от процесса ее решения – была выражена в уравнении одного из его авторов Р. Ковальского: "Алгоритм = логика + управление". Наиболее распространенный язык логического программирования П р о л о г был создан в 1972 г. А. Колмари из Марсельского университета. Программа на Прологе состоит из описаний, задающих объекты и отношения между ними. Например, формула "Площадь = длина X ширина" описывается отношением "Произведение, длина, ширина, площадь". Описание это статическое и никаких вычислений оно не задает. Но компьютер производит их сам по запросу, и по любым в данном случае двум величинам может вычислить третью, т. е. по площади и ширине – длину. Независимо от зарубежных работ в СССР в 70-е годы В. Б. Борщевым и М. В. Хомяковым (ВИНИТИ) также разрабатывалась версия логического программирования. Многие современные компьютерные системы используют язык С и, созданный в 1972 г. Д. Риччи в лабораториях "Белл Телефон" корпорации АТТ в Мюррей-хилл (шт. Нью-Джерси). Первоначально он разрабатывался для программировании новой операционной системы Ю н и к с. Операционная система предназначена для приема, хранения и выдачи информации, а также для взаимодействия аппаратных средств компьютера с прикладными программами. Си стал популярным как язык так называемого среднего уровня. В нем удобство, краткость и мобильность языков высокого уровня сочетаются с возможностью непосредственного доступа к машине, что традиционно обеспечивалось ассемблером, т. е. языком низкого уровня. Другая важная тенденция в развитии программирования связана с объектно-ориентированными языками. В них процессор машины условно делится на "объекты", которые могут программироваться индивидуально, а затем соединяться друг с другом при помощи сообщений. В числе подобных языков: С и м у л а - 67 (О. Даль и К. Нигард из Норвежского ВЦ в Осло), С м о л л т о к (1970 г., А. Кей из фирмы Ксерокс, Пало-Альта), Э у р и с к о (1979 г., Д. Ленат из Стэнфордского университета).
|