Файл: Обзор языков программирования высокого уровня (Программирование).pdf
Добавлен: 30.03.2023
Просмотров: 219
Скачиваний: 1
Достоинства:
- Переносимость. Программы, написанные на языке Java, после однократной трансляции в байт-код могут быть исполнены на любой платформе, для которой реализована виртуальная Java-машина. Наиболее эффективно возможности реального компьютера может использовать только программа, написанная с использованием «родного» машинного кода.
- Безопасность. Функционирование программы полностью определяется (и ограничивается) виртуальной Java-машиной. Отсутствуют указатели и другие механизмы для непосредственной работы с физической памятью и прочим аппаратным обеспечением компьютера. Дополнительные ограничения снижают возможность написания эффективно работающих Java-программ.
- Надежность. В языке Java отсутствуют механизмы, потенциально приводящие к ошибкам: арифметика указателей, неявное преобразование типов с потерей точности и т.п. Присутствует строгий контроль типов, обязательный контроль исключительных ситуаций. Многие логические ошибки обнаруживаются на этапе компиляции. Наличие дополнительных проверок снижает эффективность выполнения Java-программ.
Недостатки языка:
- Язык не полностью объектно-ориентирован: Язык не имеет таких свойств полностью объектно-ориентированного языка, как индивидуальные переменные, множественное наследование и.т.д.
- Соответствие корпоративным требованиям: Язык довольно популярен в мире программ с открытым кодом и технически превосходит многие коммерческие аналоги. Однако ему не хватает некоторых важных, с точки зрения корпоративной среды-особенностей. Это означает, что если мы захотим использовать PHP в корпорации, то это либо вообще не удастся сделать, либо потребуется значительно больше дополнительных программных средств, чем при использовании Java или C++.
2.4 Python
Python является интерпретируемым, изначально объектно-ориентированным языком программирования. Он чрезвычайно прост и содержит небольшое число ключевых слов, вместе с тем очень гибок и выразителен.
Достоинства языка
- Кросплатформенность. Несомненным достоинством является то, что интерпретатор Python реализован практически на всех платформах и операционных системах.
- Расширяемость языка. Это означает, что имеется возможность совершенствования языка всеми заинтересованными программистами. Интерпретатор написан на С и исходный код доступен для любых манипуляций.
- Большое количество подключаемых к программе модулей, обеспечивающих различные дополнительные возможности. В качестве примера можно привести следующие модули:
Numerical Python - расширенные математические возможности, такие как манипуляции с целыми векторами и матрицами;
Tkinter - построение приложений с использованием графического пользовательского интерфейса (GUI) на основе широко распространенного на X-Windows Tk-интерфейса;
Недостатки языка.
- Наверное единственным недостатком, является сравнительно невысокая скорость выполнения Python-программы, что обусловлено ее интерпретируемостью.
2.5 Swift
Swift — это скомпилированный язык программирования для приложений iOS, macOS, watchOS, tvOS и Linux.
Первой особенностью синтаксиса языка Swift является его принадлежность к группе C-подобных языков программирования. Разработчики, которые уже знакомы с C-подобными языками, найдут в Swift много знакомых конструкций. Блоки кода все также разделяются парой фигурных скобок, а циклы, условия и функции содержат знакомые нам ключевые слова if, else, for, return.[7]
Достоинства
- Производительность. Как заявляет Apple, Swift в 2,5 раза быстрее Objective-C и в 8 раз быстрее, чем Python 2.7.
- Лаконичный синтаксис. Если брать за критерий количество строк кода, которые нужно написать для решения задачи, то Swift идёт в первой десятке по минимализму.
- Видимый результат. Для Swift есть специальный инструмент Playground — своего рода интерактивная песочница, где программист сразу видит результаты работы программы. Иногда это в несколько раз увеличивает скорость разработки и помогает быстро разобраться с проблемным участком кода.
- Функционально совместимый. Благодаря интеграции с библиотекой исполнения программ Objective-C (Objective-C Runtime Library) можно писать программы на Swift, C, Objective-C, и C++ одновременно.
Недостатки
- Ограниченный кадровый потенциал. Swift новичок среди языков, в связи с этим талантливых разработчиков пока не так много. Но этот недостаток легко превратить в достоинство тем, кто хочет стать Swift разработчиком. Потребность в них только увеличивается, а конкуренция все еще не большая.
- Малое количество библиотек. В Swift все еще довольно мало встроенных функций, которые бы работали одинаково хорошо во всех версиях. Большинство библиотек и фреймворков разработаны для более ранних версий языка и совершенно бесполезны в новых.
- Нестабильность. Многие разработчики жалуются на одну и ту же проблему. Из-за изменений, представленных в новой версии языка, Swift ведет себя очень нестабильно. Это значит, что если разработчик хочет перейти на новую версию языка — ему нужно будет переписать код. Правда, эта проблема была частично решена с помощью Swift Migration Tool в XCode, что сделало миграцию на 4-ю версию языка довольно простой задачей.
2.6 Object Pascal
Object Pascal является расширением языка Паскаль, который был разработан в Apple Computer. Он относится к относится к ветви объектно-ориентированным языка программирования.
Когда речь заходит об обсуждение сильных и слабых сторон Object Pascal, стоит говорить не столько о самом языке, сколько о Delphi – главном представителю «семейства», ввиду его востребованности и освоенности программистами. Итак, поверхностно взглянем на его характеристики:
Преимущества:
- Понятный синтаксис;
- Доступные IDE;
- Минимальные затраты времени на освоение IDE и создание прикладных приложений.
Недостатки:
- Малое количество библиотек по сравнению с С/С++/Object C;
- Недостаточная гибкость из-за того, что язык создавался не с нуля, а по сути, эволюционировал от Pascal;
- Слабая поддержка, как со стороны разработчиков IDE, так и самого языка;
- Ограничение функциональности.
3 Сравнительный анализ языков программирования высокого уровня
В зависимости от возможностей языка, удобства разработки и безопасности, растет и его популярность среди коммерческих организаций и соответственно разработчиков. Ниже представлена диаграмма популярности языка.
Рисунок 1 - Диаграмма популярности языков программирования
В приведённых ниже таблицах отмечено наличие или отсутствие тех или иных возможностей в некоторых популярных сегодня высокоуровневых языках программирования. Если возможность в языке недоступна напрямую, но может быть эмулирована с помощью других средств, то в таблице отмечено, что её нет.
При заполнении таблицы учтены только фактические данные, при том, что наличие возможности не обязательно является преимуществом языка, а отсутствие — недостатком.
Условные обозначения в таблицах.
+ Указанная возможность присутствует
− Указанная возможность отсутствует
+/− Возможность поддерживается не полностью
−/+ Возможность поддерживается очень ограниченно
? Нет данных
N/A Постановка вопроса не применима к языку
Таблица 1 - Возможность использования парадигм
|
Язык / Парадигма |
Императивная |
Объектно-ориентированная |
Функциональная |
Рефлексивная |
Обобщённое программирование |
Логическая |
Декларативная |
Распределенная |
|---|---|---|---|---|---|---|---|---|
|
Active Oberon |
+ |
+ |
− |
− |
− |
− |
− |
− |
|
Ada |
+ |
+ |
− |
− |
+ |
− |
− |
+ |
|
C |
+ |
−/+ |
+/− |
− |
+ |
− |
− |
+/− |
|
C++ |
+ |
+ |
−/+ |
−/+ |
−/+ |
− |
− |
+/− |
|
C# |
+ |
+ |
+/− |
−/+ |
+ |
− |
−/+ |
−/+ |
|
D |
+ |
+ |
+/− |
−/+ |
+ |
− |
−/+ |
+/− |
|
Eiffel |
+ |
+ |
+/− |
? |
+/− |
− |
? |
+ |
|
Erlang |
− |
− |
+ |
+ |
+ |
− |
+ |
+ |
|
Prolog |
− |
− |
? |
? |
+ |
+ |
+ |
− |
|
F# |
+ |
+ |
+ |
−/+ |
+ |
− |
+ |
− |
|
Go |
+ |
+/− |
+/− |
− |
− |
− |
− |
+ |
|
Groovy |
+ |
+ |
+ |
+ |
+ |
− |
+ |
−/+ |
|
Java |
+ |
+ |
−/+ |
−/+ |
+ |
− |
− |
+ |
|
JavaScript |
+ |
+ |
+/− |
+ |
+ |
− |
+/− |
− |
|
Haskell |
+ |
− |
+ |
− |
+ |
+/− |
+ |
+ |
|
Common Lisp |
+ |
+ |
+/− |
+ |
+ |
+/− |
+ |
+/− |
|
Modula-3 |
+ |
+ |
− |
− |
+ |
+ |
− |
−/+ |
|
Nemerle |
+ |
+ |
+ |
−/+ |
+ |
+/− |
+ |
− |
|
Perl |
+ |
+ |
+ |
+/− |
+ |
− |
−/+ |
− |
|
PHP |
+ |
+ |
+/− |
+ |
+ |
− |
+ |
− |
|
Python |
+ |
+ |
+ |
+ |
+ |
− |
+ |
−/+ |
|
Ruby |
+ |
+ |
+ |
+ |
+ |
− |
+ |
−/+ |
|
Rust |
+ |
−/+ |
+ |
−/+ |
+ |
− |
− |
+ |
|
Scala |
+ |
+ |
+ |
−/+ |
+ |
? |
+ |
? |
|
Smalltalk |
+ |
+ |
+ |
+ |
+ |
+/− |
+/− |
+/− |
|
Tcl |
+ |
+ |
+ |
+ |
− |
− |
− |
? |
|
VB.NET |
+ |
+ |
+/− |
−/+ |
+ |
− |
+/− |
− |
|
Delphi |
+ |
+ |
−/+ |
−/+ |
+ |
− |
− |
− |
|
OCaml |
+ |
+ |
+ |
− |
+ |
− |
+ |
− |
|
PureBasic |
+ |
−/+ |
+/− |
? |
−/+ |
? |
+/− |
− |
Таблица 2 - Поддерживаемая трансляция
|
Open-source компилятор (интерпретатор) |
Возможность компиляции |
Bootstrapping |
Многопоточная компиляция |
Интерпретатор командной строки |
Условная компиляция |
|
|---|---|---|---|---|---|---|
|
Active Oberon |
+ |
+ |
+ |
+ |
+ |
+ |
|
Ada |
+ |
+ |
+ |
+ |
+/− |
+/− |
|
C |
+ |
+ |
+ |
+ |
−/+ |
+ |
|
C++ |
+ |
+ |
+ |
+ |
+/− |
+ |
|
C# |
+ |
+ |
+ |
− |
+ |
+ |
|
D |
+ |
+ |
+ |
+ |
+/− |
+ |
|
Eiffel |
+ |
+ |
+ |
? |
? |
? |
|
Erlang |
+ |
−/+ |
+ |
+ |
+ |
+ |
|
F# |
+ |
+ |
+ |
+ |
+ |
+ |
|
Go |
+ |
+ |
+ |
+ |
− |
+/− |
|
Groovy |
+ |
+ |
+ |
+ |
+ |
? |
|
Java |
+ |
+ |
+ |
+ |
− |
−/+ |
|
JavaScript |
+ |
+ |
+ |
? |
+ |
−/+ |
|
Haskell |
+ |
+ |
+ |
+ |
+ |
+ |
|
Common Lisp |
+ |
+ |
+ |
+ |
+ |
+ |
|
Modula-3 |
+ |
+ |
− |
− |
− |
+ |
|
Nemerle |
+ |
+ |
+ |
− |
+ |
+ |
|
Perl |
+ |
+ |
? |
? |
+ |
+ |
|
PHP |
+ |
+ |
N/A |
? |
+ |
+ |
|
Python |
+ |
+ |
+ |
N/A |
+ |
N/A |
|
Ruby |
+ |
+ |
+ |
N/A |
+ |
N/A |
|
Rust |
+ |
+ |
+ |
+ |
− |
+ |
|
Scala |
+ |
+ |
+ |
− |
+ |
? |
|
Smalltalk |
+ |
+ |
+ |
− |
+ |
+ |
|
Tcl |
+ |
− |
N/A |
N/A |
+ |
N/A |
|
VB.NET |
+ |
+ |
? |
+ |
+ |
+ |
|
Delphi |
+ |
+ |
+ |
? |
+/− |
+ |
|
Ocaml |
+ |
+ |
+ |
+ |
+ |
N/A |
|
PureBasic |
− |
+ |
+ |
+ |
− |
+ |
Таблица 3 - Возможности управления памятью
|
Создание объектов на стеке |
Неуправляемые указатели |
Ручное управление памятью |
Сборка мусора |
|
|---|---|---|---|---|
|
Active Oberon |
+ |
+ |
+/− |
+ |
|
Ada |
+ |
+ |
+ |
−/+ |
|
C |
+ |
+ |
+ |
− |
|
C++ |
+ |
+ |
+ |
−/+ |
|
C# |
+ |
+ |
+ |
+ |
|
D |
+ |
+ |
+ |
+ |
|
Eiffel |
−/+ |
− |
− |
+ |
|
Erlang |
? |
− |
− |
+ |
|
F# |
+ |
− |
− |
+ |
|
Go |
? |
? |
? |
+ |
|
Groovy |
− |
− |
− |
+ |
|
Java |
− |
− |
− |
+ |
|
JavaScript |
− |
− |
− |
+ |
|
Haskell |
+/− |
− |
− |
+ |
|
Common Lisp |
+/− |
− |
− |
+ |
|
Modula-3 |
− |
+ |
+ |
+ |
|
Nemerle |
+ |
+ |
+ |
+ |
|
Perl |
− |
− |
− |
+ |
|
PHP |
− |
− |
− |
+ |
|
Python |
− |
− |
− |
+ |
|
Ruby |
− |
− |
− |
+ |
|
Rust |
+ |
+ |
+ |
+/− |
|
Scala |
? |
− |
− |
+ |
|
Smalltalk |
? |
+ |
+ |
+ |
|
Tcl |
− |
− |
− |
+ |
|
VB.NET |
− |
− |
− |
+ |
|
Delphi |
−/+ |
+ |
+ |
− |
|
OCaml |
? |
− |
− |
+ |
|
PureBasic |
+ |
+ |
+ |
− |