Utveckla med kontrakt


Microsoft ResearchFick frågan här om dagen hur det gick för Spec# och om det var tänkt att det skulle bli ett fullvärdigt .NET språk, integrerat i Visual Studio i kommande versioner liksom F#. Eftersom det inte är något som jag hållit på med tidigare så började jag söka runt lite och hittade projektets hemsida på vår forskningsavdelning.

Spec# består av:

  • Programmeringsspråket Spec# som är en vidareutveckling av C#. Det har ytterligare tillägg till typsystemet vilket inkluderar icke-nullbara typer och “checked exceptions”. Det erbjuder också kontrakt för metoder i form av exempelvis “pre”- och “post”-tillstånd.
  • Kompilatorn för Spec# som integreras i Visual Studio. Kompilatorn kontrollerar typer mot kontrakt och dess begränsningar samt sparar kontrakten som metadata.
  • En verifierare för Spec#. Den här komponenten genererar logiska verifieringsuttryck från ett Spec# program.

Spec# finns för både Visual Studio 2005 och Visual Studio 2008

Om du nu (mot förmodan :) ) inte skulle vilja lära dig ytterligare ett språk utan använda det .NET språk du redan kan, så har några av Spec#-teamets utvecklare också skapat “CodeContracts” och publicerat för nedladdning. “CodeContracts” är tillägg av en uppsättning statiska klasser och metoder som används för att erbjuda delar av det som Spec# gör, men just integrerat i det språk som du redan kan.

CodeContracts” finns för närvarande bara för Visual Studio 2008.

Comments (5)

  1. Code contracts fungerar riktigt bra!

    Ska bli riktigt trevligt att få det inbyggt i .NET 4.0. :-)

  2. Today I got a sweet reminder on developing with contracts when I read this (in Swedish). I always get

  3. Torkel says:

    När dom presenterade CodeContracts på PDC så förstod jag det som att det var fortsättningen på spec#, dvs. dom har övergett idén med att integrera kontrakt direkt i C# språket och istället valt att använda  ett bibliotek + code weaving.

    Det som är coolt med CodeContracts (det som kommer med .NET framework 4.0) är att dom har med alla statiska analyser som gjorde Spec# så intressant. Det negativa är att syntaxen blir lite klumpig.

  4. The Q says:

    Code Contracts är ett väldigt bra tillägg, men visar sig like otympligt när man kombinerar det med WCF.

    Jag har skrivit ett bloginlägg om hur man kan använda Code Contracts skrivna i en WCF service på klient sidan:

    http://www.hexadecimal.se/2009/03/09/WritingRockSolidCodeWithCodeContracts.aspx

    Tyvärr är detta inte helt elementärt, och jag skulle gärna vilja se detta lite smidigare inför .NET 4.0.