АПЛ (програмски језик)

АПЛ (скраћеница изведена према књизи енгл. A Programming Language)[1] је програмски језик развијен 1960-их од стране Кенет Ј. Ајверсон-а. Главни тип податак са којим се барата у АПЛ-у су вишедимензиони низови. Користи велики спектар графичких симбола за представљање функција и оператора, што је довело до веома концизног кода. Имао је значајан утицај на развој концепта моделирања, табела, функционалног програмирања[2] и разних математичких пакета. Такође је инспирисао развој неколико других програмских језика, а и данас се користи за развој одређених апликација.

АПЛ
Оригинални називенгл. APL (A Programming language)
Моделструктурирани; функционално програмирање, модуларно програмирање
Појавио се1964. год.; пре 60 година (1964)
Аутор(и)Кенет Ајверсон
Дизајнер(и)Кенет Ајверсон
Утицајиматематичка нотација
Утицао наМАТЛАБ, Го, Ј, К, Математика, ППЛ, Q, С, САЦ

Историјат

уреди

Математичка нотација за рад са низовима која је нарасла у АПЛ програмски језик развијана је од стране Кенет Ј. Ајверсон-а на Харвард универзутету од 1957. а објављена у његовој књизи A Programming language 1962. године. У предговору те књиге пише:Примењена математика се углавном бави дизајном и анализом експлицитних поступака за израчунавање тачне или приближне вредности различитих функција. Такве експлицитне процедуре називају се алгоритми или програми.

Године 1960. почео је да ради за ИБМ и у сарадњи са Адином Фалкофом направио је АПЛ, на основу нотације коју је развио. Ова нотација је коришћена у ИБМ-у за кратке истраживачке извештаје о рачунарским системима као што су Burroughs B5000 (о његовим стек механизму).

Године 1963. Херберт Хелерман је радећи на ИБМ институту за истраживање система имплементирао део ове нотације на ИБМ-ов компјутер ИБМ 1620, а то је коришћено од стране ученика на специјалном курсу у средњој школи. Ученици су тестирали свој код у Хелерман-овој лабораторији. Ова имплементација дела нотације АПЛ-а је названа ПАТ(Персонализовани array преводилац).[3]

Исте године Фалкоф, Ајверсон и Едвард Х. Сусенгут (енгл. Edward H. Sussenguth) (сви радили у ИБМ-у) користили су ову нотацију за формални опис архитектуре и функционалности ИБМ Сyстем/360[4] мејнфрејм рачунара, што је објављено 1964. године. Након сто је ово објављено, тим је усмерио сву своју пажњу на имплементацију ове нотације на компјутерски систем. Један од мотива за овај правац имплементације био је и интерес Џона L. Лоренса-а (енгл. John L. Lawrence) који је имао задужења у једном удружењу које се бавило образовањем, а које је купио ИБМ 1964. године. Лоренс је питао Ајверсона и његову групу за помоћ при коришћењу програмских језика као средства за развој и употребу рачунара у образовању.[5]

 
ИБМ кугла (један ОЦР) са АПЛ карактерима, 2 евра Новчић ради упоређивања

Након што су се Лоренс M. Брид и Филип С. Абрамс са Станфорд универзитета прикључили тиму у ИБМ-у, они су наставили свој примарни рад на имплементацији програмираној у Фортран-у IV за део нотације, који је био урађен за ИБМ-ов компјутер ИБМ 7090 који је радио под ИБСYС оперативним системом. Овај посао био је завршен крајем 1965. и касније је био познат под именом ИВСYС(енгл. Iverson System). Као Хелерман-ов ПАТ систем раније, ова имплментације није укључивала АПЛ скуп карактера, али је користила специјалне резервисане речи на енглеском језику за функције и операторе. Систем је касније адаптиран на систем дељења времена (енгл. Time-sharing sistem) и од новембра 1966. године био је репрограмиран за ИБМ Сyстем/360 Модел 50, компјутер који је радио у режиму дељења времена и био коришћен унутар ИБМ-а.[6]

Кључна ствар за ефективно коришћење АПЛ-а, пре широко распрострањене употребе ЦРТ-терминала, био је развој IBM Selectric писаће машине са заменљивим куглама и свим АПЛ карактерима на њима. Ови карактери могу да се поставе на тастатуру преко стандардних карактера и да се види који се карактер добије притиском на који тастер. По први пут су програмери могли да користе праве АПЛ карактере из Ајверсонове нотације а не незгодне енглеске кључне речи које су их представљале. Ајверсон наводи Фалкофа као инспирацију да уведе у употребу IBM Selectric куглу за куцање.[7]

 
Тастатура са АПЛ карактерима на тастерима

ИБМ је био првенствено одговоран за уводјење АПЛ-а на тржиште. АПЛ је био доступан 1967. за ИБМ 1130 као АПЛ/1130. АПЛ је добио своје упориште на мејнфрејм системима дељења времена од краја 1960-их до почетка 1980-их. Нешто касније, одговарајуће решење хардвера је постало доступно на тржишту, па су средином и крајем 1980-их многи корисници преселили своје апликације на окружење персоналних рачунара.

Године 1973. ИБМ је објавио АПЛ.СВ који је био наследник истог производа, али који је понудио заједничке променљиве као средство за приступ објектима ван АПЛ система, као што су датотеке оперативних система. Средином 1970-их ИБМ мејнфрејм интерпретатор је чак прилагођен за употребу на ИБМ 5100 стоном рачунару, који је имао мали ЦРТ и АПЛ тастатуру, када је већина других малих рачунара тога времена само обезбеђивала основну.

1973—1974. године Др. Патрик Е. Хагерти (енгл. Patrick E. Hagerty) усмерава имплементацију АПЛ интерпретатора универзитета Мериленд на Sparry Univac 1100/2200series мејнфрејм компјутер. У то време Sparry није имао ништа. Године 1974. студент Ален Стебенс (енгл. Alan Stebbens) је добио задатак да имплементира интерну функцију.

Неколико тајмшеринг фирми је настало 1960-их и 1970-их и оне су продавале АПЛ услуге користећи модификовану верзију ИБМ АПЛ\360 интерпретатора.У Северној Америци познатији су: I. P. Sharp Associates, STSC, Time Sharing Resources (TSR) и The Computer Company (TCC) и други.[8]

АПЛ је био доступан како комерцијалном тржишту, тако и преко информационог центра за потрошаче. Са првим доласком јефтиних мејнфрејм рачунара, као што су ИБМ 4300 и касније ПЦ, АПЛ се развијао.

Шарп АПЛ (енгл. Sharp APL) је напредна верзија АПЛ имплементације са много језичких екстензија, као и пакета (способност да стави један или више објеката у једну променљиву, систем датотека, угњеждени низови, дељене променљиве итд.). АПЛ преводиоци су били доступни од других мејнфрејм и мини рачунара, како што су Бурроугхс, ЦДЦ, Дата Генерал, ДЕЦ, Харрис, Хеwлетт-Пацкард, Сиеменс АГ, Xероx и други.

Године 1979. Ајверсон је добио Тјурингову награду за свој рад на АПЛ-у.

Додаци

уреди

Многе имплементације АПЛ-а, од АПЛX, Дyалог-а и других, укључују додатке за објектно-оријентисано програмирање, подржавају .НЕТ , XМЛ, примитивне конверзије низова, графику, интерфејсе оперативних система и ламбда израза.

Дизајн

уреди

За разлику од традиционално структурираних програмских језика, АПЛ код је обично структуриран као низ оператора,[9] унарних и бинарних функција, које се примењују на низове. АПЛ има много нестандардних примитивних функција и оператора који су означени једним или комбинацијом неколико симбола. Сви ови имају исти приоритет и десну асоцијативност, што значи да се АПЛ код чита здесна на лево.

Ране имплементације нису имале структуру контроле тока, као што су "do", "while" и "if-then-else" конструкцију. Уместо тога оне су користиле операције над листама, где се цела операција може записати у једној линији. Новије имплементације АПЛ-а укључују структуре контроле тока, тако да се подаци и контрола тока програма могу јасно раздвојити.

У радном простору корисник може дефинисати програме и податке, али вредности података постоје и ван програма и корисник може да их користи без писања кода. У примерима испод АПЛ прво испише шест белилна док чека унос корисника. Излаз почиње у првој колини. Корисник може да сачува радни простор са свим вредностима, програмима и статусом извршавања.

      n  4 5 6 7
Додељује вектор вредности (4, 5, 6 ,7) променљивој n, операција за креирање низова.
      n 
4 5 6 7
Приказује садржај n, тренутно низа или вектора.
      n+4
8 9 10 11
4 се додаје на све елементе вектора n, креирајући вектор дужине 4 (8, 9, 10, 11).
      +/n
22
АПЛ приказује суму компоненти вектора n, нпр. 22=(4+5+6+7), користећи веома компактну нотацију.
      m  +/(3+⍳4)
      m
22
Ове операције могу се извести и једном једином наредбом.

АПЛ је познат по томе што користи скуп не-ASCII карактера. АПЛ омогућава компактну формулацију алгоритма. У готово свакој верзији АПЛ-а, теоретски је могуће написати сваку функцију једним изразом, тј. у једној линији кода.

Због необичног скупа карактера многи програмери користе посебне тастатуре са АПЛ карактерима на тастерима за писање АПЛ кодова.[10] Иако постоје различити начини да се АПЛ код напише само коришћењем ASCII карактера, то се у пракси скоро никада не ради. Већина новијих имплементација користи стандардне распореде на тастатури, са посебним методама за приступ не-ASCII карактерима. АПЛ фонт је карактеристичан са великим италик карактерима, усправним бројевима и симболима. Већина преводилаца и даље приказује АПЛ скуп карактера у прилагођеном фонту.

Заговорници АПЛ-а тврде да се такозвани "write-only code" (лоше написан и готово несхватљив код) може скоро увек приписати лошем програмирању или почетничкој грешци и да се може десити у било ком програмском језику. Такође кажу да су много продуктивнији са АПЛ-ом него са конвенционалним програмским језицима, као и да се пројекти могу реализовати са далеко мање програмера и за далеко мање времена.

АПЛ је погодан и за развијање комплексног софтвера, јер број линија кода може драстично да се смањи. Многи љубитељи АПЛ-а такође сматрају стандардне језике као што су COBOL или Јава досадним.

Извршавање

уреди

АПЛ је погодан језик за паралелизацију.[11]

Интерпретатори

уреди

APL Next(пре АПЛ2000) нуди напредни АПЛ интерпретатор који ради под Линуксом, Униксом(енгл. Unix) и Wиндоwс-ом. Има напредни АПЛ систем и представља тренутни ниво развоја АПЛ језика.

Дyалог АПЛ је напредни АПЛ интерпретер који ради под АИX-ом, Линуксом, Мац ОС-ом, и Мајкрософтовим Wиндоwс-ом.[12] Дyалог има додатке АПЛ језику који користе нове објектно-оријентисане могућности, бројна побољшања језика, коришћење простора имена и друге. За Wиндоwс платформу Дyалог АПЛ је тесно повезан са .НЕТ платформом, а постоји и одређена интерпретација за Мајкрософт Вижуал Студио (енгл. Microsoft Visual Studio) развојном платформом.

ИБМ нуди своју верзију ИБМ АПЛ2 за ИБМ АИX, Линукс, Сун Соларис и Wиндоwс систем. Овај производ је наследник АПЛ2 понуђеног за ИБМ мејнфрејм рачунаре. ИБМ АПЛ2 је највероватније најутицајнији АПЛ систем.

НАРС2000 је open-source АПЛ интерпретатор написан од стране Боба Смита, познатог АПЛ програмера. Садржи нове типове података, ради примарно под Wиндоwс-ом(32-битна и 64-битна верзија), а ради и под Линуксом и Епл Мац ОС-ом (енгл. Apple Mac OS) са Wine-ом.

Micro APL Limited нуди АПЛX, потпуно функционалан 64-битни преводилац за Линукс, Мицрософт Wиндоwс и Мац ОС систем. Језгро језика је по узору на ИБМ-ов АПЛ2 са бројним побољшањима. АПЛX је уско повезан са .НЕТ , јавом, Р-ом и другима.

Опен АПЛ је опен-соурце имплементација АПЛ-а објављена од стране Бранка Братковића. Базиран је на коду Кена Томпсона из Белових лабораторија, а и на основу доприноса других људи који су у имплементацији учествовали. Лиценциран је од стране ГНУ Генерал јавне лиценце и ради под Уникс системима укључујући Линукс са x86 SPARC и другим процесорима.

ГНУ АПЛ је имплементација ИСО стандарда 13751 и стога је сличан АПЛ2. Ради на ГНУ/Линуксу и Wиндоwс-у користећи Cygwin. Интерно користи УНИЦОДЕ. ГНУ АПЛ је написао Јирген Сауерман (Јüрген Сауерманн).

Компајлери

уреди

АПЛ програми се обично интерпретирају, а ређе компајлирају. Већина АПЛ компајлера преводи код на неки језик нижег нивоа, као што је C. О компилацији АПЛ језика се често расправљало на конференцијама. Иако су неки од новијих додатака, као што су угњеждени низови, учинили језик тежим за компајлирање, идеја о АПЛ компајлерима се и данас развија.

У прошлости АПЛ компилација је посматрана као средство за постизање брзине при извршавању у поређењу са осталим мејнфрејм језицима, посебно на мејнфрејм рачунарима. Неколико АПЛ компајлера је доживело неки успех иако је мало напора уложено да АПЛ усаврши компилацију у машински код.

Прелазак са једног АПЛ преводиоца на други захтеваће одређене промене у садржају АПЛ програма. У зависности од компајлера може бити потребна декларација променљивих, одређене функције треба уклонити, тј. код очистити на неки начин.

Комерцијални преводилац је избацио на тржиште СТСЦ средином 1980-их као додатак за IBM VSAPL програм. За разлику од модерних компајлера овај даје машински код који се може извршити само у окружењу преводиоца.

Књигу "APL Compiler" написао је Тимоти Бад (енгл. Timothy Budd). Ова књига детаљно описује конструкцију АПЛ преводиоца писаног у C-у који обавља и одређене оптимизације. Превођењем се добија C-код који се затим може компајлирати и извршити ван АПЛ радног простора.

Burroughs/Unisys АПЛБ интерпретатор (1982) је био први компилатор који је користио постепену компилацију како би добио код за АПЛ специфичну виртуелну машину. АПЛ у C# преводилац је добијен од Causeway графичког система. Овај производ је био дизајниран да дозволи АПЛ коду да се преведе на еквивалентан C# код и да се затим извршава ван АПЛ окружења. Causeway компајлер захтева рантајм (енгл. run-time) библиотеку функција над низовима.

Технологије

уреди

АПЛ прави јасну разлику између функција и оператора.[13] Функције користе низове (променљиве, константе или изразе) као аргументе и враћају низове као резултат. Оператори (као функције вишег реда) узимају функције или низове као аргументе, а враћају функције. АПЛ такође препознаје уграђене функције , представљене једним симболом или фиксном комбинацијом симбола, као примитивне типове. Већина примитивних типова су функције или оператори. Писање АПЛ кода је углавном писање не-примитивних функција и (у неким верзијама АПЛ-а) оператора.

Неке речи које се користе у АПЛ литератури имају различито значење од оних које се користе у математици или информатици.

Појам Опис
функција операција или мапирање које узима нула, један(десни) или два (леви и десни) аргумента који могу бити скалари, низови или неке комплексније структуре, а могу вратити исте те структуре. Функције могу бити:
  • Примитивне: написана и представљена као један глиф
  • Дефинисане: као названа и уређена колекција линија кода
  • Изведене: као комбинација оператора са аргументима
низ објекат са нула, једним или висе скалара или дугих низова
ниладична не узима нити захтева ниједан аргумент
монадична захтева само један аргумент, здесна за функцију, са лева за оператор, унарна
диадична захтева и леви и десни аргумент, бинарна
амбивалентна или номадичка може да се користи као монадична или диадична, дозвољава да се леви аргумент изостави
оператор операција или мапирање које узима једну (леву) или две (леву и десну) функцију или листу аргумената и враћа функцију. Оператор може бити:
  • Примитивни: написан и представљен као један глиф
  • Дефинисани: као названа и уређена колекција линија кода

Синтакса

уреди

АПЛ има експлицитну репрезентацију функција, оператора, и синтаксе, ово обезбеђује основе за чисте и експлицитне наредбе сложених објеката у језику, као и алата за експериментисање над њима.[14]

Примери

уреди

Здраво, свете (Hello, world)

уреди

Ово исписује "Hello, world":

'Hello, world'

Здраво, свете је типичан програм који се углавном испрограмира као уводни пример при учењу неког програмског језика.

Сортирање

уреди

Следећа линија кода сортира листу речи у матрици X по дужини речи:

X[X+.' ';]

Гаме оф Лифе

уреди

Ова функција life написана у Дyалог АПЛ узима матрицу са "bool" вредностима и налази следеће израчунавање за Conway's Game of Life.Он представља сву моћ овог језика, да један овако комплексан алгоритам буде записан у једној линији кода:

life{1 .3 4=+/,¯1 0 1∘.¯1 0 1∘.⌽⊂}

ХТМЛ тагови-уклањање

уреди

Следећи код, такође записан у Дyалог АПЛ-у, у првој линији додељује ХТМЛ код променљивој txt и онда користи АПЛ изразе да уклони све ХТМЛ тагове:

txt'<nowiki><html><body><p>This is <em>emphasized</em> text.</p></body></html></nowiki>'
{/⍨~{∨≠\}'<>'}txt

Ово враћа текст: This is emphasized text.

Скуп карактера

уреди

АПЛ је и критикован и хваљен за избор свог јединственог и нестандардног скупа карактера. Неки који га уче су постали његове ватрене присталице, што сугерише да постоји нека тежина иза Ајверсонове идеје да коришћена нотација може да направи разлику. На почетку је постојало веома мало монитора који су уопште могли да прикажу АПЛ карактере. Један од првих био је Texas Instruments TI model 745 (око 1977) са целим АПЛ скупом карактера.

Временом, са све већом употребом квалитетнијих монитора, штампача и УНИЦОДЕ подршци, проблеми АПЛ скупа карактера су углавном били решени. Међутим, коришћење АПЛ скупа карактера захтева коришћење мапирања тастатуре, виртуелних/on-screan АПЛ скупа симбола, а све то може да уплаши почетнике који су навикли на друге програмске језике.[15][16]

У прилог АПЛ заједници иде то што АПЛ захтева да се куца мање кода, а и мапирање тастатуре се научи временом. Такође, специјалне АПЛ тастатуре су направљене и користе се, а и разни фонтови су доступни за скидање са интернета.

Коришћење

уреди

У АПЛ-у један симбол/карактер може представљати цело сортирање, други регресију, на пример. Био је, и још увек је, популаран у финансијским апликацијама, апликацијама осигуравајућих кућа, у симулацијама, математичким апликацијама итд. АПЛ се користи у разним контекстима и у различите сврхе, укључујући вештачку интелигенцију и роботику.

Пре доласка full-screen система и до средине 1980-их системи су писани тако што су корисници уносили у упутства вокабулар специфичан за свој посао. АПЛ тајм-шеринг (енгл. time-sharing) продавци су испоручивали апликације у овој форми. На I. П. Sharp тајм-шеринг систему, радни простор под називом 39 MAGIC је нудио приступ финансијским подацима и подацима авио компанија, плус софистициран(за то време) графички приказ и извештаје. Други пример је GRAPHPAK радни простор, испоручиван од стране ИБМ-а ИБМ АПЛ, касније АПЛ2.

Због својих операција са матрицама АПЛ је био прилично популаран за програмирање компјутерске графике. Једна од првих комерцијалних графичких кућа Digital Effects из Њујорка произвела је АПЛ графички производ познат под именом Vision који је коришћен за прављење телевизијских реклама и наводно анимације за филм Трон из 1982. године.

Интересовање за АПЛ је опало средином 1980-их, али упркос овом паду АПЛ је наставио да се користи у одређеним областима као што су истраживања у рачуноводству, ДНК идентификационим технологијама, симболичним математичким изразима и учењима. Остаје као инспирација његовој садашњој бази корисника, као и за друге језике.

Стандардизација

уреди

АПЛ је стандардизован од стране АНСИ радне групеX3Ј10 и ИСО/ИЕЦ удруженог техничког комитета 1, подкомитета 22, радне групе 3.Цоре АПЛ језик је заведен под ИСО8485:1989 а Екстерни АПЛ језик је заведен под ИСО/ИЕЦ 13731:2001.

Референце

уреди
  1. ^ Ајверсон, Кенет Е. . А Программинг лангуаге Архивирано на сајту Wayback Machine (27. октобар 2014). Издавач Wiley. . 1962. ИСБН 978-0-471-43014-8 http://www.softwarepreservation.org/projects/apl/Books/APROGRAMMING%20LANGUAGE/view.  Недостаје или је празан параметар |title= (помоћ)
  2. ^ "ACM Award Citation – John Backus. 1977". Awards.acm.org. 1924-12-03. Преузето 2010-02-03.
  3. ^ Helerman, H., "Experimental Personalized Array Translator System", Communications of the ACM, 7, 433 (Јул, 1964).
  4. ^ Фалкоф, Един; Ајверсон, Кенет Е., "АПЛ\360 Усерс Гуиде", IBM Research, Thomas J. Watson истраживачки центар, Yorktown Heights, NY, Август 1968.
  5. ^ Фалкоф, Един D.; Ајверсон, Кенетх Е., Тхе еволутион оф АПЛ, ACM SIGPLAN Notices 13, 1978-08.
  6. ^ Haigh, Tomas, "Biographies: Kenneth E. Iverson", IEEE Annals of the History of Computing, 2005
  7. ^ Един Фалкоф - Музеј историје компјутера. "Ајверсон је њему давао заслуге за бирање имена АПЛ и прве верзије кугле са АПЛ карактерима на њој."
  8. ^ Ремемберинг АПЛ. Quadibloc.com. Преузето 2013-06-17.
  9. ^ MicroAPL. Оператори. http://www.microapl.co.uk. MicroAPL. Преузето 12 Јануара 2015. External link in |wебсите=
  10. ^ АПЛ Симболи. Ентеринг АПЛ Сyмболс. Преузето 1 Јануара 2015.
  11. ^ Ју, Дз-Цхинг; Цхинг, Wаи-Мее (1991). „Еxплоитатион оф АПЛ дата параллелисм он а схаред-меморy МИМД мацхине”. Процеедингс оф тхе тхирд АЦМ СИГПЛАН сyмпосиум он Принциплес анд працтице оф параллел программинг - ППОПП '91. стр. 61—72. ИСБН 0897913906. С2ЦИД 8584353. дои:10.1145/109625.109633. 
  12. ^ Дyалог АПЛ
  13. ^ Ајверсон, Кенет Е. АПЛДицтионарy. JSoftware / Iverson Estate. Преузето 20 Јануара 2015.
  14. ^ Ајверсон, Кенет Е. АПЛСyнтаxСемантицс. I.P. Sharp Assoc. Преузето 11 Јануара 2015.
  15. ^ Дyалог. апл фонт кеyбоард. Дyалог. Преузето 19 Јануара 2015.
  16. ^ Кромберг, Мортен. Уницоде суппорт оф АПЛ. Vector, Journal of the British APL Association. Преузето 8 Јануара 2015.

Литература

уреди

Спољашње везе

уреди