:: wikimiki.org ::
| Typage Fort |
Typage fort
Catégorie:Programmation informatique
En informatique, le typage fort, lorsqu'il est appliqué à un langage de programmation, est utilisé pour décrire comment le langage gère les types de données. « Typage fort » peut avoir plusieurs sens contradictoires selon le contexte. Un langage qui ne relève pas du typage fort, est dit faiblement typé. Voici quelques caractéristiques de langages fortement typés :
# Un langage est fortement typé si le type de donnée est associé au nom de la variable, plutôt qu'à sa valeur. Si le type est attaché à la valeur, le langage est faiblement typé.
# Un langage est fortement typé si le compilateur est capable de déceler des erreurs de typage. Si les erreurs de typage ne sont reconnues qu'à l'exécution, le langage est faiblement typé.
# Un langage est fortement typé si la compilation ou l'exécution peuvent détecter des erreurs de typage. Si ces erreurs ne sont jamais reconnues, le langage est faiblement typé.
# Un langage est fortement typé si les conversions implicites de types sont formellement interdites. Si de telles conversions sont possibles, le langage est faiblement typé.
# Un langage est fortement typé si les conversions entre types doivent être explicitement décrites. Si des conversions implicites sont utilisées, le langage est faiblement typé.
# Un langage est fortement typé si aucun mécanisme du langage ne permet de passer outre les interdits de trans-typage. Si ces mécanismes existent, comme le transtypage (appelé cast en anglais) en langage C, le langage est faiblement typé.
# Un langage est fortement typé s'il possède un typage complet, alliant des types simples et des types composés. S’il n'a que quelques types, ou seulement des types simples ou scalaires, le langage est faiblement typé.
# Un langage est fortement typé si le type de ses données est fixe et ne peut varier pendant la durée de la vie de l'objet. Si le type d'une donnée peut changer, le langage est faiblement typé. On appelle cela le typage dynamique.
# Un langage est fortement typé si le système de typage fournit de fortes garanties sur le comportement à l'exécution du programme avant cette exécution. Si les garanties fournies par le système de typage ne sont pas fortes, ce langage est au mieux faiblement typé.
Quelques unes de ces définitions sont contradictoires.
Parce qu'il n'y a pas de définition claire de ce qui est fortement typé ou non, il est possible de trouver des instructions dans un langage qui le rendent tour à tour fortement typé ou faiblement typé. Ainsi dans les définitions 1, 7 et 8, le langage C est fortement typé, tandis que selon les définitions 4, 5, et 6, il est faiblement typé — en laissant le débat ouvert pour les points 2 et 3 puisque C permet des vérifications pour les types composés, mais pas pour les listes ou les types scalaires. Il est donc facile de trouver des gens convaincus que le 'C' est fortement typé, et tout aussi facile d'en trouver qui affirmeront qu'il est faiblement typé.
Ainsi, un expert en langages de programmation, Benjamin C. Pierce, raconte :
"J'ai passé quelques semaines à essayer de clarifier les terminologies « fortement typé », « statiquement typé », « sûr », etc., et j'ai trouvé cela extraordinairement difficile... L'utilisation de ces termes est si diverse qu'elle les rend presque inutiles."
Catégorie:Programmation informatiqueCette catégorie recence les techniques de programmation en informatique.
Elle n'est pas normalement utilisée pour :
- les langages de programmation
- les compilateurs, les débogueurs, et tous les outils utilisé en programmation
- les architectures
- les algorithmes
qui pourront être rangé dans les sous catégories de :catégorie:développement logiciel.
Catégorie:Développement logiciel
ja:Category:プログラミング
Informatique ko:컴퓨터 과학 ja:情報工学 simple:Computer science th:วิทยาการคอมพิวเตอร์ zh-cn:计算机科学 zh-tw:計算機科學
oc:informatica]
Etymologiquement, Le terme informatique désigne l'automatisation du traitement de l'information par une machine (virtuelle ou physique). Dans son acception courante, l'informatique désigne de façon vague l'ensemble des sciences et techniques en rapport de près ou de loin avec l'information et l'ordinateur. Par exemple, l'informatique désigne aussi bien le matériel informatique que la conception et l'administration de la partie immatérielle d'un ordinateur : les logiciels.
La traduction anglaise étymologique serait informatics, mais l' usage tant en français qu'en anglais fait qu'une meilleure traduction serait probablement computer science, bien que ce terme fasse peut-être référence de façon plus explicite à ce que l'on pourrait appeler informatique fondamentale ou informatique scientifique. En anglais les termes distincts suivants sont utilisés :
- L'informatique fondamentale (Computer Science), ce qui ressort de l' épistémologie procédurale, soit notamment de l'étude des algorithmes, et donc indirectement des logiciels et des ordinateurs.
- L'ingénierie informatique (Computer Engineering), ce qui ressort de la fabrication et de l'utilisation du matériel informatique.
- L'ingénierie logicielle (Software Engineering), ce qui ressort de la modélisation et du développement des logiciels; ceci comprend le traitement des données (Data Processing), ce qui est du domaine de la mise en pratique des traitements de données.
- L'évolution des techniques et des technologies reliées à l'informatique (Information Technology).
Des professions aussi diverses que concepteur, développeur, responsable d'exploitation, ingénieur système, technicien de maintenance, matérielle ou logicielle, chercheur en informatique ou directeur d'un centre de calcul, relèvent du domaine de l'informatique. Néanmoins, le terme informaticien désigne le plus souvent ceux qui conçoivent, déploient et mettent en œuvre des solutions.
Étymologie
Le terme informatique a été créé en mars 1962 par Philippe Dreyfus à partir des mots «information» et «automatique». Il donna ce nom à l'entreprise qu'il venait de fonder, la Société d'Informatique Appliquée, sans breveter le mot informatique.
En France, l'usage officiel du mot a été consacré par Charles de Gaulle qui, en Conseil des ministres, a tranché entre «informatique» et «ordinatique», et le mot fut choisi par l'Académie française en 1967 pour désigner cette nouvelle discipline. En juillet 1968, le ministre fédéral de la Recherche scientifique d'Allemagne, Gerhard Stoltenberg, prononça le mot informatik lors d'un discours officiel au sujet de la nécessité d'enseigner cette nouvelle discipline dans les universités de son pays, et c'est ce mot qui servit aussitôt à nommer certains cours dans les universités allemandes. Le mot informatica fit alors son apparition en Italie et en Espagne, de même quinformatics au Royaume-Uni.
Pendant le même mois de mars 1962 Walter F. Bauer inaugura la société américaine Informatics Inc., qui elle breveta son nom et poursuivit toutes les universités qui utilisèrent ce nom pour décrire la nouvelle discipline, les forçant à se rabattre sur computer science, bien que les diplômés qu'elles formaient étaient pour la plupart des praticiens de l'informatique plutôt que des scientifiques au sens propre. L'Association for Computing Machinery, la plus grande association d'informaticiens au monde, approcha même Informatics Inc. afin de pouvoir utiliser le mot informatics pour remplacer l'expression computer machinery, mais l'entreprise déclina l'offre. La société Informatics Inc. cessa ses activités en 1985, achetée par Sterling Software.
Histoire
Voir l'article détaillé : Histoire de l'informatique
Les origines
Depuis des millénaires, l'Homme a créé et utilisé des outils l'aidant à calculer (abaque, boulier, etc.). Les premières machines mécaniques apparaissent entre le XVIIe et le . La première machine à calculer mécanique réalisant les quatre opérations aurait été celle de Wilhelm Schickard au , mise au point notamment pour aider Kepler à établir les tables rudolphines d'astronomie.
En 1642, Blaise Pascal réalisa également une machine à calculer mécanique qui fut pour sa part commercialisée et dont neuf exemplaires existent dans des musées comme celui des Arts et métiers et dans des collections privées (IBM).
La découverte tardive du mécanisme d'Antikhitère montre que les Grecs de l'Antiquité eux-mêmes avaient commencé à réaliser des mécanismes de calcul en dépit de leur réputation de mépris général pour la technique (démentie d'ailleurs par les travaux d'Archimède).
Cependant, il faudra attendre la définition du concept de programmation (illustrée en premier par Joseph Marie Jacquard avec ses métiers à tisser à cartes perforées, suivi de Boole et Ada Lovelace pour ce qui est d'une théorie de la programmation des opérations mathématiques) pour disposer d'une base permettant d'enchaîner des opérations élémentaires de manière automatique.
L'informatique moderne
L'ère des ordinateurs modernes commença avec les développements de l'électronique pendant la Seconde Guerre mondiale, ouvrant la porte à la réalisation concrète de machines opérationnelles. Au même moment, le mathématicien Alan Turing théorise le premier ce qu'est un ordinateur, avec son concept de machine universelle de Turing.
L'informatique est donc un domaine fraichement développé, même s'il trouve ses origines dans l'antiquité (avec la cryptographie) ou dans la machine à calculer de Blaise Pascal, au . Ce n'est qu'à la fin de la Seconde Guerre mondiale qu'elle a été reconnue comme une discipline à part entière et a développé des méthodes, puis une méthodologie qui lui étaient propres.
Son image a été quelque temps surfaite : parce que les premiers à programmer des ordinateurs avaient été des ingénieurs rompus à la technique des équations différentielles (les premiers ordinateurs, scientifiques, étaient beaucoup utilisés à cette fin), des programmeurs sans formation particulière, parfois d'ailleurs issus de la mécanographie, cherchaient volontiers à bénéficier eux aussi de ce label de rocket scientist afin de justifier des salaires rendus confortables par :
- le prix élevé des ordinateurs de l'époque (se chiffrant en ce qui serait des dizaines de millions d'euros aujourd'hui compte-tenu de l'inflation, il reléguait au second plan les considérations de parcimonie sur les salaires) ;
- l'aspect présenté comme peu accessible de leur discipline et un mythe de difficulté mathématique entretenu autour. En fait, les premiers ordinateurs ne se programmaient pas de façon très différente de celle des calculatrices programmables utilisées aujourd'hui dans les lycées et collèges, et maîtrisées par des élèves de quatorze ans mais le domaine était nouveau et l'algorithmique nécéssite un certain degré de concentration associé, peut-être à tort, à la réflexion pure.
L'émergence d'un aspect réellement scientifique dans la programmation elle-même (et non dans les seules applications scientifiques que l'on programme) ne se manifeste qu'avec la série The Art of Computer Programming de Donald Knuth, professeur à l'Université de Stanford, à la fin des années 1960, travail monumental encore inachevé en 2004. Les travaux d'Edsger Dijkstra, Niklaus Wirth et Christopher Strachey procèdent d'une approche également très systématique et elle aussi quantifiée.
On demandait à Donald Knuth dans les années 1980 s'il valait mieux selon lui rattacher l'informatique (computer science) au génie électrique — ce qui est souvent le cas dans les universités américaines — ou à un département de mathématiques. Il répondit : «Je la classerais volontiers entre la plomberie et le dépannage automobile» pour souligner le côté encore artisanal de cette jeune science.
Toutefois, la forte scientificité des trois premiers volumes de son encyclopédie suggère qu'il s'agit là plutôt d'une boutade de sa part. Au demeurant, la maîtrise de langages comme Haskell ou même APL demande un niveau d'abstraction tout de même plus proche de celui des mathématiques que des deux disciplines citées.
La miniaturisation des composants et la réduction des coûts de production, associées à un besoin de plus en plus pressant de traitement des informations de toutes sortes (scientifiques, financières, commerciales...) a entraîné une diffusion de l'informatique dans toutes les couches de l'économie comme de la vie de tous les jours.
Approche fonctionnelle
Comme énoncé ci-dessus, l'informatique est le traitement automatisé de données par un appareil électronique : l'ordinateur ; les germanophones parlent de elektronisch Daten Verarbeitung / EDV (« traitement électronique de données »), les anglophones dinformation technology / IT (« technologies de l'information »), c'est-à-dire :
- données ou informations : in fine, l'ordinateur manipule des nombres (d'où le terme anglais computer, littéralement « calculateur »), mais ces nombres peuvent représenter divers types d'informations :
- des... nombres bien évidemment, dans le cas de calculs scientifiques (flottants) ou comptables (décimal, ou binaire entier)... ;
- un texte, des lettres (caractères), que l'on peut mettre en forme avec un traitement de texte, imprimer, envoyer par courrier électronique... ;
- du dessin vectoriel (CAO, logiciels d'illustration, et de typographie) ;
- des images statiques (photographies) ou animées (vidéo), des hologrammes ;
- des sons, enregistrés (technique du direct to disk) ou bien fabriqués par l'ordinateur (synthétiseur), que ce soient des bruitages, de la musique (cf. musique et informatique) ou de la parole ;
:la conversion de ces informations en suite de nombres pose le problème du format des données, du codage et des formats normalisés (par exemple, représentations des nombres entiers ou à virgule flottante, format ASCII, Unicode, TeX ou RTF et polices PostScript ou TrueType pour les textes, formats bitmap, TIFF, JPEG, PNG, etc. pour les images fixes, formats QuickTime, MPEG pour les vidéos, interface MIDI pour la musique...).
- automatisé : l'utilisateur n'intervient pas, ou peu, dans le traitement des données ; le traitement est défini dans un programme qui se déroule tout seul, l'utilisateur se contente de fournir des paramètres de traitement ; le programme automatique se déroule selon un algorithme, l'établissement de ce programme est le domaine de la programmation.
- traitement : ces données sont :
- créées :
- nombres : acquisition automatique de données d'une expérience avec un ordinateur ;
- texte : taper un texte au clavier ;
- images : dessins réalisés à la souris ou sur une tablette graphique, synthèse d'image (pour présenter un projet – objet fictif en cours de conception –, imagerie médicale, dessin artistique – infographie –, film d'animation ou pixilation) ou numérisation d'une image existante (scanner, appareil photographique numérique) ou d'images animées (caméra numérique, webcam) ;
- sons enregistrés (microphone) ou recréés à partir d'une partition virtuelle (synthétiseur) ou d'un texte (synthèse vocale).
- analysées :
- nombres : l'analyse des nombres relève du domaine concerné (mathématiques, physique, économie...) ;
- texte : rechercher les occurrences de mots dans un texte pour en tirer des statistiques, aide à la correction orthographique et/ou grammaticale, et, plus généralement, traitement automatique des langues (TAL) ;
- images : on peut vouloir identifier un objet (reconnaissance de forme, reconnaissance des caractères ou OCR), ou bien déterminer la surface couverte par une couleur (par exemple pour quantifier une surface recouverte) ;
- sons : analyse spectrale, reconnaissance vocale.
- modifiées :
- nombres : calculs ;
- texte : modification d'un texte existant, traduction automatique dans une autre langue (ou langage de programmation) ;
- images : modification du contraste, de la luminosité, des couleurs, effets spéciaux ;
- sons : application d'effets (réverbération, distorsion, ajustement de la hauteur) ;
::comme il existe, selon les programmes et les besoins, une grande variété de codages possibles pour représenter chaque type d'information, beaucoup de traitements consistent à convertir les données d'un format vers un autre...
- archivées puis restituées :
- les moyens et techniques d'archivage varient en fonction de la durée de conservation souhaitée et des quantités de données en jeu : mémoires électroniques, bandes magnétiques, disques magnétiques ou optiques ;
- les moyens de restitution dépendent de la nature des données : écrans ou imprimantes pour le texte et les images, haut-parleurs ou instruments MIDI pour les sons...
Approche organisationnelle
L'informatique pour l'organisation est un élément d'un système de traitement d'information (les entrées peuvent être des formulaires papier par exemple) et d'automatisation. Depuis Henry Ford, l'automatisation des tâches ayant été identifiée comme un avantage concurrentiel, la question est : que peut-on automatiser ?
Autant il est relativement facile d'automatiser des tâches manuelles, autant il est difficile d'automatiser le travail intellectuel et parfois créatif. L'approche de l'informatique dans une organisation commence donc par l'élucidation des processus, c'est-à-dire modéliser le métier. Après validation, la MOA (Maîtrise d'Ouvrage) fournit les spécifications fonctionnelles de (l'ouvrage) qui vont servir de référence dans la conception pour la MOE (Maîtrise d'œuvre).
Cette conception sera alors effectuée dans le respect d'un Cycle de développement qui définit les rôles et responsabilités de chaque acteur. Ainsi, les échanges entre MOA et MOE ne se résument pas à la maîtrise des chantiers (tenue des délais et des coûts, et validation des livrables), la MOA et la MOE sont garantes (éventuellement responsables sur un plan juridique) de la cohérence des systèmes d'information, et de l'adéquation des solutions informatiques avec les problèmes utilisateurs finaux initialement constatés.
Matériel
Article détaillé : Matériel informatique
On utilise également le terme anglais hardware (littéralement « quincaillerie ») pour désigner le matériel informatique. Il s'agit de tous les composants que l'on peut trouver dans :
1. Les ordinateurs et leurs périphériques : un ordinateur est un ensemble de circuits électroniques permettant de manipuler des données sous forme binaire, représentées par des variations de signal électrique. Il existe différents types d'ordinateurs :
ordinateur 5150 datant de 1981, Système d'exploitation IBM-DOS 2.0]]
- Les micro-ordinateurs.
De bureau ou portables. Ils sont composés d'une unité centrale : un boîtier contenant la carte mère, l'alimentation, des unités de stockage. On y ajoute une console : un écran et un clavier. Divers périphériques peuvent leur être ajoutés, une souris, une imprimante, un scanner..ect;
scanner
- Les stations de travail.
Des micro-ordinateurs particulièrement puissants et chers, utilisés uniquement pour des besoins professionnels pointus (conception assistée par ordinateur). Ce terme était particulièrement en vogue dans les années 1980-1990. Depuis les années 2000, il n'est guère possible de concevoir une station de travail plus puissante qu'un micro-ordinateur haut de gamme ;
- Les mainframes.
Une armoire abrite l'unité centrale et l'alimentation, une ou plusieurs autres les périphériques de stockage (disque dur, sauvegarde) tandis que les moyens de communication et réseau (routeur, hubs, modem) sont dans la même pièce, mais dans des racks séparés. Une console d'administration (écran, clavier, imprimante) est généralement située dans ce même local ;
administration]
- Les PDA (Personal Digital Assistant, encore appelés organiseurs).
Ce sont des ordinateurs de poche proposant des fonctionnalités liées à l'organisation personnelle (agenda, calendrier, carnet d'adresse, etc.). Ils peuvent être reliés à Internet par différents moyens (réseau Wifi, Bluetooth, etc.).
- Et bien d'autres appareils.
Dans le domaine de l'informatique embarquée : téléphone, électroménager, automobile, armements militaires, etc.
Les cartes à puces, ou l'informatique industrielle.
Logiciel
Le logiciel désigne la partie à première vue immatérielle de l'informatique, l'organisation et le traitement de l'information : les programmes. On s'est en effet vite rendu compte que des machines techniquement très avancées pour leur époque, comme la Bull Gamma 60, restaient invendables tant qu'on n'avait pas de programmes à livrer pour les rendre immédiatement opérationnelles. IBM lança entre 1968 et 1973 une sorte d'ancêtre du logiciel libre avec son ordinateur 1130, politique qui assura à celui-ci par effet boule de neige un succès immédiat et planétaire, mais les conclusions d'un procès antitrust lui interdirent de distribuer bénévolement du logiciel.
Le monde des mainframes classe les logiciels en catégories suivantes :
- systèmes d'exploitation ;
- bases de données, comme DB2, Ingres ou Oracle ;
- programmes de communication, comme NCP ou RSCS ;
- moniteurs de télétraitement ;
- systèmes transactionnels, comme CICS ;
- systèmes de temps partagé, utilisés pour le calcul ou le développement ;
- compilateurs traduisant les langages en instructions machine et appels système ;
- tout le reste entrait en une catégorie nommée Logiciels applicatifs.
Plus simplement on distingue généralement trois types de logiciels (par ordre de proximité du matériel) :
- le firmware
- le système d'exploitation
- les logiciels et applications utilisateur (en anglais software)
On classe aussi les logiciels en libre et propriétaire, bien que les deux soient parfois panachés à des degrés divers. Certains ont une fonction bureautique ou multimédia comme par exemple les jeux vidéo. Certains logiciels ont acquis des noms connus de tous.
Le noyau du système d'exploitation crée le lien entre le matériel et le logiciel. Un logiciel, quand il est fourni sous sa forme binaire, serait utilisable uniquement avec un système d'exploitation donné (car il en utilise les services), et ne fonctionnerait que sur un matériel spécifique (car il en utilise le code d'instructions). Une conception plus récente, depuis le milieu de années 1980, consiste à distribuer les logiciels tous binaires confondus, et à les munir d'un système de licences par jetons ou tokens permettant l'usage de N copies simultanées du logiciel sur le réseau, tous matériels confondus. Cette approche est majoritaire dans le monde UNIX.
À l'initiative de Richard Stallman et du GNU, à partir de 1985, une mouvance de programmeurs refuse cette logique propriétaire et ceux-ci se muent en concepteurs inventifs pour se lancer dans le développement d'outils et de bibliothèques système libres compatibles avec le système UNIX. C'est pourtant le projet indépendant Linux, initié par Linus Torvalds, basé sur les travaux et les outils du GNU, qui aboutira dans la création d'un système d'exploitation complet et libre.
Une bonne partie des logiciels actuels fonctionnent dans un environnement graphique pour interagir avec l'utilisateur.
La diversité des systèmes informatiques a fait apparaître une technique visant à combiner le meilleur de chacun de ces univers : l'émulateur.
Il s'agit d'un logiciel permettant de simuler le comportement d'un autre système dans celui que l'on utilise,
- soit pour qu'une machine semble être une autre (voir IBM 1130),
- soit pour simuler le comportement d'un système d'exploitation (par exemple DOS ou Windows sous Linux).
Le terme anglais est software, à l'origine un jeu de mot entre hardware (« quincaillerie », pour désigner le matériel) et l'opposition soft/hard (mou/dur), opposition entre le matériel (le dur) et l'immatériel (le mou). Les traductions françaises matériel et logiciel rendent parfaitement cette opposition et cette complémentarité.
Le logiciel réalise normalement une fonction attendue de ses utilisateurs. Néanmoins, des effets secondaires (parfois nommés par contresens de traduction effets de bord) existent. Parfois même, certains logiciels sont destinés à nuire, comme les virus informatiques, nommés en anglais, par analogie avec software : malware (qu'on pourrait traduire par le néologisme nuisiciel, ou logiciel malveillant).
La création des logiciels
Un projet informatique s'inscrit dans un cycle de développement qui définit les grandes étapes de la réalisation (planification), de la manière dont on passe d'une étape à l'autre (modèle incrémental, en V, en spirale, etc.). Pour les petits projets (ou les petites équipes de développement), cette réflexion est souvent négligée (on se répartit les modules et chacun développe dans son coin). Ceci est une cause fréquente d'erreurs (bogues) et de non-conformité (le produit final n'est pas conforme aux attentes de l'utilisateur). Mais même les énormes projets, avec beaucoup de moyens, sont victimes de cette négligence ; ainsi, l'échec du premier vol d'Ariane 5 fut dû à un problème de logiciel, etc. Un projet peut alors intégrer une approche de la qualité et de la sûreté de fonctionnement des systèmes informatiques afin de contrôler autant que possible le produit final.
Un projet comprend les étapes suivantes :
- l'établissement d'un cahier des charges qui définit les spécifications auxquelles devra répondre le logiciel ;
- la définition de l'environnement d'exécution (architecture informatique) :
- type(s) d'ordinateur sur lequel le logiciel doit fonctionner (station de calcul, ordinateur de bureau, ordinateur portable, assistant personnel, téléphone portable, guichet automatique de banque, ordinateur embarqué dans un véhicule ;
- type et version du(des) système(s) d'exploitation sous-jacent ;
- périphériques nécessaires à l'enregistrement des données et à la restitution des résultats (capacité de stockage, mémoire vive, possibilités graphiques...) ;
- nature des connexions réseau entre les composants (niveau de confidentialité et de fiabilité, performances, protocoles de communication...) ;
- la conception de l'application et de ses constituants, et notamment de l'interactivité entre les modules développés : structure des données partagées, traitement des erreurs générées par un autre module... : c'est le domaine du génie logiciel ;
- la mise en place d'une stratégie de développement :
- répartition des tâches entre les développeurs ou les équipes de développement, qui vont assurer le codage et les tests ;
- le plan de test du logiciel, pour s'assurer qu'il remplit bien la mission pour laquelle il a été écrit, dans toutes les conditions d'utilisation qu'il pourra normalement rencontrer, mais aussi dans des cas limites.
Après chacune de ces phases, on peut avoir une étape de recette, où le client va valider les choix et les propositions du maître d'œuvre.
La phase de programmation consiste à décrire le comportement du logiciel à l'aide d'un langage de programmation. Un compilateur sert alors à transformer ce code écrit dans un langage informatique compréhensible par un humain en un code compréhensible par la machine, le résultat est un exécutable. On peut également, pour certains langages de programmation, utiliser un interpréteur qui exécute un code au fur et à mesure de sa lecture, sans nécessairement créer d'exécutable. Enfin, un intermédiaire consiste à compiler le code écrit vers du bytecode. Il s'agit également d'un format binaire, compréhensible seulement par une machine, mais il est destiné à être exécuté sur une machine virtuelle, un programme qui émule les principales composantes d'une machine réelle. Le principal avantage par rapport au code machine est une portabilité théoriquement accrue (il « suffit » d'implanter la machine virtuelle pour une architecture donnée pour que tous les programmes en bytecode puissent y être exécutés), portabilité qui a fait, après sa lenteur, la réputation de Java. Il convient de noter que ces trois modes d'exécution ne sont nullement incompatibles. Par exemple, OCaml dispose à la fois d'un interpréteur, d'un compilateur vers du bytecode, et d'un compilateur vers du code natif pour une grande variété de processeurs. Une fois écrit (et compilé si nécessaire), le code devient un logiciel.
Pour des projets de grande amplitude, nécessitant la collaboration de beaucoup de programmeurs, voire de plusieurs équipes, on a souvent recours à une méthodologie commune (par exemple MERISE) pour la conception et à un atelier de génie logiciel (AGL) pour la réalisation.
Au cours de la programmation et avant la livraison du produit final, le programme est testé afin de vérifier qu'il fonctionne bien (y compris dans des cas d'utilisation en mode dégradé) et qu'il est conforme aux attentes de l'utilisateur final. Les tests intermédiaires permettent de s'assurer que chaque module de code réalise correctement une fonction : ce sont les tests unitaires. Les tests finals qui vérifient le bon enchaînement des modules et des traitements sont des tests d'intégration.
Pour certaines applications demandant un haut niveau de sûreté de fonctionnement, les tests sont précédés d'une étape de vérification, où des logiciels spécialisés effectuent (généralement sur le code source, mais parfois aussi sur le code compilé) un certain nombre d'analyses pour vérifier partiellement le bon fonctionnement du programme. Il n'est toutefois pas possible (et des théorèmes mathématiques montrent pourquoi), de garantir la parfaite correction de tout logiciel par ce moyen et la phase de test reste donc nécessaire. Elle se complète aussi, lorsqu'il s'agit d'une évolution d'une application existante, de nombreux tests automatisés de non-régression.
Statistiques : la création d'un logiciel est une tâche ardue ; environ 31 % des projets informatiques sont abandonnés avant d'être terminés, plus de 50 % des projets coûtent le double du coût initialement estimé et seulement 15 % des projets finissent dans les temps et selon le budget défini. Les besoins de seule maintenance de l'existant peuvent prendre jusqu'à 50 % des effectifs d'une équipe chargée d'un logiciel (or, c'est là une fonction pénible, ingrate, peu valorisante et qui rebute et démotive les bons programmeurs).
Traitement de l'information
L'information, pour être traitée, doit être :
- représentée par un codage :
- on utilise un système de numération binaire, où l'élément unitaire informationnel est le bit (contraction de l'anglais binary digit : chiffre binaire). Les bits sont généralement regroupés par huit, pour constituer des octets (ou bytes). Un octet peut être représenté par la séquence des bits qui le constituent (par exemple : 00101110) ou par une paire de valeurs hexadécimales (pour le même exemple : 2E), plus compact. Le choix du binaire ne résulte pas de la mystique, mais tout simplement d'utiliser de simples circuits de commutation, qui ont de très larges tolérances et par conséquent de faibles coûts ;
- on représente la structuration de l'information pour permettre des échanges entre composants logiciels et entre composants matériels. Pour cela, on définit des langages et des formalismes de représentation.
- stockée dans des systèmes permanents (mémoires dites de masse) ou non (mémoires dites volatiles).
Échanges de données : protocoles et normes
Les protocoles définissent une manière de procéder, notamment pour codifier la façon dont deux entités communiquent (modules ou couches logicielles, périphériques, etc.). On parle notamment de protocole de communication lorsqu'on veut définir des mécanismes de contrôle sur la manière dont l'échange d'information est réalisé.
Un protocole peut ainsi définir :
- un langage de description d'instructions et de données graphiques (exemple : AGP) ;
- un standard de commandes et de flux d'information pour une mémoire de masse (exemples : SCSI, FireWire, IDE, Serial ATA) ;
- des échanges entre le processeur et des cartes d'extension (exemples : PCI, PCI Express, ISA) ;
- des modalités de transfert d'information entre périphériques (exemple : USB) ou sur un réseau TCP/IP, Internet, ATM, X.25) ;
- des commandes entre un client et un serveur (exemples : POP3, IMAP, HTTP, FTP …) ;
- des échanges de données informatisés spécifiques (exemples : EDI, EAI, X.400, X.500).
Certains protocoles sont définis par des normes pour permettre l'interopérabilité des matériels ou de logiciels les mettant en œuvre. D'autres normes définissent, toujours dans le domaine de l'échanges de données :
- des langages de représentation d'information sans pour autant définir la manière dont cette information peut être échangée (exemples : ASN.1, XML) ;
- des architectures de réseaux (exemples : Modèle OSI, Wifi, Ethernet, Token-Ring).
Stockage des données
En matière de stockage d'information, on distingue le dispositif permettant de l'enregistrer physiquement (périphériques et composants) de la manière dont on structure et représente l'information pour faciliter son traitement.
Mémoire de masse
:Fichier de cartes perforées
:Bande magnétique
:Disque amovible magnétique (Disquette)
:Disque magnéto-optique
:Disque dur (disque magnétique embarquant le mécanisme, l'électronique et les têtes de lecture)
:Disque optique amovible (CD-ROM, CD-R, CD-RW mais aussi DVD-ROM, DVD-R, DVD-RW, DVD+R, DVD+R DL, DVD+RW, DVD-RAM, GD-ROM, HD-DVD, Blu-ray)
:Mémoire électronique non volatile (Mémoire flash, clé USB)
Mémoire volatile
:RAM
Organisation des données en vue du stockage
:Formats (extensions) de fichiers
:Système de fichiers
:Base de données
:Annuaire
Approches scientifiques
En dehors des aspects industriels et technologiques décrits jusqu'ici, l'informatique est une discipline scientifique à part entière.
:Algorithmique
:Algèbre de Boole
:Calculabilité
:Géométrie algorithmique
:Lambda-calcul
:Logique
:Model checking
:Théorie de l'information
:Théorie des graphes
:Théorie de la complexité
:Théorie de la calculabilité
:Théorie des automates finis
Applications
:Bio-informatique
:Calcul parallèle
:Cryptographie
:Exploration de données (data mining)
:Informatique grand système (mainframe)
:Informatique de gestion
:Informatique industrielle
:Informatique décisionnelle
:Imagerie Informatique
:Intelligence artificielle
:Interface homme-machine
:Micro-informatique
:Traitement du signal
:Hypermédias
:Informatique musicale
Annexes
- Informathèque
- Abréviations en informatique
- Dictionnaire informatique
- Informatique alternative
- Liste des articles d'informatique
- Personnes célèbres en informatique
- Revues informatiques sur papier
- Sécurité informatique
- Sites d'informations sur internet
- Terminologie de la distribution informatique
- Réseaux de neurones
- Musique et informatique
- Ordinateur quantique
- Hello_world
- Visual Information Exploration
-
Variable ja:変数
Catégorie:Programmation informatique
Dans un langage de programmation, une variable associe un nom (un symbole)
à une valeur qui peut éventuellement varier au cours du temps.
Plus précisément une variable dénote une valeur. Les capacités et l'utilisation des variables varient pour chaque langage.
En mathématiques, une variable représente une quantité inconnue. Dans les autres domaines comme la physique, la biologie ou la chimie, la variable représente un paramètre mesurable comme la température, le temps ou l'intensité.
Nom des variables
Dans certains langages, les noms de variables doivent nécessairement commencer par une lettre (majuscule ou minuscule) ou par un _ (souligné). Les autres caractères composant le nom de la variable doivent être une lettre, un chiffre ou un _.
La différenciation des majuscules et des minuscules (sensibilité à la casse) dans le nom d'une variable est laisée à la discrétion des langages.
Exemples de noms de variables valides, en C :
- _var
- __var2
- Var
Exemple de nom de variable non valide en C :
- 2var
Ainsi, le premier caractère ne peut être un chiffre, car cela permet de faciliter la compilation ou l'interprétation du programme en ôtant une ambiguïté : quand le compilateur lit un chiffre, il sait que les caractères qui suivront constitueront une valeur numérique. De même, s'il lit une lettre ou un souligné, il saura qu'il a affaire à une variable.
Tous ces noms de variables sont valides en Lisp.
Typage
Lorsque le type d'une variable est déterminée à la compilation (explicitement par le programmeur ou automatiquement par inférence de types), on parle de typage statique. Les valeurs de cette variable devront être obligatoiremnt de ce type (au sens large, c'est-à-dire du même type ou d'un sous-type de ce type)
Le typage statique aide à la généreration de code objet plus sûr (sans erreur de type à l'exécution) et plus efficace (en consommation mémoire et vitesse d'exécution). Il interdit toutefois la réflexivité à l'exécution.
Autrement, dans les cas où ce ne sont pas les variables qui ont un type, mais les valeurs, on parle de typage dynamique, ou typage latent.
Cycle de vie des variables
On distingue généralement quatre opérations sur les variables, chacune pouvant revêtir des formes syntaxiques différentes.
- la déclaration permet de déclarer un nom de variable, éventuellement de lui associer un type, ainsi qu'une valeur initiale,
- laffectation consiste à attribuer une valeur à une variable,
- la lecture consiste à utiliser la valeur liée à la variable,
- la suppression réalisée soit automatiquement soit par une instruction du langage.
Les langages, comme le C, Caml ou Pascal, imposent de déclarer une variable voire de lui donner un type avant son usage. La déclaration imposée des variables permet au compilateur ou à l'interpréteur d'identifier les erreurs typographiques comme des variables non déclarées ou des variables homonymes. D'autres langages effectuent la déclaration au moment de la première affectation (c'est le cas de la plupart des langages de script) ou lors de leur première apparition dans le code (comme dans Prolog).
En ce qui concerne l'initialisation des variables, c'est-à-dire l'association d'une première valeur, certains langages imposent d'initialiser une variable avant sa première lecture alors que d'autres fournissent une valeur implicite (spécifiée ou indéterminée). Des langages comme Oz ou Prolog ne réalisent pas à proprement parler d'initialisation. Lors de la déclaration des variables aucune valeur n'est associée, on dit que la variable n'est pas liée. La valeur de la variable est déterminée au fur et à mesure de l'exécution du programme, on parle alors dunification.
Dans les langages de programmation fonctionnelle ou de programmation logique, les variables ne peuvent être associées qu'à une seule valeur au cours de leur existence.
Réflexivité
Dans la plupart des langages, les variable n'existent qu'en tant qu'outils pour le programmeur. Ainsi, renommer toutes les occurrences d'une variable ne modifira pas le fonctionnement du programme.
Au contraire, pour offrir une expressivité supplémentaire, certains langages permettent de considérer un nom de variable comme une valeur comme une autre (par exemple, ce sont les symboles de Common Lisp et Smalltalk). C'est une technique très utile pour implémenter efficacement des algorithmes de calcul symbolique.
Voir aussi
- Espace de noms
- Variable locale
- Variable globale
Compilateur
Un compilateur est un programme informatique qui traduit un langage, le langage source, en un autre, appelé le langage cible, en préservant la signification du texte source. Ce schéma général décrit un grand nombre de programmes différents ; et ce que l'on entend par « signification du texte source » dépend du rôle du compilateur. Lorsque l'on parle de compilateur, on suppose aussi en général que le langage source est, pour l'application envisagée, de plus haut niveau que le langage cible, c'est-à-dire qu'il présente un niveau d'abstraction supérieur.
En pratique, un compilateur sert le plus souvent à traduire un code source écrit dans un langage de programmation en un autre langage, habituellement un langage d'assemblage ou un langage machine. Le programme en langage machine produit par un compilateur est appelé code objet.
Le premier compilateur a été écrit par Grace Hopper.
Structure d'un compilateur
La tâche principale d'un compilateur est de produire du code objet correct. La plupart des compilateurs permettent d'optimiser le code (le code objet optimisé s'exécutera plus rapidement, ou aura une occupation mémoire moindre).
Un compilateur fonctionne par analyse-synthèse, c'est-à-dire qu'au lieu de remplacer chaque construction du langage source par une suite équivalente de constructions du langage cible, il commence par analyser le texte source pour en construire une représentation intermédiaire qu'il traduit à son tour en langage cible.
Il est donc naturel de séparer — au moins conceptuellement, mais aussi en
pratique — le compilateur en une partie avant (ou frontale), parfois appelée « souche », qui lit le texte source et produit la représentation intermédiaire, et une partie arrière (ou finale), qui parcourt cette représentation pour produire le texte cible. Dans un compilateur idéal, la partie avant est indépendante du langage cible, tandis que la partie arrière est indépendante du langage source. Certains compilateurs effectuent de plus sur la forme intermédiaire des traitements substantiels, que l'on peut regrouper en une partie centrale, indépendante à la fois du langage source et de la machine cible. On peut ainsi écrire des compilateurs pour toute une gamme de langages et d'architectures en partageant la partie centrale, à laquelle on attache une partie avant par langage et une partie arrière par architecture.
Les étapes de la compilation incluent
- le découpage du programme en lexèmes (analyse lexicale) ;
- la vérification de la correction de la syntaxe du programme (analyse syntaxique) ;
- l'analyse des structures de données (analyse sémantique) ;
- la transformation du code source en code intermédiaire ;
- l'application de techniques d'optimisation sur le code intermédiaire ;
- l'allocation de registres et la traduction du code intermédiaire en code objet, avec éventuellement l'insertion de données de débogage et d'analyse de l'exécution ;
- enfin vient la phase d'édition des liens.
Ces différentes étapes expliquent que les compilateurs fassent toujours l'objet de recherches, particulièrement dans le domaine de l'optimisation du code produit.
Compilateurs particuliers
Compilateur croisé
Un compilateur croisé (en anglais cross compiler) est un programme capable de traduire un code source en code objet ayant un environnement d'exécution (architecture matérielle, système d'exploitation) différent de celui où la compilation est effectuée. Ces compilateurs sont principalement utilisés en informatique industrielle.
Byte code
Certains compilateurs traduisent un langage source en langage machine virtuel, c'est-à-dire en un code exécuté par une machine virtuelle : un programme émulant les principales fonctionnalités d'un ordinateur. Le portage d'un programme ne requiert ainsi que le portage de la machine virtuelle. C'est le cas du compilateur Java, qui traduit du code Java en bytecode Java (code objet). Une machine virtuelle DotNet peut exécuter du bytecode MSIL produit par les langages de Microsoft C#, Visual Basic ou autres.
Autres compilateurs
Si la plupart des compilateurs traduisent un code d'un langage de programmation vers un autre, ce n'est pas le cas de tous les compilateurs. Par exemple, le logiciel LaTeX compile un code écrit dans le langage de formatage de texte LaTeX, pour le convertir en un autre langage, par exemple DVI, HTML, PostScript...
Le problème de l'amorçage (bootstrap)
Les premiers compilateurs étaient écrits directement en langage assembleur, un langage symbolique élémentaire correspondant aux instructions du processeur cible et quelques structures de contrôle légèrement plus évoluées. Ce langage symbolique doit être assemblé (et non compilé) et lié pour obtenir une version exécutable. En raison de sa simplicité, un programme simple suffit à le convertir en instructions machines.
Les compilateurs actuels sont généralement écrits dans le langage qu'ils doivent compiler ; par exemple un compilateur C est écrit en C, SmallTalk en SmallTalk, Lisp en Lisp, etc. Dans la réalisation d'un compilateur, une étape décisive est franchie lorsque le compilateur pour le langage X est suffisamment complet pour se compiler lui-même : il ne dépend alors plus d'un autre langage (fut-ce de l'assembleur) pour être produit.
Les bugs des compilateurs sont parfois très complexes à détecter. Si un compilateur de langage C comporte un bug, les programmeurs en langage C auront naturellement tendance à mettre en cause leur propre code source, non pas le compilateur.
Pire, si ce compilateur bogué (version V1) compile un compilateur (version V2) non bogué, l'exécutable compilé (par V1) du compilateur V2 sera bogué. Pourtant son code source est bon. Le bootstrap oblige donc les programmeurs de compilateurs à contourner les bugs des compilateurs existants.
Articles connexes
- Interpréteur
- Informatique
- compilateur de compilateur
Lien externe
- [http://perso.club-internet.fr/cdridi Exemple d'interpréteur et de partie-avant d'un compilateur].
- [http://www.idiom.com/free-compilers Liste de compilateurs gratuits et/ou libres]
Catégorie:Compilateur
ja:コンパイラ
ko:컴파일러
simple:Compiler
th:ตัวแปลโปรแกรม
Langage C
En informatique, C est un langage de programmation impératif.
C’est un des langages les plus utilisés pour trois raisons :
- il est très facile à porter d’une machine à une autre (le compilateur est écrit en C : il y a juste à changer les routines de génération de code et à le faire se compiler lui-même pour une machine cible),
- il est relativement facile à comprendre à première vue, étant plus pauvre en concepts que le C++, par exemple,
- il n’est pas très éloigné de la machine.
Ses principaux inconvénients sont :
- il encourage le programmeur négligent à produire du code non portable ,
- il nécessite beaucoup d'attention du programmeur pour ne pas introduire de bugs, notamment via les manipulations de pointeurs ,
- il y a un certain nombre de points subtils et mal connus du langage.
Histoire
Le langage C est apparu 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 Ken Thompson. Ken Thompson avait développé un prédécesseur de C, le langage B. Dennis Ritchie a fait évoluer le langage B dans une nouvelle version suffisamment différente pour qu’elle soit appelée C. Par la suite, Brian Kernighan aida à populariser le langage. Il procéda aussi à quelques modifications de dernière minute. En 1978, il fut notamment le principal auteur du livre The C Programming Language décrivant le langage enfin fixé ; Ritchie s’était occupé des appendices et des exemples avec UNIX. On parle encore de K&R C (pour Kernighan and Ritchie C) lorsqu’on se réfère au langage tel qu’il existait à cette époque.
En 1983, l’institut national américain de normalisation (ANSI) a formé un comité de normalisation du langage qui a abouti en 1989 à l’approbation de la norme dite ANSI C ou C89 (formellement ANSI X3.159-1989). En 1990, cette norme a également été adoptée par l’ISO (formellement ISO/CEI 9899:1990). ANSI C est une évolution du K&R C qui reste extrêmement compatible. Elle reprend quelques idées de C++.
En 1999, une nouvelle évolution du langage est normalisée par l’ISO : C99 (ISO 9899). Parmi les ajouts, on notera des fonctionnalités déjà présentes dans certains compilateurs comme gcc, ainsi que des fonctionnalités (types complexes, mot-clef « restrict », directives agissant sur la simplification des instructions arithmétiques) souhaitables pour les calculs numériques intensifs, domaine habituel de FORTRAN.
Description
Le langage C peut être qualifié de bas niveau ou peu typé dans le sens où le langage manipule les mêmes sortes d’objets que la plupart des ordinateurs : des mots machine (pouvant contenir une donnée interprétée comme un nombre, un caractère ou une adresse). Le langage ne propose aucune opération qui traite directement des objets de plus haut niveau (fichier, chaîne de caractères, liste...) et il faut donc faire appel à des fonctions de la bibliothèque standard pour manipuler ce type d’objet.
Le langage C a été utilisé pour rendre le système d’exploitation UNIX plus portable. Il a conservé de cela une très grande efficacité pour tout ce qui concerne le développement système. Ainsi depuis la majorité des grands systèmes d’exploitation ont été développés en C.
De même, le langage ne propose pas en standard la gestion de la programmation orientée objet, ni de mécanisme d’exception, ou de traitement multitâche. Il existe des fonctions standards pour gérer les entrées-sorties et les chaînes de caractères, mais contrairement à d'autres langages, aucun opérateur spécifique pour améliorer l'ergonomie. Ceci rend aisé le remplacement des fonctions standards par des fonctions spécifiquement conçues pour un programme donné. En autorisant la surcharge des opérateurs, C++ permet de mélanger la souplesse de C à l'ergonomie des opérateurs spécifiques.
Ces caractéristiques en font néanmoins un langage à privilégier quand on cherche à maîtriser les ressources utilisées, le code assembleur généré par les compilateurs étant relativement prévisible et parfois même optimal sur les machines d’architecture RISC à grand nombre de registres.
Ce langage est donc extrêmement utilisé dans des domaines comme :
la programmation embarquée sur microcontrôleurs, les calculs intensifs, l’écriture de systèmes d’exploitation et tous les modules où la rapidité de traitement est importante. Il est en effet une bonne alternative aux langages assembleurs dans ces domaines avec les avantages d’une syntaxe plus lisible et de la portabilité du code.
En contrepartie, la mise au point de programmes en C, surtout s’ils utilisent des structures de données complexes, est plus difficile qu’avec des langages de plus haut niveau. En effet, dans un souci de performance le langage C impose à l’utilisateur de programmer certains traitements (libération de la mémoire, vérification de la validité des index sur les tableaux...) qui sont pris en charge automatiquement par les langages de haut niveau.
Le C étant un langage simple, son compilateur est assez simple. Sur un nouveau microprocesseur, un compilateur C peut être écrit en deux mois. C’est pour cela qu’il est souvent choisi comme premier langage sur une nouvelle architecture. Le compilateur GNU GCC est d’ailleurs écrit en C : seule la partie de génération de code est à modifier quand on porte le compilateur sur une autre machine, par compilation croisée.
Beaucoup de limitations du langage C ont été levées dans le langage C++ qui est, à l'origine, un C avec la notion d’objet.
Beaucoup d’autres langages de programmation ont adopté une syntaxe (notation) ressemblant à celle du langage C, notamment C++, Java, JavaScript, PHP ou C#.
Exemples
Hello world
Voici l’exemple de programme Hello world donné dans The C Programming Language de Brian W. Kernighan et Dennis M. Ritchie :
#include
main()
Le même programme, conformément à la norme ANSI :
#include
int main(void)
- #include <stdio.h> inclut le fichier d'en-tête stdio.h, contenant les déclarations relatifs aux entrées-sorties de la bibliothèque C ANSI.
- main() indique le début de la fonction principale du programme.
- Les accolades entourent le corps de la fonction.
- printf est la fonction standard d'écriture formatée dans la sortie standard (la console par défaut).
- Les caractères " délimitent la chaîne de caractères à afficher.
- Le \n désigne le saut de ligne.
- Le point-virgule ; termine toute instruction.
- La norme ANSI exige qu'un code retour soit explicitement renvoyé.
Quelques instructions C
Instructions du pré-compilateur
#include,
#define,
#pragma (C89),
#if,
#ifdef,
#ifndef,
#elif (C89),
#else,
#endif,
#undef,
#line,
#error.
Mots clés
auto,
break,
case,
const (C89),
continue,
do,
else,
enum (C89),
extern,
for,
goto,
if,
inline (C99),
register,
restrict (C99),
return,
sizeof,
static,
struct,
switch,
typedef,
union,
void (C89),
volatile (C89),
while,
signed (C89),
unsigned,
char,
short,
int,
long,
float,
double,
_Bool (C99),
_Complex (C99),
_Imaginary (C99)
Types
- Types entiers (mot machine) : int, unsigned int
- Types entiers >= 8 bits : char, signed char, unsigned char
- Types entiers >= 16 bits : short, unsigned short
- Types entiers >= 32 bits : long, unsigned long
- Types entiers >= 64 bits (C-99) : long long, unsigned long long
- Types à virgule flottante : float, double, long double (C89)
- Types énumérés : enum
- Types élaborés : struct, union
Quelques défauts du C
- Le C étant dépouillé volontairement de toute fonctionnalité non rudimentaire, même les opérations les plus simples (opérations sur chaînes de caractères, ordres d’entrée-sortie) se font par des fonctions qui ne peuvent se livrer à aucune vérification syntaxique approfondie au moment de la compilation (hormis une vérification élémentaire du type des arguments). Un programme nommé lint tentait de remédier à ce défaut du langage; quelques fonctionnalités de lint furent par la suite intégrées au compilateur lui-même, et splint fut créé pour remplacer lint.
- Chaque programmeur C a au moins une fois écrit par mégarde = au lieu de dans un if()... avec des résultats hautement inattendus, vu qu’une affectation est exécutée au lieu d’un test ! Toutefois, cette erreur classique est signalée par un message d'avertissement par de nombreux compilateurs. Il est généralement recommandé de compiler C en activant les messages d'avertissement.
- Le débordement de tampon peut passer inaperçu et avoir des conséquences dramatiques.
- Les erreurs d’allocation mémoire comme un oubli d’allocation, une double désallocation, ou un accès à une zone non allouée sont très difficiles à éviter. Il faut noter qu'un ramasse-miettes conservateur pour le C existe (le collecteur Böhm-Weiser), sous la forme d'une bibliothèque, mais son utilisation peut être parfois délicate.
Références
Ressources Internet
- [http://cm.bell-labs.com/cm/cs/who/dmr/chist.html The Development of the C Language] par Dennis Ritchie
- [http://www-rocq.inria.fr/codes/Anne.Canteaut/COURS_C/ Cours de C]
- [http://www.isty-info.uvsq.fr/~rumeau/fclc/ FAQ du groupe fr.comp.lang.c]
- [http://www.eskimo.com/~scs/C-faq/top.html comp.lang.c Frequently Asked Questions], très technique, très haute qualité
- Le livre de programmation C sur Wikilivres
- [http://www.cppfrance.com/ CPPFrance ] : site de passionnés qui mettent en commun leurs connaissances - [http://www.codes-sources.com/ CodeS-SourceS]
- [http://c.developpez.com/ Rubrique C] de [http://www.developpez.com/ Developpez.com], premier site francophone d'entraide entre développeurs.
Bibliographie
- B.W.Kernighan D.M.Ritchie, Le langage C, ISBN 2-225-82070-8
Quelques programmes célèbres écrits en C
- UNIX
- La suite de compilateurs GNU Compiler Collection (GCC)
- Le noyau Linux
- Le noyau de Microsoft Windows
- GNOME
Compilateurs C
- [http://gcc.gnu.org/ GCC] (multiples plateformes)
- [http://www.cs.princeton.edu/software/lcc/ LCC] (multiples plateformes)
- [http://www.cs.virginia.edu/~lcc-win32/ LCC Win32] (Windows)
- [http://www.tendra.org/ TenDRA]
- [http://www.ten15.org/ Ten15], un fork de TenDRA
Catégorie:Langage de programmation
Catégorie:Langage impératif
Catégorie:Norme ISO
ja:C言語
ko:C 프로그래밍 언어
ms:Bahasa pengaturcaraan C
th:ภาษาซี
Langage C
En informatique, C est un langage de programmation impératif.
C’est un des langages les plus utilisés pour trois raisons :
- il est très facile à porter d’une machine à une autre (le compilateur est écrit en C : il y a juste à changer les routines de génération de code et à le faire se compiler lui-même pour une machine cible),
- il est relativement facile à comprendre à première vue, étant plus pauvre en concepts que le C++, par exemple,
- il n’est pas très éloigné de la machine.
Ses principaux inconvénients sont :
- il encourage le programmeur négligent à produire du code non portable ,
- il nécessite beaucoup d'attention du programmeur pour ne pas introduire de bugs, notamment via les manipulations de pointeurs ,
- il y a un certain nombre de points subtils et mal connus du langage.
Histoire
Le langage C est apparu 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 Ken Thompson. Ken Thompson avait développé un prédécesseur de C, le langage B. Dennis Ritchie a fait évoluer le langage B dans une nouvelle version suffisamment différente pour qu’elle soit appelée C. Par la suite, Brian Kernighan aida à populariser le langage. Il procéda aussi à quelques modifications de dernière minute. En 1978, il fut notamment le principal auteur du livre The C Programming Language décrivant le langage enfin fixé ; Ritchie s’était occupé des appendices et des exemples avec UNIX. On parle encore de K&R C (pour Kernighan and Ritchie C) lorsqu’on se réfère au langage tel qu’il existait à cette époque.
En 1983, l’institut national américain de normalisation (ANSI) a formé un comité de normalisation du langage qui a abouti en 1989 à l’approbation de la norme dite ANSI C ou C89 (formellement ANSI X3.159-1989). En 1990, cette norme a également été adoptée par l’ISO (formellement ISO/CEI 9899:1990). ANSI C est une évolution du K&R C qui reste extrêmement compatible. Elle reprend quelques idées de C++.
En 1999, une nouvelle évolution du langage est normalisée par l’ISO : C99 (ISO 9899). Parmi les ajouts, on notera des fonctionnalités déjà présentes dans certains compilateurs comme gcc, ainsi que des fonctionnalités (types complexes, mot-clef « restrict », directives agissant sur la simplification des instructions arithmétiques) souhaitables pour les calculs numériques intensifs, domaine habituel de FORTRAN.
Description
Le langage C peut être qualifié de bas niveau ou peu typé dans le sens où le langage manipule les mêmes sortes d’objets que la plupart des ordinateurs : des mots machine (pouvant contenir une donnée interprétée comme un nombre, un caractère ou une adresse). Le langage ne propose aucune opération qui traite directement des objets de plus haut niveau (fichier, chaîne de caractères, liste...) et il faut donc faire appel à des fonctions de la bibliothèque standard pour manipuler ce type d’objet.
Le langage C a été utilisé pour rendre le système d’exploitation UNIX plus portable. Il a conservé de cela une très grande efficacité pour tout ce qui concerne le développement système. Ainsi depuis la majorité des grands systèmes d’exploitation ont été développés en C.
De même, le langage ne propose pas en standard la gestion de la programmation orientée objet, ni de mécanisme d’exception, ou de traitement multitâche. Il existe des fonctions standards pour gérer les entrées-sorties et les chaînes de caractères, mais contrairement à d'autres langages, aucun opérateur spécifique pour améliorer l'ergonomie. Ceci rend aisé le remplacement des fonctions standards par des fonctions spécifiquement conçues pour un programme donné. En autorisant la surcharge des opérateurs, C++ permet de mélanger la souplesse de C à l'ergonomie des opérateurs spécifiques.
Ces caractéristiques en font néanmoins un langage à privilégier quand on cherche à maîtriser les ressources utilisées, le code assembleur généré par les compilateurs étant relativement prévisible et parfois même optimal sur les machines d’architecture RISC à grand nombre de registres.
Ce langage est donc extrêmement utilisé dans des domaines comme :
la programmation embarquée sur microcontrôleurs, les calculs intensifs, l’écriture de systèmes d’exploitation et tous les modules où la rapidité de traitement est importante. Il est en effet une bonne alternative aux langages assembleurs dans ces domaines avec les avantages d’une syntaxe plus lisible et de la portabilité du code.
En contrepartie, la mise au point de programmes en C, surtout s’ils utilisent des structures de données complexes, est plus difficile qu’avec des langages de plus haut niveau. En effet, dans un souci de performance le langage C impose à l’utilisateur de programmer certains traitements (libération de la mémoire, vérification de la validité des index sur les tableaux...) qui sont pris en charge automatiquement par les langages de haut niveau.
Le C étant un langage simple, son compilateur est assez simple. Sur un nouveau microprocesseur, un compilateur C peut être écrit en deux mois. C’est pour cela qu’il est souvent choisi comme premier langage sur une nouvelle architecture. Le compilateur GNU GCC est d’ailleurs écrit en C : seule la partie de génération de code est à modifier quand on porte le compilateur sur une autre machine, par compilation croisée.
Beaucoup de limitations du langage C ont été levées dans le langage C++ qui est, à l'origine, un C avec la notion d’objet.
Beaucoup d’autres langages de programmation ont adopté une syntaxe (notation) ressemblant à celle du langage C, notamment C++, Java, JavaScript, PHP ou C#.
Exemples
Hello world
Voici l’exemple de programme Hello world donné dans The C Programming Language de Brian W. Kernighan et Dennis M. Ritchie :
#include
main()
Le même programme, conformément à la norme ANSI :
#include
int main(void)
- #include <stdio.h> inclut le fichier d'en-tête stdio.h, contenant les déclarations relatifs aux entrées-sorties de la bibliothèque C ANSI.
- main() indique le début de la fonction principale du programme.
- Les accolades entourent le corps de la fonction.
- printf est la fonction standard d'écriture formatée dans la sortie standard (la console par défaut).
- Les caractères " délimitent la chaîne de caractères à afficher.
- Le \n désigne le saut de ligne.
- Le point-virgule ; termine toute instruction.
- La norme ANSI exige qu'un code retour soit explicitement renvoyé.
Quelques instructions C
Instructions du pré-compilateur
#include,
#define,
#pragma (C89),
#if,
#ifdef,
#ifndef,
#elif (C89),
#else,
#endif,
#undef,
#line,
#error.
Mots clés
auto,
break,
case,
const (C89),
continue,
do,
else,
enum (C89),
extern,
for,
goto,
if,
inline (C99),
register,
restrict (C99),
return,
sizeof,
static,
struct,
switch,
typedef,
union,
void (C89),
volatile (C89),
while,
signed (C89),
unsigned,
char,
short,
int,
long,
float,
double,
_Bool (C99),
_Complex (C99),
_Imaginary (C99)
Types
- Types entiers (mot machine) : int, unsigned int
- Types entiers >= 8 bits : char, signed char, unsigned char
- Types entiers >= 16 bits : short, unsigned short
- Types entiers >= 32 bits : long, unsigned long
- Types entiers >= 64 bits (C-99) : long long, unsigned long long
- Types à virgule flottante : float, double, long double (C89)
- Types énumérés : enum
- Types élaborés : struct, union
Quelques défauts du C
- Le C étant dépouillé volontairement de toute fonctionnalité non rudimentaire, même les opérations les plus simples (opérations sur chaînes de caractères, ordres d’entrée-sortie) se font par des fonctions qui ne peuvent se livrer à aucune vérification syntaxique approfondie au moment de la compilation (hormis une vérification élémentaire du type des arguments). Un programme nommé lint tentait de remédier à ce défaut du langage; quelques fonctionnalités de lint furent par la suite intégrées au compilateur lui-même, et splint fut créé pour remplacer lint.
- Chaque programmeur C a au moins une fois écrit par mégarde = au lieu de dans un if()... avec des résultats hautement inattendus, vu qu’une affectation est exécutée au lieu d’un test ! Toutefois, cette erreur classique est signalée par un message d'avertissement par de nombreux compilateurs. Il est généralement recommandé de compiler C en activant les messages d'avertissement.
- Le débordement de tampon peut passer inaperçu et avoir des conséquences dramatiques.
- Les erreurs d’allocation mémoire comme un oubli d’allocation, une double désallocation, ou un accès à une zone non allouée sont très difficiles à éviter. Il faut noter qu'un ramasse-miettes conservateur pour le C existe (le collecteur Böhm-Weiser), sous la forme d'une bibliothèque, mais son utilisation peut être parfois délicate.
Références
Ressources Internet
- [http://cm.bell-labs.com/cm/cs/who/dmr/chist.html The Development of the C Language] par Dennis Ritchie
- [http://www-rocq.inria.fr/codes/Anne.Canteaut/COURS_C/ Cours de C]
- [http://www.isty-info.uvsq.fr/~rumeau/fclc/ FAQ du groupe fr.comp.lang.c]
- [http://www.eskimo.com/~scs/C-faq/top.html comp.lang.c Frequently Asked Questions], très technique, très haute qualité
- Le livre de programmation C sur Wikilivres
- [http://www.cppfrance.com/ CPPFrance ] : site de passionnés qui mettent en commun leurs connaissances - [http://www.codes-sources.com/ CodeS-SourceS]
- [http://c.developpez.com/ Rubrique C] de [http://www.developpez.com/ Developpez.com], premier site francophone d'entraide entre développeurs.
Bibliographie
- B.W.Kernighan D.M.Ritchie, Le langage C, ISBN 2-225-82070-8
Quelques programmes célèbres écrits en C
- UNIX
- La suite de compilateurs GNU Compiler Collection (GCC)
- Le noyau Linux
- Le noyau de Microsoft Windows
- GNOME
Compilateurs C
- [http://gcc.gnu.org/ GCC] (multiples plateformes)
- [http://www.cs.princeton.edu/software/lcc/ LCC] (multiples plateformes)
- [http://www.cs.virginia.edu/~lcc-win32/ LCC Win32] (Windows)
- [http://www.tendra.org/ TenDRA]
- [http://www.ten15.org/ Ten15], un fork de TenDRA
Catégorie:Langage de programmation
Catégorie:Langage impératif
Catégorie:Norme ISO
ja:C言語
ko:C 프로그래밍 언어
ms:Bahasa pengaturcaraan C
th:ภาษาซี
Flat-file databaseright
A flat file database is described by a very simple database model, where all the information is stored in a plain text file, one database record per line. Each record is divided into fields using delimiters or at fixed column positions. The data is "flat", as in a sheet of paper, as compared to a more complex model such as a relational database.
Example
The classic example of a flat file database is a basic name-and-address list, where the database consists of a small, fixed number of fields: Name, Address, and Phone Number. Another example is a simple HTML table, consisting of rows and columns. These types of database are so common that we often see one without thinking of it as a database at all.
Let us explore an example database that stores the users of an imaginary miniature version of Wikipedia, "Pico".
Version 1.0: Plain text
The simplest implementation of Pico is shown below, inline in this text. The data -- the information itself -- has simply been written out in table form:
id name team
1 Amy Blues
2 Bob Reds
3 Chuck Blues
4 Dick Blues
5 Ethel Reds
6 Fred Blues
7 Gilly Blues
8 Hank Reds
Note that the data in the first column is "all the same" -- that is, they are all id numbers (serial numbers). Likewise, the data in the second column is "all the same" -- names. We have decided Pico users will gang up into teams, and some belong to the Reds and some to the Blues. All these team designations are found in the third column only. These columns are called "fields".
Also note that all the information in, say, the third line from the top "belongs to" one person: Bob. Bob's id is "2"; his name is "Bob" (no surprise!); and his team is the "Reds". Each line is called a "record". (Sometimes, although this is not strictly correct, the word "field" refers to just one datum within the file -- the intersection of a field and a record.)
The first line is not a record at all, but a row of "field labels" -- names that identify the contents of the fields which they head. Some databases omit this, in which case the question is left open: "What is in these fields?" The answer must be supplied elsewhere.
In this implementation, fields can be detected by the fact that they all "line up": each datum uses up the same number of characters as all other data in the same column; extra spaces are added to make them all the same length. This is a very primitive and brittle implementation, dating back to the days of punch cards.
Today, the same effect is achieved by delimiting fields with a tab character; records are delimited by a newline. This is "tab-separated" format. Other ways to implement the same database are:
"1","Amy","Blues"
"2","Bob","Reds"
"3","Chuck","Blues"
"4","Dick","Blues"
"5","Ethel","Reds"
"6","Fred","Blues"
"7","Gilly","Blues"
"8","Hank","Reds"
-- which is "comma-separated" (CSV) format. We could also write:
1-Amy-Blues/2-Bob-Reds/3-Chuck-Blues/4-Dick-Blues/5-Ethel-Reds/6-Fred-Blues/7-Gilly-Blues/8-Hank-Reds/
All are equivalent databases.
There is not much we can do with such a simple database. We can look at it; if we can edit it at all, we can add new records to it; we can edit the contents of any field. We can import the entire database into another tool. Sometimes this is enough, but only for the most basic needs. Beyond those, we turn to a tool designed for the task.
Version 2.0: Excel
Microsoft Excel has a simple database tool; it uses the term "list", but this means the same thing as "flat file database". Note that the data is still organized in rows and columns; the field labels are up top. Clicking a control allows us to sort the database, in this case by team. Note all the Blues are now on top, ahead of the Reds.
Microsoft Excel
Microsoft Excel
Microsoft Excel
When we created the database, the id numbers were already in order; but we might as well have created them in any random order, and then sorted the list by name or by id. Excel is a spreadsheet tool, designed for calculations with numbers, often very complex. If our database included a "score" field, and we wished to find the total, the average, or the standard deviation, Excel would, indeed, excel.
spreadsheet
Version 3.0: FileMaker
spreadsheet
spreadsheet
The final stage of development of a flat file is shown in a true database management tool, FileMaker. Again, data is shown in rows and columns, with field labels on top. This is called a "list layout" or view. We can also define a "form layout", which shows only one record at a time. For databases with many fields, this may be more convenient. The data itself does not change as we go from form to list layouts; only the way we look at it. We can even design a special form, with unusual formatting; say, to print out as a conference nametag.
----
FileMaker
FileMaker
This kind of implementation allows us to both sort and "find" records. If we sort records by team; we get the same result as we did in Excel -- it's the same function. We can sort on any field, or on more than one field, and choose which field has priority. If we sort on a number field, we sort from 0 to 9; if we sort on a text field, from A to Z. We can sort in ascending order, descending order, or (if previously defined) based on an ordered value list, such as "Days of the Week". (Technically, we are already getting into relationships, because that value list is really a kind of database itself!)
----
FileMaker
FileMaker
We can find, say, the record of the user whose name is "Fred".
----
FileMaker
If we find all records of the Reds team, we will only see the first match in form layout; but we can switch to list layout to see all 3 matches at once. We can also do complex operations, such as finding all Blues team members, then sorting the found records by name.
----
FileMaker
FileMaker
An advantage of a database tool is that it is specifically designed for database management. We can add, delete, or edit records or individual units of data. We can add additional records to the file explicitly, via a "New Record" command; we can define certain processes to take place when this happens. We can add additional fields, too, extending the structure. We can choose to control what kind of data may be stored in a given field. For instance, id is defined to hold only a serial number, which is assigned automatically when a new record is created.
This is about the limit of what a simple flat file can do. For more advanced applications, please see Relational database.
Implementation
It is possible to write out by hand, on a sheet of paper, a list of names, addresses, and phone numbers; this is a flat file database. This can also be done with any typewriter or word processor. But many pieces of computer software are designed to implement flat file databases.
Historical implementations
The first uses of computing machines were implementations of simple databases. Herman Hollerith conceived the idea that any resident of the United States could be represented by a string of exactly 80 digits and letters -- name, age, and so forth, padded as needed with spaces to make everyone's name the same length, so the database fields would "line up" properly. He sold his concept, his machines, and the punched cards which both recorded and stored this data to the US Census Bureau; thus, the Census of 1890 was the first ever computerized database -- consisting, in essence, of thousands of boxes full of punched cards.
Throughout the years following World War II, primitive electronic computers were run by governments and corporations; these were very often used to implement flat file databases, the most typical of which were accounting functions, such as payroll. Very quickly, though, these wealthy customers demanded more from their extremely expensive machines, which led to early relational databases. Amusingly enough, these early applications continued to use Hollerith cards, slightly modified from the original design; Hollerith's enterprise grew into computer giant IBM, which dominated the market of the time. The rigidity of the fixed-length field, 80-column punch card driven database made the early computer a target of attack, the butt of jokes, an idol worshipped, and a mystery to the common man.
In the 1980s, configurable flat-file database computer applications were popular on DOS and the Macintosh. These programs were designed to make it easy for individuals to design and use their own databases, and were almost on par with word processors and spreadsheets in popularity. Examples of flat-file database products were early versions of Filemaker and the shareware PC-File. Some of these offered limited relational capabilities, allowing some data to be shared between files.
Contemporary implementations
Today, there are few programs designed to allow novices to create and use general-purpose flat file databases. This function is implemented in Microsoft Works (available only for some versions of Windows) and AppleWorks, sometimes named ClarisWorks (available for both Macintosh and Windows platforms). Over time, products like Borland's Paradox, and Microsoft's Access started offering some relational capabilities, as well as built-in programming languages. Database Management Systems (DBMS) like MySQL or Oracle generally require programmers to build applications.
Flat file databases are still used internally by many computer applications to store configuration data. Many applications allow users to store and retrieve their own information from flat files using a pre-defined set of fields. Examples are programs to manage collections of books or appointments. Some small "contact" (name-and-address) database implementations essentially use flat files.
XML is now a popular format for storing data in plain text files, but as XML allows very complex nested data structures to be represented and contains the definition of the data, it would be incorrect to describe this type of database as conforming to the flat-file model.
Example implementation
Some example graphic screenshot images were taken from mockup implementations using Microsoft Excel or FileMaker Pro for Macintosh. These are not true flat file databases, but are simply made to look like one. It is easier to use the more powerful tool. Always keep in mind that the idea of a flat file is separate from any implementation of one.
Terms
"Flat file database" may be defined very narrowly, or more broadly. The narrower interpretation is correct in database theory; the broader covers the term as generally used.
Strictly, a flat file database should consist of nothing but data and delimiters. More broadly, the term refers to any database which exists in a single file in the form of rows and columns, with no relationships or links between records and fields except the table structure.
Terms used to describe different aspects of a database and its tools differ from one implementation to the next, but the concepts remain the same. FileMaker uses the term "Find", while MySQL uses the term "Query"; but the concept is the same. FileMaker "files" are equivalent to MySQL "tables", and so forth. To avoid confusing the reader, one consistent set of terms is used throughout this article.
However, the basic terms "record" and "field" are used in nearly every database implementation.
See also
- Flat file
- Navigational database
Category:Data_management
Category:Data_control
Pozycjonowanie tuszcze sylwester Architekci wntrz programy p2p
|
|
|
| :: RELATED NEWS :: |
Theophanes Bathas
Theophanes Streletzás Bathas ( - um 1500, † 1559), auch genannt Theophanes der Kreter, war ein griechischer Mönch und wegweisender Maler der kretischen Schule. Durch sein Wirken konnte die Tradition der griechischen Malerei auch unter der türkischen Herrschaft bewahrt werden.
Bekannt wurde er vor allem durch seine Fresken. Sein erstes bekanntes Werk sind die Wandmalereien im Kloster Agios Nikólaos Anapavsás in Read More... |
Theophanes der Kreter
Theophanes Streletzás Bathas ( - um 1500, † | |