Retour aux bases

From The Joel on Software Translation Project

Jump to: navigation, search

Retour aux bases

Sur ce site, nous avons passés beaucoup de temps à parler de diverses choses comme .Net contre Java, la stratégie XML, la conception de programmes, les stratégies efficaces, l'architecture, et plus encore. Tout ceci recouvre une couche, en quelque sorte. Au plus haut niveau, vous avez la stratégie logicielle. Un peu plus bas, on pense aux architectures comme .NET, et encore plus bas, aux programmes individuels et aux logiciels de développement de produits, comme Java ou la plateforme Windows.

Descendez encore en couche, s'il vous plait ! Les DLLs ? Les objets ? Les fontions ? Non ! Encore plus bas ! À un certain point, vous pensez aux lignes de codes écrites dans un langage de programmation défini.

Ce n'est toujours pas un niveau assez bas. Aujourd'hui, je pense aux processeurs. Ces petits morceaux de silicone déplaçant des octets par ci par là. Imaginez que vous débutez en programmation. Écartez tout ce que vous avez appris sur la programmation, les logiciels, le management et retrouvez vous au plus bas niveau des fondamentaux de Von Neumann. Effacez J2EE de votre conscience pour un moment, pensez octets !

Pourquoi faisons nous ceci ? Je pense qu'une des plus grosse erreur que les gens font aux niveaux de développement les plus hauts vient d'une lacune ou d'une mauvaise compréhension de quelques choses simples aux plus bas niveaux [de plus bas niveau]. Vous avez construit un palais merveilleux, mais les fondations sont bancales. Au lieu d'une solide dalle en béton, vous avez des débris. Le palais parait joli, mais de temps en temps la baignoire glisse sur le sol de la salle de bain, et vous n'avez aucune idée d'où cela peut venir.

Donc aujourd'hui, inspirez fortement, et suivez moi, s'il vous plait, à travers un petit exercice dans lequel nous allons utiliser le langage C.

Souvenez vous de la manière dont les chaînes de caractères fonctionnent en C : c'est une série d'octets terminée par le caractère NULL, qui à une valeur de 0. Ceci a 2 implications logiques : 1. Il n'y aucun moyen de connaître la fin de la chaîne (donc sa taille) sans se déplacer à l'intérieur de celle-ci jusqu'à trouver le caractère NULL. 2. Votre chaîne ne peut contenir le caractère NULL, donc vous ne pouvez pas stocker des données arbitraires venants d'une image JPEG (par exemple) dans une chaîne en C.

Pourquoi cela fonctionne comme ça ? Parce que le micro-processeur PDP-7, sur lequel UNIX et le langage C ont été inventés, a un type de chaîne de caractères ASCIZ, ce qui signifie "ASCII with a Z (zero) at the end.", ou encore "ASCII avec un 0 (zéro) à la fin."

Est-ce la seule manière de stocker une chaine de caractères ? Non. En fait, c'est même une des pire manière de le faire. Pour des programmes non triviaux : APIs, systèmes d'exploitation, bibliothèques de classes, vous devriez même évitez comme la peste les chaînes ASCIZ. Pourquoi ?

Commencons par écrire une version du code pour strcat, la fonction C qui ajoute une chaîne à une autre.

void strcat( char* dest, char* src )

{

while (*dest) dest++;

while (*dest++ = *src++);

}

Personal tools