diff options
Diffstat (limited to 'fr_FR.ISO8859-1/articles/programming-tools/article.sgml')
-rwxr-xr-x | fr_FR.ISO8859-1/articles/programming-tools/article.sgml | 894 |
1 files changed, 447 insertions, 447 deletions
diff --git a/fr_FR.ISO8859-1/articles/programming-tools/article.sgml b/fr_FR.ISO8859-1/articles/programming-tools/article.sgml index 7644119491..a70a2e0d30 100755 --- a/fr_FR.ISO8859-1/articles/programming-tools/article.sgml +++ b/fr_FR.ISO8859-1/articles/programming-tools/article.sgml @@ -11,11 +11,11 @@ $FreeBSD$ Original revision: n.nn ---> +--> <article lang="fr"> <articleinfo> - <title>Les outils de développement sous FreeBSD : Guide de + <title>Les outils de développement sous FreeBSD : Guide de l'utilisateur</title> <authorgroup> <author> @@ -41,7 +41,7 @@ quoique l'essentiel reste aussi valable pour de nombreuses autres versions d'Unix. Il ne cherche <emphasis>pas</emphasis> à expliquer en détail comment coder. La plus grande partie du - document suppose que vous n'avez aucune ou peu de notions + document suppose que vous n'avez aucune ou peu de notions préalables de programmation, bien que l'on espère que la plupart des programmeurs y trouveront quelque chose qui leur sera utile.</para> @@ -54,20 +54,20 @@ <para>FreeBSD fournit un excellent environnement de développement. Le système de base comprend des compilateurs C, C++ et Fortran, et un assembleur, pour ne pas mentionner l'interpréteur Perl et - les outils Unix classiques comme <command>sed</command> et + les outils Unix classiques comme <command>sed</command> et <command>awk</command>. Si cela ne vous suffit pas, il y a beaucoup d'autres compilateurs et interpréteurs au catalogue des logiciels portés. FreeBSD est très largement compatible avec les standards comme <acronym>POSIX</acronym> et <acronym>ANSI</acronym> C, - de même qu'avec son propre héritage BSD, il est donc - possible d'écrire des applications qui compilent et - s'exécutent sur une grande variété de + de même qu'avec son propre héritage BSD, il est donc + possible d'écrire des applications qui compilent et + s'exécutent sur une grande variété de plates-formes.</para> <para>Toute cette puissance, toutefois, peut submerger au premier abord, si vous n'avez jamais auparavant écrit de programme sur une plate-forme Unix. Ce document vise à vous aider à vous y mettre, sans approfondir trop les questions les plus avancées. - L'intention est de vous fournir suffisamment de bases pour vous + L'intention est de vous fournir suffisamment de bases pour vous permettre de tirer ensuite profit de la documentation.</para> <para>La plus grande partie du document ne demande aucune ou peu de connaissance de la programmation mais suppose une compétence de @@ -77,45 +77,45 @@ <title>Introduction à la programmation</title> <para>Un programme est une série d'instructions qui dit à l'ordinateur de faire des choses diverses; l'instruction qu'il doit - exécuter dépend parfois de ce qui s'est passé - lorsqu'il a exécuté une instruction + exécuter dépend parfois de ce qui s'est passé + lorsqu'il a exécuté une instruction précédente. Cette section vous donne un aperçu des deux principales méthodes pour transmettre ces instructions, - ou “commandes” comme on les appellent. L'une est d'utiliser + ou “commandes” comme on les appellent. L'une est d'utiliser un <firstterm>interpréteur</firstterm>, l'autre de se servir d'un <firstterm>compilateur</firstterm>. Comme les langues humaines sont trop - compliquées pour être comprises sans ambiguïté - par un ordinateur, les commandes sont généralement + compliquées pour être comprises sans ambiguïté + par un ordinateur, les commandes sont généralement écrites dans l'un ou l'autre des languages spécialement conçus à cet effet.</para> <sect2> <title>Interpréteurs</title> <para>Dans le cas d'un interpréteur, le langage s'accompagne d'un environnement, sous lequel vous tapez des commandes à son invite - et qui les exécute pour vous. Pour des programmes plus + et qui les exécute pour vous. Pour des programmes plus compliqués, vous pouvez saisir les commandes dans un fichier et le faire charger et exécuter les commandes qu'il contient par l'interpréteur. Si quelque chose se passe mal, la plupart des - interpréteurs passeront le contrôle à un + interpréteurs passeront le contrôle à un débogueur pour vous aider à trouver l'origine du problème.</para> <para>Cela a l'avantage de vous permettre de voir immédiatement le résultat de vos commandes et de corriger sur le champ vos erreurs. Le principal inconvénient survient lorsque vous voulez - partager vos programmes avec d'autres. Il faut qu'ils aient le + partager vos programmes avec d'autres. Il faut qu'ils aient le même interpréteur que vous ou que vous ayez le moyen de leur fournir cet interpréteur; il faut aussi qu'ils comprennent - comment s'en servir. Les utilisateurs peuvent aussi ne pas + comment s'en servir. Les utilisateurs peuvent aussi ne pas apprécier de se retrouver sous un débogueur s'ils appuient sur la mauvaise touche! Du point de vue de la performance, les interpréteurs utilisent parfois beaucoup de mémoire - et ne génèrent habituellement pas le code aussi - efficacement que les compilateurs.</para> + et ne génèrent habituellement pas le code aussi + efficacement que les compilateurs.</para> <para>A mon avis, les langages interprétés sont le meilleur - moyen de débuter si vous n'avez jamais programmé - auparavant. On trouve typiquement ce genre d'environnement avec des + moyen de débuter si vous n'avez jamais programmé + auparavant. On trouve typiquement ce genre d'environnement avec des langages tels que Lisp, Smalltalk, Perl et Basic. On peut aussi - avancer que le <foreignphrase>shell</foreignphrase> Unix est + avancer que le <foreignphrase>shell</foreignphrase> Unix est lui-même un interpréteur, beaucoup écrivent en fait avec des procédures - <foreignphrase>scripts</foreignphrase> - pour @@ -129,56 +129,56 @@ <title>Interpréteurs disponibles pour FreeBSD</title> <para>Voici une liste des interpréteurs disponibles sous forme de - <ulink url="ftp://ftp.freebsd.org/pub/FreeBSD/packages/">“paquetages”</ulink> + <ulink url="ftp://ftp.freebsd.org/pub/FreeBSD/packages/">“paquetages”</ulink> FreeBSD, accompagnée d'une brève description des langages interprétés les plus répandus.</para> <para>Pour vous procurer l'un de ces “paquetages”, il vous - suffit de cliquer sur le lien correspondant et d'exécuter + suffit de cliquer sur le lien correspondant et d'exécuter ensuite:</para> <screen>&prompt.root; <userinput>pkg_add <replaceable>nom_du_paquetage</replaceable></userinput></screen> <para>sous le compte super-utilisateur <username>root</username>. Il faut bien évidemment que vous ayez un système FreeBSD 2.1.0 ou ultérieur en état de marche pour que le logiciel - fonctionne.</para> + fonctionne.</para> <variablelist> <varlistentry> <term><acronym>BASIC</acronym></term> <listitem> - <para>Abréviation pour “<foreignphrase>Beginner's + <para>Abréviation pour “<foreignphrase>Beginner's All-purpose Symbolic Instruction - Code</foreignphrase>” - code d'instructions - symbolique universel pour les débutants. - Développé dans les années 50 pour apprendre - la programmation aux étudiants des Universités et - fourni avec tout ordinateur personnel qui se respectait dans les + Code</foreignphrase>” - code d'instructions + symbolique universel pour les débutants. + Développé dans les années 50 pour apprendre + la programmation aux étudiants des Universités et + fourni avec tout ordinateur personnel qui se respectait dans les années 80, <acronym>BASIC</acronym> a été le premier langage pour de nombreux programmeurs. C'est aussi la base de <trademark>Visual Basic</trademark>.</para> <para>L'<ulink url="ftp://ftp.freebsd.org/pub/FreeBSD/packages/lang/bwbasic-2.10.tgz">interpréteur - Basic Bywater</ulink> et - l'<ulink url="ftp://ftp.freebsd.org/pub/FreeBSD/packages/lang/pbasic-2.0.tgz">interpréteur - Basic de Phil Cockroft</ulink> (appelé auparavant - “Rabbit Basic”) sont disponibles sous forme de + Basic Bywater</ulink> et + l'<ulink url="ftp://ftp.freebsd.org/pub/FreeBSD/packages/lang/pbasic-2.0.tgz">interpréteur + Basic de Phil Cockroft</ulink> (appelé auparavant + “Rabbit Basic”) sont disponibles sous forme de <ulink url="ftp://ftp.freebsd.org/pub/FreeBSD/packages/">“paquetages” - FreeBSD</ulink>.</para> + FreeBSD</ulink>.</para> </listitem> </varlistentry> <varlistentry> <term>Lisp</term> <listitem> - <para>Un langage développé à la fin des - années 1950 comme alternative aux langages - “dévoreurs de nombres” qui e´taient - populaires à l'époque. Au lieu d'être + <para>Un langage développé à la fin des + années 1950 comme alternative aux langages + “dévoreurs de nombres” qui e´taient + populaires à l'époque. Au lieu d'être basé sur les nombres, Lisp repose sur les listes; de fait, son nom est une abréviation pour “<foreignphrase>List - Processing</foreignphrase>” - traitement de - listes. Très répandu dans les milieux de l'IA + Processing</foreignphrase>” - traitement de + listes. Très répandu dans les milieux de l'IA (Intelligence Artificielle).</para> - <para>Lisp est un langage très puissant et - sophistiqué, mais peut être assez lourd et + <para>Lisp est un langage très puissant et + sophistiqué, mais peut être assez lourd et bavard.</para> - <para>FreeBSD dispose de + <para>FreeBSD dispose de <ulink url="ftp://ftp.freebsd.org/pub/FreeBSD/packages/gcl-2.0.tgz">GNU Common Lisp</ulink> sous forme de “paquetage”.</para> </listitem> @@ -186,16 +186,16 @@ <varlistentry> <term>Perl</term> <listitem> - <para>Très employé par les administrateurs - système pour écrire des procédures; et - souvent aussi sur les serveurs <foreignphrase>World Wide + <para>Très employé par les administrateurs + système pour écrire des procédures; et + souvent aussi sur les serveurs <foreignphrase>World Wide Web</foreignphrase> pour écrire des procédures <acronym>CGI</acronym>.</para> <para>La Version 4, qui est probablement encore la version la plus largement répandue est fournie avec FreeBSD; le plus - récent + récent <ulink url="ftp://ftp.freebsd.org/pub/FreeBSD/packages/lang/perl-5.001.tgz">Perl - Version 5</ulink> est disponible sous forme de + Version 5</ulink> est disponible sous forme de “paquetage”.</para> </listitem> </varlistentry> @@ -208,11 +208,11 @@ langage d'initiation et présente un niveau d'abstraction suffisant pour être utilisé pour du travail de recherche.</para> - <para>FreeBSD offre en “paquetages” - l'<ulink url="ftp://ftp.freebsd.org/pub/FreeBSD/packages/lang/elk-3.0.tgz">Interpréteur - Scheme Elk</ulink>, - l'<ulink url="ftp://ftp.freebsd.org/pub/FreeBSD/packages/lang/mit-scheme-7.3.tgz">Interpréteur Scheme du MIT</ulink> et - l'<ulink url="ftp://ftp.freebsd.org/pub/FreeBSD/packages/lang/scm-4e1.tgz">Interpréteur + <para>FreeBSD offre en “paquetages” + l'<ulink url="ftp://ftp.freebsd.org/pub/FreeBSD/packages/lang/elk-3.0.tgz">Interpréteur + Scheme Elk</ulink>, + l'<ulink url="ftp://ftp.freebsd.org/pub/FreeBSD/packages/lang/mit-scheme-7.3.tgz">Interpréteur Scheme du MIT</ulink> et + l'<ulink url="ftp://ftp.freebsd.org/pub/FreeBSD/packages/lang/scm-4e1.tgz">Interpréteur Scheme SCM</ulink>.</para> </listitem> </varlistentry> @@ -226,13 +226,13 @@ <varlistentry> <term>Logo</term> <listitem> - <para><ulink url="ftp://ftp.freebsd.org:pub/FreeBSD/packages/lang/ucblogo-3.3.tgz">L'interpréteur + <para><ulink url="ftp://ftp.freebsd.org:pub/FreeBSD/packages/lang/ucblogo-3.3.tgz">L'interpréteur LOGO de Brian Harvey</ulink>.</para> </listitem> </varlistentry> <varlistentry><term>Python</term> <listitem> - <para><ulink url="ftp://ftp.freebsd.org/pub/FreeBSD/packages/lang/python-1.2">Le + <para><ulink url="ftp://ftp.freebsd.org/pub/FreeBSD/packages/lang/python-1.2">Le langage de programmation orienté objet Python</ulink>.</para> </listitem> </varlistentry> @@ -240,50 +240,50 @@ </sect2> <sect2> <title>Compilateurs</title> - <para>Les compilateurs sont assez différents. Vous écrivez + <para>Les compilateurs sont assez différents. Vous écrivez d'abord votre code dans un(des) fichiers(s) à l'aide d'un - éditeur. Vous exécutez ensuite le compilateur et voyez + éditeur. Vous exécutez ensuite le compilateur et voyez s'il valide votre programme. S'il ne le compile pas, serrez les dents et - retournez sous l'éditeur. S'il le compile et vous en fait un - programme, vous pouvez l'utiliser soit à l'invite de - l'interpréteur de commande, soit en vous servant d'un - débogueur pour voir s'il fonctionne + retournez sous l'éditeur. S'il le compile et vous en fait un + programme, vous pouvez l'utiliser soit à l'invite de + l'interpréteur de commande, soit en vous servant d'un + débogueur pour voir s'il fonctionne correctement<footnote><para>Dans le cas contraire, si vous l'exécutez sur la ligne de commande, il - peut éventuellement + peut éventuellement planter - “<foreignphrase>core dump</foreignphrase>”.</para></footnote>.</para> - <para>Ce n'est évidemment pas aussi immédiat que de se - servir d'un interpréteur. Cela vous permet cependant de faire - beaucoup de choses qui sont très difficiles ou même - irréalisables avec un interpréteur, comme écrire - du code qui interagisse étroitement avec le système - d'exploitation - ou même écrire votre propre - système d'exploitation! C'est aussi utile si vous avez besoin + <para>Ce n'est évidemment pas aussi immédiat que de se + servir d'un interpréteur. Cela vous permet cependant de faire + beaucoup de choses qui sont très difficiles ou même + irréalisables avec un interpréteur, comme écrire + du code qui interagisse étroitement avec le système + d'exploitation - ou même écrire votre propre + système d'exploitation! C'est aussi utile si vous avez besoin d'écrire du code très efficace, parce que le compilateur - peut prendre son temps et optimiser le code, ce qui ne serait pas - acceptable d'un interpréteur. Distribuer un programme - écrit pour un compilateur est généralement plus + peut prendre son temps et optimiser le code, ce qui ne serait pas + acceptable d'un interpréteur. Distribuer un programme + écrit pour un compilateur est généralement plus facile - il suffit de livrer une copie de l'exécutable, - en supposant que les destinataires aient le même système + en supposant que les destinataires aient le même système d'exploitation que vous.</para> - <para>Les langages compilés incluent Pascal, C et C++. C et C++ - sont des langages qui pardonnent assez peu, et plus adaptés aux - programmeurs plus expérimentés. Pascal, d'un autre + <para>Les langages compilés incluent Pascal, C et C++. C et C++ + sont des langages qui pardonnent assez peu, et plus adaptés aux + programmeurs plus expérimentés. Pascal, d'un autre côté, a été conçu pour l'enseignement, - et est un assez bon langage avec lequel commencer. Malheureusement, - FreeBSD n'a aucun support pour Pascal, à l'exception d'un - convertisseur de Pascal en C, au catalogue des logiciels + et est un assez bon langage avec lequel commencer. Malheureusement, + FreeBSD n'a aucun support pour Pascal, à l'exception d'un + convertisseur de Pascal en C, au catalogue des logiciels portés.</para> - <para>Comme le cycle + <para>Comme le cycle “édition-compilation-exécution-débogage” - est assez fastidieux, de nombreux fournisseurs de compilateurs + est assez fastidieux, de nombreux fournisseurs de compilateurs commerciaux - ont produit des Environnements de Développement + ont produit des Environnements de Développement Intégrés (<acronym>EDI</acronym> en abrégé). FreeBSD ne dispose pas d'<acronym>EDI</acronym> en tant que tel; il est - cependant possible d'utiliser Emacs à cet effet. C'est - expliqué à la section <link linkend="emacs">Utiliser + cependant possible d'utiliser Emacs à cet effet. C'est + expliqué à la section <link linkend="emacs">Utiliser Emacs comme environnement de développement</link>.</para> </sect2> </sect1> @@ -294,18 +294,18 @@ appelé soit avec la commande <command>cc</command>, soit avec <command>gcc</command>. Les détails de la réalisation d'un programme avec un interpréteur varient considérablement - d'un interpréteur à l'autre, est sont - généralement bien décrits par l'aide en ligne de + d'un interpréteur à l'autre, est sont + généralement bien décrits par l'aide en ligne de l'interpréteur.</para> - <para>Une fois que vous avez écrit votre chef-d'oeuvre, + <para>Une fois que vous avez écrit votre chef-d'oeuvre, l'étape suivante consiste à le convertir en quelque chose qui (espérons-le!) s'exécutera sous FreeBSD. Cela demande habituellement plusieurs opérations successives, dont chacune est confiée à un programme différent.</para> <procedure> - <step> + <step> <para>Pré-processer votre code source pour en éliminer les - commentaires et faire diverses autres choses, comme la substitution + commentaires et faire diverses autres choses, comme la substitution des macros-instructions en C.</para> </step> <step> @@ -314,18 +314,18 @@ cas, il rouspétera.</para> </step> <step> - <para>Convertir le code source en langage + <para>Convertir le code source en langage assembleur - c'est très proche du code machine, mais - encore compréhensible par des êtres humains. C'est du - moins ce que l'on prétend<footnote><para>Pour être - rigoureusement exact, <command>cc</command> convertit le code source - en un <firstterm>P-code</firstterm> qui lui est propre, et ne - dépend pas de la machine, et non en assembleur à ce + encore compréhensible par des êtres humains. C'est du + moins ce que l'on prétend<footnote><para>Pour être + rigoureusement exact, <command>cc</command> convertit le code source + en un <firstterm>P-code</firstterm> qui lui est propre, et ne + dépend pas de la machine, et non en assembleur à ce stade.</para></footnote>.</para> </step> <step> <para>Convertir le langage assembleur en code machine - oui, - nous parlons ici de bits et d'octets, de zéros et de + nous parlons ici de bits et d'octets, de zéros et de uns.</para> </step> <step> @@ -340,48 +340,48 @@ les regrouper.</para> </step> <step> - <para>S'arranger pour produire quelque chose que le chargeur de + <para>S'arranger pour produire quelque chose que le chargeur de programmes du système pourra mettre en mémoire et exécuter.</para> </step> </procedure> <para>Le mot <firstterm>compiler</firstterm> est souvent utilisé pour ne désigner que les étapes 1 à 4 - les - autres sont appelées <firstterm>édition de + autres sont appelées <firstterm>édition de liens</firstterm>. L'étape 1 est parfois appelée <firstterm>pré-processer</firstterm> et les étapes 3-4 <firstterm>assembler</firstterm>.</para> - <para>Heureusement, pratiquement tous ces détails vous sont + <para>Heureusement, pratiquement tous ces détails vous sont transparents, car la commande <command>cc</command> est une interface qui gère pour vous l'appel de ces différents programmes avec les bons arguments; taper simplement:</para> <screen>&prompt.user; <userinput>cc foobar.c</userinput></screen> <para>effectue la compilation de <filename>foobar.c</filename> en passant - par toutes les étapes décrites ci-dessus. Si vous avez + par toutes les étapes décrites ci-dessus. Si vous avez à compiler plus d'un fichier, faites simplement quelque chose comme:</para> <screen>&prompt.user; <userinput>cc foo.c bar.c</userinput></screen> <para>Notez que la vérification syntaxique ne consiste qu'en cela: - vérifier la syntaxe. Il n'y aura pas de contrôle sur les + vérifier la syntaxe. Il n'y aura pas de contrôle sur les erreurs logiques que vous auriez commises, comme faire exécuter au programme une boucle infinie ou utiliser un tri à bulles au lieu - d'un tri par arbre binaire<footnote><para>Au cas où vous ne le - sauriez pas, un tri par arbre binaire est une manière efficace - d'ordonner des données, ce qui n'est pas le cas du tri + d'un tri par arbre binaire<footnote><para>Au cas où vous ne le + sauriez pas, un tri par arbre binaire est une manière efficace + d'ordonner des données, ce qui n'est pas le cas du tri à bulles.</para></footnote>.</para> <para><command>cc</command> dispose d'une quantité d'options, qui - sont toutes décrites dans les pages de manuel. En voici - quelques-unes des plus importantes, et la façon de les + sont toutes décrites dans les pages de manuel. En voici + quelques-unes des plus importantes, et la façon de les utiliser.</para> <variablelist> <varlistentry> <term><option>-o <replaceable>nom_de_fichier</replaceable></option></term> <listitem> <para>Le nom du fichier résultat. Si vous n'utilisez pas cette - option, <command>cc</command> générera un - exécutable appelé - <filename>a.out</filename><footnote><para>Les raisons de cela se - sont perdues dans les brumes de + option, <command>cc</command> générera un + exécutable appelé + <filename>a.out</filename><footnote><para>Les raisons de cela se + sont perdues dans les brumes de l'histoire.</para></footnote>.</para> <informalexample> <screen>&prompt.user; <userinput>cc foobar.c</userinput> <lineannotation>l'exécutable est <filename>a.out</filename></lineannotation> @@ -393,15 +393,15 @@ <term><option>-c</option></term> <listitem> <para>Uniquement compiler le fichier, ne pas faire l'édition de - liens. Utile pour des programmes d'essai, quand vous voulez + liens. Utile pour des programmes d'essai, quand vous voulez simplement vérifier la syntaxe, ou si vous vous servez d'un <filename>Makefile</filename>.</para> <informalexample> <screen>&prompt.user; <userinput>cc -c foobar.c</userinput></screen> </informalexample> - <para>Cela générera un <firstterm>fichier - objet</firstterm> (et non un exécutable) appelé - <filename>foobar.o</filename>. Il pourra être lié avec + <para>Cela générera un <firstterm>fichier + objet</firstterm> (et non un exécutable) appelé + <filename>foobar.o</filename>. Il pourra être lié avec d'autres fichiers objet pour constituer un exécutable.</para> </listitem> </varlistentry> @@ -409,45 +409,45 @@ <term><option>-g</option></term> <listitem> <para>Crée une version débogable de l'exécutable - Le compilateur inclut alors dans l'exécutable des + Le compilateur inclut alors dans l'exécutable des informations de correspondance entre les numéros de ligne du fichier source et les fonctions appelées. Un débogueur - peut alors utiliser ces informations pour vous afficher le code - source tandis que vous exécutez pas à pas le - programme, ce qui est <emphasis>très</emphasis> utile; + peut alors utiliser ces informations pour vous afficher le code + source tandis que vous exécutez pas à pas le + programme, ce qui est <emphasis>très</emphasis> utile; l'inconvénient est que toutes ces informations augmentent - considérablement la taille du programme. Normalement, vous - compilez avec <option>-g</option> quand vous développez le - programme, et compilez ensuite une “version de - livraison” quand vous êtes satisfait parce qu'il + considérablement la taille du programme. Normalement, vous + compilez avec <option>-g</option> quand vous développez le + programme, et compilez ensuite une “version de + livraison” quand vous êtes satisfait parce qu'il fonctionne correctement.</para> <informalexample> <screen>&prompt.user; <userinput>cc -g foobar.c</userinput></screen> </informalexample> - <para>Cela produira une version débogable du - programme<footnote><para>Remarquez que nous n'avons pas + <para>Cela produira une version débogable du + programme<footnote><para>Remarquez que nous n'avons pas utilisé l'indicateur <option>-o</option> pour préciser - le nom de l'exécutable, celui-ci s'appellera donc - <filename>a.out</filename>. Générer une version - débogable appelée <filename>foobar</filename> est - laissé à titre d'exercice aux soins du + le nom de l'exécutable, celui-ci s'appellera donc + <filename>a.out</filename>. Générer une version + débogable appelée <filename>foobar</filename> est + laissé à titre d'exercice aux soins du lecteur!</para></footnote>.</para> </listitem> </varlistentry> <varlistentry> <term><option>-O</option></term> <listitem> - <para>Génère une version optimisée de + <para>Génère une version optimisée de l'exécutable. Le compilateur effectue alors diverses opérations bien pensées pour essayer de construire - un programme qui aille plus vite que normalement. Vous pouvez - faire suivre <option>-O</option> d'un nombre pour demander un + un programme qui aille plus vite que normalement. Vous pouvez + faire suivre <option>-O</option> d'un nombre pour demander un degré plus important d'optimisation, mais cela met souvent - en évidence des bogues dans l'optimiseur du compilateur. - Par exemple, on sait que la version de <command>cc</command> de + en évidence des bogues dans l'optimiseur du compilateur. + Par exemple, on sait que la version de <command>cc</command> de FreeBSD 2.1.0 produit du code incorrect avec l'option <option>-O2</option> dans certaines circonstances.</para> - <para>On n'active en général l'optimisation + <para>On n'active en général l'optimisation qu'à la compilation de la version de livraison.</para> <informalexample> <screen>&prompt.user; <userinput>cc -O -o foobar foobar.c</userinput></screen> @@ -457,9 +457,9 @@ </listitem> </varlistentry> </variablelist> - <para>Les trois indicateurs suivants demanderont à + <para>Les trois indicateurs suivants demanderont à <command>cc</command> de vérifier que votre code est conforme - à la norme internationale, souvent appelée norme + à la norme internationale, souvent appelée norme <acronym>ANSI</acronym>, bien que ce soit à proprement parler une norme <acronym>ISO</acronym>.</para> <variablelist> @@ -467,18 +467,18 @@ <term><option>-Wall</option></term> <listitem> <para>Active tous les messages d'avertissement que les auteurs du - compilateur <command>cc</command> ont jugés - intéressants. Malgré son nom - (“<foreignphrase>all</foreignphrase>” - tous), - cela n'active pas tous les messages d'avertissement dont le - compilateur est capable.</para> + compilateur <command>cc</command> ont jugés + intéressants. Malgré son nom + (“<foreignphrase>all</foreignphrase>” - tous), + cela n'active pas tous les messages d'avertissement dont le + compilateur est capable.</para> </listitem> </varlistentry> <varlistentry> <term><option>-ansi</option></term> <listitem> - <para>Désactive la plupart, mais pas toutes, les - possibilités non-<acronym>ANSI</acronym> C fournies par + <para>Désactive la plupart, mais pas toutes, les + possibilités non-<acronym>ANSI</acronym> C fournies par <command>cc</command>. Malgré son nom, cela ne garantit pas absolument que votre code soit conforme à la norme.</para> </listitem> @@ -488,17 +488,17 @@ <listitem> <para>Désactive <emphasis>toutes</emphasis> les possibilités non-<acronym>ANSI</acronym> C de - <command>cc</command>.</para> + <command>cc</command>.</para> </listitem> </varlistentry> </variablelist> <para>Sans ces indicateurs, <command>cc</command> vous permet d'utiliser ses extensions non-standard de la norme. Quelques-unes sont très - utiles, mais ne se retrouveront pas sur d'autres + utiles, mais ne se retrouveront pas sur d'autres compilateurs - de fait, l'un des objectifs principaux de la norme est de permettre l'écriture de code qui puissent être - réutilisé avec n'importe quel compilateur sur n'importe - quel système. C'est cela que l'on appelle du <firstterm>code + réutilisé avec n'importe quel compilateur sur n'importe + quel système. C'est cela que l'on appelle du <firstterm>code portable</firstterm>.</para> <para>En général, vous devriez vous efforcer de rendre votre code aussi portable que possible, sans quoi vous risquez de devoir @@ -530,22 +530,22 @@ <option>-l<replaceable>quelque_chose</replaceable></option>. Par exemple, la bibliothèque mathématique s'appelle <filename>libm.a</filename>, vous donnez donc à - <command>cc</command> l'argument <option>-lm</option>. Un + <command>cc</command> l'argument <option>-lm</option>. Un détail à connaître à propos de la bibliothèque mathématique est que ce doit généralement être la dernière sur - la ligne de commande.</para> + la ligne de commande.</para> <informalexample> <screen>&prompt.user; <userinput>cc -o foobar foobar.c -lm</userinput></screen> </informalexample> - <para>Cela ajoutera à l'édition de liens de - <filename>foobar</filename> des fonctions de la + <para>Cela ajoutera à l'édition de liens de + <filename>foobar</filename> des fonctions de la bibliothèque mathématique.</para> <para>Si vous compilez du code C++, vous devrez ajouter - <option>-lg++</option>, ou <option>-lstdc++</option> si vous - utilisez la version 2.2 de FreeBSD ou une version - ultérieure, à la ligne de commande pour - éditer les liens avec les fonctions de la + <option>-lg++</option>, ou <option>-lstdc++</option> si vous + utilisez la version 2.2 de FreeBSD ou une version + ultérieure, à la ligne de commande pour + éditer les liens avec les fonctions de la bibliothèque C++. Au lieu de cela, vous pouvez utiliser la commande <command>c++</command> au lieu de <command>cc</command>, qui fera la même chose à votre place. Sous FreeBSD, @@ -557,19 +557,19 @@ &prompt.user; <userinput>c++ -o foobar foobar.cc</userinput></screen> </informalexample> - <para>Chacun de ces exemples construira un exécutable + <para>Chacun de ces exemples construira un exécutable <filename>foobar</filename> à partir du fichier source C++ - <filename>foobar.cc</filename>. Remarquez que, sur les - systèmes Unix, les fichiers sources C++ ont + <filename>foobar.cc</filename>. Remarquez que, sur les + systèmes Unix, les fichiers sources C++ ont traditionnellement l'extension <filename>.C</filename>, - <filename>.cxx</filename> ou <filename>.cc</filename>, + <filename>.cxx</filename> ou <filename>.cc</filename>, plutôt que l'extension <filename>.cpp</filename> de sytle <trademark>MS-DOS</trademark> (qui est déjà - utilisée pour autre chose). <command>gcc</command> se + utilisée pour autre chose). <command>gcc</command> se fiait autrefois à l'extension pour savoir quel type de compilateur utiliser avec le fichier source, mais cette restriction ne s'applique plus, vous pouvez donc appeler vos - fichiers C++ <filename>.cpp</filename> en toute + fichiers C++ <filename>.cpp</filename> en toute impunité!</para> </listitem> </varlistentry> @@ -577,21 +577,21 @@ <sect2> <title>Questions et problèmes <command>cc</command></title> <para>Q. J'essaie d'écrire un programme qui utilise la fonction - <function>sin()</function> et j'obtiens une erreur qui ressemble - à ce qui suit. Qu'est-ce que cela veut dire? + <function>sin()</function> et j'obtiens une erreur qui ressemble + à ce qui suit. Qu'est-ce que cela veut dire? <informalexample> <screen>/var/tmp/cc0143941.o: Undefined symbol `_sin' referenced from text segment</screen> </informalexample> </para> <para>R. Quand vous utilisez des fonctions mathématiques telles que <function>sin()</function>, vous devez dire à - <command>cc</command> d'inclure la bibliothèque + <command>cc</command> d'inclure la bibliothèque mathématique à l'édition de liens, comme ceci: <informalexample> <screen>&prompt.user; <userinput>cc -o foobar foobar.c -lm</userinput></screen> </informalexample></para> - <para>Q. D'accord, j'ai écrit ce petit programme pour + <para>Q. D'accord, j'ai écrit ce petit programme pour m'entraîner à utiliser <option>-lm</option>. Il ne fait que calculer 2.1 à la puissance 6: <informalexample> @@ -623,11 +623,11 @@ int main() { regarde s'il en a déjà vu un prototype. Si ce n'est pas le cas, il suppose que la fonction retourne un <type>int</type> - <foreignphrase>entier</foreignphrase>, ce - qui n'est évidemment pas ce que vous souhaitez dans ce + qui n'est évidemment pas ce que vous souhaitez dans ce cas.</para> <para>Q. Comment alors régler ce problème?</para> <para>R. Les prototypes des fonctions mathématiques sont dans - <filename>math.h</filename>. Si vous incluez ce fichier, le + <filename>math.h</filename>. Si vous incluez ce fichier, le compilateur trouvera le prototype et cessera de vous fournir un résultat bizarre! <informalexample> @@ -640,7 +640,7 @@ int main() { </programlisting> </informalexample> </para> - <para>Après l'avoir recompilé de la même + <para>Après l'avoir recompilé de la même façon qu'auparavant, exécutez-le: <informalexample> <screen>&prompt.user; <userinput>./a.out</userinput> @@ -651,13 +651,13 @@ int main() { <emphasis>toujours</emphasis> <filename>math.h</filename> et n'oubliez pas d'utiliser la bibliothèque mathématique à l'édition de liens.</para> - <para>Q. J'ai compilé un fichier appelé + <para>Q. J'ai compilé un fichier appelé <filename>foobar.c</filename> et je ne trouve pas d'exécutable - appelé <filename>foobar</filename>. Où est-il + appelé <filename>foobar</filename>. Où est-il passé?</para> - <para>R. N'oubliez pas, <command>cc</command> appellera + <para>R. N'oubliez pas, <command>cc</command> appellera l'exécutable <filename>a.out</filename> à moins que vous - ne lui disiez de faire autrement. Utilisez l'option + ne lui disiez de faire autrement. Utilisez l'option <option>-o <replaceable>nom_de_fichier</replaceable></option>: <informalexample> <screen>&prompt.user; <userinput>cc -o foobar foobar.c</userinput></screen> @@ -666,24 +666,24 @@ int main() { <para>Q. OK, si j'ai un exécutable appelé <filename>foobar</filename>, je le vois avec <command>ls</command>, mais quand je tape <command>foobar</command> sur la ligne de commande, - il me dit que le fichier n'existe pas. Pourquoi ne le trouve-t-il + il me dit que le fichier n'existe pas. Pourquoi ne le trouve-t-il pas?</para> <para>R. A l'inverse de <trademark>MS-DOS</trademark>, Unix ne regarde pas dans le répertoire courant quand il cherche le programme que vous voulez exécuter, à moins que vous ne le lui disiez. Soit tapez <command>./foobar</command>, ce qui veut dire - “exécuter le fichier appelé + “exécuter le fichier appelé <filename>foobar</filename> du répertoire courant”, ou - modifiez votre variable d'environnement + modifiez votre variable d'environnement <envar>PATH</envar> pour qu'elle ressemble à: <informalexample> <screen>bin:/usr/bin:/usr/local/bin:.</screen> </informalexample> Le dernier point signifie “chercher dans le répertoire - courant si le fichier n'est pas dans les autres + courant si le fichier n'est pas dans les autres répertoires”.</para> - <para>Q. J'ai appelé mon exécutable + <para>Q. J'ai appelé mon exécutable <filename>test</filename>, mais il ne se passe rien quand je le lance. Pourquoi?</para> <para>R. Il y a un programme appelé <command>test</command> dans @@ -694,31 +694,31 @@ int main() { <screen>&prompt.user; <userinput>./test</userinput></screen> </informalexample> ou choisissez un meilleur nom pour votre programme!</para> - <para>Q. J'ai compilé et tout a commencé à + <para>Q. J'ai compilé et tout a commencé à fonctionner correctement, puis il y a eu une erreur et il m'a dit quelque chose à propos de <errorname>core dumped</errorname>. Qu'est-ce que cela veut dire?</para> - <para>A. L'expression <firstterm>core dump</firstterm> date des tous - premiers jours d'Unix, quand les machines utilisaient la - mémoire + <para>A. L'expression <firstterm>core dump</firstterm> date des tous + premiers jours d'Unix, quand les machines utilisaient la + mémoire centrale - “<foreignphrase>core memory</foreignphrase>” - pour stocker les informations. Essentiellement, si le programme + pour stocker les informations. Essentiellement, si le programme “plantait” dans certaines conditions, le système enregistrait sur disque le contenu de la mémoire centrale dans un fichier appelé <filename>core</filename>, que le - programmeur pouvait ensuite disséquer pour trouver + programmeur pouvait ensuite disséquer pour trouver où les choses avaient mal tournées.</para> - <para>Q. Fascinant, mais que suis-je censé faire + <para>Q. Fascinant, mais que suis-je censé faire maintenant?</para> <para>A. Servez-vous de <command>gdb</command> pour analyser l'image - mémoire (Reportez-vous à la section + mémoire (Reportez-vous à la section <link linkend="debugging">Déboguer</link>).</para> <para>R. Quand mon programme a généré une image mémoire, il a dit quelque chose à propose de - <errorname>segmentation fault</errorname> - “erreur + <errorname>segmentation fault</errorname> - “erreur de segmentation”. Qu'est-ce que c'est?</para> - <para>Q. Cela signifie essentiellement que votre programme a - essayé d'effectuer une quelconque opération + <para>Q. Cela signifie essentiellement que votre programme a + essayé d'effectuer une quelconque opération illégale sur la mémoire; Unix est conçu pour protéger le système d'exploitation des programmes mal éduqués.</para> @@ -745,7 +745,7 @@ strcpy(foo, "bang!"); votre programme, de sorte que le noyau tuera ce dernier avant qu'il ne provoque de dégât. Si vous manquez de chance, il pointera quelque part à l'intérieur de votre - programme et endommagera l'une de vos structures de + programme et endommagera l'une de vos structures de données, provoquant un dysfonctionnement mystérieux de votre programme.</para> </listitem> @@ -759,7 +759,7 @@ bar[27] = 6; </para> </listitem> <listitem> - <para>Essayer d'enregistrer quelque chose dans une zone de + <para>Essayer d'enregistrer quelque chose dans une zone de mémoire accessible en lecture seule, e.g.: <programlisting> char *foo = "Mon texte"; @@ -770,8 +770,8 @@ strcpy(foo, "bang!"); en mémoire accessible en lecture seule.</para> </listitem> <listitem> - <para>Utiliser incorrectement les fonctions - <function>malloc()</function> et <function>free()</function>, + <para>Utiliser incorrectement les fonctions + <function>malloc()</function> et <function>free()</function>, e.g.: <programlisting> char bar[80]; @@ -788,29 +788,29 @@ free(foo); </itemizedlist> </para> <para>Commettre l'une de ces fautes ne provoquera pas toujours une erreur, - mais ce sont malgré tout des choses à ne pas faire. + mais ce sont malgré tout des choses à ne pas faire. Certains systèmes et compilateurs sont plus tolérants que - d'autres, ce qui fait que des programmes qui s'exécutent + d'autres, ce qui fait que des programmes qui s'exécutent correctement sur un système peuvent ne plus fonctionner sur un autre.</para> <para>Q. Parfois, le programme provoque la génération d'une - image mémoire avec le message <errorname>bus error</errorname>. - Mon manuel Unix dit qu'il s'agit d'un erreur matériel, mais + image mémoire avec le message <errorname>bus error</errorname>. + Mon manuel Unix dit qu'il s'agit d'un erreur matériel, mais l'ordinateur fonctionne apparemment correctement. Est-ce vrai?</para> - <para>R. Fort heureusement, non (à moins bien sûr que vous + <para>R. Fort heureusement, non (à moins bien sûr que vous n'ayez aussi un problème matériel). C'est habituellement - une autre façon de dire que vous avez accédé + une autre façon de dire que vous avez accédé incorrectement à la mémoire.</para> - <para>Q. Il me semble que cette histoire de <foreignphrase>core + <para>Q. Il me semble que cette histoire de <foreignphrase>core dump</foreignphrase> peut être très utile, si je peux la provoquer quand je veux. Est-ce possible, ou dois-je attendre qu'il se produise une erreur?</para> <para>R. Oui, allez simplement sur une autre console ou fenêtre <application>xterm</application> et tapez: - <screen>&prompt.user; <userinput>ps</userinput></screen> pour + <screen>&prompt.user; <userinput>ps</userinput></screen> pour connaître l'IDentifiant de processus de votre programme, puis: <screen>&prompt.user; <userinput>kill -ABRT <replaceable>pid</replaceable></userinput></screen> - où <parameter><replaceable>pid</replaceable></parameter> est + où <parameter><replaceable>pid</replaceable></parameter> est l'ID de processus que vous avez recherché.</para> <para>C'est par exemple utile si votre programme est parti dans une boucle infinie. Au cas où votre programme piégerait les @@ -828,55 +828,55 @@ free(foo); n'est pas trop gênant, mais cela devient rapidement très fastidieux lorsqu'il y a plusieurs fichiers - et cela peut aussi mettre du temps à compiler.</para> - <para>Un façon d'éviter ces problèmes est + <para>Un façon d'éviter ces problèmes est d'utiliser des fichiers <firstterm>objets</firstterm> et de ne recompiler que les fichiers de source dont le contenu a changé. - Nous pourrions alors avoir quelque chose du style: + Nous pourrions alors avoir quelque chose du style: <screen>&prompt.user; <userinput>cc fichier1.o fichier2.o</userinput> … <userinput>file37.c</userinput> …</screen> - si nous avons modifé <filename>fichier37.c</filename>, et + si nous avons modifé <filename>fichier37.c</filename>, et celui-là uniquement, depuis notre compilation - précédente. Cela peut sérieusement - accélérer la compilation, mais ne résout pas le - problème de saisie à répétition de la + précédente. Cela peut sérieusement + accélérer la compilation, mais ne résout pas le + problème de saisie à répétition de la commande.</para> <para>Nous pourrions aussi écrire une procédure pour résoudre ce dernier problème, mais ne ne pourrions alors que lui faire tout recompiler, ce qui serait très peu efficace sur un gros projet.</para> - <para>Que ce passe-t-il si nous avons des centaines de fichiers de + <para>Que ce passe-t-il si nous avons des centaines de fichiers de sources? Si nous travaillons en équipe et que d'autres oublient de nous prévenir des modifications qu'ils ont apportées à un des fichiers que nous utilisons?</para> <para>Peut-être pourrions-nous rassembler les deux solutions et - écrire quelque chose qui ressemble à une + écrire quelque chose qui ressemble à une procédure et comporte une sorte de règle magique qui dise quand tel fichier de source doit être compilé. Nous n'aurions plus besoin que d'un programme qui comprennent ces règles, parce que c'est un peu trop compliqué pour une - procédure.</para> + procédure.</para> <para>Ce programme s'appelle <command>make</command>. Il lit un fichier, qu'on appelle un <firstterm>makefile</firstterm>, qui lui dit quelles sont les dépendances entre les différents fichiers, et - en déduit lesquels ont besoin ou non d'être - recompilés. Par exemple, une règle peut signifier + en déduit lesquels ont besoin ou non d'être + recompilés. Par exemple, une règle peut signifier quelque chose comme “si <filename>fromboz.o</filename> est plus - ancien que <filename>fromboz.c</filename>, cela veut dire que - <filename>fromboz.c</filename> doit avoir été + ancien que <filename>fromboz.c</filename>, cela veut dire que + <filename>fromboz.c</filename> doit avoir été modifié, il faut donc le recompiler”. Le fichier - “<foreignphrase>makefile</foreignphrase>” inclut aussi - des règles qui lui disent <emphasis>comment</emphasis> + “<foreignphrase>makefile</foreignphrase>” inclut aussi + des règles qui lui disent <emphasis>comment</emphasis> recompiler, ce qui en fait un outil encore plus puissant.</para> - <para>Ces fichiers “makefiles” sont habituellement - rangés dans le même répertoire que les sources + <para>Ces fichiers “makefiles” sont habituellement + rangés dans le même répertoire que les sources auxquels ils s'appliquent, et peuvent être appelés <filename>makefile</filename>, <filename>Makefile</filename> ou <filename>MAKEFILE</filename>. La plupart des programmeurs utilisent le nom <filename>Makefile</filename>, ce qui fait qu'ils se trouvent alors vers le début de la liste des fichiers et sont ainsi facilement repérables <footnote><para>Ils n'utilisent pas la - variante <filename>MAKEFILE</filename> parce que les noms en + variante <filename>MAKEFILE</filename> parce que les noms en majuscules servent souvent à désigner les fichiers de - documentation comme + documentation comme <filename>README</filename>.</para></footnote>.</para> </sect2> <sect2> @@ -892,40 +892,40 @@ foo: foo.c <para>La ligne décrivant la dépendance contient le nom du programme (qu'on appelle la <firstterm>cible</firstterm>), suivi de “deux points”, puis d'un blanc et du nom - du fichier source. Quand <command>make</command> lit cette ligne, - il regarde si <filename>foo</filename> existe; s'il existe, il + du fichier source. Quand <command>make</command> lit cette ligne, + il regarde si <filename>foo</filename> existe; s'il existe, il compare la date de dernière modification de <filename>foo</filename> à celle de dernière modification de <filename>foo.c</filename>. Si <filename>foo</filename> n'existe pas, ou s'il est antérieur à <filename>foo.c</filename>, il regarde alors la ligne de - génération pour savoir ce qu'il faut faire. En + génération pour savoir ce qu'il faut faire. En d'autres termes, c'est la règle à appliquer pour - savoir si <filename>foo.c</filename> doit être + savoir si <filename>foo.c</filename> doit être recompilé.</para> <para>La ligne de génération commence par une - <token>tabulation</token> (appuyez sur la touche + <token>tabulation</token> (appuyez sur la touche <keycap>Tab</keycap>) suivie de la commande que vous taperiez - pour compiler <filename>foo</filename> si vous le faisiez sur - la ligne de commande. Si <filename>foo</filename> n'est pas - à jour ou s'il n'existe pas, <command>make</command> - exécute alors cette commande pour le créer. En + pour compiler <filename>foo</filename> si vous le faisiez sur + la ligne de commande. Si <filename>foo</filename> n'est pas + à jour ou s'il n'existe pas, <command>make</command> + exécute alors cette commande pour le créer. En d'autres termes, c'est la règle qui dit à <command>make</command> comment recompiler <filename>foo.c</filename>.</para> - <para>Ainsi, quand vous tapez <userinput>make</userinput>, il - fera en sorte que <filename>foo</filename> soit en phase avec les + <para>Ainsi, quand vous tapez <userinput>make</userinput>, il + fera en sorte que <filename>foo</filename> soit en phase avec les dernières modifications que vous avez apportées à - <filename>foo.c</filename>. Ce principe s'étend aux - <filename>Makefile</filename>s avec des centaines de - cibles - de fait, sur FreeBSD, il est possible de compiler - tout le système d'exploitation en tapant simplement - <userinput>make world</userinput> dans le répertoire + <filename>foo.c</filename>. Ce principe s'étend aux + <filename>Makefile</filename>s avec des centaines de + cibles - de fait, sur FreeBSD, il est possible de compiler + tout le système d'exploitation en tapant simplement + <userinput>make world</userinput> dans le répertoire adéquat!</para> <para>Une autre particularité de <filename>Makefile</filename>s est que les cibles ne sont pas nécessairement des programmes. Nous pourrions par exemple avoir le <filename>Makefile</filename> - suivant: + suivant: <programlisting> foo: foo.c cc -o foo foo.c @@ -937,13 +937,13 @@ install: <para>Nous pouvons dire à <command>make</command> quelle cible nous voulons atteindre en tapant: <screen>&prompt.user; <userinput>make <replaceable>cible</replaceable></userinput></screen> - <command>make</command> examinera alors cette cible et ignorera - toutes les autres. Par exemple, si, avec le + <command>make</command> examinera alors cette cible et ignorera + toutes les autres. Par exemple, si, avec le <filename>Makefile</filename> précédent, nous tapons <userinput>make foo</userinput>, <command>make</command> ignorera la cible <action>install</action>.</para> - <para>Si nous tapons simplement <userinput>make</userinput> tout - court, il examinera toujours la première cible et + <para>Si nous tapons simplement <userinput>make</userinput> tout + court, il examinera toujours la première cible et s'arrêtera ensuite sans s'occuper des autres. Si nous avions tapé <userinput>make</userinput> dans ce cas, il serait simplement allé à la cible @@ -954,17 +954,17 @@ install: <para>Remarquez que la cible <action>install</action> ne dépend en fait de rien du tout! Cela signifie que la commande sur la ligne suivante est toujours exécutée si nous essayons de - reconstruire cette cible en tapant + reconstruire cette cible en tapant <userinput>make install</userinput>. Dans ce cas, il copiera <filename>foo</filename> dans le répertoire de l'utilisateur. C'est souvent utilisé par les <filename>Makefile</filename>s de logiciels, de sorte que l'application soit installée dans - le bon répertoire, une fois correctement + le bon répertoire, une fois correctement compilée.</para> <para>C'est un point un peu délicat à expliquer. Si vous ne comprenez pas exactement comment <command>make</command> fonctionne, la meilleure chose à faire est d'écrire - un programme simple comme le classique “Bonjour, le + un programme simple comme le classique “Bonjour, le monde!”, un fichier <filename>Makefile</filename> et de faire des essais. Compilez ensuite en utilisant plus d'un fichier source, ou en ayant un fichier source qui inclut un @@ -974,7 +974,7 @@ install: </sect2> <sect2> <title>Makefiles FreeBSD</title> - <para>L'écriture de <filename>Makefile</filename>s peut + <para>L'écriture de <filename>Makefile</filename>s peut être assez compliquée. Heureusement, les systèmes basés sur BSD, comme FreeBSD, en fournissent de très puissants, intégrés au système. Le catalogue des @@ -992,12 +992,12 @@ DISTFILES= scheme-microcode+dist-7.3-freebsd.tgz qui se passe:</para> <procedure> <step> - <para>Il regarde si le code source de ce logiciel est + <para>Il regarde si le code source de ce logiciel est déjà présent sur le système.</para> </step> <step> - <para>S'il n'y est pas, une connexion FTP à l'URL - indiquée par <symbol>MASTER_SITES</symbol> est + <para>S'il n'y est pas, une connexion FTP à l'URL + indiquée par <symbol>MASTER_SITES</symbol> est établie pour télécharger le source.</para> </step> <step> @@ -1007,27 +1007,27 @@ DISTFILES= scheme-microcode+dist-7.3-freebsd.tgz pas été corrompu pendant le transfert.</para> </step> <step> - <para>Les modifications nécessaires pour que le code + <para>Les modifications nécessaires pour que le code fonctionne sous FreeBSD sont appliquées - c'est ce que l'on appelle <firstterm>patcher</firstterm>.</para> </step> <step> <para>Les opérations particulières de configuration du source sont effectuées. (De nombreuses distributions de - programmes Unix essayent de déterminer sur quel - système elles sont compilées et de quelles - fonctionnalités Unix optionnelles il + programmes Unix essayent de déterminer sur quel + système elles sont compilées et de quelles + fonctionnalités Unix optionnelles il dispose - c'est à ce stade du scénario d'installation de logiciels sous FreeBSD que leur sont fournies - ces informations).</para> + ces informations).</para> </step> <step> <para>Le code source du programme est compilé. De fait, on - passe dans le répertoire où le code a - été décompacté et + passe dans le répertoire où le code a + été décompacté et <command>make</command> y est exécuté - le <filename>Makefile</filename> du programme lui-même contient - les informations nécessaires à sa + les informations nécessaires à sa compilation.</para> </step> <step> @@ -1036,32 +1036,32 @@ DISTFILES= scheme-microcode+dist-7.3-freebsd.tgz si nous avons confiance dans le programme, nous pouvons taper <userinput>make install</userinput>. Cela recopiera le programme et tous les fichiers d'environnement dont il a besoin à - l'endroit adéquat; une entrée sera aussi - créée dans une <database>base de données des + l'endroit adéquat; une entrée sera aussi + créée dans une <database>base de données des logiciels</database>, de façon à ce qu'il puisse être désinstallé par la suite, si nous changeons d'avis.</para> </step> </procedure> <para>Je pense que vous serez maintenant d'accord pour trouver que c'est - assez impressionnant pour une simple procédure de quatre + assez impressionnant pour une simple procédure de quatre lignes!</para> - <para>Le secret se trouve à la dernière ligne, qui dit - à <command>make</command> d'aller voir ce qu'il y a dans le - <filename>Makefile</filename> appelé + <para>Le secret se trouve à la dernière ligne, qui dit + à <command>make</command> d'aller voir ce qu'il y a dans le + <filename>Makefile</filename> appelé <filename>bsd.port.mk</filename>. Il est facile de rater cette ligne, mais c'est pourtant de là que vient toute la mécanique subtile. Quelqu'un a écrit un <filename>Makefile</filename> - qui dit à <command>make</command> de faire tout ce qui a + qui dit à <command>make</command> de faire tout ce qui a été décrit ci-dessus (plus deux ou trois autres choses dont je n'ai pas parlé, dont le traitement des erreurs qui pourraient se produire) et tout le monde peut l'utiliser en - mettant simplement cette unique ligne dans son propre + mettant simplement cette unique ligne dans son propre <filename>Makefile</filename>!</para> - <para>Si vous voulez jeter un oeil à ces + <para>Si vous voulez jeter un oeil à ces <filename>Makefile</filename>s systèmes, ils sont dans le répertoire <filename>/usr/share/mk</filename>, mais il vaut - mieux attendre d'avoir un peu d'expérience des + mieux attendre d'avoir un peu d'expérience des <filename>Makefile</filename>s, parce qu'ils sont très compliqués (et si vous les regardez, ayez sous la main une bonne dose de café serré!).</para> @@ -1069,35 +1069,35 @@ DISTFILES= scheme-microcode+dist-7.3-freebsd.tgz <sect2> <title>Utilisation plus poussée de <command>make</command></title> <para> <command>make</command> est un outil très puissant, et peut - faire beaucoup plus que l'exemple élémentaire que nous + faire beaucoup plus que l'exemple élémentaire que nous avons donné. Il y a malheureusement plusieurs versions de - <command>make</command>, et elles sont très + <command>make</command>, et elles sont très différentes. La meilleure façon de savoir ce qu'elles - peuvent faire est certainement de lire la - documentation - espérons que cette introduction + peuvent faire est certainement de lire la + documentation - espérons que cette introduction vous aura fourni les bases pour le faire.</para> <para>La version de <command>make</command> fournie avec FreeBSD est <application>Berkeley make</application>; elle s'accompagne d'un guide dans <filename>/usr/share/doc/psd/12.make</filename>. Pour le - visualiser, tapez: + visualiser, tapez: <screen>&prompt.user; <userinput>zmore paper.ascii.gz</userinput></screen> dans ce répertoire.</para> - <para>Il y a des nombreux logiciels du catalogue des logiciels + <para>Il y a des nombreux logiciels du catalogue des logiciels portés qui utilisent <application>GNU make</application>, qui - est très bien documenté dans les pages + est très bien documenté dans les pages “info”. Si vous avez installé un de ces logiciels, <application>GNU make</application> sera automatiquement installé sont le nom <command>gmake</command>. Il est aussi disponible sous forme de logiciel porté ou précompilé autonome.</para> <para>Pour visualiser les pages “info” de - <application>GNU make</application>, il vous faut éditer le + <application>GNU make</application>, il vous faut éditer le fichier <filename>dir</filename> du répertoire <filename>/usr/local/info</filename> et y ajouter une ligne pour ce programme. C'est une ligne du genre: <programlisting> * Make: (make). L'utilitaire GNU Make. </programlisting> - Une fois que c'est fait, vous pouvez taper <userinput>info</userinput> + Une fois que c'est fait, vous pouvez taper <userinput>info</userinput> puis sélectionner <guimenuitem>make</guimenuitem> dans le menu (ou sous <application>Emacs</application>, taper <userinput>C-h i</userinput>).</para> @@ -1108,7 +1108,7 @@ DISTFILES= scheme-microcode+dist-7.3-freebsd.tgz <sect2> <title>Le débogueur</title> <para>Le débogueur qui est fourni avec FreeBSD s'appelle - <command>gdb</command> + <command>gdb</command> (<application>GNU débogueur</application>). Vous le lancez en tapant: <screen>&prompt.user; <userinput>gdb <replaceable>nom_du_programme</replaceable></userinput></screen> @@ -1117,22 +1117,22 @@ DISTFILES= scheme-microcode+dist-7.3-freebsd.tgz <screen><userinput>M-x gdb RET <replaceable>progname</replaceable> RET</userinput></screen> </para> <para>Se servir d'un débogueur vous permet d'exécuter le - programme sous contrôle. Vous pouvez typiquement + programme sous contrôle. Vous pouvez typiquement l'exécuter pas à pas, inspecter les valeurs des variables, les modifier, dire au débogueur d'exécuter - le programme jusqu'à un certain endroit et de s'y + le programme jusqu'à un certain endroit et de s'y arrêter, et ainsi de suite. Vous pouvez même - le rattacher à un programme qui est déjà en - cours d'exécution, ou charger une image - mémoire - “<foreignphrase>core</foreignphrase>”. + le rattacher à un programme qui est déjà en + cours d'exécution, ou charger une image + mémoire - “<foreignphrase>core</foreignphrase>”. Il est même possible de déboguer le noyau, bien que cela - soit un peu plus compliqué que dans le cas des programmes + soit un peu plus compliqué que dans le cas des programmes utilisateurs, dont nous parlerons dans cette section.</para> <para><command>gdb</command> dispose d'une assez bonne aide en ligne, ainsi que d'un jeu de pages “info”, cette section se - concentrera donc sur quelques commandes de base.</para> + concentrera donc sur quelques commandes de base.</para> <para>Enfin, si le mode de fonctionnement en ligne de commande vous - rebute, il existe une interface graphique appelée + rebute, il existe une interface graphique appelée <ulink url="http://www.freebsd.org/ports/devel.html">xxgdb</ulink> au catalogue des logiciels portés.</para> <para>Cette section est destinée à servir d'introduction @@ -1143,8 +1143,8 @@ DISTFILES= scheme-microcode+dist-7.3-freebsd.tgz <sect2> <title>Exécuter un programme sous le débogueur</title> <para>Il faudra que vous ayez compilé le programme avec l'option - <option>-g</option> pour tirer le meilleur parti de - <command>gdb</command>. Cela fonctionnera sans cela, mais vous ne + <option>-g</option> pour tirer le meilleur parti de + <command>gdb</command>. Cela fonctionnera sans cela, mais vous ne verrez que le nom de la fonction dans laquelle vous êtes, au lieu du code source. Si vous avez un message du genre: <screen>… (no debugging symbols found) …</screen> @@ -1152,21 +1152,21 @@ DISTFILES= scheme-microcode+dist-7.3-freebsd.tgz programme n'a pas été compilé avec l'option <option>-g</option>.</para> <para>A l'invite de <command>gdb</command>, tapez <userinput>break - main</userinput>. Cela dira au débogueur d'exécuter le + main</userinput>. Cela dira au débogueur d'exécuter le code préliminaire de mise en oeuvre dans le programme et de s'arrêter au début de votre programme. Tapez maintenant <userinput>run</userinput> pour lancer le programme - il - commencera au début du code préliminaire et sera - interrompu par le débogueur sur l'appel de - <function>main()</function>. (Si vous vous étiez jamais - demandé d'où la fonction <function>main()</function> + commencera au début du code préliminaire et sera + interrompu par le débogueur sur l'appel de + <function>main()</function>. (Si vous vous étiez jamais + demandé d'où la fonction <function>main()</function> était appelée, vous le savez maintenant!).</para> <para>Vous pouvez maintenant exécuter le programme une ligne à la fois, en appuyant sur <command>n</command>. Si vous arrivez sur un appel de fonction, vous pouvez passer dans la fonction en appuyant sur <command>s</command>. Une fois dans la - fonction, vous pouvez terminer son exécution et en sortir en - tapant <command>f</command>. Vous pouvez aussi utiliser + fonction, vous pouvez terminer son exécution et en sortir en + tapant <command>f</command>. Vous pouvez aussi utiliser <command>up</command> et <command>down</command> pour jeter un coup d'oeil au code appelant.</para> <para>Voici un exemple simple de la manière de diagnostiquer une @@ -1192,7 +1192,7 @@ int bazz(int un_entier) { </programlisting> </para> <para>Ce programme affecte à <symbol>i</symbol> la valeur - <literal>5</literal> et la passe à la fonction + <literal>5</literal> et la passe à la fonction <function>bazz()</function> qui affiche la valeur que nous lui donnons en paramètre.</para> <para>Quand nous compilons et exécutons le programme, nous @@ -1201,7 +1201,7 @@ int bazz(int un_entier) { &prompt.user; <userinput>./temp</userinput> C'est mon programme Vous m'avez donné 4231</screen></para> - <para>Ce n'est pas ce à quoi nous nous attendions! C'est le + <para>Ce n'est pas ce à quoi nous nous attendions! C'est le moment d'aller voir ce qui ce passe! <screen>&prompt.user; <userinput>gdb temp</userinput> GDB is free software and you are welcome to distribute copies of it @@ -1220,9 +1220,9 @@ C'est mon programme <lineannotation>Le programme imprime</lineannotation> bazz (un_entier=4231) at temp.c:17 <lineannotation><command>gdb</command> affiche la position dans la pile d'appel</lineannotation> (gdb)</screen></para> <para>Une minute! Comment <symbol>un_entier</symbol> peut-il valoir - <literal>4231</literal>? Ne l'avons-nous pas initialisé - à <literal>5</literal> dans <function>main()</function>? - Revenons à <function>main()</function> et jetons un + <literal>4231</literal>? Ne l'avons-nous pas initialisé + à <literal>5</literal> dans <function>main()</function>? + Revenons à <function>main()</function> et jetons un oeil.</para> <para> <screen>(gdb) <userinput>up</userinput> <lineannotation>Remonter d'un cran dans la pile d'appel</lineannotation> @@ -1240,50 +1240,50 @@ main() { printf("C'est mon programme\n"); <lineannotation>…</lineannotation> </programlisting> - mais nous avons oublié la ligne <literal>i=5;</literal>. + mais nous avons oublié la ligne <literal>i=5;</literal>. Comme nous n'avons pas initialisé <symbol>i</symbol>, il - prend la valeur qui se trouve à cet endroit de la + prend la valeur qui se trouve à cet endroit de la mémoire quand le programme s'exécute, dans notre - cas, il s'est trouvé que c'était + cas, il s'est trouvé que c'était <literal>4231</literal>.</para> <note> <para><command>gdb</command> affiche l'endroit où nous nous - trouvons dans la pile d'appel, chaque fois que nous entrons ou + trouvons dans la pile d'appel, chaque fois que nous entrons ou sortons d'une fonction, même si nous utilisons - <command>up</command> et <command>down</command> pour nous + <command>up</command> et <command>down</command> pour nous déplacer dans la pile. Cela nous donne le nom de la fonction et les valeurs de ses paramètres, ce qui nous aide à repérer où nous sommes et ce qu'il se passe. (La pile - d'appel est une zone de mémoire où le programme + d'appel est une zone de mémoire où le programme enregistre les informations sur les paramètres passés aux fonctions et où aller quand il ressort d'un fonction appelée.)</para> </note> </sect2> <sect2> - <title>Examiner un fichier + <title>Examiner un fichier “<foreignphrase>core</foreignphrase>”</title> - <para>Un fichier “<foreignphrase>core</foreignphrase>” est - essentiellement un fichier qui contient l'état complet du - programme au moment où il s'est “planté”. Au - “bon vieux temps”, les programmeurs devaient imprimer le - contenu en hexadécimal des fichiers + <para>Un fichier “<foreignphrase>core</foreignphrase>” est + essentiellement un fichier qui contient l'état complet du + programme au moment où il s'est “planté”. Au + “bon vieux temps”, les programmeurs devaient imprimer le + contenu en hexadécimal des fichiers “<foreignphrase>core</foreignphrase>” et transpirer sur des manuels de code machine, mais la vie est aujourd'hui un peu plus facile. - Au passage, sous FreeBSD et les autres systèmes 4.4BSD, un - fichier “<foreignphrase>core</foreignphrase>” s'appelle + Au passage, sous FreeBSD et les autres systèmes 4.4BSD, un + fichier “<foreignphrase>core</foreignphrase>” s'appelle <filename><replaceable>nom_du_programme</replaceable>.core</filename>, et non <filename>core</filename> tout court, - de façon à ce que l'on sache à quel programme il + de façon à ce que l'on sache à quel programme il correspond.</para> - <para>Pour examiner un fichier - “<foreignphrase>core</foreignphrase>”, lancez + <para>Pour examiner un fichier + “<foreignphrase>core</foreignphrase>”, lancez <command>gdb</command> comme d'habitude. Au lieu de taper <command>break</command> ou <command>run</command>, tapez: <screen>(gdb) <userinput>core <replaceable>nom_du_programme</replaceable>.core</userinput></screen> - Si vous n'êtes pas dans le même répertoire que - le fichier “<foreignphrase>core</foreignphrase>”, vous - devrez d'abord faire + Si vous n'êtes pas dans le même répertoire que + le fichier “<foreignphrase>core</foreignphrase>”, vous + devrez d'abord faire <userinput>dir /ou/se/trouve/le/fichier/core</userinput>.</para> <para>Vous devriez voir quelque chose comme: <screen>&prompt.user; <userinput>gdb a.out</userinput> @@ -1298,13 +1298,13 @@ Cannot access memory at address 0x7020796d. #0 0x164a in bazz (un_entier=0x5) at temp.c:17 (gdb)</screen></para> <para>Dans ce cas, le programme s'appelait <filename>a.out</filename>, le - fichier “<foreignphrase>core</foreignphrase>” s'appelle - donc <filename>a.out.core</filename>. Nous constatons que le programme - s'est terminé en erreur à cause d'une tentative - d'accès à une zone de mémoire qui n'était - pas accessible dans une fonction appelé + fichier “<foreignphrase>core</foreignphrase>” s'appelle + donc <filename>a.out.core</filename>. Nous constatons que le programme + s'est terminé en erreur à cause d'une tentative + d'accès à une zone de mémoire qui n'était + pas accessible dans une fonction appelé <function>bazz</function>.</para> - <para>Il est parfois utile de pouvoir savoir comment une fonction a + <para>Il est parfois utile de pouvoir savoir comment une fonction a été appelée, parce que le problème peut s'être produit bien au-dessus dans la pile d'appel dans un programme complexe. La commande <command>bt</command> dit à @@ -1320,25 +1320,25 @@ Cannot access memory at address 0x7020796d. <function>main()</function>.</para> </sect2> <sect2> - <title>Prendre le contrôle d'un programme en cours + <title>Prendre le contrôle d'un programme en cours d'exécution</title> <para>Une des possibilités les plus intéressantes de - <command>gdb</command> est qu'il peut se rattacher à un + <command>gdb</command> est qu'il peut se rattacher à un programme en cours d'exécution. Il faut bien sûr que vous ayez les autorisations suffisantes pour le faire. Le cas d'un programme - qui “fourche” - <foreignphrase>fork</foreignphrase> - est + qui “fourche” - <foreignphrase>fork</foreignphrase> - est un problème classique, lorsque vous voulez suivre le déroulement du processus fils, alors que le débogueur ne - vous permet que de tracer le processus père.</para> + vous permet que de tracer le processus père.</para> <para>Vous lancez alors un autre <command>gdb</command>, utilisez <command>ps</command> pour connaître l'IDentifiant de processus du fils, puis faites: -<screen>(gdb) <userinput>attach <replaceable>pid</replaceable></userinput></screen> - sous <command>gdb</command>, et déboguez alors comme +<screen>(gdb) <userinput>attach <replaceable>pid</replaceable></userinput></screen> + sous <command>gdb</command>, et déboguez alors comme d'habitude.</para> - <para>“Tout cela est bien beau”, vous dites vous + <para>“Tout cela est bien beau”, vous dites vous peut-être, “mais le temps que j'ai fait tout ça, le - processus fils aura déjà fait un bon bout de + processus fils aura déjà fait un bon bout de chemin”. Rien à craindre, aimable lecteur, voici ce qu'il faut faire (emprunté aux pages “info” de <command>gdb</command>): @@ -1363,39 +1363,39 @@ else if (pid == 0) { <sect2> <title>Emacs</title> <para>Les systèmes Unix ne s'accompagnent malheureusement pas - du type d'environnement de développement + du type d'environnement de développement intégré du genre “tout ce que vous avez toujours voulu et encore beaucoup plus en un seul monstrueux paquetage” dont disposent d'autres systèmes<footnote><para>Au moins, pas à moins que vous ne soyez prêt à les payer une somme - astronomique.</para></footnote>. Il est cependant possible de mettre - au point votre propre environnement. Il ne sera peut-être pas - aussi esthétique et il ne sera peut-être pas aussi + astronomique.</para></footnote>. Il est cependant possible de mettre + au point votre propre environnement. Il ne sera peut-être pas + aussi esthétique et il ne sera peut-être pas aussi intégré, mais vous pourrez le configurer comme vous le voulez. Et il est gratuit. En plus, vous en avez les sources.</para> <para>Emacs est la clé de tout. Il y a bien des gens qui le - décrient, mais nombreux sont ceux qui l'aiment. Si vous + décrient, mais nombreux sont ceux qui l'aiment. Si vous êtes des premiers, j'ai peur que cette section n'ait que peu - d'intérêt pour vous. Il vous faudra aussi pas mal de + d'intérêt pour vous. Il vous faudra aussi pas mal de mémoire pour l'utiliser. Je conseille 8Mo en mode texte et 16Mo sous X comme strict minimum pour avoir des temps de réponse raisonnables.</para> - <para>Emacs est essentiellement un éditeur extrêmement + <para>Emacs est essentiellement un éditeur extrêmement configurable - il a de fait été configuré au point de ressembler plus à un système - d'exploitation qu'à un éditeur! De nombreux + d'exploitation qu'à un éditeur! De nombreux développeurs et administrateurs système passent le plus - clair de leur temps à travailler sous Emacs, le quittant + clair de leur temps à travailler sous Emacs, le quittant seulement pour se déconnecter.</para> <para>Il est impossible de même résumer ici tout ce qu'Emacs est capable de faire, mais voici quelques fonctionnalités qui intéressent les développeurs: <itemizedlist> <listitem> - <para>Editeur très puissant qui permet et de rechercher et + <para>Editeur très puissant qui permet et de rechercher et remplacer des chaînes de caractères et d'utiliser pour le faire des expressions régulières (motifs), d'aller - au début ou à la fin de blocs syntaxiques, etc, + au début ou à la fin de blocs syntaxiques, etc, etc.</para> </listitem> <listitem> @@ -1409,7 +1409,7 @@ else if (pid == 0) { <para>Complètement configurable.</para> </listitem> <listitem> - <para>Vous pouvez compiler et déboguer des programmes depuis + <para>Vous pouvez compiler et déboguer des programmes depuis Emacs.</para> </listitem> <listitem> @@ -1432,27 +1432,27 @@ else if (pid == 0) { compile.</para> </listitem> </itemizedlist> - Et sans aucun doute bien d'autres choses qui m'ont + Et sans aucun doute bien d'autres choses qui m'ont échappées.</para> - <para>Emacs peut être installé sous FreeBSD sous forme de - <ulink url="http://www.freebsd.org/ports/editors.html">logiciel + <para>Emacs peut être installé sous FreeBSD sous forme de + <ulink url="http://www.freebsd.org/ports/editors.html">logiciel porté</ulink>.</para> - <para>Une fois qu'il est installé, lancez-le et tapez + <para>Une fois qu'il est installé, lancez-le et tapez <userinput>C-h t</userinput> - ce qui signifie maintenir - enfoncée la touche <keycap>Ctrl</keycap>, taper + enfoncée la touche <keycap>Ctrl</keycap>, taper <keycap>h</keycap>, relâcher la touche <keycap>Ctrl</keycap>, et appuyer ensuite sur <keycap>t</keycap> - pour lire le guide - d'Emacs (Vous pouvez aussi utiliser la souris pour sélectionner - <guimenuitem>Emacs - Tutorial</guimenuitem> - “<foreignphrase>Guide - Emacs</foreignphrase>” - depuis le menu + d'Emacs (Vous pouvez aussi utiliser la souris pour sélectionner + <guimenuitem>Emacs + Tutorial</guimenuitem> - “<foreignphrase>Guide + Emacs</foreignphrase>” - depuis le menu <guimenu>Help</guimenu> - “<foreignphrase>Aide</foreignphrase>”).</para> <para>Bien qu'Emacs ait des menus, il vaut la peine d'apprendre à - utiliser les raccourcis claviers, parce qu'il est bien plus rapide - quand vous éditez quelque chose d'appuyer sur deux ou trois + utiliser les raccourcis claviers, parce qu'il est bien plus rapide + quand vous éditez quelque chose d'appuyer sur deux ou trois touches que de courir après la souris et cliquer ensuite au bon - endroit. Si, par ailleurs, vous discutez avec des utilisateurs - expérimentés d'Emacs, vous vous apercevrez qu'ils + endroit. Si, par ailleurs, vous discutez avec des utilisateurs + expérimentés d'Emacs, vous vous apercevrez qu'ils utilisent assez couramment des expressions comme “<literal>M-x replace-s RET foo RET bar RET</literal>”, il peut donc servir de comprendre ce qu'ils veulent dire. Et de toute @@ -1460,79 +1460,79 @@ else if (pid == 0) { tenir sur une barre de menus.</para> <para>Il est heureusement assez facile de découvrir les raccourcis claviers, ils sont affichés dans les menus. Je vous conseille - d'utiliser les menus pour, par exemple, ouvrir un fichier - jusqu'à ce que vous compreniez comment cela marche et ayez - suffisamment confiance en vous, puis d'essayer C-x C-f. Une fois que - cela vous convient, passez à une autre des commandes des + d'utiliser les menus pour, par exemple, ouvrir un fichier + jusqu'à ce que vous compreniez comment cela marche et ayez + suffisamment confiance en vous, puis d'essayer C-x C-f. Une fois que + cela vous convient, passez à une autre des commandes des menus.</para> <para>Si vous ne vous rappelez pas ce que fait une combinaison - donnée de touches, choisissez <guimenuitem>Describe + donnée de touches, choisissez <guimenuitem>Describe Key</guimenuitem> - “<foreignphrase>Description d'une - touche</foreignphrase>” - dans le menu + touche</foreignphrase>” - dans le menu <guimenu>Help</guimenu> - “<foreignphrase>Aide</foreignphrase>” - et - tapez cette combinaison - Emacs vous dira ce qu'elle fait. - Vous pouvez aussi utiliser le choix <guimenuitem>Command + tapez cette combinaison - Emacs vous dira ce qu'elle fait. + Vous pouvez aussi utiliser le choix <guimenuitem>Command Apropos</guimenuitem> - “<foreignphrase>A propos d'une - commande</foreignphrase>” - pour connaître + commande</foreignphrase>” - pour connaître toutes les commandes comportant un mot donné et les touches qui leur correspondent.</para> <para>Au fait, l'expression plus haut signifie: enfoncer la touche - <keysym>Méta</keysym>, appuyer sur <keysym>x</keysym>, - relâcher la touche <keysym>Méta</keysym>, taper - <userinput>replace-s</userinput> (abréviation de - <literal>replace-string</literal> - “<foreignphrase>remplacer - une chaîne de caractères</foreignphrase>” - une autre - caractéristique d'Emacs est de vous permettre d'abréger - les commandes), appuyer sur <keysym>Entrée</keysym>, taper + <keysym>Méta</keysym>, appuyer sur <keysym>x</keysym>, + relâcher la touche <keysym>Méta</keysym>, taper + <userinput>replace-s</userinput> (abréviation de + <literal>replace-string</literal> - “<foreignphrase>remplacer + une chaîne de caractères</foreignphrase>” - une autre + caractéristique d'Emacs est de vous permettre d'abréger + les commandes), appuyer sur <keysym>Entrée</keysym>, taper <userinput>foo</userinput> (la chaîne que vous voulez remplacer), - appuyer sur <keysym>Entrée</keysym>, taper + appuyer sur <keysym>Entrée</keysym>, taper <userinput>bar</userinput> (la chaîne avec laquelle vous voulez remplacer <literal>foo</literal>) et appuyer encore sur - <keysym>Entrée</keysym>. Emacs effectuera alors - l'opération de recherche et remplacement que vous venez de + <keysym>Entrée</keysym>. Emacs effectuera alors + l'opération de recherche et remplacement que vous venez de demander.</para> - <para>Si vous vous demandez ce qu'est la touche - <keysym>Méta</keysym>, c'est une touche spéciale qu'ont + <para>Si vous vous demandez ce qu'est la touche + <keysym>Méta</keysym>, c'est une touche spéciale qu'ont beaucoup de stations Unix. Malheureusement, les PCs n'en ont pas, c'est - habituellement la touche <keysym>Alt</keysym> qui est utilisée - (ou si vous n'avez pas de chance, la touche + habituellement la touche <keysym>Alt</keysym> qui est utilisée + (ou si vous n'avez pas de chance, la touche <keysym>Echap</keysym>).</para> <para>Oh, et pour sortir d'Emacs, tapez <command>C-x C-c</command> (Ce qui signifie: enfoncer la touche <keysym>Ctrl</keysym>, appuyer sur - <keysym>c</keysym>, appuyer sur <keysym>x</keysym> et relâcher la - touche <keysym>Ctrl</keysym>). S'il y a des fichiers ouverts que vous - n'avez pas sauvegardés, Emacs vous demandera si vous voulez les - sauvegarder. (Oubliez que la documentation dit que la méthode - habituelle pour quitter Emacs est d'utiliser - <command>C-z</command> - cela laisse Emacs actif en - tâche de fond et n'est réellement utile que si vous - êtes sur un système qui ne gère pas de terminaux + <keysym>c</keysym>, appuyer sur <keysym>x</keysym> et relâcher la + touche <keysym>Ctrl</keysym>). S'il y a des fichiers ouverts que vous + n'avez pas sauvegardés, Emacs vous demandera si vous voulez les + sauvegarder. (Oubliez que la documentation dit que la méthode + habituelle pour quitter Emacs est d'utiliser + <command>C-z</command> - cela laisse Emacs actif en + tâche de fond et n'est réellement utile que si vous + êtes sur un système qui ne gère pas de terminaux virtuels).</para> </sect2> <sect2> <title>Configurer Emacs</title> <para>Emacs fait des choses admirables; certaines fonctionnalités - sont incorporées, d'autres doivent être + sont incorporées, d'autres doivent être configurées.</para> - <para>Au lieu d'utiliser un langage de macros-instructions - propriétaires, Emacs se sert d'une version de Lisp + <para>Au lieu d'utiliser un langage de macros-instructions + propriétaires, Emacs se sert d'une version de Lisp spécialement adaptée aux éditeurs, connue sous le nom de Emacs Lisp. Ce peut être très utile si vous voulez - aller plus loin et apprendre ensuite par exemple Common Lisp, parce - qu'il est considérablement plus léger que Common Lisp + aller plus loin et apprendre ensuite par exemple Common Lisp, parce + qu'il est considérablement plus léger que Common Lisp (quoique qu'encore assez imposant!).</para> - <para>La meilleure façon d'apprendre Emacs Lisp est de - télécharger - <ulink url="ftp://prep.ai.mit.edu/pub/gnu/elisp-manual-19-2.4.tar.gz">le + <para>La meilleure façon d'apprendre Emacs Lisp est de + télécharger + <ulink url="ftp://prep.ai.mit.edu/pub/gnu/elisp-manual-19-2.4.tar.gz">le Guide Emacs Lisp</ulink>.</para> <para>Il n'y a cependant pas besoin de connaître quoique ce soit à Lisp pour commencer à configurer Emacs, parce que j'ai inclu un fichier <filename>.emacs</filename> d'exemple, qui devrait - suffire au début. Copiez-le simplement dans votre + suffire au début. Copiez-le simplement dans votre répertoire utilisateur et relancez Emacs, s'il s'exécute déjà; il lira les commandes du fichier et (je - l'espère) vous fournira une configuration de base utile.</para> + l'espère) vous fournira une configuration de base utile.</para> </sect2> <sect2> <title>Un exemple de fichier <filename>.emacs</filename></title> @@ -1546,43 +1546,43 @@ else if (pid == 0) { commentaire et est ignoré par Emacs.</para> </listitem> <listitem> - <para>La première ligne, - <literal>-*- Emacs-Lisp -*-</literal> permet - d'éditer le fichier <filename>.emacs</filename> - lui-même sous Emacs et de profiter de toutes les + <para>La première ligne, + <literal>-*- Emacs-Lisp -*-</literal> permet + d'éditer le fichier <filename>.emacs</filename> + lui-même sous Emacs et de profiter de toutes les fonctionnalitées liées à l'édition de code Emacs Lisp. Emacs tente habituellement de deviner le type de - fichier en fonction de son nom, mais risque de ne pas y arriver + fichier en fonction de son nom, mais risque de ne pas y arriver pour le fichier <filename>.emacs</filename>.</para> </listitem> <listitem> - <para>La touche <keysym>Tab</keysym> est utilisée pour + <para>La touche <keysym>Tab</keysym> est utilisée pour l'indentation dans certains modes, de sorte que si vous appuyez sur cette touche cela indente la ligne de code courante. Si vous voulez mettre un caractère <token>tabulation</token> dans votre texte, enfoncer la touche <keysym>Ctrl</keysym> en - même temps que vous appuyez sur + même temps que vous appuyez sur <keysym>Tab</keysym>.</para> </listitem> <listitem> - <para>Ce fichier permet le mise en valeur syntaxique de code C, + <para>Ce fichier permet le mise en valeur syntaxique de code C, C++, Perl, Lisp et Scheme, en déterminant le langage d'après le nom du fichier édité.</para> </listitem> <listitem> - <para>Emacs a déjà une fonction - prédéfinie appelée + <para>Emacs a déjà une fonction + prédéfinie appelée <function>next-error</function> - “<foreignphrase>erreur suivante</foreignphrase>”. Dans la fenêtre de - résultats d'une compilation, cela vous permet d'aller - d'une erreur à la suivante avec <command>M-n</command>; + résultats d'une compilation, cela vous permet d'aller + d'une erreur à la suivante avec <command>M-n</command>; nous définissons la fonction complémentaire <function>previous-error</function> - “<foreignphrase>erreur précédente</foreignphrase>”, qui vous permet de retourner à l'erreur précédente avec <command>M-p</command>. Le plus sympathique est que <command>C-c C-c</command> ouvrira le fichier source où - l'erreur s'est produite et ira à la ligne + l'erreur s'est produite et ira à la ligne concernée.</para> </listitem> <listitem> @@ -1608,7 +1608,7 @@ else if (pid == 0) { ;; Ce fichier est conçu pour être relu; la variable ;; first-time est utilisée pour éviter les problèmes ;; que cela pourra poser. -(defvar first-time t +(defvar first-time t "Indicateur signifiant que le fichier .emacs est lu pour la première fois") ;; Méta @@ -1678,7 +1678,7 @@ else if (pid == 0) { (autoload 'ediff-buffers "ediff" "Interface Emacs intelligente pour diff" t) (autoload 'ediff-files "ediff" "Interface Emacs intelligente pour diff" t) (autoload 'ediff-files-remote "ediff" - "Interface Emacs intelligente pour diff") + "Interface Emacs intelligente pour diff") </screen> <screen> @@ -1692,7 +1692,7 @@ else if (pid == 0) { ) auto-mode-alist))) ;; Mise en valeur syntaxique automatique -(defvar font-lock-auto-mode-list +(defvar font-lock-auto-mode-list (list 'c-mode 'c++-mode 'c++-c-mode 'emacs-lisp-mode 'lisp-mode 'perl-mode 'scheme-mode) "Listes des modes à démarrer toujours avec mise en valeur") @@ -1703,7 +1703,7 @@ else if (pid == 0) { (defun font-lock-auto-mode-select () "Sélectionne automatiquement type de mise en valeur si le major mode courant est dans font-lock-auto-mode-list" - (if (memq major-mode font-lock-auto-mode-list) + (if (memq major-mode font-lock-auto-mode-list) (progn (font-lock-mode t)) ) @@ -1716,15 +1716,15 @@ else if (pid == 0) { (setq dabbrev-always-check-other-buffers t) (setq dabbrev-abbrev-char-regexp "\\sw\\|\\s_") (add-hook 'emacs-lisp-mode-hook - '(lambda () + '(lambda () (set (make-local-variable 'dabbrev-case-fold-search) nil) (set (make-local-variable 'dabbrev-case-replace) nil))) (add-hook 'c-mode-hook - '(lambda () + '(lambda () (set (make-local-variable 'dabbrev-case-fold-search) nil) (set (make-local-variable 'dabbrev-case-replace) nil))) (add-hook 'text-mode-hook - '(lambda () + '(lambda () (set (make-local-variable 'dabbrev-case-fold-search) t) (set (make-local-variable 'dabbrev-case-replace) t))) @@ -1838,7 +1838,7 @@ else if (pid == 0) { (progn ;; (global-set-key [M-f1] 'hilit-repaint-command) ;; (global-set-key [M-f2] [?\C-u M-f1]) - (setq hilit-mode-enable-list + (setq hilit-mode-enable-list '(not text-mode c-mode c++-mode emacs-lisp-mode lisp-mode scheme-mode) hilit-auto-highlight nil @@ -1850,7 +1850,7 @@ else if (pid == 0) { (setq baud-rate 2400) ; Pour les connections série lentes ) -;; Terminal type TTY +;; Terminal type TTY (if (and (not window-system) (not (equal system-type 'ms-dos))) (progn @@ -1891,36 +1891,36 @@ else if (pid == 0) { </example> </sect2> <sect2> - <title>Permettre à Emacs de comprendre de nouveaux + <title>Permettre à Emacs de comprendre de nouveaux langages</title> <para>Bon, tout cela est très bien si vous ne voulez programmer qu'avec les langages déjà introduits dans le fichier <filename>.emacs</filename> (C, C++, Perl, Lisp et Scheme), mais que se - passe-t-il quand un nouveau langage appelé + passe-t-il quand un nouveau langage appelé “whizbang” fait son apparition, avec plein de nouvelles fonctionnalités attrayantes?</para> - <para>La première chose à faire est de regarder si whizbang + <para>La première chose à faire est de regarder si whizbang s'accompagne de fichiers de configuration d'Emacs pour ce langage. - Ces fichiers ont généralement comme extension + Ces fichiers ont généralement comme extension <filename>.el</filename>, raccourci pour “Emacs Lisp”. Par exemple, si whizbang est un logiciel porté pour FreeBSD, ces fichiers peuvent être repérés par: <screen>&prompt.user; <userinput>find /usr/ports/lang/whizbang -name "*.el" -print</userinput></screen> - et il faut les installer en le copiant dans le répertoire du - “site Lisp” d'Emacs. Sous FreeBSD 2.1.0-RELEASE, c'est le + et il faut les installer en le copiant dans le répertoire du + “site Lisp” d'Emacs. Sous FreeBSD 2.1.0-RELEASE, c'est le répertoire <filename>/usr/local/share/emacs/site-lisp</filename>.</para> - <para>Ainsi par exemple, si la commande précédente nous + <para>Ainsi par exemple, si la commande précédente nous donnait: <screen>/usr/ports/lang/whizbang/work/misc/whizbang.el</screen> nous le copierions alors comme suit: <screen>&prompt.user; <userinput>cp /usr/ports/lang/whizbang/work/misc/whizbang.el /usr/local/share/emacs/site-lisp</userinput></screen> </para> - <para>Décidons ensuite de l'extension que doivent avoir les + <para>Décidons ensuite de l'extension que doivent avoir les fichiers source whizbang. Supposons, pour les besoins de l'exemple, qu'ils se terminent tous par <filename>.wiz</filename>. Il faut ajouter une entrée à notre fichier <filename>.emacs</filename>, - pour être sûr qu'Emacs puisse utiliser les informations du + pour être sûr qu'Emacs puisse utiliser les informations du fichier <filename>whizbang.el</filename>.</para> <para>Recherchons l'entrée <symbol>auto-mode-alist</symbol> dans <filename>.emacs</filename> et ajoutons une ligne pour whizbang, par @@ -1931,16 +1931,16 @@ else if (pid == 0) { ("\\.wiz$" . whizbang-mode) ("\\.scm$" . scheme-mode) <lineannotation>…</lineannotation> - </programlisting> - Cela signifie qu'Emacs passera automatiquement en + </programlisting> + Cela signifie qu'Emacs passera automatiquement en <function>whizbang-mode</function> à l'édition d'un fichier d'extension <filename>.wiz</filename>.</para> - <para>Juste après, il y a une entrée + <para>Juste après, il y a une entrée <symbol>font-lock-auto-mode-list</symbol>. Ajoutez-y <function>whizbang-mode</function> comme ceci: <programlisting> ;; Auto font-lock-mode -(defvar font-lock-auto-mode-list +(defvar font-lock-auto-mode-list (list 'c-mode 'c++-mode 'c++-c-mode 'emacs-lisp-mode 'whizbang-mode 'lisp-mode 'perl-mode 'scheme-mode) "Listes des modes à démarrer toujours en font-lock-mode") </programlisting> @@ -1948,7 +1948,7 @@ else if (pid == 0) { <function>font-lock-mode</function> (i.e., la mise en valeur syntaxique) à l'édition d'un fichier <filename>.wiz</filename>.</para> - <para>Cela suffit. S'il y a autre chose que vous voulez automatiser + <para>Cela suffit. S'il y a autre chose que vous voulez automatiser à l'ouverture d'un fichier <filename>.wiz</filename>, vous pouvez ajouter un <function>whizbang-mode hook</function> (voyez mon <function>my-scheme-mode-hook</function> pour avoir un exemple simple @@ -1960,36 +1960,36 @@ else if (pid == 0) { <title>A lire pour aller plus loin</title> <itemizedlist> <listitem> - <para>Brian Harvey et Matthew Wright <emphasis>Simply + <para>Brian Harvey et Matthew Wright <emphasis>Simply Scheme</emphasis> MIT 1994.<!-- <br> --> ISBN 0-262-08226-8</para> </listitem> <listitem> - <para>Randall Schwartz <emphasis>Learning Perl</emphasis> O'Reilly + <para>Randall Schwartz <emphasis>Learning Perl</emphasis> O'Reilly 1993<!-- <br> --> ISBN 1-56592-042-2</para> </listitem> <listitem> <para>Patrick Henry Winston et Berthold Klaus Paul Horn - <emphasis>Lisp (3rd Edition)</emphasis> Addison-Wesley + <emphasis>Lisp (3rd Edition)</emphasis> Addison-Wesley 1989<!-- <br> --> ISBN 0-201-08319-1</para> </listitem> <listitem> - <para>Brian W. Kernighan et Rob Pike <emphasis>The Unix Programming - Environment</emphasis> Prentice-Hall 1984<!-- <br> --> ISBN + <para>Brian W. Kernighan et Rob Pike <emphasis>The Unix Programming + Environment</emphasis> Prentice-Hall 1984<!-- <br> --> ISBN 0-13-937681-X</para> </listitem> <listitem> - <para>Brian W. Kernighan et Dennis M. Ritchie <emphasis>The C - Programming Language (2nd Edition)</emphasis> Prentice-Hall + <para>Brian W. Kernighan et Dennis M. Ritchie <emphasis>The C + Programming Language (2nd Edition)</emphasis> Prentice-Hall 1988<!-- <br> --> ISBN 0-13-110362-8</para> </listitem> <listitem> - <para>Bjarne Stroustrup <emphasis>The C++ Programming - Language</emphasis> Addison-Wesley 1991<!-- <br> --> ISBN + <para>Bjarne Stroustrup <emphasis>The C++ Programming + Language</emphasis> Addison-Wesley 1991<!-- <br> --> ISBN 0-201-53992-6</para> </listitem> <listitem> - <para>W. Richard Stevens <emphasis>Advanced Programming in the Unix - Environment</emphasis> Addison-Wesley 1992<!-- <br> --> ISBN + <para>W. Richard Stevens <emphasis>Advanced Programming in the Unix + Environment</emphasis> Addison-Wesley 1992<!-- <br> --> ISBN 0-201-56317-7</para> </listitem> <listitem> |