Файл: Классификация языков программирования. Критерии выбора среды и языка разработки программ ..pdf
Добавлен: 21.05.2023
Просмотров: 306
Скачиваний: 3
Введение
Существует множество языков программирования рассчитанных на разные цели и задачи.
Современный IT Специалист обязан быть в курсе современных компьютерных технологий, владеть и правильно применять нужную информацию, используя не только, собственно компьютер, но и все доступные и новейшие средства связи, телекоммуникации, а также, владеть и успешно применять языки программирования.
Важность данной темы в том, что постоянный прогресс компьютерных технологий определил процесс появления новых разнообразных знаковых систем для записи алгоритмов – языков программирования.
Объектом исследования послужили языки программирования и критерии их выбора в разных средах
Язык программирования - это система обозначений, служащая для точного описания программ или алгоритмов для ЭВМ. Языки программирования являются искусственными языками. От естественных языков они отличаются ограниченным числом “слов” и очень строгими правилами записи команд (операторов). Поэтому при применении их по назначению они не допускают свободного толкования выражений, характерного для естественного языка.
На сегодняшний день определен ряд требований к языкам программирования и классифицировать языки по их особенностям.
Основные требования, предъявляемые к языкам программирования:
Наглядность - использование в языке по возможности уже существующих символов, хорошо известных и понятных как программистам, так и пользователям ЭВМ;
Единство - использование одних и тех же символов для обозначения одних и тех же или родственных понятий в разных частях алгоритма. Количество этих символов должно быть по возможности минимальным;
Гибкость - возможность относительно удобного, несложного описания распространенных приемов математических вычислений с помощью имеющегося в языке ограниченного набора изобразительных средств;
Модульность - возможность описания сложных алгоритмов в виде совокупности простых модулей, которые могут быть составлены отдельно и использованы в различных сложных алгоритмах;
Однозначность - недвусмысленность записи любого алгоритма. Отсутствие ее могло бы привести к неправильным ответам при решении задач
В современном мире, существует несколько сотен реально используемых языков программирования. Они существуют каждый обособленно, и применяются в необходимых случаях.
Если мы говорим про алгоритм, то он является последовательностью задач (предписаний), выполнив которые можно за конечное число шагов перейти от исходных данных к результату. В зависимости от степени детализации предписаний обычно определяется уровень языка программирования — чем меньше детализация, тем выше уровень языка.
Транзакционная память
В современном мире, наличие многоядерных процессоров открывает широчайшие возможности использования параллельного исполнения программ. К большому сожалению, обоюдный (совместный) доступ к данным сильно усложняет разработку таких систем. В существующих, императивных языках обычно проблему совместного доступа решают использованием механизма блокировок – это так называемый, пессимистичный подход к управлению данными. Реальная проблема блокировок в том, что их использование требует одинаковой последовательности наложения из параллельных потоков исполнения. Несоблюдение этого условия приводит к взаимоблокировкам.
Прекрасным, альтернативным решением работы с данными может быть использование транзакционной памяти. В этом случае применения, блокировки не используются, однако существует механизм отслеживания коллизий. В случае возникновения попытки изменить данные из разных потоков, транзакция отменяется и перезапускается снова. У такого решения есть ограничение: исполнение программ в транзакции должно быть полностью обратимым, у функций исполнения не должно быть побочных эффектов. Чистые функции, позволяют перезапустить процесс без последствий столько раз, сколько потребуется, пока до конца транзакции не произойдет ни одного параллельного изменения. Это так называемый оптимистичный подход, используемый в функциональных языках.
Концепция параллельного исполнения с использованием технологии транзакционной памяти совместно с неизменяемостью данных позволяют эффективно решать задачи параллельного исполнения в функциональных языках точно также, как сборщик мусора на Java позволяет не думать о распределении памяти и решать более высокоуровневые задачи.
Перефразируя, все вышесказанное, у нас есть чистые функции, они определяют бизнес-логику нашего приложения. Есть грязные функции, служащие для взаимодействия во внешних системах (сокеты, БД, web-сервер). И существует внутреннее состояние нашей системы, которое в Clojure хранится в виде опосредованных ссылок (references). Есть 4 вида стандартных ссылок:
var — аналог thread-local переменных, служат для задания контекстных данных: текущее соединение с БД, текущий HTTP-запрос, параметры точности для математических выражений и подобное;
atom — атомарная ячейка, позволяет обновлять состояние синхронно, но не координированно;
agent — легковесный аналог для actor (хотя, в некотором смысле они являются антиподами, об этом ниже), служат для асинхронной работы с состоянием;
ref — ячейки транзакционной памяти, предоставляет синхронную и координированную работу с состоянием.
1. Виды языков программирования
1.1 Процедурные языки
Существующие процедурные языки программирования – такие языки программирования, код которых возможно разделить на процедуры. Современное программирование – объемнейшая сфера знаний, полностью изучить которую и владеть не сможет ни один специалист в мире. Существующие на сегодняшний день 120 отдельных языков программирования, это языки, каждый из которых используется для решения своей, собственной задачи, и они, в свою очередь, делятся на различные виды, или типы. В свое время важнейшими были процедурные языки программирования. Они не забыты и на сегодняшний день.
Главное в языках процедурного программирования – это их императивность, то есть создание четкого набора последовательных инструкций, которые должен поочередно выполнять компьютер. Парадигма императивности определяется следующими характеристиками:
- Весь код программы — это набор команд, выполняемых ЭВМ последовательно.
- Итоги, или данные подсчетов, могут храниться в памяти, и при необходимости, моментально извлекаться и применяться.
В этом языке применяется синтаксис, и он, в свою очередь, является императивным – команды для выполнения — это фактически, приказы, которые машина обязана выполнять. Кроме того, в процедурном программировании, большое место занимает использование подпрограмм, использование оператора присваивания, а также использование составных выражений.
За истекший временной период, развития программирования, стало понятно, что процедурно ориентированные языки программирования фактически появились первыми, они стали флагманом развития всей вычислительной техники.
1.2 Машинные коды и ассемблер
Сейчас рассмотрим язык Ассемблер и сходные с ним языки, они придуманы и используются для прямой обработки машинных инструкций и работы с компьютером на близком к аппаратному уровню. Этот подход мы относим к процедурному. Машинный код — это своеобразная система последовательных команд, написанных под конкретно взятую ЭВМ, команды выполняются процессором устройства либо его микропрограммами – уже написанными последовательностями действий процессора. Во главе угла этих инструкций: работа двоичного кода, последовательность нуля и единиц. Нуль это отсутствие электрического сигнала, а единица – получение ЭВМ единичного импульса. Вот здесь четко видно подчинение процедурному программированию – каждая последующая команда в программе выполняется только по реализации предыдущий. Как только в одной из команд происходит ошибка, то программа прекращает работу, необходимо искать ошибку в коде.
Такая же система работы языков ассамблера. Хотя и записывать сложные программы легче, области расширены, используются макрокоманды, создана адресация.
1.3 Язык Java
Java — один из самых первых, узнаваемых, объектно-ориентированный язык программирования, разработанный Sun Microsystems и выпущенный 23 мая 1995 года. Поначалу он назывался Oak (James Gosling) и разрабатывался для ограниченного использования только в бытовой электронике, но потом, в нем раскрыли новые возможности, он был переименован в Java и стал использоваться для написания апплетов, всех типов сетевых приложений и вообще, всемирным стандартом для разработки и распространения встроенных и мобильных приложений, игр, веб-контента и корпоративного программного обеспечения.
Программы на Java могут быть транслированы в байт-код, выполняемый на виртуальной java-машине (JVM) — программе, обрабатывающей байт-код и передающей инструкции оборудованию, как интерпретатор, но с тем отличием, что байт-код, в отличие от текста, обрабатывается значительно быстрее.
В основе зарождения JAVA, создание самого передового на тот момент, передового программного обеспечения для бытовой электроники. Вначале проект возникал на языке C++, но дальнейшее развитие языка, требовало нового подхода. Стал необходим собственный новая платформа-независимый язык программирования, который позволил бы использовать его на разных процессорах, под разными операционными системами.
Язык Java стал незаменимым для создания решений и для сети Internet. Мы знаем, что огромное множество, архитектурных решений, принятых при создании Java, стало необходимостью предоставить синтаксис, сходный с C и C++. В Java используются практически идентичные соглашения для объявления переменных, передачи параметров, операторов и для управления потоком выполнением кода. В Java добавлены все хорошие черты C++.
Java состоит из трех важнейших элементов:
Прежде всего это использование апплетов (applets) — собственные сетевые приложения, встраиваемые в страницы Web. Потребители имеют возможность настраивать и изменять апплеты так же легко, как и как любые документы HTML
Второе: Java высвобождает все возможности объектно-ориентированной разработки приложений, сочетая обычный синтаксис с удобной в работе средой разработки. Это позволило программисту без проблем и в короткий срок создавать как новые программы, так и апплеты
Помимо этого, Java позволяет программисту использовать богатейший набор классов объектов для ясного абстрагирования многих системных функций, необходимых при работе с окнами, сетью и для ввода-вывода. Основа этих классов в том, что они обеспечивают создание независимых от используемой платформы абстракций для широкого спектра системных интерфейсов
Основа языка Java в том, что его код сначала транслируется в специальный байт-код, независимый от платформы. А затем этот байт-код выполняется виртуальной машиной JVM (Java Virtual Machine). Именно в этом, отличие Java от стандартных интерпретируемых языков, таких как PHP или Perl, код которых сразу же выполняется интерпретатором. Однако, Java не является и чисто компилируемым языком, как С или С++.
Такое построение подразумевает кроссплатформенность и аппаратную переносимость программ на Java, благодаря чему подобные программы могут легко применяться на - Windows, Linux, Mac OS и т.д. Для каждой из платформ может быть своя реализация виртуальной машины JVM, но каждая из них может выполнять один и тот же код.
Необходимо сказать, что Java это язык с Си-подобным синтаксисом и близок к C/C++ и C#. Владеющий этими языками программист, может легко овладеть Java, в этом также его огромное преимущество.
Также важнейшая часть применения Java: автоматическая сборка мусора. Программисту более не понадобится вручную освобождать память от ранее использовавшихся объектов, как в С++, вводимый JAVA сборщик мусора, сделает все за Вас. Это очень удобно!
Говоря про Java, нельзя не сказать про то, что он является объектно-ориентированным языком, поддерживает полиморфизм, наследование, статическую типизацию, позволяет решить задачи по построению крупных, но в тоже время гибких, масштабируемых и расширяемых приложений.
Невозможно не упомянуть про расширение JavaFX работающее на основеJava. На этой платформе, современные программисты могут создавать и развертывать полнофункциональные интернет-приложения (RIA), успешно работающие на различных платформах. JavaFX во многом расширяет возможности Java, позволяет разработчикам использовать любые библиотеки Java в приложениях JavaFX. Тем самым, программисты, расширяют возможности Java, используют технологию презентаций, поддерживающей JavaFX для создания увлекательных визуальных образов, графических приложений.
1.4 Fortran
Перенесемся в США в 1950 годы. Возникший тогда язык Fortran это также процедурный язык программирования. При его разработке, было понятно, что его возможности уже намного выше, нежели первые машинные коды и ассемблеры. Это один из первых высокоуровневых языков программирования, он имеет свой транслятор, позволяет решать серьезные математические и логические задачи. Он нес высокие познавательные цели, позволил автоматизировать подсчеты линейных, дифференциальных и интегральных уравнений, выполнять аппроксимации функций, преобразования Фурье. Он используется и в наши дни, например, при работе с библиотеками.