Se også: Bilder på Flickr - Last.fm-profil - Om meg - Personlig side - Planet Snuskete -

Metameta

Meta kommer fra gresk, μετά, og betyr der “etter/forbi/med” eller noe slikt, men også:

meta |ˈmetə|
adjective (of a creative work) referring to itself or to the conventions of its genre; self-referential.

[...]

A prefix meaning one level of description higher. If X is some concept then meta-X is data about, or processes operating on, X.

Ordet meta og dets betydning er egentlig ganske fascinerende. Jeg har grublet litt på det i ny og ne, og i dag kom igjen en ånd over meg, og jeg gikk nok en gang inn i en tankerekke omkring dette. Selv om meta-prefikset kan bety “forbi” (engelsk: beyond, forklarer kanskje hvorfor wordpress og andre blog-motorer har RSS-feeds under overskriften “meta”) og brukes om f.eks. et fagfelt hvor betydningen da blir en dypere, mer inngående studie av dette, er det meningen over jeg hovedsaklig tenker på: “en X om X”.

De enkleste eksemplene å skjønne er kanskje: metadiskusjon og metadata. Siden meta normalt blir gitt betydningen “ett (abstraksjons)nivå høyere” blir disse å forstå som henholdsvis “en diskusjon om diskusjonen” og “data om data”. De fleste har på et eller annet punkt vært borti dette. Enten ved å diskutere hvordan man på best måte kan gjennomføre en diskusjon, eller ved at de har tatt en titt på hvor stor en fil er, hvem som har opprettet den, eller noe tilsvarende. For ikke å snakke om EXIF-data i bilder: når er bildet tatt, med hvilket kamera, lukkertid, etc.

Metaspråk

Metaspråk er “språk for å beskrive språk”, som for eksempel når du leser lydskrift for å lære uttalen av fremmedord. Man kan også benytte begrepet metaspråk når vi bruker norsk for å snakke om grammatikken i norsk. Ting kan også bli mer kompliserte når metaspråket er inkludert i språket det omtaler. Som et eksempel fant jeg at i setningen “Rune jogger langt” kan adverbet ses på som en del av et metaspråk (adverbene og adjektivene f.eks.) som beskriver et annet språk (i dette tilfellet verbet). Fjo!

Metaspråk dukker faktisk opp ganske ofte i dataverden. XML er f.eks. et metaspråk for (bl.a.) XHTML, på samme måte som SGML er et metaspråk for HTML. Når man implementerer et nytt programmeringsspråk kan man se på språket det implementeres i som et metaspråk for det resulterende språket. Som et eksempel har vi at den offisielle versjonen av Ruby er implementert i C, som gjør at C er metaspråket for Ruby. Ruby finnes forøvrig i andre varianter også, bl.a. Java, men det er også prosjekter som tar for seg å implementere Ruby i Ruby, som da vil føre til at Ruby er et metaspråk for Ruby. Herlig!

Metaklasser

Vi fortsetter litt med Ruby … Ruby har nemlig hva som noen kaller “metaklasser”. Konseptet som begrepet “metaklasse” i Ruby peker til har ikke et offisielt navn enda, forfatteren av språket heller mot singleton class og eigenclass, og en av grunnene til dette er at “metaklassene” (som vi fortsetter å kalle dem her) ikke bare eksisterer for klasser. Om vi ser på klasser i Ruby kan vi gjøre som dette:

foo =
  class Foo
    self
  end

metafoo =
  class Foo
    class << self
      self
    end
  end

puts "#{foo.object_id}: #{foo}"         # => 76410: Foo
puts "#{metafoo.object_id}: #{metafoo}" # => 76400: #<Class:Foo>

Hva skjer her? Først oppretter vi en klasse Foo, som returnerer seg selv til variabelen foo. Som vi ser av utskriften nest nederst, holder foo en referanse til klassen Foo. Men hva skjer i det andre eksempelet? Ved å skrive class << self; self; end får vi returnert “metaklassen” til Foo. Klassen til klassen om du vil. Nå kan vi bruke de to variablene foo og metafoo til å definere henholdsvis metoder og klassemetoder for klassen Foo. Slik:

foo.instance_eval { define_method(:bar) { puts "baz" } }
metafoo.instance_eval { define_method(:baz) { puts "Baz" } }

Foo.new.bar # => baz
Foo.baz     # => Baz

Metoden bar er dermed tilgjengelig i en instanse av Foo, mens metoden baz er tilgjengelig i klassen Foo selv. Ruby muliggjør også metaprogrammering; programmer som skriver programmer (klart man kan gjøre dette i andre språk også), samt programmer som endrer på seg selv.

Metavitser

Et annet artig konsept er metavitser. Vitser om vitser, eller vitser om seg selv. Mads Eriksens “M”-stripe for eksempel inneholder ofte referanser til andre tegneserier og vitser, og det er for så vidt ganske vanlig for nettbaserte tegneserier å inkorporere andre striper (eller elementer fra disse) for å gjøre narr av dem. Selvrefererende vitser er vel kanskje ikke så vanlige, men engelske eksempler:

Knock, knock!
Who’s there?
Boo!
Boo, who?
Don’t cry, it’s only a knock-knock joke.

An Englishman, an Irishman, and a Scotsman walk into a bar. The bartender turns to them, takes one look, and says “What is this - some kind of joke?”

Man har også “vitsemaler”, som for eksempel: “Alle barna gjorde X, unntatt Y, for han/hun gjorde noe som rimte på seg selv.” Disse abstraherer vitsen ved å gå ett nivå høyere, og vitse med vitsen gjennom vitsen selv (ehm). Kanskje ikke fryktelig morsomt, men definitivt artig, og herlig trim for hjernen.

Videre lesing:

Comments are closed.