|
|
<!DOCTYPE html>
|
|
|
<html>
|
|
|
|
|
|
<head>
|
|
|
<meta charset="utf-8" />
|
|
|
<title>LangProg - Le C</title>
|
|
|
<link href="../styles/main.css" rel="stylesheet" type="text/css" />
|
|
|
<link href="../styles/articles.css" rel="stylesheet" type="text/css" />
|
|
|
</head>
|
|
|
|
|
|
<body>
|
|
|
|
|
|
<div class="header">
|
|
|
<div class="title">
|
|
|
<h1>LangProg - C</h1>
|
|
|
<img src="../img/ProgrammingLanguage1-1.jpg" alt="ImgTitle" />
|
|
|
</div>
|
|
|
|
|
|
<nav>
|
|
|
<a href="../index.html">Menu Principal</a>
|
|
|
<a href="galerie.html">Galerie</a>
|
|
|
<a href="donnees.html">Données</a>
|
|
|
</nav>
|
|
|
</div>
|
|
|
|
|
|
<img class="logo" src="../img/The_C_Programming_Language_logo.svg.png" alt="CImage">
|
|
|
|
|
|
<div class="main-content">
|
|
|
<section class="articles">
|
|
|
<h2>le language de programmation c</h2>
|
|
|
|
|
|
<article>
|
|
|
<p>c est un langage de programmation <strong>impératif
|
|
|
généraliste</strong>, de bas niveau. inventé au début des années 1970
|
|
|
pour réécrire unix, c est devenu un des langages les plus utilisés,
|
|
|
encore de nos jours. de nombreux langages plus modernes comme c++, c#,
|
|
|
java et php ou javascript ont repris une syntaxe similaire au c et
|
|
|
reprennent en partie sa logique. c offre au développeur une
|
|
|
<strong>marge de contrôle importante</strong> sur la machine
|
|
|
(notamment sur la gestion de la mémoire) et est de ce fait utilisé
|
|
|
pour réaliser les <strong>« fondations »</strong> (compilateurs,
|
|
|
interpréteurs…) de ces langages plus modernes.</p>
|
|
|
</article>
|
|
|
|
|
|
<article>
|
|
|
<h3>histoire</h3>
|
|
|
<p>le langage c a été inventé au cours de l'année 1972 dans les
|
|
|
laboratoires bell. il était développé en même temps qu'unix par
|
|
|
dennis ritchie et kenneth thompson. kenneth thompson avait développé
|
|
|
le prédécesseur direct de c, le langage b, qui est lui-même
|
|
|
largement inspiré de bcpl. dennis ritchie a fait évoluer le langage
|
|
|
b dans une nouvelle version suffisamment différente, en ajoutant
|
|
|
notamment les types, pour qu'elle soit appelée c1.
|
|
|
|
|
|
bien que c soit directement dérivé de b, ritchie relève aussi des influences de
|
|
|
pl/i, fortran et algol 68. en outre, ritchie signale que l'équipe
|
|
|
était convaincue du bien-fondé de l'idée d'écrire un système
|
|
|
d'exploitation dans un langage de plus haut niveau que l'assembleur,
|
|
|
un aspect pionnier de multics, écrit en pl/i.
|
|
|
|
|
|
par la suite, brian kernighan aida à populariser le langage c. il procéda aussi
|
|
|
à quelques modifications de dernière minute. en 1978, kernighan fut
|
|
|
le principal auteur du livre the c programming language décrivant le
|
|
|
langage enfin stabilisé ; ritchie s'était occupé des appendices et
|
|
|
des exemples avec unix. on appelle aussi ce livre « le k&r », et
|
|
|
l'on parle de c traditionnel ou de c k&r lorsqu'on se réfère au
|
|
|
langage tel qu'il existait à cette époque. </p>
|
|
|
</article>
|
|
|
|
|
|
<article>
|
|
|
<h3>qualités et défauts</h3>
|
|
|
<ul>
|
|
|
<h4>principale qualitées</h4>
|
|
|
<li>il existe depuis longtemps, le début des années 1970 ;</li>
|
|
|
<li>il est fondé sur un standard ouvert ;</li>
|
|
|
<li>de nombreux informaticiens le connaissent ;</li>
|
|
|
<li>il permet la minimisation de l'allocation mémoire nécessaire, son contrôle complet et la maximisation de la performance, notamment par l'utilisation de pointeurs ;</li>
|
|
|
<li>il permet la construction de structures de données complexes et ad-hoc, au plus près des besoins ;</li>
|
|
|
<li>des compilateurs et bibliothèques logicielles existent sur la plupart des architectures ;</li>
|
|
|
<li>il a influencé de nombreux langages plus récents dont c++, java, c# et php ; sa syntaxe en particulier est largement reprise ;</li>
|
|
|
<li>il met en œuvre un nombre restreint de concepts, ce qui facilite sa maîtrise et l'écriture de compilateurs simples et rapides ;</li>
|
|
|
<li>il ne spécifie pas rigidement le comportement du fichier exécutable produit, ce qui aide à tirer parti des capacités propres à chaque ordinateur ;</li>
|
|
|
<li>il permet, par la compilation directe vers le langage machine (via l'assembleur), l'écriture de logiciels qui n'ont besoin d'aucun support à l'exécution (ni bibliothèque logicielle ni machine virtuelle), au comportement prévisible en temps d'exécution comme en consommation de mémoire vive, comme des noyaux de système d'exploitation et des logiciels embarqués.</li>
|
|
|
<h4>principaux inconvénients</h4>
|
|
|
<li>le peu de vérifications offertes par les compilateurs d'origine (k&r c), et l'absence de vérifications à l'exécution, ce qui fait que des erreurs qui auraient pu être automatiquement détectées lors du développement ne l’étaient qu’à l'exécution, donc au prix d’un plantage du logiciel ;
|
|
|
<ul>
|
|
|
<li>sous unix, on pouvait utiliser les utilitaires lint et cflow pour éviter de tels mécomptes,</li>
|
|
|
<li>des vérifications sont ajoutées avec le temps, mais elles restent partielles,</li>
|
|
|
</ul>
|
|
|
</li>
|
|
|
<li>son approche de la modularité restée au niveau de ce qui se faisait au début des années 1970, et largement dépassée depuis par d'autres langages :
|
|
|
<ul>
|
|
|
<li>il ne facilite pas la programmation orientée objet,</li>
|
|
|
<li>il ne permet pas de créer des espaces de noms,</li>
|
|
|
</ul>
|
|
|
</li>
|
|
|
<li>la gestion d'exceptions très sommaire ;</li>
|
|
|
<li>le support très limité de la généricité, malgré l’introduction des expressions à type générique en c11 ;</li>
|
|
|
<li>les subtilités de l'écriture de programmes portables, car le comportement exact des exécutables dépend de l'ordinateur cible ;</li>
|
|
|
<li>le support minimaliste de l'allocation de mémoire et des chaînes de caractères, ce qui oblige les programmeurs à s'occuper de détails fastidieux et sources de bugs ; il n'y a notamment pas de ramasse-miettes standard ;</li>
|
|
|
<li>les bugs graves qui peuvent être causés par un simple manque d'attention du développeur ; tel le dépassement de tampon qui constitue une faille de sécurité informatique exploitable par les logiciels malveillants ;</li>
|
|
|
<li>certaines erreurs ne peuvent être détectées automatiquement qu'à l'aide d'outils supplémentaires et non standardisés, comme lint et valgrind ;</li>
|
|
|
<li>la faible productivité du langage par rapport aux langages plus récents[réf. souhaitée].</li>
|
|
|
</ul>
|
|
|
</article>
|
|
|
|
|
|
</section>
|
|
|
</div>
|
|
|
|
|
|
<footer>
|
|
|
<p>Auteur: Alexandre Agostinho</p>
|
|
|
<p><a href="mailto:alexandre.agostinho@etu.uca.fr">alexandre.agostinho@etu.uca.fr</a></p>
|
|
|
</footer>
|
|
|
|
|
|
</body>
|
|
|
</html>
|