Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
Camel Crossings: Perl & the Microsoft .NET Framework Brad Merrill, Microsoft Jan Dubois, ActiveState Eric Promislow, ActiveState .NET Framework Overview Brad Merrill .NET Languages Evangelist .NET Developer Platform .NET Blueprint Visual Studio.NET Your Application and Web Service Other Applications Using Your Service End-User Clients .NET Framework Operations Orchestration Windows CE, ME, 2000, .NET Open Internet Protocols SOAP, SCL, DISCO HTTP, SMTP, XML, WAP, XSD Your Internal Services .NET Enterprise Servers .NET MyServices Public Web Services .NET Framework Web Services User Interface Data & XML Base Classes Orchestration .NET Framework .NET Enterprise Servers Common Language Runtime .NET My Services Windows (CE, ME, 2000, and .NET) Inside the .NET Framework VB C++ C# Perl Eiffel Cobol Web Services User Interface ASP.NET Data and XML Base Framework Secure, integrated class libraries •Unifies programming models across languages •Enables cross-language integration •Factored for extensibility Common Language Runtime •Designed for tools Active Server Pages .NET Common Language Runtime •High-productivity environment for building and running Web services •Executes code, maintains security, handles component “plumbing” and dependencies Acronyms CLR – Common Language Runtime CTS – Common Type System EE – Execution Environment CIL – Common Intermediate Language CLS – Common Language Specification Common Language Runtime Security Execution Support Base Classes IL to native code compilers Common Language Runtime Frameworks GC, stack walk, code manager Class loader and layout Common Type System Static (compile time) typed Object-Oriented fields, methods, nested types, properties, etc. Overloading resolved by the compiler Virtual dispatch based on runtime type Single implementation inheritance Multiple interfaces Managed Code Metadata describes datatypes Uses object references Exception handling ISO C++ can be managed Managed Data Layout provided by runtime Lifetime managed by runtime (GC) Automatic or Specified Working set is compacted Managed extensions required for C++ Terms Managed Code CIL implemented types and assemblies Unmanaged Code Native code Win32, Kernel, etc. Assemblies Unit of deployment Versioning Provided by compiler use of attributes Policy per-application as well as per-machine Security boundary One or more files, independent of packaging Self-describing via manifest Assemblies are granted permissions Methods can demand permissions Mediate type import and export Types named relative to assembly Applications Are configurable units Assemblies are located based on… One or more assemblies Application-specific files or data Their logical name and The application that loads them Can have private versions of assemblies Private version preferred over shared Version policy can be per-application Metadata Key to simpler programming model Generated automatically Stored with code in executable file (.dll or .exe) Uses existing COFF format Via existing extension mechanism Stored in binary format Convertible to/from XML Schema Convertible to/from COM type libraries Metadata: Creation And Use Serialization Source Code (e.g. SOAP) Other Compiler Type Browser Reflection Designers Compiler Debugger Metadata Profiler (and code) Schema Generator Proxy Generator XML encoding (SDL or SUDS) CIL: Key Design Points Compilation, not interpretation Stack-based Typeless operations Value types (C structs) Size-agnostic (32/64 bit) integers Pointers with arithmetic and indirection Verification conditions specified Execution Model VB Native Code Install time Code Gen C# Cobol Eiffel CIL Common Language Runtime Pre-JIT Image Standard JIT Compiler Native Code Runtime Control Flow Assembly Execution Support Code Managers Security System Class Loader IL to native code compiler Managed Native Code CPU First reference to type First call to method Interop Mechanisms Platform invoke (P/Invoke) Automated type marshalling Implicit reference pinning Knowledge of GC implications required COM interop services Built-in Attributes Type library conversion tools provided Registration provided by tools Calling Unmanaged Code Unmanaged Native Code Common Language Runtime JIT Compiler Managed Native Code Interoperability Services Type System Standard C# Binary Standard VB MFC/ATL MSVCRT C++ What Is The Common Language Specification? Rules for “published” contracts Full common type system for internal contracts and implementation Three classes of use: Doesn’t apply within a single assembly Consumer tools Extender tools Frameworks Design and naming patterns Existing Type Systems (define (hello) (display “Scheme”)) 000010 000020 000030 000040 000050 IDENTIFICATION DIVISION. PROGRAM-ID. MAIN. PROCEDURE DIVISION. DISPLAY “COBOL”. END PROGRAM MAIN. class Hello { public static void Main() { System.Console.WriteLine(“C#”); } } Public Module Hello Sub Main() System.Console.WriteLine(“VB”) End Sub End Module Existing Type Systems 000010 IDENTIFICATION DIVISION. 000020 PROGRAM-ID. MAIN. (define (hello) .assembly hello {} .assembly extern mscorlib {} PROCEDURE DIVISION. (display 000030 .method static public void main() il managed “Scheme”)) 000040 DISPLAY “COBOL”. { .entrypoint 000050 END PROGRAM MAIN. .maxstack 1 ldstr “CIL” class call Hello void [mscorlib] { public static void Main() System.Console::WriteLine(class System.String) ret { System.Console.WriteLine(“C#”); } } } Public Module Hello Sub Main() System.Console.WriteLine(“VB”) End Sub End Module CLS: Designing For Reach Fujitsu COBOL Extensions Microsoft Managed C++ Extensions Common Type System COBOL CLS C++ Common Type System is too big for any single language Common Language Specification is for cross-language use Framework Classes … Debug Win Forms Spans all programming languages Object-oriented and consistent Common type system built-in Extensible ASP.NET Secure Data Base Classes Common Language Runtime Class Benefits Increases developer productivity by reducing the number of APIs to learn Enables cross language inheritance and debugging Makes it easy to add or modify framework features Allows creation of secure applications Integrates well with tools Active Server Pages .NET Web Forms and Web Services Provides factored architecture Compiled No-touch deployment system ASP.NET Intelligent state management Base Classes Common Backwards compatible with ASP Language Web Services components separate code from content Web Forms Runtime ASP.NET Benefits Developer productivity increases Tools easily use ASP.NET Any programming language VB.Net, JScript, C++, COBOL, Eiffel, Perl, etc. 40% to 70% reduction in lines of code Application performance increases Simple deployment (e.g., with XCOPY) Reliability, resilience increase Easy to extend or replace features Session state scales to Web Farms Controls sense client and adapt output HTML, DHTML, WML ECMA CLI – Common Language Infrastructure CIL – Common Intermediate Language A subset of the full CLR A subset of the Framework class libraries The Full Intermediate Instruction Set C# The Full C# Language Specification ECMA TG3 Specifications CLI Partition I - Architecture CLI Partition II – Metadata CLI Partition III - CIL CLI Partition IV - Library CLI Partition V - Annexes Class Library http://msdn.microsoft.com/net/ecma Resources Microsoft .NET Framework SDK Community Visual Studio http://www.gotdotnet.com http://www.microsoft.com/msdn Mailing Lists http://discuss.microsoft.com Questions? PerlNET Jan Dubois [email protected] © ActiveState Corp. 2002 Native Perl for .NET compiler? We tried it: Some runtime semantics impossible XS Extension modules don’t work Slow runtime Looks like Perl, but not really compatible Just a different syntax for C# ? Let’s try again with Perl 6 © ActiveState Corp. 2002 PerlNET Overview Interface with standard Perl interpreter Advantages Runs at normal speed Complete Perl language support Full support for extensions Disadvantages Heavyweight components Moving between Perl and .NET is slower © ActiveState Corp. 2002 How does it work? Interface specifications in Perl source PerlNET creates .NET proxy objects Proxies use P/Invoke to call Perl Perl uses COM interop to call .NET Runtime layer marshals data © ActiveState Corp. 2002 PerlNET Component .NET Framework Windows Managed Runtime Perl Host Module Proxy Perl 5.6.1 Module.pm .NET Interface © ActiveState Corp. 2002 PerlNET Sample Code © ActiveState Corp. 2002 Sample Code Metadata © ActiveState Corp. 2002 C# Program using PerlNET © ActiveState Corp. 2002 Challenges Method overloading Exception handling Garbage collection Efficient data marshaling © ActiveState Corp. 2002 Supported .NET Features Constructors & Inheritance Methods incl. overloading Fields, Properties & Indexers Events (Delegates) Enumerations Exceptions Custom attributes Namespaces P/Invoke © ActiveState Corp. 2002 PerlNET Capabilities Language interoperability WinForms ASP.NET Web Services Visual Studio .NET integration © ActiveState Corp. 2002 Using PerlNET Eric Promislow, ActiveState [email protected] © ActiveState Corp. 2002 Gains String Processing & Regular Expressions Network Connectivity Databases CPAN .NET COM Automation Win32 API Pure Perl © ActiveState Corp. 2002 “PerlPad” Adding juice to a notepad-like editor with back-end Perl scripting Find RegEx Search & Replace RegEx Use “ee” mode on substitution operator © ActiveState Corp. 2002 Simple step-through example C# client Perl component For debugging: Make Perl project start-up Debugging:Debug Mode: MultiLang Build:Command-line: Add “-d” Set breakpoints, go © ActiveState Corp. 2002