Programmering

Funksjonelle språk: Hva de er, hvor de skal

Selv om noen hevder nøyaktig hva det er, tiltrekker funksjonell programmering stadig utviklere. Og tre av de mest populære funksjonelle språkene - Clojure, F # og Scala - er på trykk for forbedringer.

Funksjonell programmering har en kjernen appel for noen utviklere, sier Scala-grunnlegger Martin Odersky: "Programmørene i det segmentet liker funksjonell programmering fordi det gjør koden tydeligere, bedre strukturert, og den forhindrer mange feilklasser." Men noen hevder at funksjonell programmering fører til mindre effektiv programvare.

Funksjonell programmering krever også å tenke på programmering på en ny måte, sier David Stephens, Microsofts programleder for .Net og en talsmann for F #. Abstraksjoner kan være et problem: "Når du gjør koden mer abstrakt, når du beveger deg lenger bort fra å manipulere biter og eksplisitt går gjennom løkker, kan det ta mer tid å forstå disse abstraksjonene."

Hva er et funksjonelt språk, akkurat?

I sine mest grunnleggende termer handler funksjonell programmering om å behandle beregning som matematiske funksjoner. I tillegg til språk som er fakturert som funksjonelle fra starten av, har slike som Java og C # blitt mer funksjonelle ved å legge til støtte for lambdauttrykk.

Men en presis definisjon av funksjonell programmering kan være vanskelig å fastslå. Clojurefun-bloggen siterer flere definisjoner den mener er feil, inkludert å definere funksjonell programmering som muliggjør en funksjonell stil med høyere ordensfunksjoner eller et språk som støtter lambdas. Det sier at den riktige definisjonen er et språk som vektlegger funksjoner og uforanderlige data.

Men Clojure-bloggens foretrukne definisjon er ikke nødvendigvis riktig, sier andre. "Forfatteren velger en, som for øvrig passer best til Clojure - ikke rart, dette er en Clojure-blogg," sier Scalas Odersky. "Jeg har en tolkning som er nær hans, men ikke den samme."

En funksjon, sier Odersky, er et stykke kode som kartlegger innganger til utganger og har ingen andre effekter utover det. "Det er den matematiske definisjonen av funksjonen vi bruker her. Noen ganger kalles disse funksjonene 'rene' for å skille dem fra for eksempel funksjoner i C." Et funksjonelt språk fokuserer på programmering med rene funksjoner, noe som gjør det enkelt og kraftig å gjøre det, sier Odersky, som grunnla Typesafe, leverandøren av Typesafe JVM applikasjonsutviklingsplattform.

Funksjonell programmering kan kombineres med andre paradigmer, bemerker han. "For eksempel går funksjonell veldig bra med objektorientert. Scala er et funksjonelt språk i den forstand. Jeg er enig i at det å bare ha lambdas ikke gjør et språk funksjonelt; det er nødvendig, men ikke tilstrekkelig."

Clojure-utvikler Rich Hickey, som også er CTO hos systemutvikler Cognitect, slutter seg til en hovedpåstand fra Clojure-bloggen. "Artikkelen peker riktig på at førsteklasses eller høyere ordens funksjoner ikke er det funksjonell programmering handler om. Funksjonell programmering handler om å gjøre programmering mer som matematikk," sier han. Det sier det fortsatt er et spekter av definisjoner for funksjonell programmering, sier Hickey.

Microsofts Stephens ser funksjonelle evner som strekker seg utover språk alene. "Det mest populære funksjonelle programmeringsspråket i verden er Excel," sier han. Et enkelt Excel-regneark kan ha en kolonne med en rekke verdier i seg, for eksempel A1 X 2. "Det er en ren funksjon på A1, og A1 endres ikke, så du beregner verdier fra de eksisterende dataene."

Microsofts Language-Integrated Query (Linq) -teknologi sørger også for funksjonell programmering, sier han. "Nesten hvert programmeringsspråk bruker nå funksjoner fra funksjonelle språk."

Stephens siterer uforanderlige data som kritiske for funksjonell programmering. Samtidighet - programmer med flere tråder som fungerer på data samtidig - har også fordeler av uforanderlige data, bemerker han. "Vi kaller [F #] et funksjonelt førstespråk fordi det kommer fra en arv fra andre språk." Den støtter også objektorientert programmering og opererer med C # og Visual Basic, sier han.

Clojures Hickey ser adopsjon av funksjonelle språk som et svar på det økende presset utviklere står overfor, som må ta større problemer i disse dager. "For å gjøre det, må de redusere den tilfeldige kompleksiteten til programmene sine. Det er nå allment anerkjent at gjennomgripende tilstand og bivirkninger er en primær kilde til kompleksitet og feil i programmer," sier Hickey. "Selv om det er mulig å redusere mengden tilstand i programmer skrevet på ikke-funksjonelle språk, er det dramatisk lettere og raskere å gjøre det på et språk som gjør funksjonell programmering idiomatisk og standard."

Hva er neste for de tre beste funksjonelle språkene

13 år gamle Scala er et hovedspråk innen datavitenskap, sier Scala-grunnlegger Odersky. Støttet på JVM, har den anslagsvis 400 000 til 500 000 brukere. Planer på kort sikt krever at den skal optimaliseres for Java 8, der bytekodeinstruksjoner fra den siste standard Java-oppgraderingen vil gjøre det mulig for Scala å generere mer effektiv kode.

På lengre sikt vil Scala få et oppryddet system, sikrere makroer og mer plattformstøtte, med en LLVM-kompilator-backend under vurdering. Ytterligere forbedringer er planlagt for å forbedre brukervennligheten til Scala.js for å kompilere Scala til JavaScript.

Den ni år gamle Clojure, også basert på JVM, har blitt brukt innen økonomi, detaljhandel, programvare og underholdning, sier Hickey. "Det er brukt i forskjellige applikasjonsområder som transaksjonsbehandling og analyse, big data, nettverksoperasjoner, prediktiv analyse, søk, sikkerhet og forbrukertilbud."

Den 11 år gamle F # ble grunnlagt av Microsoft Research av Don Syme og overvåkes av F # Foundation. Den brukes i et bredt spekter av applikasjoner og kjører på Linux, OS X, Android, iOS, Windows og nettlesere. "Det vi jobber med nå er å få det til å fungere med .Net Core", en åpen kildekode, plattformmodulversjon av .Net Framework, sier Stephens. Strenginterpolasjon, som gjør det lettere å skrive strenger, er på tegnebrettet.

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