title: What is the difference between ANSI/ISO C++ and C++/CLI?
body: <blockquote>
    <p>Created by Microsoft as the foundation
    of its .NET technology, the Common
    Language Infrastructure (CLI) is an
    ECMA standard (ECMA-335) that allows
    applications to be written in a
    variety of high-level programming
    languages and executed in different
    <em>system environments</em>. Programming languages that conform to the CLI have
    access to the same base class library
    and are capable of being compiled into
    the same intermediate language (IL)
    and metadata. IL is then further
    compiled into native code particular
    to a specific architecture.</p>
    
    <p>Because of this intermediate step,
    applications do not have to be
    rewritten from scratch. Their IL only
    needs to be further compiled into a
    system's native code.</p>
  </blockquote>
  
  <p>What exactly is meant by the <strong>system environments</strong>?</p>
  
  <hr>
  
  <p>Additionally, while studying Ivor Horton's <em>Beginning Visual C++ 2008</em>, I noticed that he  stated that there are fundamentally different kinds of C++ applications can be developed with Visual C++ 2008. These are:</p>
  
  <ol>
  <li><p>Applications which execute natively on one's computer, which he referred to as <strong>native C++ programs</strong>. Native C++ programs are written in the version of C++ that is defined by the ISO/ANSI language standard.</p></li>
  <li><p>Application can also be written to run under the control of the CLR in an extended version of C++, called C++/CLI. These programs were referred to as <strong>CLR programs</strong>, or <strong>C++/CLI programs</strong>.</p></li>
  </ol>
  
  <p>So what is meant by native C++ programs and CLR programs? What's the difference between them? Thanks for any expert's help.</p>