![](/stc/img/evkova.png)
Современные языки программирования (История и эволюция языков программирования)
Содержание:
Введение
В 21-ом веке практически невозможно прожить без информационных технологий, данная сфера одна из самых быстро растущих и постоянно развивающихся во всем мире. Мы окружены вещами и устройствами, которые запрограммированы для того, чтобы сделать нашу жизнь легче, быстрее и удобнее. И языки программирования – один из важнейших инструментов для работы специалистов по созданию, поддержанию и развитию всех этих систем. Язык программирования служит двум связанным между собой целям: он дает программисту аппарат для задания действий, которые должны быть выполнены, и формирует концепции, которыми пользуется программист, размышляя о том, что делать. Со времени создания первых программируемых машин человечество придумало уже более двух с половиной тысяч языков программирования и каждый год их число пополняется новыми. Некоторыми языками умеет пользоваться только небольшое число их собственных разработчиков, другие становятся известны миллионам людей. Профессиональные программисты иногда применяют в своей работе более десятка разнообразных языков программирования.
Из всего вышесказанного можно выделить, что актуальность данной работы заключается в высокой степени значения языков программирования как факторов, которые влияют на окончательное качество программной системы.
Объектом исследования являются языки программирования.
Предметом исследования является история и эволюция языков программирования.
Цель исследования – провести ретроспективный анализ языков программирования, а также выявить тенденции их развития.
Задачи исследования:
- Раскрыть основные понятия по теме языков программирования;
- Проследить путь развития языков программирования;
- Рассмотреть особенности и классификацию языков программирования;
- Выявить особенности современных языков программирования;
- Исследовать дальнейшие перспективы развития языков программирования.
Методы исследования. Основным теоретическим основанием исследования являются базовые принципы, научные положения и современные достижения научной дисциплины информационные технологии.
Используются также такие традиционные для курсовых работ научные методы как исторический, сравнительный и описательный.
Глава 1. История и эволюция языков программирования
1.1. Основные понятия и определения
Язык вообще - определенный способ сопоставления объектам Ri, которые рассматриваются как некоторая первичная реальность, объектов Li, называемых именами Ri и рассматриваемых как нечто вторичное, специально созданное для сопоставления объектам Ri [9]. По отношению к своему имени Li объект Ri называют его значением. Совокупность всех объектов Li также часто называют языком.
Отметим две основные функции языка.
- Коммуникативная функция. Это первая функция языка, поскольку он возникает как средство связи.
- Моделирующая функция. Язык используется в качестве средства построения моделей действительности.
Интересное и образное определение языка принадлежит Тузову [8]. Язык – средство описания информационных процессов. Предложения языка и текст – застывшие формы процессов. Они превращаются в активный процесс во время выполнения его человеком или вычислительной машиной.
Язык программирования – формальная знаковая система, предназначенная для записи компьютерных программ. Язык программирования определяет набор лексических, синтаксических и семантических правил, задающих внешний вид программы и действия, которые выполнит исполнитель (компьютер) под ее управлением.
Для повышения выразительности языка необходимо, чтобы язык содержал средства для выражения абстрактных понятий. Это помогает сделать большие программы более простыми для понимания. Поэтому поддержка абстракций является обязательным условием для любого современного языка программирования. При этом базис языка (множество предоставляемых языком возможностей, смысловых конструкций) должен иметь минимальную мощность. К наиболее общим понятиям, которыми оперирует программист при использовании конкретного языка программирования, относятся понятия программы и виртуальной машины. Программа должна удовлетворять требованиям (спецификациям) конкретного языка программирования и служит контейнером для хранения последовательности действий и множества данных. Виртуальная машина выступает в роли интерпретатора основных понятий, используемых в языке программирования и является средой существования программы.
Также, как и в случае языка человеческого, призванного служить инструментом для взаимосвязи и коммуникации людей, у языков программирования есть свои задачи и функции. Важно понимать, что конечная цель программирования – не создание программ самих по себе, а предоставление программных услуг. Этот принцип означает, что программы должны быть «дружественными» по отношению к пользователю, в частности, надежными, робастными и «заботливыми». Первое означает, что в программе должно быть мало ошибок, второе – что она должна сохранять работоспособность в неблагополучных условиях эксплуатации, а третье – что она должна объяснять свои действия, а также ошибки пользователя [5].
Создатели языков по–разному толкуют понятие язык программирования. К наиболее распространенным утверждениям, признаваемым большинством разработчиков, относятся следующие:
– Функция: язык программирования предназначен для написания компьютерных программ, которые применяются для передачи компьютеру инструкций по выполнению того или иного вычислительного процесса и организации управления отдельными процессами.
– Задача: язык программирования отличается от естественных языков тем, что предназначен для передачи команд и данных от человека компьютеру, в то время как естественные языки используются для общения людей между собой. В принципе, можно обобщить определение «языков программирования» – это способ передачи команд, приказов, четкого руководства к действию, тогда как человеческие языки служат только для обмена информацией.
– Исполнение: язык программирования может использовать специальные конструкции для определения и манипуляции структурами данных и управления процессом вычислений [7].
Язык программирования чаще всего представлен в виде набора спецификаций, определяющих его синтаксис и семантику. Для многих языков программирования созданы международные стандарты. Специальные организации проводят регулярное обновление спецификаций и формальных определений соответствующего языка, а также продолжают разработку и модернизацию языков программирования.
1.2. Парадигмы языков программирования
Парадигма (от греч. παράδειγμα, «пример, модель, образец») – набор теорий, стандартов и методов, которые совместно представляют собой способ организации научного знания.
Парадигма программирования – это совокупность идей и понятий, определяющая стиль написания программ.
Парадигма, в первую очередь, определяется базовой программной единицей и самим принципом достижения модульности программы. В качестве этой единицы выступают определение, действие, правило, диаграмма переходов и др. сущности. Парадигма программирования определяет то, в каких терминах программист описывает логику программы. Например, как последовательность действий, в виде выражения и множества определений функций, рассматривать программу как набор взаимодействующих объектов.
Важно отметить, что парадигма программирования не определяется однозначно языком программирования – многие современные языки программирования являются мультипарадигменными, то есть допускают использование различных парадигм.
На сегодняшний день имеются четыре основные парадигмы языков программирования, отражающие вычислительные модели, с помощью которых описывается большинство существующих методов программирования:
– Императивная;
– Функциональная;
– Декларативная;
– Объектно-ориентированная [17].
Императивные языки программирования – Бейсик, Паскаль, Си и прочие (включая объектно-ориентированные).
Императивное программирование наиболее популярное. Характеризуются последовательным, пошаговым изменением состояния вычислителя. При этом управление изменениями полностью определено и полностью контролируемо.
Одна из характерных черт императивного программирования – наличие переменных с операцией "разрушающего присвоения". То есть, была переменная А, было у нее значение Х. Алгоритм предписывает на очередном шаге присвоить переменной А значение Y. То значение, которое было у А, будет "навсегда забыто". Если задача описывается последовательным исполнением операций ("открыть кран, набрать воды"), то такие задачи идеальные кандидаты на императивную реализацию.
Функциональные языки программирования – LISP, ISWIM (If you See What I Mean), ML (Meta Language ), Miranda.
В языках функционального программирования основными конструктивными элементами являются функции. Тексты программ на функциональных языках программирования описывают «как решить задачу», но не предписывают последовательность действий для решения.
Практически все задачи, связанные с искусственным интеллектом, попадают в эту категорию. Среди них следует отметить задачи распознавания образов, общение с пользователем на естественном языке, реализацию экспертных систем, автоматизированное доказательство теорем, символьные вычисления.
Декларативная модель – это парадигма программирования, в которых операторы представляют собой объявления или высказывания в символьной логике. Типичным примером таких языков являются языки логического программирования. Логическое программирование основано на теории и аппарате математической логики с использованием математических принципов резолюций [14].
Логические языки программирования – Prolog.
Объектно-ориентированные подход к программированию – это подход к разработке программного обеспечения, основанный на объектах, а не на процедурах (Java, С, Visual Basic).
При процедурном программировании программа разбивается на части в соответствии с алгоритмом: каждая часть (подпрограмма, функция, процедура) является составной частью алгоритма. При объектно-ориентированном программировании программа строится как совокупность взаимодействующих объектов. Любой объект принадлежит одному или нескольким классам, которые в свою очередь определяют, описывают поведение объекта.
1.3. История и поколения языков программирования
С глубокой древности известны попытки создать устройства, ускоряющие и облегчающие процесс вычислений. Еще древние греки и римляне применяли приспособление, подобное счетам, — абак. Такие устройства были известны и в странах Древнего Востока. В XVII в. немецкие ученые В. Шиккард (1623), Г. Лейбниц (1673) и французский ученый Б. Паскаль (1642) создали механические вычислительные устройства — предшественники всем известного арифмометра. Вычислительные машины совершенствовались в течение нескольких веков. Но при этом не применялось понятие «программа и программирование».
На начальном этапе составлением программ для ЭВМ занимались сами изготовители вычислительных машин. Постепенно, с развитием техники, этот процесс из рутинной работы превратился в интеллектуальную деятельность, сравнимую с искусством, т. к. трудоемкое, ручное составление программ было подобно решению сложных комбинационных задач, которое требовало научных знаний и мастерства.
С 1970—1980-х гг. программирование как новая научная дисциплина занималась методами разработки программных продуктов. Оно включает комплекс вопросов, связанных с написанием спецификаций, проектированием, кодированием, тестированием и функционированием программ для ЭВМ.
К сегодняшнему дню насчитывают шесть поколений языков программирования. Каждое из последующих поколений по своей функциональной мощности качественно отличается от предыдущего [19].
- Первое поколение: Машинные языки.
В первое поколение входят языки, созданные в начале 50-х годов, когда первые компьютеры только появились на свет. Это был первый язык ассемблера, созданный по принципу «одна инструкция — одна строка». ЯП первого поколения представляли собой набор машинных команд в двоичном (бинарном) или восьмеричном формате, который определялся архитектурой конкретной ЭВМ. Каждый тип ЭВМ имел свой ЯП, программы на котором были пригодны только для данного типа ЭВМ. От программиста при этом требовалось хорошее знание не только машинного языка, но и архитектуры ЭВМ.
- Второе поколение: Ассемблеры. Расцвет второго поколения языков программирования пришелся на конец 50-х -начало 60-х годов. Тогда был разработан символический ассемблер, в котором появилось понятие переменной. Он стал первым полноценным языком программирования. Благодаря его возникновению заметно возросли скорость разработки и надежность программ. Языки ассемблерного типа (ассемблеры, макроассемблеры), позволили вместо двоичных и других форматов машинных команд использовать их символьные обозначения (имена). Являясь существенным шагом вперед, ассемблерные языки все еще оставались машинно-зависимыми, а программист все также должен был быть хорошо знаком с организацией и функционированием аппаратной среды конкретного типа ЭВМ. При этом ассемблерные программы все так же затруднительны для чтения, трудоемки при отладке и требуют больших усилий для переноса на другие типы ЭВМ. Однако и сейчас ассемблерные языки используются при необходимости разработки высокоэффективного программного обеспечения (минимального по объему и с максимальной производительностью).
- Третье поколение: Процедурные языки. Появились в начале 60-х годов XX века. К этому поколению относят универсальные языки высокого уровня, с помощью которых можно решать задачи из любых областей (например, Algol-60). Третье поколение ЯП начинается с появления в 1956 г. первого языка высокого уровня — Fortran. Первоначально Fortran обладал весьма ограниченными средствами обеспечения работы с символьной информацией и с системой ввода-вывода. Однако постоянное развитие языка сделало его одним из самых распространенных ЯВУ.
Вскоре после языка Fortran появились такие ныне широко известные языки, как Algol, Cobol, Basic, PL/1, Pascal, APL, ADA, C, Forth, Lisp, и др. В настоящее время насчитывается свыше 2000 различных языков высокого уровня.
- Четвертое поколение: Языки поддержки сложных структур данных (например, SQL). Появились в конце 60-х годов XX века.
- Пятое поколение: Языки искусственного интеллекта (например, Prolog). Появились в начале 70-х годов XX века. Носят ярко выраженный непроцедурный характер, определяемый тем, что программы на таких языках описывают только что, а не как надо сделать. Типичными примерами непроцедурных языков являются языки, используемые для задач искусственного интеллекта (например, Prolog, Langin). Так как непроцедурные языки имеют минимальное число синтаксических правил, они значительно более пригодны для применения непрофессионалами в области программирования.
- Шестое поколение: Языки нейронных сетей (самообучающиеся языки). Исследовательские работы в этой области начались в середине 80-х годов XX века.
Языки, которые считаются первыми:
- 1945 г. - Конрадом Цузе (Conrad Zuse) разработан первый язык программирования Plankalkuel;
- 1949 г. - разработанный Джоном Мочли (John Mauchly) язык Short Code американцы считают первым языком программирования высокого уровня.
Выводы к 1 главе.
В 1 главе мы рассмотрели термины, использующиеся при описании языков программирования, их функции и задачи. Выделили и описали парадигмы для понимания моделей и методов программирования. Также дали ретроспективу возникновения и развития языков программирования, начиная с глубокой древности и до наших дней.
Глава 2. Классификация языков программирования
2.1. Языки программирования низкого и высокого уровня
Языки программирования классифицируются по различным критериям (рис. 1).
Рисунок 1. Классификация языков программирования
Разные авторы разбивают языки либо на три уровня (машинные, машинно-ориентированные и машинно-независимые языки), либо на два уровня (языки программирования низкого уровня, языки программирования высокого уровня) [3]. В случае деления языков программирования на три уровня, низшим уровнем будет являться машинный код – набор команд, выполняемых конкретным процессором и разработанных специально для него. Обычно является последовательностью шестнадцатеричных символов. Вывод строки «Hello, World!» для процессора архитектуры x86 выглядит так: BB 11 01 B9 0D 00 B4 0E 8A 07 43 CD 10 E2 F9 CD 20 48 65 6C 6C 6F 2C 20 57 6F 72 6C 64 21. Средним уровнем будут являться машинно-ориентированные языки, то есть языки, призванные управлять непосредственно командами процессора, но более доступным для человеческого восприятия языком. Примером являются языки ассемблера. Язык ассемблера, по сути, представляет каждую команду машинного кода с помощью удобных для восприятия человеком символических команд – мнемокодов. Как правило, язык ассемблера использует особенности конкретного семейства процессоров. Высшим же уровнем будут считаться машинно-независимые языки. Они разработаны для удобства восприятия, быстроты понимания и работы с ними. Характерная черта этих языков программирования – абстракция, то есть введение смысловых конструкций, кратко описывающих данные и операции над ними, описания которых в машинно-ориентированных языках очень длинны и сложны для понимания. Также они были призваны обеспечить платформенную независимость сути алгоритмов. С их появлением зависимость от платформы перекладывается на трансляторы, «переводящие» текст, написанный на языке высокого уровня, в элементарные машинные команды. Примерами языков программирования высокого уровня являются C++, C#, PHP, Perl, Java и многие другие.
В современной классификации языков программирования по уровням всё чаще используют деление на два уровня: языки высокого и низкого уровней. Чем ближе язык к естественному, тем больше вероятность того, что он будет классифицирован как язык высокого уровня. И наоборот, если язык ближе к машинным инструкциям, его называют языком низкого уровня.
Языки низкого уровня – языки программирования предназначенные для определенного типа компьютера и отражающие его внутренний машинный код – машинно-ориентированные языки; языки высокого уровня – это языки программирования, предназначенные для удовлетворения требований программиста; они не зависят от внутренних машинных кодов компьютера любого типа. Языки высокого уровня используют для решения проблем и поэтому их часто называют проблемно-ориентированными языками.
Язык ассемблера является символическим представлением машинного языка. Это упрощает процесс программирования по сравнению с программированием в машинном коде. Некоторые задачи, такие как обмен сложными структурами с нестандартными устройствами обработки данных, не могут быть решены с помощью языков программирования более высокого уровня. Сборщик может это сделать. В основном, язык ассемблера — это машинный язык. А программист, реализующий задачу на языке высокого уровня с использованием языка ассемблера, может определить, имеет ли смысл с точки зрения использования компьютера решать эту задачу.
2.1.1 Процедурно-ориентированные
К первому классу языков, который используется для записи процедур или алгоритмов обработки информации относят:
а) язык Фортран (Fortran). Является одним из первых языков программирования высокого уровня. К его основным достоинствам относится наличие огромного числа математических библиотек, поддержка работы с целыми, вещественными и комплексными числами высокой точности [4], встроенных средств обработки массивов. К недостаткам можно отнести отсутствие средств отладки и анализа поведения программы, сложность понимания исходного кода. По сути, на данный момент Фортран является узкоспециализированным языком, применяемым для научных и инженерных вычислений.
б) язык Бейсик (Basic). Был разработан в 1964 г. в качестве языка для обучения программированию. Основными достоинствами этого языка являются, простой синтаксис, который позволяет в кратчайшие сроки освоить этот язык программирования, простота реализации графического интерфейса, возможность использования WinAPI функций, что значительно расширяет возможности языка. Одним из основных недостатков языка является то, что он поддерживает только операционные системы семейства Windows, DOS и Mac OS X, что значительно сужает сферы его применения. Также к недостаткам можно отнести низкую скорость работы и отсутствие механизма наследования реализации объектов.
в) язык Си (С) был создан в 1969-1973 годах в качестве языка системного программирования и первоначально предназначался для написания ОС UNIX. В 1980-е гг. язык С был дополнен инструментами объектно-ориентированного программирования и на основе него был создан язык C++. Одним из главных достоинств является кроссплатформенность, а также минимальные аппаратные требования для запуска скомпилированных программ, широкий набор средств для реализации как прикладных, так и системных задач. К недостаткам языка можно отнести отсутствие четкой стандартизации. В ходе исторического развития языка его элементы зачастую заимствовались из других языков, вне зависимости от наличия других элементов. Это привело к наличию дублирующих и иногда противоречащих друг другу элементов. Данные аспекты привели к тому, что язык стал чрезвычайно сложным для восприятия.
г) язык Паскаль (Pascal). Был создан математиком Н. Виртом специально для обучения программированию. Однако со временем стал широко применяться для разработки программных средств в профессиональном программировании. Самая первая версия была создана в 1968 году профессором кафедры вычислительной техники Швейцарского федерального института технологии Никласом Виртом [13]. Основной целью, при создании нового языка, является его простота, с сохранением всех достоинств уже имеющихся языков высокого уровня программирования. Популярность созданного языка стала столь высокой, что уже к 1980 году насчитывалось более восьми десятков его трансляторов. В начале 80-х годов язык программирования Паскаль еще более усилил свои позиции после создания трансляторов Turbo-Pascal для персональных компьютеров. С этого момента язык смело вышел за рамки узкого использования программистами-профессионалами. Он начал использоваться как рабочий инструмент пользователей и как средство обучения языков программирования. Одним из главных достоинств языка Паскаль является четкая структуризация, удобная среда разработки и отладки, позволяющая пользователю обнаружить логические и синтаксические ошибки в программе. Также к достоинствам можно отнести высокую скорость компиляции программ, возможность использования вставок языка Ассемблер. В отличие от языка С (С++) в при использовании Паскаль сведены к минимуму возможные синтаксические неоднозначности, синтаксис языка является интуитивно понятным и доступным, поскольку, как уже было отмечено выше, язык изначально разрабатывался для обучения студентов программированию. К недостаткам первоначально разработанного компилятора можно бы отнести ряд ограничений: невозможность передачи функциям массивов переменной длины, ограниченная библиотека ввода-вывода, отсутствие средств для подключения функций написанных на других языках и раздельной компиляции. Несмотря на долгую историю, Паскаль является динамично развивающимся языком программирования высокого уровня. Современные версии компилятора ликвидировали большинство перечисленных выше недостатков.
2.1.2 Проблемно-ориентированные
Основным достоинством проблемно-ориентированных языков программирования является минимизация трудозатрат программиста при решении задач принадлежащих некоторому четко выделяемому классу. К проблемно-ориентированным относят следующие языки программирования:
а) язык Лисп. Считается вторым после Фортрана старейшим высокоуровневым языком программирования. Данный язык наиболее часто применяется при разработке экспертных систем и систем аналитических вычислений. Существуют современные версии этого языка, которые активно применяются при разработке новейших web-технологий. Также модификации данного языка используются в качестве встроенных языков программирования в САПР. Примером может послужить AutoLISP - язык для разработки надстроек в продуктах компании AutoDesk.
б) язык Пролог. Используется для реализации систем искусственного интеллекта, а также и интеллектуальных систем баз данных. Написание программ на языке Пролог существенно отличается от использования других языков программирования. Программа на Прологе не является реализацией некоторого алгоритма, а представляет собой запись на языке формальной логики. Таким образом, данный язык относится к описательным языкам программирования. Таким образом, сферой применения данного языка является решение логических задач. Для создания вычислительных, графически задач, реализации пользовательского интерфейса данный язык не предназначен.
2.1.3 Объектно-ориентированные
Большинство объектно-ориентированных языков являются версиями процедурно-ориентированных и проблемно-ориентированных. В настоящий момент наиболее активно используются и развиваются следующие среды программирования:
а) Delphi (Lazarus некоммерческая - версия для ОС семейства Linux) - основана на Object Pascal;
б) C++, С# (~ C);
в) Visual Basic (~ Basic);
г) Visual Fortran (~ Fortran);
д) Prolog++ (~ Prolog).
2.2. Современные языки и системы программирования
Basic. Как знаменитые гамбургеры, бейсбол и баскетбол, Бейсик - это продукт Новой Англии [12]. Созданный в 1964г., как язык обучения программированию. Бейсик является общепринятым акронимом от"Beginner's All-purpose Symbolic Insruction Code" (BASIC) - Многоцелевой Символический Обучающий Код для Начинающих". Вскоре как обучаемые, так и авторы программ обнаружили, что Бейсик может делать практически все то, что делает скучный неуклюжий Фортран. А так как Бейсику было легко обучиться и легко с ним работать, программы на нем писались обычно быстрее, чем на Фортране. Бейсик был также доступен на персональных компьютерах, обычно он встроен в ПЗУ. Так Бейсик завоевал популярность. Интересно, что спустя 20 лет после изобретения Бейсика, он и сегодня самый простой для освоения из десятков языков общецелевого программирования, имеющихся в распоряжении любителей программирования. Более того, он прекрасно справляется с работой. Бейсик считается деловым языком, снабженным мощными средствами решения специфических задач, которые обычно большинство пользователей решают при помощи небольших компьютеров, а именно: работая с файлами и выводя текстовое и графическое изображение на экране дисплея. Несмотря на отдельные недостатки Бейсика, никто не будет отрицать, что Кемени и Куртс достигли основной цели: сделать программирование доступнее для большего числа людей. Исторически Бейсик обычно реализовался как интерпретатор (знакомым изомером является сам интерпретаторный Бейсик). Причинами перехода от любительского уровня к профессиональному являются многочисленные расширения классической версии языка: возможность отключения нумерации строк, многостроковые структурированные программные конструкции, структуры типа "запись", поименованные подпрограммы с параметрами и локальные переменные. Более того, с появлением транслятора QuickBasic фирмы Microsoft разработчики получили возможность строить на Бейсике приложения из раздельно откомпилированных модулей, некоторые из которых могут быть написаны на других языках. Теперь, как и в случае других ведущих языков программирования, разработчик имеет выбор из нескольких промышленных библиотек подпрограмм, которые содержат готовые решения для распространенных задач программирования.
Pascal. В настоящее время этот язык имеет более широкую сферу применения, чем предусматривалось при его создании. Целью работы Вирта было создание языка, который:
- Строился бы на небольшом количестве базовых понятий;
- Имел бы простой синтаксис;
- Допускал бы перевод программ в машинный код простым компилятором.
Все эти качества сделали язык очень популярным и удобным для применения в школе. Паскаль – язык профессионального программирования, который назван в честь французского математика и философа Блеза Паскаля (1623–1662) и разработан в 1968–1971 гг. Николаусом Виртом, для обучения студентов методам разработки программ, таким как "программирование сверху вниз", "структурное программирование" и т. д. Вирту не понравился не один из существующих на тот момент языков, и в 1968 году он приступил к разработке своего собственного. Первая версия языка была создана для компьютера CDC 6000. Благодаря своей четкости, логичности и другим особенностям Паскаль надолго занял свою нишу, являясь прекрасным языком для обучения программированию. Паскаль использовался и для разработки серьезных программ- приложений. Шутили, что Вирт разработал игрушку, но многие отнеслись к ней слишком серьезно. Впоследствии появились различные версии языка и его расширения.
Наиболее известным расширением стал пакет Турбо Паскаль фирмы Borland, появившийся в 1983 году и сразу ставший событием в мире компьютерных технологий [10]. Турбо Паскаль – это система программирования, созданная для повышения качества и скорости разработки программ (80-е гг.). Слово Турбо в названии системы программирования – это отражение торговой марки фирмы-разработчика Borland International (США). Систему программирования Турбо Паскаль называют интегрированной (integration – объединение отдельных элементов в единое целое) средой программирования, т.к. она включает в себя редактор, компилятор, отладчик, имеет сервисные возможности. Первое упоминание о нем содержалось в рекламе опубликованной в журнале Byte, а сам пакет предназначен для операционной системы CP/M. В начале 1984 года он был перенесен в среду MS-DOS и приобрел огромную популярность. С тех пор появилось несколько версий Турбо Паскаля, последняя- седьмая.
Delphi. Появление Delphi не могло пройти незамеченным среди многочисленных пользователей компьютера [16]. Оценки экспертов, изучающих возможности этого нового продукта фирмы Borland, обычно окрашены в восторженные тона. Основное достоинство Delphi состоит в том, что здесь реализованы идеи визуального программирования. Среда визуального программирования превращает процесс создания программы в приятное и легко понимаемое конструирование приложения из большого набора графических и структурных примитивов. Система Delphi позволяет решать множество задач, в частности:
– Создавать законченные приложения для Windows самой различной направленности: от чисто вычислительных и логических, до графических и мультимедиа.
– Быстро создавать (даже начинающим программистам) профессионально выглядящий оконный интерфейс для любых приложений.
– Создавать мощные системы работы с локальными и удаленными базами данных.
– Создавать справочные системы (файлы .hlp) для своих приложений и мн. др.
Delphi – чрезвычайно быстро развивающаяся система. Первая версия – Delphi 1.0 была выпущена в феврале 1995 г. А затем новые версии выпускались ежегодно. Большинство версий Delphi выпускается в нескольких вариантах: Standart – стандартном, Professional – профессиональном, Client/Server – клиент/сервер, Enterprise – разработка баз данных предметных областей. Различаются варианты в основном разным уровнем доступа к системам управления базами данных. Последние варианты - Client/Server и Enterprise, в этом отношении наиболее мощные. Delphi - это комбинация нескольких важнейших технологий:
- Высокопроизводительный компилятор в машинный код.
- Объектно-ориентированная модель компонент.
- Визуальное (а, следовательно, и скоростное) построение приложений из программных прототипов.
- Масштабируемые средства для построения баз данных.
Fortran. Одним из первых и наиболее удачных компиляторов стал язык Фортран, разработанный фирмой IBM. Профессор Дж. Букс и группа американских специалистов в области программирования в 1954 году опубликовало первое сообщение о языке. Дословно, название языка FORmulaeTRANslation – преобразование формул. Среди причин долголетия Фортрана (а он один из самых распространенных языков в мире), можно отметить простую структуру, как самого Фортрана, так и предназначенных для него трансляторов [6]. Программа на Фортране записывается в последовательности предложений или операторов (описание некоего преобразования информации), и оформляется по определенным стандартам. Эти стандарты накладывают ограничения, в частности, на форму записи и расположения частей оператора в строке бланка для записи операторов. Программа, записанная на Фортране, представляет собой один или несколько сегментов (подпрограмм) из операторов. Сегмент, управляющий работой всей программы в целом, называется основной программой. Фортран был задуман для использования в сфере научных и инженерно-технических вычислений. Однако на этом языке легко описываются задачи с разветвленной логикой (моделирование производственных процессов, решение игровых ситуаций и т.д.), некоторые экономические задачи и особенно задачи редактирования (составление таблиц, сводок, ведомостей и т.д.). Модификация языка Фортран, появившиеся в 1958 году, получила название Фортран II и содержала понятие подпрограммы и общих переменных для обеспечения связи между сегментами. К 1962 году относится появление языка, известного под именем Фортран IV и ставшего наиболее употребительным в настоящее время. К этому же времени относится и начало деятельности комиссии при Американской Ассоциации Стандартов (ASA), которая выработала к 1966 году два стандарта – языки Фортран и базисный (основной) Фортран (BasicFORTRAN). Эти языки приблизительно соответствуют модификациям IV и II, однако базисный Фортран является подмножеством Фортрана, в то время, как Фортран II таковым для Фортрана IV не является. Язык Фортран до сих пор продолжает развиваться и совершенствоваться, оказывая влияние на создание и развитие других языков. Например, Фортран заложен в основу Basic – диалогового языка, очень популярного для решения небольших задач, превосходного языка для обучения навыкам использования алгоритмических языков в практике программирования.
С и С++. Язык "C" является универсальным языком программирования. Он тесно связан с операционной системой "UNIX" , так как был развит на этой системе и так как "UNIX" и ее программное обеспечение написано на "C" [15]. Сам язык , однако, не связан с какой-либо одной операционной системой или машиной; и хотя его называют языком системного программирования, так как он удобен для написания операционных систем, он с равным успехом использовался при написании больших вычислительных программ, программ для обработки текстов и баз данных. Язык "C" - это язык относительно "низкогоуровня". В такой характеристике нет ничего оскорбительного; это просто означает, что "C" имеет дело с объектами того же вида, что и большинство ЭВМ, а именно, с символами, числами и адресами. Они могут объединяться и пересылаться посредством обычных арифметических и логических операций, осуществляемых реальными ЭВМ. В языке "C" отсутствуют операции, имеющие дело непосредственно с составными объектами, такими как строки символов, множества, списки или с массивами, рассматриваемыми как целое. Здесь, например, нет никакого аналога операциям PL/1, оперирующим с целыми массивами и строками. Язык не предоставляет никаких других возможностей распределения памяти, кроме статического определения и механизма стеков, обеспечиваемого локальными переменных функций; здесь нет ни "куч" (HEAP), ни "сборки мусора", как это предусматривается в АЛГОЛЕ-68. Наконец, сам по себе "C" не обеспечивает никаких возможностей ввода-вывода: здесь нет операторов READ или WRITE и никаких встроенных методов доступа к файлам. Все эти механизмы высокого уровня должны обеспечиваться явно вызываемыми функциями. Аналогично, язык "C" предлагает только простые, последовательные конструкции потоков управления: проверки, циклы, группирование и подпрограммы, но не мультипрограммирование, параллельные операции, синхронизацию или сопрограммы. Хотя отсутствие некоторых из этих средств может выглядеть как удручающая неполноценность ("выходит, что я должен обращаться к функции, чтобы сравнить две строки символов?!"), но удержание языка в скромных размерах дает реальные преимущества. Так как "C" относительно мал, он не требует много места для своего описания и может быть быстро выучен. Компилятор с "C" может быть простым и компактным. Кроме того, компиляторы легко пишутся; при использовании современной технологии можно ожидать написания компилятора для новой ЭВМ за пару месяцев и при этом окажется, что 80 процентов программы нового компилятора будет общей с программой для уже существующих компиляторов. Это обеспечивает высокую степень мобильности языка. Поскольку типы данных и структуры управления, имеющиеся в "C", непосредственно поддерживаются большинством существующих ЭВМ, библиотека, необходимая во время прогона изолированных программ, оказывается очень маленькой. На PDP -11, например, она содержит только программы для 32-битового умножения и деления и для выполнения программ ввода и вывода последовательностей. Конечно, каждая реализация обеспечивает исчерпывающую, совместимую библиотеку функций для выполнения операций ввода-вывода, обработки строк и распределения памяти, но так как обращение к ним осуществляется только явно, можно , если необходимо, избежать их вызова; эти функции могут быть компактно написаны на самом "C".
Java. Сегодня Всемирная сеть - это среда информационного обмена для миллионов людей. Они размещают текст, видео, звук, и информацию, и все более и более, они усложняют свои страницы, делая их интерактивными в сети. JavaScript - это новый язык программирования, используемый в составе страниц HTML для увеличения функциональности и возможностей взаимодействия с пользователями. Он был разработан фирмой Netscape в сотруднечестве с Sun Microsystems на базе языка Sun's Java [11].С помощью JavaScript на Web-странице можно сделать то, что невозможно сделать стандартными тегами HTML. Скрипты выполняются в результате наступления каких-либо событий, инициированных действиями пользователя. Создание Web-документов, включающих программы на JavaScript, требует наличие текстового редактора и подходящего браузера. Некоторые просмоторщики включают в себе встроенные редакторы, поэтому необходимость во внешнем редакторе отпадает. Несмотря на отсутствие прямой связи с языком Java, JavaScript может обращаться к внешним свойствам и методам Java- апплетов, встроенных в страницу HTML. Разница сводится к тому, что апплеты существуют вне браузера, в то время как программы JavaScript могут работать только внутри браузера. На первой взгляд кажется, что найти информацию по JavaScript несложно. Сначала создается впечатление, что ее можно увидеть везде: на сервере Natscape, в виде электронных руководств и примеров, во многих других местах. Тем не менее разыскать информацию об объектах, операторах, цветах и всем прочем в одном источнике, чтобы она была всегда под рукой, трудно.
2.3. Проблемы и перспективы развития
Через пять лет у нас будет один суперязык программирования, только мы не можем установить начало этого пятилетнего периода.
Алан Дж. Перлис
Тезисно сформулируем основные проблемы и перспективы языков программирования:
Во-первых, следует отметить, что новые языки программирования будут появляться и дальше. Рано или поздно у нас возникнут кардинально новые мысли о программировании и, согласно гипотезе Хурфа-Сэпира, они потребуют новых языков.
Во-вторых, следует обратить внимание на грамотное воплощение идей, заложенных в языках. Идея может быть хорошей, даже отличной, но ее решение и воплощение в конкретном языке - неудачным и безобразным.
Некоторые выводы о распространении новых языков можно сделать на основе языка Java:
- Продвижение языка Java происходило за счет мощной рекламы, а не из-за достоинств самого языка.
- На широкое распространение в наше время могут претендовать только те языки, которые поддержаны крупными фирмами, а не те, которые являются лучшими.
- Время распространения и становления языка программирования (для получивших известность языков) составляет в среднем от 3 до 10 лет. В случае Java язык получил широкое распространение за один год.
В третьих, в условиях застоя в развитии языков программирования есть смысл тщательно проанализировать все полезные накопленные за это время идеи. Существуют попытки создания единой семантики современных языков программирования, в каком-то смысле опять приводящие к идее "универсального" языка [1].
В четвертых, Интернет требует языковых средств и подходов, обеспечивающих правильное взаимодействие большого числа независимо разработанных программ.
В пятых, использование структур и данных, которые раньше бы считались неприемлемыми из-за их неэффективности, сейчас вполне допустимо и может привести к новой организации языков.
Общий, несколько обнадеживающий итог звучит так. Ряд известных фирм и компаний (например, Microsoft, Sun Microsystems и т. п.) постепенно приходит к идеям, заложенным несколько десятков лет назад командой под руководством Никлауса Вирта.
Выводы ко 2 главе
В главе рассмотрены основные и самые популярные классификации языков программирования и более подробно описаны некоторые их них. На данный момент, действительно, нет более-менее чёткой классификации языков программирования, охватывающей все признаки и рассказывающей о «переплетениях» различных классификаций между собой. Также выделены основные проблемы и перспективы развития в ближайшем будущем.
Заключение
В заключении хочется отметить, что языки программирования — это не просто инструментальное средство; это тот «материал», из которого создается программное обеспечение, то, что мы видим на наших экранах большую часть дня. Язык программирования — один из наиболее, а не наименее важных факторов, которые влияют на окончательное качество программной системы. К сожалению, слишком у многих программистов нет достаточных языковых навыков. Они страстно любят свой «родной» язык программирования и не способны ни проанализировать и сравнить конструкции языка, ни оценить преимущества и недостатки современных языков и языковых понятий.
Изобретение языка программирования высшего уровня позволило нам общаться с машиной, понимать её. Развилась наука программирования с того времени, как появились языки программирования, а ведь язык программирования высшего уровня, судя по всему ещё младенец. Но если обратить внимание на темпы роста и развития новейших технологий в области программирования, то можно предположить, что в ближайшем будущем, человеческие познания в этой сфере, помогут произвести на свет языки, умеющие принимать, обрабатывать и передавать информации в виде мысли, слова, звука или жеста. Возможно, они будут называться «языками программирования "высочайшего" уровня». Возможно, концепция решения этого вопроса проста, а ближайшее будущее этого проекта уже не за горами.
Каждый язык обладает своими уникальными способностями и преимуществами над другими языками, но реальность такова, что требуемый функционал в полном объеме не содержится ни в одном языке. В таком случае при решении задачи используют связку из нескольких языков, которые в совокупности удовлетворяют предложенным требованиям. Такая межъязыковая связь может быть реализована с использованием нескольких различных техник.
Часто можно увидеть в программном коде драйверов на C вставки, сделанные на ассемблере. Так происходит потому, что некоторые места в программе являются критичными по времени выполнения или код требует прямого взаимодействия с регистрами процессора.
Другой вариант использования нескольких языков, это написание различных модулей. При этом модули компилируются под определенную систему и используются в программе связанно. Этот подход можно встретить в интерпретаторе языка python, в котором некоторые модули написаны непосредственно на C, а некоторые - на промежуточном языке для PVM. Такой подход используется если среда разработки не поддерживает вставки на других языках.
Список использованной литературы
1. Андреев А. / Эволюция современных языков программирования // Мир ПК. – 2001. – № 3
2. Бен-Ари М. Языки программирования. Практический сравнительный анализ - М.: Мир, 2000.
3. Быканов Н.П. Классификация языков программирования // Международный журнал гуманитарных и естественных наук. 2016. №1.
4. Вирт Н. Алгоритмы и структуры данных. - М.: Мир, 1989
5. Кауфман В. Ш. Языки программирования. Концепции и принципы - 2-е изд. - Москва : ДМК Пресс, 2010.
6. Пратт Т. Языки программирования: разработка и реализация, 1979 г.
7. Себеста Р. Основные концепции языков программирования = Concepts of Programming Languages / Пер. с англ. – 5-е изд. – М.: Вильямс, 2001. – 672 с.
8. Тузов В. А. Языки представления знаний. - Л.: Изд-во ЛГУ. - 1990.
9. Турчин В. Ф. Феномен науки. Кибернетический подход к эволюции. — Изд. 2-е — М.: Словарное издательство ЭТС. — 2000. — 368 с.
10. Хротко Г. Языки программирования высокого уровня. 1982 г.
11. Эферган М. Java: справочник. - QUE Corporation, 1997, Издательство "Питер Ком", 1998
12. Justin J.Crom. BASIC Face-off. PC Tech Journal, September 1987, 136 Перевод: Лопухов В.Н.
13. Абрамов В.Г., Трифонов Н.П., Трифонова Г.Н. Введение в язык Паскаль. - М.: Наука, 1988
14. Адаменко А, Кучуков А. Логическое программирование и Visual Prolog (с CD).. – СПб.: «БХВ–Петербург», 2003. – С. 990.
15. Керниган Б.В., Ритчи Д., Фьюэр А. Язык программирования Си. Русский перевод: Москва: Финансы и Статистика. 1985 г.
16. Малютин Э.А., Малютина Л.В. Языки программирования. 1982 г.
17. Опалева Э.А., Самойленко В.П. Языки программирования и методы трансляции. СПб.: БХВ-Петербург, 2005. – 471 с.
18. Языки программирования Ада, Си, Паскаль. Сравнение и оценка. - М.: Радио и связь, 1989.
19. Системный подход в технологии программирования [Электронный ресурс] // URL: http://bourabai.kz/alg/system4.htm
- Понятие правонарушения (Понятие правомерного поведения, его признаки, виды, мотивы)
- Социальная политика государства
- Счета и двойная запись (Понятие о счетах бухгалтерского учета и сущность двойной записи)
- Годовой бухгалтерский отчет: содержание и порядок составления ( Теоретические и организационные аспекты составления годовой бухгалтерской (финансовой) отчетности и анализа ее основных показателей)
- Статус нотариуса (Нотариат в Российской Федерации)
- Перспективы развития технологий ПК (Перспективы развития архитектур современных ЭВМ и компьютерных систем)
- Построение организационной структуры собственного бизнеса
- Реклама как сигнал и как информация (Теоретические вопросы сигнальной и информационной функции рекламы)
- Способы оформления web-страниц приложения.
- Разработка регламента выполнения процесса "Проведение оценки качества"
- Управление собственным бизнесом (Разработка дорожной карты создания нового бизнеса)
- Разработка дорожной карты создания нового бизнеса (Разработка дорожной карты создания нового бизнеса)