Dansk C++-opfinders hjertebarn får kniven af standardkomité

C++-opfinder Bjarne Stroustrup har i flere år været en varm fortaler for 'concepts' som en del af C++-standarden. De gør det nemmere at fejlfinde templates, men C++-standardkomitéen har vendt tomlen nedad.

Inden udgangen af 2010 skulle en ny udgave af standarden for programmeringssproget C++ gerne være klar til at blive kigget igennem i sømmene af den komité, der står bag C++-standarden.

Men det bliver uden et af de meget omtalte og længe ventede nye tiltag kaldet concepts, der ikke vil være at finde i den nye standard med navnet C++0x.

ISO C++-standardkomiteen har på et møde i Frankfurt i juli besluttet, at concepts endnu er for umoden i sin implementering til at blive optaget som en del af standarden for sproget.

På udviklersiden DevX.com er concepts blevet kaldt den vigtigste nye tilføjelse til C++-standarden siden 1998, og hos den danske spiludvikler IO Interactive ser man concepts som en af de ti ting, der har været værd at nævne i forbindelse med den nye C++-standard.

»Concepts er en af de ting, vi har set frem til. Det ville primært gøre det muligt at få nogle mere beskrivende fejlbeskeder, når man bruger templates. I dag er de forskellige compilere ret dårlige til at give forståelige fejlbeskeder,« siger Simon Mogensen, coreprogrammør på IO Interactives næstegenerations engine til virksomhedens spilplatforme.

En template er en del af C++, som gør det muligt for en klasse eller funktion at arbejde på mange forskellige datatyper uden at skulle skrives om til hver enkelt datatype. Det kan for eksempel være en sorteringsalgoritme, som kan tage mange forskellige datatyper som input, men ikke behøver blive implementeret i en udgave til hver datatype.

IO Interactive bruger blandt andet Sonys C++-compiler til PS3 og Microsofts Visual C++-compiler til Windows og Xbox under spiludviklingen. Hvis compilerne understøttede concepts, ville IO Interactive ikke tøve med at bruge dem.

»Vi har forholdsvis meget template-kode, som kunne have gavn af concepts. Hvis vi i dag havde support for det i de compilere, vi bruger, så er jeg sikker på, at ville benytte os af det,« siger Simon Mogensen.

Concepts gør det nemmere at fejlfinde
Specifikationen af concepts har været under udvikling siden 2002, og et concept gør det kort fortalt muligt at få mere forståelige beskeder ud af compileren, når der opstår en fejl med en C++-template.

Det gør det, fordi udvikleren med concepts kan formulere krav til en templates parametre eksplicit i koden, så parametrene kan type-checkes, før templaten oprettes. Når først en template er instantieret, bliver det hurtigt væsentligt mere langhåret at finde frem til det sted, fejlen opstod ud fra compilerens oplysninger.

Udover bedre fejlmeddelelser vil selve kontraktbeskrivelsen forbundet med concepts også fungere som dokumentation af koden og give en bedre forståelse mellem forfatteren af en template og den programmør, der efterfølgende skal bruge den.

Men de gode idéer har altså ikke fået lov at komme med i C++0x.

»Man har været bekymret for, at man kunne nå at få concepts gjort gode nok til at komme med i C++0x,« siger ph.d.-studerende ved Institut for Datalogi på Aalborg Universitet, Thorsten Ottosen.

Han har arbejdet på open source C++-bibliotekerne Boost og blandt andet været primus motor på implementeringen af en range-baseret for-løkke i C++.

»En af de store bekymringer var, om concepts ville have negativ indvirkning på kompileringstiden, og man har ganske enkelt set på prototypen og vurderet, at den ikke var god nok til at komme med i C++-standarden,« siger Thorsten Ottosen.

Opfinderen af C++ og medlem af C++-standardkomitéen, danske Bjarne Stroustrup, har for nylig fortalt udviklersiden DevX.com, hvordan han har det med at skulle undvære concepts i C++0x. Han er den oprindelige initiativtager til concepts i C++ sammen med Douglas Gregor.

»Hvordan jeg har det? Jeg er skuffet, men ikke knust. Tingene kunne have været meget værre. Særligt kunne vi have gjort de alvorligt flossede concepts en del af standarden (C++0x, red.),« fortalte Bjarne Stroustrup.

Thorsten Ottosen mener heller ikke, at en ufærdig udgave af concepts er i nogens interesse.

»Jeg synes egentlig, at standardkomitéen har foretaget det rigtige valg. Det er bedre at tænkte implementeringen af concepts ordentligt igennem, inden de bliver en del af standarden. C++ skal kunne bruges af mange mennesker uden problemer, og derfor er der ikke plads til alt for meget eksperimentering med standarden,« siger Thorsten Ottosen.

Hos IO Interactive vil man først begynde at se på C++-udvikling med concepts, når de engang gør sin entre i standarden og dermed i compilerne.

»Det er ikke noget, der bekymrer os nu, for det ikke rigtig interessant for os at begynde at bruge concepts, før vi har et roadmap der viser, hvornår den slags nye features er klar i de forskellige compilere,« siger Simon Mogensen.

Han synes dog, at det er ærgerligt, at der nu går endnu flere år, før concepts igen får mulighed for at komme med i C++-standarden.

Bjarne Stroustrup har luftet muligheden for, at en forbedret udgave af concepts kan blive en del af C++-standarden om fem år. Se hele hans udlægning af sagen under fanebladet Eksterne links.

Tips og korrekturforslag til denne historie sendes til tip@version2.dk
Kommentarer (2)
sortSortér kommentarer
  • Ældste først
  • Nyeste først
  • Bedste først
Alexander Færøy

Tja.

Boost har en tendens til at skulle underkaste sig, at oversætteren ikke har support for den feature som de prøver at implementere. Boost var også ude med static_assert inden den kom ind i C++, og der var den implementeret som lidt af et hack. Boost har f.eks. også en static_warning, som er implementeret ved hjælp af at GCC smider en warning, hvis du har et statisk udtryk, der laver division-by-zero. Icky!

Jeg tvivler derfor på at Boost's concept checks er brugbare sammenlignet med "Concepts the RightWay(TM)".

Det er dog trist, at skulle sige farvel til Concepts. De ville kunne spare mange minutter på at fange dumme fejl som: std::list a; std::sort(a.begin(), a.end()); :(

Vi må håbe på, at det kommer med som del af en efterfølgende opdatering af C++.

  • 0
  • 0
Log ind eller Opret konto for at kommentere