Funktionella programmeringsspråk: förflutna, nutid och framtid

Författare: Laura McKinney
Skapelsedatum: 4 April 2021
Uppdatera Datum: 14 Maj 2024
Anonim
Funktionella programmeringsspråk: förflutna, nutid och framtid - Teknologi
Funktionella programmeringsspråk: förflutna, nutid och framtid - Teknologi

Innehåll


Hämtmat:

För att bättre förstå denna distinkta klass av programmeringsspråk tittar vi på definitionen, egenskaperna och historiken som är associerad med den.

Clojure, Elixir, Elm, F #, Haskell, Idris och Scala är alla namn du sannolikt kommer att se bland rekommendationer för funktionella programmeringsspråk som är värda att lära sig. Det här är de språk som används idag och som mycket väl kan användas under kommande år.

Ett språk som haskell har mest livslängd, men ännu nyare som Clojure är faktiskt förankrade i tidigare språk som fortsätter att forma utvecklingen av funktionell programmering (FP). (Läs direkt från programmeringsexperter: Vilket funktionellt programmeringsspråk är bäst att lära sig nu?)

För att bättre förstå denna distinkta klass av programmeringsspråk tittar vi på definitionen, egenskaperna och historiken som är associerad med den. (Kolla in INFOGRAFISK: Historik för programmeringsspråk.)


Varför kallas det funktionell programmering?

FP får sitt namn från en strategi för mjukvarukonstruktion som bygger på skapandet av rena funktioner. Grunden för alla funktionella programmeringsspråk är Lambda Calculus (även skriven som λ-calculus). Det beskrivs som "världens minsta universella programmeringsspråk."

FP är följaktligen baserade matematiska funktioner som använder villkorade uttryck och rekursion för att utföra beräkningen. Det innehåller följande egenskaper:

  • Uppgifterna i den är oföränderliga.
  • Det undviker biverkningar, som är alla tillståndsförändringar som inträffar utanför en kallad funktion, och delade tillstånd.
  • FP-programmering är lättare att underhålla eftersom du inte behöver oroa dig för att av misstag ändra något utanför den givna funktionen.
  • Det har referensöppenhet.
  • Modulär design möjliggör små moduler som kan kodas snabbt och som sannolikt kan återanvändas, vilket bidrar till snabbare programutveckling. Även modulerna kan testas individuellt separat vilket kan minska tiden för testning och felsökning.

Rotad i matematiska funktioner

Eftersom funktionell programmering är förankrad i Lambda Calculus, skulle dess historia gå tillbaka till 1930-talet när Alonzo-kyrkan introducerade den. Naturligtvis användes den inte för datorer då.


1960

Jag var inte förrän 1960 när en amerikansk dator och kognitiv forskare vid namn John McCarthy publicerade rekursiva funktioner för symboliska uttryck och deras beräkning av maskin. Som ett resultat av hans forskning på sådan funktion skapade McCarthy det som erkänns som det första funktionella programmeringsspråket: LISP.

En bra sammanfattning av den finns i LISP's födelse - en sammanfattning av John McCarthys originalpapper. Språket hade avläggare, inklusive Common Lisp, Scheme och elisp, för att inte tala om Clojure, som för närvarande är mycket i bruk.

Nästan två decennier senare skedde nästa stora framsteg vid University of Edinburgh där forskare definierade ML (Metalanguage). Forskarna krävde ett språk som skulle fungera för deras automatiska teorembevisningssystem (LCF). ”

ML passade räkningen för det, och de fann också 1978 att det kan vara användbart som ett generellt programmeringsspråk. Versionerna inkluderar Standard ML i New Jersey och CAML.

Ett annat namn associerat med 1978 och Edinburgh är Hope. Källan till namnet är Hope Park Square, där Edinburghs datavetenskapliga avdelning var (men också för högre ordningsparametrar och "fjädrar evigt" och så vidare.) ”Hopp utmärks som det första språket som använder call-by-mönster.

1990 fram till och med: Haskell

Haskell, uppkallad efter logikern Haskell B. Curry, var produkten från en kommitté som avsåg att arbeta med att formulera språket 1987 och släppte den första versionen 1990. Den senaste standarden är Haskell 2010 och en annan version är planerad för 2020 .

Haskell har blivit paradigmet för moderna funktionella språk, kännetecknas av "funktioner som högre ordningsfunktioner, typinferens, lat utvärdering och användardefinierade datatyper."

Högre ordningsfunktioner tar andra funktioner som argument eller returnerar dem som resultat. De tillåter applikationer som också kan kallas currying. Att göra det kommer att tillämpa en funktion individuellt på sina argument, och när varje applikation returnerar en ny funktion accepterar den sedan nästa argument.

Medan latitet i allmänhet betraktas som en dålig sak, tjänar det ett syfte i programmeringen. Som förklaras i Vad är Lazy Evaluation? I motsats till "strikt utvärdering" är metoden för lat utvärdering att bara utvärdera vad som krävs.

Aktuella toppfunktionella programmeringsspråk

Haskell är det mest dominerande namnet för denna kategori, troligtvis på grund av dess utökade historia relativt andra FP. Det var också ett stort inflytande på deras utveckling. Simon Peyton Jones, huvudforskare på Microsoft och nyckeltillskottet till Haskell, berättade om Haskells bestående inflytande både i sig själv och på det sätt som det formade andra språk.

"Saker som Linq, de språkintegrerade frågeställningarna i C #, det är direkt från Haskell. F # arbetsflöden dras direkt från denna monadiska I / O-berättelse."

Clojure

Clojure är en ny dialekt av Lisp skapad av Rich Hickey. Ihat skiljer Clojure från andra LISP-dialekter är att den körs på Java-plattformen och är kompilerad till JVM-bytekod. Fördelen som erbjuder är dess integration med Java även de som inte är skrivna i Clojure.

Som Hickey förklarar i Clojure.org säger, "Clojure ger enkel åtkomst till Java-ramverk, med valfria typer av tips och typinferens, för att säkerställa att samtal till Java kan undvika reflektion."

Det säger också att "Lisps strategi för kod-som-data och dess makrosystem skiljer det fortfarande" från andra Lisp-dialekter, och tillägger att dess "kartor, uppsättningar och vektorer är lika förstklassiga i Clojure som listor är i Lisp ”.

Hickey delade också sin grund för att skapa Clojure som att skörda alla fördelarna med Lisp utan några nackdelar. Efter att ha lagt upp flera bulletpunkter under olika rubriker sammanfattar Hickey det enligt följande: ”Kort sagt, jag tror att Clojure upptar en unik nisch som en funktionell Lisp för JVM med starkt samtidighetsstöd. ”

Alm

Elm är namnet på ett rent funktionellt språk som först designades av Evan Czaplicki 2012. Det är populärt bland webbutvecklare som gillar det för att bygga användargränssnitt. Elm-kompilatorn riktar sig mot HTML, CSS och JavaScript. Det fungerar med JavaScript-bibliotek på ungefär samma sätt som Clojure fungerar med Java-bibliotek.

Det som är annorlunda med Elm är att det använder statisk typkontroll, vilket hjälper till att undanröja undantag från runtime eftersom felen skulle fångas vid sammanställningstiden. Eftersom Elm-webbplatsen kan skryta, "NoRedInk bytte till Elm för ungefär två år sedan, och 250 k + rader senare, har de fortfarande inte varit tvungna att krypa för att fixa ett förvirrande körundantag i produktionen."

Avsaknaden av synliga fel i användaränden är en uppenbar fördel för ett språk. Det kan vara anledningen till att det också känns berättigat att tillämpa beskrivningen av ”ett underbart språk” på sig själv.

Elixir

Som Elixirs webbplats beskriver sig själv: "Elixir är ett dynamiskt, funktionellt språk som är utformat för att bygga skalbara och underhållbara applikationer." Elixir riktar sig mot att skapa system med låg tillgänglighet med låg latens. Det körs på Erlang VM, ett ekosystem som används av Heroku, WhatsApp, Klarna och andra för ”distribuerade, feltoleranta applikationer.”

Fördelen för Elixir-programmerare är att de kan åberopa en Erlang-funktion utan att medföra några runtime-kostnader.

F #

F # är en öppen källkod, tvärplattform, första funktionellt programmeringsspråk. Vem som helst kan gå med i F # Software Foundation. Stiftelsens webbplats sammanfattar språket på detta sätt:

F # körs på Linux, Mac OS X, Android, iOS, Windows, GPU: er och webbläsare. Det är gratis att använda och är öppen källkod under en OSI-godkänd licens.

F # används inom ett stort antal applikationsområden och stöds av både ett aktivt öppet samhälle och branschledande företag som tillhandahåller professionella verktyg.

Idris

Idris är ett rent funktionellt programmeringsspråk för allmänt syfte som har präglats av Haskell och ML.

Som förklarats här, kännetecknas det av beroende typer, som gör det möjligt att "typer beräknas på värden, vilket innebär att vissa aspekter av programmets beteende kan specificeras exakt i typen." Det kännetecknas också av att de sammanställs med ivriga utvärderingar.

JavaScript

Även om JavaScript inte är ett funktionellt programmeringsspråk eftersom det också möjliggör ett objektorienterat tillvägagångssätt, har det komponenter som härrör från funktionell programmering. Det inkluderar funktioner med högre ordning. Även nyare versioner av ECMAScript-standarden ger korrigeringar för problemet med mutabilitet.

Kotlin

Bland de nyaste språken (släpptes endast i februari 2016) var Kotlin fem år i tillverkning och testning. Företag som Amex, NBC Digital, Expedia och Gradle använder det. Det är inte ett rent funktionellt språk.

Liksom JavaScript kan Kotlin både objektorienterade och funktionella konstruktioner. Dessutom är det helt interoperabelt med Java-programmeringsspråk.

Bland fördelarna det ger är att det är mer kortfattat än Java-programmering. Vissa tror att det är möjligt att skära ut över en tredjedel av kodraderna. Det erbjuder också alla fördelar som är förknippade med funktionella programmeringsspråk, inklusive högre ordning funktioner, förlängningsfunktioner och lambdas.

Dess mångsidighet gör att den passar "för alla typer av utveckling, vare sig det är serversidan, klientsidan och Android," och det arbetar med att bli kompatibel med Apples iOS.

Scala

Scala är en annan hybrid genom att den erbjuder både objektorienterad och funktionell programmering.

"Skalas statiska typer hjälper till att undvika buggar i komplexa applikationer, och dess JVM- och JavaScript-driftstider låter dig bygga högpresterande system med enkel åtkomst till enorma ekosystem i bibliotek," som det förklarar på sin webbplats.

Vad vi har lärt oss

Telstras Big Data Analytics GM Mark Moloney sammanfattar varför vi nu är det dags att ta till sig funktionella språk och varför programmerare bör överväga att lära sig dem:

En myt är att funktionell programmering är hård eller för akademisk. Det är bara en annan färdighet att lära sig. Det tar tid och övning att behärska - inte annorlunda än resan som utvecklarna genomgick för att lära sig objektorienterad programmering i slutet av 80-talet / början av 90-talet. Tekniken fortsätter att utvecklas. Det är en av anledningarna till att jag älskar programvara. Att lära sig att lära är lika viktigt som vad du vet.