Title: Advanced Computer Science Teaching with the Shared Source Common Language Infrastructure
1Advanced Computer Science Teaching with the
Shared Source Common Language Infrastructure
2Overview
- In this session we will discuss
- What is the Shared Source Common Language
Infrastructure (SSCLI)? - Key SSCLI components
- Differences between SSCLI and .NET
- Working with the SSCLI
- Using the SSCLI for teaching
- Deploying the SSCLI in a teaching lab environment
3What is the SSCLI?
4ECMA Common Language Infrastructure (CLI)
- An international standard for a virtual execution
environment - produced by Microsoft
- Implementation of this standard is a subset of
the .NET framework - The specification (ECMA 335/ISO 23271/2 ) defines
- common type system
- intermediate language
- component model
- A minimum implementation consists of
- a C compiler
- CLI execution engine
- component frameworks
5SSCLI A Shared Source CLI
- Microsofts free, modifiable and redistributable
implementation of the CLI, codenamed Rotor - Platform independent
- Currently executes on MS Windows, FreeBSD and Mac
OS/X - Third party ports to Linux, Windows CE and others
- Virtually identical to .NET 1.1 except for
- retooled JIT compiler and garbage collector
- C generics support (Gyro)
- Source written in C, C, C, Perl and assembly
language - Other implementations of CLI are Ximians Mono
and DotGNUs Portable.NET
6Implemented for Learning
- Many areas of interest (3 million lines of code!)
- Good, real-world example of how software is built
- Contains useful component-based frameworks
- Standard programming constructs
- Web-service oriented networking and remoting
- Contains compilers, tools, and utilities
- C, JScript, and IL JIT compilers
- Assembler, disassembler, linker, debuggers
- Configuration utilities
- Extensive tests and build harness
7Relationship of SSCLI and .NET Framework
- Both SSCLI and .NET implement complete ECMA
- SSCLI is a superset of ECMA, subset of commercial
.NET Frameworks - Shared source CLI implementation differs in
- JIT and garbage collector replaced with more
portable, more approachable, implementations - Only supports C and JScript as development
languages - Windows-specific features not included
- COM interop
- Windows Forms
- It Just Works!(managed/unmanaged C
integration) - Commercially competitive features not included
- ADO.NET (database access)
- enterprise services
- NGEN (install-time, JIT-ahead precompilation)
- ASP.NET (web application / web service
development)
8The .NET Framework
9SSCLI
10Platform Adaptation Layer
- SSCLI is built on top of a Platform Adaptation
Layer (PAL) - The PAL
- isolates CLI implementation from the OS and
hardware - runs co-operatively with native code
- implements security and control, threading and
exceptions - offers equivalent functionality to many Win32 OS
functions - eases porting to new platforms - a student
project?
11Working with the SSCLI
12 demo
- Building the SSCLI
- Were setting this off now as it takes a while!
13The SSCLI Distribution
- SSCLI can be freely downloaded from the Web
- Packaged as single compressed file archive
- 1.9 million lines of code in first release (now
3 million) - 1.15M of C and C
- 625K of C
- 125K of CIL (intermediate language)
- Smattering of assembly code, Perl (test
harnesses) and Tcl/Tk (UI) - 5900 source files (9700 total)
- 2900 tests
- Build output
- 1200 defined types
- About 20 dynamically loadable libraries
- About 22 executable programs
14The SSCLI Source Tree
- Four major areas in source code
- Runtime execution engine
- Base class library
- Compilers and tools
- Portability layer, tests, and build
infrastructure - Other important points of interest
- License
- Documentation
- Samples
15SSCLI Execution Engine
- Heart of component-oriented infrastructure
- Converts metadata, resources, and CIL (on disk as
PE/COFF image) into running code - JIT compilation and IL verification
- Cross-language exception handling
- Language-agnostic, object-capable, type system
- Automatic heap and stack management
- Dynamic code loading
- Evidence-based security (code access security)
16Common Intermediate Language
- Basis for most managed code execution in the CLI
- Simple stack-based machine model see vm
directory - Typeless opcodes, defined in opcode.def
- Verifiable subset see fjit directory for
verification - Signed and unsigned via opcode, not type
- CIL code is JIT compiled to run under CLI
management - Type layout, control, and dispatching
- Typed variable argument lists, dynamically typed
pointers - Tail calls, virtual dispatch, call via function
pointer - Rich set of conversion operations, calling
conventions - Exception handling
- Garbage collection
17Frameworks
- A minimal toolkit for the 21st century
programmer - Base class library is a key feature of the ECMA
CLI spec - Collections, arrays, strings, and other compound
data types - Globalization and formatting
- System services (threads, I/O, synchronization,
etc.) - Security
- SSCLI augments this with
- Floating point and extended arrays libraries
- Networking, regular expressions, and XML
libraries - Access to runtime infrastructure
- Reflection and custom attributes
- Remoting, unmanaged interop, serialization, and
marshaling - AppDomains, Assemblies, GC, other execution
engine features
18Compilers and Tools
- Full-featured C compiler
- also used in build process
- JScript compiler written entirely in C
- Additional developer tools
- clix, the shared source CLI program launcher
- Assembly tools resource compiler, assembly
linker, metainfo metadata viewer, assembler,
disassembler - Debuggers cordbg managed command line debugger,
plus a debug extension for working on managed
code from C/C via windbg
19 demo
- Developing software with the SSCLI
- Debugging with cordbg
20SSCLI Build Process
- Complex build which occurs in two phases and is
driven by several build tools - nmake, build, Perl scripts
- Initial phase builds
- PAL using native toolchain
- Build tools (nmake, build) against PAL for
portability - resource compiler and PAL runtime using newly
compiled build tools - Main phase has complex interdependencies
- Unmanaged frameworks, compilers, and tools, are
built - Managed portions of runtime and frameworks are
built using compilers built previously - Assemblies and runtime are configured
- Possible to rebuild individual SSCLI components
- Allows teaching activities to focus on smaller
parts of the SSCLI and rebuild those only - e.g. Hull JScript compiler modification exercises
- Good example of how large software systems are
built - Unfamiliar to most students
21SSCLI Test Suite
- Incredibly handy when modifying code!
- Two major areas managed code and PAL
- PAL suites
- Test driver script is pvtrun.pl
- Used on new PAL implementations to verify
compliance with PAL specification - Quality suites
- Test driver script is rrun.pl
- Tests for three primary aspects of SSCLI
functionality - IL verification
- BVT smoke tests many small programs
- Tests for the BCL
22Using the SSCLI for Teaching
23Possibilities for Teaching
- The SSCLI implementation touches upon many
aspects of a standard Computer Science syllabus - Programming languages and skills
- Object-oriented development
- Framework design
- Software testing
- Security
- Networking
- Virtual machine implementation
- etc, etc, etc
- Many possible uses in the curriculum
- Allows students to see the relevance of many of
the aspects of the curriculum in the
implementation of a large commercially-produced
software product
24The SSCLI at Hull
- Hull University uses both the .NET Framework and
the SSCLI for teaching at Master level - MSc in Distributed Systems Development
- .NET provides
- overreaching example of distributed systems
concepts, techniques and technologies - SSCLI provides
- down to the metal implementation details
- excellent environment for enhancing testing/
debugging skills - We introduce three ways in which the SSCLI is
used at Hull
25MSc Distributed Systems Development
- Our Masters course aims to
- Give advanced coverage of modern distributed
computing techniques - Develop an understanding of contemporary managed
code environments and how they work - Develop skills in working with large codebases
- Develop active practitioners
- Provide hands-on practical experience underpinned
by advanced theoretical concepts
26Software Maintenance Exercise
- Designed to improve students skills in
- Navigating and comprehending unfamiliar code
- Maintaining code written by others
- Designing and implementing for maintenance
- Requires students to make modifications to the
JScript compiler - Modify the abstract syntax tree of the compiler
- JScript compiler written in C gt easy
introduction to SSCLI - JScript compiler can be built and deployed
independently
27JIT Profiling Exercise
- Designed to provide
- an introduction to key aspects of the virtual
machine and JIT compiler implementation - An appreciation for how JIT compilation works to
transform intermediate code to native code - A basis for further, more detailed study
- Requires students to
- Introduce new data structures
- Modify JIT compiler to count CIL instructions
- Sort and output profiling statistics on program
completion - Code in an unmanaged language (unfamiliar to many)
28Debugging Exercise
- Optional exercise for students wanting to improve
their debugging skills which is designed to - Get the students thinking about all aspects of
the compilation and execution cycle - Provide opportunities to develop debugging and
testing skills - Familiarise the student with the SSCLI code and
the techniques used to implement it - Introduce problem solving and hypothesis testing
skills relevant to debugging - Set the worst case scenario
- Deliberate bugs introduced in the underlying
language and VM implementation students code is
fine, but it still doesnt work!
29Our Experience
- Feedback suggests that the students
- Find the exercises initially challenging
(particularly the JScript exercise) - Value what these exercises have taught them as
they reach the latter stages of our Masters
programme - Observe an improvement in their own coding, code
comprehension and debugging skills as a direct
consequence of being exposed to commercially
produced code
30Deploying the SSCLI
31SSCLI in the Teaching Lab
- The SSCLI is really designed for a single
developer working exclusively on a single machine
- i.e. not the normal lab environment - Students use a different machine each session
- Modifications made to the SSCLI by one student
must not be visible to other students - Complete built installation requires 1GB disk
space - Building on a network drive gt high network
traffic - Managed code executed from a network drive is
less trusted than code run from the local machine
and may generate security exceptions
32Our Solutions
- Provide two local copies of the SSCLI
distribution - Students have read/write permissions on one copy,
read permissions on the other - Students use local modifiable copy for their work
- Read-only copy manually copied over modifiable
copy at start of each session and automatically
each evening - Use source control system
- Students use a source control system to store
their changes to SSCLI components (not entire
source tree) - Changes checked out over clean local copy at
start of session - Changes checked back in at start of sessions
- Promotes good development practice but
significant overhead in administering source
control system - Virtual PC (with Undo Disks) ?
33Windows Deployment Issues
- SSCLI requires Visual C to build under Windows
- Will not build against Visual C 8 / Visual
Studio 2005 - Vanilla distribution does not execute correctly
on Windows XP Service Pack 2 - Changes made to XP in SP2 break the exception
handling mechanism - CDs issued today have fixed copy of SSCLI source
- Build harness attempts to create file association
for Perl files - Our configuration does not permit students to
create file associations - Easily fixed by removing a line from the build
scripts
34 Summary
- In this presentation we have introduced
- The SSCLI and its source code distribution
- SSCLI organization and operation
- Building and using the SSCLI
- Opportunities for teaching using the SSCLI
- Teaching lab deployment issues
35Reading and Resources
- Reading
- Stutz, Neward Shilling, Shared Source CLI
Essentials, OReilly Associates Inc, 2003 -
- Resources
- Shared Source CLI
- http//msdn.microsoft.com/msdnmag/issues/02/07/sha
redsourcecli/ - ECMA Specifications
- http//msdn.microsoft.com/net/ecma
- David Stutzs MSDN announcement of Rotor
- http//msdn.microsoft.com/library/default.asp?url
/library/en-us/Dndotnet/html/mssharsourcecli.asp - Jason Whittingtons MSDN Rotor article
- http//msdn.microsoft.com/msdnmag/issues/02/07/sha
redsourcecli/