Release Notes:  OCL (Open CLI Library) – Version 0.1.0

Release Date: 8/25/2001

Release File: OCL-V0.1.0zip

 

The URL for OCL is http://sourceforge.net/projects/ocl

 

Intel Labs has implemented portions of the CLI (Common Language Infrastructure) runtime library as defined in the draft ECMA CLI specification   (For the latest public draft ECMA documents, see http://www.intel.com/ids/ecma).  Objectives for this development effort are to:

 

 

License

The source code in this release is a snapshot of the current development efforts.  It is distributed under Intel Open Source License for OCL:

 

The Intel Open Source License for OCL (Open CLI Library)

(BSD License with Export Notice)

 

Copyright (c) 2001 Intel Corporation

All rights reserved.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

 

·        Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.

·        Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.

·        Neither the name of the Intel Corporation nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.

 

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE INTEL OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

 

EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF YOUR JURISDICTION. It is licensee's responsibility to comply with any export regulations applicable in licensee's jurisdiction. Under CURRENT (May 2000) U.S. export regulations this software is eligible for export from the U.S. and can be downloaded by or otherwise exported or reexported worldwide EXCEPT to U.S. embargoed destinations which include Cuba, Iraq, Libya, North Korea, Iran, Syria, Sudan, Afghanistan and any other country to which the U.S. has embargoed goods and services.

 

 

Release 0.1.0 Overview

Please note that since there is currently no open source VES (Virtual Execution System) implementation, the development team has not integrated the library with a functional VES.  Therefore, some pieces of the code may be not functional or fully tested. This release contains two main items. 

1)    BCL (Base Class Library) Implementation:  This package contains the current snapshot of the Intel Labs BCL (Base Class Library) implementation.  The BCL is part of the Kernel Profile as defined in the draft ECMA CLI specification.  The status of this implementation is included in a table at the end of this document for reference.  Please note the following:

o       Intel Labs to date has focused only on developing the BCL APIs as they are defined in the draft CLI ECMA standard.  Many classes in this released code are not fully implemented yet.

o       Intel Labs automatically generated stub code for ECMA standard class libraries using the latest draft ECMA XML library definition file available at the date of this release.  This stub code was used as the initial baseline.  This approach offered the following benefits:

§         Intel Labs code matches the BCL definition available in the latest draft ECMA specification.  All class, interface, enum, property, method, parameter, etc. names are aligned with what is defined in the draft ECMA standard.

§         Summary information available in the latest draft ECMA specification was generated in comment format preceding all classes, interfaces, enums, properties, and methods.

§         Method parameter information available in the latest draft ECMA specification was generated in comment format preceding all method definitions.

§         Method exception information available in the latest draft ECMA specification was generated in comment format preceding all method definitions.

§         Method return value information available in the latest draft ECMA specification was generated in comment format preceding all method definitions.

§         As a guide to developers, an associated ‘throw’ stub statement is generated in each method for every exception thrown by that method, followed by a comment explaining the exceptional condition.  Example:

            if (false)

            {

                throw new System.XYZException();  // Statement describing the exceptional condition as worded in the draft ECMA library definition.");

            }

§         Also note that automatically generated stub methods that return a non-void value return zero, false, null, or a new object of the return type.  Implementations should change these return values to what it appropriate for the method.

§         The format of comments within the code banners is consistent for use with Microsoft's Visual Studio .Net Document generator. To generate the documentation for all the provided CLI classes, open the System.sln project that is included with this release using Visual Studio .Net (Beta 2) and select Tools -> Build Comment web Pages. This action will generate web based browse-able documentation for all the included CLI BCL classes.

§         Definitions of classes within the latest draft ECMA specification contain information about additional methods that must be implemented if implementing the Compact Profile (as opposed to the Kernel Profile).  As a convenience to developers who may want to use this release as a basis for developing the Compact Profile, those methods have also been generated in the BCL classes, but are commented out.  A comment precedes each of these methods explaining which library in the Compact Profile requires the method to be implemented.

§         Aesthetically consistent code formatting throughout the entire library set.

o       Versioning Scheme (file level):  This versioning scheme does not imply completion status of the source code files.  For example, Interfaces and enums are 100% complete, yet have a version number of 0.0 since the automatically generated code is complete.  This scheme is used so that when updates to the draft EMCA library specification are received, we can automatically generate code reflecting the update and replace all files with a version number of 0.0.  Please reference the code status table below for the completion status.:

§         A version number of 0.0 is used for code not modified from its auto generated state.

§         A version number of 0.1 is used for auto generated code modified only to reconcile compiler errors.

§         A version number of 1.0 is used for code containing Intel Labs implementation.

o       The BCL cannot be developed completely in C#.  Intel Labs factored platform specific (Operating System and Virtual Execution System) functionality into a PAL (Platform Abstraction Layer) to consolidate OS/VES dependencies and provide a focus point for porting the BCL to other platforms.  Developers should implement these OS/VES interfaces to provide integration with their target OS and VES.  This layer will obviously continue to evolve as the Library/OS/VES interaction is better understood – especially when the libraries are integrated with a working VES.  All known OS/VES dependent methods in BCL to date are enumerated in a table at the end of this document.  The PAL currently consists of the following classes/interfaces:

§         System.PlatformAbstractionLayer.IVirtualExecutionSystem – Definition of functionality needed by the library that can only be provided by the VES.

§         System.PlatformAbstractionLayer.IntelORP – Class that implements IVirtualExecutionSystem, providing the requested functionality through integration with ORP (this class contains only stub functionality at this time).

§         System.PlatformAbstractionLayer.IOperatingSystem - Definition of functionality needed by the library that can only be provided by the underlying OS.

§         System.PlatformAbstractionLayer.Windows – Class that implements IOperatingSystem, providing the requested functionality through calls into APIs available in Windows (this class is a work in progress).  Examples include accessing the console and file system access.
As defined in the draft ECMA CLI specification, accessing native APIs is done through a mechanism called P/Invoke and its library counterpart is an attribute called System.Runtime.InteropServices.DllImport. Three classes were added from the RIL (Runtime Infrastructure Library) in order to support the P/Invoke mechanism used to call into native APIs (System.Runtime.InteropServices.DllImportAttribute, System.Runtime.InteropServices.CharSet, and System.Runtime.InteropServices.CallingConvention). These classes are not implemented, but are included to allow for a successful compilation. Currently, the Windows platform (Windows.cs) is dependent on two DLLs (kernel32.dll and msvcrt.dll) – both of which are installed in the System32 directory on a Windows 2000 build. These DLL dependencies are subject to change based on future library development.

§         System.PlatformAbstractionLayer.Linux – Class that implements IOperatingSystem, providing the requested functionality through calls into APIs available in Linux  (this class contains only stub functionality at this time).

§         System.PlatformAbstractionLayer.Platform – Constructs the concrete classes implementing IVirtualExecutionSystem and IOperatingSystem for the target platform and provides static methods to access them.

 

2)    Non-BCL Stub Code: This package contains stub code for the entire draft ECMA CLI library definition, less the BCL contained in the previously described package.  No effort was made to compile this package, so there are likely syntactical errors that are artifacts of the minor errors in the XML definition format and the tool used to generate the stubs.  This package is provided as a starting point for developers wanting to complete the entire Kernel or Compact profiles.

 

Feedback

To sign up for a mailing list for OCL, visit http://sourceforge.net/projects/ocl and click ‘lists’.  For now, the ocl-general list can be used to ask questions, submit bugs, post patches, and exchange experiences between OCL users.

 

OCL-V0.1.0.zip File Content

Unzip the contents of OCL-V0.1.0.zip on your local drive.  This will create the following tree:

OCL-V0.1.0                                       // Root Directory
    |   Contrib-license.txt                     // License for code contributors
    |   License.txt                                  // Intel Open Source License Agreement
    |   OtherLibraryStubs.zip               // Release item two described above
    |   Readme.htm                              // this file
    |  
    \---OCLSourceCode
        \---System                                  // Root of source code tree for all code contained within release item one described above

How to compile the source code and build System.dll

The System.sln and System.csproj found under the ‘\OCL-V0.1.0\OCLSourceCode\System’ directory are Visual Studio .Net (Beta 2) project files that allow developers to build the BCL library on a Windows .Net platform. To build a System.dll under this platform, open the System.sln file in VS .Net and select Build -> Rebuild All. Alternatively, developers can create platform specific makefiles that include and compile all the .cs files found in ‘\OCL-V0.1.0\OCLSourceCode\System’.

 

Completion Status

The following table shows the status of each class within the BCL in this release.

 

Class/Interface Names

Completion (as of 08/22/2001)

Namespace

Implementation Notes

ApplicationException

100%

System

 

ArgumentException

100%

System

 

ArgumentNullException

100%

System

 

ArgumentOutOfRangeException

100%

System

 

ArithmeticException

100%

System

 

Array

75%

System

Several methods are not completed.  See source for details.All VES dependencies factored into calls to System.  PlatformAbstractionLayer.  Testing pending VES integration.

ArrayTypeMismatchException

100%

System

 

AsyncCallback

5%

System

 

Attribute

5%

System

 

AttributeTargets

100%

System

 

AttributeUsageAttribute

5%

System

 

Boolean

90%

System

 

Byte

5%

System

 

Char

100%

System

Only ASCII set is considered in the implementation

CLSCompliantAttribute

5%

System

 

ArrayList

5%

System.Collections

 

Comparer

100%

System.Collections

 

DictionaryEntry

5%

System.Collections

 

Hashtable

5%

System.Collections

 

ICollection

100%

System.Collections

 

IComparer

100%

System.Collections

 

IDictionary

100%

System.Collections

 

IDictionaryEnumerator

100%

System.Collections

 

IEnumerable

100%

System.Collections

 

IEnumerator

100%

System.Collections

 

IHashCodeProvider

100%

System.Collections

 

IList

100%

System.Collections

 

Console

95%

System

All code for Console is written, but still in the testing phase. Also some changes may need to be made once Threading (Synchronization) gets developed (see SetOut method)

Convert

5%

System

 

DateTime

5%

System

 

Delegate

15%

System

This class is dependent on the VES abstraction layer

ConditionalAttribute

5%

System.Diagnostics

 

DivideByZeroException

100%

System

 

DuplicateWaitObjectException

100%

System

 

Enum

5%

System

 

Environment

5%

System

 

EventArgs

5%

System

 

EventHandler

5%

System

 

Exception

60%

System

VES specific methods need to be implemented

ExecutionEngineException

100%

System

 

FlagsAttribute

5%

System

 

FormatException

100%

System

 

GC

15%

System

 

DateTimeFormatInfo

5%

System.Globalization

 

DateTimeStyles

100%

System.Globalization

 

NumberFormatInfo

0%

System.Globalization

 

NumberStyles

100%

System.Globalization

 

UnicodeCategory

100%

System.Globalization

 

IAsyncResult

100%

System

 

ICloneable

100%

System

 

IComparable

100%

System

 

IDisposable

100%

System

 

IFormatProvider

100%

System

 

IFormattable

100%

System

 

IndexOutOfRangeException

100%

System

 

Int16

5%

System

 

Int32

70%

System

IFormatProvider ignored in this release, and only few Parse/ToString formats are implemented. This implementation can be used as the bases for other value types

Int64

5%

System

 

InvalidCastException

100%

System

 

InvalidOperationException

100%

System

 

InvalidProgramException

100%

System

 

Directory

5%

System.IO

 

DirectoryNotFoundException

100%

System.IO

 

EndOfStreamException

100%

System.IO

 

File

5%

System.IO

 

FileAccess

100%

System.IO

 

FileLoadException

90%

System.IO

 

FileMode

100%

System.IO

 

FileNotFoundException

90%

System.IO

 

FileShare

100%

System.IO

 

FileStream

7%

System.IO

Has a couple of private fields and two calls out into the OS abstraction layer

IOException

100%

System.IO

 

MemoryStream

85%

System.IO

 

Path

80%

System.IO

Still needs thorough testing

PathTooLongException

100%

System.IO

 

SeekOrigin

100%

System.IO

 

Stream

80%

System.IO

Functional code written. Asynchronous reads and writes stubbed out. Dispose(bool) also stubbed out. Requires specific testing (Console tests this indirectly)

StreamReader

70%

System.IO

Functional code written, but no Unicode support. Dispose and Synchronize methods are stubbed. File based constructors stubbed out. Other miscellaneous “to do” tasks needs attention. Also requires specific testing (Console tests this indirectly). Better feel for completeness of class once FileStream is implemented.

StreamWriter

70%

System.IO

Functional code written, but no Unicode support. Dispose and Synchronize methods are stubbed. File based constructors stubbed out. Other miscellaneous “to do” tasks needs attention. Also requires specific testing (Console tests this indirectly). Better feel for completeness of class once FileStream is implemented.

StringReader

5%

System.IO

 

StringWriter

5%

System.IO

 

TextReader

75%

System.IO

Functional code written, but no Unicode support. Dispose and Synchronize methods are stubbed. Also requires testing

TextWriter

75%

System.IO

Functional code written, but no Unicode support. Dispose and Synchronize methods are stubbed. Also requires testing

MarshalByRefObject

100%

System

 

MulticastNotSupportedException

100%

System

 

NotSupportedException

100%

System

 

NullReferenceException

100%

System

 

Object

50%

System

Some messages forwarded to the Platform Abstraction Layer, which need to be implemented there.

ObsoleteAttribute

5%

System

 

OutOfMemoryException

100%

System

 

OverflowException

100%

System

 

Random

5%

System

 

RankException

5%

System

 

Sbyte

5%

System

 

CodeAccessPermission

5%

System.Security

 

SecurityException

5%

System.Security

 

IPermission

5%

System.Security

 

PermissionSet

5%

System.Security

 

SecurityElement

5%

System.Security

 

VerificationException

5%

System.Security

 

CodeAccessSecurityAttribute

5%

System.Security.Permissions

 

EnvironmentPermissionAttribute

5%

System.Security.Permissions

 

FileIOPermissionAttribute

5%

System.Security.Permissions

 

PermissionState

100%

System.Security.Permissions

 

SecurityAction

5%

System.Security.Permissions

 

SecurityAttribute

5%

System.Security.Permissions

 

SecurityPermission

5%

System.Security.Permissions

 

SecurityPermissionAttribute

5%

System.Security.Permissions

 

SecurityPermissionFlag

100%

System.Security.Permissions

 

EnvironmentPermissionAccess

100%

System.Security.Permissions

 

FileIOPermissionAccess

100%

System.Security.Permissions

 

EnvironmentPermission

5%

System.Security.Permissions

 

FileIOPermission

5%

System.Security.Permissions

 

IBuiltInPermission

5%

System.Security.Permissions

 

StackOverflowException

100%

System

 

String

85%

System

 

SystemException

100%

System

 

ASCIIEncoding

5%

System.Text

 

Decoder

5%

System.Text

 

Encoder

5%

System.Text

 

Encoding

5%

System.Text

 

StringBuilder

5%

System.Text

 

UnicodeEncoding

5%

System.Text

 

UTF8Encoding

5%

System.Text

 

Interlocked

100%

System.Threading

 

Monitor

5%

System.Threading

All messages forwarded to the Platform Abstraction Layer, which need to be implemented there.

SynchronizationLockException

100%

System.Threading

 

Thread

5%

System.Threading

All messages forwarded to the Platform Abstraction Layer, which need to be implemented there.

ThreadAbortException

100%

System.Threading

 

ThreadPriority

100%

System.Threading

 

ThreadStart

5%

System.Threading

 

ThreadState

100%

System.Threading

 

ThreadStateException

100%

System.Threading

 

Timeout

100%

System.Threading

 

Timer

100%

System.Threading

 

TimerCallback

5%

System.Threading

 

WaitHandle

5%

System.Threading

 

TimeSpan

5%

System

 

Type

40%

System

 

TypeInitializationException

25%

System

 

UInt16

5%

System

 

UInt32

5%

System

 

UInt64

5%

System

 

ValueType

90%

System

 

Version

5%

System

 

 

 

Draft Index of OS and VES dependent BCL Items

The following table enumerates the BCL methods and properties that rely on OS or VES functionality.  These methods forward the received message to classes in the Platform Abstraction Layer for processing.   This list will evolve as the libraries are integrated with a specific platform and the communication between the libraries and underlying OS and VES is better understood.

 

Dependency Type (VES/OS)

BCL Class

Method

VES

Object

public static object GetMemberWiseCloneFor(object obj)

VES

Object

public static Type GetTypeFor(object obj)

VES

Object

public static int GetHashCodeFor(object obj)

VES

Object

~Object()

VES

Array

public static int GetLengthFor(Array array)

VES

Array

public static int GetRankFor(Array array)

VES

Array

public static Array Clone(Array array)

VES

Array

public static object GetValue(Array array, int index)

VES

Array

public static object SetValue(Array array, object val, int index)

VES

Array

public static Type GetElementTypeFor(Array array)

VES

Array

public static Array CreateArrayInstance(Type elementType, int length)

VES

String

public static string Intern(string str)

VES

String

public static string IsInterned(string str)

VES

GC

public static void WaitForPendingFinalizers()

VES

GC

public static void ReRegisterForFinalize(object obj)

VES

GC

public static void SuppressFinalize(object obj)

VES

Delegate

public object DelegateClone()

VES

Delegate

public Delegate DelegateCombine(Delegate a, Delegate b)

VES

Delegate

public Delegate DelegateCombine(Delegate[] delegates)

VES

Delegate

public Delegate[] DelegateGetInvocationList()

VES

Delegate

public int DelegateGetHashCode(Delegate value)

VES

Delegate

public Delegate DelegateRemove(Delegate source, Delegate value)

VES

Delegate

public object DelegateGetTarget(Delegate value)

VES

Type

public override int GetHashCode()

VES

Type

public virtual int GetArrayRank()

VES

Type

Property public bool IsArray; Get

VES

Type

Property public bool IsClass; Get

VES

Type

Property public bool IsEnum; Get

VES

Type

Property public bool IsInterface; Get

VES

Type

Property public bool IsPointer; Get

VES

Type

Property public bool IsValueType; Get

VES

Type

public virtual bool IsAssignableFrom(Type c)

VES

Type

public virtual bool IsInstanceOfType(object o)

VES

Exception

public virtual Exception GetBaseException()

VES

Exception

Property public virtual string StackTrace; Get

VES

Thread

public void Abort(object stateInfo)

VES

Thread

public void Abort()

VES

Thread

~Thread()

VES

Thread

public void Join()

VES

Thread

public bool Join(int millisecondsTimeout)

VES

Thread

public bool Join(TimeSpan timeout)

VES

Thread

public static void ResetAbort()

VES

Thread

public static void Sleep(int millisecondsTimeout)

VES

Thread

public static void Sleep(TimeSpan timeout)

VES

Thread

public static void SpinWait(int iterations)

VES

Thread

public void Start()

VES

Thread

public static Thread CurrentThread; Get

VES

Thread

Property public bool IsAlive; Get

VES

Thread

Property public bool IsBackground; Get

VES

Thread

Property public bool IsBackground; Set

VES

Thread

Property public string Name; Get

VES

Thread

Property public string Name; Set

VES

Thread

Property public ThreadPriority Priority; Get

VES

Thread

Property public ThreadPriority Priority; Set

VES

Thread

Property public ThreadState ThreadState; Get

VES

Monitor

public static void Enter(object obj)

VES

Monitor

public static void Exit(object obj)

VES

Monitor

public static void Pulse(object obj)

VES

Monitor

public static void PulseAll(object obj)

VES

Monitor

public static bool TryEnter(object obj)

VES

Monitor

public static bool TryEnter(object obj, int millisecondsTimeout)

VES

Monitor

public static bool TryEnter(object obj, TimeSpan timeout)

VES

Monitor

public static bool Wait(object obj, int millisecondsTimeout)

VES

Monitor

public static bool Wait(object obj)

VES

Monitor

public static bool Wait(object obj, TimeSpan timeout)

OS

Path

public static string ChangeExtension(string path, string extension)

OS

Path

public static string GetDirectoryName(string path)

OS

Path

public static string GetExtension(string path)

OS

Path

public static string GetFileName(string path)+C35

OS

Path

public static string GetFileNameWithoutExtension(string path)

OS

Path

public static string GetFullPath(string path)

OS

Path

public static string GetPathRoot(string path)

OS

Path

public static string GetTempFileName()

OS

Path

public static string GetTempPath()

OS

Path

public static bool HasExtension()

OS

Path

public static bool IsPathRooted(string path)

OS

FileStream

public override void Close()

OS

FileStream

public FileStream(string, FileMode, FileAccess, FileShare, int, bool)

OS

FileStream

public override void Flush()

OS

FileStream

public override int Read(byte[], int, int)

OS

FileStream

public override long Seek(long, SeekOrigin)

OS

File

public static void Delete(string path)

OS

File

public static bool Exists(string path)

OS

File

public static DateTime GetCreationTime(string path)

OS

File

public static DateTime GetLastAccessTime(string path)

OS

File

public static DateTime GetLastWriteTime(string path)

OS

File

public static void SetCreationTime(string path, DateTime creationTime)

OS

File

public static void SetLastAccessTime(string path, DateTime lastAccessTime)

OS

File

public static void SetLastWriteTime(string path, DateTime lastWriteTime)

OS

Directory

public static void Delete(string path, bool recursive)

OS

Directory

public static bool Exists(string path)

OS

Directory

public static DateTime GetCreationTime(string path)

OS

Directory

public static string GetCurrentDirectory()

OS

Directory

public static string[] GetDirectories(string path, string searchPattern)

OS

Directory

public static string GetDirectoryRoot(string path)

OS

Directory

public static string[] GetFiles(string path, string searchPattern)

OS

Directory

public static string[] GetFileSystemEntries(string path, string searchPattern)

OS

Directory

public static DateTime GetLastAccessTime(string path)

OS

Directory

public static DateTime GetLastWriteTime(string path)

OS

Directory

public static void Move(string sourceDirName, string destDirName)

OS

Directory

public static void SetCreationTime(string path, DateTime creationTime)

OS

Directory

public static void SetCurrentDirectory(string path)

OS

Directory

public static void SetLastAccessTime(string path, DateTime lastAccessTime)

OS

Directory

public static void SetLastWriteTime(string path, DateTime lastWriteTime)

OS

StdOutputStream

public override void Flush()

OS

StdInputStream

public override int Read(byte[], int, int)