Языки программирования, их классификация и развитие

Автор: Пользователь скрыл имя, 13 Ноября 2011 в 09:02, реферат

Описание работы

Язык программирования служит двум связанным между собой целям: он дает программисту аппарат для задания действий, которые должны быть выполнены, и формирует концепции, которыми пользуется программист, размышляя о том, что делать. Первой цели идеально отвечает язык, который настолько "близок к машине", что всеми основными машинными аспектами можно легко и просто оперировать достаточно очевидным для программиста образом. Второй цели идеально отвечает язык, который настолько "близок к решаемой задаче", чтобы концепции ее решения можно было выражать прямо и коротко.

Содержание

1.Введение
1.1. Интерпретаторы
1.2. Компиляторы
2. Классификация языков программирования
2.1. Машинно – ориентированные языки
2.1.1. Машинные языки
2.1.2. Языки символического кодирования
2.1.3. Автокоды
2.1.4. Макрос
2.2. Машинно – независимые языки
2.2.1. Машинно – независимые языки
2.2.2. Универсальные языки
2.2.3. Диалоговые языки
2.2.4. Непроцедурные языки
3. Развитие языков программирования
3.1. Ассемблер
3.2. Лисп
3.4. Бейсик
3.5. Рефал
3.6. Пролог и Пролог++
3.7. Лекс
3.8. Си
3.8.1. Особенности языка Си
3.8.2. Недостатки языка Си
3.9. Си++
3.9.1. Замечание по проекту языка Си++
4. Заключение
5. Библиография

Работа содержит 1 файл

Языки инфа.doc

— 171.50 Кб (Скачать)

В качестве базового языка для Си++ был выбран Cи, потому что он:

* многоцелевой, лаконичный  и относительно низкого уровня:

* отвечает большинству  задач системного программирования:

* идет везде и  на всем:

* пригоден в среде  программирования UNIX.

В Cи есть свои сложности, но в наспех спроектированном языке  тоже были бы свои, а сложности Cи  нам известны. Самое главное, работа с Cи позволила "Cи с Классами" быть полезным (правда, неудобным) инструментом в ходе первых месяцев раздумий о добавлении к Cи  Simula-подобных классов.

Си++ стал использоваться шире, и по мере того, как возможности, предоставляемые им помимо возможностей Cи, становились все более существенными, вновь и вновь поднимался вопрос о том, сохранять ли совместимость с Cи. Ясно, что отказавшись от определенной части наследия Cи можно было бы избежать ряда проблем. Это не было сделано, потому что:

* есть миллионы  строк на Cи, которые могли бы  принести пользу в Си++ при условии,  что их не нужно было бы  полностью переписывать с Cи на Си++;

  * есть сотни  тысяч строк библиотечных функций  и сервисных программ, написанных  на Cи которые можно было бы  использовать из или на Си++ при условии, что Си++ полностью  совместим с Cи по загрузке  и синтаксически очень похож  на Cи;

* есть десятки тысяч программистов, которые знают Cи, и которым, поэтому, нужно только научиться использовать новые особенности Си++, а не заново изучать его основы;

   * поскольку  Си++ и Cи будут использоваться  на одних и тех же системах  одними и теми же людьми, отличия должны быть либо очень большими, либо очень маленькими, чтобы свести к минимуму ошибки и недоразумения.

Позднее была проведена  проверка определения Си++, чтобы  удостовериться в том, что любая  конструкция, допустимая и в Cи, и  в Си++, действительно означает в обоих языках одно и то же.

 Си++ был развит  из языка программирования Cи  и за очень немногими исключениями  сохраняет Cи как подмножество. Базовый язык, Cи подмножество  Си++, спроектирован так, что имеется  очень близкое соответствие между  его типами, операциями и операторами и компьютерными объектами, с которыми непосредственно приходится иметь дело: числами, символами и адресами. За исключением операций свободной памяти new и delete, отдельные выражения и операторы Си++ обычно не нуждаются в скрытой поддержке во время выполнения или подпрограммах.

Одним из первоначальных предназначений Cи было применение его вместо программирования на ассемблере в самых насущных задачах системного программирования. Когда проектировался Си++, были приняты меры, чтобы не ставить под угрозу успехи в этой области. Различие между Cи и Си++ состоит в первую очередь в степени внимания, уделяемого типам и структурам. Cи выразителен и снисходителен. Си++ еще более выразителен, но чтобы достичь этой выразительности, программист должен уделить больше внимания типам объектов. Когда известны типы объектов, компилятор может правильно обрабатывать выражения, тогда как в противном случае программисту пришлось бы задавать действия с мучительными подробностями. Знание типов объектов также позволяет компилятору обнаруживать ошибки, которые в противном случае остались бы до тестирования. Заметьте, что использование системы типов для того, чтобы получить проверку параметров функций, защитить данные от случайного искажения, задать новые операции и т.д., само по себе не увеличивает расходов по времени выполнения и памяти.

Особое внимание, уделенное при разработке Си++ структуре, отразилось на возрастании масштаба программ, написанных со времени разработки Cи. Маленькую программу (меньше 1000 строк) вы можете заставить работать с помощью грубой силы, даже нарушая все правила хорошего стиля. Для программ больших размеров это не совсем так. Если программа в 10 000 строк имеет плохую структуру, то вы обнаружите, что новые ошибки появляются так же быстро, как удаляются старые. Си++ был разработан так, чтобы дать возможность разумным образом структурировать большие программы таким образом, чтобы для одного человека не было непомерным справляться с программами в 25 000 строк. Существуют программы гораздо больших размеров, однако те, которые работают, в целом, как оказывается, состоят из большого числа почти независимых частей, размер каждой из которых намного ниже указанных пределов.

Естественно, сложность  написания и поддержки программы  зависит от сложности разработки, а не просто от числа строк текста программы, так что точные цифры, с помощью которых были выражены предыдущие соображения, не следует воспринимать слишком серьезно.

3.9.1.   Замечание  по проекту языка Си++

Существенным критерием  при разработке языка была простота. Там, где возникал выбор между упрощением руководства по языку и другой документации и упрощением компилятора, выбиралось первое. Огромное значение также предавалось совместимости с Cи, это помешало удалить синтаксис Cи.

В Си++ нет типов  данных высокого уровня и нет первичных  операций высокого уровня. В нем  нет, например, матричного типа с операцией  обращения или типа строка с операцией  конкатенации. Если пользователю понадобятся  подобные типы, их можно определить в самом языке. По сути дела, основное, чем занимается программирование на Си++ - это определение универсальных и специально-прикладных типов. Хорошо разработанный тип, определяемый пользователем, отличается от встроенного типа только способом определения, но не способом использования.

Исключались те черты, которые могли бы повлечь дополнительные расходы памяти или времени выполнения. Например, мысли о том, чтобы сделать  необходимым хранение в каждом объекте  ”хозяйственной” информации, были отвергнуты. Если пользователь описывает структуру, состоящую из двух 16-битовых величин, то структура поместится в 32-битовый регистр.

      Си++ проектировался для использования  в довольно традиционной среде  компиляции и выполнения, среде  программирования на Cи в системе  UNIX. Средства обработки особых ситуаций и параллельного программирования, требующие нетривиальной загрузки и поддержки в процессе выполнения, не были включены в Си++. Вследствие этого реализация Си++ очень легко переносима. Однако есть полные основания использовать Си++ в среде, где имеется гораздо более существенная поддержка. Такие средства, как динамическая загрузка, пошаговая трансляция и база данных определений типов могут с пользой применяться без воздействия на язык.

4. ЗАКЛЮЧЕНИЕ.

Изобретение языка  программирования высшего уровня позволило нам общаться с машиной, понимать её (если конечно Вам знаком используемый язык), как понимает американец немного знакомый с русским языком древнюю азбуку Кириллицы. Проще говоря, мы в нашем развитии науки программирования пока что с ЭВМ на ВЫ.  Поверьте мне это не сарказм вы только посмотрите  как развилась наука программирования с того времени, как появились языки программирования, а ведь язык программирования высшего уровня, судя по всему ещё младенец. Но если мы обратим внимание на темпы роста и развития новейших технологий в области программирования, то можно предположить, что в ближайшем будущем, человеческие познания в этой сфере, помогут произвести на свет языки, умеющие принимать, обрабатывать и передавать информации в виде мысли, слова, звука или жеста. Так и хочется назвать это детище компьютеризированного будущего: «языки программирования "высочайшего" уровня». Возможно, концепция решения этого вопроса проста, а ближайшее будущее этого проекта уже не за горами, и в этот момент, где нибудь в Запорожье, Амстердаме, Токио или Иерусалиме, перед стареньким 133MHz горбится молодой, никем не признанный специалист и разрабатывает новейшую систему  искусственного интеллекта, которая наконец-то позволит человеку, с помощью своих машинных языков, вести диалог с машиной на ТЫ.

Размышляя над этим, хочется верить в прогресс науки  и техники, в высоко - компьютеризированное будущее человечества, как единственного  существа на планете, пусть и не использующего  один, определенный разговорный язык, но способного так быстро прогрессировать и развивать свой интеллект, что и перехода от многоязыковой системы к всеобщему пониманию долго ждать не придется.

Завершить свой труд хорошо бы на такой оптимистичной  ноте, но нет, напоследок хочется процитировать человека, фрагменты работы которого, в виде информации о языке Си, вам уже попадались на страницах этого текста:

Единственный способ изучать новый язык программирования – писать на нём программы.

                                                Брайэн Керниган

5. БИБЛИОГРАФИЯ

1) “LEX - генератор  программ лексического анализа” Давидов Михаил Изгияевич; Антонов Вадим Геннадьевич   МОСКВА – 1985;

2) "BASIC Face-off", Justin J.Crom, PC Tech Journal,  September 1987, p.13   Перевод: Лопухов В.Н. (Интегратор Promt98);

3) “Язык программирования  Си.”  Б.В. Керниган, Д. Ритчи,  А. Фьюэр.   Русский перевод:  Москва: Финансы и Статистика. 1985 г.;

4)  “Основы автоматизации”  ч.1, Золотарев В.В., 1978 г.;

5)  “Языки программирования”  кн.5, Ваулин А.С., 1993 г.;

6) “Языки программирования: разработка и реализация”,  П.  Терренс, 1979 г.;

7) “Введение в  программирование на языке Ассемблер”     ч.1, Касвандс Э.Г.;

8) “Языки программирования  высокого уровня”,    Хротко  Г., 1982 г.;

9) “Языки программирования”,    Малютин Э.А., Малютина Л.В., 1982 г.;

10) “Новые языки  программирования и тенденции  их развития”,  Ушкова В., 1982 г.;

11) “Мир Лиспа”  т.1, Хьювенен Э., Сеппенен Й., 1990 г.;

12) “Алгоритмические  языки реального времени”, Янг  С., 1985 г..

Не секрет что  языки программирования обязаны своим появлением необходимостью заставить ЭВМ эффективно работать, поэтому вполне логично начать наш разговор с краткого экскурса в историю развития высокоуровневых языков программирования.

При классификации  языков выделяют следующие типы языков:

  1. Ассемблерные  языки — являются символьным  представлением машинных языков  конкретного компьютера.

   2. Метаязыки  — языки, используемые для  формального описания других  языков.

   3. Императивные  языки — это языки, оперирующие  командами, изменяющими значение элементов данных, располагают операциями присваивания и циклами. К ним относятся все современные языки программирования.

   4. Декларативные  языки — языки, оперирующие  инструкциями данным и отношениями  между ними. Алгоритм скрывается семантикой языка. Это аппликативные языки, языки логики и объектно-ориентированные языки. Примеры декларативных свойств - сложные множества и инструкции поиска по шаблону.

   5. Процедурные  языки — позволяют определять  отдельные методы вычисления  какой-нибудь проблемы. Включают в себя императивные и функциональные языки.

   6. Аппликативные  языки — функции применяются  к значениям без побочного  эффекта. Это Функциональные языки  во всем своем многообразии.

   7. Функциональные  языки — оперируют функциями  высокого порядка. В них манипуляции совершаются напрямую функциями, а не данными. К категории функциональных языков относятся Lisp, FP, APL, Nial, Krc.

   8. Объектно-ориентированные  языки — языки, в которых  данные и функции, имеющие доступ  к ним рассматриваютс как один модуль. Пример: Object Pascal, С++, Java, Objective Caml.

   9. Языки запросов  — обеспечивают интерфейс к  базам данных.

  10. Языки четвертого  поколения (4GL) — высокоуровневые языки, могут использовать естественный английский язык или визуальные конструкции. Алгоритмы или структуры данных обычно выбираются компилятором.

  11. Языки логики  — языки, оперирующие предикатами  и их отношениями p(x, Y). Программы состоят из набора заключений Хорна, которые могут быть:

  12. фактами - p(X,Y) есть истина;

  13. правилами  - p истинно, если q1, q2 и qn истинны;

  14. запросами  - верны ли q1, g2 и gn? Где gi - цель.

Известные языки  логического программирования: Prolog, KLO, Mandala и Mercury.

   1. Параллельные  языки могут быть многопрограммными  (разделяющими один процессор) или мультипроцессорными(отдельные процессоры разделяют одну распределенную память). Параллельные языки различаются различными способами организации процессов и управления программами. Примеры: Modula, Ada, Concurrent Pascal.

На практике языки программирования не являются чисто процедурными, функциональными, логическими, или объектно-ориентированными. Они содержат в себе черты различных языков. Поэтому зачастую на процедурном языке можно написать функциональную или объектно-ориентированную программу. Из-за этого вместо типа языка точнее говорить о стиле (или методе) программирования. Конечно не все языки поддерживают вышеперечисленные стили в равной степени. Miranda и Haskell, например, созданные в 1985-87 гг., определяются именно как чисто функциональные (purely functional).

Первым общепризнанным языком высокого уровня можно по праву  назвать Fortran, версия которого появилась в ноябре 1954 года. Позднее в октябре 1956 года появилась версия Fortran I, а через год Fortran II, еще через год вышел Fortran III, но казавшийся монополизм этого языка был нарушен с появлением более продуманных языков, таких как Cobol (1957), Lisp (1958), Algol'58 (1958), APL (1960).На этапе развития языков возникла необходимость внедрения в современные языки новых идей. Результатом такого поиска стала нарастающая волна появления языков, приобретающих лучшие качества других языков. В 1964-ом году появился PL/I("скрещенная" версия Cobol, Fortran IV и Algol'60), Basic, Simula I (на основе того-же Algol'60).

Информация о работе Языки программирования, их классификация и развитие