Автор Анна Евкова
Преподаватель который помогает студентам и школьникам в учёбе.

Классификация языков программирования. Критерии выбора среды и языка разработки ( Класификация языков програмирования )

Содержание:

ВВЕДЕНИЕ

Программирование занимает одну из значительных ниш в современном мире. Это не просто способ заставить работать «железяки», но и поставить себя на путь развития своих способностей. Но, прежде чем мы разберём все полезные свойства, следовало бы разобраться с терминологией. Программирование — это область деятельности, направленная на разработку программного обеспечения, которое, в свою очередь, направлено на улучшение и облегчение человеческого быта, промышленной деятельности, сферы услуг и технологического прогресса.

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

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

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

1.1. Языки програмирования низкого уровня

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

  • высокое качество создаваемых программ (компактность и скорость  выполнения);
  • возможность использования конкретных аппаратных ресурсов;
  • предсказуемость объектного кода и заказов памяти;
  • для составления эффективных программ необходимо знать систему команд и особенности функционирования данной ЭВМ;
  • трудоемкость процесса составления программ;
  • низкая скорость программирования;
  • невозможность непосредственного использования программ, составленных на этих языках, на ЭВМ других типов.

Машинно-ориентированные языки по степени автоматического программирования подразделяются на классы.

1.1.1. Машинный язык

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

  • Сравнительно высокая производительность при написании короткой программы;
  • Минимальный объемзанимаемой программной памяти;
  • Ввод результатов в устройство подготовки данных

К недостаткам относится:

  • Большая трудоёмкость и низкая производительность при написании программ;
  • Высокая вероятность ошибок и сложность их выявления;
  • Трудности развития и сокращения написанных ранее программ.

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

1.1.2. Языки символьного кодирования

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

Использование символических адресов – первый шаг к созданию ЯСК. Команды ЭВМ вместо истинных (физических) адресов содержат символические адреса. По результатам составленной программы определяется требуемое количество ячеек для хранения исходных промежуточных и результирующих значений. Назначение адресов, выполняемое отдельно от составления программы в символических адресах, может проводиться менее квалифицированным программистом или специальной программой, что в значительной степени облегчает труд программиста.

1.1.3. Автокод

Языки, включающие в себя все возможности ЯСК, посредством расширенного введения макрокоманд, называются Автокоды.

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

Развитые автокоды получили название Ассемблеры. Сервисные программы и пр., как правило, составлены на языках типа Ассемблер [1,4,13].

1.1.4. Макрос

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

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

Макрос одинаково может работать, как с программами, так и с данными.

1.2. Языки програмирования высокого уровня

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

Высокоуровневые языки программирования были разработаны для платформенной независимости сути алгоритмов. Зависимость от платформы перекладывается на инструментальные программы — трансляторы, компилирующие текст, написанный на языке высокого уровня, в элементарные машинные команды (инструкции). Поэтому, для каждой платформы разрабатывается платформенно-уникальный транслятор для каждого высокоуровневого языка, например, переводящий текст, написанный на Delphi в элементарные команды микропроцессоров семейства x86.

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

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

Примеры: C, C++, C#, Delphi, Fortran, Java, JavaScript, Лисп, Паскаль, PHP. Языкам высокого уровня свойственно умение работать с комплексными структурами данных. В большинстве из них интегрирована поддержка строковых типов, объектов, операций файлового ввода-вывода и т. п.

1.2.1. Императивные языки

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

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

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

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

Pascal; C; Ada; PL/1; Fortan; Basic; Focal

1.2.2. Декларативные языки

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

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

К подвидам декларативного программирования также зачастую относят функциональное и логическое программирование — несмотря на то, что программы на таких языках нередко содержат алгоритмические составляющие, архитектура в императивном понимании (как нечто отдельное от кодирования) в них также отсутствует: схема программы является непосредственно частью исполняемого кода.

На повышение уровня декларативности нацелено языково-ориентированное программирование.

«Чисто декларативные» компьютерные языки зачастую не полны по Тьюрингу — так как теоретически не всегда возможно порождение исполняемого кода по декларативному описанию. Это иногда приводит к спорам о корректности термина «декларативное программирование» (менее спорным является «декларативное описание решения» или, что то же самое, «декларативное описание задачи»).

1.2.3. Объектно-ориентированные языки

Концепция объектно-ориентированного программирования (object- oriented language) подразумевает, что основой управления процессом реализации программы является передача сообщений объектам. Поэтому объекты должны определяться совместно с сообщениями, на которые они должны реагировать при выполнении программы. В этом состоит главное отличие ООП от процедурного программирования, где отдельно определённые структуры данных передаются в процедуры (функции) в качестве параметров. Таким образом, объектно-ориентированная программа состоит из объектов – отдельных фрагментов кода, обрабатывающего данные, которые взаимодействуют друг с другом через определённые интерфейсы.

Объектно-ориентированный язык программирования должен обладать следующими свойствами:

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


Элементы объектно-ориентированного программирования (ООП) появились в начале 70-х годов в языке моделирования Simula, затем получили свое развитие, и в настоящее время ООП принадлежит к числу ведущих технологий программирования.

1.2.4. Специализированные языки

Специализированные языки (special language) - языки программирования, ориентированные на решение определенного круга задач. Этих задах много, рассмотрим некоторые из них.

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

  • Задачи искусственного интеллекта (Lisp, Prolog, Planner, QA4, FRL, KRL, QLisp);
  • Задачи вычислительной математики и физики (Occam, PFOR, Glypnir, Actus, Cobol, Алгол, Фортран);
  • Разработка интерфейса (Forth, C, C++, Ассемблер, Макроассемблер, Simula-67, OAK, Smalltalk, Java);
  • Разработка программ-оболочек, разработка систем (Forth, C, C++, Ассемблер, Макроассемблер, Simula-67, OAK, Smalltalk, Java, РПГ);
  • Задачи вычислительного характера (Algol, Fortran, Cobol, Ada, PL/1, Basic, Pascal);
  • Оформление документов, обработка больших текстовых файлов, организация виртуальных трехмерных интерфейсов в Интернете (HTML, Perl, PHP, Tcl/Tk, VRML, XML, PL/SCL);
  • Языки программирования баз данных. (SQL, dBase II, FoxPro, Clipper);

Кроме того, существуют гибридные (комбинированные) языки (hibrid language) - языки программирования, использующие также и средства других языков.

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

Языки программирования по своим возможностям и времени создания принято делить на несколько поколений (Generation Language, GL). Каждое из последующих поколений по своей функциональной мощности качественно отличается от предыдущего. К сегодняшнему дню насчитывается пять поколений ЯП.

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

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

Расцвет второго поколения языков программирования (2GL) пришелся на конец 50-х - начало 60-х годов. Был создан символический ассемблер, позволявший писать программы без привязки к конкретным адресам памяти. В него было введено понятие переменной, и он, по сути, стал первым настоящим (хоть и машинно-ориентированным) языком программирования со своим компилятором. Скорость создания и эффективность программ резко возросли. Ассемблеры активно применяются в настоящее время, как правило, для создания программ, максимально использующих возможности аппаратуры - различных драйверов, модулей состыковки с нестандартным оборудованием и т.д.

Третье поколение ЯП (3GL) принято относить к 60-м годам. В это время родились языки, которые называют универсальными языками высокого уровня, с их помощью можно решать задачи из любых областей. Это общеизвестные Fortran, Cobol, Algol и др. Такие качества новых языков, как относительная простота, независимость от конкретного компьютера и возможность использования мощных синтаксических конструкций позволили резко повысить производительность труда программистов. Кроме того, понятная большинству пользователей процедурная идеология этих языков позволила привлечь к написанию небольших программ (как правило, расчетного или учетного характера), большое количество специалистов из некомпьютерных областей.

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

С начала 70-х годов по настоящее время тянется период языков четвертого поколения (4GL). Несмотря на рождение новых технологий (ООП, визуальное программирование, CASE-методологии, системный анализ), процесс создания больших программных комплексов оказался очень трудоемкой задачей, так как для реализации крупных проектов требовался более глобальный подход к решаемым задачам, чем предлагали имевшиеся средства разработки. Языки 4GL частично снимали эту проблему. Целью их создания было в первую очередь стремление к увеличению скорости разработки проектов, снижение числа ошибок и повышение общей надежности работы больших программных комплексов, возможность быстрого и легкого внесения изменений в готовые проекты. А также упрощение самих языков для конечного пользователя, активное внедрение технологий визуальной разработки и т. д. Все средства разработки 4-го поколения имеют мощные интегрированные оболочки и обладают простым и удобным пользовательским интерфейсом. Они чаще всего используются для проектирования баз данных и работы с ними (встроенные языки СУБД), что объясняется возможностью формализации всех понятий, используемых при построении реляционных баз данных. Как правило, в эти языки встраиваются мощные примитивы, позволяющие одним оператором описать такую функциональность, для реализации которой на языках младших поколений потребовалось бы написать тысячи строк кода.

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

Рождение языков пятого поколения относится к настоящему времени. Довольно неожиданно вокруг самого названия 5GL разгорелись жаркие споры. Возникло несколько программистских "школ", представители, каждой из которых, имеют свое мнение о том, какие средства разработки считать языками 5-го поколения, а какие нет. Например, на страницах лондонского журнала SURPRISE (Surveys and Presentations in Information Systems Engineering), выпускаемого при поддержке английских министерств по электронике и вычислительной технике, рассматривают средства разработки 5-го поколения в более широком аспекте, чем это принято делать в отношении обычных языков программирования. Они считают, что к системам 5GL можно отнести не только новые мощные языки, но и системы создания программ, ориентированные на непрограммиста. Подобные системы отличаются стремлением предоставить конечному пользователю-неспециалисту богатые возможности создания прикладных программ с помощью визуальных средств разработки без знания программирования. Главная идея, которая закладывается в эти системы 5GL - возможность компьютерного интерактивного или полностью автоматического преобразования инструкций, вводимых в систему наиболее удобными человеку методами в максимально наглядном виде, в текст на универсальных языках программирования, описывающий готовую программу.

Однако большая группа специалистов считает, что языки 5-го поколения являются именно языками программирования, требующими от разработчика соответствующей квалификации и умения составлять программы вручную. Сторонники этого мнения под языками 5GL понимают специализированные языки, оперирующие не абстрактными переменными, а понятиями своей предметной области, например, бухгалтерскими счетами или ферзями и пешками. Это, как правило, узкоспециализированные языки, предоставляющие программисту мощные высокоуровневые возможности обработки информации из конкретной области знаний. К языкам 5-го поколения относят также интегрированные с базами знаний и экспертными системами программные комплексы с собственными языками программирования. Типичный пример - созданная в Австралии самообучающаяся нейронная сеть "LISA" с встроенным языком описания фактов, сущностей и взаимосвязей между ними, на торговой марке которой красуется "лейбл" 5GL.

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

Пока сложно сказать, насколько успешной окажется тенденция стремления к полной и недостижимой универсальности. На практике с помощью систем 5GL этого направления пока удавалось создать небольшие и логически простые приложения, которые при реализации на языках 3-го поколения потребовали бы не более 10 000 исходных строк кода. При попытках разработки сложных программ возникает проблема, типичная для более старых языков — необходимость отладки, что требует от пользователя высокой квалификации.

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

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

3.1. Assembler

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

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

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

3.2. LISP

Лисп (LISP, от англ. LISt Processing language — «язык обработки списков»; современное написание: Lisp) — семейство языков программирования, программы и данные в которых представляются системами линейных списков символов. Лисп был создан Джоном Маккарти для работ по искусственному интеллекту и до сих пор остаётся одним из основных инструментальных средств в данной области. Применяется он и как средство обычного промышленного программирования, от встроенных скриптов до веб-приложений массового использования, хотя популярным его назвать нельзя.Это один из старейших (наряду с Фортраном и Коболом) используемых по сей день высокоуровневых языков программирования, а также первый из сохранившихся в использовании языков, использующих автоматическое управление памятью и сборку мусора.Традиционный Лисп имеет динамическую систему типов. Язык является функциональным, но начиная уже с ранних версий обладает также чертами императивности, к тому же, имея полноценные средства символьной обработки, позволяет реализовать объектно-ориентированность; примером такой реализации является платформа CLOS.Является языком системного программирования для так называемых лисп-машин, производившихся в 1980-е годы, например, фирмой Symbolics[en].Наряду с языком Ада, Лисп прошёл процесс фундаментальной стандартизации для использования в военном деле и промышленности, в результате чего появился диалект Common Lisp, впоследствии стандартизованный ANSI. Его реализации существуют для большинства платформ.

3.3. FORTAN

FORTRAN - это первый язык программирования высокого уровня, который получил признание и стал широко применяться. В своем исходном варианте FORTRAN был разработан фирмой IBM в 1957 г. как язык для работы на компьютерах IBM 704. В это время программисты, привыкшие к использованию языка ассемблера, сомневались в возможности использования языков высокого уровня. Наиболее серьезным аргументом была малая эффективность выполнения кода, получающегося в результате трансляции программ, написанных на этих языках. Первые версии FORTRAN были ориентированы главным образом на обеспечение эффективности выполнения.  Первое стандартное определение языка появилось в 1966 г., а затем в 70-х были внесены существенные изменения, которые привели к появлению FORTRAN 77, и в 90-х - FORTRAN 90.

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

Для объединения подпрограмм, главной программы и набора вспомогательных подпрограмм из стандартных библиотек времени выполнения в единую выполняемую программу используется редактор связей (компоновщик). Завершающим этапом является выполнение программы.

3.4. Basic (Бейсик)

История. BASIC (Beginner's All-purpose Symbolic Instruction Code) был разработан Томасом Куртцем и Джоном Кемени, сотрудниками Дартмутского колледжа, в начале 60-х гг. Целью разработчиков было создать простой в использовании язык программирования, в особенности для студентов не технических специальностей. Для увеличения эффективности вычислений BASIC был реализован как интерактивный язык, причём это было сделано задолго до того, как режим разделения времени стал стандартом системной архитектуры.

BASIC также является ярким  примером внутренне противоречивого языка программирования. Хотя синтаксис языка BASIC очень прост в изучении, однако при попытке написать программу длиной более одной страницы сложность соединения компонентов программы в единое целое делает получающийся код совершенно нечитаемым. Именно по этой причине в следующие версии BASIC были внесены изменения, связанные с допущением более длинных имен переменных, включением в язык имен подпрограмм и увеличением гибкости структур управления. Эти изменения привели к тому, что BASIC стал похож скорее на язык типа Pascal и FORTRAN, чем на свой исходный простой вариант образца 60-х гг.

Краткий обзор языка. Язык с чрезвычайно простыми синтаксисом и семантикой: пронумерованные операторы, имена переменных, состоящие из одной буквы и цифры, простой оператор IF, цикл FOR и оператор GOSUB для вызова подпрограммы.

3.5. PL/1 (ПЛ/1)

История. С самого начала работа велась в условиях нехватки времени. Группа приступила к работе в октябре 1963 г., а срок окончания работ был назначен уже на апрель 1964 г. Участники изо всех сил стремились успеть к сроку. Поклонники Фортрана надеялись увидеть свой любимый язык в качестве основы нового языка. Но комиссия отвергла Фортран: он имел слишком ограниченные возможности, чтобы стать основой универсального языка.

О результате усилий комитета, новом языке программирования, названном ПЛ/1 (РL/1, от Programming Language One — язык программирования, первый), было доложено ассоциации SНАRE в марте.

Некоторые специалисты характеризовали язык как бесформенный, переусложненный и избыточный. Надеясь, что большинство проблем, связанных с новым языком, прояснится в процессе реализации, фирма IBM дала задание своей лаборатории в Харсли (Англия) приступить к работе над компилятором. Сотрудники лаборатории установили, что точное определение этого массивного языка займет не менее 200 страниц. Язык так сильно отредактировали, что разработчики вряд ли узнали бы в получившемся результате свое творение. Уточнения превратили язык в практичный инструмент программирования, который приветствовали многие программисты.

Фирма IBM надеялась, что PL/1 явится кульминацией всего того, что возникло в языках программирования в предыдущие десятилетия. Многие черты Фортрана, Кобола и Алгола действительно нашли отражение в PL/1. Но в то же время критики отмечали, что язык наделен слишком многими качествами, в которых лишь увековечились ошибки прошлого.

3.6. Cobol (Кобол)

История. Архитектура языка COBOL (Common Business Oriented Language)  неоднократно пересматривалась - его первая версия вышла в 1960 г., а более поздние версии - в 1974 и 1984гг. Разработка языка COBOL под руководством Грейс Хоппер была организована Министерством обороны США. Разработчики языка COBOL позаимствовали некоторые идеи из языка FLOWMATIC, созданного в компании Univac, включая использование существительных и глаголов для описания действий и отделение описаний данных от команд. При разработке языка COBOL была поставлена уникальная цель - создать язык программирования, использующий "естественный английский" для описания алгоритмов. Хотя получившийся язык достаточно удобен для чтения, но у него все же есть формальный синтаксис и программирование на нем требует определенных практических навыков.

Краткий обзор языка. В начале 60-х гг. язык COBOL (Common Business Oriented Language) широко использовался для обработки деловой информации на компьютерах.

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

Программы COBOL организованы в виде четырех разделов. Такая организация отвечает двум основным целям разработки языка: отделение машинно-зависимых элементов программы от машинно-независимых, а также отделение описания данных от описания алгоритма.

Строение языка COBOL основано на статической структуре времени выполнения. Не требуется организации управления ресурсами памяти во время выполнения программы, и многие аспекты языка были разработаны для того, чтобы позволить использовать относительно эффективные структуры времени выполнения. Большинство программ читается легко, поскольку в этом языке используется синтаксис, подобный синтаксису английского языка. Для улучшения читаемости программы можно использовать многочисленные необязательные, так называемые шумовые, слова. Однако синтаксис затрудняет написание, потому что даже самая простая программа получается довольно длинной.

3.7. Algol (Алгол)

История. 27 мая 1958 г. в Федеральном техническом университете г. Цюрих состоялась конференция по созданию нового языка программирования. Причиной созыва конференции послужило отсутствие единого языка научного программирования. Через неделю после заседания возник язык, названный Алгол-58. В ходе конференции возникало много споров. Американцы настаивали, чтобы новый язык был близок к уже используемым языкам, а европейцев больше интересовала мощь языка для решения сложных математических задач.

Язык, созданный на этой конференции, многое унаследовал от Фортрана. В 1959 году Джон Бекус ознакомил с Алголом организацию потребителей компьютеров. От фирмы IBM потребовали реализовать Алгол, но она тормозила развитие языка, возлагая основные свои надежды на Фортран. Несмотря на это Бекус продолжал активно участвовать в развитии Алгола. Вернувшись в Цюрих он занялся синтаксисом языка, в результате чего разработал строгую и точную систему определения каждой структуры языка логическим образом.

Последующее уточнение этой работы датским ученым Питером Науром привело к тому, что такой подход стали называть “форма Бекуса-Наура” (БНФ). Язык образца 1958 года являлся эскизом языка Алгол. В январе 1960г. 13 представителей стран Европы и США, включая 7 человек с прошлой конференции, встретились в Париже, чтобы исправить недостатки предыдущей версии языка. Одним из вновь прибывших на эту конференцию был Питер Наур, предложивший вариант измененного Алгола, записанного при помощи БНФ. Группа программистов единогласно приняла решение по языку. Таким образом, появился язык Алгол-60. На него обрушилось много критики в основном со стороны американцев. Программисты Европы сразу приняли Алгол-60. Он позволил их компьютерной индустрии обрести независимость от американской технологии.

3.8. Forth (Форт)

История. Язык Forth был разработан Чарльзом Мором около 1970г. Название этого языка возникло как сокращение до пяти букв первого слова в полном названии программы его разработки "Fourth Generation Programming Language". Этот язык в 70-е гг. служил заменой языку FORTRAN для мини-компьютеров, у которых память являлась дефицитным ресурсом в силу ее дороговизны, а единственное устройство ввода-вывода, как правило, было очень медленным и громоздким печатающим устройством на бумажной ленте. Наличие резидентного транслятора-интерпретатора облегчало разработку программ для подобных встроенных систем. Язык Forth не пользовался большим успехом, но он до сих пор существует в качестве основного "движущего механизма" языка Postscript.

3.9. Pascal (Паскаль)

История. Pascal разрабатывался с 1968 по 1970 г. Николаусом Виртом. Цель заключалась в том, чтобы создать язык, лишенный многочисленных недостатков ALGOL. Pascal был назван в честь французского математика Блеза Паскаля, который еще в 1642 г. изобрел цифровой калькулятор. Появившийся в 1970 г. Pascal начал завоевывать признание. В 1983 г. был разработан американский стандарт языка (IEEE 770/ ANSI X3.97), а вскоре был разработан стандарт ISO (ISO 7185).

С конца 70-х до конца 80-х гг. этот язык доминировал среди языков, используемых на начальном этапе обучения программированию; позже его заменили C и C++, а затем Java.

Краткий обзор языка. Pascal напоминает программы на С. Тем не менее в Pascal предусмотрена возможность описания внутренних локальных процедур и создания вложенной иерархии имен. Программа на Pascal представляет собой единый программный блок, в котором содержатся определения используемых подпрограмм.

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

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

3.10. C (Си)

История. Язык C был разработан в 1972 г. Деннисом Ритчи и Кеном Томпсоном из AT&T Bell Telephone Laboratories. По стилю он похож на ALGOL и Pascal, а также использует свойства языка PL/I. Хотя он и является универсальным языком, компактный синтаксис и эффективность выполнения написанных на нем программ сделали его популярным языком системного программирования.

В конце 60-x AT&T Bell Telephone Laboratories закончила совместный с MIT и GЕ (General Electric) проект по созданию операционной системы Multics; тем не менее, целью Кена Томпсона оставалась разработка удобной операционной системы. Зародилась идея операционной системы UNIX. Система Multics программировалась на языке PL/1, и хотя он достаточно громоздок, было желание написать новую систему, UNIX, именно на языке высокого уровня. Томпсон имел некоторый опыт работы с системным языком BCPL (языком низкого уровня, не имеющим никаких средств динамической поддержки), он разработал новый язык под названием B, который реализовывал минимальное подмножество возможностей языка BCPL для системного программирования (BCPL помещался в 8-килобайтную память компьютера [PDP-7]).

В 1970 г. для проекта UNIX был приобретен компьютер PDP-11 с его огромной памятью 24 Кбайт. В это время небольшое, но растущее сообщество UNIX почувствовало ограничения языка B. Поэтому в B были добавлены такие понятия, как типы, определения структур и некоторые дополнительные операторы, и новый язык стал известен под именем С.

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

Программисты, использующие язык C, - наиболее быстро растущая популяция в программистском мире. Вместе с языками C++ и Java, которые разрабатывались на его основе, он оказывает наибольшее влияние на программирование. Синтаксис и семантика большинства новых языков (таких как Java и Perl) частично основаны на концепциях, характерных для языка С.

3.11. Prolog (Пролог)

История. Разработка языка Prolog началась в 1970 г. Аланом Кулмероэ и Филиппом Русселом. Они хотели создать язык, который мог бы делать логические заключения на основе заданного текста. Название Prolog является сокращением от "PROgramming in LOGic". Этот язык был разработан в Марселе в 1972 г.

Первая реализация языка Prolog с использованием компилятора Вирта ALGOL-W была закончена в 1972 г., а основы современного языка были заложены в 1973г. Использование языка Prolog постепенно распространялось среди тех, кто занимался логическим программированием, в основном благодаря личным контактам, а не через коммерциализацию продукта. В настоящее время существует несколько различных, но довольно похожих между собой версий. Хотя стандарта языка Prolog не существует, однако версия, разработанная в Эдинбургском университете, стала наиболее широко используемым вариантом. Недостаток разработок эффективных приложений Prolog сдерживал его распространение вплоть до 1980 г..

3.12. C++ (Си++)

История. Создание языка C++ обычно приписывают одному конкретному человеку. Бьерн Страуструп на основе языка C разработал столь же эффективный язык, но с некоторыми дополнительными возможностями в области наследования объектов. Для понимания языка C++ желательно, чтобы уже был изучен язык С.

В конце 70-х гг. Страуструп работал над своей докторской диссертацией в компьютерной лаборатории в Кембридже. В то время он использовал язык Simula (произошедший от ALGOL), в котором было введено понятие классов как объектов данных. Страуструп сделал вывод, что классы, определенные в Simula, могут служить эффективным механизмом для определения типов. Поступив на работу в компанию AT&T Bell Telephone Laboratories в США, он немедленно начал разрабатывать расширения для языка C, которые включали в себя некоторые возможности этих самых классов из Simula.

Страуструп руководствовался тем принципом, что все дополнения, привнесенные им в язык C, не должны понизить его эффективность и стать причиной замедления работы программ. Разработанные им расширения языка C, известные под названием C with Classes (C c классами), содержали основную структуру классов, входящую в современный C++. К 1982г. его язык C с классами имел скромный успех в пределах AT&T Bell Telephone Laboratories, и Страуструпу, уподобившемуся гуру, приходилось решать все вопросы, связанные с поддержкой этого языка. В конце концов, эта обязанность стала для него слишком обременительной, и он пришел к выводу, что у него есть только две возможности:

1. Прекратить поддержку языка C с классами.

2. Используя весь накопленный опыт, разработать на основе C с классами новый (более качественный) язык, который имел бы коммерческий успех.

Он выбрал второй вариант и усовершенствовал язык C с классами, добавив новые возможности, а также устранив некоторые несоответствия, имевшиеся в этом языке.

В 1984г. результат его труда получил новое название. Одни называли С с классами новым С, а другие называли стандартный С старым, или простым С. Некоторое время использовалось название С84, а затем Рик Маскитти из Bell Labs предложил название C++. В этом названии используется обозначение ++ операции увеличения на единицу в языке С, которое в данном случае означает "следующий", "последователь". В основном разработка языка C++ была закончена к 1986г., а в июне 1989г. была выпущена вторая версия. В 1989г. в Американском национальном институте стандартов (ANSI) был создан комитет, который к 1994г. выпустил черновой стандарт языка, а через два года - его полный стандарт.

3.13. Ada (Ада)

История. Язык Ада был разработан при финансовой поддержке Министерства обороны США. В 1978 году был объявлен конкурс на язык программирования, который бы отвечал следующим требованиям:

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

Это конкурс завершился появлением в июле 1980г. спецификаций языка Ада. Этот язык был разработан международным коллективом программистов фирмы Honeywell и ее французского филиала Cii-Bull, которым руководил Ж. Ишбиа. Язык был назван в честь Августы Ады Лайвейс, считающейся первой программисткой, дочери английского поэта Байрона.

Окончательная версия спецификаций языка Ада появилась в феврале 1983г. Она послужила основой для нового стандарта Министерства обороны США и стандарта Американского национального института стандартов (ANSI).

Конечная версия международного стандарта ISO 8652:1987 была опубликована в 1987 году. Структура Ады очень похожа на Паскаль. Синтаксис большинства операторов и описаний практически идентичен синтаксису Модулы, хотя она появилась практически в одно время с Адой.

Ада продолжает позиционироваться как хорошее средство для разработки больших программных комплексов. МО США, учтя отсутствие объектов, в соответствии с современными требованиями к технологии разработки программ, выработало новый стандарт языка ISO/les 8652:1985 (E). Он описывает версию языка Ada95. Самое интересное, что эта версия является первой в мире объектно-ориентированной системой программирования, на которую был введен международный стандарт. Впоследствии МО решило использовать “Ada”, как свой внутренний сертифицированный знак.

3.14. Oberon (Оберон)

Язык Оберон был создан в 1987 году Никлаусом Виртом, профессором Института компьютерных систем Федерального технического университета (ETH, Цюрих, Швейцария), автором языков Паскаль и Модула-2.

Оберон отличается от Модулы-2 отсутствием многих необязательных конструкций; добавлены же в язык средства объектно-ориентированного программирования - расширяемые записи. Оберон - это самый простой универсальный язык. При этом, продолжая традицию Паскаля и Модулы-2, он обеспечивает строгий контроль на этапе трансляции, способствуя созданию надежных программ.

В 1992 году были приняты расширения языка Оберон, предложенные Ханспетером Мёссенбёком. Расширенный язык получил название Оберон-2. Основное нововведение - связанные с типами процедуры. Сейчас Оберон-2 является фактическим стандартом языка.

3.15. Java (Джава, Ява)

История. Разработка языка Java началась в 1991 г. Группа программистов (Green Team) из компании Sun Microsystems под руководством Джеймса Гослинга занималась разработкой языка для использования в цифровых бытовых устройствах (Oak). Летом 1992 г. была создана рабочая версия, но группа опередила свое время, так как в тот момент промышленность еще не была готова к использованию этого языка.

В 1993 г. появился web-браузер Mosaic, что привело к распространению Интернета, вышедшего из стен академических лабораторий, по всему миру. Программисты из группы Green Team сразу же осознали, какую роль может сыграть созданный ими язык для расширения возможностей web-браузеров. При помощи браузера Mosaic, в котором использовались адреса URL для навигации в сети и код HTML для отображения web-страниц, пользователь мог отыскивать нужные ему страницы и загружать информацию с удаленных сайтов.

В 1994 г. компания Sun разработала браузер Hotjava, чтобы продемонстрировать возможности содержащегося в нем виртуального компьютера Java. И наконец, 23 мая 1995 г. Марк Андерсен (Marc Anderssen), один из основателей компании Netscape Communication, которая в то время контролировала 70 % рынка в области web-браузеров, объявил о включении виртуального компьютера Java в браузер Netscape. С этого момента язык Java приобрел значительную популярность. Он все чаще заменяет С и C++ в качестве первого языка программирования, изучаемого и используемого студентами.

Краткий обзор языка. Можно сказать, что язык Java является достаточно простым языком: он имеет ту же ясную структуру, что и C++, и при этом лишен той неуклюжести, которая свойственна С. Тем не менее эффективность выполнения программ на Java несколько ниже, так как многие из структур языка нуждаются в проверке во время выполнения программы. К тому же, поскольку программы на Java чаще всего интерпретируются как апплеты в виртуальной машине Java, скорость выполнения программ на Java несколько ниже, чем скорость выполнения программ, написанных на компилируемых языках. Но при оценке Java надо помнить об основной области применения этого языка: поскольку он создавался для web-браузеров, потери в скорости выполнения фактически не влияют на результат. Причина этого в том, что скорость передачи информации по сети и скорость обработки и отображения информации на мониторе компьютера все равно ниже скорости работы компьютера пользователя. Поэтому большая часть времени тратится на ожидание очередной порции информации, запрошенной на сервере .

3.16. C # (Си Шарп)

История. Язык C# является наиболее известной новинкой в области создания языков программирования. В отличие от 60-х годов XX века - периода бурного языкотворчества - в нынешнее время языки создаются крайне редко. За последние 15 лет большое влияние на теорию и практику программирования оказали лишь два языка: Eiffel и Java, ставший популярным во многом благодаря технологии его использования в Интернете и появления такого понятия как виртуальная Java-машина. Чтобы новый язык получил признание, он должен действительно обладать принципиально новыми качествами. Языку C# повезло с родителями. Явившись на свет в недрах Microsoft, будучи наследником C++, он с первых своих шагов получил мощную поддержку. Создателем языка является сотрудник Microsoft Андреас Хейлсберг. C# создавался как язык компонентного программирования, и в этом одно из главных достоинств языка, направленное на возможность повторного использования созданных компонентов. Из других объективных факторов отметим следующие:

  • C# создавался параллельно с каркасом Framework .Net и в полной мере учитывает все его возможности - как FCL, так и CLR;
  • C# является полностью объектно-ориентированным языком, где даже типы, встроенные в язык, представлены классами;
  • C# является мощным объектным языком с возможностями наследования и универсализации;
  • C# является наследником языков C/C++, сохраняя лучшие черты этих популярных языков программирования. Общий с этими языками синтаксис, знакомые операторы языка облегчают переход программистов от С++ к C#;
  • сохранив основные черты своего великого родителя, язык стал проще и надежнее. Простота и надежность, главным образом, связаны с тем, что на C# хотя и допускаются, но не поощряются такие опасные свойства С++ как указатели, адресация, разыменование, адресная арифметика;
  • мощная библиотека каркаса поддерживает удобство построения различных типов приложений на C#, позволяя легко строить Web-службы, другие виды компонентов, достаточно просто сохранять и получать информацию из базы данных и других хранилищ данных;

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

Заключение

Изобретение языка программирования позволило нам общаться с машиной, понимать её. Но если мы обратим внимание на темпы роста и развития новейших технологий в области программирования, то можно предположить, что в ближайшем будущем, человеческие познания в этой сфере, помогут произвести на свет языки, умеющие принимать, обрабатывать и передавать информации в виде мысли, слова, звука или жеста. Так и хочется назвать это детище компьютеризированного будущего: «языки программирования "высочайшего" уровня». Возможно, концепция решения этого вопроса проста, а ближайшее будущее этого проекта уже не за горами.

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

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

Список литературы

  1. Гольденберг В.А. "Введение в программирование" Издательство "Харвест" 1997 г.
  2. Под ред. Курочкина В.М. "Язык компьютера" Издательство "Мир" 1989 г.
  3. Морозов В.П. "Алгоритмические языки" Издательство "Статистика" 1975 г.
  4. Баррон Д. "Введение в языки программирования" Издательство "Мир" 1980 г.
  5. Pl/1 Фролов Г.Д. "Практический курс программирования на языке PL-1" Издательство "Наука" 1983 г.
  6. Кауфман В.Ш. "Языки программирования. Концепции и принципы" Издательство "Радио и связь" 1993 г.
  7. У. Клоксин, К. Меллиш "Программирование на языке Пролог" Издательство "Мир" 1987 г.
  8. Романовского И.В. "Начальный курс программирования на языке Форт" Издательство "Финансы и Статистика" 1990 г.
  9. Фаронов В.В. "Turbo Pascal 7.0" Издательство "Нолидж" 1997 г.
  10. Марченко А.И. "Программирование на языке Obgect Pascal 2.0" Издательство "Юниор" 1998 г.
  11. Под ред. Фьюэра А.Р. "Языки программирования Ада, Си, Паскаль" Издательство "Радио и связь" 1989 г.
  12. Д. Флэнэген "JAVA in a nutsell "Издательство "BHV" 1997 г.
  13. Информатика. Базовый курс. 2-е издание. Под редакцией Симоновича. Издательство “Питер” 2004г.
  14. Ваулин А.С “Языки программирования” 1993 г.
  15. Джозеф Джарратано, Гари Райли Глава 10. Процедурное программирование // «Экспертные системы: принципы разработки и программирование» : Пер. с англ. — М. : 2006. «Вильямс»
  16. Зюзьков В. М. Математическое введение в декларативное программирование: учебное пособие. — Томск: ТГУ, 2003.