Her kommer en kort rapport fra dag 1 på Scala eXchange 2013 i London. Konferansen er delt i tre spor, med noen felles keynotes underveis.
Lenses
Dagen startet frisk med en keynote av Simon Peyton Jones om Lens-biblioteket i Haskell. Lenses gjør det mulig å “gripe inn i” hierarkiske datastrukturer og hente ut eller endre data, men på en funksjonell måte som muliggjør immutability, komposisjon osv. Her gikk det relativt kjapt i svingene, og jeg fikk definitivt bruk for hver minste lille dråpe med Haskell-kunnskap jeg har. Det var allikevel ikke et foredrag om Haskell i seg selv, men mer om konseptene i Lens-biblioteket og styrken i abstraksjoner som sterkt typede (funksjonelle) språk gir en.
Scala har selvfølgelig flere Lens-implementasjoner, som Rillit, Shapeless og Scalaz. Se f.eks. Lenses-foredrag fra Scala Days 2013 for en god intro.
SPJ er vel forøvrig en av de få som kan komme unna med å bruke Comic Sans på slidene sine, i gult på blå bakgrunn intet mindre… 😉
What’s new in Lift 3
Lift var det første web-rammeverket skrevet i Scala, men de senere åra har det vært mer stille rundt Lift. Andre web-rammeverk som Play! og mer lettvekts REST-biblioteker som Unfiltered, Scalatra og Spray har fått mer oppmerksomhet.
David Pollack & co holder nå på med versjon 3.0 av Lift. En av de store nyhetene er støtte for “klientside” actors. Lift 3.0 støtter actor-kall fra klient til server og tilbake med automatisk (de)serialiseing av JSON begge veier. Det er mye fokus på REST og asynkrone tjenester. Utover dette har Lift sterk støtte for sikkerhet, og tar seg automatisk av en del lavnivå ting som håndtering av http-connections (multipleksing, osv.) og retry av kall som timer ut. Litt usikker på argumentene for hvorfor Lift bruker egne typer/biblioteker for Futures o.l., må se nærmere på dette i forhold til Play!, Akka o.l.
Implicit Conversions => Implicit Parameters
Bill Venners fortalte en del om hans oppdagelser og erfaringer med bruk av implicit parametere i Scala og hvordan det hadde åpnet for ny funksjonalitet i ScalaTest2.0 i forhold til bruk av implicit conversions i ScalaTest 1.x. Blant annet bedre støtte for konfigurasjon, typesikkerhet, med mer.
Failure: Deal With It!
Viktor “Legend of” Klang fra Typesafe holdt en keynote om feilhåndtering. Hovedbudskapet var at man bør håndtere validering og feilhåndtering hver for seg. Validering er planlagt/ønsket, mens feilhåndtering tar for seg de uforutsette hendelsene. Dette er ofte ortogonale aspekter og bør håndteres i forskjellige deler av koden. Han snakket om hvordan feilhåndtering gjøres i Akka ved hjelp av supervisor-hierarkier, ikke i selve applikasjonslogikken.
How to Please Everyone, All of the Time
Jon Pretty snakket om hvordan man kan bruke type classes i Scala for å tilby forskjellig funksjonalitet til forskjellige brukere. Han viste hvordan man ved hjelp av import av utvalgte type classes kan gjøre feilhåndtering implisitt (exceptions) eller eksplisitt (Either/Try som retur-typer). Synes han brukte vel lang tid på å komme til poenget, snakket mye om Monoids og slikt før han kom til det som egentlig burde ha vært motivasjonen for foredraget.
Let the Types Set You Free
Et foredrag om korrekt bruk av typer for å signalisere funksjonalitet og hensikt i koden din. F.eks. bruke Option for å angi at funksjoner kan ha en retur-verdi eller ikke, eller Scalaz sin IO-monade for å signalisere eventuelle feil som kan oppstå under IO. Foredraget var ganske kort (drøye 20 minutter?) og kunne med fordel ha gått litt mer i dybden på en del ting, og også forklart det litt mer detaljert. Hvis man har vært borti Option og lest litt om monads så synes jeg ikke det ga så mye.
Spray: Http for your Akka Actors
Siste foredrag jeg fikk med meg denne ettermiddagen handlet om Spray, et lettvekts-bibliotek for håndtering av HTTP-kall i Scala, både som server og klient. Foredraget besto for det meste av live-koding, og ga en god intro til mulighetene i Spray. Blant annet viste han kobling mot Akka actors og hvordan man kan bruke både lav- og høynivå-mekanismene i Spray for å håndtere slikt som HTTP-connections, uthenting og validering av query-parametere, og f.eks. komprimering av HTTP-responsen.