- Logique binaire
Un certain monsieur Boole, mathématicien, définit une algèbre binaire (une algèbre se différentie d'une arithmétique qui n'utilise que des valeurs numériques par le fait qu’elle permet d’utiliser aussi des variables.) Sa belle théorie restera pendant des années dans les tiroirs. Tout comme la théorie des nombres complexes d'ailleurs qui attendra l'arrivée des composants électroniques pour être largement usitée. Pensez donc utiliser une base 2 à quoi ça peut bien servir sinon qu’à se compliquer la vie. Sauf que lorsque c’est la machine qui se complique la vie cela simplifie la nôtre. De nos jours, la logique binaire est surtout enseignée. Dans les applications pratiques c'est une logique à trois états qui est réellement utilisée. Un état bas un état haut et un état haute impédance comme on le nomme par exemple en électronique. Des calculs théoriques ont montrés que le nombre d'états optimum était égal à e = 2,71828 qui est plus près de 3 que de 2.
- Vitesse limitée à 300 000 kilomètres par seconde
Les semi-conducteurs sont nés à cause des mauvais conducteurs ! En fait, ils sont nés à cause des bons conducteurs. Bref les semi-conducteurs sont ni des bons ni des mauvais conducteurs. Il n'existe pas de bon conducteurs. L'air qui nous entoure peut paraître un bon isolant : votre prise de courant électrique ne laisse pas s'échapper le courant. C'est l'air qui isole les deux pôles. Pourtant l'air peut devenir conducteur sous l’effet d’un orage. C’est la différence de potentiel (le champ électrique) qui est tel qu’à partir de plus de 3 centimètres par kilo volts, les électrons sont arrachés et le courant électrique finit par passer. Dans notre univers toute matière est composée d'atomes donc tous les corps sont électrisables et conducteurs. Une jonction PN (Positif Négatif semi conducteur) forme une diode qui ne laisse passer le courant que dans un seul sens. C'est surtout l'invention du transistor (une jonction PNP ou NPN) qui a révolutionné notre manière de vivre. Grâce aux transistors deux types d’applications naissent. L’électronique analogique c’est toute la partie amplification du son des postes de radio par exemple. La seconde partie est elle dite en commutation (logique binaire) c’est comme le relais ou l’interrupteur le courant passe ou il ne passe pas, c’est cette partie qui va être à l’origine de l’informatique.
- 1+1=0 et je retiens 1
L'électronique à été très vite utilisée pour résoudre des problèmes .... de mécanique. En fait on peut faire correspondre à un composant électronique une caractéristique mécanique. On peut ainsi à moindre frais et à une échelle toute autre, tester la résistance d'un pont aux vibrations avec une analogie électronique ce qui est bien plus simple à mettre au point que de construire même un modèle réduit du pont. On peut aussi très vite faire des calculs analogiques. N'oublions pas que l'amplificateur opérationel (en gros un super transistor monté en émetteur commun) permet de faire des opérations analogiques comme la dérivée ou l'intégration d'un signal. On peut aussi effectuer des sommes et des soustractions. Avec l'apparition du zéro et des nombres entiers naturels l'opération la plus usuelle est l'addition. Et bien, c'est la seule réellement nécessaire (le CPU ne sait faire que ça de toute façon!) L'apparition de la soustraction peut être vu de deux façons différentes. Soit on considère quand on a 3 - 5 qu'on a le nombre 3 (original non), le nombre 5 et l'opération soustraction ou bien on considère que l'on a 3 le nombre -5 et l'opération d'addition. -5 fait partit alors de l'ensemble des entiers relatifs (signés, tiens tiens, signé, pas signés, entier, flottant ça vous rappel rien ça à vous les programmeurs...) C'est ça une structure de donnée cela va de l'entier au tableau flottant en passant par la liste doublement chaînée, c'est toute organisation arbitraire (mais supposée utile) que peut prendre une variable (par des types prédéfinit par le langage ou ajouter par le programmeur)). On remarque que si par convention 3 + 5 et 3 + (-5) utilise le même signe + pour l’addition, en toute impartialité mathématique il ne s'agit pas du même opérateur car le premier porte sur les entiers naturels et le second sur les entiers relatifs. Mais par soucis de simplification on utilise le même symbole, suffit de le savoir puis de s’en souvenir. Sachant que la multiplication de x par y n’est rien d’autre que x + x + x +.. y fois. Sachant que la division n’est que la composition de multiplications et de soustractions.
![]()
En fait toutes les opérations, je dis bien toutes, même arc sinus hyperbolique, sont réductibles à une suite de sommes. Donc si on construit un système qui effectue une somme alors on sait tout calculer. Un tel système existe en électronique. L’addition en logique binaire (en commutation) se réalise facilement. Et bien sur on s'empresse de réaliser cet additionneur en logique binaire.
![]()
- Microprocesseurs
Les premiers microprocesseurs ont réunis un ensemble d'unités de traitement sur la même puce. C'est Intel avec son 4004 qui a placé le premier CPU(CPU = microprocesseur) sur le marché. Aujourd'hui cette société commercialise le Pentium qui est le chef d'orchestre des compatibles lancé par IBM et qui fonctionnent (principalement) sous Windows le système d'exploitation de Microsoft qui fut la 1er société à délivrer un OS (Operating System ou système d’exploitation c.a.d. les commandes qui permettent d’utiliser le système informatique en lui donnant des ordres.) du nom de DOS et fortement inspiré de CPM et ce pour la famille des CPU d'INTEL iAPX x86. Parallèlement à cette direction la société Motorola avec sa famille de CPU 68xxx a permis aux stations de travail de SUN Micro Système et aux ordinateurs Apple de voir le jour. De nos jours ont distingue deux grandes familles de processeurs en fonction de leur nature. Les processeurs CISC (les plus anciens Complex Instructions Set avec beaucoup d’instructions) et les processeurs RISC (Reduce Instructions Set jeux d’instructions Réduit). Les CPU CISC utilisent un jeux complexe d'instruction qui peuvent nécessiter plusieurs cycles machine (CLOCK) par exemple des dizaines de coup de l’horloge interne. Cela leur permet de proposer au programmeur des instructions même pour des cas compliqués et peu fréquent, cela au prix d'une logique interne plus complexe. Le programmeur a très vite ce dont il a besoin. Les CPU RISC quant a eux utilisent un jeu réduit d'instruction il faut donc plusieurs instructions simples pour effectuer un certain traitement. Leur simplicité dans leur logique interne leur permet de réaliser la grande majorité de leur instructions en un seul cycle machine. En fait les RISC sont nés des études statistiques des concepteurs en assembleurs qui ont montrés que les instructions complexes étaient pratiquement jamais utilisées. (En effet dans les langages même parlé on s’aperçoit que le nombre de séquence ne doit pas être trop réduit (car on limite les possibilité du langage) mais pas trop grand non plus car on dépasse la capacité de notre mémorisation. Ainsi la plus part des alphabet font entre 20 et 30 caractères. Le nombre de sons parlé (les phonème est lui aussi a peu prêt constant du moins en moyenne). La polémique dure toujours, que vaut-il mieux? Certains disent qu'il est impossible de construire des applications complexes avec des outils simples, ils préconisent des CISC. D'autres font remarquer qu'il est difficile de construire des applications complexes si les briques sont elles mêmes trop complexes... En fait la frontière n'est pas franchement établie entre les deux domaines et les innovations passent périodiquement d'un bord vers l'autre.
- Ne ratez pas le bus
Un CPU peut toujours être vu de l'extérieur comme comportant 3 parties: - un bus de données (pour lire et écrire un contenu dans la mémoire ou sur les Entrées/Sorties) - un bus d'adresse qui permet de sélectionner une case mémoire ou une E/S (E/S = une Entrée ou une Sortie c’est par exemple le port parallèle de votre imprimante ou le port série (UART) ou un port USB etc...) - un bus de commande où l'on trouve des signaux de gestion du CPU. Le reset, la ou les interruptions etc.. (c'est un peu un four tout quand un signal ne correspond ni à une adresse ni a une donnée!) Un bus est simplement un groupe de fils, si ce groupe comporte 8 fils on parlera de bus 8 bits. Le premier CPU était sur 4 bits ! Actuellement on a des CPU 32 ou 64 voir plus. Il faut bien voir que la taille du bus détermine la capacité du CPU a communiquer avec la mémoire. Plus la taille du bus est grande plus le CPU peut s’adresser a un volume important de donnée. Une image simple consiste à dire que plus il y a d’adresses dans une rue plus il s’agit d’une grande rue boulevard , avenue etc... On peut remarquer que les principes adoptés par les deux grands Intel (CISC PC) et Motorola (RISC Mac voir SGI = Silicon Graphics sont (et ont toujours été) diamétralement opposés. Intel à toujours conservé la compatibilité ascendante des instructions sur toute sa famille de CPU. Cela veut dire qu’un programme binaire de 1980 fonctionnent toujours sous Windows. Motorola n'a jamais hésité à faire table rase (les binaires ne marche plus il faut ce qui nécessite la re compilation de toute les applications). Mais cela permet d’être plus performant. Microsoft a donc pu tirer profit commercialement parlant de cela. Dès qu'un nouveau CPU INTEL apparaît Microsoft peu (sans avoir rien faire) annoncé que son logiciel fonctionne, voir supporte les nouvelles fonctionnalité du CPU. Alors que cela n’est pas vrai chez Motorola il faut repenser toutes les applications. Cela explique, en partie, le manque de diversité chez Apple ! Pour ce qui est de la gestion des périphérique Motorola a considéré que l'adressage d'une imprimante par exemple était semblable à un adressage mémoire. Intel a spécifiquement des lignes d'E/S pour les périphériques. Cette distinction simplifia la gestion des drivers (pilotes de périphériques).
- La bonne adresse
La capacité d'adressage mémoire ne fait que croître. Autrement dit la taille du bus passe de 8 a 16 bits puis de 16 a 32 en attendant toujours plus. Avec les CPU du type 6800, 6802 de Motorola ou encore le Z80 du ZX Sinclair, ou le 6502 de Rockwell équipant les ORIC, les ATMOS, les ATOM la capacité d'adressage est de 64 Kilo octets (bus d'adresse sur 16 bits). Au début le bus de données est sur 8 bits la création d'une adresse est simple: on prend une donnée et hop on a une adresse. Intel le premier révolutionne ce petit monde en passant a un adressage a 12 bits ce qui complique le calcul de l'adressage. Plus tard on passera a 16 bits puis a 20 bits (encore chez Intel) avec un adressage par segment mais nous verrons ca plus loin. 8086 CPU 16 bits à bus multiplexé 8087 n'est pas un CPU mais un accélérateur de calcul flottant (coprocesseur arithmétique) 8088 bus 16 bits non mutilpexé donne naissance aux PC XT 80186 bide (échec commercial) 80286 PC AT mode protégé (bus d’adresse sur 20 bits autrement dit un truc tordu ) 80386 processeur 32 bits ajout du mode virtuel (plusieurs 8086) 80486 peu d'innovation mais intègre le coprocesseur arithmétique 8087 80586 PENTIUM pour limiter les secondes sources (copies) INTEL opte pour un nom plutôt qu'un numéro car un nom peut être déposé comme propriétaire.
- Comment tu causes toi?
L'informatique c'est de l'électronique programmable. On a remplacé le fer à souder par un clavier! Seulement il faut bien un langage pour communiquer. N'allons pas trop vite. Avant même de définir un langage (comme pour les langues parlées) il faut d'abord définir un alphabet. En informatique on parle de jeu de caractères. Plusieurs formats de codage des caractères alphanumériques sont possibles. Car en fait la machine ne sait traiter que des valeurs binaires des 0 ou des 1 rien de plus. Le code EBCD a finalement cédé le pas au fameux code ASCII. (American Standard Code Interchange) Cette norme à l'avantage de permettre de lire le contenu d'un même fichier sur deux machines différentes évident me direz-vous aujourd'hui, hier non. Actuellement l’UNICODE remplace, ou plus exactement inclus l’ASCII. L’UNICODE permet un codage sur 16 bits (L’ASCII est sur 8 bits seulement ce qui fait que 256 caractères). Les caractères accentués les, symboles de math et autres décorations (jeux de cartes, mini icônes, idéogrammes asiatiques sont disponibles). A partir du code ASCII on peut définir des mots réserves à un langage c'est ce qu'on appel un lexique (d'où l'analyse lexicale pour déterminer si un mot appartient bien au langage) dans la langue française on parle de dictionnaire. Ensuite ce sont les règles de syntaxe qui coordonne l'apparitions des séquences des mots. Dans la langue on parle aussi de règles de grammaire.
Evolution des langages
- Langage de première génération:
Les tous premiers microprocesseurs n'avaient pas de langage. On les programmaient en entrant directement les valeurs binaires des 0 et des 1... Ce temps n'a pas duré, car les causes d'erreurs étaient trop grandes. A titre d’exemple essayer donc de voir pourquoi l'opération élémentaire de deux nombres avec le programme de droite fonctionne et pas celui de gauche.
ex :1 ex :20101010101100101 01010101011001011101001010101011 11010010101010110111011101101011 01110111011010110111000100111001 01100001001110011100010101111111 1100010101111111
Un peu pénible vous imaginez un programme qui permet d'aller sur la Lune...qui comporterait des centaines voir des milliers de lignes comme celle-ci , pas glop pas glop. L'erreur se trouve sur la 4eme ligne quatrième bits. Pour éviter de jouer à ce petit jeu qui lasse très vite on passe à la deuxième génération. Pour exprimer un problème on utilise l'analyse ascendante. Car on par des instructions élémentaires disponibles sur le CPU dont on dispose puis ont créer des sous-programmes de plus en plus complexes pour résoudre le problème initial.
- Langage de deuxième génération:
Décidé d'en finir avec ces suites peu sympathiques les informaticiens ont utilisés des raccourcis de mots (presque des anacronymes) qu'on appel des mnémoniques. Ainsi le même programme précédent devient.
ex :1 ex :2LDA A, #D2AB LDA A, #D2ABLDA B, #776B LDA B, #6139ADD B ADD B
L'erreur est beaucoup plus simple à détecter. Mais ce langage reste très primitif chaque instruction est remplacée par son équivalent binaire. Cette transcription est faite automatiquement pas un programme (écrit en binaire.) qu'on appel un assembleur. Un assembleur n'est ni un compilateur ni un interpréteur c'est un substitueur si on veux. A l’heure moderne on dirait que c’est un pré processeur, voir un méta processeur mais ça c’est furieusement tendance. Le langage d'assembleur est le plus rapide qui soit, parce que le plus proche de la machine c’est aussi le plus pénible à écrire. Il est spécifique à chaque processeur et son apprentissage est un peu laborieux. (Comme on trouve une langue différente dans chaque pays). C'est le langage préféré pour aller très vite, mais comme en poésie chaque mot et le résultat d'un long moment de réflexion. Autrefois les noyaux des systèmes d'exploitations, les drivers (pilote de périphériques) étaient écrits en assembleur. Bref, c'est un langage atypique peu utilisé car lourd mais il est le plus proche de la machine et donc très performants, nous en reparleront quand nous serons arrivé aux compilateurs et aux profiler (les optimiseurs de code). Un bon programmeur a besoin de beaucoup de temps pour écrire quelques lignes de code mnémoniques. C'est pour augmenter la productivité, la rapidité de développement des programmes que les langages de 3eme générations sont nés.
- Langage de troisième génération:
A force de programmer en assembleur on s'aperçoit qu'on utilise très souvent des portions de code identiques. Cinq ou six lignes pour afficher une valeur à l'écran, quatre lignes par ci pour saisir un entier etc... Au lieu de réécrire toujours ces mêmes lignes ont donne à l'ensemble un nom. La notion de sous-programme apparaît. Outre la simplicité d'écriture on gagne aussi en maintenance. Une fois une modification effectuée dans le sous-programme la répercussion à lieu 'n' fois. Il existe un parallèle étonnant entre les deux entités que sont les instructions et les données. On a vu, lors que l'adressage, qu'il existe une relation étroite entre la dimension du bus des données et la dimension du bus d'adresse. Et bien ici de même chose, on a créé des sous-programmes et on va définir une affectation de variable. Une algèbre du type A = 3.1415926 par exemple. Munis de 3 fonctionnalité qui sont :
1) L’Affectation { A = 1 issu du MOV ou LOAD assembleur chargement mémoire ou accumulateur }
2) Le Test conditionnel { c'est le 'if' issu du CMP TEST c'est la comparaison }
3) Le Branchement { c'est le 'goto' issu du JMP inconditionnel JNZ JNE JNC BNE étant eux conditionnel } Avec ça on peut TOUT programmer. On définit ainsi un langage de troisième génération. Déçu? Les FORTRAN, les BASIC, C, PASCAL, ADA, MODULA, PERL et j'en passe tous ces langages sont équivalents. Si vous savez réaliser les 3 fonctionnalité du haut dans les deux langages vous êtes capables de traduire n'importe quel programme dans l'un ou l'autre langage! Mais bon, le goto a mauvaise réputation ouais très mauvaise réputation. Pourtant un bon programme peut très bien comporter plusieurs goto. En fait un bon programme est un programme qui gère les erreurs qui fait quelque chose quand ça se passe mal. C’est comme dans un couple ! (quand ca se passe bien pas de soucis. Tout l’art consiste à gérer les problèmes) Trois ou quatre goto dans un programme (C, BASIC, PASCAL ou FORTRAN ) d'une centaine de lignes n'est pas un mauvais programme. Malgré l'existence des structures de boucle ( for, while ..) il existe des cas ou l'on est presque obligé d'utiliser un goto si on ne veut pas bouffer tout l'alphabet en nom de variable pour propager et sortir proprement. Mais bon les idées fausses ont la vie dure alors... Cela dit il est clair qu'un programme de 25 lignes qui comporte 20 goto est un très mauvais programme en terme de maintenance (car en terme de vitesse d'exécution c'est peut être le plus rapide... "demander le programme" pour éviter le code ‘spaghetti’ on a donc créer en plus des structures de codes particulières.) Bon les tableaux (structure de données) sont associés aux boucles (structures de code) En fait parmi le for le while et le repeat (ou do) seul le while est essentiel cette structure permet de remplacer n'importe quelle autre structure. { En C le for n'est qu'un while déguisé mais en C/C++ seulement } Avec l'apparition des pointeurs (issu du mode d'adressage indirect de l'assembleur) est né le fait d'associé a cette structure de données une structure de code (ben oui forcement) et c'est la récursions. Ah que n'a t-on pas écrit sur la recursion. Bref cette récrursion est si forte quelle va ni plus ni moins donner naissance aux langages de quatrième génération. (c'est t'y pas beau l'info.) quelques langages procéduraux APL, ADA, BASIC, C, FORTRAN, PASCAL, MODULA II, PERL quelques langages atypiques La grande profusion des langages procéduraux ne c'est pas arrêté aux langages de programmation ainsi des langages spécifiques sont apparus. La gestion d'une table traçante (table X Y) ou d'un BIOS (Basic Input Output System) contenu dans une mémoire morte s'avère très utile. De même qu'il existe des calculatrices classiques à notation AOS (où on entre la formule dans le même ordre qu'on l'écrit) il existe des calculatrices Hewlett Packard à notation non AOS très proche du langage FORTH qui a eut son heure de gloire et puis est retombé aux oubliettes (aux oublis yet ca me viens comme ça désolé): Qu'est-ce? On sait que la création d'un langage nécessite une analyse syntaxique (parser) et suivant les règles du langages cette analyse peut être compliquée et longue. L'analyse des mots clés est largement facilité si on utilise une structure de donnée du type arbre. Un arbre c’est un tronc avec des branches et des feuilles. Cet arbre peut être facilement stocké dans une pile du type premier entré dernier sortis (LIFO Last Input First Output) par exemple 3 + 5 s'écrit 3 (dans la pile) 5 (dans la pile) + c'est la notation post fixée, car l'opération (+) est située après (post). Les utilisateurs des machines Hp voient très bien ce que je veux dire. Pour les autres si vous ne connaissez ni postscript (script post fixé) ni le langage FORTH par exemple alors l’essayer c’est l’adopter!...Sur les stations de travail du constructeur SUN microsystem un mini operating system appelé Open Boot contient un nombre impressionnant de commande dans une toute petite PROM (Programmable Read Only Memory=mémoire morte) Dernier exemple le plus connu, si vous imprimez une page sur une imprimante laser votre page est passée par un interpreteur postscript. Plus étonnant encore c'est qu'il est possible de ce loger sur ces imprimantes! Pas de mot passe et pas besoin de protection contre l'intrusion. Une fois loger vous avez une page blanche à disposition...une plume, votre imagination et votre clavier. La plus part des imprimantes Laser possèdent un processeur (souvent de chez MOTOROLA) et beaucoup de mémoire. Il était courant, il y a qq. années de voir des travaux de thèse sur l'écriture d'un langage de 3eme génération et de son implémentation comme compilateur ou interpreteur. De nos jour c’est tellement banal mais surtout cela demande plus personnes et l’on vise l’aspect normalisation et commercial.
- Langage de quatrième génération:
Les programmeurs en ont marre! En informatique c'est toujours la même chose! Avec les langages de 3eme génération on écrit le code on définit les structures de données et on fait des appels. A force d'écrire du code on se fait ou on utilise des bibliothèques et hop on enchaîne les appels et le tour est joué. (C'est comme ça que j'ai écris des centaines voir des milliers de ligne de code). Ainsi en PASCAL on peut assez facilement définir un petit système expert avec une petite base de connaissance et puis des règles. Un programme un peu moins stupide que d'habitude quoi. Mais là se pose un problème par quel bout aborder le problème. Comment faire pour ajouter une règle, somment faire pour déduire qq. chose. Comment à partir des données (des phrases en langage naturel) peut-on déduire un syllogisme? Les appels bien rangés, bien séquentiels sont difficilement applicable. Une fois de plus la structure d'arbre va nous servir. Pour connaître le meilleur choix il suffit ... de tous les faire. Cette analyse combinatoire porte le nom de méthode énumérative. En programmation déclarative on écrit plus du tout quoi faire, on écrit avec quoi faire : les données, on définit la base de connaissance et les règles. Le moteur d'inférence (qui constitue le coeur du langage) va tester de manière énumérative toutes les combinaisons. En PROLOG le programme 'sait' donc comment il va résoudre le problème avant même de disposer des données! Les moteurs d'inférences fonctionnent soit avec un chaînage avant soit un chaînage arrière soit avec les deux! Les langages déclaratifs font un usage intensif de la récursion. De même que l'on doit penser objet en programmation objet ici on doit penser récurssion ce qui pose parfois des difficultés. Ces langages sont très proches des langages utilisé en gestion de base de données. L’interrogation par le contenu en font des langages particulier mais bien adapté a gérer de grosses quantité d’information. C’est langages sont parmi les plus évolué ils sont loin, très loin du langage machine. On dit que ce sont des langages de haut niveau. Cependant ces langages sont peu orientés système et si c'est quand même le cas leurs fonctionnalité ne sont pas portables ce qui réduit fortement leur intérêt. Le haut niveau de ces langages permet au programmeur d’utiliser ces conventions personnelle, qui ne convient pas forcément à d’autre la relecture ou la modification par autrui est souvent délicate.
En attendant l’espéranto informatique il faut faire avec tout ça. Je programme en C en C++ en Pascal en Perl en Php en Html, en batch en postscript cela fait bien peu face au milliers de langages qui existe... L'idéal pour le programmeur est de disposer d'un interpreteur pour la mise au point (à cause de la souplesse de développement), puis d'un compilateur pour la version finale optimisé (rapidité d'exécution du code). D'un langage objet pour la gestion des menus, voir des objets graphiques (si bonnes performances) d'un langage bas niveau type C ou assembleur pour effectuer des appels systèmes rapides pour la gestion des animations graphiques pour les sons et la musique, et enfin d'un langage déclaratif qui contiendrait la partie stratégie; l'intelligence du jeux: simple l'environnement vous vouliez créer une start-up ? quelques langages déclaratifs LISP,MERCURY, PROLOG, CAML les langages de 3eme génération ont dit aussi fonctionnel (a cause des appels de fonction) les langages déclaratifs sont dits aussi impératifs.
- Les Langages Orientés Objets:
Je ne vous ai pas parlé des langages objets. Qu'il s'agisse d'un langage de 3eme ou de 4eme génération on peut lui ajouter des propriétés objet. Le nouveau langage ainsi définit a souvent été créé à partir d'un ancien langage, du C au C++, du PASCAL au DELPHI, idem pour le PROLOG ou PERL et maintenant HTML... Je n'affectionne que peu ces fonctionnalité que je ne considère profitables que pour des gros projets. La méthode de pensée objet impose une lourdeur d'écriture qui ne se justifie a mon sens que dans les gros projets ou pour les générateurs automatique de code. L'utilisation du polymorphisme et template en C++ peuvent justifier l'utilisation d'un langage objet le temps d'écriture du programme est largement réduit. Pour ce qui est de la polémique que le C objet par exemple est plus rapide que le C++. Autant demander a un pilote si les voitures rouges sont plus rapides que les bleues. Tout dépend du compilateur et des profilers. Quoiqu'il en soit déclarer un template ou définir un constructeur prendra toujours plus de temps (à machine égale) que de ne pas faire d'appel du tout! (De même qu'un appareil sur veille consomme moins certes qu'un appareil en marche mais toujours plus qu'un appareil éteint; Non mais!) Toutefois, il est vrai qu'on gagne en modularité en réutilisation (si votre application ne concerne que vous ça vous fait une belle jambe). Bref vous l'avez compris je ne suis pas copain avec les objets je préfère une vision beaucoup plus radicale comme l'approche déclarative là on en écrit moins et ça fait plus sinon autant revenir à l'assembleur.
- Le cas JAVA:
Le langage Java est un langage qui est pleinement objet il est né objet ce qui n'est pas le cas de C++. A ce titre il est plus pur. Mais ce n'est pas la ça caractéristique le plus intéressante. C'est avant tout un langage moitié compilé et moitié interprété. Le processeur standard.Compilation
Compilation vs Interprétation
Suivant les variantes des OS on peut avoir des programmes de configuration (ex .configure ) qui vont en fonction de l'environnement de la configuration de la machine (exemple CPU différent) et du compilateur utilisé créer un fichier makefile comportant des directives de compilation. Ce n'est qu'ensuite que la compilation a lieu.
1) écriture du programme source dans un éditeur de rien vers fichier.source
2) compilation de fichier.source vers fichier.objet la phase de compilation est parfois précedée d'une phase effectué par le préprocesseur ( #mot_clé en C/C++ pas exemple) La création du fichier objet ne correspond pas à un fichier executable par la machine, il manque un certain nombre d'information lié au code. En clair, le fichier objet contient des numéros de sous programme mais pas le contenu des ces sous-programmes.
3) éditions des liens du fichier objet ( .obj) vers un fichier executable ( .exe) cette fois le fichier final est executable par la machine la liaison avec les bibliothèques externes permet de résoudre les références qui manquaient. On parle pour ce fichier de binaire pur.
Interprétation
1) un nom de commande doit être taper pour lancer l'interpreteur.
2) une fois sous le contrôle de l'interpreteur, on distingue deux modes, un mode d'édition du programme et un mode d’interprétation hors du programme.A tout moment il est possible d’interroger le système sur l'état ou le contenu d'une variable et notamment après une sortie par erreur ou d’un crash.
3) a l'aide d'une commande de l'interpreteur on peut lancer l’exécution du programme. On note bien qu'en dehors de l'interpreteur l’exécution du programme ne peut avoir lieu. En contre partie de grande souplesse de mise au point dans l’utilisation (vus allez voir le chemin de croix pour faire a peu prêt la même chose en moins bien dans un compilateur) on leur reproche leur manque de vitesse. Et ca dans nôtre monde ca ne pardonne pas. Ce n’est pas un hasard si les premiers compilateurs se nommaient Turbo ou Quick
- Une bibliothèque sans livres
Une bibliothèque est nommées library ou lib outre atlantique. Une bibliothèque n'est rien d'autre qu'une collection (les matheux parlent d'ensemble) de fichiers objets. On pourrait, pour un système, quasiment avoir qu'une seule bibliothèque pour créer les exécutables. Mais on préfère diviser et organiser les fichiers objets en groupe de bibliothèque, par exemple une bibliothèque pour l'image, une pour la cryptographie, une pour le son une pour la vidéo etc...
On distingue deux types de bibliothèque:
- les bibliothèques statiques
Ce sont les plus anciennes se sont des collections de fichiers objets qui sont insérés dans le fichier exécutable. Plus il y a de bibliothèque plus le fichier exécutable est gros. Par exemple, quand les programmeurs de MicroSoft rajoutent un labyrinthes 3D dans Excel via une séquence compliquée de touches il augment la taille du fichier de façon importante.- les bibliothèques dynamiques
Avec l'utilisation d'OS de plus en plus multi tâches (voir poly processeurs) la consommation mémoire devient alarmante. Si l'on fait tourner 10 fois le même programme on occupe en mémoire 10 fois la taille de l’exécutable. Normal me direz-vous, oui mais, on peut réduire l'espace occupé par les bibliothèques en les chargeant une seule fois en mémoire et les faire partager par tous les programmes nécessitant. C'est le principe de la bibliothèque dynamique. Cela suppose que l'OS gère le chargement et que le contexte de chaque programme soit bien prévu pour ne par interférer avec les autres programmes qui partagent une même bibliothèque. Sinon les fonctionnalité entre bibliothèque statique et dynamique sont identiques.
- Et pour finir portez vous bien
Le problème de la portabilité est un vrai problème. Imaginez vous écrivez un beau programme sous Linux et vous aimeriez bien que celui-ci fonctionne sur PC ou réciproquement! C'est pas gagné car le binaire d'un programme est compilé et ne fonctionnera que sur un type de processeur. Si le langage que vous avez choisit est portable vous pourrez avec un minimum de modifications le faire fonctionner sur une autre machine dans un minimum de temps. Un langage portable c'est un langage qui permet à partir d'un même fichier source d'exécuter sur des machines différentes, après re compilation.
Retourner au menu