Ohjelmointi

Toiminnalliset kielet: Mitä he ovat, minne he ovat menossa

Vaikka jotkut väittävät tarkalleen mitä se on, toiminnallinen ohjelmointi houkuttelee kehittäjiä. Ja kolme suosituinta toiminnallista kieltä - Clojure, F # ja Scala - ovat napauttamalla parannuksia.

Toiminnallisella ohjelmoinnilla on keskeinen vetovoima joillekin kehittäjille, sanoo Scalan perustaja Martin Odersky: "Kyseisen segmentin ohjelmoijat pitävät toiminnallisesta ohjelmoinnista, koska se tekee koodista selkeämmän, paremmin jäsennellyn ja estää monia luokkavirheitä." Mutta jotkut väittävät, että toiminnallinen ohjelmointi johtaa vähemmän tehokkaisiin ohjelmistoihin.

Toiminnallinen ohjelmointi vaatii myös ajattelua ohjelmoinnista uudella tavalla, sanoo Microsoftin .Net-ohjelman johtaja ja F #: n edustaja David Stephens. Abstraktiot voivat olla ongelma: "Kun teet koodista abstraktimman, kun siirryt kauemmas bittien manipuloinnista ja käydään nimenomaisesti silmukoiden läpi, näiden abstraktioiden ymmärtäminen voi viedä enemmän aikaa."

Mikä on toiminnallinen kieli tarkalleen?

Perusarvoltaan toiminnallinen ohjelmointi on laskennan käsittelemistä matemaattisina funktioina. Alusta alkaen toiminnallisiksi laskutettujen kielten lisäksi Java- ja C # -tyypit ovat muuttuneet toimivammiksi lisäämällä tukea lambda-lausekkeisiin.

Toimivan ohjelmoinnin tarkkaa määritelmää voi kuitenkin olla vaikea selvittää. Clojurefun-blogi mainitsee useita määritelmiä, joiden se katsoo olevan virheellisiä, mukaan lukien toiminnallisen ohjelmoinnin määritteleminen toiminnallisen tyylin mahdollistamiseksi korkeamman asteen funktioilla tai lambdoja tukevalla kielellä. Se sanoo, että oikea määritelmä on kieli, joka korostaa toimintoja ja muuttumattomia tietoja.

Mutta Clojure-blogin suosima määritelmä ei välttämättä ole oikea, toiset sanovat. "Kirjoittaja valitsee yhden, joka satunnaisesti sopii Clojureen - ei ihme, tämä on Clojure-blogi", Scalan Odersky sanoo. "Minulla on tulkinta, joka on lähellä häntä, mutta ei sama."

Funktio, Odersky sanoo, on koodinpätkä, joka kartoittaa tulot lähtöihin eikä sillä ole muita vaikutuksia. "Se on toiminnon matemaattinen määritelmä, jota käytämme täällä. Joskus näitä toimintoja kutsutaan" puhtaiksi ", jotta ne erotettaisiin esimerkiksi C: n funktioista." Toiminnallinen kieli keskittyy puhtaiden toimintojen ohjelmointiin, mikä tekee siitä helppoa ja tehokasta, kertoo Odersky, joka perusti Typesafen, JVM-sovelluskehitysalustan toimittajan.

Toiminnallinen ohjelmointi voidaan yhdistää muihin paradigmoihin, hän toteaa. "Esimerkiksi toiminnallinen menee todella hyvin objektorientoituneen kanssa. Scala on siinä mielessä toiminnallinen kieli. Olen samaa mieltä siitä, että pelkkä lambdojen pitäminen ei tee kieltä toimivaksi; se on välttämätöntä, mutta ei riittävää."

Clojure-kehittäjä Rich Hickey, joka on myös järjestelmäkehittäjä Cognitectin teknologiajohtaja, yhtyy Clojure-blogin pääväitteeseen. "Artikkeli huomauttaa oikein, että ensiluokkaiset tai korkeamman asteen toiminnot eivät ole mitä toiminnallinen ohjelmointi on. Toiminnallisella ohjelmoinnilla pyritään tekemään ohjelmoinnista enemmän matematiikkaa", hän sanoo. Toisin sanoen toiminnalliselle ohjelmoinnille on edelleen joukko määritelmiä, Hickey sanoo.

Microsoftin Stephens näkee toiminnallisten ominaisuuksien ulottuvan pelkkien kielten ulkopuolelle. "Suosituin toiminnallinen ohjelmointikieli maailmassa on Excel", hän sanoo. Yksinkertaisessa Excel-laskentataulukossa voi olla sarake, jossa on joukko arvoja, kuten A1 X 2. "Se on puhdas funktio A1: ssä, ja A1 ei muutu, joten lasket arvoja olemassa olevista tiedoista."

Microsoftin kieli-integroitu kysely (Linq) -tekniikka tarjoaa myös toiminnallisen ohjelmoinnin, hän sanoo. "Lähes jokainen ohjelmointikieli ottaa nyt käyttöön toimintakielien ominaisuuksia."

Stephens mainitsee muuttumattomien tietojen olevan kriittisiä toiminnalliselle ohjelmoinnille. Samanaikaisuus - ohjelmat, joissa on useita ketjuja, jotka toimivat samanaikaisesti datalla - hyötyvät myös muuttumattomista tiedoista, hän toteaa. "Kutsumme [F #] funktionaaliseksi kieleksi, koska se tulee muiden kielten perinnöstä." Se tukee myös olio-ohjelmointia ja toimii C #: n ja Visual Basicin kanssa, hän sanoo.

Clojuren Hickey näkee toiminnallisten kielten käyttöönoton vastauksena kehittäjien kasvavaan paineeseen, jonka on vastattava nykyään suuremmista ongelmista. "Tätä varten heidän on vähennettävä ohjelmiensa satunnaista monimutkaisuutta. Nykyään on yleisesti tunnustettua, että yleiset tilat ja sivuvaikutukset ovat ensisijainen monimutkaisuuden ja virheiden lähde ohjelmissa", Hickey sanoo. "Vaikka tilan määrää on mahdollista vähentää toimimattomilla kielillä kirjoitetuissa ohjelmissa, se on dramaattisesti helpompaa ja nopeampaa tehdä kielellä, joka tekee toiminnallisesta ohjelmoinnista idiomaattisen ja oletusarvon."

Mitä seuraavaksi kolmelle parhaimmalle toiminnalliselle kielelle

13-vuotias Scala on ensisijainen kieli datatieteessä, kertoo Scalan perustaja Odersky. JVM: llä tuettuna sillä on arviolta 400 000 - 500 000 käyttäjää. Lyhyellä aikavälillä suunnitelmat vaativat sen optimointia Java 8: lle, jossa viimeisimmän tavallisen Java-päivityksen tavukoodin ohjeet antaisivat Scalalle mahdollisuuden tuottaa tehokkaampaa koodia.

Pidemmällä aikavälillä Scala saa puhdistetun tyyppisen järjestelmän, turvallisemmat makrot ja enemmän alustatukea harkittaessa LLVM-kääntäjän takapäätä. Lisäparannuksia on suunniteltu parantamaan Scala.js: n käytettävyyttä Scalan kääntämiseksi JavaScriptiin.

Yhdeksänvuotista Clojurea, joka perustuu myös JVM: ään, on käytetty rahoituksessa, vähittäiskaupassa, ohjelmistoissa ja viihteessä, Hickey sanoo. "Sitä on käytetty monilla sovellusalueilla, kuten tapahtumien käsittely ja analysointi, big data, verkkotoiminnot, ennakoiva analytiikka, haku, tietoturva ja kuluttajatarjonta."

11-vuotiaan F #: n perusti Microsoft Research Don Syme, ja sitä valvoo F # -säätiö. Sitä käytetään monissa sovelluksissa ja se toimii Linuxilla, OS X: llä, Androidilla, iOS: llä, Windowsilla ja selaimilla. "Työskentelemme nyt sen saamiseksi toimimaan .Net Core -sovelluksen kanssa." .Net Frameworkin avoimen lähdekoodin, monitasoinen modulaarinen versio, Stephens sanoo. Merkkijonojen interpolointi, joka helpottaa merkkijonojen kirjoittamista, on piirustustaululla.

$config[zx-auto] not found$config[zx-overlay] not found