stringtranslate.com

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

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

История

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

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

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

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

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

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

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

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

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

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

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

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

Пишущие шарики и пишущее колесо IBM, содержащие греческие символы APL
Вид клавиатуры 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, все еще приходилось набирать, перечеркивая два существующих символа элемента. Примером может служить символ grade up , который нужно было сделать из дельты (shift-H) и штриха Шеффера (shift-M). Это было необходимо, поскольку набор символов APL был намного больше, чем 88 символов, разрешенных на печатающем элементе, даже когда буквы были ограничены заглавными (капиталом).

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

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

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

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

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

В 1973 году IBM выпустила APL.SV , который был продолжением того же продукта, но который предлагал общие переменные как средство доступа к объектам за пределами системы APL, таким как файлы операционной системы. В середине 1970-х годов интерпретатор мэйнфрейма IBM был даже адаптирован для использования на настольном компьютере IBM 5100 , который имел небольшой ЭЛТ и клавиатуру APL, когда большинство других небольших компьютеров того времени предлагали только BASIC . В 1980-х годах программный продукт VSAPL широко использовался пользователями Conversational Monitor System (CMS), Time Sharing Option (TSO), VSPC , MUSIC/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 APL\360 [23] . В Северной Америке наиболее известными из них были IP Sharp Associates , Scientific Time Sharing Corporation (STSC), Time Sharing Resources (TSR) и The Computer Company (TCC). CompuServe также вышла на рынок в 1978 году с интерпретатором APL, основанным на модифицированной версии Digital Equipment Corp и Carnegie Mellon's, который работал на 36-битных машинах KI и KL компании DEC. APL компании CompuServe был доступен как для коммерческого рынка, так и для потребительской информационной службы. С появлением сначала менее дорогих мэйнфреймов, таких как IBM 4300 , а затем и персональных компьютеров, к середине 1980-х годов индустрия разделения времени практически сошла на нет.

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

Интерпретаторы APL также были доступны у других производителей мэйнфреймов и мини-компьютеров, в частности, Burroughs , Control Data Corporation (CDC), Data General , Digital Equipment Corporation (DEC), Harris , Hewlett-Packard (HP), Siemens , Xerox и других.

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

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

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

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

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

АПЛ2

Начиная с начала 1980-х годов, разработка IBM APL под руководством Джима Брауна реализовала новую версию языка APL, которая содержала в качестве своего основного усовершенствования концепцию вложенных массивов , где массив может содержать другие массивы, и новые языковые возможности, которые облегчали интеграцию вложенных массивов в рабочий процесс программы. Кен Айверсон, больше не контролировавший разработку языка APL, покинул IBM и присоединился к IP Sharp Associates , где одним из его основных вкладов было направление эволюции Sharp APL в большее соответствие с его видением. [36] [37] [38] APL2 был впервые выпущен для CMS и TSO в 1984 году . [39] Позднее появилась редакция APL2 Workstation (Windows, OS/2 , AIX , Linux и Solaris ). [40] [41]

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

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

Различные реализации APL от APLX, Dyalog и др. включают расширения для объектно-ориентированного программирования , поддержку .NET , примитивы преобразования XML-массивов, графическое построение, интерфейсы операционной системы и выражения лямбда-исчисления . Бесплатные версии включают GNU APL для Linux и NARS2000 для Windows (которая также работает на Linux под Wine). Обе они являются довольно полными версиями APL2 с различными языковыми расширениями.

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

APL лег в основу или оказал влияние на следующие языки: [ необходима ссылка ]

Характеристики языка

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

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

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

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

Дизайн

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

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

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

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

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

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

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

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

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

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

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

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

Синтаксис

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

Примеры

Привет, мир

Это отобразит « Привет, мир »:

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

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

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

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

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

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

Предположим, что Xэто массив чисел. Затем (+/X)÷⍴Xдает его среднее значение. Чтение справа налево⍴X дает количество элементов в X, и поскольку ÷это двоичный оператор, то требуется также член слева от него. Он окружен скобками, поскольку в противном случае был бы взят X (так что суммирование было бы из X÷⍴X—каждого элемента X, деленного на количество элементов в X), и +/Xдает сумму элементов X. Основываясь на этом, следующее выражение вычисляет стандартное отклонение :

(( + / (( X - ( + / X ) ÷⍴ X ) * 2 )) ÷⍴ X ) * 0,5  

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

SD (( + / (( X - AV ( T + / X ) ÷⍴ X ) * 2 )) ÷⍴ X ) * 0,5  

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

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

х [ х 6 ? 40 ]

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

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

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

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

Следующее выражение находит все простые числа от 1 до R. Как во времени, так и в пространстве сложность вычисления составляет (в нотации «О большое» ).

( ~ Р Р ∘. × Р ) / Р 1 ↓⍳ Р

Если следовать справа налево, то это означает:

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

Сортировка

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

X [ X + . ' ' ;]

Игра жизни

Следующая функция "life", написанная на Dyalog APL, [74] [75] берет булеву матрицу и вычисляет новое поколение в соответствии с игрой Конвея "Жизнь" . Она демонстрирует мощь APL в реализации сложного алгоритма в очень небольшом коде, но ее понимание требует некоторых продвинутых знаний APL (как и та же программа на многих языках).

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

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

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

 txt '<html><body><p>Это <em>выделенный</em> текст.</p></body></html>' { /⍨ ~ { ∨≠ \ } ' <>' } txt Это выделенный текст .       

Нейминг

APL получил свое название от инициалов книги Айверсона A Programming Language [ 3], хотя в книге описывается математическая нотация Айверсона, а не реализованный язык программирования, описанный в этой статье. Название используется только для фактических реализаций, начиная с APL\360.

Название было придумано Адином Фалькоффом в 1966 году во время внедрения APL\360 в IBM :

Когда я проходил мимо офиса, который делили трое студентов, я слышал звуки спора. Я просунул голову в дверь, и Эрик спросил меня: «Разве не правда, что все знают, что используемая нами нотация называется APL?» Мне было жаль разочаровывать его, признаваясь, что я никогда не слышал, чтобы ее так называли. Откуда он взял идею, что она хорошо известна? И кто решил ее так назвать? На самом деле, почему ее вообще нужно было как-то называть? Довольно долгое время спустя я узнал, как ее назвали. Когда в июне 1966 года началась работа по внедрению, началась и работа по документированию. Полагаю, когда им пришлось писать об «этом», Фалькофф и Айверсон поняли, что им придется дать «этому» название. Вероятно, в то время было сделано много предложений, но я слышал только о двух. Группа в SRA в Чикаго, которая разрабатывала учебные материалы с использованием этой нотации, выступала за название «Mathlab». Оно не прижилось. Другое предложение состояло в том, чтобы назвать его «Лучшая математика Айверсона» и затем позволить людям придумать соответствующую аббревиатуру. Это было сочтено шуткой.

И вот однажды Адин Фалькофф вошел в кабинет Кена и написал на доске «Язык программирования», а под ним аббревиатуру «APL». Так это и родилось. Всего через неделю или около того Эрик Айверсон задал мне свой вопрос, в то время, когда это название еще не нашло своего пути в тринадцать миль по Taconic Parkway от IBM Research до IBM Mohansic.

APL иногда интерпретируется как язык программирования массивов или язык обработки массивов [77] , тем самым превращая APL в бэкроним .

Сумка для ноутбука для конференций Британской ассоциации APL (BAPLA)

Логотип

Между поставщиками APL всегда существовало сотрудничество, и совместные конференции проводились на регулярной основе с 1969 по 2010 год. [78] На таких конференциях часто раздавались товары APL , на которых были изображены мотивы APL или коллекция логотипов поставщиков. Распространенными были яблоки (как каламбур на схожести произношения apple и APL ) и фрагмент кода , представляющий собой символы, которые выводятся классической раскладкой клавиатуры APL при удерживании клавиши-модификатора APL и вводе «APL».*

Несмотря на все эти усилия сообщества, не было создано универсального логотипа, независимого от поставщика, для языка программирования. Поскольку популярные языки программирования все чаще создают узнаваемые логотипы, Fortran получил один в 2020 году, [79] Британская ассоциация APL начала кампанию во второй половине 2021 года, чтобы создать такой логотип для APL, и после выборов сообщества и нескольких раундов обратной связи логотип был выбран в мае 2022 года. [80]

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

APL используется для многих целей, включая финансовые и страховые приложения, [81] искусственный интеллект , [82] [83] нейронные сети [84] и робототехнику . [85] Утверждалось, что APL является инструментом вычислений , а не языком программирования; [86] его символьная природа и возможности массивов сделали его популярным среди экспертов в предметной области и специалистов по данным [87], которые не имеют или не нуждаются в навыках компьютерного программиста . [ требуется ссылка ]

APL хорошо подходит для обработки изображений и компьютерной анимации , где графические преобразования могут быть закодированы как умножение матриц. Одна из первых коммерческих компаний компьютерной графики, Digital Effects , выпустила графический продукт APL под названием Visions , который использовался для создания телевизионных рекламных роликов и анимации для фильма 1982 года Tron . [88] В последнее время симулятор управления лодкой Stormwind использует APL для реализации своей базовой логики, интерфейса с промежуточным программным обеспечением конвейера рендеринга и основной части своего физического движка . [89]

Сегодня APL по-прежнему используется в широком спектре коммерческих и научных приложений, например, в управлении инвестициями , [81] управлении активами , [90] [ требуется ссылка ] здравоохранении , [91] и профилировании ДНК . [92] [93]

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

АПЛ\360

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

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

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

АПЛ\1130

В 1968 году APL\1130 стала первой общедоступной системой APL, созданной IBM для IBM 1130. [99] Она стала самым популярным программным обеспечением IBM Type-III Library , выпущенным IBM. [ 100]

APL*Plus и Sharp APL

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

Этими двумя компаниями были IP Sharp Associates (IPSA), компания по предоставлению услуг APL\360, основанная в 1964 году Яном Шарпом, Роджером Муром и другими, и STSC , компания по предоставлению услуг разделения времени и консалтинга, основанная в 1969 году Лоуренсом Бридом и другими. Вместе они разработали APL*Plus и впоследствии продолжили работать вместе, но разрабатывали APL отдельно как APL*Plus и Sharp APL. STSC портировала APL*Plus на многие платформы, выпустив версии для VAX 11, [102] PC и 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 . [103]

АПЛ2

APL2 был значительной повторной реализацией APL от IBM, который разрабатывался с 1971 года и впервые выпущен в 1984 году. Он предоставляет множество дополнений к языку, из которых наиболее примечательным является поддержка вложенных (непрямоугольных) массивов. [39] Вся команда продуктов и услуг APL2 была награждена премией Айверсона в 2007 году. [103]

В 2021 году IBM продала APL2 компании Log-On Software, которая разрабатывает и продает продукт под названием Log-On APL2 . [104]

АПЛГОЛ

В 1972 году APLGOL был выпущен как экспериментальная версия APL, которая добавила структурные конструкции языка программирования к языковой структуре. Были добавлены новые операторы для управления между операторами, выполнения условных операторов и структурирования операторов, а также операторы для уточнения цели алгоритма. [105] Он был реализован для Hewlett-Packard в 1977 году . [106]

Диалог APL

Dyalog APL был впервые выпущен британской компанией Dyalog Ltd. [107] в 1983 году [108] и, по состоянию на 2018 год , доступен для платформ AIX , Linux (включая Raspberry Pi ), macOS и Microsoft Windows . Он основан на APL2 с расширениями для поддержки объектно-ориентированного программирования , [109] функционального программирования , [110] и неявного программирования . [111] Лицензии бесплатны для личного/некоммерческого использования. [112]

В 1995 году двое из команды разработчиков — Джон Скоулз и Питер Доннелли — были награждены премией Айверсона за свою работу над интерпретатором. [103] Гитте Кристенсен и Мортен Кромберг стали соавторами премии Айверсона в 2016 году. [113]

НАРС2000

NARS2000 — это интерпретатор APL с открытым исходным кодом, написанный Бобом Смитом, выдающимся разработчиком и реализатором APL из STSC в 1970-х и 1980-х годах. NARS2000 содержит расширенные функции и новые типы данных и работает в исходном формате на Microsoft Windows и других платформах под Wine . Он назван в честь инструмента разработки из 1980-х годов, NARS (Nested Arrays Research System). [114]

АПЛКС

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

Йорк АПЛ

York APL [116] был разработан в Йоркском университете , Онтарио, около 1968 года, работал на мэйнфреймах IBM 360. Одним из заметных отличий между ним и APL\360 было то, что он определял «форму» (ρ) скаляра как 1, тогда как APL\360 определял его как более математически корректный 0 — это упрощало написание функций, которые действовали одинаково со скалярами и векторами.

GNU-APL-лицензия

GNU APL — это свободная реализация Extended APL, как указано в ISO/IEC 13751:2001, и, таким образом, является реализацией APL2. Он работает на Linux , macOS, нескольких диалектах BSD и на Windows (либо с использованием Cygwin для полной поддержки всех его системных функций, либо как собственный 64-битный двоичный файл Windows с некоторыми отсутствующими системными функциями). GNU APL использует Unicode внутри и может быть написан скриптами. Он был написан Юргеном Зауэрманном. [117]

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

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

APL традиционно является интерпретируемым языком , имеющим такие характеристики языка, как слабая типизация переменных, не очень подходящая для компиляции . [119] Однако, с массивами в качестве его основной структуры данных [120] он предоставляет возможности для повышения производительности за счет параллелизма , [121] параллельных вычислений , [122] [123] приложений с большой параллельностью , [124] [125] и сверхбольшой интеграции (VLSI), [126] [127] и с самого начала APL считался высокопроизводительным языком [128] — например, он был отмечен за скорость, с которой он мог выполнять сложные матричные операции, «потому что он работает с массивами и выполняет такие операции, как обращение матрицы внутри». [129]

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

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

Большинство интерпретаторов APL поддерживают распознавание идиом [130] и оценивают общие идиомы как отдельные операции. [131] [132] Например, оценивая идиому BV/⍳⍴Aкак отдельную операцию (где BV— логический вектор, а A— массив), можно избежать создания двух промежуточных массивов. [133]

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

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

Компиляция

Компиляция APL была предметом исследований и экспериментов с тех пор, как язык впервые стал доступен; первым компилятором считается Burroughs APL-700 [136], выпущенный около 1971 года. [137] Для того чтобы иметь возможность компилировать APL, необходимо наложить языковые ограничения. [136] [138] APEX — это исследовательский компилятор APL, написанный Робертом Бернеки и доступный по лицензии GNU General Public License . [139]

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

Стандарты

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

Ссылки

  1. ^ ab "APL Quotations and Anecdotes". jsoftware.com . Получено 14 апреля 2018 г. .
  2. ^ "std::iota" .cppreference.com .
  3. ^ abc Кеннет Э. Айверсон (1 декабря 1962 г.). Язык программирования. Wiley . ISBN 978-0-471-43014-8. ОЛ  26792153М. Викиданные  Q105954505 . Проверено 6 августа 2023 г.
  4. ^ Макинтайр, Дональд Б. (1991). «Язык как интеллектуальный инструмент: от иероглифов до APL». IBM Systems Journal . 30 (4): 554–581. doi :10.1147/sj.304.0554. Архивировано из оригинала 4 марта 2016 г. Получено 9 января 2015 г.
  5. ^ "ACM Award Citation – John Backus". Awards.acm.org. 1977. Архивировано из оригинала 12 февраля 2008 года . Получено 3 февраля 2010 года .
  6. ^ ab Moler, Cleve. "The Growth of MATLAB" (PDF) . Архивировано из оригинала (PDF) 11 апреля 2009 г. . Получено 3 февраля 2010 г. .
  7. ^ ab Hui, Roger. "Библиография APL и J". jsoftware.com/jwiki . Получено 2 марта 2010 г. .
  8. ^ ab "Интервью с Артуром Уитни". Kx Systems. 4 января 2004 г. Архивировано из оригинала 4 апреля 2009 г. Получено 2 марта 2010 г.
  9. Айверсон, Кеннет Э., «Автоматическая обработка данных: Глава 6: Язык программирования». Архивировано 4 июня 2009 г. в Wayback Machine , 1960 г., черновик книги Брукса и Айверсона 1963 г. «Автоматическая обработка данных» .
  10. ^ Брукс, Фред ; Айверсон, Кеннет, (1963), Автоматическая обработка данных , John Wiley & Sons Inc.
  11. ^ "Turing Award Citation 1979". Awards.acm.org. Архивировано из оригинала 2009-12-23 . Получено 3 февраля 2010 .
  12. ^ Хеллерман, Х. (июль 1964 г.). «Экспериментальная персонализированная система транслятора массива». Сообщения ACM . 7 (7): 433–438. doi : 10.1145/364520.364573 . S2CID  2181070.
  13. ^ Фалькофф, Адин Д .; Айверсон, Кеннет Э. (август 1978 г.). «Эволюция APL». Уведомления ACM SIGPLAN . 13 .
  14. ^ Абрамс, Филип С., Интерпретатор для «нотации Айверсона», Технический отчет: CS-TR-66-47, Кафедра компьютерных наук, Стэнфордский университет, август 1966 г.;
  15. ^ Хейг, Томас (2005). «Биографии: Кеннет Э. Айверсон». IEEE Annals of the History of Computing . doi :10.1109/MAHC.2005.4.
  16. ^ ab Брид, Ларри, «Первый сеанс терминала APL», APL Quote Quad , Ассоциация вычислительной техники, том 22, номер 1, сентябрь 1991 г., стр. 2–4.
  17. 19, 2009 Адин Фолкофф – Музей компьютерной истории. «Айверсон отдал ему должное за выбор названия APL и за внедрение пишущей машинки IBM в форме мяча для гольфа с заменяющей ее пишущей головкой, которая обеспечивала знаменитый набор символов для представления программ».
  18. Брид, Ларри (август 2006 г.). «Как мы добрались до APL\1130». Вектор (Британская ассоциация APL) . 22 (3). ISSN  0955-1433. Архивировано из оригинала 2008-05-12 . Получено 2007-04-02 .
  19. ^ Руководство APL\1130 Архивировано 21.02.2011 в Wayback Machine , май 1969 г.
  20. ^ "Вспоминая APL". Quadibloc.com . Получено 17 июня 2013 г. .
  21. Фалькофф, Адин; Айверсон, Кеннет Э., «Руководство пользователя APL\360». Архивировано 29 февраля 2012 г. в Wayback Machine , IBM Research, Исследовательский центр Томаса Дж. Уотсона, Йорктаун-Хайтс, штат Нью-Йорк, август 1968 г.
  22. ^ "APL\360 Terminal System" Архивировано 11 июля 2010 г. в Wayback Machine , IBM Research, Исследовательский центр Томаса Дж. Уотсона, март 1967 г.
  23. ^ ab Pakin, Sandra (1968). Справочное руководство APL\360 . Science Research Associates, Inc. ISBN 978-0-574-16135-2.
  24. ^ Falkoff, Adin D.; Iverson, Kenneth E., The Design of APL, IBM Journal of Research and Development , том 17, номер 4, июль 1973 г. «Эти функции, определяемые средой, были основаны на использовании еще одного класса функций, называемых «I-beams» из-за формы символа, используемого для них, — которые предоставляют более общие возможности для связи между программами APL и менее абстрактными частями системы. Функции I-beam были впервые введены системными программистами, чтобы позволить им выполнять инструкции System/360 из программ APL и, таким образом, использовать APL в качестве прямой помощи в их программной деятельности. Очевидное удобство функций такого рода, которые, казалось, были частью языка, привело к введению монадической функции I-beam для прямого использования кем угодно. Различные аргументы этой функции давали информацию об среде, такую ​​как доступное пространство и время суток».
  25. ^ Минкер, Джек (январь 2004 г.). «2.3.4 Развитие компьютерного программного обеспечения в CSC, 1962–1973 гг.». Начало вычислений и компьютерных наук в Мэрилендском университете (PDF) (Отчет). Мэрилендский университет. стр. 38. Архивировано из оригинала (PDF) 10 июня 2011 г. Получено 23 мая 2011 г.
  26. ^ Стеббенс, Алан. "Как все началось". Архивировано из оригинала 2016-03-04 . Получено 2011-05-22 .
  27. ^ "Справочное руководство по языку и операциям Xerox APL" (PDF) . Архивировано (PDF) из оригинала 2022-10-09.
  28. ^ "SIGAPL". Sigapl.org . Получено 17 июня 2013 г. .
  29. ^ "Пятьдесят лет BASIC, языка программирования, который сделал компьютеры персональными". Time . 29 апреля 2014 г. Получено 29 апреля 2018 г.
  30. ^ "MCM Computers M70/M700". old-computers.com . Архивировано из оригинала 3 апреля 2018 г. Получено 8 апреля 2018 г.
  31. ^ Стахняк, Стахняк (2011). Изобретение ПК: история MCM/70. McGill Queens's University Press. ISBN 978-0-7735-3852-8.
  32. Миллер, Майкл (17 декабря 2014 г.). «ПК, которые проложили путь для Альтаира». Журнал PC . Ziff Davis . Получено 29 апреля 2018 г.
  33. «VideoBrain Family Computer», Popular Science , ноябрь 1978 г., реклама.
  34. ^ "Взгляд на SuperPet". Compute! . Small System Services Inc. Декабрь 1981 . Получено 29 апреля 2018 .
  35. Гейтс, Билл (31 января 1976 г.). «Открытое письмо любителям». Информационный бюллетень Homebrew Computer Club . Получено 29 апреля 2018 г.
  36. ^ Хуэй, Роджер. «Вспоминая Кена Айверсона». keiapl.org . KEIAPL . Получено 10 января 2015 г. .
  37. ^ "Кеннет Э. Айверсон". Премия ACM AM Turing Award . ACM . Получено 10 января 2015 г.
  38. ^ "APL2: Ранние годы: можно ли и нужно ли идти на компромисс по техническим вопросам?". Глава SIGPLAN о языках программирования массивов . ACM . Получено 10 января 2015 г.
  39. ^ abcd Falkoff, Adin D. (1991). «Семейство систем APL IBM». IBM Systems Journal . 30 (4): 416–432. doi :10.1147/sj.304.0416. S2CID  19030940.
  40. ^ "IBM APL2". EDM2 . 2019-10-09. Архивировано из оригинала 2021-11-17 . Получено 2021-11-17 .
  41. ^ "APL2: Что нового". ibm.com . IBM . Получено 22 апреля 2018 г. .
  42. ^ Micro APL. "Обзор системы APL". microapl.com . Micro APL . Получено 10 января 2015 г. .
  43. ^ Робертсон, Грэм. "Личный взгляд на APL2010". archive.vector.org.uk . Vector – Журнал Британской ассоциации APL. Архивировано из оригинала 2 апреля 2015 г. Получено 10 января 2015 г.
  44. ^ Родригес, П.; Рохас, Х.; Альфонсека, М.; Бургос, ДЖИ (1989). «Экспертная система в химическом синтезе, написанная на APL2/PC». ACM SIGAPL APL Quote Quad . 19 (4): 299–303. doi :10.1145/75144.75185. S2CID  16876053.
  45. ^ "APL2: Язык программирования для решения проблем, визуализации и доступа к базам данных". www-03.ibm.com . IBM. Архивировано из оригинала 22 ноября 2013 г. Получено 10 января 2015 г.
  46. ^ Пайк, Роб (2018-03-25). "Ivy". GoDoc . Архивировано из оригинала 2019-08-13.
  47. ^ "Wolfram Language FAQ". Wolfram . Получено 20 февраля 2020 г. LISP и APL были двумя ранними источниками вдохновения
  48. ^ Texas Instruments (1977). "TI 745 полностраничное объявление: введение нового набора символов". Computerworld . 11 (27): 32. Получено 20 января 2015 г.
  49. ^ ab "APL Fonts and Keyboards". Dyalog, Ltd. 2004–2024 . Получено 1 ноября 2024 г.
  50. ^ Смит, Боб. "NARS2000 Keyboard". www.sudleyplace.com . Боб Смит; NARS2000 . Получено 19 января 2015 г. .
  51. ^ "Введение в APL – Символы APL". www.microapl.co.uk . MicroAPL Ltd . Получено 8 января 2015 г. .
  52. ^ Браун, Джеймс А.; Хоукс, Брент; Тримбл, Рэй (1993). «Расширение набора символов APL». ACM SIGAPL APL Quote Quad . 24 (1): 41–46. doi :10.1145/166198.166203.
  53. ^ Кромберг, Мортен. "Поддержка Unicode для APL". archive.vector.org.uk . Vector, Журнал Британской ассоциации APL. Архивировано из оригинала 20 января 2015 г. Получено 8 января 2015 г.
  54. ^ Hsu, Aaron. «Computer Science Outreach and Education with APL». Dyalog, Ltd. Архивировано из оригинала 17 августа 2016 г. Получено 15 июля 2016 г.
  55. ^ ab MicroAPL. "Операторы". www.microapl.co.uk . MicroAPL . Получено 12 января 2015 г. .
  56. ^ Примитивные функции. "Примитивные функции". www.microapl.co.uk/ . Получено 1 января 2015 г. .
  57. ^ Workspace. "The Workspace". www.microapl.co.uk . Получено 1 января 2015 г. .
  58. ^ "example". Catpad.net. Архивировано из оригинала 8 июля 2013 г. Получено 17 июня 2013 г.
  59. ^ "Ввод символов APL". www.microapl.co.uk . Получено 1 января 2015 г. .
  60. ^ Дики, Ли (1993). "Список схем транслитерации APL". Архивировано из оригинала 29-09-2006.
  61. ^ Iverson, KE (август 1980). «Notation as a Tool of Thought» (Нотация как инструмент мышления). Communications of the ACM . 23 (8): 444–465. doi :10.1145/358896.358899. Архивировано из оригинала 20 сентября 2013 г.
  62. ^ Батенбург. «Эффективность APL». www.ekevanbatenburg.nl . Проверено 1 января 2015 г.
  63. ^ Vaxman. "APL Great Programming" (PDF) . www.vaxman.de . Архивировано (PDF) из оригинала 2022-10-09 . Получено 1 января 2015 г. .
  64. ^ Янко, Вольфганг (май 1987 г.). «Исследование эффективности использования APL для программирования машины вывода». ACM SIGAPL APL Quote Quad . 17 (4): 450–456. doi :10.1145/384282.28372.
  65. ^ Borealis. "Почему APL?". www.aplborealis.com . Получено 1 января 2015 г. .
  66. ^ Айверсон, Кеннет Э. (1987). «Словарь APL». www.jsoftware.com . Получено 20 января 2015 г. .
  67. ^ abcdef "Концепции APL". Microapl.co.uk . Получено 3 февраля 2010 г. .
  68. ^ "Теория вложенных массивов". Nial.com. Архивировано из оригинала 2011-07-09 . Получено 3 февраля 2010 .
  69. ^ abc "Programmera i APL", Бохман, Фрёберг, Studentlitteratur , ISBN 91-44-13162-3 
  70. ^ Айверсон, Кеннет Э. (1983). «Синтаксис и семантика APL». www.jsoftware.com . IP Sharp Associates . Получено 11 января 2015 г. .
  71. ^ MicroAPL. "APL Primitives". www.microapl.co.uk . MicroAPL . Получено 11 января 2015 г. .
  72. ^ "Шрифт APL – Дополнительные глифы APL". wiki.nars2000.org . NARS2000 . Получено 11 января 2015 г. .
  73. ^ Фокс, Ральф Л. «Систематически случайные числа». www.sigapl.org . SIGAPL . Получено 11 января 2015 г. .
  74. Scholes, John (26 января 2009 г.). Conway's Game of Life в APL (видео). YouTube . Получено 20 ноября 2021 г.
  75. Дополнительные технические подробности в статье APL Wiki «Conway's Game of Life». Получено 20 ноября 2021 г.
  76. ^ Макдоннелл, Э. Э. Введение в книгу «Источники в APL», APL Press, 1981. (полный скан книги)
  77. ^ Ачарья, Р.; Перейра, (904567457) NE APL Programming Language Архивировано 03.11.2021 в Wayback Machine . Статья для CS5314 (Концепции языков программирования) в Virginia Tech.
  78. ^ APL Wiki. Конференция APL. Получено 13 октября 2021 г.
  79. ^ Джейкоб Уильямс. Degenerate Conic: New Blood. Получено 13 октября 2021 г.
  80. ^ APL Wiki. Логотип APL. Получено 20 мая 2022 г.
  81. ^ ab "Годовой отчет за 2017 год" (PDF) . SimCorp. 1 февраля 2018 г. Архивировано (PDF) из оригинала 2022-10-09 . Получено 3 апреля 2018 г. Sofia — это платформа управления инвестициями front-to-back, как и SimCorp Dimension. ... Sofia основана на языке кодирования APL, как и некоторые части SimCorp Dimension.
  82. Ли, Жорж; Лелуш, Радди; Мейсонье, Винсент; Зарри, Джан Пьеро (1 сентября 1982 г.). «Использование APL в среде искусственного интеллекта». ACM SIGAPL APL Quote Quad . 13 (1): 183–191. doi :10.1145/390006.802242 . Получено 3 апреля 2018 г.
  83. ^ Фордайс, К.; Салливан, Г. (1985). «Средства развития искусственного интеллекта». APL Quote Quad . APL 85 Conf. Proc. (15): 106–113. doi : 10.1145/255315.255347 .
  84. ^ Альфонсека, Мануэль (июль 1990 г.). «Нейронные сети в APL». ACM SIGAPL APL Quote Quad . 20 (4): 2–6. doi : 10.1145/97811.97816 . Получено 3 апреля 2018 г.
  85. ^ Кромберг, Мортен. «Программирование роботов в APL». www.dyalog.com/ . Проверено 6 января 2015 г.
  86. ^ Холмс, ВН (май 1978). «Является ли APL языком программирования?». The Computer Journal . 21 (2): 128–131. doi : 10.1093/comjnl/21.2.128 .
  87. ^ Hsu, Aaron (18 ноября 2017 г.). «Design Patterns vs. Anti-pattern in APL». functionalconf.com . Архивировано из оригинала 23 марта 2018 г. Получено 2018-04-07 .
  88. ^ Магненат-Тальманн, Надя; Тельманн, Дэниел (1985). Теория и практика компьютерной анимации. Спрингер-Верлаг . п. 38. ISBN 9784431684336. Получено 3 апреля 2018 г. . Digital Effects — еще одна продюсерская компания, работавшая над Tron. Они использовали систему лазерного сканирования для оцифровки, хранения и воспроизведения изображений. Джадсон Роузбуш, президент Digital Effects, является основным дизайнером APL VISION и FORTRAN VISION, двух пакетов компьютерной анимации, которые используются в настоящее время.
  89. ^ Гутселл, Сэм (17 октября 2017 г.). «Stormwind Simulator на Dyalog '16». www.optima-systems.co.uk . Optima Systems . Получено 3 апреля 2018 г. Stormwind — это [3D-симулятор управления лодкой], который вызвал огромный интерес в сообществе APL.
  90. ^ «OP-Pohjola ja Tieto hoitiva sovelluksen muutostyöt sujuvalla yhteistyöllä» [Плавное сотрудничество между OP-Pohjola и модификацией приложения с поддержкой Tieto] (PDF) . www.tieto.com (на финском языке). Тието . Архивировано из оригинала (PDF) 9 октября 2022 г. Проверено 3 апреля 2018 г.[ постоянная мертвая ссылка ]
  91. ^ "Vi idag" [Мы сегодня]. profdoccare.se (на шведском языке) . Получено 3 апреля 2018 г. Благодаря выбору APL в качестве технической платформы относительно легко и быстро построить решение, которое можно назвать исполняемым прототипом (перевод с оригинала)[ постоянная мертвая ссылка ]
  92. ^ Бреннер, Чарльз. «Технология ДНК-идентификации и APL». dna-view.com . Презентация на конференции пользователей APL 2005 года . Получено 9 января 2015 г.
  93. ^ Бреннер, Чарльз (17 октября 2014 г.). «Повсюду ДНК — возможность для APL». www.youtube.com . YouTube. Архивировано из оригинала 2021-11-14 . Получено 9 января 2015 г. .
  94. ^ "Awards – 1973 – Lawrence Breed". Ассоциация вычислительной техники. Архивировано из оригинала 2 апреля 2012 года.
  95. ^ "Awards – 1973 – Richard Lathwell". Association for Computing Machinery. Архивировано из оригинала 2 апреля 2012 года.
  96. ^ "Awards – 1973 – Roger Moore". Association for Computing Machinery. Архивировано из оригинала 2 апреля 2012 года.
  97. ^ "IBM 5100". old-computers.com . Архивировано из оригинала 30 апреля 2018 г. Получено 8 апреля 2018 г.
  98. ^ «Добро пожаловать, IBM, в мир персональных компьютеров». Byte . Декабрь 1975. С. 90. Получено 29 апреля 2018 г.
  99. ^ «Хронология APL и его влияние на развитие компьютерных языков». www.sigapl.org . ACM . Получено 29 апреля 2018 г. .
  100. Larry Breed (август 2006 г.). «Как мы добрались до APL\1130». Vector (Британская ассоциация APL) . 22 (3). ISSN  0955-1433. Архивировано из оригинала 12 мая 2008 г. Получено 29 апреля 2018 г.
  101. ^ Роджер Мур (2005). «История IP Sharp Associates Timesharing and Network». Rogerdmoore.ca . Роджер Мур. Архивировано из оригинала 4 апреля 2019 г. . Получено 7 марта 2018 г. .
  102. ^ Блюменталь, Марсия (18 мая 1981 г.). "VAX-11s приобретают процессор APL". Computerworld . Получено 22 апреля 2018 г. .
  103. ^ abc "Премия Кеннета Э. Айверсона за выдающийся вклад в APL". Глава SIGPLAN о языках программирования массивов (SIGAPL). Архивировано из оригинала 26 февраля 2012 г.
  104. ^ Марк Шора (2021-01-26). "Log-On Software объявляет о выпуске Log-On APL2". Log-On Software . Получено 2021-11-17 .
  105. ^ Келли, РА (1973). «APLGOL, экспериментальный структурированный язык программирования». IBM Journal of Research and Development . 17 : 69–73. doi :10.1147/rd.171.0069.
  106. ^ Джонстон, Рональд Л. (июль 1977 г.). «APLGOL: Структурные средства программирования для APL». Журнал Hewlett-Packard.
  107. ^ "Dyalog Ltd website" . Получено 6 июня 2018 г. .
  108. ^ "Dyalog at 25" (PDF) . Vector Magazine . British APL Association. Сентябрь 2008 . Получено 14 апреля 2018 .[ постоянная мертвая ссылка ]
  109. Кромберг, Мортен (22 октября 2007 г.). «Массивы объектов» (PDF) . Материалы симпозиума 2007 года по динамическим языкам . п. 20. дои : 10.1145/1297081.1297087. ISBN 9781595938688. S2CID  18484472. Архивировано (PDF) из оригинала 2022-10-09 . Получено 27 августа 2018 .
  110. ^ Шоулз, Джон. "D: Функциональное подмножество Dyalog APL". Британская ассоциация APL.
  111. ^ Шоулз, Джон. «Перевод D-функций в неявную форму». Dyalog Ltd.
  112. ^ «Диалог – Цены и лицензии».
  113. ^ "Премия Айверсона 2016 года присуждается генеральному директору и главному исполнительному директору Dyalog" . Получено 6 июня 2018 г.
  114. ^ "Nested Arrays Research System – NARS2000: An Experimental APL Interpreter". NARS2000 . Sudley Place Software . Получено 10 июля 2015 г. .
  115. ^ "APLX был изъят из коммерческой продажи, но его можно загрузить бесплатно". Microapl.com . Получено 14 апреля 2018 г. .
  116. ^ "Йорк АПЛ".
  117. ^ "GNU APL". directory.fsf.org . Каталог свободного программного обеспечения . Получено 28 сентября 2013 г. .
  118. ^ Столлман, Ричард М. "RMS Berättar". Архивировано из оригинала 26 ноября 2018 г. Получено 22 апреля 2018 г.
  119. ^ Бадд, Тимоти (1988). Компилятор APL. Springer-Verlag. ISBN 978-0-387-96643-4.
  120. ^ "Что такое APL?". www.sigapl.org . SIGAPL . Получено 20 января 2015 г. .
  121. ^ Ju, Dz-Ching; Ching, Wai-Mee (1991). «Эксплуатация параллелизма данных APL на машине MIMD с общей памятью». Информационный бюллетень ACM SIGPLAN Notices . 26 (7): 61–72. doi :10.1145/109625.109633. S2CID  8584353.
  122. ^ Hsu, Aaron W.; Bowman, William J. «Revisiting APL in the Modern Era» (PDF) . www.cs.princeton.edu . Архивировано (PDF) из оригинала 2022-10-09 . Получено 20 января 2015 г. .
  123. ^ Ching, W.-M.; Ju, D. (1991). «Выполнение автоматически распараллеленных программ APL на RP3». IBM Journal of Research & Development . 35 (5/6): 767–777. doi :10.1147/rd.355.0767. Архивировано из оригинала 3 марта 2016 г. Получено 20 января 2015 г.
  124. ^ Blelloch, Guy E.; Sabot, Gary W. (1990). «Compiling Collection-Oriented Languages ​​upon Massively Parallel Computers». Journal of Parallel and Distributed Computing . 8 (2): 119–134. CiteSeerX 10.1.1.51.5088 . doi :10.1016/0743-7315(90)90087-6. Коллекционно-ориентированные языки включают APL, APL2 
  125. ^ Jendrsczok, Johannes; Hoffmann, Rolf; Ediger, Patrick; Keller, Jörg. «Implementing APL-like data parallel functions on a GCA machine» (PDF) . www.fernuni-hagen.de . pp. 1–6. Архивировано из оригинала (PDF) 22 января 2015 г. . Получено 22 января 2015 г. . GCA – Global Cellular Automation. По своей сути массивно-параллельный. «APL был выбран из-за возможности выражать матричные и векторные» структуры.
  126. ^ Бреннер, Норман (1984). "Проектирование схем СБИС с использованием APL с подпрограммами Фортрана". Труды международной конференции по APL - APL '84 . Том 14. С. 77–79. doi :10.1145/800058.801079. ISBN 0-89791-137-7. S2CID  30863491. APL для интерактивности и простоты кодирования
     • Бреннер, Норман (1984). "Проектирование схем СБИС с использованием APL с подпрограммами Фортрана". Труды международной конференции по APL – APL '84 . ACM SIGAPL. ISBN 978-0897911375.
  127. ^ Gamble, DJ; Hobson, RF (1989). "Towards a graphics/Procedural environment for constructing VLSI module generators". Материалы конференции IEEE Pacific Rim Conference on Communications, Computers and Signal Processing . стр. 606–611. doi :10.1109/PACRIM.1989.48437. S2CID  7921438. Описаны генераторы модулей VLSI. APL и C, как примеры интерпретируемых и компилируемых языков, могут быть сопряжены с усовершенствованным графическим дисплеем.
  128. ^ Ли, Роберт С. (1983). «Две реализации APL». PC Magazine . 2 (5): 379. Получено 20 января 2015 г.
  129. ^ "The APL Computer Language". MARTHA и LLAMA . Архивировано из оригинала 13 февраля 2015 г. Получено 20 января 2015 г.
  130. ^ Мецгер, Роберт; Вэнь, Чжаофан (2000). Автоматическое распознавание и замена алгоритмов: новый подход к оптимизации программ. Издательство MIT. ISBN 9780262133685. Получено 6 мая 2018 г. .
  131. ^ Снайдер, Лоуренс (1982). «Распознавание и выбор идиом для оптимизации кода». Acta Informatica . 17 (3). doi :10.1007/BF00264357. S2CID  8369972.
  132. ^ Ченг, Фэн Шэн (1981). Сопоставление идиом: метод оптимизации для компилятора APL (диссертация). Университет штата Айова . Получено 6 мая 2018 г.
  133. ^ "Распознавание идиом". dyalog.com . Получено 6 мая 2018 г. .
  134. ^ Строун, Джордж О. (март 1977 г.). «Действительно ли APL нужен синтаксический анализ во время выполнения?». Программное обеспечение: практика и опыт . 7 (2): 193–200. doi :10.1002/spe.4380070207. S2CID  1463012.
  135. ^ ab "Compiler User Guide" (PDF) . www.dyalog.com . Dyalog Ltd. Архивировано (PDF) из оригинала 2022-10-09 . Получено 7 мая 2018 г. .
  136. ^ ab Driscoll, Graham C. Jr.; Orth, Donald L. (ноябрь 1986 г.). «Составление APL: Транслятор Yorktown APL». IBM Journal of Research and Development . 30 (6): 583–593. doi :10.1147/rd.306.0583. S2CID  2299699.
  137. ^ "Хронология APL". www.sigapl.org . ACM . Получено 7 мая 2018 г. .
  138. ^ Wai-Mee, Ching (ноябрь 1986 г.). «Анализ программ и генерация кода в компиляторе APL/370». IBM Journal of Research and Development . 30 (6): 594–602. doi :10.1147/rd.306.0594. S2CID  17306407.
  139. ^ «Проект APEX».
  140. ^ "APL Compiler (сообщение Джима Вейганга в группу новостей comp.lang.apl)". 5 апреля 1994 г.

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

Видео

Внешние ссылки

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