Файл: Стандартизация языков программирования.pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 21.05.2023

Просмотров: 474

Скачиваний: 3

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Срез (англ. pointcut) — набор точек соединения. Срез определяет, подходит ли данная точка соединения к данному совету. Самые удобные реализации АОП используют для определения срезов синтаксис основного языка (например, в AspectJ применяются Java-сигнатуры) и позволяют их повторное использование с помощью переименования и комбинирования.

Внедрение (англ. introduction, введение) — изменение структуры класса и/или изменение иерархии наследования для добавления функциональности аспекта в инородный код. Обычно реализуется с помощью некоторого метаобъектного протокола (англ. metaobject protocol, MOP).

Декларативный язык программирования

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

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

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

Динамический язык

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

Динамическая типизация является основным, но не единственным критерием динамического языка программирования.

К динамическим языкам относятся: Perl, Tel, Python, РНР, Ruby, Smalltalk, JavaScript. Некоторыми динамическими чертами обладает также Visual Basic.


Учебный язык программирования

Учебный язык программирования — язык программирования, предназначенный для обучения. В качестве таковых разрабатывались такие языки как BASIC и Паскаль. Из разработанного для обучения языка ABC вырос Python. Популярным языком, разработанным специально для образования является LOGO. Специально для российских школ разработана языковая среда КуМир. Набирает популярность созданный в Массачусетском технологическом институте язык визуального программирования Scratch и тому подобные среды программирования.

Требования к учебному языку программирования

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

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

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

Альтернативой относительно трудоёмким для изучения комплексным языкам программирования общего назначения могут составить простые миниязыки, в которых, для наглядности, имеется графический исполнитель, вроде черепашки в Лого — первом и одном из самых известных таких языков.

Язык описания интерфейсов

Язык описания интерфейсов (англ. Interface Description Language или Interface Definition Language) — язык спецификаций для описания интерфейсов, синтаксически похожий на описание классов в языке C++.

Объектно-ориентированный язык программирования

Объектно-ориентированный язык программирования (ОО-язык) — язык, построенный на принципах объектно-ориентированного программирования.

В основе концепции объектно-ориентированного программирования лежит понятие объекта — некой сущности, которая объединяет в себе поля (данные) и методы (выполняемые объектом действия).


Например, объект человек может иметь поля имя, фамилия и методы есть и спать. Соответственно, в программе можем использовать операторы Человек.Имя:="Иван" и Человек.Есть(пища).

Логическое программирование

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

Сценарный язык

Сценарный язык (язык сценариев, жарт, скриптовый язык, от англ. scripting language) — высокоуровневый язык программирования для написания сценариев (англ. script) — кратких описаний действий, выполняемых системой. Разница между программами и сценариями довольно размыта. Сценарий — это программа, имеющая дело с готовыми программными компонентами.

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

Эзотерические язык

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

На практике такие языки, как правило, бесполезны, однако программирование на некоторых из них является неплохой тренировкой. Эзотерические языки нередко включают в список разрешённых языков на конкурсах по программированию.


Классификация функциональных языков

В качестве примера чистого функционального языка можно привести Haskell. Однако большинство функциональных языков являются гибридными и содержат свойства как функциональных, так и императивных языков. Яркие примеры — языки Scala и Nemerle. В них органично сочетаются характеристики как объектно-ориентированных языков, так и функциональных. Реализована хвостовая рекурсия и её оптимизация, функция является полноправным объектом, то есть может быть сохранена в переменной, передана в качестве аргумента в другую функцию или возвращена из функции.

Также функциональные языки делят на строгие и нестрогие. К нестрогим языкам относят те, которые поддерживают отложенные вычисления (F#), то есть аргументы функции вычисляются только тогда, когда они действительно понадобятся при вычислении функции. Ярким примером нестрогого языка является Haskell. В качестве примера строгого языка можно привести Standard ML.

Некоторые функциональные языки реализованы поверх платформообразующих виртуальных машин (JVM, .NET), то есть приложения на этих языках могут работать в среде времени исполнения (JRE, CLR) и использовать встроенные классы. К ним относятся Scala, Clojure (JVM), F#, Nemerle, SML.NET (.NET).

Математически обоснованные языки программирования

Ряд известных авторов выделяют в особую категорию «языки, наследованные от математики» (англ. mathematically-derived languages). Алан Кэй также отделяет языки, являющиеся «стилем во плоти» (crystalization of style) от прочих языков, являющихся «склеиванием возможностей» (agglutination of features).

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


Примеры математически обоснованных языков и воплощаемых ими математических моделей:

Agda — Интуиционистская теория типов Мартин-Лёфа.

APL и его потомки (J, К) — оригинальная семантика, не имеющая названия, воплощающая нотацию Айверсона для исчисления массивов (часто встречается термин «array languages»).

Coq — исчисление индуктивных конструкций.

Erlang — исчисление процессов (первоначально в форме модели акторов, позже также построено обоснование на -исчислении).

Forth — стековая машина и конкатенативный язык программирования.

Haskell — теория категорий (включая «декартово замкнутую категорию», воплощающую лямбда-исчисление; категорию монад для моделирования побочных эффектов; расширение системы типов Хиндли — Милнера; систему родов; и др.)

Joy — композиция функций и гомоморфизм (иначе говоря, чистый конкатенативный язык программирования, и, как следствие, чистый функциональный).

Lisp — лямбда-исчисление Чёрча (в том числе язык S-выражений, воплощающий нотацию пар чёрча).

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

ML — типизированное лямбда-исчисление, то есть лямбда-исчисление, дополненное системой типов Хиндли — Милнера.

Prolog — исчисление предикатов.

Mercury — исчисление предикатов, дополненное системой типов Хиндли — Милнера.

Smalltalk — теория множеств (с соблюдением числовой башни).

SQL — исчисление кортежей (вариант реляционного исчисления, в свою очередь основанного на исчислении предикатов первого порядка)

SGML и его потомки (HTML, XML) — нотация деревьев (важный случай графов).

Unlambda — комбинаторная логика.

Регулярные выражения.

Рефал — оригинальная семантика Турчина, носящая название «Рефал- машины» или «Рефал-автомата», созданная на основе нормального алгоритма Маркова, воплощающая композицию теории автоматов, сопоставления с образцом и переписывания термов.

Наличие математического обоснования для языка может гарантировать (или, как минимум, обещать с очень высокой вероятностью) некоторые или все из следующих положительных свойств:

Существенное повышение стабильности программ. В одних случаях — за счёт упрощения формальной верикации программ, вплоть до построения доказательства корректности для самого языка (см. типо безопасность — примерами служат Standard ML и Haskell) и даже получения языка, который сам является системой доказательства (Coq, Agda). В других случаях — за счёт быстрого обнаружения ошибок на первых же пробных запусках программ (Forth и регулярные выражения).