Из Википедии, свободной энциклопедии
  (Перенаправлено из Dyalog APL )
Перейти к навигации Перейти к поиску

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

История [ править ]

Математические обозначения [ править ]

Математическая запись для работы с массивами была разработана Kenneth E. Iverson , начиная с 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 , и они использовались студентами в специальном курсе средней школы по вычислению трансцендентных функций путем суммирования рядов. Студенты протестировали свой код в лаборатории Хеллермана. Эта реализация части нотации получила название персонализированного транслятора массива (PAT). [12]

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

После того, как Лоуренс М. Брид и Филип С. Абрамс из Стэнфордского университета присоединились к команде IBM Research, они продолжили свою предыдущую работу над реализацией, запрограммированной на ФОРТРАНЕ IV для части нотации, которая была сделана для компьютера IBM 7090, работающего на Операционная система IBSYS . Эта работа была завершена в конце 1965 года и впоследствии получила название IVSYS (от системы Iverson). Основа этой реализации была подробно описана Абрамсом в техническом отчете Стэнфордского университета «Интерпретатор нотации Айверсона» в 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 был впервые доступен в 1967 году для IBM 1130 как APL \ 1130 . [18] [19] Он занимал всего 8k 16-битных слов памяти и использовал выделенный жесткий диск объемом 1 мегабайт.

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

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

В 1973 году IBM выпустила APL.SV , который был продолжением того же продукта, но предлагал общие переменные в качестве средства доступа к средствам за пределами системы APL, таким как файлы операционной системы. В середине 1970-х интерпретатор мэйнфрейма IBM был даже адаптирован для использования на настольном компьютере IBM 5100 , который имел небольшой ЭЛТ и клавиатуру APL, тогда как большинство других небольших компьютеров того времени предлагали только BASIC . В 1980-х годах программный продукт VSAPL широко использовался пользователями Conversational Monitor System (CMS), опции разделения времени (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-битных машинах DEC KI и KL. 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 AG , Xerox и других. .

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

Микрокомпьютеры [ править ]

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

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

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

APL2 [ править ]

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

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

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

Современные реализации [ править ]

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

Производные языки [ править ]

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

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

Языковые характеристики [ править ]

Набор символов [ править ]

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

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

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

Дизайн [ править ]

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

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

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

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

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

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

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

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

Терминология [ править ]

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

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

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

Синтаксис [ править ]

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

Примеры [ править ]

Привет, мир [ править ]

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

'Привет мир'

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

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

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

Возведение в степень [ править ]

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

Простая статистика [ править ]

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

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

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

Выберите 6 номеров лотереи [ править ]

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

x [ x 6 ? 40 ]

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

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

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

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

Простые числа [ править ]

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

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

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

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

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

Сортировка [ править ]

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

X [ X + . '' ;]

Игра Жизни [ править ]

Следующая функция life, написанная на Dyalog APL, принимает логическую матрицу и вычисляет новое поколение в соответствии с игрой Конвея в жизнь . Он демонстрирует возможности 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 используется для многих целей, включая финансовые и страховые приложения, [74] искусственный интеллект , [75] [76] нейронные сети [77] и робототехнику . [78] Утверждалось, что APL - это инструмент вычислений , а не язык программирования; [79] его символическая природа и возможности массива сделали его популярным среди экспертов в предметной области и специалистов по данным [80], которые не имеют или не нуждаются в навыках компьютерного программиста .

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

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

Известные реализации [ править ]

APL \ 360 [ править ]

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

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

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

APL \ 1130 [ править ]

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

APL * Plus и Sharp APL [ править ]

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

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

APL2 [ править ]

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

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

АПЛГОЛ [ править ]

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

Dyalog APL [ править ]

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

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

NARS2000 [ править ]

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

APLX [ править ]

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

GNU APL [ править ]

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

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

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

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

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

Распознавание идиомы [ править ]

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

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

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

Компиляция [ править ]

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

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

Стандарты [ править ]

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

Ссылки [ править ]

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

Дальнейшее чтение [ править ]

  • APL Machine (докторская диссертация в Стэнфорде, 1970, Филип Абрамс)
  • Личная история APL (статья Майкла С. Монтальбано в 1982 году)
  • Макинтайр, Дональд Б. (1991). «Язык как интеллектуальный инструмент: от иероглифов до APL» (PDF) . IBM Systems Journal . 30 (4): 554–581. DOI : 10.1147 / sj.304.0554 . Архивировано из оригинального (PDF) 4 мая 2006 года.
  • Айверсон, Кеннет Э. (1991). «Персональный взгляд на APL» (PDF) . IBM Systems Journal . 30 (4): 582–593. DOI : 10.1147 / sj.304.0582 . Архивировано из оригинального (PDF) 27 февраля 2008 года.
  • Язык программирования от Kenneth E. Iverson
  • АПЗ в экспозиции от Kenneth E. Iverson
  • Брукс, Фредерик П .; Кеннет Айверсон (1965). Автоматическая обработка данных, System / 360 Edition . ISBN 0-471-10605-4 . 
  • Аскулум, Аджай (август 2006 г.). Сборка системы с помощью APL + Win . Вайли. ISBN 978-0-470-03020-2.
  • Фалькофф, Адин Д .; Айверсон, Кеннет Э .; Сассенгут, Эдвард Х. (1964). «Формальное описание системы / 360» (PDF) . IBM Systems Journal . 3 (2): 198–261. DOI : 10.1147 / sj.32.0198 . Архивировано из оригинального (PDF) 27 февраля 2008 года.
  • История языков программирования , глава 14 [ требуется пояснение ]
  • Банон, Джеральд Жан Фрэнсис (1989). Bases da Computacao Grafica . Рио-де-Жанейро: кампус. п. 141.
  • Лепаж, Уилбур Р. (1978). Прикладное программирование APL . Прентис Холл.
  • Мужен, Филипп; Дюкасс, Стефан (ноябрь 2003 г.). «OOPAL: интеграция программирования с массивами в объектно-ориентированное программирование» (PDF) . Proceeding OOPSLA '03 Proceedings 18-й ежегодной конференции ACM SIGPLAN по объектно-ориентированному программированию, системам, языкам и приложениям . 38 (11): 65–77. DOI : 10.1145 / 949343.949312 . Архивировано из оригинального (PDF) 14 ноября 2006 года.
  • Dyalog Limited (сентябрь 2006 г.). Введение в объектно-ориентированное программирование для программистов APL (PDF) . Dyalog Limited. Архивировано из оригинального (PDF) 4 октября 2007 года.
  • Шустек, Лен (10 октября 2012 г.). "Исходный код языка программирования APL" . Музей истории компьютеров (CHM). Архивировано 6 сентября 2017 года . Проверено 6 сентября 2017 года .
  • Свобода, Антонин ; White, Donnamaie E. (2016) [2012, 1985, 1979-08-01]. Advanced Logical Circuit Design Techniques (PDF) (перепечатанное электронное переиздание). Garland STPM Press (исходное издание) / WhitePubs Enterprises, Inc. (переиздание). ISBN 978-0-8240-7014-4. LCCN  78-31384 . Архивировано (PDF) из оригинала на 2017-04-14 . Проверено 15 апреля 2017 . [1] [2]

Видео [ править ]

  • The Origins of APL - интервью в стиле ток-шоу 1974 года с первыми разработчиками APL.
  • APL демонстрация - 1975 живая демонстрация АПЗ на профессора Боба Спенс , Imperial College London .
  • «Игра жизни в APL» Конвея - учебное пособие Джона Скоулза из Dyalog Ltd. 2009 года, в котором «Игра жизни» Конвея реализована в одной строке APL.
  • 50 лет APL - введение в APL в 2009 году Грэмом Робертсоном.

Внешние ссылки [ править ]

Интернет-ресурсы [ править ]

  • TryAPL.org , онлайн-учебник по APL
  • APL Wiki
  • APL в Керли
  • APL2C , источник ссылок на компиляторы APL

Провайдеры [ править ]

  • IBM APL2
  • Диалог АПЛ
  • APLX
  • APL2000
  • NARS2000
  • GNU APL
  • OpenAPL

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

  • Финляндия : Финская ассоциация APL (FinnAPL)
  • Франция : APL et J
  • Германия : APL-Germany eV
  • Япония : Японская ассоциация APL (JAPLA)
  • Швеция : Шведская группа пользователей APL (SwedAPL), заархивированная 2 апреля 2018 г. на Wayback Machine
  • Швейцария : Швейцарская группа пользователей APL (SAUG)
  • Соединенное Королевство : Британская ассоциация APL.
  • США : глава ACM SIGPLAN о языках программирования массивов (SIGAPL)