Атрибуты языков программирования и их прогресс

Достигнут прогресс в обогащении языков и повышении производительности труда. Это список всех возможностей, которые можно использовать для языка.

Первая реализация на языке указана в скобках.

Переменные величины

Вывод типа

Тип переменной определяется из назначенного ему значения. Это освобождает программиста от явного указания типа, худой экономики на самом деле. (ML 1973).

Анимация строки

Переменные вставляются в строку, которая заменяется их значением во время выполнения. Например, в PHP:

 $a = 5; $str="$a items";

Что покажет: 5 предметов.

Генеричность/параметрический полиморфизм

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

Подтип (подтип)

Иерархия в типах языка, в результате чего операция над типом может выполняться и над подтипом, а не над разными типами. Например, целое число будет подтипом числа и имеет те же операции, в отличие от типа строки. (Симула 67).

Назначение по умолчанию

Присваивают содержимое переменной, если она не равна нулю, иначе присваивают значение замены, указанное оператором?? (C #)

var x = y ?? 0   

Голодание

Хойтинг: заключается в том, чтобы переместить в начале того же пространства видимости, область, все, что декларируется внутри. Переменные, объявленные в теле функции, будут представлены интерпретатором в начале функции. Можно вызвать определенную функцию после, потому что все они объявлены интерпретатором в начале сценария (но определение анализируется в его расположении в коде). JavaScript использует hoisting.

Функции

Анонимный или лямбда

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

Ограда

Требуется объявить элемент внутри другого элемента и назначить его в качестве возвращаемого значения. Будучи включенной в другую функцию, она имеет доступ к своим переменным, что позволяет считывать и редактировать переменные, объявленные внутри функции, из более глобальной области.
Для использования ограждения возвращаемое значение функции контейнера присваивается переменной, и эта переменная рассматривается как функция. JavaScript использует забор в качестве конструктора объектов с параметрами. (Схема 1975).

Контракт (программирование по)

Убедитесь, что методы и объекты соответствуют определенным условиям. В случае функции устанавливаются предусловия на аргументы и постусловия на возвращаемое значение. Они обязательны в языке, который устанавливает эту концепцию, но их можно добавить на любом языке. (Эйфель, 1986).
Пример:

put(message : STRING) is
require
  not message.empty     -- la chaîne ne doit pas être vide
do
  ... instructions...
ensure 
  ... -- conditions sur le message pour accepter le retour

end

Монада

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

Именованный параметр

Вызов функции с именем аргумента и значением, которое ему присваивается. Пример функции с аргументами int x и int y:

point(x : 10, y: 20)

Это позволяет задавать параметры в любом порядке и опускать их, если они необязательны. (IDL 1977).

Первая - класс

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

Staged (удалено)

Удаленное программирование - это определение функций, выполняемых при наличии необходимых данных и в зависимости от типа данных. Она может выполняться частично поэтапно. Это было описано в статье Уильяма Л. Шерлиса в 1986 году и реализовано в «Юлии и других языках».
Компилятор выполняет какое-то программирование на стажировке, поскольку определяется способ выполнения последующих действий в зависимости от данных (исходных кодов), данных программе.

Кортеж

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

Итерации

Генератор

Ключевое слово yield в функции возвращает значение, как и инструкция return, но в цикле, который таким образом может последовательно возвращать несколько значений. Следующее значение считывается при каждом вызове функции, которая вызывает вычисление следующего значения. Обработка функции приостанавливается при обнаружении слова yield, значение возвращается и возобновляется следующим вызовом. (CLU 1975).

Итератор

Объект с методами сканирования содержимого таблицы или коллекции, заданными в качестве параметра. (CLU 1975).

Список в понимании

Повторять содержимое списка по одной инструкции, которая фильтрует его и создает другой список. Этот пример в Julia умножает элементы массива на два. Можно заменить x * 2 условием для выбора.

y = [ x * 2 for x in 1:50]

(SETL 1967).

Объекты

Аспект

Аспект - это набор вопросов, а концерн - это группа инструкций, взаимодействующая с объектами программы. Один аспект можно заменить другим, чтобы применить программу к другому домену или типу обработки. (Расширение Java Hyper/J в 2001 году компанией IBM).

Наследство

Наследство добавляет к классу атрибуты и методы класса, который он наследует. (Симула 67).

Интерфейс

Класс, содержащий объявленные, но неопределенные методы. Когда класс наследует интерфейс, он должен дать определение каждому из своих методов.

Сообщение или событие

Объекты могут взаимодействовать, вызывая свои соответствующие методы, как в C++, или они могут делать это, как в Smalltak или Objective-C, отправляя друг другу сообщения. Каждый объект имеет наушники в ожидании сообщений.
Такие языки, как JavaScript, также поддерживают этот режим взаимодействия. (Смолталк 1970).

Миксин/линия

Класс с доступом к методам других классов. Практически с добавленными интерфейсами, методы которых имеют определение и атрибуты. Добавление методов может быть выполнено во время выполнения. (Флавор, 1986)
Черта - миксин без атрибута.

Прототип модели

Придуманный в Smalltalk (1970) и по-своему взятый JavaScript, заключается в динамическом создании объектов и замене наследия клонированием. Преимущество модели классов - возможность самой программе создавать и редактировать объекты.

Синтаксис

Перегруженность операторов/полиморфизм ad hoc

Операторы переопределяются в программе для выполнения различных операций в зависимости от объектов, которые они связывают. (АЛГОЛ 68).

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

Последовательность символов, представляющая команду поиска, и, возможно, замена в тексте в соответствии с грамматикой. (Изобретатель Стивен Клин в 1956 году, язык AWK в 1977 году).

Растяжимость

Некоторые языки, такие как TCL, позволяют добавлять новые конструкции к самому языку.

Настроенный макрос

Конструкция с параметрами, с которыми связано определение, которое заменит конструкцию при компиляции.

Тройной оператор

Формулировка: if x = = y then a1 else a2 может быть заменена на :

x == y ? a1 : a2 

Слайды

Упрощенный синтаксис для чтения или замены строки элементов в таблице. В ALGOL 68 уже пишется [x: y] для обозначения интервала между x и y в списке элементов.

Процесс

Цель

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

Конкуренция

Возможность проводить параллельную обработку, возможно, с взаимодействием между ними. (Описана Дейкштрой в 1965 году).

Принуждение

Вместо определения шагов обработки, каждый из которых зависит от выполнения предыдущего, определяются свойства элемента, когда все свойства имеют необходимое значение, выполняется действие. (Пролог III 1989).

Сорутина

Блок команд (рутина, функция), обработка которого прерывается или возобновляется в зависимости от внешних команд. В то время как функция взаимодействует с инструкцией возврата. (Симула 67).

Распределенный

Возможность программы вращать модули или объекты на разных компьютерах. Это выходит за рамки конкуренции, которая работает на одном компьютере.

Исключение

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

Логика

В логическом программировании действия являются оценками, а поток направлен на разрешение выражений. Это случай Пролога, и это добавилось в качестве расширения на другие языки.
Первый язык логических выводов - Пролог (1972).

Совпадение шаблона

Сталкивается с рядом возможных условий и выполняет действие, связанное с соответствующим ему условием. (СНОБОЛ 1962).

Обещаемая

Также называется возможным, будущим, отсроченным, awais, promise является объектом, который можно использовать, когда его поля действительно заполнены и его атрибуты имеют значение. Когда это происходит, он становится активным и учитывается в текущем лечении. Реализован многими языками, включая C++ 11, JavaScript, Scala, Visual Basic 11, C # 5.
В примере JavaScript + HTML promise может быть создан с помощью действия пользователя, и асинхронный ответ, когда необходимые значения получены с сервера.
Концепция, первоначально представленная несколькими авторами в 1976 - 1977 годах, была впервые реализована в Act 1 (1981) и MultiLisp (1985).

Реактивное (программирование)

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

Размышление

Способность программы анализировать собственный код и улучшать его по результатам. Это предполагает построение программы в виде подведомственного дерева.

Список

Коллекторский гараж

Диспетчер выделения памяти, который периодически извлекает освободившиеся области для удаления фрагментации и обеспечения доступа к большему пространству. (Лисп 1960 +).

Настойчивость

Состояние объектов и, возможно, переменных автоматически сохраняется при прерывании программы и восстанавливается при ее перезаписи. (MATHLAB 1964).

RII (инициализация получения ресурсов)

Автоматическое управление памятью, введенное с C++, где расположения автоматически освобождаются при удалении используемых объектов. (C++ 1984).

Показатели

Ленивая оценка

Оценка аргумента или выражения в целом откладывается до того момента, когда результат необходим для дальнейшей обработки. Это может значительно ускорить лечение. (Описано в 1976 году).

Многозадачность

Компиляция функции с универсальными аргументами в нескольких версиях по одному для каждого типа аргументов.

Портативность

Переносимость происходит через промежуточный язык (первый - UNCOL в 1958 году), работающий на виртуальной машине, реализованной на каждой системе.

AOT (Впереди времени)

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

JIT (Jast-In-Time)

Виртуальная машина, которая компилирует исходный код или часть исходного кода на родном языке во время каждого сеанса перед выполнением собственного кода. (Лисп, 1958 ).


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

См. также...

Парадигмы программирования.

Будущее языков программирования.