APL (programovací jazyk) - APL (programming language)

APL
Paradigma Pole , funkční , strukturované , modulární
Navrhl Kenneth E. Iverson
Vývojář Larry Breed , Dick Lathwell , Roger Moore a další
Poprvé se objevil 27. listopadu 1966 ; Před 54 lety ( 1966-11-27 )
Stabilní uvolnění
ISO / IEC 13751: 2001 / 1. února 2001 ; před 20 roky ( 2001-02-01 )
Kázeň při psaní Dynamický
Plošina Křížová platforma
Licence Patentovaný , otevřený zdroj
Hlavní implementace
  • APL \ 360
  • APL \ 1130
  • APL*Plus
  • Ostrý APL
  • APL2
  • Dyalog APL
  • NARS2000
  • APLX
  • GNU APL
Ovlivněn
Matematický zápis
Ovlivněn

APL (pojmenovaný po knize A Programming Language ) je programovací jazyk vyvinutý v šedesátých letech Kennethem E. Iversonem . Jeho ústředním datovým typem je vícerozměrné pole . Používá velkou škálu speciálních grafických symbolů k reprezentaci většiny funkcí a operátorů, což vede k velmi stručnému kódu. Byl to důležitý vliv na vývoj koncepčního modelování, tabulek , funkčního programování a balíčků počítačové matematiky. To také inspirovalo několik dalších programovacích jazyků.

Dějiny

Matematický zápis

Matematický zápis pro manipulaci pole byl vyvinut Kenneth Iverson , počínaje v roce 1957 na Harvard University . V roce 1960 začal pracovat pro IBM, kde vytvořil tento zápis s Adinem Falkoffem a publikoval jej ve své knize A Programming Language v roce 1962. Předmluva uvádí svůj předpoklad:

Aplikovaná matematika se z velké části zabývá návrhem a analýzou explicitních postupů pro výpočet přesných nebo přibližných hodnot různých funkcí. Takové explicitní postupy se nazývají algoritmy nebo programy . Protože efektivní zápis pro popis programů vykazuje značnou syntaktickou strukturu, nazývá se programovací jazyk .

Tato notace byla použita v IBM pro krátké zprávy o výzkumu počítačových systémů, jako je Burroughs B5000 a jeho mechanismus zásobníku, když IBM pro nadcházející počítače vyhodnocovala stroje typu stack versus register .

Iverson také použil svou notaci v návrhu kapitoly Programovací jazyk , napsané pro knihu, kterou psal s Fredem Brooksem , Automatické zpracování dat , která bude vydána v roce 1963.

V roce 1979 obdržel Iverson Turingovu cenu za práci na APL.

Vývoj do počítačového programovacího jazyka

Již v roce 1962 došlo k prvnímu pokusu použít zápis k popisu kompletního počítačového systému poté, co Falkoff diskutoval s Williamem C. Carterem o jeho práci na standardizaci sady instrukcí pro stroje, které se později staly rodinou IBM System/360 .

V roce 1963 Herbert Hellerman, pracující v IBM Systems Research Institute, implementoval část zápisu na počítači IBM 1620 a používali ho studenti ve speciálním středoškolském kurzu o výpočtu transcendentálních funkcí pomocí součtu sérií. Studenti testovali svůj kód v Hellermanově laboratoři. Tato implementace části notace se nazývala Personalized Array Translator (PAT).

V roce 1963 použili Falkoff, Iverson a Edward H. Sussenguth Jr. , všichni pracující v IBM, zápis pro formální popis architektury a funkcí strojů řady IBM System/360 , což vyústilo v článek publikovaný v IBM Systems Journal v 1964. Poté, co toto bylo zveřejněno, tým obrátil svou pozornost k implementaci notace na počítačový systém. Jednou z motivací tohoto zaměření implementace byl zájem Johna L. Lawrencea, který měl nové povinnosti ve společnosti Science Research Associates , vzdělávací společnosti koupené společností IBM v roce 1964. Lawrence požádal Iversona a jeho skupinu o pomoc při používání jazyka jako nástroje vyvíjet a používat počítače ve vzdělávání.

Po Lawrence M. Breed a Philip S. Abrams Stanford University vstoupil do týmu v IBM Research, pokračovali v předchozí práci na implementaci naprogramovanou v FORTRAN IV pro část zápisu, která byla provedena pro IBM 7090 počítač se systémem na Operační systém IBSYS . Tato práce byla dokončena na konci roku 1965 a později pojmenována IVSYS (pro systém Iverson). Základ této implementace podrobně popsal Abrams v technické zprávě Stanfordské univerzity „Tlumočník pro Iversonovu notaci“ v roce 1966, akademický aspekt na to formálně dohlížel Niklaus Wirth . Stejně jako dříve Hellermanův systém PAT tato implementace neobsahovala znakovou sadu APL, ale používala speciální anglická vyhrazená slova pro funkce a operátory. Systém byl později upraven pro systém sdílení času a v listopadu 1966 byl přeprogramován pro počítač IBM System/360 Model 50 běžící v režimu sdílení času a byl interně používán v IBM.

Hardware

Typové koule a kolečko IBM obsahující řecké znaky APL.
Pohled programátora na rozložení klávesnice IBM 2741 s vloženou tiskovou hlavou APL pro psaní prvku

Klíčovým vývojem schopnosti efektivně využívat APL, před širokým využitím terminálů katodových trubic ( CRT ), byl vývoj speciálního vyměnitelného prvku pro psaní na psacím stroji IBM Selectric se všemi speciálními znaky APL. To bylo použito na terminálových pracovních stanicích pro tisk na papír pomocí mechanismu selektivního psacího stroje a mechanismu psaní, jako je terminál IBM 1050 a IBM 2741 . Přes normální klávesy lze umístit kryty kláves, které ukazují, které znaky APL budou zadávány a zadávány při stisknutí tohoto klíče. Poprvé mohl programátor zadat a vidět správné znaky APL používané v Iversonově notaci a nebyl nucen používat jejich nešikovné reprezentace klíčových slov. Falkoff a Iverson měli speciální prvky APL Selectric typing elements, 987 a 988, navržené na konci roku 1964, ačkoli pro jejich použití nebyl k dispozici žádný počítačový systém APL. Iverson citoval Falkoffa jako inspiraci pro myšlenku použití prvku IBM Selectric pro psaní pro znakovou sadu APL.

Mnoho symbolů APL, a to i se znaky APL na selektivním elementu psaní, bylo stále nutné zadat nadměrně výraznými dvěma existujícími znaky prvků. Příkladem je známka nahoru , která musela být vytvořena z delty (shift-H) a Shefferova zdvihu (shift-M). To bylo nutné, protože znaková sada APL byla mnohem větší než 88 znaků povolených na prvku psaní, i když byla písmena omezena na velká písmena (velká písmena).

Komerční dostupnost

První interaktivní přihlášení do APL a vytvoření pracovního prostoru APL bylo v roce 1966 Larry Breed pomocí terminálu IBM 1050 v IBM Mohansic Labs poblíž Thomas J. Watson Research Center , domova APL, v Yorktown Heights, New York .

IBM byla hlavně zodpovědná za zavedení APL na trh. První veřejně dostupná verze APL byla vydána v roce 1968 pro IBM 1130 . IBM poskytla APL \ 1130 zdarma, ale bez záruky a podpory. Běželo by to jen za 8k 16bitových slov paměti a používalo by to vyhrazený 1 megabajtový pevný disk.

APL se prosadil v systémech timesharingu sálových počítačů od konce šedesátých let do začátku osmdesátých let, částečně proto, že by podporoval více uživatelů v systémech s nižší specifikací, které neměly žádný hardware pro dynamický překlad adres . Mezi další vylepšení výkonu u vybraných sálových systémů IBM System/370 patřil mikrokód APL Assist, ve kterém byla do firmwaru procesoru zahrnuta určitá podpora pro provádění APL , na rozdíl od úplného implementace softwarem vyšší úrovně. O něco později, když se v polovině až na konci 80. let 20. století konečně začal nabízet vhodně fungující hardware, mnoho uživatelů migrovalo své aplikace do prostředí osobních počítačů.

Dřívější tlumočníci IBM APL pro hardware IBM 360 a IBM 370 implementovali vlastní správu více uživatelů namísto spoléhání se na hostitelské služby, takže šlo o jejich vlastní systémy sdílení času. Systém APL \ 360, který byl poprvé představen pro použití v IBM v roce 1966, byl víceuživatelský tlumočník. Schopnost programově komunikovat s operačním systémem za účelem získávání informací a nastavování systémových proměnných tlumočníka byla prováděna prostřednictvím speciálních privilegovaných funkcí „I-paprsku“ s využitím monadických i dyadických operací.

V roce 1973 IBM vydala APL.SV , který byl pokračováním stejného produktu, ale který nabízel sdílené proměnné jako prostředek pro přístup k zařízením mimo systém APL, jako jsou soubory operačního systému. V polovině 70. let byl interpret sálových počítačů IBM dokonce přizpůsoben pro použití na stolním počítači IBM 5100 , který měl malý CRT a APL klávesnici, když většina ostatních malých počítačů té doby nabízela pouze BASIC . V 80. letech 20. století se programový produkt VSAPL těšil širokému využití u uživatelů systému Conversational Monitor System (CMS), Time Sharing Option (TSO), VSPC , MUSIC/SP a CICS .

V letech 1973–1974 řídil Patrick E. Hagerty implementaci překladače APL University of Maryland pro řadu 1100 mainframových počítačů řady Sperry UNIVAC 1100/2200 . V té době Sperry nic neměl. V roce 1974 dostal student Alan Stebbens za úkol implementovat vnitřní funkci. Xerox APL byl k dispozici od června 1975 pro mainframy Xerox 560 a Sigma 6, 7 a 9 se systémem CP-V a pro Honeywell CP-6 .

V 60. a 70. letech vzniklo několik časově sdílených firem, které prodávaly služby APL pomocí upravených verzí tlumočníka IBM APL \ 360. V Severní Americe byli známějšími společnostmi IP Sharp Associates , Scientific Time Sharing Corporation (STSC), Time Sharing Resources (TSR) a The Computer Company (TCC). CompuServe také vstoupil na trh v roce 1978 s APL tlumočníkem založeným na upravené verzi Digital Equipment Corp a Carnegie Mellon's, který běžel na 36bitových strojích DEC KI a KL. Společnost CompuServe APL byla k dispozici jak pro svůj komerční trh, tak pro informační službu pro spotřebitele. S příchodem nejprve levnějších sálových počítačů, jako je IBM 4300 a později osobního počítače, v polovině 80. let 20. století byl průmysl sdílení času téměř pryč.

Sharp APL byl k dispozici od IP Sharp Associates , nejprve jako služba timesharingu v šedesátých letech a později jako programový produkt od roku 1979. Sharp APL byla pokročilá implementace APL s mnoha jazykovými rozšířeními, jako jsou balíčky (možnost umístit jednu nebo více objektů do jedné proměnné), souborový systém, vnořená pole a sdílené proměnné .

Tlumočníci APL byli k dispozici také od jiných výrobců sálových počítačů a mini počítačů, zejména od Burroughs , Control Data Corporation (CDC), Data General , Digital Equipment Corporation (DEC), Harris , Hewlett-Packard (HP), Siemens AG , Xerox a dalších .

Garth Foster ze Syracuse University sponzoroval pravidelná setkání komunity implementátorů APL v konferenčním centru Syrakus v Minnowbrooku v Blue Mountain Lake, New York . V pozdějších letech organizoval Eugene McDonnell podobná setkání na Asilomar Conference Grounds poblíž Monterey v Kalifornii a v Pajaro Dunes poblíž Watsonville v Kalifornii. Zvláštní zájmová skupina SIGAPL Asociace pro výpočetní techniku nadále podporuje komunitu APL.

Mikropočítače

U mikropočítačů, které byly k dispozici od poloviny 70. let 20. století, se BASIC stal dominantním programovacím jazykem. Některé mikropočítače však místo toho poskytovaly APL - prvním z nich byl MCM/70 na bázi Intel 8008 , který byl vydán v roce 1974 a který byl primárně používán ve vzdělávání. Dalším strojem této doby byl VideoBrain Family Computer , vydaný v roce 1977, kterému byl dodáván dialekt APL s názvem APL/S.

Commodore SuperPET , který byl zaveden v roce 1981, která je součástí tlumočníka APL vyvinutý University of Waterloo .

V roce 1976 Bill Gates ve svém Otevřeném dopise hobbistům tvrdil, že společnost Microsoft Corporation implementovala APL pro Intel 8080 a Motorola 6800, ale měla „velmi malou motivaci zpřístupnit [to] fandům“ kvůli softwarovému pirátství . Nikdy to nevyšlo.

APL2

Počínaje počátkem 80. let vývoj IBM APL pod vedením Jima Browna implementoval novou verzi jazyka APL, která jako své primární vylepšení obsahovala koncept vnořených polí , kde pole může obsahovat další pole, a nové jazykové funkce, které usnadnila integraci vnořených polí do pracovního postupu programu. Ken Iverson, který již nemá kontrolu nad vývojem jazyka APL, opustil IBM a připojil se k IP Sharp Associates , kde jedním z jeho hlavních příspěvků bylo nasměrování vývoje Sharp APL tak, aby více odpovídal jeho vizi.

Jelikož ostatní prodejci byli zaneprázdněni vývojem překladačů APL pro nový hardware, zejména mikropočítačů na bázi Unixu , byl APL2 téměř vždy standardem zvoleným pro vývoj nových překladačů APL. I dnes většina prodejců APL nebo jejich uživatelů uvádí jako prodejní místo pro tyto produkty kompatibilitu APL2.

APL2 pro sálové počítače IBM je stále k dispozici. IBM cituje jeho použití pro řešení problémů, návrh systému, prototypování, inženýrství a vědecké výpočty, expertní systémy, pro výuku matematiky a dalších předmětů, vizualizaci a přístup k databázi a poprvé byla k dispozici pro CMS a TSO v roce 1984. Edice APL2 Workstation (Windows, OS/2 , AIX , Linux a Solaris ) následovaly mnohem později na počátku 90. let.

Moderní implementace

Různé implementace APL od APLX, Dyalog , et al., Zahrnují rozšíření pro objektově orientované programování , podporu pro .NET Framework , primitiva převodu pole XML, grafy, rozhraní operačního systému a výrazy lambda kalkulu .

Derivační jazyky

APL vytvořil základ následujících jazyků nebo je ovlivnil:

  • A a A+ , alternativní APL, druhý s grafickými rozšířeními.
  • FP , funkční programovací jazyk.
  • Ivy, tlumočník pro jazyk podobný APL vyvinutý Robem Pikem a který používá jako vstup ASCII .
  • J , který také navrhl Iverson a který místo speciálních symbolů používá ASCII s digrafy .
  • K , proprietární varianta APL vyvinutá Arthurem Whitneym.
  • LYaPAS , sovětské rozšíření APL.
  • MATLAB , nástroj pro numerické výpočty.
  • Nial , programovací jazyk pole na vysoké úrovni s funkční notací programování.
  • Polymorphic Programming Language , interaktivní, rozšiřitelný jazyk s podobným základním jazykem.
  • S , statistický programovací jazyk (obvykle se nyní používá v open-source verzi známé jako R ).
  • Speakeasy , interaktivní prostředí s numerickými počítači.
  • Wolfram Language , programovací jazyk Mathematica .

Jazykové charakteristiky

Sada znaků

APL byla kritizována a chválena za výběr jedinečné, nestandardní znakové sady. Někteří, kteří se to naučí, se stanou zapálenými přívrženci, což naznačuje, že za Iversonovou myšlenkou, že použitá notace má vliv, je určitá váha. V 60. a 70. letech 20. století dokázalo znakovou sadu APL reprodukovat několik koncových zařízení a dokonce i monitorů. Nejoblíbenější používaly tiskový mechanismus IBM Selectric používaný se speciálním prvkem typu APL. Jedním z prvních linkových terminálů APL (pouze provoz v řádkovém režimu, nikoli na celou obrazovku) byl Texas Instruments TI Model 745 (kolem roku 1977) s plnou znakovou sadou APL, která představovala poloviční a plně duplexní telekomunikační režimy pro interakci s časem APL -sdílení služby nebo vzdáleného sálového počítače pro spuštění úlohy vzdáleného počítače, nazývané RJE .

Postupem času, s univerzálním používáním vysoce kvalitních grafických displejů, tiskových zařízení a podporou Unicode , byl problém písma písma APL do značné míry odstraněn. Zadávání znaků APL však vyžaduje použití editorů metod vstupu , mapování klávesnice, sady symbolů APL virtuálních/obrazovkových sad APL nebo snadno vytištěných karet klávesnice, což může frustrovat začátečníky zvyklé na jiné programovací jazyky. U začátečníků, kteří nemají předchozí zkušenosti s jinými programovacími jazyky, studie zahrnující studenty středních škol zjistila, že psaní a používání znaků APL studentům nijak měřitelně nebrání.

Na obranu používání APL vyžaduje APL k zadávání méně kódování a mapování klávesnice se postupem času ukládá do paměti. Také se vyrábějí a dnes používají speciální klávesnice APL a volně dostupná písma ke stažení pro operační systémy, jako je Microsoft Windows. Uvedené přírůstky produktivity předpokládají, že člověk stráví dost času prací v APL, aby se vyplatilo zapamatovat si symboly, jejich sémantiku a mapování klávesnice, nemluvě o značném počtu idiomů pro běžné úkoly.

Design

Na rozdíl od tradičně strukturovaných programovacích jazyků je kód APL obvykle strukturován jako řetězce monadických nebo dyadických funkcí a operátoři působící na pole . APL má mnoho nestandardních primitiv (funkcí a operátorů), které jsou označeny jediným symbolem nebo kombinací několika symbolů. Všechny primitivy jsou definovány tak, aby měly stejnou přednost , a vždy se sdružují vpravo. APL je tedy čitelné nebo nejlépe srozumitelné zprava doleva .

Rané implementace APL (asi 1970 nebo tak nějak) neměly žádné programovací struktury pro řízení toku smyčky , jako například donebo whilesmyčky, a if-then-elsekonstrukce. Místo toho používali maticové operace a použití strukturovaných programovacích konstrukcí často nebylo nutné, protože operaci bylo možné provést na plném poli v jednom příkazu. Například iotafunkce ( ι) může nahradit iteraci smyčky : ιN při aplikaci na skalární kladné celé číslo poskytne jednorozměrné pole (vektor), 1 2 3 ... N. Novější implementace APL obecně zahrnují komplexní řídicí struktury , aby bylo možné jasně a čistě oddělit datovou strukturu a tok řízení programu.

Prostředí APL se nazývá pracovní prostor . V pracovním prostoru může uživatel definovat programy a data, tj. Datové hodnoty existují i ​​mimo programy a uživatel může s daty také manipulovat, aniž by musel definovat program. V níže uvedených příkladech interpret APL nejprve napíše šest mezer, než čeká na vstup uživatele. Vlastní výstup začíná v prvním sloupci.

      n  4 5 6 7
Přiřadí vektor hodnot, {4 5 6 7}, proměnné n, operaci vytvoření pole. Ekvivalentní ještě výstižnější výraz APL by byl . V poli je uloženo více hodnot , operace je prováděna bez formálních smyček nebo řídicího toku . n 3 + 4n
      n 
4 5 6 7
Zobrazte obsah naktuálně pole nebo vektoru.
      n+4
8 9 10 11
4 je nyní přidán ke všem prvkům vektoru n, čímž vzniká 4prvkový vektor {8 9 10 11}.
Jak je uvedeno výše, překladač APL zobrazí výsledek, protože hodnota výrazu nebyla přiřazena proměnné (s a ).
      +/n
22
APL zobrazuje součet složek vektoru n, tj. 22 (= 4 + 5 + 6 + 7)Pomocí velmi kompaktního zápisu: číst +/ jako „plus, přes ...“ a mírná změna by byla „znásobit, znovu ...“
      m  +/3+⍳4
      m
22
Tyto operace lze sloučit do jednoho příkazu, přičemž si pamatujte, že APL vyhodnocuje výrazy zprava doleva: nejprve vytvoří pole , poté se ke každé komponentě přidají 3, které se sečtou a výsledek uložený v proměnné se nakonec zobrazí. 4[1,2,3,4]m

V normálním matematickém zápisu, to je ekvivalentní: . Připomeňme, že matematické výrazy se nečtou ani nevyhodnocují zprava doleva.

Uživatel může uložit pracovní prostor se všemi hodnotami, programy a stavem spuštění.

APL používá sadu symbolů jiných než ASCII , které jsou rozšířením tradiční aritmetické a algebraické notace. Jednorázové názvy znaků pro jednu instrukci, vektorové funkce více dat ( SIMD ) jsou jedním ze způsobů, jak APL umožňuje kompaktní formulaci algoritmů pro transformaci dat, jako je například výpočet Conwayovy hry života v jednom řádku kódu. Téměř ve všech verzích APL je teoreticky možné vyjádřit jakoukoli vyčíslitelnou funkci v jednom výrazu, tedy v jednom řádku kódu.

Kvůli neobvyklé znakové sadě používá mnoho programátorů k psaní kódu APL speciální klávesnice s klávesami APL. Přestože existují různé způsoby, jak psát kód APL pomocí pouze znaků ASCII, v praxi se to téměř nikdy nedělá. (To může být považováno za podporu Iversonovy teze o notaci jako nástroji myšlení .) Většina, ne-li všechny moderní implementace, používá standardní rozložení klávesnice se speciálním mapováním nebo editory metod vstupu pro přístup k postavám, které nejsou ASCII. Historicky bylo písmo APL výrazné, s velkými kurzívami a abecedními znaky a vzpřímenými číslicemi a symboly. Většina prodejců nadále zobrazuje znakovou sadu APL ve vlastním písmu.

Zastánci APL tvrdí, že příklady takzvaného kódu pouze pro zápis (špatně napsaný a téměř nesrozumitelný kód) jsou téměř vždy příklady špatné praxe v programování nebo chyb nováčků, ke kterým může dojít v jakémkoli jazyce. Obhájci také tvrdí, že jsou s APL mnohem produktivnější než s konvenčnějšími počítačovými jazyky a že pracovní software může být implementován v mnohem kratším čase as mnohem menším počtem programátorů než při použití jiné technologie.

Mohou také tvrdit, že protože je kompaktní a přehledný, APL se dobře hodí k rozsáhlejšímu vývoji a složitosti softwaru, protože počet řádků kódu lze výrazně snížit. Mnoho zastánců a praktiků APL také považuje standardní programovací jazyky jako COBOL a Java za poměrně únavné. APL se často nachází tam, kde je důležitý čas do uvedení na trh, například u obchodních systémů.

Terminologie

APL jasně rozlišuje mezi funkcemi a operátory . Funkce berou pole (proměnné nebo konstanty nebo výrazy) jako argumenty a vracejí pole jako výsledky. Operátory (podobné funkcím vyššího řádu ) berou funkce nebo pole jako argumenty a odvozují související funkce. Například součet funkce je odvozen použitím redukčního operátora k přidání funkce. Použití stejného operátoru redukce na maximální funkci (která vrací větší ze dvou čísel) odvozuje funkci, která vrací největší ze skupiny (vektorů) čísel. V jazyce J Iverson nahradil výrazy sloveso pro funkci a příslovce nebo spojení pro operátor .

APL také identifikuje tyto funkce integrované do jazyka a reprezentované symbolem nebo fixní kombinací symbolů jako primitiva . Většina primitivů jsou buď funkce, nebo operátoři. Kódování APL je do značné míry proces psaní neprimitivních funkcí a (v některých verzích APL) operátorů. Několik primitivů však není považováno ani za funkce, ani za operátory, což je nejvýraznější úkol.

Některá slova používaná v literatuře APL mají význam, který se liší od slov v matematice a obecnosti informatiky.

Terminologie operátorů APL
Období Popis
funkce operace nebo mapování, které trvá nula, jeden (vpravo) nebo dva (vlevo a vpravo) argumenty, které mohou být skaláry, pole nebo složitější struktury, a mohou vrátit podobně složitý výsledek. Funkce může být:
  • Primitivní: vestavěný a reprezentovaný jediným glyfem;
  • Definováno: jako pojmenovaná a uspořádaná kolekce programových příkazů;
  • Odvozeno: jako kombinace operátoru s jeho argumenty.
pole objekt s hodnotou dat nulové nebo více ortogonálních dimenzí v hlavním řádku , ve kterém je každá položka primitivní skalární datum nebo jiné pole.
niladic nebereme ani nevyžadujeme žádné argumenty, nulové
monadický vyžadující pouze jeden argument; vpravo pro funkci, vlevo pro operátora, unární
dyadický vyžadující levý i pravý argument, binární
ambivalentní nebo monadické schopné použití v monadickém nebo dyadickém kontextu, což umožňuje odstranění jeho levého argumentu
operátor operace nebo mapování, které trvá jednu (vlevo) nebo dvě (vlevo a vpravo) funkci nebo argumenty (operandy) v hodnotě pole a odvozuje funkci. Provozovatelem může být:
  • Primitivní: vestavěný a reprezentovaný jediným glyfem;
  • Definováno: jako pojmenovaná a uspořádaná kolekce programových příkazů.

Syntax

APL má explicitní reprezentace funkcí, operátorů a syntaxe, takže poskytuje základ pro jasné a explicitní vyjádření rozšířených zařízení v jazyce a nástroje pro jejich experimentování.

Příklady

Ahoj světe

Zobrazí se „ Hello, world “:

'Hello, world'

Tématem návrhu v APL je definovat v některých případech výchozí akce, které by ve většině ostatních programovacích jazyků vytvářely chyby syntaxe.

Řetězcová konstanta „Hello, world“ výše se zobrazí, protože zobrazení je výchozí akcí pro jakýkoli výraz, pro který není výslovně zadána žádná akce (např. Přiřazení, parametr funkce).

Umocňování

Dalším příkladem tohoto tématu je, že umocňování v APL je psáno jako " 2*3", což znamená zvýšení 2 na mocninu 3 ( 2^3v některých jiných jazycích by to bylo napsáno jako " " a 2**3v FORTRANu a Pythonu by to bylo napsáno jako " " : mnoho jazyků používá * k znamenají násobení jako v 2*3, ale APL k tomu používá 2×3. Pokud však není zadán žádný základ (jako u příkazu " *3" v APL nebo " ^3" v jiných jazycích), ve většině ostatních programovacích jazyků by došlo k chybě syntaxe. APL však předpokládá, že chybějící základna je přirozená logaritmická konstanta e (2.71828 ....), a tak interpretuje „ *3“ jako „ 2.71828*3“.

Jednoduché statistiky

Předpokládejme, že Xje to řada čísel. Pak (+/X)÷⍴Xudává svůj průměr. Čtení zprava doleva , ⍴Xudává počet prvků v X, a od té doby ÷je dvojčlenný operátor, je zapotřebí doba do její levé straně stejně. Je v závorkách, protože jinak by se bralo X (takže by součet byl X÷⍴Xkaždého prvku X děleno počtem prvků v X) a +/Xpřidá všechny prvky X. Na základě toho vypočítá směrodatnou odchylku . Dále, protože přiřazení je operátor, může se objevit ve výrazu, takže ((+/((X - (+/X)÷⍴X)*2))÷⍴X)*0.5

SD((+/((X - AV(T+/X)÷⍴X)*2))÷⍴X)*0.5

umístí vhodné hodnoty do T, AV a SD. Přirozeně by se z tohoto výrazu stala funkce pro opakované použití, než aby se pokaždé přepisoval.

Vyberte 6 loterijních čísel

Tento následující výraz v okamžitém režimu generuje typickou sadu čísel loterie Pick 6 : šest pseudonáhodných celých čísel v rozmezí od 1 do 40, zaručeno, že se neopakují , a zobrazí je seřazená ve vzestupném pořadí:

x[x6?40]

Výše uvedené dělá hodně, stručně, i když se to může novému APLeru zdát složité . Kombinuje následující funkce APL (nazývané také primitiva a glyfy ):

  • První, kdo má být spuštěn (APL se spouští zprava doleva ), je dyadická funkce ?(pojmenovaná jako dealdyadická), která vrací vektor skládající se z vybraného čísla (v tomto případě levý argument: 6) náhodných celých čísel od 1 do zadaného maxima ( správný argument: 40 v tomto případě), který, pokud je řečený o maximální délce ≥ vektoru, je zaručeno, že se nebude opakovat; tedy vygenerujte/vytvořte 6 náhodných celých čísel v rozmezí od 1-40.
  • Tento vektor je pak přiřazen ( ) proměnné x, protože je potřeba později.
  • Tento vektor je pak seřazen vzestupně podle monadické funkce, která má jako svůj správný argument vše napravo až do další nevyvážené blízké závorky nebo blízké závorky. Výsledkem jsou indexy, které uvedou svůj argument ve vzestupném pořadí.
  • Poté výstup z slouží k indexování proměnné x, kterou jsme pro tento účel dříve uložili, a tím vybíráme její položky ve vzestupném pořadí.

Vzhledem k tomu, že vlevo od levého x není žádná funkce, která by APL říkala, co má s výsledkem dělat, jednoduše jej přenese na displej (na jednom řádku odděleném mezerami), aniž by k tomu potřeboval nějaké explicitní instrukce.

?také má nazýván monadický ekvivalent roll, který jednoduše vrací jedno náhodné číslo mezi 1 a jeho jediným operandem [napravo od toho] včetně. Tak, role-playing game program mohl používat výraz ?20valit dvacet kostkou.

prvočísla

Následující výraz najde všechna prvočísla od 1 do R. V čase i prostoru je složitost výpočtu (v notaci Big O ).

(~RR∘.×R)/R1↓⍳R

Provedeno zprava doleva, to znamená:

  • Iota vytvoří vektor obsahující celá čísla od1doR(pokud jeR= 6na začátku programu,⍳Rje1 2 3 4 5 6)
  • Zahoďte první prvek tohoto vektoru ( funkce), tj 1. Stejně 1↓⍳Rtak2 3 4 5 6
  • Nastavena R na novou vektoru ( , přiřazení primitivní), tj2 3 4 5 6
  • / Replikou operátor dyadická (binární) a interpret první vyhodnocuje levé tvrzení (plně v závorce):
  • Generování vnější produkt z Rnásobí R, tj matrici, která je násobilka R R ( °.×operátor), tj,
4 6 8 10 12
6 9 12 15 18
8 12 16 20 24
10 15 20 25 30
12 18 24 30 36
  • Postavit vektoru stejnou délku jako Rse 1v každém místě, kde je odpovídající číslo Rje ve vnější matrici produktu ( , zahrnutí souboru nebo prvek nebo Epsilon operátora), tedy0 0 1 0 1
  • Logicky negujte ( ne ) hodnoty ve vektoru (změňte nuly na jedničky a jedničky na nuly) ( , logický ne nebo operátor vlnovky ), tj.1 1 0 1 0
  • Vyberte položky, Rpro které je odpovídající prvek 1( operátor / replikace ), tj.2 3 5

(Poznámka: Tento předpokládá, že APL původ je 1, tj indexy začínat 1. APL může být nastaven na použití 0 jako původu, takže ι6je 0 1 2 3 4 5, což je výhodné pro některé výpočty.)

Třídění

Následující výraz třídí seznam slov uložený v matici X podle délky slova:

X[X+.' ';]

Hra o život

Následující funkce „život“, napsaná v Dyalog APL, bere booleovskou matici a vypočítává novou generaci podle Conwayovy hry o život . Ukazuje schopnost APL implementovat složitý algoritmus ve velmi malém kódu, ale je také velmi těžké ho sledovat, pokud člověk nemá pokročilé znalosti APL.

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

Odstranění HTML tagů

V následujícím příkladu, také Dyalog, první řádek přiřadí nějaký HTML kód proměnné txta poté použije výraz APL k odebrání všech HTML tagů ( vysvětlení ):

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

Pojmenování

APL odvozuje svůj název od iniciál Iversonovy knihy Programovací jazyk , přestože kniha popisuje Iversonův matematický zápis , nikoli od implementovaného programovacího jazyka popsaného v tomto článku. Název se používá pouze pro skutečné implementace, počínaje APL \ 360 .

Adin Falkoff razil jméno v roce 1966 během implementace APL \ 360 v IBM :

Když jsem procházel kanceláří, kterou sdíleli tři studenti, slyšel jsem zvuky hádky. Strčil jsem hlavu do dveří a Eric se mě zeptal: „Není pravda, že každý ví, že zápis, který používáme, se nazývá APL?“ Bylo mi líto, že jsem ho musel zklamat tím, že jsem přiznal, že jsem to nikdy neslyšel, jak se to říká. Kde vzal tu myšlenku, že je to dobře známé? A kdo se rozhodl tomu tak říkat? Ve skutečnosti, proč se tomu muselo říkat jakkoli? "Docela dlouho poté jsem slyšel, jak se to jmenovalo. Když v červnu 1966 začalo úsilí o implementaci, začalo také úsilí o dokumentaci. Předpokládám, že když o" tom "měli psát, Falkoff a Iverson si uvědomili, že budou muset pojmenujte "to". V té době bylo pravděpodobně učiněno mnoho návrhů, ale slyšel jsem jen o dvou. Skupina v SRA v Chicagu, která vyvíjela výukové materiály pomocí notace, byla pro jméno "Mathlab". Nechybělo to. Dalším návrhem bylo nazvat to „Iversonova lepší matematika“ a poté nechat lidi razit příslušnou zkratku. To bylo považováno za ubohé.

Pak jednoho dne vešel Adin Falkoff do Kenovy kanceláře a na tabuli napsal „Programovací jazyk“ a pod něj zkratku „APL“. Tak se to zrodilo. Byl to jen asi týden poté, co mi Eric Iverson položil svou otázku, v době, kdy si název ještě nenašel cestu třináct mil po Taconic Parkway od IBM Research k IBM Mohansic.

APL je příležitostně znovu interpretován jako Array Programming Language nebo Array Processing Language , což z APL dělá backronym .

Konferenční brašna na konferenci British APL Association (BAPLA).

Mezi prodejci APL vždy existovala spolupráce a společné konference se pravidelně konaly od roku 1969 do roku 2010. Na takových konferencích se často rozdávalo zboží APL s motivy APL nebo sbírkou log prodejců. Společná byla jablka (jako slovní hříčka podobnosti ve výslovnosti jablek a APL ) a úryvek kódu, což jsou symboly vytvářené klasickým rozložením klávesnice APL, když držíte klávesu modifikátoru APL a píšete „APL“. *

Navzdory všem těmto snahám komunity nevzniklo pro programovací jazyk žádné univerzální logo agnostické pro prodejce. Vzhledem k tomu, že populární programovací jazyky stále častěji vytvářejí rozpoznatelná loga, společnost Fortran v roce 2020 jedno získala, v druhé polovině roku 2021 zahájila britská asociace APL kampaň na vytvoření takového loga pro APL.

Použití

APL se používá k mnoha účelům, včetně finančních a pojišťovacích aplikací, umělé inteligence , neurálních sítí a robotiky . Argumentovalo se tím, že APL je nástroj pro výpočet a ne programovací jazyk; díky své symbolické povaze a schopnostem se stal oblíbeným mezi odborníky na domény a datovými vědci, kteří nemají ani nevyžadují dovednosti počítačového programátora .

APL se dobře hodí pro manipulaci s obrázky a počítačovou animaci , kde lze grafické transformace kódovat jako násobení matic. Jeden z prvních komerčních počítačových grafických domů, Digital Effects , produkoval APL grafický produkt s názvem Visions , který byl použit k vytváření televizních reklam a animací pro film Tron z roku 1982 . Latterly, simulátor plavby Stormwind využívá APL k implementaci své základní logiky, svého propojení se středním softwarem vykreslovacího potrubí a hlavní částí svého fyzikálního enginu .

Dnes APL zůstane v použití v širokém spektru komerčních a vědeckých aplikací, například řízení investic , správy majetku , zdravotní péči a DNA profilování a fandy.

Pozoruhodné implementace

APL \ 360

První implementace APL pomocí rozpoznatelných symbolů APL byla APL \ 360, která běžela na systému IBM System/360 a byla dokončena v listopadu 1966, ačkoli v té době zůstala používána pouze v rámci IBM. V roce 1973 získali její realizátoři Larry Breed , Dick Lathwell a Roger Moore Cenu Grace Murray Hopper Award od Asociace pro výpočetní techniku (ACM). Bylo uděleno „za jejich práci při návrhu a implementaci APL \ 360, nastavení nových standardů v jednoduchosti, efektivitě, spolehlivosti a době odezvy pro interaktivní systémy“.

V roce 1975 mikropočítač IBM 5100 nabízel APL \ 360 jako jeden ze dvou vestavěných interpretovaných jazyků založených na ROM pro počítač s klávesnicí a displejem, které podporovaly všechny speciální symboly používané v daném jazyce.

Významný vývoj APL \ 360 zahrnoval CMS/APL, který využíval schopností virtuálního úložiště CMS a APLSV, který představil sdílené proměnné , systémové proměnné a systémové funkce. Následně byl portován na platformy IBM System/370 a VSPC až do jeho finálního vydání v roce 1983, poté byl nahrazen APL2.

APL \ 1130

V roce 1968 se APL \ 1130 stal prvním veřejně dostupným systémem APL, vytvořeným společností IBM pro IBM 1130 . Stala se nejpopulárnějším softwarem IBM Type-III Library, který IBM vydala.

APL*Plus a Sharp APL

APL*Plus a Sharp APL jsou verze APL \ 360 s přidanými obchodně orientovanými rozšířeními, jako je formátování dat a zařízení pro ukládání polí APL do externích souborů. Byly společně vyvinuty dvěma společnostmi, které zaměstnávaly různé členy původního vývojového týmu IBM APL \ 360.

Těmito dvěma společnostmi byly IP Sharp Associates (IPSA), společnost poskytující služby APL \ 360, založená v roce 1964 Ianem Sharpem, Rogerem Moorem a dalšími, a STSC , společnost pro sdílení času a poradenské služby, založená v roce 1969 Lawrenceem Breedem a dalšími. Oba společně vyvinuli APL*Plus a poté pokračovali ve spolupráci, ale vyvíjeli APL samostatně jako APL*Plus a Sharp APL. STSC portoval APL*Plus na mnoho platforem s verzemi vyráběnými pro VAX 11, PC a UNIX, zatímco IPSA zvolila jiný přístup k příchodu osobního počítače a zpřístupnila Sharp APL na této platformě pomocí dalšího hardwaru PC-XT/360 . V roce 1993 byla založena společnost Soliton Incorporated na podporu Sharp APL a vyvinula Sharp APL na SAX (Sharp APL pro Unix). Od roku 2018 pokračuje APL*Plus jako APL2000 APL+Win.

V roce 1985 společně obdrželi Ian Sharp a Dan Dyer z STSC Cenu Kennetha E. Iversona za mimořádný přínos APL .

APL2

APL2 byla významná opětovná implementace APL společností IBM, která byla vyvinuta od roku 1971 a poprvé vydána v roce 1984. Poskytuje mnoho dodatků k jazyku, z nichž nejvýznamnější je vnořená (ne obdélníková) podpora polí. Od roku 2018 je k dispozici pro sálové počítače s operačním systémem z/OS nebo z/VM a pracovní stanice se systémem AIX , Linux , Sun Solaris a Microsoft Windows .

Celý tým produktů a služeb APL2 získal v roce 2007 Cenu Iverson.

APLGOL

V roce 1972 byl APLGOL vydán jako experimentální verze APL, která do jazykového rámce přidala konstrukce strukturovaného programovacího jazyka. Byly přidány nové příkazy pro ovládání interstatementu, podmíněné provádění příkazů a strukturování příkazů, stejně jako příkazy pro objasnění záměru algoritmu. To bylo implementováno pro Hewlett-Packard v roce 1977.

Dyalog APL

Dyalog APL byl poprvé vydán britskou společností Dyalog Ltd. v roce 1983 a od roku 2018 je k dispozici pro platformy AIX , Linux (včetně Raspberry Pi ), macOS a Microsoft Windows . Je založen na APL2 s rozšířeními pro podporu objektově orientovaného programování a funkčního programování . Licence jsou zdarma pro osobní/nekomerční použití.

V roce 1995 získali dva z vývojového týmu - John Scholes a Peter Donnelly - cenu Iverson za práci na tlumočníkovi. Gitte Christensen a Morten Kromberg byli v roce 2016 společnými příjemci ceny Iverson.

NARS2000

NARS2000 je open-source překladač APL napsaný Bobem Smithem, významným vývojářem a implementátorem APL z STSC v 70. a 80. letech minulého století. NARS2000 obsahuje pokročilé funkce a nové datové typy a běží nativně v systému Microsoft Windows a dalších platformách pod Wine .

APLX

APLX je multiplatformní dialekt APL, založený na APL2 a s několika rozšířeními, který byl poprvé vydán britskou společností MicroAPL v roce 2002. Ačkoli již není ve vývoji nebo v komerčním prodeji, je nyní k dispozici zdarma od Dyalog.

GNU APL

GNU APL je bezplatná implementace Extended APL podle ISO/IEC 13751: 2001 a je tedy implementací APL2. Běží na Linuxu (včetně Raspberry Pi), macOS, několika BSD dialektech a na Windows (buď pomocí Cygwinu pro plnou podporu všech jeho systémových funkcí, nebo jako nativní 64bitový binární soubor Windows s některými jeho systémovými funkcemi chybí) . GNU APL používá Unicode interně a lze jej skriptovat. Napsal ji Jürgen Sauermann.

Richard Stallman , zakladatel projektu GNU , byl jedním z prvních uživatelů APL a v létě 1969 jej použil jako student střední školy k napsání textového editoru.

Interpretace a kompilace APL

APL je tradičně interpretovaný jazyk s jazykovými charakteristikami, jako je slabé psaní proměnných, které se pro kompilaci příliš nehodí . S poli jako základní datovou strukturou však poskytuje příležitosti pro zvýšení výkonu díky paralelismu , paralelnímu výpočtu , masivně paralelním aplikacím a velmi rozsáhlé integraci (VLSI) a od samého počátku je APL považován za vysoce výkonný jazyk. - například byl zaznamenán pro rychlost, s jakou mohl provádět komplikované maticové operace „protože operuje na polích a provádí operace jako inverze matice interně“.

Přesto je APL jen zřídka čistě interpretován a kompilační nebo částečné kompilační techniky, které jsou nebo byly použity, zahrnují následující:

Rozpoznávání idiomů

Většina APL tlumočníků podporovat idiom uznání a zhodnotit společných idiomy jako jediné operace. Například vyhodnocením idiomu BV/⍳⍴Ajako jediné operace (kde BVje booleovský vektor a Aje pole) se zabrání vytváření dvou mezilehlých polí.

Optimalizovaný bytecode

Slabé psaní v APL znamená, že název může odkazovat na pole (jakéhokoli datového typu), funkci nebo operátor. Obecně platí, že tlumočník nemůže předem vědět, jaká forma to bude, a proto musí za běhu provádět analýzu, kontrolu syntaxe atd. Za určitých okolností je však možné předem odvodit, na jaký typ názvu se má odkazovat, a poté vygenerovat bytecode, který lze provést se sníženou režií běhu. Tento bytecode lze také optimalizovat pomocí kompilačních technik, jako je konstantní skládání nebo eliminace běžných podvýrazů . Tlumočník provede bajtový kód, je -li přítomen a jsou splněny všechny předpoklady, které byly učiněny. Dyalog APL obsahuje podporu pro optimalizovaný bytecode.

Sestavení

Kompilace APL je předmětem výzkumu a experimentů od doby, kdy byl jazyk poprvé k dispozici; první kompilátor je považován za Burroughs APL-700, který byl vydán kolem roku 1971. Aby bylo možné kompilovat APL, musí být zavedena jazyková omezení. APEX je výzkumný kompilátor APL, který napsal Robert Bernecky a je k dispozici pod veřejnou licencí GNU .

STSC APL kompilátor je kříženec bytecode Optimiser a překladače - umožňuje kompilace funkcí do strojového kódu za předpokladu, že její dílčí funkce a globální proměnné jsou deklarována , ale interpret se stále používá jako knihovna runtime a vykonávat funkce, které dělat nesplňují požadavky na kompilaci.

Standardy

APL byla standardizována pracovní skupinou X3J10 Amerického národního normalizačního institutu (ANSI) a Mezinárodní organizací pro normalizaci (ISO) a Mezinárodní elektrotechnickou komisí (IEC), Společnou technickou komisí ISO/IEC 1 Podvýbor 22 Pracovní skupina 3. Základní jazyk APL je specifikováno v ISO 8485: 1989 a jazyk Extended APL je specifikován v ISO/IEC 13751: 2001.

Reference

Další čtení

Video

externí odkazy

Online zdroje

Poskytovatelé

Skupiny uživatelů a společnosti