Development

Software-ontwikkeling

Functionele talen populair

4 april 2014

Het is ruim vijftig jaar geleden dat de eerste programmeertalen werden geïntroduceerd, en het is ook al weer een tijdje geleden dat we zijn opgehouden met het aantal nieuwe talen zelfs maar bij te houden. Nu zou je verwachten dat inmiddels bekend is wat je wel en niet van een goede taal mag verwachten en dat we nu allemaal zouden programmeren in een taal die alle plezierige eigenschappen wel en alle onplezierige niet heeft. Helaas is niets minder waar, en ­discussies over de onderlinge merites van programmeertalen genereren vaak meer warmte dan licht.

Een van de oorzaken hiervan is gelegen in het feit dat voor vrijwel iedereen het effectief leren gebruiken van een nieuwe taal, en het daarbij behorende ecosysteem, een behoorlijke investering vergt, en men dus niet staat te springen deze investering snel weer af te schrijven.

Toch is er beweging, en op een daarvan willen we in dit artikel ingaan: het toenemende gebruik van moderne functionele programmeertalen en het gebruik van concepten uit deze talen in andere talen.

We noemen een aantal aspecten dat aan de huidige populariteit van functionele talen ten grondslag ligt:

• Sterk typesysteem

Moderne functionele talen komen met een sterk typesysteem, waarmee zonder het programma zelfs maar te testen, zeer veel programmeerfouten worden vermeden. Jammer genoeg wordt een dergelijk typesysteem vaak gezien als een complicerende factor; het duurt immers langer voordat de compiler geen foutmeldingen meer geeft en je programma ‘iets’ doet. Daarbij wordt voor het gemak over het hoofd gezien dat er op deze manier later veel tijd en ellende wordt bespaard.

We zien meer en meer dat in het typesysteem eigenschappen van het programma kunnen worden gecodeerd die door de vertaler gecontroleerd worden voordat een programma in productie gaat. In principe is zelfs mogelijk elke willekeurige (berekenbare) eigenschap van het programma vast te leggen, en de vertaler dan als een bewijssysteem te gebruiken en daarmee vast te stellen dat het programma de beschreven eigenschappen heeft.

Alhoewel er in imperatieve talen regelmatig elementen van functionele talen worden overgenomen, zoals bijvoorbeeld closures in C# uit de typesystemen, komt dit vaak wat klunzig over. Zo heeft het toevoegen van polymorfie aan Java (aldaar generics genoemd) het oorspronkelijke ontwerp van de taal ernstig aangetast, en de leerbaarheid ervan enorm gecompliceerd.

Binnen de Glasgow Haskell Compiler (haskell.org/ghc), al bijna 20 jaar een researchobject van Microsoft Research in Cambridge, wordt met name het typesysteem nog steeds verder doorontwikkeld. Daarbij wordt de vertaler meer en meer zelf programmeerbaar, zodat belangrijke programmatransformaties, die bijvoorbeeld de efficiëntie verbeteren of zogenaamde boiler-platecode genereren, gemakkelijk geïmplementeerd kunnen worden. Het is daarmee een ideaal stuk gereedschap geworden om wat men wel model-driven development noemt, te ondersteunen.

• Parallellisme

Een van de belangrijkste eigenschappen van zuiver functionele talen is de afwezigheid van side-effects bij het berekenen van de waarde van expressies.

Dit komt doordat het begrip toekenning (assignment) ontbreekt. Dit heeft belangrijke gevolgen: we kunnen bijvoorbeeld expressies, zonder dat we de rest van het programma hoeven te inspecteren, altijd parallel uitrekenen. Dit in tegenstelling tot de klassieke imperatieve talen, waar het veel moeilijker is programma’s te parallelliseren.

Het is deze eigenschap die maakt dat financiële bedrijven als Standard Chartered en Jane Street hun interne financiële modellen in functionele talen programmeren; zonder al te veel moeite kunnen omvangrijke simulaties op machines met veel gelijktijdig werkende processoren binnen redelijke tijd uitgerekend worden. Dat ze deze interne ontwikkelingen niet altijd aan de grote klok hangen, moge duidelijk zijn. De intern ontwikkelde technologie, en zelfs de intern gebouwde vertalers, dialecten en bibliotheken, biedt ze een belangrijke voorsprong op hun concurrenten (zie: janestreet.com/technology).

We verwachten dat het via de programmeertaal expliciet maken van side-effects ook meer en meer het geval zal worden in de opvolgers van veel imperatieve talen.

Een van de architecten van de GHC heeft onlangs een inzichtelijke boek geschreven over dit ‘Parellel and Concurrent programming in Haskell’ (community.haskell.org/~simonmar).

• Software Transactional Memory

In een taal zonder side-effects kunnen we een expressie best een tweede keer uitrekenen zonder dat het resultaat verandert. Deze eigenschap wordt gebruikt bij het zogenaamde software transactional memory: meerdere parallelle threads kunnen gemakkelijk tegelijkertijd proberen hun doel te bereiken zonder met elkaar te interfereren, en mocht er toch interferentie optreden dan kan een thread het veilig opnieuw proberen; we krijgen hiermee een vorm van optimistic locking op programmaniveau, die het mogelijk maakt om een groot aantal transacties tegelijkertijd af te handelen.

• Herbruikbare Bibliotheken

Het typesysteem en het klassesysteem (niet te verwarren met het OO-klassesysteem) van Haskell maakt de taal bij uitstek geschikt om bibliotheken mee te bouwen die breed inzetbaar zijn. Zo maakt het typesysteem het in hoge mate mogelijk vast te leggen welke eigenschappen parameters van een bibliotheek moeten hebben, zonder daarbij te overvragen.

Elke dag komen tientallen packages beschikbaar, zoals infrastructuren voor spellen, bitcoin support, cryptografie, het programmeren van webapplicaties, interfacing met andere eco-systemen, bloggingsystemen, wiki’s, cloud programming, vertalers voor andere talen, conversieprogrammatuur, user-interface programmeren, database-interfacing, grafische toepassingen, documentatiegeneratie et cetera.

• Richtinggevend

Door Haskell te leren krijg je een uitstekend inzicht in welke richting het programmeertaalontwerp zich beweegt, en maak je al in een vroeg stadium met veel moderne concepten kennis. Dit maakt dat steeds meer universiteiten functionele talen opnemen in hun curriculum en heeft geleid tot een groot aantal artikelen in de meer populaire literatuur met koppen als: ‘Haskell, the Language Most Likely to Change the Way you Think About Programming’ (www.fpcomplete.com/business/newsevents/news).

Snel

Zoals bij veel technische ontwikkelingen is het moeilijk om precies te zeggen wanneer en hoe snel ze plaats zullen vinden. Het lijkt er echter op dat veel van de boven genoemde zaken snel aan bekendheid zullen winnen, al is het maar doordat ze opgenomen worden in meer conventionele talen.

Gebruik in industrie

Een paar recente industriële toepassingen van functionele talen:

CHORDIFY

Chordify is een Nederlandse start-up die een webdienst aanbiedt die geüploade muziek in akkoorden omzet. De basis van dit systeem is een in het Haskell-typesysteem gecodeerde representatie van welke akkoorden al dan niet achter elkaar kunnen voorkomen. Hieruit wordt dynamisch een foutherstellende ontleder gebouwd die vervolgens de reeksen akkoorden herkent. Deze technieken zijn voor een groot deel ontwikkeld door het informaticainstituut van de Universiteit Utrecht.

FP Complete

FP Complete is een jong bedrijf opgericht door de voormalige Microsoft executive Aaron Contorer, die zich erover verbaasde dat Haskell niet veel breder werd gebruikt.

Fp Complete richt zich op die aspecten die een taal voor een breder publiek gemakkelijk bruikbaar maken. Binnen een jaar is een succesvolle infrastructuur ter beschikking gekomen voor diegenen die Haskell willen gebruiken, zonder zelf onderzoeker te willen zijn. De installatie en het gebruik is gestroomlijnd, en voor bedrijven is commerciële support beschikbaar.

Vectorfabrics

Vectorfabrics is een bedrijf in Eindhoven dat C-programma’s analyseert en suggesties doet over de manier waarop ze geparallelliseerd kunnen worden. Vrijwel alle interne programmatuur is in de functionele taal ML geschreven.

Silk

Silk is een bedrijf dat helpt de informatie (bijvoorbeeld binnen een bedrijf) automatisch te structureren, vergaren en via een website te visualiseren. De onderliggende server is vrijwel volledig in Haskell geschreven.

WhatsApp

Het succesvolle WhatsApp is geschreven in de functionele taal Erlang, die oorspronkelijk is ontwikkeld door Ericsson om massief parallelle applicaties, zoals telefooncentrales, in te programmeren.

Geschiedenis

De oudste functionele taal is LISP, ontworpen in de jaren vijftig van de vorige eeuw. In de commissie die Algol-60 heeft ontworpen, is zelfs voorgesteld om maar gewoon de lambda-calculus (het logische formalisme waarop LISP was gebaseerd) te gaan gebruiken. Was deze suggestie gevolgd, dan had de hele informaticawereld er nu radicaal anders uitgezien.

Midden jaren zeventig zag ML het licht en deze taal heeft met name in de academische wereld vaste voet aan de grond gekregen, onder andere via het OCaml-dialect dat in Frankrijk in veel industriële projecten wordt gebruikt, waar de betrouwbaarheid van systemen vooropstaat.

In het begin van de jaren negentig is door een groep wetenschappers Haskell ontworpen, een taal die momenteel snel aan populariteit wint binnen moderne bedrijven die snel en betrouwbaar software willen ontwikkelen. De vertaler optimaliseert inmiddels zo goed dat equivalente C-code regelmatig wordt ingehaald.

De toenemende populariteit van functionele talen heeft ervoor gezorgd dat het afgelopen jaar de International Conference on Functional Programming (www.icfp.org) meer deelnemers had dan de op objectgeoriënteerde talen gerichte OOPSLA.

 
Lees het hele artikel
Je kunt dit artikel lezen nadat je bent ingelogd. Ben je nieuw bij AG Connect, registreer je dan gratis!

Registreren

  • Direct toegang tot AGConnect.nl
  • Dagelijks een AGConnect nieuwsbrief
  • 30 dagen onbeperkte toegang tot AGConnect.nl

Ben je abonnee, maar heb je nog geen account? Laat de klantenservice je terugbellen!