A+
A+ | |
Тип исполнения: | Матричный |
---|---|
Появился в: | 1988 |
Автор(ы): | Артур Уитни |
Релиз: | 4.18 |
Типизация данных: | строгая, динамическая |
Испытал влияние: | APL |
Повлиял на: | K |
A+ (Русское название: А Плюс) — язык программирования, потомок языка A, который, в свою очередь, был создан как замена APL.
A+ был создан в Morgan Stanley командой разработчиков во главе с Артуром Уитни (Arthur Whitney). В 1988 году Уитни создал язык A; он задумывался как бизнес-ориентированная реализация APL, способная выполняться на SunOS (платформе для распределенных вычислений) и эффективно обрабатывать большие объемы данных. Позднее другие разработчики доработали язык, добавив графический интерфейс пользователя с автоматической синхронизацией переменных и соответствующих виджетов (средств отображения переменных) и ряд других возможностей. В 1992 году новый язык был официально назван A+ (+ в честь главного из добавленных элементов — графического интерфейса).
Особенности языка[править]
A+ использует набор символов APL, поэтому разработка на нем сопряжена с теми же сложностями. Основной средой разработки на A+ является XEmacs с соответствующим расширением и шрифтом kapl. В поставку языка входит схема клавиатуры с нанесенными на нее специальными символами шрифта.
Программа на A+ состоит из определений функций, команд присвоения и вызовов функций. В отличие от APL, команды разделяются точкой с запятой, и поэтому могут занимать несколько строк.
Функция может принимать до 9 аргументов; если аргументов два, вместо обычного префиксного вызова функции можно использовать инфиксный.
Элементарные функции разделяются на три основных типа. Скалярные функции применяются независимо к каждому элементу массива, хотя синтаксис позволяет записывать это как применение функции к массиву в целом; к ним относятся арифметические, логические и некоторые математические функци. Структурные функции определяются в терминах индексов массива, меняя местами или выбирая элементы массива, не изменяя их. Наконец, специализированные функции работают с массивом в целом и изменяют его; к ним относится, например, функция инвертирования матрицы.
Большинство структурных функций (Catenate, Take, Drop, Reverse, Rotate, Replicate и Expand) и функции, полученные в результате использования операторов Reduce и Scan, применяются к главной оси правого аргумента; его элементами считаются срезы массива, перпендикулярные этой оси. Понятие главной оси и элемента массива обобщаются для случая m главных осей: массив рассматривается как блок данных (frame) размерности m, содержащий ячейки (cell) размерности n. Функцию f можно модифицировать так, чтобы она применялась ко всем ячейкам размерности n, оператором ранга f@n.
Отображаемые файлы — это файлы, представленные как массивы. За счет того, что в физическую память загружаются только используемые части файлов, этот механизм позволяет работать с большими объемами файлов.
Механизм зависимостей между переменными позволяет запоминать связи между ними и при изменении некоторой переменной автоматически пересчитывать все зависимые от нее. В частности, это позволяет легко реализовать приложение-электронную таблицу.
Механизм обратной связи (callback) реализует обработку асинхронных событий посредством автоматического запуска ассоциированных с ними функций.
Контексты позволяют отдельным пакетам и инструментам разделять свои пространства имен. В наши дни A+ находится в свободном доступе, хотя и не является активно используемым языком.
Элементы синтаксиса: Комментарий до конца строки ⍝ Регулярное выражение идентификатора переменной [a-zA-Z][_a-zA-Z0-9]* Присваивание значения переменной varname ← value Блок { … } Определение функции f{arg1; …; argN} : fBody Вызов функции f{arg1; …; argN} Последовательность ; Логотип A+
Схема клавиатуры для работы с A+
Ссылки: Основной сайт A+ Примеры: Hello, World!: Пример для версий A+ 4.18 Строковые литералы можно заключать как в одинарные, так и в двойные кавычки.
См. также[править]
Ссылки[править]
В другом языковом разделе Википедии есть более полная статья A+ (programing language)(англ.) Вы можете помочь проекту, расширив текущую статью с помощью перевода.
|