APL (язык программирования) - APL (programming language)

APL
ПарадигмаМножество, функциональный, структурированный, модульный
РазработаноКеннет Э. Айверсон
РазработчикЛарри Брид, Дик Латвелл, Роджер Мур и другие
Впервые появился27 ноября 1966 г.; 53 года назад (1966-11-27)[1]
Стабильный выпуск
ISO / IEC 13751: 2001/1 февраля 2001 г.; 19 лет назад (2001-02-01)
Печатная дисциплинаДинамический
ПлатформаКросс-платформа
ЛицензияПроприетарный, Открытый исходный код
Основной реализации
  • APL360
  • APL1130
  • APL * Plus
  • Sharp APL
  • APL2
  • Dyalog APL
  • NARS2000
  • APLX
  • GNU APL
Под влиянием
Математические обозначения
Под влиянием

APL (назван в честь книги Язык программирования)[3] это язык программирования разработан в 1960-х годах Кеннет Э. Айверсон. Его центральный тип данных - многомерный массив. Он использует большой спектр специальные графические символы[4] для представления большинства функций и операторов, что приводит к очень сжатому коду. Это оказало важное влияние на развитие концептуального моделирования, электронные таблицы, функциональное программирование,[5] и пакеты компьютерной математики.[6] Он также вдохновил несколько других языков программирования.[7][8]

История

Математические обозначения

А математическая запись для управления массивами был разработан Кеннет Э. Айверсон, начиная с 1957 г. Гарвардский университет. В 1960 году он начал работать в IBM где он развил это обозначение с Адин Фалькофф и опубликовал в своей книге Язык программирования в 1962 г.[3] В предисловии излагается его посылка:

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

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

Айверсон также использовал свои обозначения в проекте главы. Язык программирования, написанный для книги, с которой он писал Фред Брукс, Автоматическая обработка данных, который будет опубликован в 1963 году.[9][10]

В 1979 году Айверсон получил Премия Тьюринга за работу над APL.[11]

Разработка на язык компьютерного программирования

Еще в 1962 году первая попытка использовать нотацию для описания полной компьютерной системы произошла после того, как Фалькофф обсудил с Уильямом Картером свою работу по стандартизации набора инструкций для машин, которые впоследствии стали IBM System / 360 семья.

В 1963 году Герберт Хеллерман, работая в Институте системных исследований IBM, ввел часть обозначений в IBM 1620 компьютер, и он использовался студентами в специальном курсе средней школы по вычислению трансцендентных функций путем суммирования рядов. Студенты протестировали свой код в лаборатории Хеллермана. Эта реализация части обозначений получила название персонализированного транслятора массива (PAT).[12]

В 1963 году Фалькофф, Айверсон и Эдвард Х. Сассенгут-младший. все сотрудники IBM использовали обозначения для формального описания IBM System / 360 архитектура и функциональность машин серии, в результате чего была опубликована статья в Журнал IBM Systems в 1964 году. После того, как это было опубликовано, команда обратила свое внимание на реализацию нотации в компьютерной системе. Одним из мотивов такой направленности реализации был интерес Джона Л. Лоуренса, у которого были новые обязанности с Научно-исследовательские партнеры образовательная компания, купленная IBM в 1964 году. Лоуренс попросил Айверсона и его группу помочь использовать язык в качестве инструмента для разработки и использования компьютеров в образовании.[13]

После Лоуренс М. Брид и Филип С. Абрамс из Стэнфордского университета присоединились к команде IBM Research, они продолжили свою предыдущую работу над реализацией, запрограммированной в FORTRAN IV для части обозначений, которые были сделаны для IBM 7090 компьютер, работающий на IBSYS Операционная система. Эта работа была завершена в конце 1965 года и впоследствии получила название IVSYS (от системы Iverson). Основа этой реализации была подробно описана Абрамсом в техническом отчете Стэнфордского университета «Интерпретатор нотации Айверсона» в 1966 году, академический аспект этого формально контролировался Никлаус Вирт.[14] Подобно системе PAT Хеллермана ранее, эта реализация не включала набор символов APL, но использовала специальные английские зарезервированные слова для функций и операторов. Позднее система была адаптирована для совместное времяпровождение системы, и к ноябрю 1966 г. она была перепрограммирована для IBM System / 360 Модель 50 компьютер работал в режиме разделения времени и использовался внутри IBM.[15]

Аппаратное обеспечение

Шарики IBM (одно распознавание текста) с зажимом, монета 2 евро на весы
Вид программиста на раскладку клавиатуры IBM 2741 со вставленной печатающей головкой элемента набора APL

Ключевое достижение в способности эффективно использовать APL до широкого использования электронно-лучевой трубки (ЭЛТ ) терминалов, была разработка специального Пишущая машинка IBM Selectric сменный элемент набора текста со всеми специальными символами APL на нем. Это использовалось на рабочих станциях терминалов для печати на бумаге, использующих пишущую машинку Selectric и механизм печатных элементов, таких как IBM 1050 и IBM 2741 Терминал. Колпачки можно было разместить над обычными клавишами, чтобы показать, какие символы APL будут вводиться и набираться при нажатии этой клавиши. Впервые программист мог печатать и видеть правильные символы APL, используемые в нотации Айверсона, и не был вынужден использовать их неуклюжие английские ключевые слова. У Фалькоффа и Айверсона были специальные печатные элементы APL Selectric 987 и 988, разработанные в конце 1964 года, хотя компьютерная система APL для их использования отсутствовала.[16] Айверсон процитировал Фалькоффа как вдохновение для идеи использования элемента ввода IBM Selectric для набора символов APL.[17]

Многие символы APL, даже с символами APL на печатном элементе Selectric, по-прежнему приходилось вводить, вычеркивая два оставшихся символа элемента. Примером может служить повысить оценку персонаж, который должен был быть сделан из дельта (Shift-H) и Инсульт Шеффера (Shift-M). Это было необходимо, потому что набор символов APL был намного больше, чем 88 символов, разрешенных для элемента набора текста, даже когда буквы были ограничены верхним регистром (заглавными буквами).

Коммерческая доступность

Первый интерактивный вход в APL и создание рабочего пространства APL было сделано в 1966 году Ларри Бридом с помощью терминала IBM 1050 в лаборатории IBM Mohansic Labs недалеко от Исследовательский центр Томаса Дж. Уотсона, дом APL, в Yorktown Heights, Нью-Йорк.[16]

IBM несла основную ответственность за вывод APL на рынок. APL был впервые доступен в 1967 году для IBM 1130 в качестве APL1130.[18][19] Он занимал всего 8k 16-битных слов памяти и использовал выделенный жесткий диск объемом 1 мегабайт.

APL закрепился на системах с разделением времени мэйнфреймов с конца 1960-х до начала 1980-х годов, отчасти потому, что он будет поддерживать нескольких пользователей в системах с более низкими характеристиками, которые не имели преобразование динамических адресов аппаратное обеспечение.[20] Дополнительные улучшения производительности для избранных IBM System / 370 системы мэйнфреймов включали Микрокод APL Assist в котором некоторая поддержка выполнения APL была включена в процессор прошивка, в отличие от реализации полностью программным обеспечением более высокого уровня. Несколько позже, когда в середине-конце 1980-х годов наконец стало доступно оборудование с подходящими характеристиками, многие пользователи перенесли свои приложения в среду персональных компьютеров.

Ранние интерпретаторы IBM APL для оборудования IBM 360 и IBM 370 реализовывали собственное многопользовательское управление вместо того, чтобы полагаться на службы хоста, поэтому они были их собственными системами разделения времени. Впервые представленный в 1966 году, APL360[21][22][23] система была многопользовательским интерпретатором. Возможность программного обмена данными с операционной системой для получения информации и установки системных переменных интерпретатора была реализована с помощью специальных привилегированных функций «двутавровой балки» с использованием обоих монадический и диадический операции.[24]

В 1973 году IBM выпустила APL.SV, который был продолжением того же продукта, но предлагал общие переменные как средство доступа к объектам вне системы APL, например к файлам операционной системы. В середине 1970-х интерпретатор мэйнфрейма IBM был даже адаптирован для использования на IBM 5100 настольный компьютер с небольшой ЭЛТ и клавиатурой APL, тогда как большинство других небольших компьютеров того времени предлагали только БАЗОВЫЙ. В 1980-х годах VSAPL программный продукт широко использовался Система разговорного монитора (CMS), Вариант разделения времени (TSO), ВСПЦ, МУЗЫКА / SP, и CICS пользователей.

В 1973–1974 годах Патрик Э. Хагерти руководил внедрением интерпретатора APL Университета Мэриленда для линии 1100 Sperry. UNIVAC серии 1100/2200 мэйнфрейм-компьютеры.[25] В то время у Сперри ничего не было. В 1974 году студенту Алану Стеббенсу была поручена внутренняя функция.[26] Xerox APL был доступен с июня 1975 года для мейнфреймов Xerox 560 и Sigma 6, 7 и 9, работающих под управлением CP-V и для Honeywell CP-6.[27]

В 1960-х и 1970-х годах возникло несколько фирм с разделением времени, которые продавали услуги APL с использованием модифицированных версий IBM APL360.[23] устный переводчик. В Северной Америке наиболее известными были I. P. Sharp Associates, Корпорация научного разделения времени (STSC), ресурсы с разделением времени (TSR) и Компьютерная Компания (ТСС). CompuServe также вышла на рынок в 1978 году с интерпретатором APL, основанным на модифицированной версии Digital Equipment Corp и Carnegie Mellon's, которая работала на 36-битных машинах DEC KI и KL. APL CompuServe был доступен как для коммерческого рынка, так и для службы информации для потребителей. С появлением первых менее дорогих мэйнфреймов, таких как IBM 4300, а позже и персональный компьютер, к середине 1980-х индустрия разделения времени практически исчезла.

Sharp APL был доступен из I. P. Sharp Associates, сначала как услуга разделения времени в 1960-х годах, а затем как программный продукт, начиная примерно с 1979 года. Sharp APL была продвинутой реализацией APL с множеством языковых расширений, таких как пакеты (возможность поместить один или несколько объектов в одну переменную), файловую систему, вложенные массивы и общие переменные.

Интерпретаторы APL были доступны от других производителей мэйнфреймов и мини-компьютеров, в частности Берроуз, Корпорация Control Data (CDC), Общие данные, Корпорация цифрового оборудования (DEC), Харрис, Hewlett Packard (HP), Siemens AG, Ксерокс, и другие.

Гарт Фостер из Сиракузский университет спонсировал регулярные встречи сообщества разработчиков APL в конференц-центре Minnowbrook в Сиракузах в г. Голубое горное озеро, Нью-Йорк. В последующие годы Юджин Макдоннелл организовал аналогичные встречи в Конференц-зал Асиломар недалеко от Монтерея, Калифорния, и в дюнах Пахаро, недалеко от Уотсонвилля, Калифорния. Группа особых интересов SIGAPL Ассоциация вычислительной техники продолжает поддерживать сообщество APL.[28]

Микрокомпьютеры

На микрокомпьютерах, которые стали доступны с середины 1970-х годов, БАЗОВЫЙ стал доминирующим языком программирования.[29] Тем не менее, некоторые микрокомпьютеры вместо этого предоставляли APL - первый из них Intel 8008 -основан MCM / 70 выпущенный в 1974 г.[30][31] и который в основном использовался в образовании.[32] Другой машиной того времени был Семейный компьютер VideoBrain, выпущенный в 1977 году, который поставлялся со своим диалектом APL под названием APL / S.[33]

В Commodore SuperPET, представленный в 1981 году, включал интерпретатор APL, разработанный Университет Ватерлоо.[34]

В 1976 году Билл Гейтс утверждал в своем Открытое письмо любителям который Корпорация Майкрософт внедрял APL для Intel 8080 и Motorola 6800 но имел «очень мало стимулов делать [это] доступным для любителей» из-за использование пиратского программного обеспечения.[35] Он так и не был выпущен.

APL2

Начиная с начала 1980-х, разработка IBM APL под руководством Джим Браун, реализовала новую версию языка APL, которая содержала в качестве основного усовершенствования концепцию вложенные массивы, где массив может содержать другие массивы, а также новые языковые функции, которые облегчили интеграцию вложенных массивов в рабочий процесс программы. Кен Айверсон, больше не контролировавший разработку языка APL, покинул IBM и присоединился к I. P. Sharp Associates, где одним из его главных вкладов было направление эволюции Sharp APL в соответствие с его видением.[36][37][38]

Поскольку другие поставщики были заняты разработкой интерпретаторов APL для нового оборудования, в частности Unix -основан микрокомпьютеры, APL2 почти всегда был стандартом, выбранным для новых разработок интерпретаторов APL. Даже сегодня большинство поставщиков APL или их пользователей ссылаются на совместимость APL2 как на аргумент в пользу этих продуктов.[39][40]

APL2 для мэйнфреймов IBM. IBM ссылается на свое использование для решения проблем, системного проектирования, прототипирования, инженерных и научных вычислений, экспертных систем,[41] для обучения математике и другим предметам, визуализации и доступа к базе данных[42] и впервые был доступен для CMS и TSO в 1984 г.[43] Версия APL2 Workstation (Windows, OS / 2, AIX, Linux, и Солярис ) последовал гораздо позже, в начале 1990-х.[нужна цитата ]

Современные реализации

Различные реализации APL от APLX, Dyalog и др. Включают расширения для объектно-ориентированного программирования, Поддержка для .NET Framework, Примитивы преобразования XML-массивов, графики, интерфейсы операционных систем и лямбда-исчисление выражения.

Производные языки

APL сформировал основу или повлиял на следующие языки:[нужна цитата ]

  • А и А +, альтернативный APL, последний с графическими расширениями.
  • FP, функциональный язык программирования.
  • Айви, интерпретатор для APL-подобного языка, разработанный Роб Пайк, и который использует ASCII как вход.[44]
  • J, который также был разработан Айверсоном и который использует ASCII с диграфы вместо специальных символов.[7]
  • K, закрытый вариант APL, разработанный Артуром Уитни.[8]
  • ЛЯПАС, а Советский расширение APL.[нужна цитата ]
  • MATLAB, инструмент численных расчетов.[6]
  • Ниал, язык программирования массивов высокого уровня с нотацией функционального программирования.
  • Полиморфный язык программирования, интерактивный расширяемый язык с похожим базовым языком.
  • S, язык статистического программирования (обычно теперь встречается в версии с открытым исходным кодом, известной как р ).
  • Speakeasy, интерактивная среда численных вычислений.
  • Язык Wolfram Language, язык программирования Mathematica.[45]

Языковые характеристики

Набор символов

APL критиковали и хвалили за выбор уникального нестандартного набора символов. Некоторые из тех, кто его изучает, становятся ярыми приверженцами, предполагая, что за идеей Айверсона о том, что используемые обозначения действительно имеют значение, стоит некоторый вес. В 1960-х и 1970-х годах немногие оконечные устройства и даже мониторы могли воспроизводить набор символов APL. В наиболее популярных из них использовались IBM Selectric механизм печати, используемый со специальным элементом типа APL. Один из первых APL линейные терминалы (только в линейном режиме, нет полноэкранный режим) - модель 745 Texas Instruments TI (около 1977 г.) с полным набором символов APL[46] который показал полудуплекс и полный дуплекс телекоммуникации режимы, для взаимодействия с APL совместное времяпровождение сервис или удаленный мэйнфрейм для выполнения задания на удаленном компьютере, называется RJE.

Со временем, с повсеместным использованием высококачественных графических дисплеев, печатающих устройств и Unicode поддержка, проблема с символьным шрифтом APL в значительной степени устранена. Однако для ввода символов APL необходимо использовать редакторы методов ввода, сопоставления клавиатуры, виртуальные / экранные наборы символов APL,[47][48] или удобные печатные платы с клавиатурой, которые могут расстроить новичков, привыкших к другим языкам программирования.[49][50][51] Исследование с участием новичков, не имеющих опыта работы с другими языками программирования, с участием старшеклассников показало, что набор и использование символов APL не мешали учащимся сколько-нибудь измеримым образом.[52]

В защиту использования APL, APL требует меньше кода для ввода, и сопоставления клавиатуры запоминаются со временем. Кроме того, сегодня производятся и используются специальные клавиатуры APL, а также бесплатные загружаемые шрифты для операционных систем, таких как Microsoft Windows.[53] Сообщаемый прирост производительности предполагает, что человек потратит достаточно времени на работу в APL, чтобы было полезно запомнить символы, их семантику и раскладки клавиатуры, не говоря уже о значительном количестве идиом для общих задач.[нужна цитата ]

Дизайн

В отличие от языков программирования с традиционной структурой, код APL обычно структурирован в виде цепочек монадический или же диадический функции, и операторы[54] действующий на массивы.[55] APL имеет много нестандартных примитивы (функции и операторы), которые обозначаются одним символом или комбинацией нескольких символов. Все примитивы имеют одинаковые приоритет, и всегда ассоциировать вправо. Таким образом, APL читать или лучше всего понять из справа налево.

В ранних реализациях APL (примерно 1970 г.) не было цикла программирования.управление потоком структуры, такие как делать или же пока петли и если-то-еще конструкции. Вместо этого они использовали операции с массивами и использовали структурное программирование конструкции часто не требовались, так как операция могла быть выполнена с полным массивом за один оператор. Например, йота функция (ι) может заменить цикл for итерация: ιN при применении к скалярному положительному целому числу дает одномерный массив (вектор) 1 2 3 ... N. Более поздние реализации APL обычно включают в себя всеобъемлющие управляющие структуры, так что структура данных и поток управления программой могут быть четко и чисто отделены.

Среда APL называется рабочая среда. В рабочем пространстве пользователь может определять программы и данные, т.е. значения данных существуют также вне программ, и пользователь также может манипулировать данными без необходимости определять программу.[56] В приведенных ниже примерах интерпретатор APL сначала вводит шесть пробелов перед ожиданием ввода пользователя. Его собственный вывод начинается с первого столбца.

      п  4 5 6 7
Назначает вектор значений, {4 5 6 7}, в переменную п, операция создания массива. Эквивалентное, но более краткое выражение APL было бы п 3 + 4. Несколько значений хранятся в массиве п, операция выполнена без формальных циклов или языка потока управления.
      п 4 5 6 7
Отобразить содержимое п, в настоящее время массив или вектор.
      п+48 9 10 11
4 теперь добавляется ко всем элементам вектора п, создавая 4-элементный вектор {8 9 10 11}.
Как и выше, интерпретатор APL отображает результат, потому что значение выражения не было присвоено переменной (с ).
      +/п22
APL отображает сумму компонентов вектора п, т.е. 22 (= 4 + 5 + 6 + 7) используя очень компактную нотацию: читать + / как «плюс, над ...», и небольшое изменение будет «умножить, над ...»
      м  +/(3+⍳4)      м22
Эти операции можно объединить в один оператор, помня, что APL вычисляет выражения справа налево: сначала 4 создает массив, [1,2,3,4], затем к каждому компоненту добавляется 3, которые суммируются, и результат сохраняется в переменной м, наконец, отображается.

В обычных математических обозначениях это эквивалентно: . Напомним, что математические выражения не читаются и не оцениваются справа налево.

Пользователь может сохранить рабочую область со всеми значениями, программами и статусом выполнения.

APL использует набор не-ASCII символы, которые являются расширением традиционных арифметических и алгебраических обозначений. Имея имена из одного символа для одной инструкции, несколько данных (SIMD ) векторные функции - это один из способов, с помощью которого APL позволяет компактно формулировать алгоритмы преобразования данных, такие как вычисления Игра жизни Конвея в одной строке кода.[57] Практически во всех версиях APL теоретически можно выразить любую вычислимую функцию в одном выражении, то есть в одной строке кода.

Из-за необычного набор символов, многие программисты используют специальные клавиатуры с клавишами APL для написания кода APL.[58] Хотя существуют различные способы написания кода APL, используя только символы ASCII,[59] на практике это почти никогда не делается. (Можно подумать, что это подтверждает тезис Айверсона о обозначение как инструмент мысли.[60]) Большинство, если не все современные реализации используют стандартные раскладки клавиатуры со специальными сопоставлениями или редакторы методов ввода для доступа к символам, отличным от ASCII. Исторически сложилось так, что шрифт APL был отличительным, с прописными курсивными буквенными символами и вертикальными цифрами и символами. Большинство производителей продолжают отображать набор символов APL в пользовательском шрифте.

Защитники APL[ВОЗ? ] утверждают, что примеры так называемых код только для записи (плохо написанный и почти непонятный код) почти всегда являются примерами плохой практики программирования или ошибок новичков, которые могут возникнуть на любом языке. Защитники также утверждают, что они намного более производительны с APL, чем с более традиционными компьютерными языками, и что рабочее программное обеспечение может быть реализовано за гораздо меньшее время и с гораздо меньшим количеством программистов, чем при использовании других технологий.[нужна цитата ]

Они также могут утверждать, что благодаря своей компактности и краткости APL хорошо подходит для крупномасштабной разработки программного обеспечения и сложности, поскольку количество строк кода может быть значительно уменьшено. Многие сторонники и практики APL также рассматривают стандартные языки программирования, такие как КОБОЛ и Ява как сравнительно утомительный. APL часто встречается там, где важно время вывода на рынок, например, в торговых системах.[61][62][63][64]

Терминология

APL проводит четкое различие между функции и операторы.[54][65] Функции принимают массивы (переменные, константы или выражения) в качестве аргументов и возвращают массивы в качестве результатов. Операторы (аналогично функции высшего порядка ) принимают функции или массивы в качестве аргументов и производят связанные функции. Например, сумма функция получается путем применения снижение оператор к добавление функция. Применяя тот же оператор сокращения к максимум Функция (которая возвращает большее из двух чисел) порождает функцию, которая возвращает наибольшее значение из группы (вектора) чисел. В языке J Айверсон заменил термины глагол за функция и наречие или же соединение за оператор.

APL также идентифицирует те функции, встроенные в язык и представленные символом или фиксированной комбинацией символов, как примитивы. Большинство примитивов - это либо функции, либо операторы. Кодирование APL в основном представляет собой процесс написания непримитивных функций и (в некоторых версиях APL) операторов. Однако некоторые примитивы не считаются ни функциями, ни операторами, в первую очередь присваиванием.

Некоторые слова, используемые в литературе по APL, имеют значения, которые отличаются как от математических, так и от компьютерных наук в целом.

Терминология операторов APL
СрокОписание
функцияоперация или отображение, которое принимает ноль, один (правый) или два (левый и правый) аргументы, которые могут быть скалярами, массивами или более сложными структурами, и могут возвращать аналогичный сложный результат. Функция может быть:
  • Примитивный: встроенный и представлен одним глифом;[66]
  • Определено: как именованный и упорядоченный набор программных операторов;[66]
  • Получено: как комбинация оператора с его аргументами.[66]
множествообъект с нулевой или большей оценкой данных ортогональный размеры в рядовой порядок, в котором каждый элемент является примитивным скалярным элементом данных или другим массивом.[67]
нильскийне принимая и не требуя никаких аргументов,[68]
монадическийтребуя только одного аргумента; справа для функции, слева для оператора, унарного[68]
диадическийтребуя как левый, так и правый аргумент, двоичный[68]
амбивалентный или монадическийвозможность использования в монадическом или диадическом контексте, позволяя опустить его левый аргумент[66]
оператороперация или отображение, которое принимает одну (слева) или две (слева и справа) функцию или аргументы со значениями массива (операнды) и выводит функцию. Оператором может быть:
  • Примитивный: встроенный и представлен одним глифом;[66]
  • Определено: как именованный и упорядоченный набор программных операторов.[66]

Синтаксис

APL имеет явное представление функций, операторов и синтаксиса, что обеспечивает основу для четкого и явного изложения расширенных возможностей языка и инструментов для экспериментов с ними.[69]

Примеры

Привет, мир

Это отображает "Привет, мир ":

'Привет, мир'

"Hello World", пример пользовательского сеанса на YouTube[70]

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

Отображается строковая константа Hello, world, указанная выше, потому что display является действием по умолчанию для любого выражения, для которого не указано действие явно (например, присвоение, параметр функции).

Возведение в степень

Другой пример этой темы - возведение в степень в APL записывается как "2*3", что означает возведение 2 в степень 3 (это будет записано как"2^3"на некоторых других языках и"2**3"в FORTRAN и Python): многие языки используют * для обозначения умножения, как в 2 * 3, но APL использует 2×3 для этого. Однако, если база не указана (как в случае с утверждением "*3"в APL, или"^3"на других языках), в большинстве других языков программирования может возникнуть синтаксическая ошибка. Однако APL предполагает, что отсутствующее основание является константой натурального логарифма. е (2,71828 ....), так что интерпретация "*3" в качестве "2.71828*3".

Простая статистика

Предположим, что Икс представляет собой массив чисел. потом (+ / X) ÷ ⍴X дает среднее значение. Чтение справа налево, ⍴X дает количество элементов в X, и поскольку ÷ является диадическим оператором, член слева от него также является обязательным. Он заключен в скобки, так как в противном случае было бы взято X (так что суммирование было бы X ÷ ⍴X, каждого элемента X, деленного на количество элементов в X), и + / X добавляет все элементы X. Основываясь на этом, ((+/((Икс - (+/Икс)÷⍴Икс)*2))÷⍴Икс)*0.5 вычисляет стандартное отклонение. Кроме того, поскольку присваивание является оператором, оно может появляться в выражении, поэтому

SD((+/((Икс - средний(Т+/Икс)÷⍴Икс)*2))÷⍴Икс)*0.5

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

Выберите 6 номера лотереи

Это следующее выражение немедленного режима генерирует типичный набор Выберите 6 лотерея числа: шесть псевдослучайный целые числа от 1 до 40, гарантированное неповторение, и отображает их отсортированными по возрастанию:

Икс[Икс6?40]

Вышеупомянутое кратко делает многое; хотя это кажется сложным для нового APLer. Он сочетает в себе следующие APL функции (также называемый примитивы[71] и глифы[72]):

  • Первой выполняется (APL выполняется от крайнего правого к крайнему левому) - это двоичная функция. ? (назван иметь дело когда диадический), который возвращает вектор состоящий из выбранного числа (левый аргумент: 6 в данном случае) случайных целых чисел в диапазоне от 1 до указанного максимума (правый аргумент: 40 в данном случае), который, если указанная максимальная длина вектора ≥ вектора, гарантированно будет неповторяющимся ; таким образом, сгенерируйте / создайте 6 случайных целых чисел в диапазоне от 1 до 40.[73]
  • Тогда этот вектор назначенный () к переменной Икс, потому что он понадобится позже.
  • Тогда этот вектор отсортированный в порядке возрастания монадическим функция, правым аргументом которой является все, что находится справа от нее, до следующего несбалансированного закрывающая скобка или закрывающая скобка. Результат - это индексы, которые будут располагать аргумент в порядке возрастания.
  • Тогда вывод используется для индексации переменной Икс, который мы сохранили ранее для этой цели, тем самым выбрав его элементы в Восходящий последовательность.

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

? также имеет монадический эквивалент, называемый рулон, который просто возвращает одно случайное целое число от 1 до его единственного операнда [справа от него] включительно. Таким образом, ролевая игра программа может использовать выражение ?20 бросить двадцатигранный кубик.

простые числа

Следующее выражение находит все простые числа от 1 до R. Как во времени, так и в пространстве сложность вычислений составляет Обозначение Big O ).

(~рр∘.×р)/р1ιр

Выполнение справа налево означает:

  • Йота ι создает вектор, содержащий целые числа из 1 к р (если R = 6 в начале программы, ιR является 1 2 3 4 5 6)
  • Уронить первый элемент этого вектора ( функция), т.е. 1. Так 1 ↓ ιR является 2 3 4 5 6
  • Набор р к новому вектору (, назначение примитивный), т.е. 2 3 4 5 6
  • В / копировать Оператор является двоичным (двоичным), и интерпретатор сначала оценивает его левый аргумент (полностью в скобках):
  • Генерировать внешний продукт из р умножается на р, т.е. матрица, являющаяся Таблица умножения R на R (°.× оператор), т.е.
4681012
69121518
812162024
1015202530
1218243036
  • Постройте вектор такой же длины, как р с 1 в каждом месте, где соответствующий номер в р находится во внешней матрице продукта (, установить включение или же элемент или же Эпсилон оператор), т.е. 0 0 1 0 1
  • Логически отрицать (нет) значения в векторе (заменить нули на единицы и единицы на нули) (, логичный нет или же Тильда оператор), т.е. 1 1 0 1 0
  • Выберите элементы в р для которого соответствующий элемент 1 (/ копировать оператор), т.е. 2 3 5

(Обратите внимание, это предполагает, что происхождение APL равно 1, т.е. индексы начинаются с 1. APL может быть настроен на использование 0 в качестве источника, так что ι6 является 0 1 2 3 4 5, что удобно для некоторых расчетов.)

Сортировка

Следующее выражение сортирует список слов, хранящийся в матрице X, в соответствии с длиной слова:

Икс[Икс+.' ';]

Игра Жизни

Следующая функция life, написанная в Dyalog APL, принимает логическую матрицу и вычисляет новое поколение в соответствии с Игра жизни Конвея. Он демонстрирует возможности APL для реализации сложного алгоритма в очень небольшом объеме кода, но его также очень трудно понять, если у человека нет глубоких знаний APL.

жизнь{1 .3 4=+/,¯1 0 1∘.¯1 0 1∘.⌽⊂}

Удаление HTML-тегов

В следующем примере, также Dyalog, первая строка назначает некоторый HTML-код переменной. текст а затем использует выражение APL для удаления всех тегов HTML (объяснение ):

      текст'  

Это выделенный текст.

'
{ /⍨ ~{∨≠}'<>'} текстЭтот является подчеркнул текст.

Использовать

APL используется для многих целей, включая финансовый и страхование Приложения,[74] искусственный интеллект,[75][76]нейронные сети[77]и робототехника.[78] Утверждалось, что APL - это расчет инструмент, а не язык программирования;[79] его символическая природа и возможности массива сделали его популярным среди эксперты в предметной области и специалисты по данным[80] кто не имеет или не требует навыков программист.

APL хорошо подходит для манипулирование изображениями и компьютерная анимация, где графические преобразования могут кодироваться как умножение матриц. Один из первых коммерческих домов компьютерной графики, Цифровые эффекты, произвел графический продукт APL под названием Видения, который использовался для создания телевизионных рекламных роликов и анимации к фильму 1982 года. Трон.[81] В последнее время Штормград симулятор гребли использует APL для реализации своей базовой логики, взаимодействия с промежуточным программным обеспечением конвейера рендеринга и большей части своего физический движок.[82]

Сегодня APL по-прежнему используется в широком спектре коммерческих и научных приложений, напримеруправление инвестициями,[74]управление активами,[83]здравоохранение,[84]и ДНК-профилирование,[85][86] и любителями.[87]

Известные реализации

APL360

Первой реализацией APL с использованием узнаваемых символов APL был APL360, работавший на IBM System / 360, и был завершен в ноябре 1966 г.[1] хотя в то время оставался в использовании только внутри IBM.[43] В 1973 году его разработчики, Ларри Брид, Дик Латвелл и Роджер Мур были награждены Премия Грейс Мюррей Хоппер от Ассоциация вычислительной техники (ACM). Оно было получено «за их работу по разработке и внедрению APL360, установившую новые стандарты простоты, эффективности, надежности и времени отклика для интерактивных систем».[88][89][90]

В 1975 г. IBM 5100 микрокомпьютер предлагается APL360[91] как один из двух встроенных интерпретируемых языков на основе ПЗУ для компьютера, в комплекте с клавиатурой и дисплеем, поддерживающими все специальные символы, используемые в языке.[92]

Значительные изменения в APL360 включали CMS / APL, в которой использовалась виртуальное хранилище возможности CMS и APLSV, который представил общие переменные, системные переменные и системные функции. Впоследствии он был перенесен на IBM System / 370 и ВСПЦ платформ до его окончательного выпуска в 1983 году, после чего он был заменен APL2.[43]

APL1130

В 1968 году APL1130 стала первой общедоступной системой APL,[93] создан IBM для IBM 1130. Он стал самым популярным Библиотека IBM Type-III программное обеспечение, выпущенное IBM.[94]

APL * Plus и Sharp APL

APL * Plus и Sharp APL - это версии APL360 с добавленными бизнес-ориентированными расширениями, такими как форматирование данных и средства для хранения массивов APL во внешних файлах. Они были совместно разработаны двумя компаниями, в которых работали различные члены первоначальной группы разработчиков IBM APL360.[95]

Две компании были I. P. Sharp Associates (IPSA), сервисная компания APL360, основанная в 1964 году Яном Шарпом, Роджером Муром и другими, и STSC, компания с разделением времени и консалтинговыми услугами, основанная в 1969 году Лоуренсом Бридом и другими. Вместе они разработали APL * Plus и после этого продолжали работать вместе, но разрабатывали APL отдельно как APL * Plus и Sharp APL. STSC перенесла APL * Plus на многие платформы с версиями, сделанными для VAX 11,[96] ПК и UNIX, тогда как IPSA применил другой подход к появлению Персональный компьютер и сделал Sharp APL доступным на этой платформе с помощью дополнительных PC-XT / 360 аппаратное обеспечение. В 1993 г. Soliton Incorporated была создана для поддержки Sharp APL и превратила Sharp APL в SAX (Sharp APL для Unix). По состоянию на 2018 год, APL * Plus продолжается как APL2000 APL + Win.

В 1985 году Ян Шарп и Дэн Дайер из STSC совместно получили Премия Кеннета Э. Айверсона за выдающийся вклад в APL.[97]

APL2

APL2 был значительной повторной реализацией APL от IBM, который был разработан в 1971 году и впервые выпущен в 1984 году. Он предоставляет множество дополнений к языку, наиболее заметным из которых является поддержка вложенных (непрямоугольных) массивов.[43] По состоянию на 2018 год он доступен для мэйнфреймов, работающих под управлением z / OS или же z / VM и рабочие станции работают AIX, Linux, Солнце Солярис, и Майкрософт Виндоус.[98]

Вся команда продуктов и услуг APL2 была удостоена награды Iverson в 2007 году.[97]

Dyalog APL

Dyalog APL был впервые выпущен Британский компания Dyalog Ltd.[99] в 1983 г.[100] и по состоянию на 2018 год, доступен для AIX, Linux (в том числе на Raspberry Pi ), macOS и Майкрософт Виндоус платформы. Он основан на APL2 с расширениями для поддержки объектно-ориентированного программирования[101] и функциональное программирование.[102] Лицензии бесплатны для личного / некоммерческого использования.[103]

В 1995 году двое из команды разработчиков - Джон Скоулз и Питер Доннелли - были награждены премией Айверсона за работу над переводчиком.[97] Гитте Кристенсен и Мортен Кромберг стали совместными обладателями премии Iverson Award в 2016 году.[104]

NARS2000

NARS2000 - это интерпретатор APL с открытым исходным кодом, написанный Бобом Смитом, известным разработчиком и разработчиком APL из STSC в 1970-1980-х гг. NARS2000 содержит расширенные функции и новые типы данных и изначально работает на Майкрософт Виндоус, и другие платформы под Вино.[105]

APLX

APLX - это кросс-платформенный диалект APL, основанного на APL2 и с несколькими расширениями, который впервые был выпущен Британский Компания MicroAPL в 2002 году. Хотя она больше не находится в разработке или в коммерческой продаже, теперь она доступна бесплатно от Dyalog.[106]

GNU APL

GNU APL - это бесплатная реализация расширенного APL, как указано в ISO / IEC 13751: 2001, и, таким образом, реализация APL2. Он работает в GNU / Linux и Windows с использованием Cygwin, и использует Unicode внутренне. Его написал Юрген Зауэрманн.[107]

Ричард Столмен, основатель Проект GNU, был одним из первых пользователей APL, который использовал его для написания текстового редактора в старшей школе летом 1969 года.[108]

Интерпретация и составление APL

APL традиционно интерпретируемый язык с языковыми характеристиками, такими как слабая типизация переменных не очень подходит для сборник.[109] Однако с массивами в качестве основной структуры данных[110] он предоставляет возможности для повышения производительности за счет параллелизм,[111] параллельные вычисления,[112][113] массивно параллельный Приложения,[114][115] и очень крупномасштабная интеграция (СБИС),[116][117] и с самого начала APL считался высокопроизводительным языком[118] - например, он был отмечен скоростью, с которой он мог выполнять сложные матричные операции, «потому что он работает с массивами и выполняет такие операции, как внутреннее обращение матрицы».[119]

Тем не менее, APL редко интерпретируется чисто, и методы компиляции или частичной компиляции, которые используются или использовались, включают следующее:

Распознавание идиомы

Большинство интерпретаторов APL поддерживают идиома признание[120] и оценивать общие идиомы как отдельные операции.[121][122] Например, оценивая идиому BV / ⍳⍴A как одну операцию (где BV является булевым вектором и А является массивом), создание двух промежуточных массивов не допускается.[123]

Оптимизированный байт-код

Слабая типизация в APL означает, что имя может ссылаться на массив (любого типа данных), функцию или оператор. Как правило, интерпретатор не может заранее знать, в какой форме он будет, и поэтому должен выполнять анализ, проверку синтаксиса и т. Д. Во время выполнения.[124] Однако в определенных обстоятельствах можно заранее определить, на какой тип будет ссылаться имя, а затем сгенерировать байт-код который может быть выполнен с уменьшенными накладными расходами времени выполнения. Этот байт-код также можно оптимизировать с помощью таких методов компиляции, как постоянное сворачивание или же исключение общего подвыражения.[125] Интерпретатор будет выполнять байт-код, если он присутствует и когда все сделанные предположения выполнены. Dyalog APL включает поддержку оптимизированного байт-кода.[125]

Компиляция

Компиляция APL был предметом исследований и экспериментов с тех пор, как язык впервые стал доступным; первым компилятором считается Burroughs APL-700[126] который был выпущен примерно в 1971 году.[127] Чтобы иметь возможность компилировать APL, необходимо наложить языковые ограничения.[126][128] APEX - это исследовательский APL-компилятор, написанный Роберт Бернеки и доступен под Общественная лицензия GNU.[129]

В STSC APL Compiler - это гибрид оптимизатора байт-кода и компилятора - он позволяет компилировать функции для Машинный код при условии, что его подфункции и глобальные объекты объявлен, но интерпретатор по-прежнему используется как библиотека времени исполнения и выполнять функции, которые не соответствуют требованиям компиляции.[130]

Стандарты

APL стандартизирован Американский национальный институт стандартов (ANSI) рабочая группа X3J10 и Международная организация по стандартизации (ISO) и Международная электротехническая комиссия (МЭК), Подкомитет 22 Объединенного технического комитета 1 ИСО / МЭК Рабочая группа 3. Основной язык APL определен в ISO 8485: 1989, а язык расширенного APL определен в ISO / IEC 13751: 2001.

Рекомендации

  1. ^ а б «Цитаты и анекдоты APL». jsoftware.com. jsoftware. Получено 14 апреля, 2018.
  2. ^ "std :: iota". cppreference.com.
  3. ^ а б Айверсон, Кеннет Э. (1962). Язык программирования. Вайли. ISBN  978-0-471-43014-8. Архивировано из оригинал 2014-10-27. Получено 2014-10-27.
  4. ^ Макинтайр, Дональд Б. (1991). «Язык как интеллектуальный инструмент: от иероглифов до APL». Журнал IBM Systems. 30 (4): 554–581. Дои:10.1147 / sj.304.0554. Архивировано из оригинал 4 марта 2016 г.. Получено 9 января, 2015.
  5. ^ "Цитата на премию ACM - Джон Бэкус". Awards.acm.org. 1977 г. Архивировано из оригинал 12 февраля 2008 г.. Получено 3 февраля, 2010.
  6. ^ а б Молер, Клив. «Рост MATLAB» (PDF). Архивировано из оригинал (PDF) 11 апреля 2009 г.. Получено 3 февраля, 2010.
  7. ^ а б "Библиография APL и J". Jsoftware.com. Получено 2 марта, 2010.
  8. ^ а б "Интервью с Артуром Уитни". Kx Systems. 4 января 2004 г. Архивировано с оригинал 4 апреля 2009 г.. Получено 2 марта, 2010.
  9. ^ Айверсон, Кеннет Э., «Автоматическая обработка данных: Глава 6: Язык программирования» В архиве 4 июня 2009 г. Wayback Machine, 1960, Черновик книги Брукса и Айверсона 1963 года, Автоматическая обработка данных.
  10. ^ Брукс, Фред; Айверсон, Кеннет (1963), Автоматическая обработка данных, John Wiley & Sons Inc.
  11. ^ "Цитата на премию Тьюринга 1979". Awards.acm.org. Архивировано из оригинал на 2009-12-23. Получено 3 февраля, 2010.
  12. ^ Хеллерман, Х. (июль 1964 г.). «Экспериментальная система персонализированного транслятора массива». Коммуникации ACM. 7 (7): 433–438. Дои:10.1145/364520.364573. S2CID  2181070.
  13. ^ Фалькофф, Адин Д .; Айверсон, Кеннет Э., «Эволюция APL», Уведомления ACM SIGPLAN 13, 1978-08.
  14. ^ Абрамс, Филип С., Интерпретатор "нотации Айверсона", Технический отчет: CS-TR-66-47, факультет компьютерных наук Стэнфордского университета, август 1966 г .;
  15. ^ Хей, Томас (2005). «Биографии: Кеннет Э. Айверсон». IEEE Annals of the History of Computing. Дои:10.1109 / MAHC.2005.4.
  16. ^ а б Порода, Ларри, «Первая терминальная сессия APL», APL Quote Quad, Association for Computing Machinery, Volume 22, Number 1, September 1991, p.2-4.
  17. ^ 19 августа 2009 г. Адин Фалькофф - Музей истории компьютеров. «Айверсон поблагодарил его за то, что он выбрал имя APL и представил пишущую машинку IBM с мячом для гольфа с заменяющей головкой, которая обеспечила знаменитый набор символов для представления программ».
  18. ^ Порода, Ларри (Август 2006 г.). "Как мы попали в APL1130". Вектор (Британская ассоциация APL). 22 (3). ISSN  0955-1433. Архивировано из оригинал на 2008-05-12. Получено 2007-04-02.
  19. ^ APL1130 Руководство В архиве 2011-02-21 на Wayback Machine, Май 1969 г.
  20. ^ «Вспоминая APL». Quadibloc.com. Получено 17 июня, 2013.
  21. ^ Фалькофф, Адин; Айверсон, Кеннет Э., «Руководство пользователя APL360» В архиве 2012-02-29 в Wayback Machine, IBM Research, Исследовательский центр Томаса Дж. Ватсона, Йорктаун-Хайтс, Нью-Йорк, август 1968 г.
  22. ^ "Терминальная система APL360" В архиве 2010-07-11 в Wayback Machine, IBM Research, Исследовательский центр Томаса Дж. Ватсона, март 1967 г.
  23. ^ а б Пакин, Сандра (1968). Справочное руководство APL360. Science Research Associates, Inc. ISBN  978-0-574-16135-2.
  24. ^ Фалькофф, Адин Д .; Айверсон, Кеннет Э.,Дизайн APL, Журнал исследований и разработок IBM, Volume 17, Number 4, July 1973. «Эти определяемые средой функции были основаны на использовании еще одного класса функций - названных« двутавровыми балками »из-за формы используемого для них символа - которые обеспечивают более общие возможности для связи между программами APL и менее абстрактными частями системы.Функции двутавровой балки были впервые введены системными программистами, чтобы позволить им выполнять инструкции System / 360 из программ APL и, таким образом, использовать APL как прямую помощь в их деятельность по программированию. Очевидное удобство функций этого типа, которые, казалось, были частью языка, привело к введению монадической функции двутавровой балки для прямого использования кем угодно. Различные аргументы этой функции давали информацию об окружающей среде, например доступное место и время суток ".
  25. ^ Минкер, Джек (январь 2004 г.). «Начало вычислительной техники и компьютерных наук в Университете Мэриленда» (PDF). Раздел 2.3.4: Мэрилендский университет. п. 38. Архивировано с оригинал (PDF) 10 июня 2011 г.. Получено 23 мая, 2011.CS1 maint: location (связь)
  26. ^ Стеббенс, Алан. "Как это все началось". Архивировано из оригинал на 2016-03-04. Получено 2011-05-22.
  27. ^ «Справочное руководство по языку и эксплуатации Xerox APL» (PDF).
  28. ^ «СИГАПЛ». Sigapl.org. Получено 17 июня, 2013.
  29. ^ «Пятьдесят лет BASIC, языка программирования, который сделал компьютеры персонализированными». time.com. ВРЕМЯ. 29 апреля 2014 г.. Получено 29 апреля, 2018.
  30. ^ "MCM Computers M70 / M700". old-computers.com. Архивировано из оригинал 3 апреля 2018 г.. Получено 8 апреля, 2018.
  31. ^ Стахняк, Стахняк (2011). Изобретение ПК: история MCM / 70. Университетское издательство Макгилла Квинса. ISBN  978-0-7735-3852-8.
  32. ^ Миллер, Майкл (17 декабря 2014 г.). «Компьютеры, проложившие путь для Альтаира». PCMagazine. Зифф Дэвис. Получено 29 апреля, 2018.
  33. ^ "Семейный компьютер VideoBrain", Популярная наука, Ноябрь 1978 г., реклама.
  34. ^ "Взгляд на SuperPet". ВЫЧИТАЙТЕ! Журнал прогрессивных вычислений. Small System Services Inc., декабрь 1981 г.. Получено 29 апреля, 2018.
  35. ^ Гейтс, Билл (31 января 1976 г.). «Открытое письмо любителям». Информационный бюллетень Homebrew Computer Club. Получено 29 апреля, 2018.
  36. ^ Хуэй, Роджер. "Вспоминая Кена Айверсона". keiapl.org. KEIAPL. Получено 10 января, 2015.
  37. ^ ACM A.M. Премия Тьюринга. "Кеннет Э. Айверсон - Цитата". amturing.acm.org. ACM. Получено 10 января, 2015.
  38. ^ ACM SIGPLAN. "APL2: Ранние годы". www.sigapl.org. ACM. Получено 10 января, 2015.
  39. ^ Micro APL. «Обзор системы APL». www.microapl.co.uk. Микро APL. Получено 10 января, 2015.
  40. ^ Робертсон, Грэм. «Персональный взгляд на APL2010». archive.vector.org.uk. Фото со стока - Журнал Британской ассоциации APL. Архивировано из оригинал 2 апреля 2015 г.. Получено 10 января, 2015.
  41. ^ Rodriguez, P .; Rojas, J .; Alfonseca, M .; Бургос, Дж. И. (1989). «Экспертная система по химическому синтезу, написанная на APL2 / PC». ACM SIGAPL APL Quote Quad. 19 (4): 299–303. Дои:10.1145/75144.75185. S2CID  16876053.
  42. ^ IBM. «APL2: язык программирования для решения проблем, визуализации и доступа к базе данных». www-03.ibm.com. IBM. Получено 10 января, 2015.
  43. ^ а б c d Фалькофф, Адин Д. (1991). «Семейство IBM APL-систем». Журнал IBM Systems. 30 (4): 416–432. Дои:10.1147 / sj.304.0416. S2CID  19030940.
  44. ^ Пайк, Роб (2018-03-25). "Айви". GoDoc. Архивировано из оригинал на 2019-08-13.
  45. ^ «Часто задаваемые вопросы о языке Wolfram Language». Вольфрам. Получено 20 февраля, 2020. LISP и APL были двумя ранними влияниями
  46. ^ Техасские инструменты (1977). «Полностраничная реклама TI 745: Представляем новый набор персонажей». Computerworld. 11 (27): 32. Получено 20 января, 2015.
  47. ^ Дьялог. «Шрифты и клавиатура APL». www.dyalog.com. Дьялог. Получено 19 января, 2015.
  48. ^ Смит, Боб. «Клавиатура NARS2000». www.sudleyplace.com. Боб Смит / NARS2000. Получено 19 января, 2015.
  49. ^ MicroAPL Ltd. «Введение в APL - символы APL». www.microapl.co.uk. MicroAPL Ltd. Получено 8 января, 2015.
  50. ^ Браун, Джеймс А .; Хокс, Брент; Тримбл, Рэй (1993). «Расширение набора символов APL». ACM SIGAPL APL Quote Quad. 24 (1): 41–46. Дои:10.1145/166198.166203.
  51. ^ Кромберг, Мортен. «Поддержка Unicode для APL». archive.vector.org.uk. Вектор, Журнал Британской ассоциации APL. Архивировано из оригинал 20 января 2015 г.. Получено 8 января, 2015.
  52. ^ Сюй, Аарон. «Информационная поддержка компьютерных наук и образование с APL». Дьялог, ООО. Получено 15 июля, 2016.
  53. ^ Dyalog, Inc. Шрифты и клавиатуры APL. http://www.dyalog.com/apl-font-keyboard.htm
  54. ^ а б MicroAPL. «Операторы». www.microapl.co.uk. MicroAPL. Получено 12 января, 2015.
  55. ^ Примитивные функции. «Примитивные функции». www.microapl.co.uk/. Получено 1 января, 2015.
  56. ^ Рабочая среда. «Рабочее пространство». www.microapl.co.uk. Получено 1 января, 2015.
  57. ^ "пример". Catpad.net. Архивировано из оригинал 8 июля 2013 г.. Получено 17 июня, 2013.
  58. ^ Символы APL. «Ввод символов APL». www.microapl.co.uk. Получено 1 января, 2015.
  59. ^ Дики, Ли, Список схем транслитерации APL, 1993
  60. ^ Айверсон К.Е. "Обозначение как инструмент мысли В архиве 2013-09-20 на Wayback Machine ", Коммуникации ACM, 23: 444-465 (август 1980).
  61. ^ Батенбург. «Эффективность APL». www.ekevanbatenburg.nl. Получено 1 января, 2015.
  62. ^ Ваксман. "Отличное программирование APL" (PDF). www.vaxman.de. Получено 1 января, 2015.
  63. ^ Янко, Вольфганг (май 1987 г.). «Исследование эффективности использования APL для программирования машины логического вывода». ACM SIGAPL APL Quote Quad. 17 (4): 450–456. Дои:10.1145/384282.28372.
  64. ^ Borealis. "Почему APL?". www.aplborealis.com. Получено 1 января, 2015.
  65. ^ Айверсон, Кеннет Э. «Словарь APL». www.jsoftware.com. JSoftware; Iverson Estate. Получено 20 января, 2015.
  66. ^ а б c d е ж «Концепции APL». Microapl.co.uk. Получено 3 февраля, 2010.
  67. ^ «Теория вложенных массивов». Nial.com. Архивировано из оригинал на 2011-07-09. Получено 3 февраля, 2010.
  68. ^ а б c "Programmera i APL", Бохман, Фрёберг, Студент, ISBN  91-44-13162-3
  69. ^ Айверсон, Кеннет Э. «Синтаксис и семантика APL». www.jsoftware.com. I. P. Sharp Associates. Получено 11 января, 2015.
  70. ^ Дьялог APL / W. "Создание отдельной программы Hello World в APL". www.youtube.com. Dyalog-APLтренер. Получено 11 января, 2015.
  71. ^ MicroAPL. «Примитивы APL». www.microapl.co.uk. MicroAPL. Получено 11 января, 2015.
  72. ^ NARS2000. «Шрифт APL - дополнительные символы APL». wiki.nars2000.org. NARS2000. Получено 11 января, 2015.
  73. ^ Фокс, Ральф Л. «Систематически случайные числа». www.sigapl.org. SIGAPL. Получено 11 января, 2015.
  74. ^ а б «Годовой отчет за 2017 год» (PDF). SimCorp. 1 февраля 2018 г.. Получено 3 апреля, 2018. Sofia - это платформа прямого управления инвестициями, такая как SimCorp Dimension. ... Sofia основана на языке кодирования APL, как и некоторые части SimCorp Dimension.
  75. ^ Ли, Жорж; Лелуш, Радди; Мейссонье, Винсент; Зарри, Джан Пьеро (1 сентября 1982 г.). «Использование APL в среде искусственного интеллекта». ACM SIGAPL APL Quote Quad. 13 (1): 183–191. Дои:10.1145/390006.802242. Получено 3 апреля, 2018.
  76. ^ Fordyce, K .; Салливан, Г. (1985). «Средства развития искусственного интеллекта». APL Quote Quad. APL 85 Conf. Proc. (15): 106–113. Дои:10.1145/255315.255347.
  77. ^ Альфонсека, Мануэль (июль 1990 г.). «Нейронные сети в APL». ACM SIGAPL APL Quote Quad. 20 (4): 2–6. Дои:10.1145/97811.97816. Получено 3 апреля, 2018.
  78. ^ Кромберг, Мортен. «Программирование роботов в APL». www.dyalog.com/. Получено 6 января, 2015.
  79. ^ Холмс, Вашингтон (май 1978 г.). "Является ли APL языком программирования?". Компьютерный журнал. 21 (2): 128–131. Дои:10.1093 / comjnl / 21.2.128.
  80. ^ Сюй, Аарон (18 ноября 2017 г.). «Паттерны проектирования против антипаттернов в APL». functionconf.com. Получено 2018-04-07.
  81. ^ Магненат-Тельманн, Надя; Тальманн, Даниэль (1985). Теория и практика компьютерной анимации. Springer-Verlag. п. 38. ISBN  9784431684336. Получено 3 апреля, 2018. Цифровые эффекты - еще один продюсерский дом, который работал над Tron. Они использовали систему лазерного сканирования для оцифровки, хранения и воспроизведения изображений. Джадсон Роузбуш, президент Digital Effects, является основным разработчиком APL VISION и FORTRAN VISION, двух пакетов компьютерной анимации, которые используются в настоящее время.
  82. ^ Гуцелл, Сэм (17 октября 2017 г.). "Симулятор Штормграда на Дьялоге '16". www.optima-systems.co.uk. Оптима Системы. Получено 3 апреля, 2018. Штормград - [3D-симулятор катания на лодке], вызвавший огромный интерес в сообществе APL.
  83. ^ "OP-Pohjola ja Tieto hoitivat sovelluksen muutostyöt sujuvalla yhteistyöllä" [Гладкое сотрудничество между OP-Pohjola и модификация приложения с поддержкой Tieto] (PDF). www.tieto.com (на финском). Привязать к. Получено 3 апреля, 2018.[постоянная мертвая ссылка ]
  84. ^ "Ви айдаг" [Мы сегодня]. profdoccare.se (на шведском языке). Получено 3 апреля, 2018. Благодаря выбору APL в качестве технической платформы относительно легко быстро создать решение, которое можно назвать исполняемым прототипом (в переводе с оригинала).
  85. ^ Бреннер, Чарльз. «Технология идентификации ДНК и APL». dna-view.com. Презентация на конференции пользователей APL 2005 г.. Получено 9 января, 2015.
  86. ^ Бреннер, Чарльз. «ДНК есть везде - возможность для APL». www.youtube.com. YouTube. Получено 9 января, 2015.
  87. ^ «Советы по игре в гольф в АПЛ». stackexchange.com. Получено 3 апреля, 2018.
  88. ^ «Награды - 1973 - Лоуренс Брид». Ассоциация вычислительной техники. Архивировано из оригинал 2 апреля 2012 г.
  89. ^ «Награды - 1973 - Ричард Латвелл». Ассоциация вычислительной техники. Архивировано из оригинал 2 апреля 2012 г.
  90. ^ «Награды - 1973 - Роджер Мур». Ассоциация вычислительной техники. Архивировано из оригинал 2 апреля 2012 г.
  91. ^ «IBM 5100». old-computers.com. Архивировано из оригинал 30 апреля 2018 г.. Получено 8 апреля, 2018.
  92. ^ «Добро пожаловать, IBM, в персональные вычисления». БАЙТ. Декабрь 1975. с. 90. Получено 29 апреля, 2018.
  93. ^ «Хронология APL и ее влияние на развитие компьютерного языка». www.sigapl.org. ACM. Получено 29 апреля, 2018.
  94. ^ Ларри Брид (Август 2006 г.). "Как мы попали в APL1130". Вектор (Британская ассоциация APL). 22 (3). ISSN  0955-1433. Архивировано из оригинал 12 мая 2008 г.. Получено 29 апреля, 2018.
  95. ^ Роджер Мур (2005). "История компании I. P. Sharp Associates с разделением времени и сети". Rogerdmoore.ca. Роджер Мур. Получено 7 марта, 2018.
  96. ^ Блюменталь, Марсия (18 мая 1981 г.). "VAX-11s приобретает процессор APL". Computerworld. Получено 22 апреля, 2018.
  97. ^ а б c «Премия Кеннета Э. Айверсона за выдающийся вклад в APL». СИГПЛАН Глава о языках программирования массивов (SIGAPL). Архивировано из оригинал 26 февраля 2012 г.
  98. ^ «APL2: что нового». ibm.com. ibm. Получено 22 апреля, 2018.
  99. ^ "Сайт ООО" Диалог ". Получено 6 июн 2018.
  100. ^ «Дьялог в 25» (PDF). Журнал Вектор. Британская ассоциация APL. Сентябрь 2008 г.. Получено 14 апреля, 2018.[постоянная мертвая ссылка ]
  101. ^ Кромберг, Мортен (22 октября 2007 г.). «Массивы объектов» (PDF). Материалы симпозиума 2007 г. по динамическим языкам: 20. Дои:10.1145/1297081.1297087. ISBN  9781595938688. S2CID  18484472. Получено 27 августа 2018.
  102. ^ Скоулз, Джон. "D: функциональное подмножество Dyalog APL". Британская ассоциация APL.
  103. ^ «Диалог - Цены и лицензии».
  104. ^ «Премия Iverson Award 2016 вручается генеральному директору Dyalog и главному исполнительному директору». Получено 6 июн 2018.
  105. ^ "Система исследования вложенных массивов - NARS2000: экспериментальный интерпретатор APL". NARS2000. Программное обеспечение Sudley Place. Получено 10 июля, 2015.
  106. ^ «APLX снят с коммерческой продажи, но может быть загружен бесплатно». Microapl.com. Получено 14 апреля, 2018.
  107. ^ "GNU APL". directory.fsf.org. Каталог бесплатных программ. Получено 28 сентября, 2013.
  108. ^ Столмен, Ричард М. "RMS Berättar". Архивировано из оригинал 26 ноября 2018 г.. Получено 22 апреля, 2018.
  109. ^ Бадд, Тимоти (1988). Компилятор APL. Springer-Verlag. ISBN  978-0-387-96643-4.
  110. ^ SIGAPL. "Что такое APL?". www.sigapl.org. SIGAPL. Получено 20 января, 2015.
  111. ^ Джу, Дз-Цзин; Чинг, Вай-Ми (1991). «Использование параллелизма данных APL на машине MIMD с общей памятью». Информационный бюллетень ACM SIGPLAN Уведомления. 26 (7): 61–72. Дои:10.1145/109625.109633. S2CID  8584353.
  112. ^ Hsu, Aaron W .; Боуман, Уильям Дж. «Возвращаясь к APL в современную эпоху» (PDF). www.cs.princeton.edu. Университет Индианы / Принстон. Получено 20 января, 2015.
  113. ^ Ching, W.-M .; Джу Д. (1991). «Выполнение автоматически распараллеленных программ APL на RP3». Журнал исследований и разработок IBM. 35 (5/6): 767–777. Дои:10.1147 / rd.355.0767. Получено 20 января, 2015.
  114. ^ Blelloch, Guy E .; Сабо, Гэри В. (1990). "Компиляция языков, ориентированных на коллекцию, на параллельных компьютерах". Журнал параллельных и распределенных вычислений. 8 (2): 119–134. CiteSeerX  10.1.1.51.5088. Дои:10.1016/0743-7315(90)90087-6. Языки, ориентированные на коллекцию, включают APL, APL2
  115. ^ Йендрщок, Йоханнес; Хоффманн, Рольф; Эдигер, Патрик; Келлер, Йорг. «Реализация APL-подобных функций параллельных данных на машине GCA» (PDF). www.fernuni-hagen.de. Fernuni-Hagen.De. С. 1–6. Архивировано из оригинал (PDF) 22 января 2015 г.. Получено 22 января, 2015. GCA - Global Cellular Automation. По своей сути массивно параллельные. APL был выбран из-за способности выражать матричные и векторные структуры.
  116. ^ Бреннер из Исследовательского центра IBM Т. Дж. Уотсона, Норман (1984). «Схема СБИС с использованием APL с подпрограммами fortran». Материалы международной конференции по APL - APL '84. ACM SIGAPL APL Quote Quad. 14. ACM SIGAPL. С. 77–79. Дои:10.1145/800058.801079. ISBN  978-0897911375. S2CID  30863491. APL для интерактивности и простоты программирования
  117. ^ Гэмбл, Д.Дж .; Хобсон, Р.Ф. (1989). «На пути к графике / Процедурная среда для построения генераторов модулей СБИС». Продолжение конференции Конференция IEEE Pacific Rim по связи, компьютерам и обработке сигналов. С. 606–611. Дои:10.1109 / PACRIM.1989.48437. S2CID  7921438. Описаны генераторы модулей СБИС. APL и C, как примеры интерпретируемых и компилируемых языков, могут быть связаны с расширенным графическим дисплеем.
  118. ^ Ли, Роберт С. (1983). «Две реализации APL». Журнал ПК. 2 (5): 379. Получено 20 января, 2015.
  119. ^ МАРТА и ЛЛАМА. "Компьютерный язык APL". marthallama.org. МартаЛлама. Получено 20 января, 2015.
  120. ^ Мецгер, Роберт; Вэнь, Чжаофан (2000). Автоматическое распознавание и замена алгоритмов: новый подход к оптимизации программ. Пресса Массачусетского технологического института. ISBN  9780262133685. Получено 6 мая, 2018.
  121. ^ Снайдер, Лоуренс (1982). «Распознавание и выбор идиом для оптимизации кода». Acta Informatica. 17 (3). Дои:10.1007 / BF00264357. S2CID  8369972.
  122. ^ Ченг, Фэн Шэн (1981). «Сопоставление идиом: метод оптимизации для компилятора APL». Государственный университет Айовы. Получено 6 мая, 2018. Цитировать журнал требует | журнал = (помощь)
  123. ^ «Распознавание идиомы». dyalog.com. Получено 6 мая, 2018.
  124. ^ Strawn, Джордж О. (март 1977). «Действительно ли APL нужен синтаксический анализ во время выполнения?». Журнал программного обеспечения: практика и опыт. 7 (2): 193–200. Дои:10.1002 / spe.4380070207. S2CID  1463012.
  125. ^ а б «Руководство пользователя компилятора» (PDF). www.dyalog.com. ООО "Дьялог". Получено 7 мая, 2018.
  126. ^ а б Дрисколл мл., Грэм С.; Орт, Дональд Л. (ноябрь 1986 г.). «Компиляция APL: переводчик APL Yorktown». Журнал исследований и разработок IBM. 30 (6): 583–593. Дои:10.1147 / rd.306.0583. S2CID  2299699.
  127. ^ «Хронология АПЛ». www.sigapl.org. ACM. Получено 7 мая, 2018.
  128. ^ Вай-ми, Чинг (ноябрь 1986 г.). «Анализ программ и генерация кода в компиляторе APL / 370». Журнал исследований и разработок IBM. 30 (6): 594–602. Дои:10.1147 / ряд.306.0594. S2CID  17306407.
  129. ^ «Проект APEX».
  130. ^ «Компилятор APL (сообщение Джима Вейганга группе новостей comp.lang.apl)». 5 апреля 1994 г.

дальнейшее чтение

видео

внешняя ссылка

Интернет-ресурсы

Провайдеры

Группы пользователей и общества