APL (ohjelmointikieli)

Lyhyt historia

Alun alkaen Iversonin tarkoituksena oli kehittää tietojenkäsittelyn opetus- ja tutkimuskäyttöön yleinen matemaattispohjainen merkintätapa (Iversonin notaatio).
Iversonin notaatiota käytettiin menestyksekkäästi IBM:n tuolloisen lippulaivan, System/360:n arkkitehtuurin kuvaukseen. Tiivis notaatio osoittautui muita käytettyjä tapoja selkeämmäksi, ja samalla se toi esiin aiemmin havaitsemattomia vikoja. Notaation esitystapa hioutui samalla yksinkertaisemmaksi. Vuonna 1962 Iverson julkaisi teoksen A Programming Language (mistä kielen lyhenne 'keksittiin' myöhemmin) ja vuonna 1964 tehtiin ensimmäinen APL-ohjelmointikieliympäristö. Iversonille myönnettiin Turingin palkinto vuonna 1979.
APL-kieltä kehitettiin IBM:ssä 1960-luvulla, Iversonin lisäksi mukana olivat Adin Falkoff ja Donald Sussenguth. APL julkistettiin 1970-luvulla, ja sen käyttö levisi IBM:n keskustietokoneissa laajalle. IBM:n lisäksi muut keskeiset tietokonevalmistajat tarjosivat APL:n omiin tuotteisiinsa, ja APL-käyttäjät alkoivat järjestää käyttäjätapaamisia (vuonna 1984 pidettiin APL-konferenssi Helsingissä). Muutamat tehokkaat APL-tuotteet edesauttoivat tuotteen leviämistä: mm. kuvien ja kaavioiden tekoon tarkoitettu Graphpak, tehokas tietokantajärjestelmä ADI ja APE-sovelluskehitin.
Alkuperäinen APL oli ISO-standardoitu ja eri valmistajien tuotteet hyvin yhteensopivia, mutta toisen sukupolven APL:t alkoivat eriytyä toisistaan. Iverson siirtyi IBM:stä I.P. Sharpin palvelukseen (Sharpilla oli tuolloin ainutlaatuinen ajantasainen suhdannepalvelu, jonka käyttö perustui maailmanlaajuiseen tiedonsiirtoverkkoon - myöhemmin Reuters osti I.P. Sharpin). James A. Brownin johdolla IBM:n kehittämä APL2, joka julkistettiin 1983, erosi muutamassa keskeisessä ominaisuudessa Iversonin johdolla kehitetystä SharpAPL:stä.
APL:n keskuskonekäytössä tarvittiin erillinen APL-näppäimistö, ohessa muistinvarainen kaavio IBM:n suomalaisesta APL2-näppäimistöstä.
Nykyään (2010 lopulla) on valmistaja- ja tuotejakauma suunnilleen seuraavanlainen:  IBM:n APL2 on saatavissa laajalti (VM/CMS, MVS/TSO, Windows, Unix), brittiläis-tanskalainen Dyalog (Windows, Unix, PDA-laitteet) on noussut kielen tärkeimmäksi kehittäjäksi, yhdysvaltalainen APLNow (entinen APL2000 entinen Manugistics entinen STSC) nousi PC:iden myötä kehityksen kärkeen (Windows, Unix), brittiläisen 'MicroAPL:n tulkki on saatavissa eri ympäristöihin ja siis myös Mac-koneisiin, Soliton jatkaa Sharp-APL:n perinteitä (VM/CMS, MVS/TSO, Unix).
Iverson kehitti yhdessä Roger Huin kanssa uuden sääntiöajatteluun perustuvan ohjelmointikielen, J:n, jossa käytetään vain Ascii-merkkejä. Athur Whitney kehitti Morgan-Stanleylle APL-pohjaisen tehokkaan erikoiskielen A+ (joka on nykyään saatavilla vapaasti mm. Linuxille). Hänen 1990-luvulta kehittämäänsä K-sääntiökieltä voi luonnehtia erikoistuneeksi ja erittäin tehokkaaksi, erityisesti suurille datamassoille ja transaktioille hiotun tietokantaratkaisunsa ansiosta.
APL on modernisoitunut ajan myötä. Esimerkiksi DyalogAPL sisältää seuraavia kielen ja ympäristön laajennuksia: nimitilat (rakenteiset työtilat), oliolaajennukset (mm. GUI-, OLE- ja TCP-liittymät on toteutettu oliosyntaksilla), .NET-yhteensopivuus, kontrollirakenteet, dynaamiset funktiot (D-kieli, funktionaalinen APL:n alikieli), säie- ja olio-ohjelmointi. APLNow Inc:n APL+Win on kehittänyt Internet-ominaisuuksiaan.

APL:n nykyinen käyttö

APL:ää käytetään edelleenkin mitä erilaisimmissa tehtävissä muun muassa finanssipalveluissa sekä matemaattis-tilastollisissa tietojenkäsittelytehtävissä. Merkittävän käyttäjäryhmän muodostavat vakuutusmatemaatikot.

APL:n käytön historiaa

APL:ää on historiansa aikana käytetty hyvin erityyppisten ongelmien ratkaisuun. Sitä on hyödynnetty taloudellis-hallinnollisilla aloilla, matematiikassa, robotiikassa, insinöörialoilla, erilaisissa erikoistehtävissä ja nopeana prototyyppikehittimenä erityyppisten ad hoc -ongelmien ratkaisuissa. Muiden muassa seuraavilla aloilla on käytetty/käytössä APL-pohjaisia ratkaisuja (lista ei ole kattava): valtion budjetti, pankkien ja vakuutusyhtiöiden erikoisohjelmistot, öljynjalostuksen tuotannonohjaus, ydinvoimalaitosten riskianalyysit ja erilaiset moniulotteiset taloussimulaatiomallit.
Erikoisuutena mainittakoon vuoden 1991 Persianlahden sodassa suoritettu Patriot-ohjusten kauko-ohjelmointi: irakilaisten Scud-iskujen eliminoimiseksi asennettujen Patriot-ohjusten ohjaussäädöt tarkistettiin taistelutoiminnan jälkeen (tiedot siirrettiin satelliititse Coloradoon) ja säädettiin ajan voittamiseksi ensin APL:llä, valmis koodi muunnettiin Adaksi (koska vain Ada-koodia sai asentaa Yhdysvaltain armeijan laitteisiin), joka sitten siirrettiin satelliitilla takaisin ohjuksiin.

APL:n perusteet

APL on perusteiltaan yksinkertainen.
Käytössä on kolmentyyppisiä objekteja: operaattoreita, funktioita ja muuttujia (dataa). Funktiot käsittelevät argumentteinaan saamaansa dataa ja palauttavat muokattua tulosdataa. Operaattorit saavat operandeikseen funktioita tai muuttujia ja luovat uuden (johdetun) funktion.
Muuttujien datatyyppejä on kolme: numeerinen, looginen ja merkkityyppi. Looginen tyyppi käsittää totuusarvot tosi ja epätosi, joiden esityksessä käytetään kokonaislukuja 1 ja 0. Koska näitä voi käyttää suoraan laskennassa, on looginen tyyppi vain numeerisen tyypin alijoukko. Numeerinen tyyppi sisältää sekä kokonais- että reaaliluvut, APL2:ssa voidaan lisäksi käyttää kompleksilukuja. Tulkki pitää huolen eri numeeristen tyyppien keskinäisistä muunnoksista, joten ohjelmoijan huolena on yleensä vain itse ongelmaan keskittyminen. Nollaa pienempien lukujen etumerkkinä käytetään ylämiinusta, koska miinusmerkki on vähennyslaskussa käytettävä funktio. Desimaalierotin on piste, ja tuhaterottimia ei käytetä. Merkkityyppi erotetaan syötettäessä lainausmerkein, tekstin sisäinen lainausmerkki kahdennetaan.
Muuttuja voi rakenteeltaan olla joko skalaari (yksittäinen merkki tai luku) tai sääntiö, moniulotteinen taulukko. 
Yksiulotteinen muuttuja on vektori, jonka alkiot ovat jonossa (alkioita voi olla myös 0 kappaletta). Kaksiulotteinen muuttuja, matriisi, koostuu riveistä ja sarakkeista, jokaisella rivillä on yhtä monta alkiota. Kolmiulotteisessa muuttujassa, kuutiossa, on tasoja, jotka kaikki koostuvat samanmuotoisista matriiseista.
Yleisesti rakenteinen APL-muuttuja voi olla suorakulmainen n-ulotteinen sääntiö (n:n enimmäisarvo riippuu tulkin implementaatiosta, esimerkiksi APL2 sallii 256-ulotteiset sääntiöt). Suorakulmaisuus tarkoittaa sitä, että moniulotteisen taulukon jokaisessa suunnassa on yhtä monta alkiota (esimerkiksi matriisin jokainen rivi on yhtä pitkä) eikä yhden suunnan pituus riipu muiden suuntien pituuksista.
Muuttujan, itse luodun funktion tai operaattorin nimi ei voi sisältää APL-erikoismerkkejä eikä välilyöntejä. Muuttujalle annetaan arvo sijoitusnuolella, joka voidaan tässä yhteydessä mieltää kaksiargumenttiseksi funktioksi. Muuttujia ei tarvitse alustaa etukäteen, tulkki huolehtii sekä tyypityksestä että tilanvarauksesta suorituksen aikana. Toisen sukupolven APL:t sallivat lisäksi sisäkkäiset tietorakenteet.
Funktioilla voi olla joko yksi (monadinen), kaksi (dyadinen) tai ei yhtään (niladinen) argumenttia. Kaksiargumenttinen funktio on aina argumenttiensa välissä, yksiargumenttinen on argumenttinsa vasemmalla puolella (ns. infix-notaatio). Lisäksi funktio voi joko palauttaa arvon tai ei. APL:n perusfunktiot (primitiivifunktiot) ovat aina argumentillisia ja ne palauttavat arvon. Sama symboli voi kuvata sekä yksi- että kaksiargumenttista funktiota, esimerkiksi miinusmerkki on sekä vähennyslasku- (kaksiargumenttinen) että vastalukufunktion symboli. Funktiot luodaan yleensä erillisen funktioeditorin avulla.
Operaattori voi olla joko yksi- tai kaksioperandinen, ja operaattorin tulosfunktio voi olla lisäksi joko yksi- tai kaksiargumenttinen. Yksioperandinen operaattori on operandifunktionsa oikealla puolella ja kaksioperandinen operandiensa välissä. Joissain APL-tulkeissa voidaan luoda omia operaattoreita (mm. APL2 ja DyalogAPL).
APL-lausekkeen suoritusjärjestys on oikealta vasempaan, ellei sulkein toisin ohjata. Toisin sanoen funktion oikeana argumenttina on sen oikealla puolella olevan lausekkeen arvo.
APL-sovellukset tallennetaan yleensä työtiloihin, joita käsitellään APL-istunnossa. Työtilassa ovat käytettävissä kaikki APL:n perusfunktiot sekä ne APL-objektit jotka sinne on luotu tai kopioitu. Työtila sisältää siten koko työskentely-ympäristön.