SSCLI (Rotor) - Shared Source Common Language Infrastructure Johan Lindfors Microsoft
Agenda Introduktion till SSCLI ECMA, CLR,.NET Framework En överblick av Exekeveringsmotorn Ramverket Kompilatorer och verktyg Portabiltitet och tester
Agenda Introduktion till SSCLI ECMA, CLR,.NET Framework En överblick av Exekeveringsmotorn Ramverket Kompilatorer och verktyg Portabiltitet och tester
Vad är SSCLI En implementation av fulla ECMA standards 334: C# 335: Common Language Infrastructure (CLI) En distribution av källkod, ej för kommersiellt bruk Dokumenterad för att göra förändringar Enkel att distribuera och publicera förändringar “Cross-platform” Koden byggs och exekverar på FreeBSD och Windows XP Designad för att översätta till andra plattformar
Varför SSCLI Underlätta utvecklingen för partners Licensen möjliggör “säker” undersökning av kod För utvecklare av alternativ till CLI Stor, omfattande specifikation och kod Bevisar att stöd för flera plattformar är möjligt Demonstrerar interoperabilitet För utvecklare av kompilatorer för CLI JScript-kompilatorn visar dynamiska funktioner C#-kompilatorn är mycket omfattande IL-assemblering visar implementation av API’er på ännu lägre nivå
Innehåll Paketerad som en zip-fil på 11 MB 1.9 miljoner rader kod 1.15 miljoner rader C och C++ 625 tusen rader C# 125 tusen rader CIL (intermediate language) Små doser av assembler 5900 källkodsfiler (9700 totalt) Efter kompilering och länkning 1200 definerade typer Ungefär 20 biblioteksfiler Ungefär 22 applikationer
En överblick av CLI Ett vanligt typsystem och en specifikation för integration av språk (CLS) En motor med GC, SEH, säkerhet och verifiering Ett filformat PE/COFF med tillägg Ett utbyggbart metadata-system Ett “intermediate language” CIL: Common Intermediate Language Ett klassbibliotek Tillgång till operativsystemet
.NET Framework och SSCLI Både CLI och CLR implementerar den kompletta ECMA standarden SSCLI är mer än ECMA men mindre än det kommersiella.NET Framework Skillnader JIT’ern och GC’n ersatta med en implementation som är lättare att översätta till andra plattformar Många Windows-specifika funktioner är inte inkluderade: COM interoperabiltitet, Windows Formulär, ADO.NET, “Enterprise Services”, NGEN, och ASP.NET
Agenda Introduktion till SSCLI ECMA, CLR,.NET Framework En överblick av Exekeveringsmotorn Ramverket Kompilatorer och verktyg Portabiltitet och tester
En överblick av… Exekveringsmotorn Hjärtat av komponent-orienterad infrastruktur Konverterar metadata, resurser och CIL till exekverbar kod Hanterar interoperabilitet med “unmanaged code” Verifiering av IL och JIT kompilering Felhantering mellan språk Språkoberoende, objekthanterande typsystem Automatisk heap och stack hantering Laddning av dynamisk kod Bevisbaserad säkerhet (kodbaserad säkerhet)
En överblick av… Ramverket Ett “verktyg” för utvecklaren Bibliotek med basklasser Samlingar, vektorer, strängar och andra komplexa datastrukturer Flyttalsoperationer, globalisering och formatering System tjänster (trådar, I/O, synkronisering, m.m.) Säkerheten Nätverksstöd, “regular expressions”, XML Innehåller stöd för “Reflection” och skräddarsydda attribut “Remoting”, “unmanaged interop”, serialisering och “marshaling” AppDomains, assemblies, GC m.m.
En överblick av… Kompilatorer och verktyg Komplett C#-kompilator (som också används) JScript-kompilator skriven helt i C# CLIX – “SSCLI program launcher” Andra verktyg: resurs-kompilator, länkare, metadata läsare, assemblerare, disassemblerare Debuggningsverktyg: cordbg för “managed code”, plus ett tillägg för “managed code” från C/C++
En överblick av… Platform Adaptation Layer (PAL) i pal katalogen Systemresurser konsumeras via PAL Ungefär 250 delvis kompletta Win32 API’er Funktioner som saknas i OS’et kan implementeras i PAL En bra specifikation kan hittas i PAL_GUIDE.HTML Trådhantering, schemaläggning, klockfunktioner Synkron fil-I/O, asynkron nätverks-I/O Synkronisering (kritiska sektioner, mutex, semaforer, händelser) “Debuggning” och andra verktyg För att “porta” behövs lite extra arbete JIT Liten dos maskinkod i exekveringsmotorn
Hur kompilerar och länkar jag? Script och program Script bistår med miljövariabler och kompileringen/länkningen build, binplace, nmake, och resurskompilatorer Verktyg för konfigurationen gacutil – administrerar “global assembly cache” sn – signerar applikationer peverify – verifierar CIL caspol – modifierar policy för “kodbaserad säkerhet” storeadm – hanterar “isolated storage”
Tester Väldigt användbart innan och vid förändringar! Två områden: PAL och “managed code” PAL pvtrun.pl kan användas för automatisk testning Kvalitet på “managed code” rrun.pl Tre primära områden Verifiering av IL Många små program Tester för basklasserna
Shared Source Windows CE 1,5 miljoner rader Windows CE kod Innehåller bland annat Utforskaren (”Explorer”) HTTP webb server Protokoll implementationer av SOAP och uPNP Microsoft Message Queuing (MSMQ) Bluetooth och trådlösa nätverksdrivrutiner ”Kerneln” Filsystem
Mer information Shared Source CLI kommer vidareutvecklas Ytterligare utveckling från Microsoft Planerna är inte klara – feedback önskas! NNTP microsoft.public.shared_source.cli Maillistor och arkiv (dotnet-rotor)
Definitioner APIApplication Program Interface IL Intermediate Language (CIL) CLSCommon Language Specification GCGarbage Collection SEHStructured Exception Handling PEPortable Executable COFFCommon Object File Format JITJust In Time NGENNative GENerator I/OInput / Output PALPlatform Adaption Layer uPNPUniversal Plug ’N Play NNTPNetwork News Transfer Protocol