APL (programmeringssprog) - APL (programming language)
| Paradigme | Array , funktionel , struktureret , modulær |
|---|---|
| Designet af | Kenneth E. Iverson |
| Udvikler | Larry Breed , Dick Lathwell , Roger Moore og andre |
| Første gang dukkede op | 27. november 1966 |
| Stabil udgivelse | ISO / IEC 13751: 2001 / 1. februar 2001
|
| Skrive disciplin | Dynamisk |
| Platform | Kryds platform |
| Licens | Proprietær , open source |
| Store implementeringer | |
| |
| Påvirket af | |
| Matematisk notation | |
| Påvirket | |
APL (opkaldt efter bogen A Programming Language ) er et programmeringssprog udviklet i 1960'erne af Kenneth E. Iverson . Dens centrale datatype er det flerdimensionale array . Den bruger en lang række specielle grafiske symboler til at repræsentere de fleste funktioner og operatører, hvilket fører til meget kortfattet kode. Det har været en vigtig indflydelse på udviklingen af konceptmodellering, regneark , funktionel programmering og computermatematikpakker. Det har også inspireret flere andre programmeringssprog.
Historie
Matematisk notation
En matematisk notation til manipulation af arrays blev udviklet af Kenneth E. Iverson , der startede i 1957 ved Harvard University . I 1960 begyndte han at arbejde for IBM, hvor han udviklede denne notation med Adin Falkoff og udgav den i sin bog A Programming Language i 1962. Forordet angiver dens præmis:
Anvendt matematik beskæftiger sig stort set med design og analyse af eksplicitte procedurer til beregning af de nøjagtige eller omtrentlige værdier af forskellige funktioner. Sådanne eksplicitte procedurer kaldes algoritmer eller programmer . Fordi en effektiv notation til beskrivelse af programmer udviser betydelig syntaktisk struktur, kaldes det et programmeringssprog .
Denne notation blev brugt inde IBM til korte analyser om edb-systemer, såsom Burroughs B5000 og dens stak mekanisme, når stak maskiner versus registerdata maskiner blev evalueret af IBM til kommende computere.
Iverson brugte også sin notation i et udkast til kapitlet A Programming Language , skrevet til en bog, han skrev med Fred Brooks , Automatic Data Processing , som ville blive udgivet i 1963.
I 1979 modtog Iverson Turing -prisen for sit arbejde med APL.
Udvikling til et computerprogrammeringssprog
Allerede i 1962 skete det første forsøg på at bruge notationen til at beskrive et komplet computersystem, efter at Falkoff diskuterede med William C. Carter sit arbejde med at standardisere instruktionssættet for de maskiner, der senere blev IBM System/360 -familien.
I 1963 implementerede Herbert Hellerman, der arbejdede ved IBM Systems Research Institute, en del af notationen på en IBM 1620 -computer, og den blev brugt af studerende i et specielt gymnasiekursus om beregning af transcendentale funktioner ved seriesummering. Eleverne testede deres kode i Hellermans laboratorium. Denne implementering af en del af notationen blev kaldt Personalized Array Translator (PAT).
I 1963 brugte Falkoff, Iverson og Edward H. Sussenguth Jr. , der alle arbejder hos IBM, notationen til en formel beskrivelse af maskinens arkitektur og funktionalitet i IBM System/360 -serien, hvilket resulterede i et papir publiceret i IBM Systems Journal i 1964. Efter at dette blev offentliggjort, rettede teamet deres opmærksomhed mod en implementering af notationen på et computersystem. En af motivationerne for dette fokus på implementering var interessen hos John L. Lawrence, der havde nye opgaver hos Science Research Associates , et uddannelsesfirma, der blev købt af IBM i 1964. Lawrence bad Iverson og hans gruppe om at hjælpe med at bruge sproget som et værktøj til at udvikle og bruge computere i undervisningen.
Efter at Lawrence M. Breed og Philip S. Abrams fra Stanford University sluttede sig til teamet på IBM Research, fortsatte de deres tidligere arbejde med en implementering programmeret i FORTRAN IV for en del af notationen, der var blevet udført for IBM 7090 -computeren, der kører på IBSYS -operativsystem. Dette arbejde blev afsluttet i slutningen af 1965 og senere navngivet IVSYS (for Iverson system). Grundlaget for denne implementering blev beskrevet detaljeret af Abrams i en Stanford University Technical Report, "An Interpreter for Iverson Notation" i 1966, det akademiske aspekt af dette blev formelt overvåget af Niklaus Wirth . Ligesom Hellermans PAT -system tidligere inkluderede denne implementering ikke APL -tegnsættet, men brugte specielle engelske reserverede ord til funktioner og operatører. Systemet blev senere tilpasset til et tidsdelingssystem , og i november 1966 var det blevet omprogrammeret til IBM System/360 Model 50- computeren, der kørte i en tidsdelingstilstand og blev brugt internt hos IBM.
Hardware
En vigtig udvikling i evnen til at bruge APL effektivt, før den brede brug af katodestrålerør ( CRT ) terminaler, var udviklingen af et specielt IBM Selectric skrivemaskine, der kan udskiftes med alle de specielle APL -tegn på det. Dette blev brugt på papirudskrivningsterminalstationer ved hjælp af Selectric skrivemaskine og skriveelementmekanisme, såsom IBM 1050 og IBM 2741 terminal. Keycaps kunne placeres over de normale taster for at vise, hvilke APL -tegn der skulle indtastes og skrives, når den tast blev slået. For første gang kunne en programmør indtaste og se korrekte APL -tegn som brugt i Iversons notation og ikke blive tvunget til at bruge akavede engelske søgeordsrepræsentationer af dem. Falkoff og Iverson havde de specielle APL Selectric skriveelementer, 987 og 988, designet i slutningen af 1964, selvom der ikke var noget APL -computersystem til rådighed til at bruge dem. Iverson citerede Falkoff som inspiration til ideen om at bruge et IBM Selectric -skriveelement til APL -tegnsættet.
Mange APL-symboler, selv med APL-tegnene på det selektiske skriveelement, skulle stadig indtastes ved at overstregne to eksisterende elementtegn. Et eksempel er karakteren karakter, som skulle laves fra et delta (shift-H) og et Sheffer-slag (shift-M). Dette var nødvendigt, fordi APL-tegnsættet var meget større end de 88 tegn, der er tilladt på skriveelementet, selv når bogstaver var begrænset til store bogstaver (store).
Kommerciel tilgængelighed
Det første interaktive APL -login og oprettelse af et APL -arbejdsområde var i 1966 af Larry Breed ved hjælp af en IBM 1050 -terminal på IBM Mohansic Labs nær Thomas J. Watson Research Center , APLs hjemsted, i Yorktown Heights, New York .
IBM var hovedansvarlig for introduktionen af APL på markedet. Den første offentligt tilgængelige version af APL blev udgivet i 1968 til IBM 1130 . IBM leverede APL \ 1130 gratis men uden ansvar eller support. Det ville køre i så lidt som 8k 16-bit ord hukommelse og brugte en dedikeret 1 megabyte harddisk.
APL fik fodfæste på mainframe timesharing-systemer fra slutningen af 1960'erne til begyndelsen af 1980'erne, dels fordi det ville understøtte flere brugere på systemer med lavere specifikationer, der ikke havde nogen dynamisk adresseoversættelseshardware . Yderligere forbedringer af ydeevnen for udvalgte IBM System/370 mainframe-systemer omfattede APL Assist Microcode , hvor en vis understøttelse af APL-udførelse var inkluderet i processorens firmware , som adskiller sig fra at blive implementeret udelukkende af software på højere niveau. Lidt senere, da passende ydeevne endelig voksede til rådighed i midten til slutningen af 1980'erne, migrerede mange brugere deres applikationer til det personlige computermiljø.
Tidlige IBM APL-tolke til IBM 360 og IBM 370 hardware implementerede deres egen multi-user management i stedet for at stole på værtstjenesterne, og dermed var de deres egne timesharing-systemer. APL \ 360- systemet blev først introduceret til brug i IBM i 1966 og var en tolk til flere brugere. Evnen til programmatisk at kommunikere med operativsystemet til information og indstilling af tolke systemvariabler blev udført ved hjælp af særlige privilegerede "I-beam" -funktioner ved hjælp af både monadiske og dyadiske operationer.
I 1973 udgav IBM APL.SV , som var en fortsættelse af det samme produkt, men som tilbød delte variabler som et middel til at få adgang til faciliteter uden for APL -systemet, såsom operativsystemfiler. I midten af 1970'erne blev IBM's mainframe-tolk endda tilpasset til brug på stationær computer 5100 , der havde en lille CRT og et APL-tastatur, da de fleste andre datidens små computere kun tilbød BASIC . I 1980'erne nød VSAPL -programproduktet bred anvendelse med Conversational Monitor System (CMS), Time Sharing Option (TSO), VSPC , MUSIC/SP og CICS -brugere.
I 1973–1974 instruerede Patrick E. Hagerty implementeringen af University of Maryland APL -tolk for 1100 -serien af Sperry UNIVAC 1100/2200 -seriens mainframe -computere. På det tidspunkt havde Sperry ingenting. I 1974 fik eleven Alan Stebbens til opgave at implementere en intern funktion. Xerox APL var tilgængelig fra juni 1975 til Xerox 560 og Sigma 6, 7 og 9 mainframes med CP-V og til Honeywell CP-6 .
I 1960'erne og 1970'erne opstod der flere timesharing -virksomheder, der solgte APL -tjenester ved hjælp af ændrede versioner af IBM APL \ 360 -tolken. I Nordamerika var de mere kendte IP Sharp Associates , Scientific Time Sharing Corporation (STSC), Time Sharing Resources (TSR) og The Computer Company (TCC). CompuServe kom også ind på markedet i 1978 med en APL-tolk baseret på en modificeret version af Digital Equipment Corp og Carnegie Mellons, som kørte på DEC's KI og KL 36-bit maskiner. CompuServes APL var tilgængelig både for det kommercielle marked og for forbrugeroplysningstjenesten. Med fremkomsten først af billigere mainframes som IBM 4300 og senere den personlige computer i midten af 1980'erne var timesharingindustrien næsten væk.
Sharp APL var tilgængelig fra IP Sharp Associates , først som en timesharingstjeneste i 1960'erne og senere som et programprodukt fra omkring 1979. Sharp APL var en avanceret APL -implementering med mange sprogudvidelser, f.eks. Pakker (evnen til at sætte en eller flere objekter i en enkelt variabel), filsystem, indlejrede arrays og delte variabler .
APL-tolke var også tilgængelige fra andre mainframe- og mini-computerproducenter, især Burroughs , Control Data Corporation (CDC), Data General , Digital Equipment Corporation (DEC), Harris , Hewlett-Packard (HP), Siemens AG , Xerox og andre .
Garth Foster fra Syracuse University sponsorerede regelmæssige møder i APL -implementeringssamfundet i Syracuse's Minnowbrook Conference Center i Blue Mountain Lake, New York . I senere år organiserede Eugene McDonnell lignende møder på Asilomar Conference Grounds nær Monterey, Californien og på Pajaro Dunes nær Watsonville, Californien. SIGAPL -interessegruppen i Association for Computing Machinery støtter fortsat APL -samfundet.
Mikrocomputere
På mikrocomputere, som blev tilgængelige fra midten af 1970'erne og fremefter, blev BASIC det dominerende programmeringssprog. Ikke desto mindre leverede nogle mikrocomputere i stedet APL - den første var den Intel 8008 -baserede MCM/70, der blev udgivet i 1974, og som primært blev brugt til uddannelse. En anden maskine på dette tidspunkt var VideoBrain Family Computer , udgivet i 1977, som blev leveret med dens dialekt af APL kaldet APL/S.
Den Commodore SuperPET , indført i 1981, omfattede en APL tolk udviklet af University of Waterloo .
I 1976 hævdede Bill Gates i sit åbne brev til hobbyister, at Microsoft Corporation implementerede APL til Intel 8080 og Motorola 6800, men havde "meget lidt incitament til at gøre det tilgængeligt for hobbyfolk" på grund af softwarepirateri . Den blev aldrig frigivet.
APL2
Fra begyndelsen af 1980'erne implementerede IBM APL -udvikling under ledelse af Jim Brown en ny version af APL -sproget, der som hovedforbedring indeholdt begrebet indlejrede arrays , hvor en matrix kan indeholde andre arrays og nye sprogfunktioner, som lettere at integrere indlejrede matriser i programmets arbejdsgang. Ken Iverson, der ikke længere havde kontrol over udviklingen af APL -sproget, forlod IBM og sluttede sig til IP Sharp Associates , hvor et af hans store bidrag var at styre udviklingen af Sharp APL mere i overensstemmelse med hans vision.
Da andre leverandører havde travlt med at udvikle APL -tolke til ny hardware, især Unix -baserede mikrocomputere , var APL2 næsten altid den standard, der blev valgt for nye APL -tolkudviklinger. Selv i dag nævner de fleste APL -leverandører eller deres brugere APL2 -kompatibilitet som et salgsargument for disse produkter.
APL2 til IBM -mainframe -computere er stadig tilgængelig. IBM henviser til dets anvendelse til problemløsning, systemdesign, prototyper, ingeniørvidenskabelige og videnskabelige beregninger, ekspertsystemer, til undervisning i matematik og andre emner, visualisering og databaseadgang og var første gang tilgængelig for CMS og TSO i 1984. APL2 Workstation -udgaven (Windows, OS/2 , AIX , Linux og Solaris ) fulgte meget senere i begyndelsen af 1990'erne.
Moderne implementeringer
Forskellige implementeringer af APL af APLX, Dyalog , et al., Omfatter udvidelser til objektorienteret programmering , understøttelse af .NET Framework , XML-array konvertering primitiver, grafik, operativsystem grænseflader og lambda calculus udtryk.
Afledte sprog
APL har dannet grundlaget for eller påvirket følgende sprog:
- A og A+ , en alternativ APL, sidstnævnte med grafiske udvidelser.
- FP , et funktionelt programmeringssprog.
- Ivy, tolk for et APL-lignende sprog udviklet af Rob Pike , og som bruger ASCII som input.
- J , som også blev designet af Iverson, og som bruger ASCII med digrafer i stedet for specielle symboler.
- K , en proprietær variant af APL udviklet af Arthur Whitney.
- LYaPAS , en sovjetisk udvidelse til APL.
- MATLAB , et numerisk beregningsværktøj.
- Nial , et programmeringssprog på højt niveau med en funktionel programmeringsnotation.
- Polymorf programmeringssprog , et interaktivt, udvideligt sprog med et lignende grundsprog.
- S , et statistisk programmeringssprog (normalt nu set i open source-versionen kendt som R ).
- Speakeasy , et numerisk computerinteraktivt miljø.
- Wolfram Language , programmeringssproget i Mathematica .
Sprogskarakteristika
Tegnsæt
APL er både blevet kritiseret og rost for sit valg af et unikt, ikke-standardiseret tegnsæt. Nogle, der lærer det, bliver ivrige tilhængere, hvilket tyder på, at der ligger en vis vægt bag Iversons idé om, at den anvendte notation gør en forskel. I 1960'erne og 1970'erne kunne få terminalenheder og endda displaymonitorer gengive APL -tegnsættet. De mest populære anvendte IBM Selectric -udskriftsmekanismen, der blev brugt med et specielt APL -element. En af de tidlige APL -linieterminaler (kun line-mode-drift, ikke fuld skærm) var Texas Instruments TI Model 745 (ca. 1977) med det fulde APL-tegnsæt, der havde halv og fuld duplex telekommunikationstilstande , til interaktion med en APL- tid -deling service eller fjernmainframe til at køre et eksternt computerjob, kaldet en RJE .
Med tiden, med den universelle brug af grafiske displays i høj kvalitet, udskrivningsenheder og Unicode- understøttelse, er problemet med skrifttypen APL-tegn stort set elimineret. Imidlertid kræver indtastning af APL-tegn brug af inputmetode-redaktører , tastaturtilknytninger, virtuelle/på skærmen APL-symbolsæt eller let reference udskrevne tastaturkort, som kan frustrere begyndere, der er vant til andre programmeringssprog. Med begyndere, der ikke har nogen tidligere erfaring med andre programmeringssprog, fandt en undersøgelse, der involverede gymnasieelever, at indtastning og brug af APL -tegn ikke hindrede eleverne på nogen målbar måde.
Til forsvar for APL -brug kræver APL mindre kodning for at indtaste, og tastaturtilknytninger bliver lagret udenad med tiden. Desuden fremstilles og bruges særlige APL -tastaturer i dag, ligesom frit tilgængelige downloadbare skrifttyper til operativsystemer som Microsoft Windows. De rapporterede produktivitetsgevinster antager, at man vil bruge nok tid på at arbejde i APL til at gøre det umagen værd at huske symbolerne, deres semantik og tastaturkort, for slet ikke at tale om et betydeligt antal idiomer til fælles opgaver.
Design
I modsætning til traditionelt strukturerede programmeringssprog er APL -koden typisk struktureret som kæder af monadiske eller dyadiske funktioner , og operatører, der handler på arrays . APL har mange ikke -standardiserede primitiver (funktioner og operatorer), der er angivet med et enkelt symbol eller en kombination af et par symboler. Alle primitiver er defineret til at have samme forrang , og forbinder altid til højre. Således læses eller forstås APL bedst fra højre til venstre .
Tidlige APL-implementeringer (omkring 1970 eller deromkring) havde ingen programmeringssløjfe- flowkontrolstrukturer , såsom doeller whilesløjfer, og if-then-elsekonstruktioner. I stedet brugte de array -operationer, og brug af strukturerede programmeringskonstruktioner var ofte ikke nødvendig, da en operation kunne udføres på et fuldt array i en sætning. For eksempel kan iotafunktionen ( ι) erstatte it -loop- iteration : ιN, når den anvendes på et skalært positivt heltal, giver et endimensionelt array (vektor), 1 2 3 ... N. Nyere implementeringer af APL omfatter generelt omfattende kontrolstrukturer , så datastruktur og programstyringsflow kan skilles klart og rent ad.
APL -miljøet kaldes et arbejdsområde . I et arbejdsområde kan brugeren definere programmer og data, dvs. dataværdierne findes også uden for programmerne, og brugeren kan også manipulere dataene uden at skulle definere et program. I nedenstående eksempler skriver APL -tolken først seks mellemrum, inden han afventer brugerens input. Dens eget output starter i kolonne et.
n ← 4 5 6 7
|
Tildeler vektor af værdier, {4 5 6 7}, til variabel n, en arrayoprettelsesoperation. Et tilsvarende endnu mere kortfattet APL -udtryk ville være . Flere værdier gemmes i array , operationen udføres uden formelle sløjfer eller kontrolstrømssprog .
n ← 3 + ⍳4n |
n
4 5 6 7
|
Vis indholdet af n, i øjeblikket en matrix eller vektor.
|
n+4
8 9 10 11
|
4 tilføjes nu til alle elementer i vektoren n, hvilket skaber en 4-elementers vektor {8 9 10 11}. Som ovenfor viser APL's tolk resultatet, fordi udtrykets værdi ikke blev tildelt en variabel (med a ←).
|
+/n
22
|
APL viser summen af komponenterne i vektoren n, dvs. ved 22 (= 4 + 5 + 6 + 7)hjælp af en meget kompakt notation: læs +/ som "plus, over ..." og en lille ændring ville være "multiplicere, over ..."
|
m ← +/3+⍳4
m
22
|
Disse operationer kan kombineres til en sætning, idet man husker, at APL evaluerer udtryk fra højre til venstre: opretter først et array , derefter tilføjes 3 til hver komponent, som summeres sammen og resultatet gemmes i variabel , og endelig vises.
⍳4[1,2,3,4]mI normal matematisk notation, det svarer til: . Husk, at matematiske udtryk ikke læses eller evalueres fra højre til venstre. |
Brugeren kan gemme arbejdsområdet med alle værdier, programmer og udførelsesstatus.
APL bruger et sæt ikke- ASCII- symboler, som er en forlængelse af traditionel aritmetisk og algebraisk notation. Med enkelttegnsnavne til enkelt instruktion er multiple data ( SIMD ) vektorfunktioner en måde, hvorpå APL muliggør kompakt formulering af algoritmer til datatransformation som f.eks. Beregning af Conways Game of Life i en kodelinje. I næsten alle versioner af APL er det teoretisk muligt at udtrykke en hvilken som helst beregningsbar funktion i et udtryk, det vil sige i en kodelinje.
På grund af det usædvanlige tegnsæt bruger mange programmører specielle tastaturer med APL -tastaturer til at skrive APL -kode. Selvom der er forskellige måder at skrive APL -kode ved hjælp af kun ASCII -tegn, er det i praksis næsten aldrig gjort. (Dette kan tænkes at understøtte Iversons tese om notation som et tankemiddel .) De fleste, hvis ikke alle moderne implementeringer bruger standard tastaturlayout, med specielle kortlægninger eller inputmetode-redaktører for at få adgang til ikke-ASCII-tegn. Historisk set har APL -skrifttypen været karakteristisk med kursiv alfabetisk store bogstaver og lodrette tal og symboler. De fleste leverandører viser fortsat APL -tegnsættet i en brugerdefineret skrifttype.
Advokater for APL hævder, at eksemplerne på såkaldt skrivebeskyttet kode (dårligt skrevet og næsten uforståelig kode) næsten altid er eksempler på dårlig programmeringspraksis eller nybegynderfejl, der kan forekomme på ethvert sprog. Advokater hævder også, at de er langt mere produktive med APL end med mere konventionelle edb -sprog, og at arbejdssoftware kan implementeres på langt kortere tid og med langt færre programmører end ved hjælp af anden teknologi.
De kan også hævde, at fordi det er kompakt og snævert, egner APL sig godt til større softwareudvikling og kompleksitet, fordi antallet af kodelinjer kan reduceres kraftigt. Mange APL -fortalere og praktikere ser også standardprogrammeringssprog som COBOL og Java som forholdsvis kedelige. APL findes ofte, hvor time-to-market er vigtigt, f.eks. Med handelssystemer.
Terminologi
APL skelner klart mellem funktioner og operatører . Funktioner tager arrays (variabler eller konstanter eller udtryk) som argumenter og returnerer arrays som resultater. Operatører (svarende til funktioner i højere orden ) tager funktioner eller arrays som argumenter og udleder relaterede funktioner. For eksempel beløb er funktionen disse ved at anvende den reduktion operatør til tilsætningen funktion. Anvendelse af den samme reduktionsoperator til maksimalfunktionen (som returnerer det største af to tal) får en funktion, der returnerer den største af en gruppe (vektor) af tal. I J -sproget erstattede Iverson udtrykkene verb med funktion og adverb eller konjunktion med operator .
APL identificerer også de funktioner, der er indbygget i sproget og repræsenteret af et symbol eller en fast kombination af symboler, som primitiver . De fleste primitiver er enten funktioner eller operatorer. Kodning af APL er stort set en proces med at skrive ikke-primitive funktioner og (i nogle versioner af APL) operatører. Imidlertid anses nogle få primitiver hverken for at være funktioner eller operatører, mest bemærkelsesværdigt tildeling.
Nogle ord, der bruges i APL -litteratur, har betydninger, der adskiller sig fra dem i både matematik og computervidenskabens almindelighed.
| Semester | Beskrivelse |
|---|---|
| fungere | operation eller kortlægning, der tager nul, et (højre) eller to (venstre og højre) argumenter, som kan være skalarer, arrays eller mere komplicerede strukturer og kan returnere et lignende komplekst resultat. En funktion kan være:
|
| array | data værdsat objekt med nul eller flere ortogonale dimensioner i række- rækkefølge, hvor hvert element er et primitivt skalært datum eller et andet array. |
| niladisk | ikke tager eller kræver argumenter, nullary |
| monadisk | kræver kun ét argument; til højre for en funktion, til venstre for en operatør, unary |
| dyadisk | kræver både et venstre og et højre argument, binært |
| ambivalent eller monadisk | stand til brug i en monadisk eller dyadisk kontekst, hvilket gør det muligt at fjerne sit venstre argument |
| operatør | operation eller kortlægning, der tager en (venstre) eller to (venstre og højre) funktion eller arrayværdierede argumenter (operander) og udleder en funktion. En operatør kan være:
|
Syntaks
APL har eksplicitte repræsentationer af funktioner, operatører og syntaks, hvilket giver et grundlag for den klare og eksplicitte redegørelse for udvidede faciliteter på sproget og værktøjer til at eksperimentere med dem.
Eksempler
Hej Verden
Dette viser " Hej, verden ":
'Hello, world'
Et designtema i APL er at definere standardhandlinger i nogle tilfælde, der ville producere syntaksfejl i de fleste andre programmeringssprog.
'Hej, verden' -strengkonstanten ovenfor vises, fordi displayet er standardhandlingen på ethvert udtryk, for hvilken der ikke er angivet en handling eksplicit (f.eks. Tildeling, funktionsparameter).
Eksponentiering
Et andet eksempel på dette tema er, at eksponentiering i APL er skrevet som " 2*3", hvilket angiver at hæve 2 til magten 3 (dette ville blive skrevet som " 2^3" på nogle andre sprog og " 2**3" i FORTRAN og Python): mange sprog bruger * til betegne multiplikation som i 2*3, men APL bruger 2×3til det. Men hvis der ikke er angivet en base (som med sætningen " *3" i APL eller " ^3" på andre sprog), ville der i de fleste andre programmeringssprog have en syntaksfejl. APL antager imidlertid, at den manglende base er den naturlige logaritmekonstant e (2.71828 ....), og fortolker således " *3" som " 2.71828*3".
Enkel statistik
Antag, at det Xer en række tal. (+/X)÷⍴XGiver derefter sit gennemsnit. Læsning højre mod venstre , ⍴Xgiver antallet af elementer i X, og da ÷er en dyadic operatør er udtrykket til dens venstre kræves også. Det er i parentes, da X ellers ville blive taget (så summeringen ville være af X÷⍴Xhvert element af X divideret med antallet af elementer i X), og +/Xtilføjer alle elementerne i X. Bygger på dette, beregner standardafvigelsen . Da tildeling er en operator, kan den endvidere vises inden for et udtryk, så
((+/((X - (+/X)÷⍴X)*2))÷⍴X)*0.5
SD←((+/((X - AV←(T←+/X)÷⍴X)*2))÷⍴X)*0.5
ville placere passende værdier i T, AV og SD. Naturligvis ville man gøre dette udtryk til en funktion til gentagen brug frem for at skrive det igen hver gang.
Vælg 6 lotterinumre
Dette følgende udtryk i øjeblikkelig tilstand genererer et typisk sæt Pick 6 lotterital : seks pseudo-tilfældige heltal fra 1 til 40, garanteret ikke-gentagelse , og viser dem sorteret i stigende rækkefølge:
x[⍋x←6?40]
Ovenstående gør meget kortfattet, selvom det kan virke komplekst for en ny APLer . Det kombinerer følgende APL -funktioner (også kaldet primitiver og glyfer ):
- Den første, der skal eksekveres (APL udfører fra højre til venstre yderst) er dyadisk funktion
?(navngivetdealnår dyadisk), der returnerer en vektor, der består af et udvalgt antal (venstre argument: 6 i dette tilfælde) af tilfældige heltal fra 1 til et bestemt maksimum ( rigtigt argument: 40 i dette tilfælde), som, hvis den maksimale ≥ vektorlængde, garanteres at være ikke-gentagende; generer/opret således 6 tilfældige heltal fra 1-40. - Denne vektor tildeles derefter (
←) til variablenx, fordi den er nødvendig senere. - Denne vektor sorteres derefter i stigende rækkefølge efter en monadisk
⍋funktion, som som sit rigtige argument har alt til højre for den op til den næste ubalancerede tætte parentes eller tæt parentes. Resultatet af⍋er de indeks, der vil sætte sit argument i stigende rækkefølge. - Derefter
⍋bruges output fra til at indeksere variablenx, som vi tidligere gemte til dette formål, og derved vælge dens elementer i stigende rækkefølge.
Da der ikke er nogen funktion til venstre for x til venstre for at fortælle APL, hvad de skal gøre med resultatet, sender den simpelthen det til displayet (på en enkelt linje, adskilt af mellemrum) uden at skulle bruge nogen eksplicit instruktion til at gøre det.
?har også et monadisk ækvivalent kaldet roll, som ganske enkelt returnerer et tilfældigt heltal mellem 1 og dets eneste operand [til højre for det], inklusive. Således kan et rollespilsprogram bruge udtrykket ?20til at rulle en tyverisidet terning.
Primtal
Det følgende udtryk finder alle primtal fra 1 til R. I både tid og rum er beregningskompleksiteten (i Big O -notation ).
(~R∊R∘.×R)/R←1↓⍳R
Udført fra højre til venstre betyder dette:
-
Iota
⍳opretter en vektor, der indeholder heltal fra1tilR(hvisR= 6ved starten af programmet⍳Rer1 2 3 4 5 6) -
Drop første element i denne vektor (
↓funktion), det vil sige,1. Det1↓⍳Rer det også2 3 4 5 6 -
Indstil
Rtil den nye vektor (←, opgave primitiv), dvs.2 3 4 5 6 - Den
/replikat operatør er dyadic (binary) og tolken evaluerer først sin venstre argument (fuldt i parentes): - Generer ydre produkt af
Rganget medR, dvs. en matrix, der er multiplikationstabellen for R med R (°.×operator), dvs.
| 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 |
- Byg en vektor med samme længde som
Rmed1på hvert sted, hvor det tilsvarende tal iRer i den ydre produktmatrix (∈, sæt inkludering eller element af eller Epsilon -operator), dvs.0 0 1 0 1 - Negativt ( ikke ) værdier i vektoren logisk (skift nuller til dem og en til nuller) (
∼, logisk ikke eller Tilde -operator), dvs.1 1 0 1 0 - Vælg de elementer,
Rsom det tilsvarende element er for1(/replikatoperator ), dvs.2 3 5
(Bemærk, dette forudsætter APL oprindelse er 1, dvs. indekser starter med 1. APL kan indstilles til at bruge 0 som oprindelsen, således at ι6er 0 1 2 3 4 5, som er bekvem for nogle beregninger.)
Sortering
Følgende udtryk sorterer en ordliste, der er gemt i matrix X i henhold til ordlængde:
X[⍋X+.≠' ';]
Livets spil
Den følgende funktion "liv", skrevet i Dyalog APL, tager en boolsk matrix og beregner den nye generation i henhold til Conways Game of Life . Det demonstrerer APL's magt til at implementere en kompleks algoritme i meget lidt kode, men det er også meget svært at følge, medmindre man har avanceret viden om APL.
life←{↑1 ⍵∨.∧3 4=+/,¯1 0 1∘.⊖¯1 0 1∘.⌽⊂⍵}
Fjernelse af HTML -tags
I det følgende eksempel, også Dyalog, tildeler den første linje en HTML -kode til en variabel txtog bruger derefter et APL -udtryk til at fjerne alle HTML -tags ( forklaring ):
txt←'<html><body><p>This is <em>emphasized</em> text.</p></body></html>'
{⍵ /⍨ ~{⍵∨≠\⍵}⍵∊'<>'} txt
This is emphasized text.
Navngivning
APL stammer sit navn fra initialerne til Iversons bog A Programming Language , selvom bogen beskriver Iversons matematiske notation , frem for det implementerede programmeringssprog, der er beskrevet i denne artikel. Navnet bruges kun til faktiske implementeringer, der starter med APL \ 360 .
Adin Falkoff opfandt navnet i 1966 under implementeringen af APL \ 360 hos IBM :
Da jeg gik forbi kontoret, de tre studerende delte, kunne jeg høre lyde af et argument, der foregik. Jeg stak mit hoved ind ad døren, og Eric spurgte mig: "Er det ikke rigtigt, at alle ved, at den notation, vi bruger, hedder APL?" Jeg var ked af at skulle skuffe ham ved at tilstå, at jeg aldrig havde hørt det kaldes det. Hvor havde han den idé, at det var velkendt? Og hvem havde besluttet at kalde det det? Faktisk, hvorfor skulle det hedde noget ? Lidt tid senere hørte jeg, hvordan det blev navngivet. Da implementeringsindsatsen startede i juni 1966, startede dokumentationsindsatsen også. Jeg formoder, at da de skulle skrive om "det", indså Falkoff og Iverson, at de skulle give "det" et navn. Der var sandsynligvis mange forslag på det tidspunkt, men jeg har kun hørt om to. En gruppe i SRA i Chicago, der udviklede undervisningsmaterialer ved hjælp af notationen, var til fordel for navnet "Mathlab". Dette Et andet forslag var at kalde det "Iversons Better Math" og derefter lade folk mønte det passende akronym. Dette blev anset for at være facetteret.
Så en dag gik Adin Falkoff ind på Ken's kontor og skrev "Et programmeringssprog" på tavlen og under det forkortelsen "APL". Således blev den født. Det var bare en uge eller deromkring derefter, at Eric Iverson stillede mig sit spørgsmål, på et tidspunkt, hvor navnet endnu ikke havde fundet de tretten kilometer op ad Taconic Parkway fra IBM Research til IBM Mohansic.
- Eugene McDonnell ,
APL fortolkes lejlighedsvis som Array Programming Language eller Array Processing Language , og derved bliver APL til et backronym .
Logo
Der har altid været samarbejde mellem APL -leverandører, og der blev afholdt fælles konferencer regelmæssigt fra 1969 til 2010. På sådanne konferencer blev APL -varer ofte udleveret med APL -motiver eller samling af leverandørlogoer. Almindelige var æbler (som et ordspil på ligheden i udtalen af æble og APL ) og kodestykket, som er symbolerne produceret af det klassiske APL -tastaturlayout, når du holder APL -modifikatortasten og skriver "APL".
⍺*⎕
På trods af alle disse samfundsindsatser opstod der ikke noget universelt leverandør-agnostisk logo for programmeringssproget. Efterhånden som populære programmeringssprog i stigende grad har etableret genkendelige logoer, fik Fortran et i 2020, British APL Association lancerede en kampagne i andet halvår af 2021 for at etablere et sådant logo for APL.
Brug
APL bruges til mange formål, herunder finansielle og forsikringsmæssige applikationer, kunstig intelligens , neurale netværk og robotik . Det er blevet hævdet, at APL er et beregningsværktøj og ikke et programmeringssprog; dens symbolske karakter og array -kapacitet har gjort det populært blandt domæneksperter og datavidenskabsfolk, der ikke har eller kræver kompetencerne hos en computerprogrammerer .
APL er velegnet til billedmanipulation og computeranimation , hvor grafiske transformationer kan kodes som matrixmultiplikationer. Et af de første kommercielle computergrafikhuse, Digital Effects , producerede et APL -grafikprodukt ved navn Visions , som blev brugt til at lave tv -reklamer og animationer til filmen Tron fra 1982 . Den senere, den Stormwind sejlsport simulator til anvendelser APL gennemføre sin centrale logik, dens interface til rendering rørledning middleware og en stor del af sin fysikmotor .
I dag er APL fortsat i brug i en lang række kommercielle og videnskabelige applikationer, f.eks. Investeringsforvaltning , kapitalforvaltning , sundhedspleje og DNA -profilering og af hobbyfolk.
Bemærkelsesværdige implementeringer
APL \ 360
Den første implementering af APL ved hjælp af genkendelige APL -symboler var APL \ 360, der kørte på IBM System/360 , og blev afsluttet i november 1966, men på det tidspunkt var den kun i brug inden for IBM. I 1973 blev dets implementører, Larry Breed , Dick Lathwell og Roger Moore , tildelt Grace Murray Hopper Award fra Association for Computing Machinery (ACM). Det blev givet "for deres arbejde med design og implementering af APL \ 360, der satte nye standarder for enkelhed, effektivitet, pålidelighed og responstid for interaktive systemer."
I 1975 tilbød IBM 5100- mikrocomputeren APL \ 360 som et af to indbyggede ROM-baserede fortolkede sprog til computeren, komplet med et tastatur og en skærm, der understøttede alle de specielle symboler, der bruges på sproget.
Væsentlig udvikling for APL \ 360 omfattede CMS/APL, som gjorde brug af de virtuelle lagermuligheder i CMS og APLSV, som introducerede delte variabler , systemvariabler og systemfunktioner. Det blev efterfølgende portet til IBM System/370 og VSPC -platformene indtil den endelige udgivelse i 1983, hvorefter det blev erstattet af APL2.
APL \ 1130
I 1968 blev APL \ 1130 det første offentligt tilgængelige APL -system, skabt af IBM til IBM 1130 . Det blev den mest populære IBM Type-III Library- software, som IBM udgav.
APL*Plus og Sharp APL
APL*Plus og Sharp APL er versioner af APL \ 360 med tilføjede forretningsorienterede udvidelser såsom dataformatering og faciliteter til at gemme APL-arrays i eksterne filer. De blev udviklet i fællesskab af to virksomheder, der beskæftigede forskellige medlemmer af det originale IBM APL \ 360 -udviklingsteam.
De to virksomheder var IP Sharp Associates (IPSA), et APL \ 360 serviceselskab, der blev dannet i 1964 af Ian Sharp, Roger Moore og andre, og STSC , et tidsdelings- og konsulentfirma, der blev dannet i 1969 af Lawrence Breed m.fl. Sammen udviklede de to APL*Plus og fortsatte derefter med at arbejde sammen, men udviklede APL separat som APL*Plus og Sharp APL. STSC portede APL*Plus til mange platforme med versioner til VAX 11, PC og UNIX, mens IPSA tog en anden tilgang til ankomsten af den personlige computer og gjorde Sharp APL tilgængelig på denne platform ved hjælp af yderligere PC-XT/360 hardware . I 1993 blev Soliton Incorporated dannet for at understøtte Sharp APL, og det udviklede Sharp APL til SAX (Sharp APL for Unix). Fra 2018 fortsætter APL*Plus som APL2000 APL+Win.
I 1985 modtog Ian Sharp og Dan Dyer fra STSC i fællesskab Kenneth E. Iverson -prisen for fremragende bidrag til APL .
APL2
APL2 var en betydelig genimplementering af APL af IBM, som blev udviklet fra 1971 og først blev udgivet i 1984. Det giver mange tilføjelser til sproget, hvoraf det mest bemærkelsesværdige er nestet (ikke-rektangulær) array-understøttelse. Fra 2018 er den tilgængelig for mainframe -computere, der kører z/OS eller z/VM og arbejdsstationer, der kører AIX , Linux , Sun Solaris og Microsoft Windows .
Hele APL2 Products and Services Team blev tildelt Iverson Award i 2007.
APLGOL
I 1972 blev APLGOL udgivet som en eksperimentel version af APL, der tilføjede strukturerede programmeringssprogskonstruktioner til sprogrammen. Nye udsagn blev tilføjet til interstatement -kontrol, betinget udsagnsudførelse og udsagnsstrukturering samt udsagn for at tydeliggøre algoritmens hensigt. Det blev implementeret for Hewlett-Packard i 1977.
Dyalog APL
Dyalog APL blev først udgivet af det britiske firma Dyalog Ltd. i 1983 og er fra 2018 tilgængelig til AIX , Linux (herunder på Raspberry Pi ), macOS og Microsoft Windows -platforme. Det er baseret på APL2, med udvidelser til understøttelse af objektorienteret programmering og funktionel programmering . Licenser er gratis til personlig/ikke-kommerciel brug.
I 1995 blev to af udviklingsholdet - John Scholes og Peter Donnelly - tildelt Iverson -prisen for deres arbejde med tolken. Gitte Christensen og Morten Kromberg var fælles modtagere af Iverson Award i 2016.
NARS2000
NARS2000 er en open-source APL-tolk skrevet af Bob Smith, en fremtrædende APL-udvikler og implementer fra STSC i 1970'erne og 1980'erne. NARS2000 indeholder avancerede funktioner og nye datatyper og kører indbygget på Microsoft Windows og andre platforme under Wine .
APLX
APLX er en cross-platform dialekt af APL, baseret på APL2 og med flere udvidelser, som først blev udgivet af det britiske firma MicroAPL i 2002. Selvom den ikke længere er under udvikling eller kommercielt salg, kan den nu fås gratis fra Dyalog.
GNU APL
GNU APL er en gratis implementering af Extended APL som specificeret i ISO/IEC 13751: 2001 og er således en implementering af APL2. Det kører på Linux (herunder på Raspberry Pi), macOS, flere BSD-dialekter og på Windows (enten ved hjælp af Cygwin til fuld understøttelse af alle dets systemfunktioner eller som en indbygget 64-bit Windows-binær med nogle af dets systemfunktioner mangler) . GNU APL bruger Unicode internt og kan scriptes. Den er skrevet af Jürgen Sauermann.
Richard Stallman , grundlægger af GNU -projektet , var en tidlig bruger af APL og brugte det til at skrive en tekstredaktør som gymnasieelev i sommeren 1969.
Fortolkning og kompilering af APL
APL er traditionelt et fortolket sprog , der har sprogkarakteristika som svag variabelskrivning, der ikke er velegnet til kompilering . Med arrays som kernedatastruktur giver det imidlertid muligheder for præstationsgevinster gennem parallelisme , parallel computing , massivt parallelle applikationer og meget storstilet integration (VLSI), og fra begyndelsen er APL blevet betragtet som et højtydende sprog - for eksempel blev det noteret for den hastighed, hvormed det kunne udføre komplicerede matrixoperationer "fordi det opererer på arrays og udfører operationer som matrixinversion internt".
Ikke desto mindre er APL sjældent rent fortolket, og kompilering eller delvis kompileringsteknik, der er eller er blevet brugt, omfatter følgende:
Idiomgenkendelse
De fleste APL -tolke understøtter genkendelse af formsprog og evaluerer almindelige formsprog som enkeltoperationer. For eksempel ved at evaluere formsproget BV/⍳⍴Asom en enkelt operation (hvor BVer en boolsk vektor og Aer en matrix), undgås oprettelsen af to mellemliggende arrays.
Optimeret bytecode
Svag indtastning i APL betyder, at et navn kan referere til en matrix (af enhver datatype), en funktion eller en operator. Generelt kan tolken ikke på forhånd vide, hvilken form det vil være og skal derfor udføre analyse, syntakskontrol osv. I løbetid. Under visse omstændigheder er det imidlertid muligt på forhånd at udlede, hvilken type et navn der forventes at referere til, og derefter generere bytecode, som kan udføres med reduceret overhead i driftstid. Denne bytecode kan også optimeres ved hjælp af kompileringsteknikker såsom konstant foldning eller almindelig eliminering af subexpression . Tolken vil udføre bytecoden, når den er til stede, og når alle antagelser, der er gjort, er opfyldt. Dyalog APL inkluderer understøttelse af optimeret bytecode.
Samling
Kompilering af APL har været genstand for forskning og eksperimenter, siden sproget først blev tilgængeligt; den første kompilator anses for at være Burroughs APL-700, der blev udgivet omkring 1971. For at kunne kompilere APL skal der pålægges sprogbegrænsninger. APEX er en forsknings -APL -kompilator, der er skrevet af Robert Bernecky og er tilgængelig under GNU Public License .
Den STSC APL Compiler er en hybrid af en bytecode optimering og en compiler - det giver samling af funktioner til maskinkode , forudsat at dens sub-funktioner og globals er erklæret , men tolken bruges stadig som en runtime bibliotek og til at udføre funktioner, der gør ikke opfylder kompileringskravene.
Standarder
APL er blevet standardiseret af American National Standards Institute (ANSI) arbejdsgruppe X3J10 og International Organization for Standardization (ISO) og International Electrotechnical Commission (IEC), ISO/IEC Joint Technical Committee 1 Underudvalg 22 Arbejdsgruppe 3. APL -kernen er specificeret i ISO 8485: 1989, og det udvidede APL -sprog er angivet i ISO/IEC 13751: 2001.
Referencer
Yderligere læsning
- An APL Machine (1970 Stanford doktorafhandling af Philip Abrams)
- A Personal History Of APL (1982 artikel af Michael S. Montalbano )
- McIntyre, Donald B. (1991). "Sprog som et intellektuelt værktøj: Fra hieroglyffer til APL" (PDF) . IBM Systems Journal . 30 (4): 554–581. doi : 10.1147/sj.304.0554 . Arkiveret fra originalen (PDF) den 4. maj 2006.
- Iverson, Kenneth E. (1991). "En personlig visning af APL" (PDF) . IBM Systems Journal . 30 (4): 582–593. doi : 10.1147/sj.304.0582 . Arkiveret fra originalen (PDF) den 27. februar 2008.
- Et programmeringssprog af Kenneth E. Iverson
- APL in Exposition af Kenneth E. Iverson
- Brooks, Frederick P .; Kenneth Iverson (1965). Automatisk databehandling, System/360 Edition . ISBN 0-471-10605-4 .
- Askoolum, Ajay (august 2006). Systembygning med APL + Win . Wiley. ISBN 978-0-470-03020-2.
- Falkoff, Adin D .; Iverson, Kenneth E .; Sussenguth, Edward H. (1964). "En formel beskrivelse af System/360" (PDF) . IBM Systems Journal . 3 (2): 198–261. doi : 10.1147/sj.32.0198 . Arkiveret fra originalen (PDF) den 27. februar 2008.
- Historien om programmeringssprog , kapitel 14
- Banon, Gerald Jean Francis (1989). Bases da Computacao Grafica . Rio de Janeiro: Campus. s. 141.
- LePage, Wilbur R. (1978). Anvendt APL -programmering . Prentice Hall.
- Mougin, Philippe; Ducasse, Stephane (november 2003). "OOPAL: Integrering af matrixprogrammering i objektorienteret programmering" (PDF) . Fortsætter OOPSLA '03 Procedurer fra den 18. årlige ACM SIGPLAN-konference om objektorienteret programmering, systemer, sprog og applikationer . 38 (11): 65–77. doi : 10.1145/949343.949312 . Arkiveret fra originalen (PDF) den 14. november 2006.
- Dyalog Limited (september 2006). En introduktion til objektorienteret programmering til APL -programmører (PDF) . Dyalog Limited. Arkiveret fra originalen (PDF) den 4. oktober 2007.
- Shustek, Len (10. oktober 2012). "APL Programmering Language Source Code" . Computer History Museum (CHM). Arkiveret fra originalen den 6. september 2017 . Hentet 6. september 2017 .
- Svoboda, Antonín ; White, Donnamaie E. (2016) [2012, 1985, 1979-08-01]. Avancerede logiske kredsløbdesignteknikker (PDF) (omskrevet elektronisk genudgave.). Garland STPM Press (originalnummer) / WhitePubs Enterprises, Inc. (genudgivelse). ISBN 978-0-8240-7014-4. LCCN 78-31384 . Arkiveret (PDF) fra originalen 2017-04-14 . Hentet 2017-04-15 . [1] [2]
Video
- The Origins of APL - et interview i 1974 med talkshow -stil med de originale udviklere af APL.
- APL -demonstration - en live demonstration af APL fra 1975 af professor Bob Spence , Imperial College London .
- Conways Game Of Life i APL - en tutorial fra 2009 af John Scholes fra Dyalog Ltd., der implementerer Conways Game of Life i en enkelt APL -linje.
- 50 Years of APL - en introduktion fra 2009 til APL af Graeme Robertson.
eksterne links
Online ressourcer
- TryAPL.org , en online APL -primer
- APL Wiki
- APL hos Curlie
- APL2C , en kilde til links til APL -kompilatorer
Udbydere
Brugergrupper og samfund
- Finland : Finsk APL Association (FinnAPL)
- Frankrig : APL et J
- Tyskland : APL-Tyskland eV
- Japan : Japan APL Association (JAPLA)
- Sverige : Svensk APL-brugergruppe (SwedAPL) Arkiveret 2018-04-02 på Wayback Machine
- Schweiz : Swiss APL User Group (SAUG)
- Storbritannien : The British APL Association
- USA : ACM SIGPLAN -kapitel om matrixprogrammeringssprog (SIGAPL)