Kalenderluke 12: Hvilket språk?


fredag 13. desember 2013 Julekalender

I dag skulle man finne frem til et programmeringsspråk basert på litt info om språket. Det alle fikk vite var:

  • Oppstod på 80-tallet
  • Fortsatt under aktiv utvikling
  • Open source
  • Tilgjengelig på ulike plattformer
  • Svært fleksibelt
  • Enkel syntaks
  • Deler kvaliteter med Lisp
  • Ingen reserverte ord
  • Alt kan bli redefinert og overstyrt
  • Ingen operator for streng-konkatenering
  • = brukes ikke til variabeltilordning

Det har kommet inn MANGE forslag, så la oss ta en titt på dem, og på hvorfor det ikke var noen av disse.

APL Er fra 1964
Ada Har reserverte ord som if, then, else, while, for, etc.
Awk Er fra 1977
Argus Basert på CLU, har reserverte ord, bruker =
BASIC Er fra 1964
Clojure Er fra 2007
Common Lisp Siden jeg sa at det delte kvaliteter med Lisp så er vi ikke ute etter en Lisp.
D Er fra 2001
Eiffel Har reserverte ord
Erlang Ikke spesielt enkel syntaks, har reserverte ord
Forth Er fra 70-tallet, men foruten det var det ikke så dumt tenkt!
Fortran Er fra 1957
Go Er fra 2009
Haskell Er fra 1990 (ikke langt unna), men har f.eks. også reserverte nøkkelord
ISLISP Ikke hørt om, men se Common Lisp
Io Er fra 2002, men dette synes jeg også var et godt forslag!
J Er fra 1990, og jeg synes i alle fall at syntaksen ser kompleks og vanskelig ut.
L Virker å være relatert til det faktiske svaret, men for nytt
Lua Er fra 1993
occam Har reserverte ord som PROC, INT, SEQ, WHILE, TRUE etc
Objective-C Har absolutt ikke enkel syntaks, og bruker =
Perl Perl 5 bruker punktum for konkatenering av strenger. Perl 6 bruker tilde.
Postscript Er usikker, kan ikke nok...
Prolog Er fra 1972
R Er usikker, kan ikke nok...
Rebol Deler endel kvaliteter med Lisp, men er fra 1997
Rexx Er fra 1979, og bruker = til tilordning
Rpl Såvidt jeg kan se har det reserverte nøkkelord
Scheme Er en Lisp, og dermed diskvalifisert. Er også fra 1975.
Self Et bra forslag. Jeg vet desverre ikke nok om det (enda) til å si hva som diskvalifiserer det. Kanskje noen kan hjelpe?
SmallTalk Er fra 1972
Standard ML Vil ikke påstå at syntaksen er spesielt enkel i alle fall, eller at alt kan bli redefinert og overstyrt (såvidt jeg vet)
T Er en dialekt av Scheme.
Tickle Her antar jeg at den som svarte visste hva svaret var, men svarte med uttalen av navnet i stedet for hvordan det korrekt skrives :O

Riktig svar var Tcl

Tcl, som tidligere stod for Tool Command Language men som nå ikke står for noen ting, er et fasinerende språk. Det ser ut som et lite skriptspråk ala Perl, men har noen egenskaper som i alle fall er spennende for en språk-geek.

Koden består kun av kommandokall. Hver "linje" starter med navnet på en kommando etterfulgt av argumentene. Jeg sier "linjer" i hermetegn fordi en linje kan inneholde linjeskift hvis disse er i en streng. Og siden en streng gjerne starter og stopper med { og } så kan en linje raskt se ut som kode i et hvilket som helst annet språk:

proc sreverse {str} {
  join [loop i 0 [string length $str] {
    string index $str end-$i
  }] ""
}

Her kaller vi altså en kommando som heter proc. Den tar tre argumenter, som alle er strenger: "sreverse", "str", og den siste strenger som går over flere linjer. Det proc gjør er å tolke innholdet i siste parameter. Innholdet blir da gjort om til nye kommando-kall, som også kan inneholde strenger som i sin tur vil bli tolket (som linje 3).

På samme måte som at alt er lister i Lisp kan man derfor si at alt er strenger i Tcl. Filosofien er mye lik.

Hvem var raskest?

Raskeste utvikler til å svare riktig 12. desember var Daniel T Johansen, som går på Nord-Troms videregående skole. Gratulerer!


comments powered by Disqus