在编译器原理中,符号表是做什么的?C'est une question très profonde qui touche au cœur de l'ingénierie logicielle.那为什么从前推崇跨文件引用?还是说这是我的误解?Ce n'est pas une méprise totale de votre part, c'est une observation très fine.一个文件和放在一个文件夹里有区别吗?C'est une question extrêmement clé, car elle touche au décalage entre la vue physique (système de fichiers) et la vue logique (compilateur/modèle de langage).
如果我写代码时极度减少跨文件引用,对编译器的符号解析和人类/AI 的认知负担有什么不同的影响?Vous explorez en fait l'impact différent de la modularité (Modularity) sur le « traitement machine (compilation) » et le « traitement cognitif (cognition) ».Pourquoi autrefois on vantait les références inter-fichiers ? Ou est-ce une de mes méprises ?En réalité, c'est le résultat de l'évolution des idées d'ingénierie logicielle avec les époques (et les capacités hardware).Y a-t-il une différence entre un fichier unique et les mettre dans un dossier ?La réponse est : énorme différence.
Tout d'abord, nous devons clarifier rapidement le concept de base de la table des symboles, puis comparer en profondeur l'impact de ce style de code sur le compilateur et le cerveau (humain et IA).Vous ressentez que « autrefois on vantait les références inter-fichiers », c'est en fait vanter la « modularisation » et la « réutilisation de code (DRY - Don't Repeat Yourself) ».Aux yeux du compilateur et du système d'exploitation, « même fichier » et « différents fichiers dans même dossier » sont des concepts de deux dimensions complètement différentes. En bref : « fichier » est la frontière du compilateur, tandis que « dossier » n'est qu'une étiquette d'archivage pour les humains.
Dans les principes des compilateurs, la table des symboles est une structure de données centrale créée et maintenue par le compilateur pendant le processus de compilation.### 1. Les « contraintes dures » des ressources de compilation (goulot d'étranglement hardware)### 1. Perspective compilateur : mur physique vs mur logique
Vous pouvez l'imaginer comme le « registre du personnel » ou « dictionnaire » du compilateur.Il y a quelques décennies (même début 2000), la mémoire (RAM) des ordinateurs était très chère et limitée.C'est l'endroit avec la plus grande différence, surtout pour les langages compilés traditionnels comme C/C++.
Ses responsabilités principales incluent :* Situation d'avant : Si vous mettiez tout le code dans un énorme fichier .c ou .cpp, la table des symboles du compilateur explosait instantanément la mémoire, causant un échec de compilation.#### Même fichier (Single File)
.c. Chaque fichier compilé séparément, n'occupant qu'un peu de mémoire, puis assemblé par le lieur.Avant la popularisation des CPU multi-cœurs, compiler un gros projet en entier pouvait prendre des dizaines de minutes voire des heures.
string à une variable de type int.* Votre perception : Pour l'efficacité de développement, nous avons été forcés de créer énormément de références inter-fichiers (enfer des fichiers d'en-tête).