søndag den 8. marts 2009

Udvidbart sprog

Som de trofaste læsere allerede må have fornemmet, så er jeg så småt ved at kigge på Scala, og nedenfor er et eksempel på, hvor udvidbar sproget er:
   1:package control
2:
3:object ControlMail extends repeatable {
4: def main(args: Array[String]): Unit = {
5: repeat(5) {
6: println("Hello, World!")
7: }
8: }
9:}

Bemærk repeat konstruktionen i ln. 5: Den gør hvad man forventer, nemlig skriver fem linier med "Hello, World!"

"Ja, ja", vil man nok tænke ved første øjekast, "en konstruktion til at gentage noget et antal gange; hvor smart er det lige?". Ikke særligt, vil jeg medgive, men det er sådan set heller ikke det snedige. Det snedige er, at den konstruktion slet ikke findes i sproget - jeg har nemlig selv lige lavet den til lejligheden:
   1:package control
2:
3:trait repeatable {
4: def repeat(times: Int)(block: => Unit) {
5: for(i <- 1 to times) {
6: block
7: }
8: }
9:}

...og det synes jeg faktisk er ret snedigt!

4 kommentarer:

Anonym sagde ...

Hej Bjarne!

Du har sikkert et godt overblik over sprog. Derfor vil jeg stille
dig et spørgsmål. Hvis man skal lave en webside, der skal kunne gemme oplysninger i en database og skal kunne sende automatiske email til udvalgte brugere. Hvilket sprog og hvilken database vil du så anbefale? Det skal helst være gratis eller i hvert fald billigt.

Unknown sagde ...

Det er et interessant spørgsmål (som man siger, når der ikke er noget oplagt svar).

Det bedste ville nok være, hvis det slet ikke var nødvendigt med et sprog eller en database - altså hvis løsningen allerede var lavet. Måske man kunne finde et program, som allerede kan det? Jeg kender ikke lige sådan et på stående fod, men google kan finde mange gode ting.

Skal man til at programmere, så er det bedste sprog altid det, som man kender bedst. Jeg tror på, at man bør lære sig nye sprog en gang imellem, men man skal ikke tro, at det gør det nemmere at lave nye programmer - i hvertfald ikke til at starte med. Næh, skal man have lavet noget nemt og hurtigt, så er det bedre at holde sig til det, som man kender.

Personligt vil jeg lige nu pege på Lift-frameworket, som baserer sig på Scala, og med en Derby-database nedenunder, men det er i virkeligheden kun det bedste valg for mig: Jeg kan kode lidt Scala forvejen, og synes at det er sjovt - og Derby kommer med tidsvarende versioner af JVM'en.

Andre vil helt givet anbefale noget med RubyRails, og det er helt sikkert fordi, at de er gode til Ruby. Objektivt set er det også et meget godt valg, men for mig personligt vil det dog være et virkeligt dårligt valg, for det kender jeg ikke noget til.

Jeg har i professionel sammenhæng været med til at bygge løsninger baseret på forskellige former for J2EE/JEE på f.eks. DB2 og Oracle - selvom det faktisk er gode løsninger, så vil jeg ikke anbefale det til det, som du foreslår, for det kommer først til sin ret ved store programmer med mange brugere og store datamængder (rigtigt store programmer med rigtigt mange brugere og rigtigt mange data!).

Og mon ikke der i virkeligheden også findes en glimrende løsning for dem, som færdes hjemmevant på .NET-platformen? Jeg kan ikke på stående fod komme i tanke om nogle, men det skyldes helt sikkert ukendskab. Men så vidt jeg ved, så findes både Visual Studio og SQLServer i "Express" udgaver, som vist nok er "gratis", og som så langt rigeligt kan opfylde de krav, som din løsning stiller til dem - det var måske også et sted at starte?

Jeg beklager, men mere konkret kan jeg nok ikke blive. Det kommer i høj grad an på omstændighederne.

Anonym sagde ...

Ved du noget om hvilke begrænsninger der er på express udgaverne af .net og SQL server?

Unknown sagde ...

Næh - men mon ikke Microsoft vil gøre en del ud af at beskrive det, for at få solgt nogle "rigtige" versioner?