<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1 plus MathML 2.0 plus SVG 1.1//EN" "http://www.w3.org/2002/04/xhtml-math-svg/xhtml-math-svg.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8"/>
    <title>Project-Team:GALLIUM</title>
    <link rel="stylesheet" href="../static/css/raweb.css" type="text/css"/>
    <meta name="description" content="Research Program - Programming languages: design, formalization, implementation"/>
    <meta name="dc.title" content="Research Program - Programming languages: design, formalization, implementation"/>
    <meta name="dc.subject" content=""/>
    <meta name="dc.publisher" content="INRIA"/>
    <meta name="dc.date" content="(SCHEME=ISO8601) 2016-01"/>
    <meta name="dc.type" content="Report"/>
    <meta name="dc.language" content="(SCHEME=ISO639-1) en"/>
    <meta name="projet" content="GALLIUM"/>
    <script type="text/javascript" src="https://raweb.inria.fr/rapportsactivite/RA2016/static/MathJax/MathJax.js?config=TeX-MML-AM_CHTML">
      <!--MathJax-->
    </script>
  </head>
  <body>
    <div class="tdmdiv">
      <div class="logo">
        <a href="http://www.inria.fr">
          <img style="align:bottom; border:none" src="../static/img/icons/logo_INRIA-coul.jpg" alt="Inria"/>
        </a>
      </div>
      <div class="TdmEntry">
        <div class="tdmentete">
          <a href="uid0.html">Project-Team Gallium</a>
        </div>
        <span>
          <a href="uid1.html">Members</a>
        </span>
      </div>
      <div class="TdmEntry">Overall Objectives<ul><li><a href="./uid3.html">Research at Gallium</a></li></ul></div>
      <div class="TdmEntry">Research Program<ul><li class="tdmActPage"><a href="uid5.html&#10;&#9;&#9;  ">Programming languages: design, formalization, implementation</a></li><li><a href="uid10.html&#10;&#9;&#9;  ">Type systems</a></li><li><a href="uid14.html&#10;&#9;&#9;  ">Compilation</a></li><li><a href="uid16.html&#10;&#9;&#9;  ">Interface with formal methods</a></li></ul></div>
      <div class="TdmEntry">Application Domains<ul><li><a href="uid20.html&#10;&#9;&#9;  ">High-assurance software</a></li><li><a href="uid21.html&#10;&#9;&#9;  ">Software security</a></li><li><a href="uid22.html&#10;&#9;&#9;  ">Processing of complex structured data</a></li><li><a href="uid23.html&#10;&#9;&#9;  ">Rapid development</a></li><li><a href="uid24.html&#10;&#9;&#9;  ">Teaching programming</a></li></ul></div>
      <div class="TdmEntry">
        <a href="./uid26.html">Highlights of the Year</a>
      </div>
      <div class="TdmEntry">New Software and Platforms<ul><li><a href="uid28.html&#10;&#9;&#9;  ">CompCert</a></li><li><a href="uid30.html&#10;&#9;&#9;  ">Diy</a></li><li><a href="uid32.html&#10;&#9;&#9;  ">Menhir</a></li><li><a href="uid34.html&#10;&#9;&#9;  ">OCaml</a></li><li><a href="uid36.html&#10;&#9;&#9;  ">OPAM Builder</a></li><li><a href="uid38.html&#10;&#9;&#9;  ">PASL</a></li><li><a href="uid40.html&#10;&#9;&#9;  ">TLAPS</a></li><li><a href="uid42.html&#10;&#9;&#9;  ">Zenon</a></li></ul></div>
      <div class="TdmEntry">New Results<ul><li><a href="uid45.html&#10;&#9;&#9;  ">Formal verification of compilers and static analyzers</a></li><li><a href="uid58.html&#10;&#9;&#9;  ">Language design and type systems</a></li><li><a href="uid61.html&#10;&#9;&#9;  ">Shared-memory parallelism</a></li><li><a href="uid64.html&#10;&#9;&#9;  ">The OCaml language and system</a></li><li><a href="uid78.html&#10;&#9;&#9;  ">Software specification and verification</a></li></ul></div>
      <div class="TdmEntry">Bilateral Contracts and Grants with Industry<ul><li><a href="uid86.html&#10;&#9;&#9;  ">Bilateral Contracts with Industry</a></li></ul></div>
      <div class="TdmEntry">Partnerships and Cooperations<ul><li><a href="uid104.html&#10;&#9;&#9;  ">National Initiatives</a></li><li><a href="uid113.html&#10;&#9;&#9;  ">European Initiatives</a></li><li><a href="uid118.html&#10;&#9;&#9;  ">International Initiatives</a></li></ul></div>
      <div class="TdmEntry">Dissemination<ul><li><a href="uid124.html&#10;&#9;&#9;  ">Promoting Scientific Activities</a></li><li><a href="uid134.html&#10;&#9;&#9;  ">Teaching - Supervision - Juries</a></li><li><a href="uid155.html&#10;&#9;&#9;  ">Popularization</a></li></ul></div>
      <div class="TdmEntry">
        <div>Bibliography</div>
      </div>
      <div class="TdmEntry">
        <ul>
          <li>
            <a id="tdmbibentmajor" href="bibliography.html">Major publications</a>
          </li>
          <li>
            <a id="tdmbibentyear" href="bibliography.html#year">Publications of the year</a>
          </li>
          <li>
            <a id="tdmbibentfoot" href="bibliography.html#References">References in notes</a>
          </li>
        </ul>
      </div>
    </div>
    <div id="main">
      <div class="mainentete">
        <div id="head_agauche">
          <small><a href="http://www.inria.fr">
	    
	    Inria
	  </a> | <a href="../index.html">
	    
	    Raweb 
	    2016</a> | <a href="http://www.inria.fr/en/teams/gallium">Presentation of the Project-Team GALLIUM</a> | <a href="http://gallium.inria.fr/">GALLIUM Web Site
	  </a></small>
        </div>
        <div id="head_adroite">
          <table class="qrcode">
            <tr>
              <td>
                <a href="gallium.xml">
                  <img style="align:bottom; border:none" alt="XML" src="../static/img/icons/xml_motif.png"/>
                </a>
              </td>
              <td>
                <a href="gallium.pdf">
                  <img style="align:bottom; border:none" alt="PDF" src="IMG/qrcode-gallium-pdf.png"/>
                </a>
              </td>
              <td>
                <a href="../gallium/gallium.epub">
                  <img style="align:bottom; border:none" alt="e-pub" src="IMG/qrcode-gallium-epub.png"/>
                </a>
              </td>
            </tr>
            <tr>
              <td/>
              <td>PDF
</td>
              <td>e-Pub
</td>
            </tr>
          </table>
        </div>
      </div>
      <!--FIN du corps du module-->
      <br/>
      <div class="bottomNavigation">
        <div class="tail_aucentre">
          <a href="./uid3.html" accesskey="P"><img style="align:bottom; border:none" alt="previous" src="../static/img/icons/previous_motif.jpg"/> Previous | </a>
          <a href="./uid0.html" accesskey="U"><img style="align:bottom; border:none" alt="up" src="../static/img/icons/up_motif.jpg"/>  Home</a>
          <a href="./uid10.html" accesskey="N"> | Next <img style="align:bottom; border:none" alt="next" src="../static/img/icons/next_motif.jpg"/></a>
        </div>
        <br/>
      </div>
      <div id="textepage">
        <!--DEBUT2 du corps du module-->
        <h2>Section: 
      Research Program</h2>
        <h3 class="titre3">Programming languages: design, formalization, implementation</h3>
        <p>Like all languages, programming languages are the media by which
thoughts (software designs) are communicated (development),
acted upon (program execution), and reasoned upon (validation).
The choice of adequate programming languages has a tremendous impact
on software quality. By “adequate”, we mean in particular the
following four aspects of programming languages:</p>
        <ul>
          <li>
            <p class="notaparagraph"><a name="uid6"> </a><b>Safety.</b> The programming language must not expose
error-prone low-level operations (explicit memory deallocation,
unchecked array access, etc) to programmers. Further, it should
provide constructs for describing data structures, inserting
assertions, and expressing invariants within programs. The consistency
of these declarations and assertions should be verified through
compile-time verification (e.g. static type-checking) and run-time
checks.</p>
          </li>
          <li>
            <p class="notaparagraph"><a name="uid7"> </a><b>Expressiveness.</b> A programming language should manipulate
as directly as possible the concepts and entities of the application
domain. In particular, complex, manual encodings of domain notions
into programmatic notations should be avoided as much as possible. A
typical example of a language feature that increases expressiveness is
pattern matching for examination of structured data (as in symbolic
programming) and of semi-structured data (as in XML processing).
Carried to the extreme, the search for expressiveness leads to
domain-specific languages, customized for a specific application area.</p>
          </li>
          <li>
            <p class="notaparagraph"><a name="uid8"> </a><b>Modularity and compositionality.</b> The complexity of large
software systems makes it impossible to design and develop them as
one, monolithic program. Software decomposition (into semi-independent
components) and software composition (of existing or
independently-developed components) are therefore crucial. Again,
this modular approach can be applied to any programming language,
given sufficient fortitude by the programmers, but is much facilitated
by adequate linguistic support. In particular, reflecting notions of
modularity and software components in the programming language enables
compile-time checking of correctness conditions such as type
correctness at component boundaries.</p>
          </li>
          <li>
            <p class="notaparagraph"><a name="uid9"> </a><b>Formal semantics.</b> A programming language should fully and
formally specify the behaviours of programs using mathematical
semantics, as opposed to informal, natural-language specifications.
Such a formal semantics is required in order to apply formal methods
(program proof, model checking) to programs.</p>
          </li>
        </ul>
        <p>Our research work in language design and implementation centers on
the statically-typed functional programming paradigm,
which scores high on safety, expressiveness and formal semantics,
complemented with full imperative features and objects for additional
expressiveness, and modules and classes for compositionality. The
OCaml language and system embodies many of our earlier
results in this area <a href="./bibliography.html#gallium-2016-bid0">[49]</a>.
Through collaborations, we also gained experience with several
domain-specific languages based on a functional core, including
distributed programming (JoCaml), XML processing (XDuce, CDuce),
reactive functional programming, and hardware modeling.</p>
      </div>
      <!--FIN du corps du module-->
      <br/>
      <div class="bottomNavigation">
        <div class="tail_aucentre">
          <a href="./uid3.html" accesskey="P"><img style="align:bottom; border:none" alt="previous" src="../static/img/icons/previous_motif.jpg"/> Previous | </a>
          <a href="./uid0.html" accesskey="U"><img style="align:bottom; border:none" alt="up" src="../static/img/icons/up_motif.jpg"/>  Home</a>
          <a href="./uid10.html" accesskey="N"> | Next <img style="align:bottom; border:none" alt="next" src="../static/img/icons/next_motif.jpg"/></a>
        </div>
        <br/>
      </div>
    </div>
  </body>
</html>
