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

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

Оборудование [ править ]

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

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

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

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

Первый интерактивный вход в APL и создание рабочего пространства APL было сделано в 1966 году Ларри Бридом с использованием терминала IBM 1050 в лаборатории IBM Mohansic Labs рядом с Исследовательским центром Томаса Дж. Ватсона , домом APL, в Йорктаун-Хайтс, Нью-Йорк . [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 реализовывали собственное многопользовательское управление вместо того, чтобы полагаться на службы хоста, таким образом, они были их собственными системами разделения времени. Впервые представленная в 1966 году система APL \ 360 [21] [22] [23] была многопользовательским интерпретатором. Возможность программного обмена данными с операционной системой для получения информации и установки системных переменных интерпретатора была реализована с помощью специальных привилегированных функций «двутавровой балки», использующих как монадические, так и диадические операции. [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в каждом месте, где соответствующее число in 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]

Dyalog APL [ править ]

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

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

NARS2000 [ править ]

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

APLX [ править ]

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

GNU APL [ править ]

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

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

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

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

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

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

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

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

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

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

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

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

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

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 . 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 ( ссылка )
  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 Turing. "Кеннет Э. Айверсон - Цитата" . 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 . 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. ^ Texas Instruments (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. ^ Batenburg. «Эффективность АПЛ» . 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. ... Sofia основана на языке кодирования 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. ^ Magnenat-Тельман, Надь; Тальманн, Даниэль (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 года . Штормград - [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. ^ "Сайт ООО" Диалог " . Проверено 6 июня 2018 .
  100. ^ «Диалог в 25» (PDF) . Журнал Вектор . Британская ассоциация APL. Сентябрь 2008 . Проверено 14 апреля 2018 года . [ постоянная мертвая ссылка ]
  101. ^ Kromberg, Morten (22 октября 2007). «Массивы объектов» (PDF) . Материалы симпозиума 2007 г. по динамическим языкам : 20. doi : 10.1145 / 1297081.1297087 . ISBN  9781595938688. S2CID  18484472 . Проверено 27 августа 2018 .
  102. ^ Скоулз, Джон. «D: функциональное подмножество Dyalog APL» . Британская ассоциация APL.
  103. ^ «Диалог - Цены и лицензии» .
  104. ^ "Премия Iverson 2016 награждает генерального директора Dyalog и главного исполнительного директора" . Проверено 6 июня 2018 .
  105. ^ "Система исследования вложенных массивов - NARS2000: экспериментальный интерпретатор APL" . NARS2000 . Программное обеспечение Sudley Place . Проверено 10 июля 2015 года .
  106. ^ «APLX снят с продажи, но может быть загружен бесплатно» . Microapl.com . Проверено 14 апреля 2018 года .
  107. ^ "GNU APL" . directory.fsf.org . Каталог бесплатного программного обеспечения . Проверено 28 сентября 2013 года .
  108. ^ Столмен, Ричард М. "RMS Berättar" . Архивировано из оригинального 26 ноября 2018 года . Проверено 22 апреля 2018 года .
  109. ^ Бадд, Тимоти (1988). Компилятор APL . Springer-Verlag. ISBN 978-0-387-96643-4.
  110. ^ SIGAPL. "Что такое APL?" . www.sigapl.org . SIGAPL . Проверено 20 января 2015 года .
  111. Ju, Dz-Ching; Чинг, Вай-Ми (1991). «Использование параллелизма данных APL на машине MIMD с общей памятью». Информационный бюллетень Уведомления ACM SIGPLAN . 26 (7): 61–72. DOI : 10.1145 / 109625.109633 . S2CID 8584353 . 
  112. ^ Сюй, Аарон У .; Боуман, Уильям Дж. «Пересмотр APL в современную эпоху» (PDF) . www.cs.princeton.edu . Университет Индианы / Принстон . Проверено 20 января 2015 года .
  113. ^ Цзин, W.-M .; Джу Д. (1991). «Выполнение автоматически распараллеленных программ APL на RP3» . Журнал исследований и разработок IBM . 35 (5/6): 767–777. DOI : 10.1147 / rd.355.0767 . Проверено 20 января 2015 года .
  114. ^ Blelloch, Guy E .; Сабо, Гэри В. (1990). "Компиляция языков, ориентированных на коллекцию, на параллельных компьютерах". Журнал параллельных и распределенных вычислений . 8 (2): 119–134. CiteSeerX 10.1.1.51.5088 . DOI : 10.1016 / 0743-7315 (90) 90087-6 . Языки, ориентированные на коллекцию, включают APL, APL2 
  115. ^ Jendrsczok, Johannes; Хоффманн, Рольф; Эдигер, Патрик; Келлер, Йорг. «Реализация APL-подобных функций параллельной обработки данных на машине GCA» (PDF) . www.fernuni-hagen.de . Fernuni-Hagen.De. С. 1–6. Архивировано из оригинального (PDF) 22 января 2015 года . Проверено 22 января 2015 года . GCA - Global Cellular Automation. По своей сути массивно параллельные. APL был выбран из-за способности выражать матричные и векторные структуры.
  116. ^ Бреннер из исследовательского центра 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 для интерактивности и простоты программирования
  117. Gamble, DJ; Хобсон, РФ (1989). «На пути к графике / Процедурная среда для построения генераторов модулей СБИС». Продолжение конференции Конференция IEEE Pacific Rim по коммуникациям, компьютерам и обработке сигналов . С. 606–611. DOI : 10,1109 / PACRIM.1989.48437 . S2CID 7921438 . Описаны генераторы модулей СБИС. APL и C, как примеры интерпретируемых и компилируемых языков, могут быть связаны с расширенным графическим дисплеем. 
  118. ^ Ли, Роберт С. (1983). «Две реализации APL» . Журнал ПК . 2 (5): 379 . Проверено 20 января 2015 года .
  119. ^ МАРТА и ЛЛАМА. "Компьютерный язык APL" . marthallama.org . MarthaLlama . Проверено 20 января 2015 года .
  120. ^ Мецгер, Роберт; Вэнь, Чжаофан (2000). Автоматическое распознавание и замена алгоритмов: новый подход к оптимизации программ . Пресса Массачусетского технологического института. ISBN 9780262133685. Проверено 6 мая 2018 года .
  121. ^ Снайдер, Лоуренс (1982). «Распознавание и выбор идиом для оптимизации кода». Acta Informatica . 17 (3). DOI : 10.1007 / BF00264357 . S2CID 8369972 . 
  122. Перейти ↑ Cheng, Feng Sheng (1981). «Сопоставление идиомы: метод оптимизации для компилятора APL» . Государственный университет Айовы . Проверено 6 мая 2018 года . Цитировать журнал требует |journal=( помощь )
  123. ^ «Распознавание идиомы» . dyalog.com . Проверено 6 мая 2018 года .
  124. ^ Строн, Джордж О. (март 1977). «Действительно ли APL нужен синтаксический анализ во время выполнения?». Журнал программного обеспечения: практика и опыт . 7 (2): 193–200. DOI : 10.1002 / spe.4380070207 . S2CID 1463012 . 
  125. ^ a b «Руководство пользователя компилятора» (PDF) . www.dyalog.com . ООО "Дьялог" . Проверено 7 мая 2018 года .
  126. ^ а б Дрисколл младший, Грэм С.; Орт, Дональд Л. (ноябрь 1986 г.). "Компиляция APL: переводчик APL Yorktown". Журнал исследований и разработок IBM . 30 (6): 583–593. DOI : 10.1147 / rd.306.0583 . S2CID 2299699 . 
  127. ^ «Хронология APL» . www.sigapl.org . ACM . Проверено 7 мая 2018 года .
  128. Wai-Mee, Ching (ноябрь 1986 г.). «Анализ программ и генерация кода в компиляторе APL / 370». Журнал исследований и разработок IBM . 30 (6): 594–602. DOI : 10.1147 / rd.306.0594 . S2CID 17306407 . 
  129. ^ «Проект APEX» .
  130. ^ «Компилятор APL (сообщение от Джима Вейганга для группы новостей comp.lang.apl)» . 5 апреля 1994 г.

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

  • Аппарат APL (докторская диссертация в Стэнфорде, 1970, Филип Абрамс)
  • Личная история APL (статья Майкла С. Монтальбано в 1982 году)
  • Макинтайр, Дональд Б. (1991). «Язык как интеллектуальный инструмент: от иероглифов до APL» (PDF) . Журнал IBM Systems . 30 (4): 554–581. DOI : 10.1147 / sj.304.0554 . Архивировано из оригинального (PDF) 4 мая 2006 года.
  • Айверсон, Кеннет Э. (1991). «Персональный взгляд на APL» (PDF) . Журнал IBM Systems . 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 . 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 - учебник 2009 года Джона Скоулза из Dyalog Ltd., который реализует игру Конвея в одной строке APL.
  • 50 лет APL - введение в APL в 2009 году Грэмом Робертсоном.

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

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

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

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

  • IBM APL2
  • Dyalog APL
  • 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)