stringtranslate.com

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

APL (назван в честь книги «Язык программирования» ) [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, реализовал часть системы обозначений на компьютере IBM 1620 , и она использовалась студентами в специальном школьном курсе по вычислению трансцендентных функций путем суммирования рядов. Студенты тестировали свой код в лаборатории Хеллермана. Такая реализация части обозначений получила название Personalized Array Translator (PAT). [12]

В 1963 году Фалькофф, Айверсон и Эдвард Х. Сассенгут-младший , работавшие в IBM, использовали эту нотацию для формального описания архитектуры и функциональности машин серии IBM System/360 , в результате чего была опубликована статья в IBM Systems Journal в 1963 году. 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, по-прежнему приходилось вводить путем перечеркивания двух существующих символов элемента. Примером может служить символ повышения класса , который нужно было составить из дельты (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] Он работал всего в 8 КБ 16-битных слов памяти и использовал выделенный 1-мегабайтный жесткий диск.

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

Ранние интерпретаторы IBM APL для оборудования IBM 360 и IBM 370 реализовали собственное многопользовательское управление вместо того, чтобы полагаться на хост-службы, таким образом, они представляли собой собственные системы разделения времени. Впервые представленная для использования в IBM в 1966 году система APL\360 [21] [22] [23] представляла собой многопользовательский интерпретатор. Возможность программного взаимодействия с операционной системой для получения информации и установки системных переменных интерпретатора осуществлялась с помощью специальных привилегированных функций «Двутаврового луча», используя как монадические , так и диадические операции. [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, который работал на 36-битных машинах DEC KI и KL. APL CompuServe был доступен как для коммерческого рынка, так и для службы информации для потребителей. С появлением к середине 1980-х годов сначала менее дорогих мейнфреймов, таких как IBM 4300 , а затем и персональных компьютеров, индустрия разделения времени практически исчезла.

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

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

На микрокомпьютерах, которые стали доступны с середины 1970-х годов, BASIC стал доминирующим языком программирования. [29] Тем не менее, некоторые микрокомпьютеры вместо этого использовали APL – первым из них был MCM/70 на базе Intel 8008 , который был выпущен в 1974 году [30] [31] и который в основном использовался в образовании. [32] Другой машиной того времени был компьютер семейства VideoBrain , выпущенный в 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. [55] Сообщаемый прирост производительности предполагает, что человек тратит достаточно времени на работу с языком, чтобы было полезно запомнить символы, их семантику и раскладки клавиатуры, не говоря уже о значительном количестве идиом для общих задач. [ нужна цитата ]

Дизайн

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

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

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

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

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

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

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

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

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

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

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

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

Синтаксис

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

Примеры

Привет, мир

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

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

Темой дизайна в 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 лотерейных номеров

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

Икс [ Икс 6 ? 40 ]

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

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

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

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

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

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

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

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

Сортировка

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

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

Игра Жизни

Следующая функция «жизнь», написанная в Dyalog APL, [75] [76] принимает булеву матрицу и вычисляет новое поколение в соответствии с « Игрой жизни» Конвея . Он демонстрирует возможности 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 получил свое название от инициалов книги Айверсона «Язык программирования» [ 3], хотя в книге описывается математическая нотация Айверсона, а не реализованный язык программирования, описанный в этой статье. Имя используется только для реальных реализаций, начиная с APL\360.

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

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

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

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

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

Логотип

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

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

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

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

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

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

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

АПЛ\360

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

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

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

АПЛ\1130

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

APL*Plus и Sharp APL

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

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

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

АПЛ2

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

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

АПЛГОЛ

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

Диалог АПЛ

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

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

НАРС2000

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

АПЛХ

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

Йорк АПЛ

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

ГНУ АПЛ

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

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

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

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

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

Идиоматическое признание

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

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

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

Сборник

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

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

Стандарты

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

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

  1. ^ ab «Цитаты и анекдоты APL». jsoftware.com . Проверено 14 апреля 2018 г.
  2. ^ "std::iota". cppreference.com .
  3. ^ abc Кеннет Э. Айверсон (1 декабря 1962 г.). Язык программирования. Уайли . ISBN 978-0-471-43014-8. ОЛ  26792153М. Викиданные  Q105954505 . Проверено 6 августа 2023 г.
  4. ^ Макинтайр, Дональд Б. (1991). «Язык как интеллектуальный инструмент: от иероглифов до APL». IBM Systems Journal . 30 (4): 554–581. дои : 10.1147/sj.304.0554. Архивировано из оригинала 4 марта 2016 года . Проверено 9 января 2015 г.
  5. ^ "Цитата на премию ACM - Джон Бэкус" . Награды.acm.org. 1977. Архивировано из оригинала 12 февраля 2008 года . Проверено 3 февраля 2010 г.
  6. ^ Аб Молер, Клив. «Рост MATLAB» (PDF) . Архивировано из оригинала (PDF) 11 апреля 2009 г. Проверено 3 февраля 2010 г.
  7. ^ Аб Хуэй, Роджер. «Библиография APL и J». jsoftware.com/jwiki . Проверено 2 марта 2010 г.
  8. ^ ab «Интервью с Артуром Уитни». Кх Системы. 4 января 2004 года. Архивировано из оригинала 4 апреля 2009 года . Проверено 2 марта 2010 г.
  9. ^ Айверсон, Кеннет Э., «Автоматическая обработка данных: Глава 6: Язык программирования». Архивировано 4 июня 2009 г., в Wayback Machine , 1960 г., Черновой вариант книги Брукса и Айверсона 1963 г. « Автоматическая обработка данных» .
  10. ^ Брукс, Фред ; Айверсон, Кеннет (1963), Автоматическая обработка данных , John Wiley & Sons Inc.
  11. ^ "Цитирование премии Тьюринга 1979" . Награды.acm.org. Архивировано из оригинала 23 декабря 2009 г. Проверено 3 февраля 2010 г.
  12. ^ Хеллерман, Х. (июль 1964 г.). «Экспериментальная система персонализированного преобразователя массивов». Коммуникации АКМ . 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 Анналы истории вычислений . дои :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. Архивировано из оригинала 12 мая 2008 г. Проверено 2 апреля 2007 г.
  19. ^ Руководство APL \ 1130. Архивировано 21 февраля 2011 г. в Wayback Machine , май 1969 г.
  20. ^ «Вспоминая APL». Quadibloc.com . Проверено 17 июня 2013 г.
  21. ^ Фалькофф, Адин; Айверсон, Кеннет Э., «Руководство пользователя APL\360». Архивировано 29 февраля 2012 г. в Wayback Machine , IBM Research, Исследовательский центр Томаса Дж. Уотсона, Йорктаун-Хайтс, штат Нью-Йорк, август 1968 г.
  22. ^ «Терминальная система APL \ 360». Архивировано 11 июля 2010 г. в Wayback Machine , IBM Research, Исследовательский центр Томаса Дж. Уотсона, март 1967 г.
  23. ^ Аб Пакин, Сандра (1968). Справочное руководство APL\360 . ISBN Science Research Associates, Inc. 978-0-574-16135-2.
  24. ^ Фалькофф, Адин Д.; Айверсон, Кеннет Э., Дизайн APL, Журнал исследований и разработок IBM , том 17, номер 4, июль 1973 г. «Эти функции, определяемые средой, были основаны на использовании еще одного класса функций, называемого «двутавровыми балками». из-за формы используемого для них символа, который обеспечивает более общие средства связи между программами APL и менее абстрактными частями системы. Функции двутаврового луча были впервые введены системными программистами, чтобы позволить им выполнять System/. 360 инструкций из программ APL и, таким образом, используют APL в качестве прямой помощи в своей программной деятельности. Очевидное удобство функций такого типа, которые оказались частью языка, привело к введению монадической двутавровой функции для. прямое использование кем-либо. Различные аргументы этой функции давали информацию об окружающей среде, такую ​​как доступное пространство и время суток».
  25. ^ Минкер, Джек (январь 2004 г.). «2.3.4 Разработка компьютерного программного обеспечения в CSC, 1962–1973». Начало компьютерных и компьютерных наук в Университете Мэриленда (PDF) (Отчет). Университет Мэриленда. п. 38. Архивировано из оригинала (PDF) 10 июня 2011 года . Проверено 23 мая 2011 г.
  26. ^ Стеббенс, Алан. "Как это все началось". Архивировано из оригинала 4 марта 2016 г. Проверено 22 мая 2011 г.
  27. ^ «Справочное руководство по языку и операциям Xerox APL» (PDF) . Архивировано (PDF) из оригинала 9 октября 2022 г.
  28. ^ "СИГАПЛ". Сигапл.орг . Проверено 17 июня 2013 г.
  29. ^ «Пятьдесят лет BASIC, языка программирования, сделавшего компьютеры персональными» . Время . 29 апреля 2014 года . Проверено 29 апреля 2018 г.
  30. ^ "Компьютеры MCM M70/M700" . old-computers.com . Архивировано из оригинала 3 апреля 2018 года . Проверено 8 апреля 2018 г.
  31. ^ Стачняк, Стачняк (2011). Изобретение ПК: история MCM/70. Издательство Университета Макгилла Куинса. ISBN 978-0-7735-3852-8.
  32. Миллер, Майкл (17 декабря 2014 г.). «Компьютеры, проложившие путь к Альтаиру». Журнал ПК . Зифф Дэвис . Проверено 29 апреля 2018 г.
  33. ^ "Семейный компьютер VideoBrain", Popular Science , ноябрь 1978 г., реклама.
  34. ^ «Взгляд на SuperPet». Вычислите! . Small System Services Inc., декабрь 1981 г. Проверено 29 апреля 2018 г.
  35. Гейтс, Билл (31 января 1976 г.). «Открытое письмо любителям». Информационный бюллетень доморощенного компьютерного клуба . Проверено 29 апреля 2018 г.
  36. ^ Хуэй, Роджер. «Вспоминая Кена Айверсона». keiapl.org . КЕИАПЛ . Проверено 10 января 2015 г.
  37. ^ "Кеннет Э. Айверсон". Премия Тьюринга ACM AM . АКМ . Проверено 10 января 2015 г.
  38. ^ «APL2: Первые годы: можете ли вы и должны ли вы идти на компромисс по техническим вопросам?» Глава SIGPLAN, посвященная языкам программирования массивов . АКМ . Проверено 10 января 2015 г.
  39. ^ abcd Фалькофф, Адин Д. (1991). «Семейство систем APL IBM». IBM Systems Journal . 30 (4): 416–432. дои : 10.1147/sj.304.0416. S2CID  19030940.
  40. ^ "IBM APL2" . ЭДМ2 . 09.10.2019 . Проверено 17 ноября 2021 г.
  41. ^ «APL2: Что нового» . IBM.com . ИБМ . Проверено 22 апреля 2018 г.
  42. ^ Микро АПЛ. «Обзор системы APL». microapl.com . Микро АПЛ . Проверено 10 января 2015 г.
  43. ^ Робертсон, Грэм. «Личный взгляд на APL2010». archive.vector.org.uk . Вектор – журнал Британской ассоциации APL. Архивировано из оригинала 2 апреля 2015 года . Проверено 10 января 2015 г.
  44. ^ Родригес, П.; Рохас, Дж.; Альфонсека, М.; Бургос, Дж.И. (1989). «Экспертная система химического синтеза, написанная на APL2/PC». ACM SIGAPL APL Quote Quad . 19 (4): 299–303. дои : 10.1145/75144.75185. S2CID  16876053.
  45. ^ «APL2: язык программирования для решения проблем, визуализации и доступа к базам данных» . www-03.ibm.com . ИБМ . Проверено 10 января 2015 г.
  46. ^ Пайк, Роб (25 марта 2018 г.). «Плющ». ГоДок . Архивировано из оригинала 13 августа 2019 г.
  47. ^ «Часто задаваемые вопросы по языку Wolfram» . Вольфрам . Проверено 20 февраля 2020 г. LISP и APL оказали два первых влияния.
  48. ^ Техасские инструменты (1977). «Полностраничная реклама TI 745: Представляем новый набор персонажей» . Компьютерный мир . 11 (27): 32 . Проверено 20 января 2015 г.
  49. ^ Диалог. «Шрифты и клавиатуры APL». www.dyalog.com . Диалог . Проверено 19 января 2015 г.
  50. ^ Смит, Боб. «Клавиатура NARS2000». www.sudleyplace.com . Боб Смит / NARS2000 . Проверено 19 января 2015 г.
  51. ^ «Введение в APL - символы APL» . www.microapl.co.uk . ООО «МикроАПЛ» . Проверено 8 января 2015 г.
  52. ^ Браун, Джеймс А.; Хоукс, Брент; Тримбл, Рэй (1993). «Расширение набора символов APL». ACM SIGAPL APL Quote Quad . 24 (1): 41–46. дои : 10.1145/166198.166203.
  53. ^ Кромберг, Мортен. «Поддержка Unicode для APL». archive.vector.org.uk . Вектор, журнал Британской ассоциации APL. Архивировано из оригинала 20 января 2015 года . Проверено 8 января 2015 г.
  54. ^ Сюй, Аарон. «Информатика и образование с помощью APL». Диалог, ООО . Проверено 15 июля 2016 г.
  55. ^ Dyalog, Inc. Шрифты и клавиатуры APL. https://www.dyalog.com/apl-font-keyboard.htm
  56. ^ ab MicroAPL. «Операторы». www.microapl.co.uk . МикроАПЛ . Проверено 12 января 2015 г.
  57. ^ Примитивные функции. «Примитивные функции». www.microapl.co.uk/ . Проверено 1 января 2015 г.
  58. ^ Рабочее пространство. «Рабочее пространство». www.microapl.co.uk . Проверено 1 января 2015 г.
  59. ^ «Пример». Catpad.net. Архивировано из оригинала 8 июля 2013 года . Проверено 17 июня 2013 г.
  60. ^ «Ввод символов APL». www.microapl.co.uk . Проверено 1 января 2015 г.
  61. ^ Дики, Ли (1993). «Список схем транслитерации APL». Архивировано из оригинала 29 сентября 2006 г.
  62. ^ Айверсон, Кентукки (август 1980 г.). «Нотация как инструмент мышления». Коммуникации АКМ . 23 (8): 444–465. дои : 10.1145/358896.358899. Архивировано из оригинала 20 сентября 2013 г.
  63. ^ Батенбург. «Эффективность APL». www.ekevanbatenburg.nl . Проверено 1 января 2015 г.
  64. ^ Ваксман. «Великое программирование APL» (PDF) . www.vaxman.de . Архивировано (PDF) из оригинала 9 октября 2022 г. Проверено 1 января 2015 г.
  65. ^ Янко, Вольфганг (май 1987 г.). «Исследование эффективности использования APL для программирования машины вывода». ACM SIGAPL APL Quote Quad . 17 (4): 450–456. дои : 10.1145/384282.28372.
  66. ^ Бореалис. «Почему АПЛ?». www.aplborealis.com . Проверено 1 января 2015 г.
  67. ^ Айверсон, Кеннет Э. (1987). «Словарь АПЛ». www.jsoftware.com . Проверено 20 января 2015 г.
  68. ^ abcdef «Концепции APL». Microapl.co.uk . Проверено 3 февраля 2010 г.
  69. ^ «Теория вложенных массивов». Ниал.com. Архивировано из оригинала 9 июля 2011 г. Проверено 3 февраля 2010 г.
  70. ^ abc "Programmera i APL", Бохман, Фрёберг, Studentlitteratur , ISBN 91-44-13162-3 
  71. ^ Айверсон, Кеннет Э. (1983). «Синтаксис и семантика APL». www.jsoftware.com . ИП Шарп Ассошиэйтс . Проверено 11 января 2015 г.
  72. ^ МикроАПЛ. «Примитивы APL». www.microapl.co.uk . МикроАПЛ . Проверено 11 января 2015 г.
  73. ^ «Шрифт APL - дополнительные глифы APL» . wiki.nars2000.org . НАРС2000 . Проверено 11 января 2015 г.
  74. ^ Фокс, Ральф Л. «Систематически случайные числа». www.sigapl.org . СИГАПЛ . Проверено 11 января 2015 г.
  75. Скоулз, Джон (26 января 2009 г.). Игра жизни Конвея в APL (видео). YouTube . Проверено 20 ноября 2021 г.
  76. ^ Дополнительные технические подробности можно найти в статье APL Wiki «Игра жизни Конвея». Проверено 20 ноября 2021 г.
  77. ^ Макдоннелл, Э.Э. Введение в справочник в APL, APL Press, 1981. (полный скан книги)
  78. ^ Ачарья, Р; Перейра, (904567457) NE Язык программирования APL. Архивировано 3 ноября 2021 г. в Wayback Machine . Статья по CS5314 (Концепции языков программирования) в Технологическом институте Вирджинии.
  79. ^ АПЛ Вики. Конференция АПЛ. Проверено 13 октября 2021 г.
  80. ^ Джейкоб Уильямс. Дегенеративная коника: Новая кровь. Проверено 13 октября 2021 г.
  81. ^ АПЛ Вики. Логотип АПЛ. Проверено 20 мая 2022 г.
  82. ^ ab «Годовой отчет за 2017 год» (PDF) . СимКорп. 1 февраля 2018 г. Архивировано (PDF) из оригинала 09 октября 2022 г. Проверено 3 апреля 2018 г. София — это платформа прямого управления инвестициями, такая как SimCorp Dimension. ... София основана на языке кодирования APL, как и некоторые части SimCorp Dimension.
  83. ^ Ли, Жорж; Лелуш, Радди; Мейссонье, Винсент; Зарри, Джан Пьеро (1 сентября 1982 г.). «Использование APL в среде искусственного интеллекта». ACM SIGAPL APL Quote Quad . 13 (1): 183–191. дои : 10.1145/390006.802242 . Проверено 3 апреля 2018 г.
  84. ^ Фордайс, К.; Салливан, Г. (1985). «Средства разработки искусственного интеллекта». APL Котировка Quad . APL 85 Конф. Учеб. (15): 106–113. дои : 10.1145/255315.255347 .
  85. ^ Альфонсека, Мануэль (июль 1990 г.). «Нейронные сети в APL». ACM SIGAPL APL Quote Quad . 20 (4): 2–6. дои : 10.1145/97811.97816 . Проверено 3 апреля 2018 г.
  86. ^ Кромберг, Мортен. «Программирование роботов в APL». www.dyalog.com/ . Проверено 6 января 2015 г.
  87. ^ Холмс, WN (май 1978 г.). «Является ли APL языком программирования?». Компьютерный журнал . 21 (2): 128–131. дои : 10.1093/comjnl/21.2.128 .
  88. Сюй, Аарон (18 ноября 2017 г.). «Шаблоны проектирования против антишаблонов в APL». www.functionconf.com . Архивировано из оригинала 23 марта 2018 года . Проверено 7 апреля 2018 г.
  89. ^ Магненат-Тальманн, Надя; Тельманн, Дэниел (1985). Теория и практика компьютерной анимации. Спрингер-Верлаг . п. 38. ISBN 9784431684336. Проверено 3 апреля 2018 г. Digital Effects — еще одна продюсерская компания, работавшая над «Троном». Они использовали систему лазерного сканирования для оцифровки, хранения и воспроизведения изображений. Джадсон Роузбуш, президент Digital Effects, является основным разработчиком APL VISION и FORTRAN VISION, двух пакетов компьютерной анимации, которые используются в настоящее время.
  90. Гуцелл, Сэм (17 октября 2017 г.). «Симулятор Штормграда на Dyalog '16». www.optima-systems.co.uk . Оптима Системы . Проверено 3 апреля 2018 г. Stormwind — это [3D-симулятор лодки], вызвавший огромный интерес в сообществе APL.
  91. ^ «OP - Pohjola ja Tieto hoitiva sovelluksen muutostyöt sujuvalla yhteistyöllä» [Плавное сотрудничество между OP-Pohjola и модификацией приложения с поддержкой Tieto ] (PDF) . www.tieto.com (на финском языке). Привязать к . Архивировано из оригинала (PDF) 9 октября 2022 г. Проверено 3 апреля 2018 г.[ постоянная мертвая ссылка ]
  92. ^ "Ви идаг" [Мы сегодня]. profdoccare.se (на шведском языке) . Проверено 3 апреля 2018 г. Благодаря выбору APL в качестве технической платформы относительно легко быстро построить решение, которое можно назвать исполняемым прототипом (перевод с оригинала).
  93. ^ Бреннер, Чарльз. «Технология ДНК-идентификации и APL». dna-view.com . Презентация на конференции пользователей APL 2005 года . Проверено 9 января 2015 г.
  94. ^ Бреннер, Чарльз. «ДНК повсюду – возможность для APL». www.youtube.com . YouTube. Архивировано из оригинала 14 ноября 2021 г. Проверено 9 января 2015 г.
  95. ^ "Награды - 1973 - Лоуренс Брид" . Ассоциация вычислительной техники. Архивировано из оригинала 2 апреля 2012 года.
  96. ^ «Награды - 1973 - Ричард Латвелл». Ассоциация вычислительной техники. Архивировано из оригинала 2 апреля 2012 года.
  97. ^ «Награды – 1973 – Роджер Мур». Ассоциация вычислительной техники. Архивировано из оригинала 2 апреля 2012 года.
  98. ^ «ИБМ 5100». old-computers.com . Архивировано из оригинала 30 апреля 2018 года . Проверено 8 апреля 2018 г.
  99. ^ «Добро пожаловать, IBM, в персональные компьютеры» . Байт . Декабрь 1975 г. с. 90 . Проверено 29 апреля 2018 г.
  100. ^ «Хронология APL и его влияние на развитие компьютерного языка». www.sigapl.org . АКМ . Проверено 29 апреля 2018 г.
  101. ^ Ларри Брид (август 2006 г.). «Как мы добрались до APL \ 1130». Вектор (Британская ассоциация APL) . 22 (3). ISSN  0955-1433. Архивировано из оригинала 12 мая 2008 года . Проверено 29 апреля 2018 г.
  102. ^ Роджер Мур (2005). «История разделения времени и сети IP Sharp Associates». Роджердмур.ca . Роджер Мур. Архивировано из оригинала 4 апреля 2019 года . Проверено 7 марта 2018 г.
  103. Блюменталь, Марсия (18 мая 1981 г.). «VAX-11 приобретают процессор APL». Компьютерный мир . Проверено 22 апреля 2018 г.
  104. ^ abc «Премия Кеннета Э. Айверсона за выдающийся вклад в APL». Глава SIGPLAN , посвященная языкам программирования массивов (SIGAPL). Архивировано из оригинала 26 февраля 2012 года.
  105. ^ Марк Шора (26 января 2021 г.). «Программное обеспечение для входа в систему объявляет о входе в систему APL2». Программное обеспечение для входа в систему . Проверено 17 ноября 2021 г.
  106. ^ Келли, РА (1973). «APLGOL, экспериментальный язык структурированного программирования». Журнал исследований и разработок IBM . 17 :69–73. дои : 10.1147/rd.171.0069.
  107. ^ Джонстон, Рональд Л. (июль 1977 г.). «APLGOL: Средства структурированного программирования для APL». Журнал Hewlett-Packard.
  108. ^ "Сайт ООО "Диалог"" . Проверено 6 июня 2018 г.
  109. ^ «Диалог на 25» (PDF) . Журнал «Вектор» . Британская ассоциация APL. Сентябрь 2008 года . Проверено 14 апреля 2018 г.[ постоянная мертвая ссылка ]
  110. Кромберг, Мортен (22 октября 2007 г.). «Массивы объектов» (PDF) . Материалы симпозиума 2007 года по динамическим языкам . п. 20. дои : 10.1145/1297081.1297087. ISBN 9781595938688. S2CID  18484472. Архивировано (PDF) из оригинала 9 октября 2022 г. Проверено 27 августа 2018 г.
  111. ^ Скоулз, Джон. «D: Функциональное подмножество Dyalog APL». Британская ассоциация APL.
  112. ^ Скоулз, Джон. «Перевод D-функций в неявную форму». ООО "Диалог"
  113. ^ «Диалог - Цены и лицензии» .
  114. ^ «Премия Айверсона 2016 года присуждается генеральному директору и исполнительному директору Dyalog» . Проверено 6 июня 2018 г.
  115. ^ «Система исследования вложенных массивов - NARS2000: экспериментальный интерпретатор APL» . НАРС2000 . Программное обеспечение Садли Плейс . Проверено 10 июля 2015 г.
  116. ^ «APLX снят с коммерческой продажи, но его можно загрузить бесплатно» . Microapl.com . Проверено 14 апреля 2018 г.
  117. ^ "Йорк АПЛ".
  118. ^ "GNU APL". каталог.fsf.org . Каталог свободного программного обеспечения . Проверено 28 сентября 2013 г.
  119. ^ Столлман, Ричард М. "RMS Berättar". Архивировано из оригинала 26 ноября 2018 года . Проверено 22 апреля 2018 г.
  120. ^ Бадд, Тимоти (1988). Компилятор APL. Спрингер-Верлаг. ISBN 978-0-387-96643-4.
  121. ^ «Что такое APL?». www.sigapl.org . СИГАПЛ . Проверено 20 января 2015 г.
  122. ^ Джу, Цзы-Цзин; Чинг, Вай-Ми (1991). «Использование параллелизма данных APL на машине MIMD с общей памятью». Информационный бюллетень Уведомления ACM SIGPLAN . 26 (7): 61–72. дои : 10.1145/109625.109633. S2CID  8584353.
  123. ^ Сюй, Аарон В.; Боуман, Уильям Дж. «Возвращаясь к APL в современную эпоху» (PDF) . www.cs.princeton.edu . Архивировано (PDF) из оригинала 9 октября 2022 г. Проверено 20 января 2015 г.
  124. ^ Чинг, В.-М.; Джу, Д. (1991). «Выполнение автоматически распараллеливаемых программ APL на RP3». Журнал исследований и разработок IBM . 35 (5/6): 767–777. дои : 10.1147/rd.355.0767. Архивировано из оригинала 3 марта 2016 года . Проверено 20 января 2015 г.
  125. ^ Блеллох, Гай Э.; Сабот, Гэри В. (1990). «Компиляция языков, ориентированных на коллекции, на массово-параллельных компьютерах». Журнал параллельных и распределенных вычислений . 8 (2): 119–134. CiteSeerX 10.1.1.51.5088 . дои : 10.1016/0743-7315(90)90087-6. Языки, ориентированные на коллекции, включают APL, APL2. 
  126. ^ Йендршок, Йоханнес; Хоффманн, Рольф; Эдигер, Патрик; Келлер, Йорг. «Реализация параллельных функций данных, подобных APL, на машине GCA» (PDF) . www.fernuni-hagen.de . стр. 1–6. Архивировано из оригинала (PDF) 22 января 2015 года . Проверено 22 января 2015 г. GCA – Глобальная клеточная автоматизация. По сути, это массовая параллель. «APL был выбран из-за способности выражать матричные и векторные структуры.
  127. ^ Бреннер, Норман (1984). «Проектирование схем СБИС с использованием APL с подпрограммами на языке Фортран». ACM SIGAPL APL Quote Quad . 14 (4): 77–79. дои : 10.1145/800058.801079. ISBN 0-89791-137-7. S2CID  30863491. APL для интерактивности и простоты кодирования.
     • Бреннер, Норман (1984). «Проектирование схем СБИС с использованием APL с подпрограммами на языке Фортран». Материалы международной конференции по APL – APL '84 . АСМ СИГАПЛ. ISBN 978-0897911375.
  128. ^ Гэмбл, диджей; Хобсон, РФ (1989). «К графической/процедурной среде для создания генераторов модулей СБИС». Материалы конференции Тихоокеанская конференция IEEE по коммуникациям, компьютерам и обработке сигналов . стр. 606–611. дои : 10.1109/PACRIM.1989.48437. S2CID  7921438. Описаны генераторы модулей СБИС. APL и C, как примеры интерпретируемых и компилируемых языков, могут быть подключены к усовершенствованному графическому дисплею.
  129. ^ Ли, Роберт С. (1983). «Две реализации APL». Журнал ПК . 2 (5): 379 . Проверено 20 января 2015 г.
  130. ^ "Компьютерный язык APL" . МАРТА и ЛАМА . Архивировано из оригинала 13 февраля 2015 года . Проверено 20 января 2015 г.
  131. ^ Мецгер, Роберт; Вэнь, Чжаофан (2000). Автоматическое распознавание и замена алгоритмов: новый подход к оптимизации программ. Пресса МТИ. ISBN 9780262133685. Проверено 6 мая 2018 г.
  132. ^ Снайдер, Лоуренс (1982). «Распознавание и выбор идиом для оптимизации кода». Акта Информатика . 17 (3). дои : 10.1007/BF00264357. S2CID  8369972.
  133. ^ Ченг, Фэн Шэн (1981). Сопоставление идиом: метод оптимизации компилятора APL (Диссертация). Университет штата Айова . Проверено 6 мая 2018 г.
  134. ^ «Распознавание идиом». dialog.com . Проверено 6 мая 2018 г.
  135. ^ Строун, Джордж О. (март 1977 г.). «Действительно ли APL нуждается в анализе во время выполнения?». Программное обеспечение: практика и опыт . 7 (2): 193–200. дои : 10.1002/спе.4380070207. S2CID  1463012.
  136. ^ ab «Руководство пользователя компилятора» (PDF) . www.dyalog.com . ООО «Диалог». Архивировано (PDF) оригиналом 09.10.2022 . Проверено 7 мая 2018 г.
  137. ^ аб Дрисколл, Грэм С. младший; Орт, Дональд Л. (ноябрь 1986 г.). «Составление APL: переводчик APL Йорктауна». Журнал исследований и разработок IBM . 30 (6): 583–593. дои : 10.1147/rd.306.0583. S2CID  2299699.
  138. ^ «Хронология АПЛ». www.sigapl.org . АКМ . Проверено 7 мая 2018 г.
  139. ^ Вай-Ми, Чинг (ноябрь 1986 г.). «Анализ программы и генерация кода в компиляторе APL/370». Журнал исследований и разработок IBM . 30 (6): 594–602. дои : 10.1147/rd.306.0594. S2CID  17306407.
  140. ^ "Проект APEX".
  141. ^ «Компилятор APL (сообщение Джима Вейгана в группу новостей comp.lang.apl)» . 5 апреля 1994 г.

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

видео

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

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