Файл: Классификация языков программирования высокого уровня (Содержание понятия языков программирования и их история создания).pdf
Добавлен: 30.03.2023
Просмотров: 243
Скачиваний: 1
СОДЕРЖАНИЕ
Глава 1. Теоретические основы языков программирования
1.1. Содержание понятия языков программирования и их история создания
1.2. Классификация языков программирования
Глава 2. Современные языки программирования
2.1. Обзор современных языков программирования
2.2. Сопоставление современных языков программирования
Глава 3. Пример использования языков программирования Java и C++
Выиграв кровопролитнейшую битву с ассемблером, новый язык получил заслуженное признание как в среде ученых, так и у промышленников и военных. В частности, трудно переоценить его роль в компьютерном обеспечении космической программы[12].
В 1958 г. увидел свет FORTRAN II, в который были добавлены средства раздельной компиляции модулей, а также возможность связи с ассемблерным кодом. В том же году появился FORTRAN III, который, впрочем, так и не был выпущен для общего пользования. В этой версии можно было включать фрагменты ассемблерного кода прямо в исходный текст программы. Эффективность кода возросла еще больше, однако это сильно ударило по переносимости, поэтому от новшества решили все же отказаться.
Наконец, в 1961 г. был выпущен FORTRAN IV, который представлял собой рафинированный вариант FORTRAN II, лишенный некоторых аномалий и машинно-зависимых особенностей. Именно эта версия получила наибольшее распространение среди ученых и инженеров и служила им верой и правдой более 30 лет, будучи реализованной практически на всех мэйнфреймах, мини-ЭВМ и персональных компьютерах, с которыми мне когда-либо доводилось иметь дело.
С мая 1962 г. началась работа по стандартизации языка, результатом которой стал FORTRAN 66 - первый в мире стандарт на ЯВУ. Язык заслуженно получил очередной титул "первый".
Основные черты языка: программа состоит из главной программы и набора подпрограмм, компилируемых независимо и компонуемых перед загрузкой. Каждая подпрограмма имеет собственную отдельную область памяти для хранения переменных и кода. Кроме того, можно выделять общие (COMMON) области памяти, которые содержат переменные, доступные из разных подпрограмм. Обмен данными осуществляется через блоки COMMON, а также через формальные параметры подпрограмм, при этом передача параметров производится только по ссылке.
Из типов данных имеются числовые (целочисленные и с плавающей точкой), а также логический. Из структур скалярные переменные и статические массивы размерностью не более 3. Что характерно, имеется также встроенный тип для представления комплексных значений, для которого определен полный набор операций.
Поскольку основное назначение языка - математические вычисления, имеется богатый набор арифметических операций, математических функций, а также преобразований типов.
На этом эволюция языка-долгожителя не остановилась, и в 1990 г. увидел свет очередной стандарт, FORTRAN 90. Впрочем, он слишком опоздал со своим появлением, дав приличную фору по времени своим конкурентам, главным из которых явился, безусловно, C++. Несмотря на очевидные усовершенствования языка, FORTRAN 90 не получил такого ошеломляющего успеха, как его знаменитые предшественники, и удовольствовался весьма скромной нишей. Не прибавило ему популярности и появление следующего стандарта, FORTRAN 95. Новое поколение программистов ориентировано на C++, Java и C#, и старому доброму FORTRANу, увы, нечего им противопоставить[12].
Третье поколение языков программирования представляет Algol 60[13]. Algol разрабатывался комитетом, специально созданным для разработки языка высокого уровня общего назначения, пригодного для научных вычислений (хотя в промышленности в то время царила эйфория, навеянная успехом FORTRAN'а, в академической среде находились люди, способные заглянуть дальше и видящие, в какой тупик со временем неизбежно заведет FORTRAN).
Как и в большинстве других языков программирования, программа на Algolе состоит из главной программы и набора подпрограмм. При их построении используются блоки - наборы описаний и последовательности операторов, ограниченные "скобками" begin и end. Структуры данных, созданные внутри блока, локальны в его пределах и при выходе из блока уничтожаются. Таким образом можно управлять временем жизни данных и областью видимости их идентификаторов[13].
Четвертое поколение представлено языками поддержки сложных структур данных. Ярким примером можно назвать язык SQL[14].
В 1980 году Кларк и Маккейб в Великобритании разработали версию Пролога для персональных ЭВМ.
В 1981 году стартовал вышеупомянутый проект Института по разработке методов создания компьютеров нового поколения.
На сегодня существует довольно много реализаций Пролога. Наиболее известные из них следующие: BinProlog, AMZI-Prolog, Arity Prolog, CProlog, Micro Prolog, МПролог, Prolog-2, Quintus Prolog, SICTUS Prolog, Silogic Knowledge Workbench, Strawberry Prolog, SWI Prolog, UNSW Prolog и т. д.
В нашей стране были разработаны такие версии Пролога как Пролог-Д (Сергей Григорьев), Акторный Пролог (Алексей Морозов), а также Флэнг (А Манцивода, Вячеслав Петухин).
Следующее поколение – это языки нейронных сетей (самообучающиеся языки). Исследовательские работы в этой области начались в середине 80-х годов XX века.
В 1995 году дебютировали четыре языка: Java, JavaScript, PHP и Ruby. Хотя их соответствующие версии не сопровождались большой аудиторией, эти языки в конечном итоге стали востребованы, чтобы стать повсеместным инструментом программирования для большинства разработчиков программного обеспечения.
До этого времени C и C ++ были доминирующими языками. Несмотря на то, что эти языки были очень влиятельными, они по своей сути не подходили для всемирной паутины. Кроме того, они часто считались немного сложными и пугающими для начинающих программистов, особенно C ++.Среди четырех языков Java оказался самым успешным. Java стала мгновенным хитом, так как ее было намного легче изучать и осваивать по сравнению с C ++. Java также представила новую идею виртуальной машины (JVM), которая позволила писать программы, которые запускались на разных платформах без необходимости перекомпиляции. В последние годы JavaScript заменил Java как лучший язык программирования в мире. Устойчивый рост JavaScript во многом объясняется появлением Node.js, технологии, которая позволила запускать JavaScript на стороне сервера [2].
PHP стал доминирующей силой в сфере веб-программирования, особенно в сочетании с другими популярными технологиями с открытым исходным кодом, такими как Linux, Apache и MySQL. Вместе они сформировали то, что обычно называют стеком LAMP. Ruby приобрел известность среди веб-разработчиков после выпуска безумно популярной веб-платформы Ruby on Rails. Потребность в новых языках программирования начиная с 2000-х годов начал меняться. Все больше вычислительных машин начали поставляться с несколькими процессорами, и даже отдельные процессоры имели более одного ядра. Python на сегодня очень популярен и активно развивается.
Среди современных языков программирования у Python относительно простые команды, поэтому его синтаксис очень прост. Этот сдвиг в природе цифровых устройств вызвал необходимость в языках программирования, которые бы в полной мере использовали преимущества новой архитектуры процессора. Языки должны были иметь возможность выполнять процессы одновременно или параллельно, чтобы максимизировать потенциал новых многоядерных процессоров. Параллельность больше не была запоздалой мыслью, ее нужно было встроить в сам язык. В последние годы возрождается интерес к функциональному программированию, парадигме, которая пытается максимально устранить побочные эффекты. Фактически, возникновение побочных эффектов оказалось проклятием в жизни современного программиста. Обычно это значительно усложняет процесс отладки кода (одно действие, которого боится каждый программист). В параллельной среде безопасность и неизменность данных становятся очень важными факторами для разработчиков. Повреждение данных должны быть максимально предотвращены. Само собою современные компьютеры продолжают совершенствоваться с каждым днём. Большое внимание сместилось в сторону продуктивности программистов.
В результате, язык программирования имеет аккуратный и элегантный синтаксис, который легко писать и читать. Новый пользователь должен быть в состоянии быстро его освоить и начать работу с языком в кратчайшие сроки. Это не оставляет нам другого выбора, кроме как использовать новые языки программирования, которые были разработаны с нуля для решения некоторых острых проблем в современной разработке программного обеспечения. Эти языки программирования считаются современными, у большинства из этих новых языков много общего.
1.2. Классификация языков программирования
Классификаций языков программирования существует великое множество, но в данной работе мы рассмотрим только самые основные:
По уровню реализации:
Низкоуровневые (C, C++, Assembler)
Плюсы: полный контроль над всем (в том числе и над памятью, что в других языках практически невозможно)
Минусы: дополнительный контроль несет дополнительные сложности, контроль над памятью может быстро стать утомительным, относительно бедная стандартная библиотека (Набор функций, макросов, глобальных переменных, доступных из любого места любой программы, написанной на этом языке. Служит для облегчения жизни программистам, чтобы не "изобретать велосипед").
Среднеуровневые (C#, Java)
Плюсы: памятью все еще можно управлять, но не обязательно; богатые стандартные библиотеки; компилируются в байт-код, чем упрощается взаимодействие с другими языками
Минусы: Требуется дополнительно установленная среда для выполнения байт-кода (Java Runtime Environment для Java); сложно для освоения новичку, так как надо понимать, как устроена память, сборка мусора;
Высокоуровневые (PHP, Python, Ruby, JavaScript)
Плюсы: значительно проще синтаксис, абстракции упрощают жизнь, большие стандартные библиотеки (не надо изобретать велосипед), в целом все просто и интуитивно понятно
Минусы: сравнительно низкая производительность; Страдает архитектура (изменения могут вноситься в любом месте кода, а не там, где это действительно нужно).
По способу реализации:
Компилируемые (C++, Objective-C, Delphi, Go)
Исходный код программы переводится в двоичные коды инструкций процессора. Это делает компилируемые языки сравнительно быстрее интерпретируемых, так как код уже переведен к машинному виду и не требует дополнительных программ-интерпретаторов для обработки. Но в этом кроется также и минус, так как скомпилированная программа может выполняться только на том типе компьютера и на той операционной системе, на которые был рассчитан компилятор.
Интерпретируемые (Python, Ruby, Perl, PHP)
Исходный код, вместо компиляции в машинный код, исполняется специальной программой интерпретатором. Главными плюсами таких языков являются кроссплатформенность (один и тот же код будет работать на разных операционных системах) и динамическая типизация (переменная связывается с типом – число, строка, указатель - в момент присваивания данных, а не в момент ее объявления)
Также программы, написанные с использованием интерпретируемых языков, можно запускать сразу же после изменений в коде, что облегчает разработку.
По парадигмам программирования:
Парадигма программирования – это совокупность идей, понятий и концепций, которые определяют подход к написанию программ. От парадигмы зависит, как будут организованы вычисления и какова будет структура программы.
Процедурное программирование (C, Pascal, MATLAB)
Суть написания программ на таких языках сводится к тому, чтобы из операторов языка и мелких синтаксических единиц собирать более крупные куски кода, а куски кода в целые программы.
То есть у вас есть переменная А равная 10. После выполнения операторов в определенном порядке, переменная А становится равной 20. Преобразование исходных данных в заключительные, путем последовательного выполнения операторов, и есть суть этой парадигмы.
Объективно-ориентированное программирование (C++, PHP, Python, Ruby, JavaScript), ООП.
ООП возникло в результате развития процедурного программирования. Основные понятия тут – это классы и объекты этих классов. ООП было создано, чтобы облегчить жизнь программистом. Когда вы пишете программы по этой парадигме, то разбиваете одну большую проблему на несколько маленьких. Объект, по сути, – это набор свойств и методов для работы с ними. Объекты независимы, и через их взаимодействие между собой строится ваше приложение.
Одним из плюсов ООП – это повторное использование. К примеру, вам нужно загрузить изображение на сайт и изменить его размеры. Есть уже множество готовых классов, написанных другими программистами, вам лишь остается подключить класс к своему коду и использовать его. Это сильно экономит время и повышается эффективность работы.
Декларативное программирование (Haskell, Lisp, SQL)
Эта парадигма в отличие от двух предыдущих описывает, не КАК мы получаем результат, а ЧТО мы хотим получить.
Вот вы захотели пиццу: вы просто звоните в пиццерию и заказываете ее. Вам неважно, где и как ее приготовили, вы просто декларируете ваше желание.
Кстати, язык разметки web-страниц HTML является хорошим примером такого программирования. Если вы хотите отобразить на вашей странице изображение, вы просто пишете тэг <img> в вашем html-файле. Как браузер получит эту страницу с сайта, как выведет изображение – это его проблемы, вы лишь хотите видеть на странице картинку с котиками и получаете это.
Выводы по главе 1:
Язык программирования — формализованный язык для описания программ и алгоритмов решения задач на ЭВМ. Языки программирования являются искусственными; в них синтаксис и семантика строго определены, они не допускают свободного толкования выражения, что характерно для естественного языка. Языки программирования разделяются на три основные категории: языки высокого уровня, языки среднего уровня и языки низкого уровня.