Programmering

Funktionelle sprog: Hvad de er, hvor de skal hen

Selv som nogle argumenterer præcis for, hvad det er, tiltrækker funktionel programmering stadig udviklere. Og tre af de mest populære funktionelle sprog - Clojure, F # og Scala - er på tryk for forbedringer.

Funktionel programmering har en central appel til nogle udviklere, siger Scala-grundlægger Martin Odersky: "Programmørerne i dette segment kan lide funktionel programmering, fordi det gør koden klarere, bedre struktureret, og den forhindrer mange klasser af fejl." Men nogle hævder, at funktionel programmering fører til mindre effektiv software.

Funktionel programmering kræver også at tænke på programmering på en ny måde, siger David Stephens, Microsofts programchef for .Net og en talsmand for F #. Abstraktioner kan være et problem: "Når du gør kode mere abstrakt, når du bevæger dig længere væk fra at manipulere bits og eksplicit går gennem sløjfer, kan det tage mere tid at forstå disse abstraktioner."

Hvad er et funktionelt sprog, nøjagtigt?

I sine mest basale termer handler funktionel programmering om at behandle beregning som matematiske funktioner. Ud over sprog, der faktureres som funktionelle fra starten, er lignende Java og C # blevet mere funktionelle ved at tilføje understøttelse af lambda-udtryk.

Men en præcis definition af funktionel programmering kan være svært at fastlægge. Clojurefun-bloggen citerer flere definitioner, som den mener er forkerte, herunder definerer funktionel programmering som muliggør en funktionel stil med højere ordensfunktioner eller et sprog, der understøtter lambdas. Det siger, at den korrekte definition er et sprog, der understreger funktioner og uforanderlige data.

Men Clojure-blogens foretrukne definition er ikke nødvendigvis korrekt, siger andre. "Forfatteren vælger en, som i øvrigt passer bedst til Clojure - ikke underligt, dette er en Clojure-blog," siger Scalas Odersky. "Jeg har en fortolkning, der er tæt på hans, men ikke den samme."

En funktion, siger Odersky, er et stykke kode, der kortlægger input til output og har ingen andre effekter ud over det. "Det er den matematiske definition af funktion, vi bruger her. Nogle gange kaldes disse funktioner 'rene' for at skelne dem fra f.eks. Funktioner i C." Et funktionelt sprog fokuserer på programmering med rene funktioner, hvilket gør det let og kraftfuldt at gøre det, siger Odersky, der grundlagde Typesafe, udbyderen af ​​Typesafe JVM-applikationsudviklingsplatformen.

Funktionel programmering kan kombineres med andre paradigmer, bemærker han. "For eksempel går funktionel rigtig godt med objektorienteret. Scala er et funktionelt sprog i den forstand. Jeg er enig i, at bare det at have lambdas ikke gør et sprog funktionelt; det er nødvendigt, men ikke tilstrækkeligt."

Clojure-udvikler Rich Hickey, der også er CTO hos systemudvikler Cognitect, er enig med en hovedpåstand fra Clojure-bloggen. "Artiklen påpegede korrekt, at førsteklasses eller højere ordensfunktioner ikke er, hvad funktionel programmering handler om. Funktionel programmering handler om at gøre programmering mere som matematik," siger han. Det siger, der er stadig et spektrum af definitioner til funktionel programmering, siger Hickey.

Microsofts Stephens ser funktionelle muligheder, der strækker sig ud over sprog alene. "Det mest populære funktionelle programmeringssprog i verden er Excel," siger han. Et simpelt Excel-regneark kan have en kolonne med en række værdier i, såsom A1 X 2. "Det er en ren funktion på A1, og A1 ændres ikke, så du beregner værdier ud fra de eksisterende data."

Microsofts Language-Integrated Query (Linq) -teknologi giver også funktionel programmering, siger han. "Næsten ethvert programmeringssprog vedtager nu funktioner fra funktionelle sprog."

Stephens nævner uforanderlige data som kritiske for funktionel programmering. Samtidighed - programmer med flere tråde, der fungerer på data samtidigt - drager også fordel af uforanderlige data, bemærker han. "Vi kalder [F #] et funktionelt førstesprog, fordi det kommer fra andre sprogs arv." Det understøtter også objektorienteret programmering og fungerer med C # og Visual Basic, siger han.

Clojures Hickey ser vedtagelsen af ​​funktionelle sprog som et svar på det stigende pres, som udviklere står over for, som i disse dage er nødt til at påtage sig større problemer. "For at gøre det skal de reducere den utilsigtede kompleksitet af deres programmer. Det er nu bredt anerkendt, at gennemgribende tilstand og bivirkninger er en primær kilde til kompleksitet og fejl i programmer," siger Hickey. "Selvom det er muligt at reducere mængden af ​​tilstand i programmer skrevet på ikke-funktionelle sprog, er det dramatisk lettere og hurtigere at gøre det på et sprog, der gør funktionel programmering idiomatisk og standard."

Hvad er det næste for de tre mest funktionelle sprog

Den 13-årige Scala er et primært sprog inden for datavidenskab, siger Scala-grundlægger Odersky. Understøttet på JVM har den anslået 400.000 til 500.000 brugere. Planer på kort sigt kræver, at den optimeres til Java 8, hvor instruktioner fra bytekode fra den seneste standard Java-opgradering vil gøre det muligt for Scala at generere mere effektiv kode.

På længere sigt får Scala et oprenset system, sikrere makroer og mere platformssupport med en LLVM-kompilator-back-end i betragtning. Yderligere forbedringer er planlagt for at forbedre anvendeligheden af ​​Scala.js til kompilering af Scala til JavaScript.

Den ni år gamle Clojure, der også er baseret på JVM, er blevet brugt inden for finansiering, detailhandel, software og underholdning, siger Hickey. "Det er blevet anvendt i forskellige applikationsområder såsom transaktionsbehandling og -analyse, big data, netværksoperationer, forudsigende analyse, søgning, sikkerhed og tilbud fra forbrugere."

Den 11-årige F # blev grundlagt af Microsoft Research af Don Syme og overvåges af F # Foundation. Det bruges i en bred vifte af applikationer og kører på Linux, OS X, Android, iOS, Windows og browsere. "Det, vi arbejder på nu, er at få det til at fungere med .Net Core," en open source, platformoverskridende modulversion af .Net Framework, siger Stephens. Strenginterpolering, der gør det lettere at skrive strenge, findes på tegnebrættet.