Исторический обзор, классификация и характеристика языков программирования
50 Министерство образования Республики Беларусь Учреждение образования Гомельский государственный университет имени Ф.Скорины Реферат на тему: Исторический обзор, классификация и характеристики языков программирования Гомель 2006 Содержание Введение 1. Понятия зыка программирования 1.1 Машинный код 1.2 Алгоритм и программа 1.3 Что такое язык программирования 1.4 Уровни языков программирования 1.5 Компилируемые и интерпретируемые языки 2.Классификация языков программирования 3. Исторический обзор языков программирования 4. Характеристики языков программирования 4.1 Элементы объектной модели 4.2 Характеристики языков программирования с точки зрения элементов объектной модели Приложение. Популярность языков программирования Заключение Литература Введение Бурное развитие информационных технологий повлекло за собой создание множества искусственных языков, ориентированных на решение проблемы общения человека с компьютером. Любой обзор по языкам программирования первым делом неизбежно затрагивает вопросы классификации этих языков. Не стремясь к соблюдению слишком строгой и исчерпывающей классификации и опираясь на ряд традиционных подходов, попробуем проанализировать современное состояние языков программирования. Один из подходов, помогающий провести обзор языков программирования, -- подход исторический. Действительно, на первый взгляд все выглядит очень просто. Сначала было программирование в машинных кодах, когда программист являлся единственным посредником между остальными смертными и Машиной -- гигантским "ламповым монстром", занимающим если не целое здание, то почти целый этаж. Затем появились мнемонические представления машинного кода, ассемблер и, наконец, макроассемблер. В конце 50-х возникли языки формульного программирования, из которых наиболее замечательным был Фортран, затем (в 60-х) центр тяжести стал понемногу смещаться к нечисленным методам -- появился АЛГОЛ. Еще немного, и к 70-м годам произошла структурная революция -- АЛГОЛ-W и, наконец, Паскаль. Далее настала очередь "модульного" программирования -- Модула и Модула-2. Приблизительно в это же время рождается знаменитый язык Си, идет новая революция логического программирования -- в моде ПРОЛОГ и экспертные системы. Пентагон проводит свой знаменитый конкурс, на котором побеждает Ада, а Япония заявляет о проекте машин пятого поколения, основанных на SmallTalk. В результате происходит объектно-ориентированная революция, появляются С++, Оберон, Eiffel и Модула-3. Общие тенденции развития языков программирования при историческом подходе проследить вполне возможно, однако изложение получается сумбурным и путаным. Удивляться тут нечему -- ладно если бы произошла, например, структурная революция: программистская общественность присягнула на верность программированию без "goto" и прощай Фортран! Но нет, и Фортран сейчас "в ходу", а если вспомнить об его преуспевших детях Basic и Visual Basic, то придется признать, что "некрологи" Фортрана более чем двадцатилетней давности выглядят в наше время как забавный исторический курьез. Хотя верно и то, что тех версий языка Фортран, что были четверть века назад, уже не осталось, да и машин, на которых с ними работали, сейчас найдешь разве что в музее. Язык Паскаль также, по сравнению со многими другими языками, сейчас уже не молод, но это не мешает ему оставаться одним из наиболее популярных языков и в наши дни. А Кобол? У него еще более преклонный возраст, а если посмотреть по конференциям на Internet -- окажется, что очень много работ и сейчас проводится на Коболе. Другой возможный классификационный критерий языков программирования -- это революционные идеи программирования, воплотившиеся в соответствующих решениях: структурное программирование, модульное программирование, объектно-ориентированное программирование. Однако и тут четкой классификации не получится. К примеру, Паскаль возник как "продукт" структурной революции, удачно впитал в себя идеи революции "модульной", и сегодня существует практически на всех компьютерных платформах в объектно-ориентированных воплощениях. Другой пример: приверженцы языка С++, как правило, самым важным его достоинством называют объектно-ориентированное программирование. Однако было бы неверно считать, что С++ стал популярным только благодаря объектам -- как и объектно-ориентированный Паскаль, С++ является языком гибридным. Применение объектно-ориентированной парадигмы при работе на нем совсем не обязательно, и многие программисты в практической работе этими возможностями как в С++, так и в объектно-ориентированном Паскале не пользуются. Точно так же, работая с современными компиляторами языка Паскаль, например с широко известными Borland Pascal/Turbo Pascal (Borland) 7.0 для IBM PC или Think Pascal (Symantec) для компьютеров Macintosh, можно в явном виде не пользоваться модульными возможностями, оформляя исходный код программы почти в полном соответствии со стандартным Паскалем. Ошибочный подход, скажет иной поклонник прогресса. Однако исходный код, соответствующий стандарту, будет обладать высокой переносимостью на разные платформы. Могут быть и иные резоны как для стандартных, так и для гибридных подходов. Видимо, поэтому разработчики объектно-ориентированного языка Модула-3 сделали принцип "гибридности" одним из основных в своем языке. С другой стороны, существует большая группа чистых объектно-ориентированных языков, где объектно-ориентированная парадигма является обязательной. Примером такого языка может служить Dee . Казалось бы, еще один удобный классификационный признак -- популярность языка: чем язык популярней -- тем он лучше, так может, недолго думая, и разбить все языки на "плохие" и "хорошие"? Однако хорошо известно, что коммерческий успех того или иного продукта не является объективной оценкой качества. Мода -- преходяща, особенно если ее приход стимулируется громкой рекламой и значительными капиталовложениями. И чем популярней язык, тем больше споров вокруг него, чем больше у него сторонников -- тем больше и противников. Так, в самое ближайшее время много споров можно будет услышать об языке Java. Не вызовет ли приверженность этого языка принципам объектно-ориентированного программирования оттока его сторонников -- и тех, кто не стремится использовать объектно-ориентированное программирование на практике, и тех, кто считает, что в ряде современных языков (например в С++ или в Eiffel) эти принципы реализованы полнее? И, наконец, еще один критерий -- уровень языка. Традиционно к языкам низкого уровня относят ассемблеры, а к языкам высокого уровня все остальные универсальные языки программирования, впрочем, для таких языков, как Форт (FORTH), Си и т. д., иногда выделяется некий "промежуточный" уровень. Помимо этого, делались неоднократные попытки выделить какой-либо язык или группу языков на "сверхвысокий" уровень, например для макросредств электронных таблиц. Не нужно вдаваться в детали, чтобы почувствовать всю условность и этой классификации. Тем более, если учесть, что большинство реализаций современных языков программирования высокого уровня имеют богатые низкоуровневые возможности. Скажем, Inline-директива, позволяющая записывать в исходном тексте машинные коды, или встроенный ассемблер, как, например, это сделано в Borland Pascal. Отметим, что, как правило, встроенный ассемблер гораздо удобнее -- запись в кодах на его фоне выглядит анахронизмом. При необходимости программирования какого-либо фрагмента программы на низком уровне можно применять и обычный "не встроенный" ассемблер. В общем случае в современных языковых средах вполне возможно программировать разные модули одной и той же программы на разных языках, например и на нескольких языках высокого уровня. Отметим, однако, что на практике этого лучше не делать без особых причин. Весьма проблематична классификация языков и по названию. Например, Н. Вирт заявляет, что недостатки концепций языка Паскаль преодолеваются в языках Модула-2 и Оберон: "Назови я эти языки Паскаль-2 и Паскаль-3... их эволюционная линия была бы очевидна". Напрашивается вопрос -- что есть язык, а что есть диалект языка: например, стандартный Паскаль, расширенный Паскаль (Extended Pascal) и Turbo Pascal -- три разных языка или три диалекта Паскаля? Итак, подведем итог: несмотря на неполноту традиционных классификаций, они позволяют выявить ряд важнейших характеристик языков программирования. То же самое можно сказать о проблеме сравнения языков. Периодически такие сравнения появляются как в компьютерных журналах, так и в сетевых конференциях. Естественно, главная цель здесь недостижима, и большинство участников дискуссии обычно остается при своем мнении: одним язык Y нравится -- другие его терпеть не могут. Однако, при малоинтересных общих выводах, сравнительные оценки деталей двух языков содержат иногда много оригинальных, интересных и плодотворных подходов. 1.Понятие языка программирования1.1 Машинный кодПроцессор компьютера -- большая интегральная микросхема. Все команды и данные он получает в виде электрических сигналов. Фактически процессор можно рассматривать как огромную совокупность достаточно простых электрических элементов -- транзисторов. Транзистор имеет три вывода. На два крайних подается напряжение, необходимое для создания в транзисторе электрического тока, а на средний вывод -- напряжение, с помощью которого можно управлять внутренним сопротивлением транзистора, а значит, управлять и током, и напряжением на его выводах.В электронике транзисторы имеют 3 применения: для создания усилителей, в электронных схемах, обладающих автокабельными свойствами, и в электронных переключателях. Последний способ и применяется в цифровой вычислительной технике. В процессоре компьютера транзисторы сгруппированы в микроэлементы, называемые триллерами и вентилями. Триллеры имеют два устойчивых состояния ( открыт - закрыт) и переключается из одного состояния в другое электрическими сигналами. Этим устойчивым состояниям соответствуют математические понятия 0 и 1 . Вентили немного сложнее - они могут иметь несколько входов ( напряжение на выходах зависит от комбинаций напряжений на входах) и служат для простейших арифметических и логических операций).Команды, поступающие в процессор по его шинам, на самом деле являются электрическими сигналами, но их тоже можно представить как совокупность нулей и единиц. Разным командам соответствуют разные числа. Поэтому реально программа, с которой работает процессор, представляет собой последовательность чисел, называемую машинным кодом.1.2 Алгоритм и программаУправлять компьютером нужно по определенному алгоритму. Алгоритм - точно определенное описание способа решения задачи в виде конечной (по времени) последовательности действий. Такое описание еще называют формальным. Для представления алгоритма в виде, понятным компьютеру, служат языки программирования. Сначала всегда разрабатывают алгоритм действий, а потом он записывается на одном из таких языков. В итоге получается текст программы - полное, законченное и детальное описание алгоритма на языке программирования. Затем этот текст программы специальными служебными приложениями, которые называются трансляторами, либо переводится в машинный код, либо исполняется.1.3 Что такое язык программированияСамому написать программу в машинном коде сложно, причем эта сложность резко возрастает с увеличением размера программы и трудоемкости решения нужной задачи. Условно можно считать, что машинный код приемлем, если размер программы не превышает несколько десятков байтов.Поэтому сегодня почти все программы создаются с помощью языков программирования. Теоретически программу можно написать и средствами обычного естественного языка - это называется программированием на метаязыке(этот подход обычно используется на этапе составления алгоритма), но автоматически перевести такую программу на машинный код пока невозможно из-за высокой неоднозначности естественных языков.Языки программирования - искусственные языки. От естественных они отличаются ограниченным числом «слов», значение которых понятны транслятору, и очень строгими правилами записи команд (операторов). Совокупность подобных требований образуют синтаксис языка программирования, а смысл каждой команды и других конструкций языка - его семантику. Нарушение формы записи программы приводит к тому, что транслятор не может понять назначение оператора и выдает сообщение о синтаксической ошибке, а правильно написанное, но не отвечающее алгоритму использование команд языка приводят к семантическим (логическим) ошибкам. Процесс поиска ошибки в программе называется тестированием, процесс устранения ошибки - отладкой.1.4 Уровни языков программированияРазные типы процессоров имеют разные наборы команд. Если язык программирования ориентированный на конкретный тип процессора и учитывает его особенности, то он называется языком программирования низкого уровня. Операторы языка низкого уровня близки к машинному коду и ориентированы на конкретные команды процессора.Языком с низким уровнем является язык ассемблера, кот просто представляет каждую команду машинного кода, но в виде чисел, с помощью символьных условных обозначений, называемых мнемониками. Однозначное преобразование одной машинной инструкции в одну команду ассемблера называется транслитерацией. Так как наборы инструкций для каждой модели процессора отличаются, конкретной архитектуре соответствует свой язык ассемблера, и написанная на нем программа может быть использована только в этой среде.
Страницы: 1, 2, 3, 4, 5, 6
|