Министерство образования Республики Беларусь
Учреждение образования
Гомельский государственный университет имени Ф.Скорины
Реферат
на тему:
Исторический обзор, классификация и характеристики языков программирования
Гомель 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.4 Уровни языков программирования