Logiciels de base, 2e partie Logiciels de Base 2ème partie: Logiciels de base Cours 1ère année informatique, semestre 1. Najib Tounsi Lien permanent: http://www.emi.ac.ma/~ntounsi/COURS/LogBase/logicielsDeBase-2.html 1. Les produits de base du programmeur: 1.1. Editeur de texte Un éditeur de texte est un logiciel qui permet de créer, d'afficher et de modifier des fichiers texte brut. En particulier des textes sources dans un langage donné. Certains éditeurs sont paramétrés en fonction de ces langages pour sucrer le texte source en faisant apparaître les mots clés en couleur par exemple. Fig-12, Edition d'un source C avec vi (en mode commande sous UNIX). Déplacement du curseur ligne par ligne et colonne par colonne uniquement. (a) Avec TextEdit (b) Avec Emacs Fig-12-bis, Edition d'un source C en mode GUI Déplacement du curseur comme précédemment et aussi avec le pointeur de la souris Parmi les éditeurs de textes de base: En mode commande: edit sous Windows/Dos, vi, vim, emacs, nano ... sous Unix. En mode GUI: NotePad, Sublime sous Windows, TextEdit, Sublime sous MacOS, Sublime, http://www.emi.ac.ma/~ntounsi/COURS/LogBase/logiciel... 1 of 6 Logiciels de base, 2e partie Emacs, ... Sous Unix L'avantage de l'édition en mode GUI, ce sont les possibilités riches de style de présentation du texte, la possibilité de compiler si c'est un programme source etc. En effet, les éditeurs de textes modernes reconnaissent le type de document et facilitent son édition. Par exemple, la correction de l'orthographe pour les textes normaux, la suggestion de texte comme la balise de fermeture en HTML ou le choix d'instruction en langage de programmation etc. Fig-12-ter, Edition d'un source HTML avec Sublime. Les éditeurs de textes sont essentiels pour les travaux informatiques de base comme la programmation ou la maintenance des fichiers de configurations du système par exemple. Voir annexe pour les commandes de manipulation des éditeurs vi et emacs. http://www.emi.ac.ma/~ntounsi/COURS/UNIX/vi.html http://www.emi.ac.ma/~ntounsi/COURS/UNIX/emacs.html 1.2 Compilateur / Interpréteur Un compilateur est un programme qui traduit un texte écrit dans un langage de programmation de haut niveau vers un code binaire prêt pour exécution par l'ordinateur. La figure-13 montre le schéma de principe de compilation d'un programme C. Fig-13, Schéma de principe de la compilation Le texte initial en langage de programmation est dit code source, et le binaire généré est dit code objet. Un interpréteur est un programme qui exécute au fur et à mesure les instructions d'un programme source (dit aussi script) sans avoir besoin de traduire le source entier vers un code objet. Voir figure-13-bis. http://www.emi.ac.ma/~ntounsi/COURS/LogBase/logiciel... 2 of 6 Logiciels de base, 2e partie Fig-13-bis, Schéma de principe de l'interprétation On va montrer cela sur quelques exemples. Exemple-1: Compilation d'un programme C. Fichier source hello.c, compilateur cc et fichier exécutable a.out. $ cat hello.c #include <stdio.h> main() { printf ("Hello, world!\n"); } $ cc hello.c $ a.out Hello, world! $_ <-- On affiche le fichier source <-- On le compile par cc <-- On exécute le code objet a.out <-- Résultat du programme Exemple-2: Interprète Python avec une suite simple d'opérations. Commande python, prompt >>> $ python <-- On invoque l'interprète python Python 2.7.1 (r271:86832, Jun 16 2011, 16:59:05) >>> a = 2 >>> b = a * 1.1 >>> print b 2.2 >>> import math >>> x = math.sqrt(5) >>> nombre_or = (1 + x)/2 >>> print nombre_or 1.61803398875 >>> exit() $_ <-- On tape des instructions ... ... <-- résultat imprimé <-- résultat imprimé Noter ici que le résultat (2.2) a été affiché par l'instruction print b, alors même qu'on n'a pas fini de taper le programme complet. Exemple-3: Même programme python, cette fois-ci dans un fichier source gold.py $ cat gold.py import math x = math.sqrt(5) nombre_or = (1 + x)/2 print nombre_or <-- On montre le fichier source $ python gold.py 1.61803398875 <-- on exécute <-- résultat du programme Ici, il est fait appel à l'interprète python avec le fichier gold.py qui contient le code source. Compilateur vs. Interpréteur Fonctionnalités http://www.emi.ac.ma/~ntounsi/COURS/LogBase/logiciel... 3 of 6 Logiciels de base, 2e partie Un compilateur traduit (tout) le texte d'un programme, et n'assure pas son exécution. Un interpréteur "exécute" les instruction d'un programme au fur et à mesure. Il peut les traduire ou pas. ... Compilateur conçu pour Signaler erreur de compilation Contrôle de type Développement de logiciel final de façon plus rigoureuse. Interpréteur conçu pour Mise au point facile (on voir le résultat du programme au fur et à mesure) Développement plus souple Utile pour prototypage Techniquement Compilateur: code optimisé, exécution finale rapide Interpréteur: temps d'exécution du programme n'est pas important. Compilateur est un logiciel plus conséquent, sa construction est basée sur une théorie très élaborée. Compilateur est plus coûteux à développer. 1.3 Editeur de lien et chargeur Dans la pratique, on n'écrit pas un programme en un seul texte source. Pour peu qu'un programme soit long, il vaut mieux et il est plus facile de l'écrire en plusieurs morceaux compilés séparément. Un éditeur de lien (link editor) est un logiciel qui fait "le montage" d'un programme écrit en plusieurs morceaux pour former un seul code finale exécutable. L'édition de lien est une phase à part qui vient après la compilation. Un éditeur de lien rassemble des fichiers code objet et crée un fichier exécutable. Figure 14. Fig-14, Schéma de principe de l'éditeur de lien. http://www.emi.ac.ma/~ntounsi/COURS/LogBase/logiciel... 4 of 6 Logiciels de base, 2e partie Sur cette figure on illustre deux sources C, fonct1.c et fonct2.c contenant par exemple deux fonctions C, et compilés en deux codes objets fonct1.o et fonct2.o . Un programme principal main.c compilé par ailleurs en main.o, utilise les fonctions définies dans les deux précédents sources. L'édition de lien consiste justement à lier le code objet main.o aux autres codes fonct1.o et fonct2.o, pour satisfaire les appels de fonction se trouvant dans main.o . (Le lien se fait aussi avec une bibliothèque de programmes généralement fournis avec le langage. Par exemple, la fonction printf()) Exemple-4: Voici maintenant un script UNIX qui montre cela avec deux fonctions en C qui font la somme et le produit de deux entiers, et un programme principal en C qui appelle ces fonctions et imprime le résultat: $ ls fonct1.c fonct2.c main.c $ cat fonct1.c int somme (int a, int b){ return a+b; } $ cat fonct2.c int produit (int a, int b){ return a*b; } $ cat main.c # include <stdio.h> int somme (int, int); int produit(int, int); main(){ printf(" %d %d \n", somme(2,3), produit(2,3)); } $ cc -c fonct1.c fonct2.c $ ls fonct1.c fonct1.o fonct2.c fonct2.o main.c <-- Noter l'apparition des fichiers .o $ cc -c main.c $ ls fonct1.c fonct2.c main.c fonct1.o fonct2.o main.o <-- idem pour main.o $ cc fonct1.o fonct2.o main.o $ ls a.out fonct1.c fonct1.o fonct2.c fonct2.o main.c main.o <-- idem pour a.out $ a.out 5 6 $_ Remarque: On a utilisé la commande cc pour invoquer l'éditeur de lien sur les fichiers objets .o . En fait, l'éditeur de lien est ld, et la ligne commande correspondante est assez complexe. C'est pour cela qu'on utilise cc qui, elle, utilise ld avec les options appropriées. (Avec cc -v ... on peut faire apparaître ces options) Le chargeur Pour être complet, on doit mentionner le programme chargeur (loader) dont le rôle est de http://www.emi.ac.ma/~ntounsi/COURS/LogBase/logiciel... 5 of 6 Logiciels de base, 2e partie charger en mémoire le fichier exécutable produit par l'éditeur de lien afin de permettre son exécution. Le chargement d'une programme en mémoire avant son exécution est en général un processus séparé. Il a pour rôle d'attribuer un emplacement mémoire au code à exécuter (... après quelques autres arrangements, cf. cours Systèmes d'Exploitation). Les environnements intégrés de développement (IDE) Le processus de conception de programmes, de l'édition du texte source jusqu'à l'exécution avec les entrées de données et l'affichage des résultats comme le montre l'exemple-4 ci-dessus, peut-être fait en mode graphique par un logiciel adapté. Exemple, DevC++ pour la programmation en C ou C++, Eclipse pour la programmation en Java etc. On appelle ces logiciels des environnements intégrés de développement (IDE, pour Integrated Development Environment). Parfois on parle d'outils d'aides au développement. Ces logiciels offrent une interface qui intègre tout les outils qu'il faut pour développer des programme: éditeur, compilateurs, environnement d'exécution (run time), outils de documentation et d'archivage et même des outils d'aide à la conception. 2. Autres outils de base Outils de communication en réseau: telnet / ftp / mail / http (le Web) Voir TP. 3. Outils Informatiques Traitement de texte Tableurs Navigateur / Editeur Web Logiciels d'applications : Excel / Mathlab etc… Voir TP. Auteur: Najib Tounsi Date: Oct. 2013 - Sept. 2016 http://www.emi.ac.ma/~ntounsi/COURS/LogBase/logiciel... 6 of 6