Кіріспе

Функционалдық бағдарламалау тілі массивтер үшін

APL (A Programming Language кітабының атымен аталған) – 1960 жылдары Кеннет Э. Иверсон жасаған бағдарламалау тілі. Оның негізгі дерек типі – көп өлшемді массив. Ол көптеген функциялар мен операторларды көрсету үшін арнайы графикалық символдардың кең спектрін пайдаланады, нәтижесінде өте ықшам код пайда болады. Ол түсінік моделі, электрондық кестелер, функционалдық бағдарламалау және компьютерлік математика пакеттерін дамытуға маңызды ықпал етті. 1979 жылы Иверсон APL бойынша жұмысы үшін Тьюринг сыйлығын алды.

Компьютерлік бағдарламалау тіліне айналу

1962 жылы толық компьютерлік жүйені сипаттау үшін белгілемені қолданудың алғашқы талпырысы Фалькоффтың Уильям Картермен кейін IBM System/360 отбасы болып қалатын машиналар үшін нұсқаулар жиынтығын стандарттау жұмысын талқылағаннан кейін жасалды. 1963 жылы IBM Systems Research Institute-та жұмыс істейтін Герберт Хеллерман IBM 1620 компьютерінде белгілеменің бір бөлігін іске асырды, және ол арнайы орта мектеп курсында студенттер тізбектей қосым арқылы трансценденттік функцияларды есептеуде қолданды. Студенттер Хеллерманның зертханасында өз кодтарын сынап көрді. Белгілеменің осы бөлігін іске асыру «Жекелендірілген Массив Аудармашысы» (PAT) деп аталды. 1963 жылы Фалькофф, Айверсон және Эдвард Х. Сюссенгут-кіші, барлығы IBM-де жұмыс істейтін, IBM System/360 сериялы машина архитектурасы мен функционалдығының ресми сипаттамасы үшін белгілемені пайдаланды, нәтижесінде 1964 жылы IBM Systems Journal журналында жарияланған мақала жарық көрді. Бұл жарияланғаннан кейін команда компьютерлік жүйеде белгілемені іске асыруға көшті. Осы іске асыруға назар аударудың себептерінің бірі 1964 жылы IBM сатып алған білім беру компаниясы Science Research Associates-те жаңа міндеттерге ие болған Джон Л. Лоуренстің қызығушылығы болды. Лоуренс Айверсон мен оның тобынан тілді білім беруде компьютерлерді дамыту және пайдалану құралы ретінде қолдануға көмектесуді сұрады. Стэнфорд университетінен Лоренс М. Брид пен Филип С. Абрамс IBM Research командасына қосылғаннан кейін, олар IBSYS операциялық жүйесінде жұмыс істейтін IBM 7090 компьютері үшін жасалған белгілеменің бір бөлігін FORTRAN IV бағдарламасында бағдарламалау бойынша бұрынғы жұмыстарын жалғастырды. Бұл жұмыс 1965 жылдың соңында аяқталды және кейіннен IVSYS (Айверсон жүйесі үшін) деп аталды. Осы іске асырудың негізін Абрамс 1966 жылы Стэнфорд университетінің техникалық есебінде «Айверсон белгісіне арналған интерпретатор» деп толық сипаттады. Академиялық жағынан Niklaus Wirth ресми басшылық етті. Hellerman-ның PAT жүйесі сияқты, бұл іске асыру APL таңбалар жиынтығын қамтымады, бірақ функциялар мен операторлар үшін арнайы ағылшын тіліндегі сақталған сөздерді пайдаланды. Бұл жүйе кейіннен уақытты бөлісу жүйесіне бейімделді және 1966 жылдың қарашасына қарай ол уақытты бөлісу режимінде жұмыс істейтін IBM System/360 Model 50 компьютері үшін қайта бағдарламаланды және IBM-де ішкі пайдалану үшін қолданылды.

Жабдық

АПЛ-ді тиімді пайдалану мүмкіндігінің маңызды дамуы, катодты сәулелі түтік (CRT) терминалдары кеңінен қолданысқа кіргенге дейін, IBM Selectric пернетақтасының арнайы, алмастырылатын басу элементі болды. Бұл элемент Selectric пернетақтасы мен басу механизмін пайдаланатын қағазға басып шығару терминалдарында қолданылды, мысалы IBM 1050 және IBM 2741 терминалдары. Пернелердің үстіне қақпақтар орнатылып, сол перне басылғанда қандай АПЛ таңбалары енгізілетінін көрсетуге болатын. Бағдарламашы алғаш рет Иверсонның нотациясында қолданылатын АПЛ таңбаларын басып, көре алды және оларды ағылшын тіліндегі ұзын сөздермен алмастыруға мәжбүр болмайды. Фалькофф пен Айверсон 1964 жылдың соңында арнайы АПЛ Selectric 987 және 988 басу элементтерін жасады, бірақ оларды пайдалануға АПЛ компьютерлік жүйесі болмады. Айверсон АПЛ таңбалар жиынтығы үшін IBM Selectric басу элементін пайдалану идеясының бастамашысы ретінде Фалькоффты атады. Көптеген АПЛ символдары, тіпті Selectric басу элементіндегі АПЛ таңбалары болған жағдайда да, екі қолданыстағы элемент таңбасын бір-бірінің үстіне басып жазу арқылы жасалуы керек болды. Мысалы, өсу реті таңбасын дельтадан (H пернесін басу арқылы) және Шеффердің сызығынан (M пернесін басу арқылы) жасау қажет болды. Бұл қажеттілік туды, себебі АПЛ таңбалар жиынтығы, тіпті әріптер үлкен әріптермен (бас әріптермен) шектелген жағдайда да, басу элементінде рұқсат етілген 88 таңбадан әлдеқайда көп болды.

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

1970-жылдардың ортасынан бастап қолжетімді болған микрокомпьютерлерде BASIC басым бағдарламалау тіліне айналды. Бірақ, кейбір микрокомпьютерлер APL-ді ұсынды – алғашқысы 1974 жылы шыққан және негізінен білім беруде қолданылған Intel 8008 негізіндегі MCM/70 болды. Осы кезеңдегі тағы бір құрылғы – 1977 жылы шыққан VideoBrain Family Computer, ол APL/S деп аталатын APL-дің өзіндік түрімен бірге келді. 1981 жылы ұсынылған Commodore SuperPET Ватерлоо университеті жасаған APL интерпретаторын қамтыды. 1976 жылы Билл Гейтс хоббистерге арналған ашық хатында Microsoft Corporation Intel 8080 және Motorola 6800 үшін APL-ді жүзеге асырып жатқанын, бірақ бағдарламалық қамтамастың пираттығына байланысты "оны хоббистерге қолжетімді етуге ынтасы шамалы" екенін мәлімдеді. Ол ешқашан жарық көрген жоқ.

APL2

1980 жылдардың басында Джим Браунның басшылығымен IBM APL компаниясы APL тілінің жаңа нұсқасын жасады, оның басты жетістігі – ұялы массивтер концепциясы болды. Бұл массивтердің ішінде басқа массивтердің орналасуына мүмкіндік берді, сондай-ақ ұялы массивтерді бағдарламалық процеске енгізуді жеңілдететін жаңа тілдік мүмкіндіктер енгізілді. Кен Айверсон, APL тілінің дамуын қадағалау құқығынан айырылып, IBM компаниясынан кетіп, I. P. Sharp Associates компаниясына қосылды. Ондағы ең маңызды үлесі – Sharp APL-дің дамуын оның жеке көзқарасына сәйкес бағыттау болды. APL2 алғаш рет 1984 жылы CMS және TSO жүйелері үшін шығарылды. APL2 Workstation нұсқасы (Windows, OS/2, AIX, Linux және Solaris) одан кейін жарық көрді. Басқа да өндірушілер Unix негізіндегі микрокомпьютерлер сияқты жаңа аппараттық құралдарға арналған APL интерпретаторларын жасаумен айналысып жатқанда, APL2 жаңа APL интерпретаторларын жасаудағы стандартқа айналды. Күні бүгінге дейін көптеген APL сатушылары немесе олардың қолданушылары өнімдерін таңдаудың себебі ретінде APL2 үйлесімділігін көрсетеді. IBM оны мәселелерді шешу, жүйелерді жобалау, прототиптер жасау, инженерлік және ғылыми есептеулер, сарапшы жүйелер, математика және басқа пәндерді оқыту, деректерді визуализациялау және деректер қорына қол жеткізу үшін пайдалануға болатынын айтады.

Қазіргі заманғы іске асыру

APLX, Dyalog және т.б. APL-дің әртүрлі нұсқалары объектіге бағытталған бағдарламалауға арналған кеңейтімдерді, NET қолдауын, XML массивтерін түрлендіруге арналған қарапайым функцияларды, график салу мүмкіндіктерін, операциялық жүйе интерфейстерін және лямбда-есептеу өрнектерін қамтиды. Тегін нұсқаларға Linux үшін GNU APL және Windows үшін NARS2000 (Wine арқылы Linux-та да жұмыс істейді) кіреді. Екеуі де әртүрлі тілдік кеңейтімдермен APL2-нің толыққанды нұсқалары болып табылады.

Таңбалар жиынтығы

APL бірегей, стандартты емес символдар жиынтығын таңдағаны үшін сынға да, мақтауға да ілікті. 1960 және 1970 жылдары аз ғана терминал құрылғылары немесе тіпті дисплейлер APL символдар жиынтығын көшіре алды. Көбінесе IBM Selectric баспа механизмі, арнайы APL шрифті элементімен бірге қолданылды. Ертедегі APL желілік терминалдарының бірі (толық экран емес, тек жол режимінде жұмыс істейтін) – Texas Instruments TI Model 745 (шамамен 1977 ж.) болды. Ол жартылай және толық дуплекс телекоммуникация режимдерін қолдайтын толық APL символдар жиынтығымен жабдықталған. Бұл APL уақытты бөлісу сервисімен немесе RJE деп аталатын қашықтан компьютерлік тапсырманы орындау үшін қашықтанғы мейнфрейммен өзара әрекеттесуге мүмкіндік берді. Уақыт өте келе, жоғары сапалы графикалық дисплейлердің, баспа құрылғыларының және Unicode қолдауының кеңінен таралуының арқасында APL символдарының шрифті мәселесі көбінесе шешілді. Дегенмен, APL символдарын енгізу үшін кіріс әдісі редакторларын, пернетақта сәйкестендірулерін, виртуалды/экрандық APL символдар жиынтығын немесе жаңадан бастаушыларды шатастыруы мүмкін, басқа бағдарламалау тілдеріне үйренгендер үшін жеңіл сілтемелі баспа пернетақта карталарын пайдалану қажет. Басқа бағдарламалау тілдерінде тәжірибесі жоқ жаңадан бастаушылар арасында орта мектеп оқушыларымен жүргізілген зерттеуде APL символдарын теру және пайдалану оқушылардың ешқандай байқалатын қиындықтарына себеп болмағаны анықталды. APL-ді қорғайтын болсақ, оған басқа символдарға қарағанда аз символ теру қажет, ал пернетақта сәйкестендірулері уақыт өте келе есте сақталады. Қазіргі кезде арнайы APL пернетақталары жасалып, қолданылуда, сондай-ақ Microsoft Windows сияқты операциялық жүйелер үшін тегін жүктеліп алуға болатын шрифттер де бар. Өнімділіктің артуы тілде жеткілікті уақыт жұмсап, символдарды, олардың мағынасын және пернетақта сәйкестендірулерін жаттауға тұрарлық ететінін, сонымен қатар жиі қолданылатын тапсырмалар үшін көптеген тіркестерді білу қажеттігін болжайды.

Экспонентациялау

Бұл тақырыптың тағы бір мысалы - АПЛ-де экспоненциалдық 2-нің 3-ге дәрежесін білдіретін , деп жазылады (бұл кейбір тілдерде немесе немесе деп жазылады, ал басқа тілдерде функцияны шақыру арқылы, мысалы, түрлендіріледі). Көптеген тілдер көбейтуді символымен белгілейді, мысалы, , бірақ АПЛ оның орнына символын пайдаланады. Дегенмен, егер негіз көрсетілмесе (АПЛ-дегі немесе басқа тілдердегі сияқты), көптеген бағдарламалау тілдерінде бұл синтаксистік қате болар еді. АПЛ болса, жоғалған негізді табиғи логарифм тұрақтысы e деп қабылдап, жазылуын деп түсіндіреді.

Қарапайым статистика

Егер X сандар массиві болса, онда оның орташасын береді. Оңнан солға қарай оқығанда, X массивінің элементтерінің санын береді, ал ол екілік оператор болғандықтан, оның сол жағындағы да өрнек қажет. Әйтпесе, X алынар еді (яғни, X массивінің әрбір элементі элементтер санына бөлініп қосылар еді), сондықтан ол жақшалармен қоршалған, және X массивінің элементтерінің қосындысын береді. Осыған сүйене отырып, келесі өрнек стандартты қателіктерді есептейді: Әрине, осы өрнекті әрқайсысы үшін қайта жазудың орнына, функция ретінде анықтаған дұрыс. Сонымен қатар, енгізу оператор болғандықтан, ол өрнектердің ішінде болуы мүмкін, сондықтан келесі өрнектер T, AV және SD-ге тиісті мәндерді тағайындайды:

Өмір ойыны

Dyalog APL-де жазылған келесі "life" функциясы бульдік матрицаны қабылдайды және Конвейдің Өмір ойынының ережелері бойынша жаңа буынды есептейді. Бұл APL-дің өте аз кодта күрделі алгоритмді жүзеге асыру мүмкіндігін көрсетеді, бірақ оны түсіну үшін APL-ді жетілдірілген деңгейде білу қажет (сол сияқты бағдарлама көптеген тілдерде де болуы мүмкін). life ← {⊃1 ⍵ ∨.∧ 3 4 = +/ +⌿ ¯1 0 1 ∘.⊖ ¯1 0 1 ⌽¨ ⊂⍵}

Логотип

АТҚ сатушылары арасында ынтымақтастық әрдайым болған, және 1969 жылдан 2010 жылға дейін үнемі бірлескен конференциялар өткізіліп тұрды. Мұндай конференцияларда APL мотивтері немесе сатушылар логотиптерінің жинағы бар APL тауарлары жиі таратылатын. Көбінесе алмалар ( "apple" және "APL" сөздерінің айтылуындағы ұқсастыққа байланысты) және APL модификатор пернесін басып тұрып, "APL" деп теру кезінде классикалық APL пернетақтасының орналасуынан пайда болатын символдардың код үзіндісі қолданылатын. Осы қоғамдық күш-жігердің бәріне қарамастан, бағдарламалау тілі үшін жалпыға ортақ, сатушыға тәуелсіз логотип пайда болған жоқ. Көптеген танымал бағдарламалау тілдері өздерінің айқын логотиптерін қалыптастырған, мысалы, Фортран 2020 жылы өз логотипін алды, ал Британдық APL қауымдастығы 2021 жылдың екінші жартысында APL үшін де осындай логотип құру науқанын бастады. Қоғамдық дауыс беру және көптеген пікір алмасудан кейін, 2022 жылдың мамырында логотип таңдалды.

АПЛ\360

APL-ді танымал APL символдарымен бірінші рет іске асырылған APL\360, IBM System/360 жүйесінде жұмыс істеді және 1966 жылдың қараша айында аяқталды, бірақ сол кезде тек IBM ішінде ғана қолданылды. 1975 жылы IBM 5100 микрокомпьютері APL\360-ды компьютер үшін ROM-ға негізделген екі интерпретацияланған тілдің бірі ретінде ұсынды, оған тілде қолданылатын барлық арнайы символдарды қолдайтын пернетақта мен дисплей жиынтығы қоса берілді. APL\360-қа енгізілген маңызды жаңаруларға CMS/APL кірді, ол CMS виртуалды жад мүмкіндіктерін пайдаланды, сондай-ақ APLSV, ол ортақ айнымалыларды, жүйелік айнымалыларды және жүйелік функцияларды енгізді. Кейіннен ол 1983 жылы соңғы нұсқасы шыққанша IBM System/370 және VSPC платформаларына көшірілді, одан кейін APL2 оны алмастырды. Ол IBM шығарған ең танымал IBM Type III Library бағдарламалық қамтамасы болды.

APL*Plus және Sharp APL

APL*Plus және Sharp APL – APL\360 нұсқалары, деректерді пішімдеу және APL массивтерін сыртқы файлдарда сақтау сияқты қосымша бизнеске бағытталған кеңейтулермен жабдықталған. Олар екі компания бірлесіп, бастапқы IBM APL\360 әзірлеу тобының әртүрлі мүшелерін жұмысқа алды. Бұл компаниялар – 1964 жылы Ян Шарп, Роджер Мур және басқалар құрған APL\360 қызметтерін ұсынатын IP Sharp Associates (IPSA) және 1969 жылы Лоуренс Брид және басқалар құрған уақытты бөлісу және консалтингтік қызметтер компаниясы STSC. Екеуі бірлесіп APL*Plus-ті әзірледі, содан кейін бірлесіп жұмыс істеуді жалғастырды, бірақ APL*Plus және Sharp APL ретінде жеке-жеке дамыта берді. STSC APL*Plus-ті VAX 11, PC және UNIX сияқты көптеген платформаларға бейімдеді, ал IPSA жеке компьютерлердің пайда болуына өзгеше көзқараспен қарап, қосымша PC XT/360 аппараттық құралдарын пайдаланып, осы платформада Sharp APL-ді қолжетімді етті. 1993 жылы Sharp APL-ді қолдау мақсатында Soliton Incorporated құрылды және Sharp APL-ді SAX (Sharp APL for Unix) нұсқасына өзгертті. 2018 жылғы мәліметтер бойынша, APL*Plus APL2000 APL+Win ретінде жалғасуда. 1985 жылы Иан Шарп және STSC-ден Ден Дайер APL-ге қосқан ерекше үлесі үшін Кеннет Иверсон сыйлығымен марапатталды.

АПЛГОЛ

1972 жылы APLGOL, APL-дің эксперименталды нұсқасы ретінде жарық көрді, ол тілдің негізіне құрылымдық бағдарламалау тілінің құрылымдық элементтерін қосты. Операторлар арасындағы басқару, шартты операторларды орындау және операторларды құрылымдау үшін жаңа операторлар қосылды, сондай-ақ алгоритмнің мақсатын түсінікті ету үшін де операторлар енгізілді. Ол 1977 жылы Hewlett Packard үшін жүзеге асырылды.

Диалогтық АПЛ

Dyalog APL алғаш рет 1983 жылы британдық Dyalog Ltd компаниясы шығарды және 2018 жылдан бастап AIX, Linux (оның ішінде Raspberry Pi), macOS және Microsoft Windows платформаларында қолжетімді. Ол APL2-ге негізделген, объектіге бағытталған бағдарламалау, функционалды бағдарламалау және тікелей бағдарламалауды қолдау үшін кеңейтімдермен жабдықталған. Жеке/коммерциялық емес мақсатта пайдалануға лицензиялар тегін. 1995 жылы даму тобының екі мүшесі – Джон Скоулз және Питер Доннели – интерпретатордағы жұмысы үшін Айверсон сыйлығымен марапатталды. Гитте Кристенсен мен Мортен Кромберг 2016 жылы Иверсон сыйлығын бірлесіп алды.

NARS2000

NARS2000 – Боб Смит жазған, 1970 және 1980 жылдары STSC компаниясында көрнекті APL әзірлеушісі және іске асырушысы болған ашық кодты APL интерпретаторы. NARS2000 кеңейтілген мүмкіндіктерге және жаңа дерек типтеріне ие, Microsoft Windows және Wine арқылы басқа платформаларда тікелей жұмыс істейді. Ол 1980 жылдардағы NARS (Nested Arrays Research System) деп аталған әзірлеу құралының құрметіне аталған.

АПЛХ

APLX – APL2 негізіндегі және бірнеше кеңейтулерді қамтитын, платформадан тәуелсіз APL диалектісі. Ол алғаш рет 2002 жылы британдық MicroAPL компаниясымен шығарылды. Қазіргі таңда дамытылмайтын және коммерциялық сатылымда жоқ болғанымен, оны Dyalog компаниясынан тегін алуға болады.

Йорк АПЛ

Йорк APL 1968 жыл шамасында Онтариодағы Йорк университетінде, IBM 360 мейнфреймдерінде жасалған. APL\360-тан басты ерекшелігі – ол скалярдың "формасын" (ρ) 1 деп белгілесе, APL\360 оны математикалық тұрғыдан дұрыс 0 деп белгілеген. Бұл скалярлар мен векторлар үшін бірдей жұмыс істейтін функцияларды жазуды оңайлатты.

GNU APL

GNU APL – ISO/IEC 13751:2001 стандартында белгіленген Extended APL-дің тегін іске асырылуы, демек ол APL2-нің іске асырылуы болып табылады. Ол Linux, macOS, бірнеше BSD түрлерінде және Windows жүйесінде жұмыс істейді (барлық жүйелік функцияларын толық қолдау үшін Cygwin немесе кейбір жүйелік функциялары жоқ 64-биттік Windows бағдарламасы ретінде). GNU APL ішкі түрде Unicode-ты қолданады және оны бағдарламалауға болады. Оны Юрген Сауерман жазған. GNU жобасының негізін қалаушы Ричард Столлман APL-ді ерте пайдалана бастады, 1969 жылғы жазда орта мектеп оқушысы кезінде мәтіндік редакторды жазу үшін оны қолданды.

Идиомикалық тану

Көптеген APL интерпретаторлары идиомаларды тануды қолдайды және жиі қолданылатын идиомаларды бір операция ретінде бағалайды. Мысалы, BV/⍳⍴A идиомасын бір операция ретінде бағалау арқылы (мұнда BV – бульдік вектор, ал A – массив), екі аралық массивтің жасалуы болдырмайды.

Батырмаланған байт коды

APL-де әлсіз типтеу дегеніміз – атау массивке (кез келген дерек типіне), функцияға немесе операторға сілтеме жасай алады. Әдетте, интерпретатор оның қандай түрі болатынын алдын ала біле алмайды, сондықтан талдау, синтаксистік тексеру және басқа да операцияларды орындау кезінде жүргізуі керек. Дегенмен, кейбір жағдайларда атаудың қандай типке сілтеме жасауы күтілетінін алдын ала болжап, осыған сәйкес байт-кодты жасау мүмкін, бұл орындау уақытын қысқартады. Бұл байт-кодты тұрақты бүктеу немесе ортақ қосымша өрнектерді жою сияқты компиляция техникаларын қолдану арқылы оңтайландыруға болады. Интерпретатор байт-кодты бар болғанда және жасалған барлық болжамдар орындалғанда іске қосады. Dyalog APL оптимизацияланған байт-кодты қолдауды қамтиды, ол 1971 жыл шамасында пайда болды. APL-ді компиляциялау үшін тілге шектеулер қою қажет. APEX – Роберт Бернеки жасаған және GNU General Public License лицензиясымен таратылатын зерттеу APL компиляторы. STSC APL компиляторы – байт-кодты оңтайландырушы мен компилятордың біріктірілген нұсқасы. Ол функциялар мен жаһандық айнымалылар жарияланған жағдайда функцияларды машиналық кодқа компиляциялауға мүмкіндік береді, бірақ интерпретатор орындалу уақытында кітапхана ретінде және компиляция талаптарына сай келмейтін функцияларды орындау үшін қолданыла береді.

Стандарттар

АПЛ американдық Ұлттық Стандарттар Институтының (ANSI) X3J10 жұмыс тобы және Халықаралық Стандарттау Ұйымы (ISO) мен Халықаралық Электротехникалық Комиссия (IEC) тарапынан, ISO/IEC Бірлескен Техникалық Комитеті 1-нің 22 тақырып тобымен стандартталған. APL тілінің негізгі бөлігі ISO 8485:1989 стандартында, ал кеңейтілген APL тілі ISO/IEC 13751:2001 стандартында сипатталған.

Видео

– APL-дің алғашқы әзірлеушілерімен 1974 жылғы ток-шоу форматындағы сұхбат. – 1975 жылы Лондон Императорлық колледжінің профессоры Боб Спенс APL-ді тікелей эфирде көрсетуі. – Dyalog Ltd. компаниясының Джон Скоулздың 2009 жылғы оқулығы, онда Конвейдің «Өмір ойыны» APL-дің бір жолында іске асырылған. – 2009 жылы Грейм Робертсонның APL-ге кіріспесі.