Поиск

Полнотекстовый поиск:
Где искать:
везде
только в названии
только в тексте
Выводить:
описание
слова в тексте
только заголовок

Рекомендуем ознакомиться

'Документ'
2.1. Организация международных воздушных перевозок - это комплекс технических, технологических, коммерческих, финансовых и других организационных мер...полностью>>
'Документ'
В условиях вызовов ХХ1 века Россия обязана следовать стратегическому курсу инновационно-технологического развития во всех сферах жизнедеятельности на...полностью>>
'Лекция'
Лекция 14. Учет труда и заработной платыОплата труда как экономическая категория в рыночных условиях отражает систему отношений, которые возникают в с...полностью>>
'Программа дисциплины'
Программа составлена с соответствии с Государственным образовательным стандартом высшего профессионального образования по направлению подготовки 1404...полностью>>

Эволюция языков программирования

Главная > Документ
Сохрани ссылку в одной из сетей:

Роль Algol-60 не только как учебного языка, но и как языка-предчети, например, для языка .

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

Быстродействие языка (эффективность) — усреднённое отношение времени выполнения программ, написанных на ЯП, к времени выполнения программам, написанных на ассемблере машины.

Эффективность = Plang / Pasm

FORTRAN достиг такого уровня, что для FORTRAN О mdash; оптимизированной версии (IBM выпускала две версии FORTRAN mdash; FORTRAN H (для отладки) и FORTRAN О) mdash этот показатель был равен 1,04. Для Algol он находился в пределах 7–10. В Algol были неэффективные способы передачи параметров в функции. Кроме того, существовавшие в то время архитектуры не были приспособлены к реализации Algol-60, например к блочной структуре программ. Для такой структуры характерно хранение данных в стеке, аппаратной реализации которого тогда не делали, и стек приходилось моделировать вручную. Язык оказался слишком неэффективный.

Коммерческие задачи — COBOL

Ещё одной нишей, появившейся чуть позднее, являются коммерческие задачи — приложения по обработке коммерческой информации. Они характерны малым объёмом простых вычислений над большим объёмом данных, и для таких приложений требовался интенсивный ввод-вывод. В результате в  году появился язык  (Common-Oriented Business Language).

В 1960 году был создан язык программирования Cobol.

Он задумывался как язык для создания коммерческих приложений, и он стал таковым. На Коболе написаны тысячи прикладных коммерческих систем. Отличительной особенностью языка является возможность эффективной работы с большими массивами данных, что характерно именно коммерческих приложений. Популярность Кобола столь высока, что даже сейчас, при всех его недостатках (по структуре и замыслу Кобол во многом напоминает Фортран) появляются новые его диалекты и реализации. Так недавно появилась реализация Кобола, совместимая с Microsoft .NET, что потребовало, вероятно, внесения в язык некоторых черт объектно-ориентированного языка.

Кобо́л (COBOL, COmmon Business Oriented Language) — язык программирования третьего поколения (первая версия в ), предназначенный, в первую очередь, для разработки бизнес-приложений.

IBM в те годы выпускала две линейки компьютеров — 709 для научных вычислений, и на которых основным языком программирования являлся FORTRAN, и 14хх для коммерческих задач, которые были ориентированы на интенсивный ввод-вывод.

Тем не менее, у COBOL тоже имелись недостатки в архитектуре. Например, в языке COBOL стандартным представлением даты была структура фиксированного вида MMDDYY, что явилось одной из основной причин проблемы  года. В настоящее время данный язык является практически мёртвым, он умер только из-за проблемы 2000. До этого момента он держал нишу довольно крепко.

Кстати, именно проблема 2000 послужила одним из стимулов к разработкам в области реверсного инженеринга (перевода программ с одного языка на другой), поскольку пользователям COBOL при миграции на другие языки хотелось сохранить и повторно использовать написанные проекты.

Символьная обработка — LISP

В 1958 году появился язык Lisp — язык для обработки списков. Получил достаточно широкое распространение в системах искусственного интеллекта. Имеет несколько потомков: Planner (1967), Scheme (1975), Common Lisp (1984). Многие его черты были унаследованы современными языками функционального программирования.

Ещё один знаковый язык —  (LISt Processing). Используется для задач символьной обработки, ИИ. Существует множество диалектов, самый популярный — Common LISP. Не применяется для индустриальных программ, т. к. низкоэффективен (использует списки и деревья, основная операция — применение функции, чем он и силён).

Лисп (LISP, от  LISt Processing language — «язык обработки списков»; современное написание: Lisp) — семейство языков программирования,  и данные в которых представляются системами линейных списков . Лисп является вторым в истории (после ) высокоуровневым языком программирования, который используется по сей день. Создатель Лиспа Джон Маккарти занимался исследованиями в области искусственного интеллекта и созданный им язык по сию пору является одним из основных средств моделирования различных аспектов ИИ.

Ниши разобраны

 год. Уже тогда были разобраны все ниши: для системного программирования применялся ассемблер, для прикладного программирования — LISP, COBOL, для научного примененеия — FORTRAN, для обучения — Algol-60.

1960–1980: Поиски Священного Грааля

До  года происходил экстенсивный рост количества языков программирования. Джон Саммит в  году наcчитал 400 языков, применяемых в США.

Тем не менее, в то время появилось много известных языков. То время характеризовалось поиском Священного Грааля — единого универсального языка программирования, который применялся бы во всех областях. Первой с этой проблемой столкнулась IBM, которая поняла, что поддерживать две линейки накладно, посему в  году они начали работу над проектом IBM 360 (360 градусов — полный круг решаемых задач), им хотелось иметь единый ЯП.

Первая попытка создания единого языка программирования — PL/1

В 1964 году все та же корпорация IBM создала язык PL/1, который был призван заменить Cobol и Fortran в большинстве приложений. Язык обладал исключительным богатством синтаксических конструкций. В нем впервые появилась обработка исключительных ситуаций и поддержка параллелизма. Надо заметить, что синтаксическая структура языка была крайне сложной. Пробелы уже использовались как синтаксические разделители, но ключевые слова не были зарезервированы. В частности, следующая строка — это вполне нормальный оператор на PL/1:

IF ELSE=THEN THEN THEN; ELSE ELSE 

В силу таких особенностей разработка компилятора для PL/1 была исключительно сложным делом. Язык так и не стал популярен вне мира IBM.

 — появление  (New Programming Language), позднее переименованного в . Создавался комитетом. В нём были смешаны основные ЯП. Конструкции из FORTRAN, Блочная структура из Algol, понятие записи из Кобола. Майерс сказал — «PL/1 был бы хорошим языком программирования, если из него выкинуть 80 процентов возможностей».

ПЛ/1 (PL/I, Programming Language I — «Язык программирования номер один», в русском языке произносится «пиэ́ль оди́н») — разработанный в 1964 году язык программирования, созданный для научных, инженерных и бизнес-ориентированных вычислений. Он содержит такой широкий набор синтаксических конструкций и встроенных функций, что, вероятно, не существует ни одного компилятора, поддерживающего все возможности языка ПЛ/1. ПЛ/1 поддерживает  и структурное программирование, и его основная область применения — обработка данных.

В PL/1 могло быть до 30 атрибутов у типов данных — это слишком много. Все запомнить невозможно, поэтому вводились правила-умолчания. IBM выпускала две версии трансляторов (по аналогии с FORTRAN) — PL O (отладочный) и PL F (быстрый), но они были немного разными — программа, работающая после трансляции отладочной версией, могла вылетать во время работы после трансляции быстрой. Да и спецификации языка чуть отличались.

Только IBM сложила в PL/1 несколько миллиардов, но как язык для промышленных приложений PL/1 провалился из-за своей большой сложности.

Анекдот:

— Что такое верблюд?

— Это лошадь, созданная комитетом.

Вторая попытка — Algol-68

 — вторая попытка создания универсального языка, создан IFIP, состав которой отличался от группы, создавшей Algol-60. Специально для описания языка были придуманы W-грамматики (W от Вирт), которые позволяли описываать и синтаксис, и семантику языка. Язык являлся технически совершенным. В частности, в Algol-68 была попытка создать ортогональный язык.

Алго́л 68 ( Algol 68 от  algorithmic — алгоритмический и  language — язык) — процедурный императивныйвысокоуровневый язык программирования, потомок языка , существенно доработанный. Разрабатывался в период -годов. Позиционировался как универсальный язык для описания произвольных алгоритмов обработки данных высокой сложности. Отличается большим объёмом, богатством возможностей и сложностью синтаксиса.

Ортогональность языковых конструкций означает их независимость. То есть языковые конструкции независимы и все, что угодно - оператор.

Например, в  конструкция

(Pascal)

for i := i1 to i2 do

не является ортогональной, т. к. накладываются ограничения, например, на тип данных.

Выражения и операторы не являются ортогональными.

В Algol-68 выражение, после которого стоит «;» (точка с запятой) превращается в оператор. И у операторов есть значения. Везде, где может стоять выражение, может стоять оператор, и наоборот. Таким образом, Algol-68, в отличие от даже , практически полностью ортогональный язык.

Пересмотренное сообщение об Algol-68 вышло через 11 лет. В нём были эпиграфы из Винни-Пуха. Больше ничего там читать невозможно. Algol-68 — первый и последний язык, в котором формально описана семантика.

Algol-68 оказался слишком сложным. Был сделан транслятор, скорость которого была нескеолько операторов в минуту, а эффективность получаемого кода на уровне Algol-60. В результате Algol-68 никакую нишу не занял.

Аналогичная история произошла с UNIX. Изначально разрабатывался MULTIX, но из него вышли некоторые люди и начали писать UNIX (MULTIX — много, UNIX — одиночка).

 — PL/1

 — Algol-68

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

В 1958 году на языке  запрограммировали первые противоракетные сооружения. Так они и работали десятки лет. Но для сопровождения все время нужно было обучать новых программистов. И так дела обстояли со всеми мало-мальски крупными проектами.

В 1963 году в Дартмурском колледже (Dartmouth College) был создан язык программирования BASIC (Beginners’ All-Purpose Symbolic Instruction Code — многоцелевой язык символических инструкций для начинающих). Язык задумывался в первую очередь как средство обучения и как первый изучаемый язык программирования. Он предполагался легко интерпретируемым и компилируемым. Надо сказать, что BASIC действительно стал языком, на котором учатся программировать (по крайней мере, так было еще несколько лет назад; сейчас эта роль отходит к Pascal). Было создано несколько мощных реализаций BASIC, поддерживающих самые современные концепции программирования (ярчайший пример — Microsoft Visual Basic).

Бе́йсик (от BASIC, сокращение от  Beginner’s All-purpose Symbolic Instruction Code — универсальный код символических инструкций для начинающих;  basic — основной, базовый) — семейство высокоуровневых языков программирования.

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

Одной из «визитных карточек» Эдсгера Дейкстры стало высказывание: «Студентов, ранее изучавших Бейсик, практически невозможно обучить хорошему программированию. Как потенциальные программисты они подверглись необратимой умственной деградации». Однако, это высказывание цитируется вне контекста, в котором Дейкстра подверг критике и многие другие популярные в то время языки.

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

Появление С и Pascal. Простота против сложности

Этимология названия языка : CPL (Cambribge Programming Language) — BCPL — B — C

 — появление языка С — «машинонезависимого ассемблера» (). В нём впервые ввод-вывод был выведен из языка. Язык оказался достаточно мощным, чтобы на нём написать системные библиотеки, в т. ч. библиотеку ввода-вывода. Чёткая экологическая ниша — cистемное программирование замена — языка ассемблер.

Си ( C) —   язык программирования, разработанный в начале 1970-х годов сотрудниками Bell Labs Кеном Томпсоном и Денисом Ритчи как развитие языка . Си был создан для использования в операционной системе . С тех пор он был  на многие другие операционные системы и стал одним из самых используемых языков программирования. Си ценят за его эффективность. Он является самым популярным языком для создания системного программного обеспечения. Его также часто используют для создания прикладных программ. Несмотря на то, что Си не разрабатывался для новичков, он активно используется для обучения . В дальнейшем  языка Си стал основой для многих других языков

В 1972 году Керниганом и Ритчи был создан язык программирования C. Он создавался как язык для разработки операционной системы UNIX. C часто называют «переносимым ассемблером», имея в виду то, что он позволяет работать с данными практически так же эффективно, как на ассемблере, предоставляя при этом структурированные управляющие конструкции и абстракции высокого уровня (структуры и массивы). Именно с этим связана его огромная популярность и поныне. И именно это является его ахиллесовой пятой. Компилятор C очень слабо контролирует типы, поэтому очень легко написать внешне совершенно правильную, но логически ошибочную программу.

В 1986 году Бьярн Страуструп создал первую версию языка C++, добавив в язык C объектно-ориентированные черты, взятые из Simula (см. ниже), и исправив некоторые ошибки и неудачные решения языка. C++ продолжает совершенствоваться и в настоящее время, так в 1998 году вышла новая (третья) версия стандарта, содержащая в себе некоторые довольно существенные изменения. Язык стал основой для разработки современных больших и сложных проектов. У него имеются, однако же, и слабые стороны, вытекающие из требований эффективности.

В 1995 году в корпорации Sun Microsystems Кеном Арнольдом и Джеймсом Гослингом был создан язык Java. Он наследовал синтаксис C и C++ и был избавлен от некоторых неприятных черт последнего. Отличительной особенностью языка является компиляция в код некоей абстрактной машины, для которой затем пишется эмулятор (Java Virtual Machine) для реальных систем. Кроме того, в Java нет указателей и множественного наследования, что сильно повышает надежность программирования.

В 1999–2000 годах в корпорации Microsoft был создан язык C#. Он в достаточной степени схож с Java (и задумывался как альтернатива последнему), но имеет и отличительные особенности. Ориентирован, в основном, на разработку многокомпонентных Интернет-приложений.

В  году  написал . «Мне надоело» — сказал Вирт о том, что раньше он просто не мог объяснять студентам язык, который нельзя объяснить логично. Pascal очень быстро занял образовательную нишу. Дейкстра: «Языки типа FORTRAN и COBOL калечат мозги и поэтому их преподавание должно приравниваться к преступлению». На основе Pascal создано множество более современных и удачных ЯП (Turbo Pascal, ), используемых в индустриальном программировании.

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

Отрицательной чертой языка было отсутствие в нем средств для разбиения программы на модули. Вирт осознавал это и разработал язык Modula-2 (1978), в котором идея модуля стала одной из ключевых концепций языка. В 1988 году появилась Modula-3, в которую были добавлены объектно-ориентированные черты. Логическим продолжением Pascal и Modula являются язык Oberon и Oberon-2. Они характеризуются движением в сторону объектно- и компонентно- ориентированности.

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

В результате, простота оказалась лучше сложности.

Третья попытка — Язык Ada

В Пентагоне поняли, что денег на программистов уходит много. Проанализировали расходы на ПРО систем реального времени. И получилось:

50% — вложено в систему после того, как её приняли в разработку — сопровождение (maintenance)

25% — тестирование и исправление ошибок

15% — составление документации и спецификаций

10% — написание кода

При первом запуске системы ПРО она стреляла по Луне — явная ошибка, которую трудно выявить на этапе проектирования.

Отсюда следует острая необходимость сопровождения.

Дорогое сопровождение за счёт отсутствия стандартизации языка.

Как оказалось, в Пентагоне (Минобороны) использовалось 350 языков, из них 10 популярных, остальные крайне редки, поэтому и так дорого сопровождение. Так почему же оружие стандартизированно, а ЯП нет?

Как следствие, было принято решение в унифицировать ЯП — в результате которого должны были быть выбраны порядка трёх ЯП. Вначале был создан Комитет и первый список требований, потом второй список требований и т. д. В ходе анализа требований выяснилось, что достаточно одного ЯП, «Стальные требования». Изначально было выделено три языка, на которые должен быть похож кандидат:

Pascal

Algol-68

PL/1

Был объявлен тендер, и из 12 языков были выбраны 4, все на основе Pascal, на втором этапе был выбран один, который назвали языком  (). Окончательный стандарт языка вышел в  году. Стандарт запрещал как создание над-, так и подмножеств. К тому же планировалось, что Пентагон будет закупать программы только на языке Ada. Также был создан верификатор программ. Также предполагалось использовать только сертифицированные компиляторы.

В 1983 году под эгидой Министерства Обороны США был создан язык Ada. Язык замечателен тем, что очень много ошибок может быть выявлено на этапе компиляции. Кроме того, поддерживаются многие аспекты программирования, которые часто отдаются на откуп операционной системе (параллелизм, обработка исключений). В 1995 году был принят стандарт языка Ada 95, который развивает предыдущую версию, добавляя в нее объекно- ориентированность и исправляя некоторые неточности. Оба этих языка не получили широкого распространения вне военных и прочих крупномасштабных проектов (авиация, железнодорожные перевозки). Основной причиной является сложность освоения языка и достаточно громоздкий синтаксис (значительно более громоздкий, чем Pascal).

А́да (Ada) — язык программирования, созданный в — в результате проекта, предпринятого Министерством обороны США с целью разработать единый язык программирования для встраиваемых систем (то есть систем управления автоматизированными комплексами, работающими в реальном времени). Имелись в виду, прежде всего, бортовые системы управления военными объектами (кораблями, самолётами, танками, ракетами, снарядами и т. п.). Перед разработчиками не стояло задачи создать универсальный язык, поэтому решения, принятые авторами Ады, нужно воспринимать в контексте особенностей выбранной предметной области. Язык назван в честь Ады Лавлэйс.

Создатели Ada — французская группа. Кроме того, она написала обоснование проекта, в котором были указаны основные особенности дизайна языка:

Надёжность

Статический контроль — проверки при трансляции (например, выход за границы массива для a[10])

Квазистатический контроль — проверки при выполнении (выход за границы массива для a[i])

Эффективность

Все, что летает, стреляет и падает в реальном времени, должно реагировать быстро. Ada не была столь быстра.

Читабельность

Обязательное требование для maintance

Механизм обработки исключений впервые появился в языке Ada.

Главным понятием в Ada было понятие АТД (Абстрактный Тип Данных).

Тем не менее, язык Ada оказался чересчур сложным. Сложный язык — сложный компилятор. Скорость трансляции — 3 строки в минуту.

Объектно-ориентированные языки программирования

Появилась новая парадигма — ООП. Она довольно быстро завоевала популярность, посему не объектно-ориентированные языки или погибли, или в них добавили ООП (Pascal, C)

 — SmallTalk V

 — 

и другие объектные ЯП.

 —  (описание на 40 страниц)

Ada вымерла, т. к. не поддерживала объектно-ориентированную парадигму, была очень сложна и очень медленна.

 — Ada 95, включившая в себя еще и объектно-ориентированную парадигму. Стало еще сложнее и неподъемнее. Больше грааль не искали.

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

Например, в Algol-60: Условие записывается в двух формах:

(Algol-60)

if b then

S1

(Algol-60)

if b then

S1

else

S2

Если записать

(Algol-60)

if B then

S

if B then

S1

else

S2

то возникает неоднозначность: непонятно, куда относится S2 — ко внутреннему условию или ко внешнему. Эта неоднозначность была найдена .

Этапы развития ЯП

Все основные идеи появились в первые 15–20 лет, всё новое — хорошо забытое старое.

Второй этап развития языков программирования

Второй этап развития языков программирования (20–25) лет. Знаменовался экспоненциальным ростом ЯП и тремя попытками создания универсальных языков программирования: , , . Все три проекта были обречены на неудачу. Все три языка провалились из-за повышенной сложности.  и  отличает предельная простота.

Два основных принципа дизайна ЯП

Создание ЯП аналогично собиранию вещей в путь.

принцип сундучка — брать все то, что в принципе может понадобиться

принцип чемоданчика — брать только то, без чего совсем нельзя обойтись (он же принцип минимальности языковых конструкций)

Ключевое понятие — технологическая потребность.

Какие свойства критичны с точки зрения индустриального программирования:

Технологические потребности

Особенно — раздельная компиляция

Объектная ориентация

Производительность кода

Недостаток Ada и  — они не являются объектно-ориентированными языками. Но Modula-2 все равно лучше, так как проще.

1967 — Simula-2

В  появилась концепция класса, новые объекты создаются в динамической памяти оператором new. Но производительнось генерируемого кода была слишком низкая.

Первым объектно-ориентрованным языком был язык Simula (1967). Этот язык был предназначен для моделирования различных объектов и процессов, и объектно-ориентированные черты появились в нем именно для описания свойств модельных объектов.

Си́мула-67 (Simula 67) — первый в мире язык программирования. Разработан в конце 60-х сотрудниками Норвежского Вычислительного Центра () Кристеном Нюгором и Уле-Йоханом Далем для моделирования сложных систем.

1980 — Smalltalk V

Apple писала на , фактически это было основой систем LISA. Первая версия Windows также поддерживала вызов процедур как на Pascal, так и на  (отличаются передачей параметров).

ООП языки должны поддерживать все эти вещи ( поддерживал):

Наличие понятие объекта, типа данных, инкапсуляции

Наследование

Полиморфизм

Переопределение стандартных операций, например, операции «+» (в  такого нет)

Переопределение методов. По-разному для разных объектов

Smalltalk погубила его неэффективность.

Популярность объектно-ориентированному программированию принес язык Smalltalk, созданный в 1972 году. Язык предназначался для проектирования сложных графических интерфейсов и был первым по-настоящему объектно-ориентированным языком. В нем классы и объекты — это единственные конструкции программирования. Большим недостатком Smalltalk являются большие требования к памяти и низкая производительность полученных программ. Это связано с не очень удачной реализацией объектно-ориентированных особенностей. Популярность языков C++ и Ada 95 связана именно с тем, что объектно- ориентированность реализована без существенного снижения производительности.

Smalltalk (произносится [смо́лток]) — язык программирования с динамической типизацией, разработанный в Xerox PARC Аланом Кэйем, Дэном Ингаллсом, Тедом Кэглером, Адель Голдберг, и другими в 1970-х годах. Язык был представлен как Smalltalk-80 и с тех пор широко используется. Smalltalk продолжает активно развиваться и собирает вокруг себя сообщество пользователей.

1979–… — C++

  нравилась всем, кроме эффективности.

Страуструп хотел разработать язык, который был бы так же строен и красив, как Simula, и эффективен, как ассемблер. А так как он работал в Bell Labs для AT&T, то в качестве основы был выбран С, в результате язык получил название «С с классами» ("C with classes"). Основным критерием при создании С с классами была совместимость, в частности, с UNIX и её системными библиотеками.

 — язык получил имя . Этот язык не имел никаких квазистатических проверок, что существенно ускоряло работу.

В Kernigan&Ritchie C при отсутствии поля выдавалось только предупреждение, а не ошибка. P->fld при отсутствии поля fld заменялся просто на P

В последних версиях появился квазистатический контроль — dynamic_cast.

С++ добавил к С две мощные концепции:

Концепция класса

Аппарат наследования (в т. ч. множественного) и полиморфизма

Все перечисленные преимущества позволили языку получить статус профессионального.

C++ (произносится «си плюс плюс») — статически типизированный язык программирования общего назначения. Поддерживая разные парадигмы программирования, сочетает свойства как , так и языков. В сравнении с его предшественником — языком , — наибольшее внимание уделено поддержке и обобщённого программирования. Название «C++» происходит от языка C, в котором унарный оператор ++ обозначает переменной.

1988 — Oberon и Eiffel

 получил премию Тьюринга за изобретение совокупности языков программирования (Algol W, , , , ,, , ).

Из Modula было выкинуто определённое количество конструкций и добавлено наследование. Сообщение об Обероне занимало 10 страниц. Компилятор составлял 4000 строк.

Оберон — язык программирования высокого уровня, разработанный Никлаусом Виртом, для исполнения программ на котором предназначена операционная система, авторами которой являются Н. Вирт и Юрг Гуткнехт (Jurg Gutknecht).

Eiffel — широко известен в узких кругах.

Существует язык с очень хорошей реализацией объектно- ориентированности, не являющийся надстройкой ни над каким другим языком. Это язык Eiffel (1986). Являясь чистым языком объектно-ориентированного программирования, он, кроме того, повышает надежность программы путем использования «контрольных утверждений».

Eiffel (Эйфель) — объектно-ориентированный язык программирования с алголоподобным синтаксисом, разработанный Бертраном Мейером. В этом языке впервые был реализован метод контрактного программирования.

Современные объектно-ориентированные языки программирования

 — наследник языка Turbo Pascal. В Turbo Pascal 6 можно вызывать функцию как процедуру.

В этих языках объекты заводятся только в динамической памяти.

 —  (Borland)

 —  (Sun)

 —  (Microsoft)

В этих языках реализованы схожие идеи и модные нынче тенденции.

Java — основной язык для создания программ в гетерогенной среде (Сети).

Java — объектно-ориентированный язык программирования, разработанный компанией Sun Microsystems. Приложения Java обычно в специальный , поэтому они могут работать на любой виртуальной Java-машине (JVM) независимо от компьютерной архитектуры. Дата официального выпуска — 23 мая 1995 года.

Одним из принципов Java является принцип WORA — Write Once, Run Anywhere. Это достигнуто с помощью Java Virtual Machine (JVM). Был разработан байт-код, который эта машина интерпретирует уже на конкретной архитектуре. Корни: UCSD Pascal. Для разных версий Pascal писался интерпретатор P-кода, который получался при компиляции в него.

В Microsoft решили, что определяющим является не язык, а библиотека, и сделали .NET и CLR (Common Language Runtime). Был создан MIL — Microsoft Intermediate Language, в который транслируется код на разных языках.

С#, VC++.NET, , => MIL (байт-код)

Различия между JVM и MIL: JVM интерпретируется, MIL компилируется JIT-компилятором (Just In Time).

MS JVM была быстрее Sun JVM из-за того, что у MS опыта больше в создании JIT-компиляторов (полученного ещё во времена разработки Visual Basic).

Microsoft Visual Basic — средство разработки программного обеспечения, разрабатываемое корпорацией и включающее язык программирования и среду разработки. Язык Visual Basic унаследовал дух, стиль и отчасти синтаксис своего предка — языка , у которого есть немало диалектов. В то же время Visual Basic сочетает в себе и элементы и языков программирования. Среда разработки VB включает инструменты для визуального конструирования пользовательского интерфейса.

Delphi — компромисс между VB и С++.

Delphi (Де́лфи, произносится ) — среда программирования, в которой используется язык программирования Object Pascal. Начиная со среды разработки Delphi 7.0, в официальных документах стала использовать название Delphi для обозначения языка Object Pascal.

C# — замена от MS, вытеснившая Delphi из своей ниши.

C# (произносится си-шарп) — язык программирования. Разработан в —2001 годах группой инженеров под руководством Андерса Хейлсберга в компании как основной язык разработки приложений для платформы Microsoft .NET и впоследствии был стандартизирован как ECMA-334 и ISO/IEC 23270. с C# входит в стандартную установку самой .NET, поэтому программы на нём можно создавать и компилировать даже без инструментальных средств, вроде Visual Studio.

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

В 1957 году была предпринята попытка создания языка для описания математической обработки данных. Язык был назван APL (Application Programming Language). Его отличительной особенностью было использование математических символов (что затрудняло применение на текстовых терминалах; появление графических интерфейсов сняло эту проблему) и очень мощный синтаксис, который позволял производить множество нетривиальных операций прямо над сложными объектами, не прибегая к разбиению их на компоненты. Широкому применению помешало, как уже отмечалось, использование нестандартных символов как элементов синтаксиса.

APL (A Programming Language или, возможно, Array Programming Language) — язык программирования, оптимизированный для работы с , предшественник современных научных вычислительных сред, таких как , использует функциональную парадигму программирования.

В 1962 году появился язык Snobol (а в 1974 — его преемник Icon), предназначенный для обработки строк. Синтаксис Icon напоминает С и Pascal одновременно. Отличие заключается в наличии мощных встроенных функций работы со строками и связанная с этими функциями особая семантика. Современным аналогом Icon и Snobol является Perl — язык обработки строк и текстов, в который добавлены некоторые объектно-ориентированные возможности. Считается очень практичным языком, однако ему недостает элегантности.

Снобо́л - язык программирования высокого уровня, разработанный в 1962-1967 гг. и предназначенный преимущественно для обработки текстовых данных.

Icon — язык программирования, унаследовавший идеологию более раннего языка того же автора . Название языка не имеет ничего общего с «иконками», а является сокращением от слова  iconoclastic (иконоборческий), используемом в смысле борьбы с конформизмом в разработке языков программирования.

В 1969 году был создан язык SETL — язык для описания операций над множествами. Основной структурой данных в языке является множество, а операции аналогичны математическим операциям над множествами. Полезен при написании программ, имеющих дело со сложными абстрактными объектами.

Сетл (SETL) — язык программирования, ориентированный на работу со , разработанный в конце годов группой профессора Нью-йоркского университета Джекобом Шварцем. Наименование языка SETL — сокращение от SET Language  (англ.), где SET переводится как «множество», то есть дословно «Язык множеств».

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

JavaScript — язык программирования. Является языка

Язык был создан в компании Netscape Communications в качестве языка для описания сложного поведения веб-страниц. Первоначально назывался LiveScript, причиной смены названия получили маркетинговые соображения. Интерпретируется браузером во время отображения веб-страницы. По синтаксису схож с Java и (отдаленно) с C/C++. Имеет возможность использовать встроенную в браузер объектную функциональность, однако подлинно объектно-ориентированным языком не является.

Visual Basic Scripting Edition (обычно просто VBScript) — язык программирования, интерпретируемый компонентом Windows Script Host. Он широко используется при создании скриптов в операционных системах семейства Microsoft Windows.

Язык был создан в корпорации Microsoft во многом в качестве альтернативы JavaScript. Имеет схожую область применения. Синтаксически схож с языком Visual Basic (и является усеченной версией последнего). Так же, как и JacaScript, исполняется браузером при отображении веб-страниц и имеет ту же степень объектно- ориентированности.

Perl — высокоуровневый интерпретируемый динамический язык программирования общего назначения, созданный Ларри Уоллом, лингвистом по образованию. Название языка представляет собой , которая расшифровывается как Practical Extraction and Report Language «практический язык для извлечения данных и составления отчётов». Первоначально аббревиатура состояла из пяти символов и в таком виде в точности совпадала с английским словом pearl, жемчужина. Но затем стало известно, что такой язык существует (см. ) и букву «а» убрали. Талисманом языка Perl является  — не слишком красивое, но очень выносливое животное, способное выполнять тяжёлую работу.

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

Python (; па́йтон, пито́н) — высокоуровневый язык программирования общего назначения с акцентом на производительность разработчика и читаемость кода. ядра Python минималистичен. В то же время стандартная библиотека включает большой объём полезных функций.

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

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

Язык программирования Оккам ( Occam) — это язык параллельного программирования высокого уровня, разработанный в начале 1980-х годов группой учёных из Оксфорда под руководством Дэвида Мэя ( David May) по заданию английской компании INMOS Ltd. в рамках работ по созданию . Назван в честь английского философа XIV века Уильма Оккамского, а его сентенция, известная как бритва Оккама, является девизом проекта.

Язык Оccam был создан в 1982 году и предназначен для программирования транспьютеров — многопроцессорных систем распределенной обработки данных. Он описывает взаимодействие параллельных процессов в виде каналов — способов передачи информации от одного процесса к другому. Отметим особенность синтаксиса языка Щccam — в нем последовательный и параллельный порядки выполнение операторов равноправны, и их необходимо явно указывать ключевыми словами PAR и SEQ.

Linda — язык программирования, предназначенный для параллельной обработки данных. При использовании языка Linda прикладной делится на группу процессов, среди которых выделяется главный. Указанные процессы осуществляются одновременно и один относительно другого. Язык предоставляет эффективные средства создания параллельных программ. Ядром языка является пространство кортежей — совокупностей взаимосвязанных данных. Каждая из них содержит ключевое слово для выборки кортежа.

В 1985 году была предложена модель параллельных вычислений Linda. Основной ее задачей является организация взаимодействия между параллельно выполняющимися процессами. Это достигается за счет использования глобальной кортежной области (tuple space). Процесс может поместить туда кортеж с данными (то есть совокупность нескольких, возможно разнородных, данных), а другой процесс может ожидать появления в кортежной области некоторого кортежа и, после его появления, прочитать кортеж с возможным последующим его удалением. Заметим, что процесс может, например, поместить кортеж в область и завершиться, а другой процесс может через некоторое время воспользоваться этим кортежем. Таким образом обеспечивается возможность асинхронного взаимодействия. Очевидно, что при помощи такой модели может быть сэмулировано и синхронное взаимодействие. Linda — это модель параллельных вычислений, она может быть добавлена в любой язык программирования. Существуют достаточно эффективные реализации Linda, обходящие проблему существования глобальной кортежной области с потенциально неограниченным объемом памяти.

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

Основная идея, лежащая в основе функционального программирования, — это представление программы в виде математических функций (т.е. функций, значение которых определяется лишь их аргументами, а не контекстом выполнения). Оператор присваивания в таких языках не используется (или, как минимум, его использование не поощряется). Императивные возможности, как правило, имеются, но их применение обставлено серьезными ограничениями. Существуют языки с ленивой и с энергичной семантикой. Различие заключается, грубо говоря, в том, что в языках с энергичной семантикой вычисления производятся в том же месте, где они описаны, а в случае ленивой семантики вычисление производится только тогда, когда оно действительно необходимо. Первые языки имеют более эффективную реализацию, в то время как вторые — лучшую семантику.

Из языков с энергичной семантикой упомянем ML и два его современных диалекта — Standard ML (SML) и CaML. Последний имеет объектно-ориентированного потомка — Objective CaML (O’CaML).

Среди языков с ленивой семантикой наиболее распространены два: Haskell и его более простой диалект Clean.

Более подробные сведения о функциональных языках приведены ЗДЕСЬ:

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

Родоначальником большинства языков логического программирования является язык Prolog (1971). У него есть ряд потомков — Parlog (1983, ориентирован на параллельные вычисления), Delta Prolog и др. Логическое программирование, как и функциональное, — это отдельная область программирования, и за более подробными сведениями мы отсылаем читателя к специальной литературе.

Пролог ( Programmation en Logique) — язык и система логического программирования, основанные на языке предикатов математической логики дизъюнктов Хорна, представляющей собой подмножество логики предикатов первого порядка.

Позволю себе выделить некоторую общую тенденцию в развитии языков программирования. Проницательный читатель, наверное, уже давно догадался, о чем я собираюсь сказать. Языки развиваются в сторону все большей и большей абстракции. И это сопровождается падением эффективности. Вопрос: а стоит ли этого абстракция? Ответ: стоит. Стоит, так как повышение уровня абстракции влечет за собой повышение уровня надежности программирования. С низкой эффективностью можно бороться путем создания более быстрых компьютеров. Если требования к памяти слишком высоки, можно увеличить ее объем. Это, конечно, требует времени и средств, но это решаемо. А вот с ошибками в программах можно бороться только одним способом: их надо исправлять. А еще лучше — не совершать. А еще лучше максимально затруднить их совершение. И именно на это направлены все исследования в области языков программирования. А с потерей эффективности придется смириться.

Целью данного обзора была попытка дать читателю представление о всем многообразии существующих языков программирования. Среди программистов часто бытует мнение о «всеобщей применимости» того или иного языка (C, C++, Pascal и т.п.). Это мнение возникает по нескольким причинам: недостаток информации, привычка, инертность мышления. Я попытался слегка компенсировать первый фактор. По поводу остальных могу лишь сказать, что настоящий профессионал должен постоянно стремиться повышать свои профессиональную квалификацию. А для этого нужно не бояться экспериментировать. Ну и что, что все вокруг пишут на C/С++/VB/Pascal/Perl/Java/… (нужное подчеркнуть)? А почему бы не попробовать что-нибудь новенькое? А вдруг это окажется эффективнее? Разумеется, прежде чем приниматься использовать новый язык, нужно внимательно изучить все его особенности, включая наличии эффективной реализации, возможности взаимодействия с существующими модулями и т.п., и только после этого принимать решение. Разумеется, всегда есть риск пойти не тем путем, но… Не ошибается лишь тот, кто ничего не делает.

И еще. Мне доводилось слышать, а порой и участвовать в дискуссиях вида «язык A лучше, чем язык B». Я надеюсь, что, прочитав этот обзор, многие убедятся в бессмысленности таких споров. Максимум, о чем может идти речь — это о преимуществах одного языка над другим при решении той или иной задачи в тех или иных условиях. Вот здесь действительно иногда есть о чем поспорить. И решение подчас отнюдь не очевидно. Однако же спорить «вообще» — очевидная глупость.

Эта статья задумывалась как ответ тем, кто кричит «язык X MUSTYLE="DIE». Надеюсь, что ответ получился достаточно адекватным и убедительным. Надеюсь также, что статья имеет, помимо полемической, и познавательную ценность.



Скачать документ

Похожие документы:

  1. Роль и значение языка паскаль в эволюции языков программирования

    Документ
    Языки программирования претерпели большие изменения с тех пор, как началось их использование. Машинные языки были первыми языками программирования. Программирование на них затруднительно ввиду того, что, во-первых, эти языки различны
  2. Существуют различные классификации языков программирования

    Документ
    По наиболее распространенной классификации все языки программирования, в соответствии с тем, в каких терминах необходимо описать задачу, делят на языки низкого и высокого уровня.
  3. Учебно-методический комплекс по дисциплине высокоуровневые методы информатики и программирования

    Учебно-методический комплекс
    В курсе рассматриваются фундаментальные вопросы, связанные с современными технологиями программирования, эволюцией программного обеспечения, парадигмами процедурного, модульного и объектно-ориентированного программирования.
  4. Учебно-методический комплекс «Высокоуровневые методы информатики и программирования» (для студентов отделения высшего профессионального образования специальности «Прикладная информатика (в экономике)») Рубцовск

    Учебно-методический комплекс
    Рабочая программа учебной дисциплины «Высокоуровневые методы информатики и программирования» предназначена для реализации государственных требований к минимуму содержания и уровню подготовки выпускников по специальности: 351400 «Прикладная
  5. Ые системы", "Операционные системы, среды и оболочки" и "Операционные системы и системное программирование" для студентов специальнос­тей факультета Кибернетики

    Документ
    Операционные системы. Лабораторный практикум для выполнения лабораторных и контрольных (домашних) работ дисциплин "Операционные системы", "Операционные системы, среды и оболочки" и "Операционные системы и

Другие похожие документы..