Будь умным!


У вас вопросы?
У нас ответы:) SamZan.net

Лекции по дисциплине Информатика и программирование Автор ~ Шульга Т

Работа добавлена на сайт samzan.net:


40

Лекции по дисциплине «Информатика и программирование»

Автор – Шульга Т.Э.

Тема 14. Генезис языков программирования

К 1963 г. только в Англии в ходу было более 30 языков, а на начало 90-х гг. список более-менее известных алгоритмических языков составлял 2000 позиций. Если попросить несколько программистов, назвать самый лучший язык программирования, то скорее вы получите десяток разных ответов. Теоретически для решения большинства задач программирования можно использовать любой язык. Однако на практике оказывается, что написать программу решения конкретной задачи гораздо легче на одних языках, чем на других.

Историю языков программирования высокого уровня традиционно ведут с появления (1957 г.) языка Фортран (FORTRAN от FORmula TRANslator). Благодаря развитию этого языка появились подпрограммы - предвосхитив идею модульного программирования. Это язык был создан для упрощения программирования математических формул. Первым универсальным языком высокого уровня считается язык ALGOL 60 (1960 г., ALGOrithmic Language). В 1962 г. по заказу министерства обороны США был разработан язык COBOL (Common Business Oriented Language), в котором учитывалась специфика обработки именно коммерческих данных. Чтобы преломить тенденцию разделения языков программирования на научную и коммерческую области применения, корпорация IBM в 1967 году создала язык  PL/1, который вобрал в себя все от языков FORTRAN, ALGOL,  COBOL и был независим от области применения.

Кроме того, к самым известным языкам программирования относят Basic, Pascal, (наследник Алгола), Simula 67, LISP, Modula, Prolog, Ada, Smolltalk,C, C++, Java.

Основные вехи в истории развития языков программирования

1949 Появление первого языка программирования Short Code, реально используемого на вычислительном устройстве; однако это «компилируемый вручную» язык

1951 Грейс Мюррей Хоппер начинает работу над первым компилятором (под названием A-0) с языка высокого уровня

1954 Джон Бэкус и его команда в IBM начинают разрабатывать Fortran

1956

  1.  Первая конференция по искусственному интеллекту в Дартмурском колледже Нью-Хэмпшира
  2.  Закончена разработка языка Fortran

1958

  1.  Выход Fortran II: поддержка подпрограмм и связь с ассемблером
  2.  Джоном МакКарти в Массачусетском технологическом институте разрабатывается язык LISP
  3.  Выходит спецификация Algol — первого структурного процедурного языка

1959

  1.  Грейс Мюррей Хоппер и Codasyl разрабатывают COBOL
  2.  Выходит LISP 1.5

1960 Спецификация Algol-60

1962

  1.  В IBM Кеннет Иверсон разрабатывает язык APL (первая публикация описания языка)
  2.  Выходит Fortran IV
  3.  Начата работа над языком программирования SNOBOL (StriNg-Oriented symBOlic Language)

1964

  1.  IBM выпускает язык PL/1
  2.  В Дартмурском колледже Томас Куртц и Джон Кемени разрабатывают язык Basic, который не применялся на микрокомпьютерах до 1975 года
  3.  Выходит APL/360

1965 Появление SNOBOL-3

1966

  1.  Выходит Fortran-66
  2.  Начало работ над языком LOGO
  3.  Появление LISP-2

1967 Начало разработки языка Pascal Никлаусом Виртом на базе языка Algol

1968

  1.  Появление Algol-68 вызывает решительный протест Никлауса Вирта и Чарьза Хоара — членов комитета по спецификации языка
  2.  Официальная ANSI-спецификация COBOL
  3.  Сеймур Паперт в МТИ заканчивает разработку языка LOGO

1970

  1.  Разрабатывается язык программирования Forth
  2.  Начало работ над языком программирования Prolog
  3.  В Xerox PARC начата разработка языка SmallTalk

1971 Завершена разработка Pascal

1972 

  1.  В Bell Laboratories Деннисом Ричи разработан язык программирования C.
  2.  Выходит SmallTalk-72
  3.  В университете Luminy-Marseilles во Франции Аланом Колмера разработан часто использующийся для задач искусственного интеллекта язык Prolog

1974 Выходит SmallTalk-74

1975 Билл Гейтс и Пол Аллен пишут Basic-интерпретатор для первого персонального компьютера Altair

1976 Выходит SmallTalk-76

1977 Никлаус Вирт начинает работу над языком Modula

1978 Выход ANSI-стандарта языка Fortran-77

1979 В Honeywell Джин Ичбиах и его команда представили язык программирования Ada

1980

  1.  Выходит Modula-2
  2.  Бьярнe Страуструп добавляет к C объектно-ориентированные расширения
  3.  Выход SmallTalk-80

1982 Появление ISO-стандарта Pascal

1983

  1.  Выход языка ADA
  2.  Фирма Borland выпускает Turbo Pascal

1984 Microsoft совместно с Digital Research выпускают первый компилятор с C для микрокомпьютеров

1985 Бертранд Мейер (Interactive Software Engineering) представляет концепцию языка Eiffel

1986

  1.  Появление SmallTalk/V — первой версии для микрокомпьютеров
  2.  Apple выпускает Object Pascal для Mac
  3.  Borland представляет Turbo Prolog
  4.  Выходит язык Eiffel
  5.  Появление C++

1987 Ларри Уолл представляеет в Usenet язык программирования Perl

1988 Никлаус Вирт заканчивает работу над Oberon

1989 Выходит спецификация ANSI C

1990 Появление Fortran-90

1991 Visual Basic получает призы на весеннем Comdex

1994 Внедрение в Excel языка Visual Basic for Applications

Выходит Perl 5 — версия с поддержкой ООП

1995

  1.  Появление языка программирования Java
  2.  Netscape анонсирует разработку JavaScript
  3.  ISO-стандарт языка ADA 95 (поддержка ООП-технологий и систем реального времени)

1997 ANSI-стандарт C++

Классификация языков программирования

Для ориентации в таком разнообразии языков программирования предлагалось и предлагается огромное количество классификаций языков программирования.

Раньше было очень популярно разделение языков на две категории: компилируемые в машинные (native) коды и интерпретируемые. Однако подобная классификация, к сожалению, в наши дни уже не очень актуальна. Как, например, быть с Java? С одной стороны, написанные на этом языке программы компилируются, но не в native-код, а в так называемый байт-код, с другой стороны, для выполнения требуется наличие виртуальной Java-машины, т.е. интерпретатора. Добавим к этому возможность ряда средств разработки компилировать Java-программы в машинный код, существование компиляторов времени исполнения и вспомним про так называемые Java-процессоры, для которых этот язык и должен быть машинным. Также обратим внимание на перекомпиляцию такого типично интерпретируемого языка, как Perl. С языком Visual Basic, по сути, точно такая же ситуация, как и с Java: вы компилируете программу в байт-код, в дальнейшем интерпретируемый, или, начиная с пятой версии, в родной код процессора.

Также что языки делят на объектно-ориентированные и обычные (императивные, функциональные, логические и т.п.). Такое разделение также не совсем актуально. Если Visual Basic — объектно-ориентированный язык, то где же в нем наследование и прочие черты, характерные для объектно-ориентированного программирования (ООП)? Возьмем JavaScript — чтобы как-то с ним определиться даже ввели термин: объектно-базируемый язык. А язык программирования Ada в классической работе Грэди Буча (Grady Booch) «Объектно-ориентированное программирование» назван просто объектным. Кстати, этот известный специалист использует множество переходных градаций при обсуждении ООП. А часто ли пользуются объектными расширениями того же Perl? Написать сотню-другую строк скрипта без ООП, пожалуй, легче. Так это объектно-ориентированный язык (соответствующие средства есть) или нет (так как их мало  кто использует)?

Разделение языков на визуальные и «обычные» просто не имеет смысла, так как термин «визуальный» относится в основном к средствам разработки (сегодня модно понятие RAD — Rapid Application Development — быстрая разработка приложений), хотя и не для всех языков и технологий это верно. (Например, как невизуально работать с JavaBeans, да еще и на Macintosh?). И вообще, появление новых версий программного обеспечения всегда сопровождается введением новых возможностей, иногда серьезно затрагивающих «основу» языка (типичный пример — Visual Basic).

Кроме того, языки делят на универсальные (конечно, большинство современных языков программирования являются многоцелевыми, но их возможности нечасто используются в полной мере), языки работы с базами данных, ориентированные на Интернет-приложения, на написание клиентских частей, на математические вычисления и т. д. Эта классификация оказывается полезной при объяснении сложившегося многообразия языков.

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

Уровни языков программирования

Разделение на языки высокого и низкого уровня это разделение по степени их близости к конкретному машинному коду и по переносимости написанных на них программ. Это вполне актуальное сегодня разделение: ассемблеры и близкие к ним языки не перестают использоваться. Чаще всего они используются для написания фрагментов программ, которые должны быть эффективными, нетребовательными к ресурсам или работать в реальном времени. С другой стороны человек стремится к обобщению частностей, так что с неизбежностью для многих платформ возникли «мобильные операционные системы» и соответствующие компиляторы (тут, конечно, C/C++ нет равных). Можно еще добавить категорию языков сверхвысокого уровня (например, языки для Интернет — в теории нет никаких ограничений на платформы, и не требуется перекомпиляция).

Разные типы процессоров имеют разные наборы команд. Если язык программирования ориентирован на конкретный тип процессора и учитывает его особенности, то он называется языком программирования низкого уровня.

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

Языки высокого уровня (high-level language) понятнее человеку. В них не учитываются особенности компьютерных архитектур, они представляют мощный механизм описания алгоритмов в той форме, в которой их можно вводить непосредственно в ЭВМ. Один оператор языка высокого уровня порождает группу машинных команд.

Поколения языков программирования

Все многообразие современных языков программирования имеет общую эволюционную историю, поэтому существуют классификации по истории языков программирования («по поколениям»). В каждом новом поколении языки программирования становятся все более высокого уровня.

Рассмотрим одну из таких классификаций.

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

Второе поколение ознаменовалось появлением в начале 50х годов языка программирования Ассемблера (assembly language). Вместо одних только нулей и единиц, программисты теперь могли пользоваться операторами, которые были похожи на слова английского языка (мнемоники). Компилятор преобразовывал эти выражения в машинные коды. 

Вместе с появлением компьютеров третьего поколения, развитие языков программирования также вступило в новую фазу. Период с середины 50-х до 70-х годов отмечен появлением первых языков программирования высокого уровня. Эти языки впервые позволили ученым (прежде всего, математикам) работать с компьютерами. Языки третьего поколения, такие как С, Pascal и Fortran, состоят из английских слов, например FOR, IF, GOTO, и математических символов. В отличие от языков первого и второго поколений синтаксис в языках третьего поколения не зависит от компьютера, на котором исполняются написанные на них программы. Язык программирования FORTRAN позволял довольно легко определять переменные и использовать для вычислений математические выражения. Для языков высокого уровня, таких как FORTRAN и COBOL, понадобились более быстрые, высокоэффективные компиляторы, поскольку при преобразовании исходного кода, выходные программы получались большими.

Четвертое поколение языков программирования зародилось в конце 70-х, и можно сказать, что их развитие продолжается по сей день. В них достигнут еще больший уровень абстракции. Это такие языки как SQL (структурированный язык запросов для работы с базами данных) или Mathematica и MathCad (языки для сложных математических вычислений и решения научных задач). Эти языки предоставляют программисту гораздо более естественную форму общения с компьютером, но применимы для решения очень ограниченного круга задач. Эти языки существенно уменьшили время разработки ПО и позволили выполнять эту работу даже людям без технического образования, не прибегая к помощи профессиональных программистов. Сегодня для выполнения многих задач программирование как таковое вообще не требуется. Например, появление приложений электронных таблиц (spreadsheets), таких как Microsoft Excel, позволяет обычным пользователям обрабатывать финансовую информацию и управлять большими массивами данных. В 60-х и 70-х годах так просто, без применения языков программирования, использовать возможности компьютеров было невозможно.

Когда пришло пятое поколение языков программирования (это прежде всего сценарные языки), эволюционный путь развития оказался нарушен. Сценарные языки программирования гораздо проще языков четвертого поколения. По сути, все они - языки-интерпретаторы. Это делает сценарные языки идеальными для написания небольших программ, но не для использования в крупных проектах. Кроме того, сценарные языки допускают вольную трактовку правил написания кода, на компьютерном жаргоне они называются «нестрогими». Сценарные языки предназначены для быстрого написания программ - посредников между другими программами, а не самостоятельных приложений. Они подобны клею, что делает их удобными для использования в интернет-приложениях, суть которых как раз и состоит в обмене данными между программами. Изящество языков программирования, так ценимое прежними поколениями разработчиков, здесь принесено в жертву удобству использования. Эти языки получили широкое распространение из-за высокой гибкости и адаптации к нуждам Интернета. Яркие примеры - Perl, применяемый для обмена данными между интернет-сервером и компьютером пользователя, и Python, используемый, помимо прочего, для управления интернет-форумами, Tcl/Tk, awk,  C Shell, JavaScript (название JavaScript - не более чем маркетинговый ход, поскольку этот язык никак не связан с Java).

Интересно, что если наложить эту классификацию на историю развития ЭВМ (как известно, там тоже принято выделять поколения), то совпадения этапов не будет! В общем-то, развитие языков программирования отстает от роста возможностей вычислительной техники, что имеет под собой, по-видимому, простую причину: известно, что в то время как мощность компьютеров растет экспоненциально, количество людей, занятых разработкой программного обеспечения, растет линейно.




1. на тему великие открытия генетики Работу выполнил Студент группы ТОБ 11 Киселев Михаил Введе
2. Реферат- Политика монетаризма, цели, средства
3. Уголовно-правовое значение эмоций, эмоциональных состояний
4. Анализ и моделирование информационной системы кредитного отдела OAO Сбербанк
5. Сыктывкарский государственный университет Институт социальных технологий Кафедра теоретических и мед
6. на тему- ldquo;Типи несумісностіrdquo;
7. Тема урока Основные термины и понятия Наглядность Дата П
8. Найяскравішою сторінкою героїчної діяльності Червоно Хреста стала безприкладна мужність його членів вол
9. Решение При расчете предполагаем что распределе
10. молекулярное учение согласно которому- атом ~ наименьшая частица химического элемента являющаяся носите
11. Отражение эпохи в романе Фаулза
12. Тема игры- Цель- в ходе игры вспомнить известные студентам понятия статьи Конституции РФ положения избира
13. 3 Билет 1 Инструкция- Внимательно прочитайте ситуационную задачу и задания к ней
14. Российские железные дороги на 2014 2016 годы Раздел 1
15. Отражение результатов в бухгалтерском учете 6 Учет товаров в комиссионных магазинах 7 Учет реализации то
16. Материалы исследований 2
17.  Наименование и понятие международного частного права Международное частное право это самая непонятна
18. Загальні принципи побудови моделей в економетриці
19. раза в день при ревматоидном артрите периартритах анкилозирующем спондилите остеоартрозах подагре восп.
20. Статья- Как добиться благосклонности богини удачи