Essayons d'imaginer la chimie sans le système périodique de Mendeleev (1869). Combien d'éléments devaient être gardés à l'esprit, et dans un ordre aléatoire ... (Alors - 60.)
Pour ce faire, pensez à un ou plusieurs langages de programmation à la fois. Les mêmes sentiments, le même désordre créatif.
Et maintenant, nous pouvons survivre aux sentiments des chimistes du XIXe siècle, quand on leur a offert toutes leurs connaissances, et un peu d'en haut, dans un tableau périodique.

Le livre «Matryoshka C. Système de couches du langage de programme »représente toutes les unités du langage C en un coup d'œil. Cela vous permet de les organiser, de corriger des informations obsolètes et même de clarifier le concept même du programme.
Aujourd'hui, les informations de programmation doivent être systématisées encore plus que les éléments chimiques il y a 150 ans.
Le premier besoin est l'enseignement. Mendeleev a commencé à créer son système quand il a posé la question - avec quel élément commencer à enseigner: O, H, N, He, Au ... En même temps, c'était plus facile pour lui - il a enseigné la chimie des meilleurs - étudiants de l'Université de Saint-Pétersbourg. Et la programmation est déjà enseignée à l'école et commencera bientôt à la maternelle.
Le deuxième besoin est une approche scientifique. En utilisant le système périodique, de nouveaux éléments ont été découverts et des informations sur les anciens ont été corrigées. Elle a aidé à créer le modèle de l'atome (1911). Et ainsi de suite.
Le troisième besoin est la clarification du concept d'un programme.
Programmation moderne avec un pied coincé dans les années 50 du XXe siècle. Ensuite, les programmes étaient simples, et les machines et les langages machines étaient complexes, donc tout tournait autour des machines et des langages.
Maintenant, le contraire est vrai: les programmes sont complexes et primaires, les langues sont simples et secondaires. C'est ce qu'on appelle l'approche appliquée, que tout le monde semble connaître. Mais les étudiants et les développeurs continuent de persuader que tout est pareil.
Ce qui nous ramène à la première conférence du privat-docent Mendeleev. Que dire aux étudiants de première année? Où est la vérité? Telle est la question.
Le livre «Matryoshka C. Système de couches du langage du programme. " De plus, il s'adresse non seulement aux étudiants, mais également aux programmeurs qualifiés, car ce sont eux qui doivent rechercher la vérité et changer la vision du monde, c'est-à-dire nous.
Ce qui suit est un résumé du livre.
1. Introduction
En 1969, le langage C a été créé, qui est devenu le langage de programmation fondamental et est resté avec lui pendant 50 ans. Pourquoi en est-il ainsi? Tout d'abord, parce que C est un langage
appliqué qui a donné au programme un aspect
humain au lieu d'un langage
machine . Cette réussite a été corrigée par les langages de la famille C: C ++, JavaScript, PHP, Java, C # et autres. Deuxièmement, c'est une langue courte et belle.
Cependant, le langage C lui-même est généralement mélangé à l'assembleur de machines, ce qui complique et déforme sa perception. Un autre extrême est l'imposition d'une certaine «philosophie» à la charge du langage: procédurale, objet, fonctionnelle, compilée, interprétée, typée, etc. Cela ajoute de l'émotion, mais n'aide pas à mieux décrire la langue.
La vérité est au milieu, et pour le langage C - strictement au milieu entre la perception philosophique et la perception machine.
Le langage C n'est pas indépendant, il obéit à la parole écrite ordinaire, et en même temps il contrôle le langage assembleur lui-même. Cette position décrit le
modèle Speech du programme , selon lequel le programme est divisé en trois types subordonnés: parole, code, commande. Le langage C est responsable de la seconde forme de code.
Après avoir déterminé la place du langage dans le programme, il est possible d'organiser des informations à ce sujet, ce qui est fait par le
système Layer du langage programme , qui représente le langage C dans l'esprit du système Mendeleev - sur une seule page.
Le système est construit en tenant compte de la
similitude des langues appliquées résultant de leur subordination de la parole. Un ensemble d'unités Matryoshka C vous permet de décrire et de comparer différents langages en créant un certain nombre de Matryoshkas: C ++, PHP, JavaScript, C #, MySQL, Python, etc. Il est digne et correct que différentes langues soient décrites par des unités de la langue fondamentale.
2. CHAPITRE 1. Le modèle vocal du programme. Effacer C
Le premier chapitre présente le
modèle de discours du programme , reflétant l'approche appliquée. Selon lui, le programme a trois types séquentiels évidents:
- discours - discours direct d'un programmeur résolvant un problème,
- code - codage de la solution sous forme mathématique en C (ou tout autre)
- et commande - commandes machine immédiates.
Le modèle de la parole explique pourquoi C est un langage simple et compréhensible. C est construit à l'image et à la ressemblance de la parole humaine qui nous est familière.
Le premier type de programme est le discours direct du programmeur. La parole est conforme à la pensée humaine. À l'aide de la parole, les programmeurs novices écrivent des programmes - d'abord en russe, puis traduisent étape par étape les actions dans un langage de code. Et c'est précisément sur ce modèle que le langage C a été créé.
Les conclusions du programmeur exprimées par la parole sont converties en une forme numérique de code. Cette transformation devrait être appelée
réflexion , car la parole et le code ont la même nature (réflexion - naissance - genre). C'est assez évident si l'on compare les types de discours (à gauche) et de code (à droite) du programme.

Il est curieux que la réflexion se fasse très simplement - avec seulement deux types d'expressions.
Cependant, la description moderne du langage C (à partir de 1978) ne contient pas une liste suffisante de noms pour décrire le langage en général, ou pour la tâche de réflexion en particulier. Par conséquent, nous sommes obligés de nous engager dans la créativité et d'introduire ces noms.
Le choix des mots doit être précis et clair. Cela a nécessité une approche spéciale, résumée comme suit - l'utilisation stricte de la langue maternelle. Pour l'anglais, ce serait l'anglais, mais nous ne sommes pas anglais. Nous utilisons donc ce que nous avons et nous essaierons de parler russe.
La réflexion est effectuée par deux types d'expressions:
- Calcul (HF) - reflète le changement dans les propriétés du sujet. La propriété d'un objet est exprimée par un nombre, puis l'action sur la propriété est l'action sur le nombre - l'opération.
- soumission (Pch) - reflète un changement dans l'ordre des actions. Un prototype de PC est une phrase de discours avec une phrase complexe, par conséquent, la plupart des types de PC commencent par des unions subordonnées «si», «sinon», «bye», «pour». D'autres types de PC les complètent.
Soit dit en passant, pouvez-vous croire que dans la description de C, il n'y a pas de nom pour le calcul de l'expression - sont-ils simplement appelés «expressions»? Après cela, l'absence de nom et d'association pour le type de soumission, et même la rareté en termes de noms, définitions et généralisations, ne surprendra plus. En effet, le fameux K / R («langage C», Kernigan / Ritchie, 1978) n'est pas une description, mais un guide de l'utilisation du langage.
Cependant, je voudrais avoir une description de la langue. Par conséquent, il est proposé par le
système de langage du programme Layer .
3. CHAPITRE 2. Système de couches. Court C
Toute description doit être précise et extrêmement courte. Dans le cas d'un langage de programme, une description frontale est difficile.
Ici, nous avons un programme. Il se compose de modules. Les modules se composent de sous-programmes et de collections. Les sous-programmes sont constitués d'expressions distinctes: déclarations, calculs, soumissions. Soumissions - jusqu'à dix espèces. Les subordonnés connectent les sous-niveaux et les sous-programmes. Il existe également plusieurs publicités. Cependant, les déclarations sont incluses non seulement dans les sous-programmes et sous-niveaux, mais aussi dans les modules et les collections. Et la plupart des expressions se composent de mots qui sont si difficiles à décrire, donc généralement ils sont simplement donnés deux listes - les mots source et dérivé, que vous devez vous familiariser tout au long de l'étude et de l'application de la langue. Ajoutez à cela des signes de ponctuation et un certain nombre d'expressions.
Dans cette déclaration, il n'est pas facile de comprendre qui se tenait sur qui.
Une approche hiérarchique directe de la description du langage sera trop complexe. La recherche de chemins détournés conduit à une description de la langue basée sur sa nature vocale et son côté commande. Ainsi est né le système des couches, qui coïncide partiellement avec le tableau périodique du Mendeleev, qui est également un système en couches. Comme il s'est avéré 42 ans après sa publication (1869), la périodicité du système est associée aux
couches électroniques (1911, le modèle de l'atome de Bohr-Rutherford). En outre, les systèmes en couches et périodiques sont liés par le placement tabulaire de toutes les unités sur une seule page.
La description des unités linguistiques est concise - seulement 10 types d'expressions et 8 types d'autres unités, ainsi que significatives et visuelles. Bien inhabituel pour une première connaissance.
Les unités linguistiques sont divisées en 6 niveaux:
- escouades - rangées de table
- départements - groupes spéciaux de genres (parties de la première ligne)
- type - cellules (niveau de division principal)
- sous-espèce - diviseurs d'espèce (niveau rare)
- vues - formules unitaires au bas de la cellule ou séparément
- les motifs sont des unités elles-mêmes (mots seulement)
Des exemples de mots sont décrits par un
dictionnaire - un sous-système séparé composé des six mêmes niveaux.
La composante vocale du langage C est assez évidente, bien qu'elle mérite encore une description. Mais la partie commande du langage est juste connectée au contrôle de compilation, pendant lequel un troisième type de programme est créé - la commande. Ici, nous arrivons au côté le plus excitant de la beauté C.
4. CHAPITRES SUIVANTS. Belle si
Le langage C sous-tend la programmation moderne. Pourquoi? Tout d'abord, grâce au discours le plus cohérent. Deuxièmement, parce qu'il a bien contourné les limites du traitement automatique des nombres.
Qu'est-ce que Xi a offert exactement? Image et calque.
Le mot "image" est une traduction du mot anglais "type", qui vient du grec "prototype" - "prototype". En russe, le mot «type» ne traduit pas la pierre angulaire du concept exprimé, de plus, il est mélangé avec le sens officiel de «vue».
Initialement, l'image a résolu la tâche purement machine de l'informatique, puis est devenue la piste pour la naissance des langages objets.
La couche a immédiatement résolu plusieurs problèmes - à la fois machine et appliquée. Par conséquent, l'examen commencera par une image à tâche unique et passera à la couche multitâche.
L'une des caractéristiques désagréables de la programmation historique est que la plupart des concepts, y compris les concepts de base, sont donnés sans définitions. "Le langage de programmation (le nom des rivières) a un type entier et flottant de nombres ..." - et gratté. Il n'est pas nécessaire de déterminer ce qu'est un «type» (image), car les auteurs eux-mêmes ne le comprennent pas pleinement et seront étouffés «pour plus de clarté». S'ils sont fixés au mur, ils donneront une définition vague et inutile. Il permet de se cacher derrière des mots étrangers: pour les auteurs russes - pour l'anglais (type), pour l'anglais - pour le français (sous-programme), le grec (polymorphisme), le latin (encapsulation) ou leurs combinaisons (polymorphisme ad hoc).
Mais ce n'est pas notre destin. Notre choix - définitions avec une visière surélevée en russe pur.
Image
Une image est un nom prédictif d'une quantité qui définit 1) les propriétés propres d'une quantité et 2) la sélection d'opérations pour une quantité.
Le mot «type» (type) correspond à la première partie de la définition: «propriétés propres d'une quantité». Mais le sens principal de l'image est dans la deuxième partie: «sélection des opérations aux quantités».
Le point de départ pour introduire une image en langage C est le calcul habituel, par exemple l'opération d'addition.
Les calculs sur
papier , écrits à la main ou imprimés, ne font pas beaucoup de différence entre les types de nombres, les considérant généralement comme réels. Par conséquent, leurs opérations de traitement sont sans ambiguïté.
Les mathématiques
machine séparent strictement les nombres en nombres entiers et nombres fractionnaires. Différents types de nombres sont stockés différemment en mémoire et traités par différentes instructions de processeur. Par exemple, l'ajout de nombres entiers et fractionnaires sont deux commandes différentes correspondant à deux nœuds de processeur différents. Mais la commande pour ajouter des arguments entiers et fractionnaires est manquante.
Les mathématiques
appliquées , c'est-à-dire le langage C, séparent les types de nombres, mais combinent les opérations: l'addition pour les nombres entiers et / ou fractionnaires est écrite avec un signe d'action.
Une définition claire de l'image du concept vous permet de parler définitivement de deux autres concepts: la
taille et le
fonctionnement .
Valeur et fonctionnement
La valeur est le nombre en cours de traitement.
Opération - traitement des valeurs des valeurs initiales (arguments) pour obtenir le nombre total (total).
L'ampleur et le fonctionnement sont interconnectés. Chaque opération est une quantité, car elle a un total numérique. Et chaque valeur est le résultat de l'envoi de la valeur au registre de processeur / à partir du processeur, c'est-à-dire le résultat de l'opération. Malgré cette interconnexion, l'essentiel est la possibilité de leur description séparée, mais avec la répétition d'un mot dans différentes parties du dictionnaire, ce qui se produit dans ma3.
L'approche machine a divisé tous les nombres utilisés par le programmeur en
commandes et
données . Auparavant, les deux étaient des nombres, par exemple, les commandes étaient écrites en codes numériques. Cependant, dans les langues appliquées, les équipes ont cessé d'être des nombres et sont devenues des
mots et des
signes d'action . Seules les «données» sont restées des nombres, mais continuer à les appeler si ridicules, car lors du passage d'une machine à un point de vue mathématique, les nombres sont des quantités qui divisent celles initiales (
données ) et totales (
recherchées ). «Inconnu étant donné» - cela semblera idiot.
Les équipes sont également divisées en deux types d'actions: mathématiques et service. Actions mathématiques - opérations. Nous nous tournerons vers le service plus tard.
Dans les langages C, le papier et la machine habituels, sans ambiguïté, ou les opérations mathématiques simples, presque sans exception, deviennent multiples.
Opérations multiples - plusieurs opérations du même nom avec des images d'arguments différentes et des actions différentes et similaires.
Les arguments entiers correspondent à l'ensemble de l'opération, fractionnaire - fractionnaire. Cette différence est particulièrement évidente dans l'opération de division, lorsque l'expression 1/2 donne un total de 0 et non de 0,5. Un tel record ne respecte pas les règles des mathématiques du papier, mais le langage C ne cherche pas à les respecter (contrairement à Fortran) - il joue selon ses propres règles
appliquées .
Dans le cas du mélange d'entiers et de nombres fractionnaires, la seule
réduction correcte
des valeurs d'argument est incluse - une conversion de sélection de la valeur d'une image à une autre. En effet, lors de l'ajout d'un entier et d'un nombre fractionnaire, le résultat est fractionnaire, donc l'image de l'opération
sélectionne l' opération de conversion de l'argument entier en une valeur fractionnaire.
Un certain nombre d'opérations ne sont pas
multiples mais
uniques . De telles opérations sont définies pour un seul type d'argument: le reste de la division est des arguments entiers, le style (opérations au niveau du bit) sont des entiers naturels. Ma3 indique la pluralité d'opérations par des signes (# ^) indiquant les modèles pour lesquels l'opération est définie. Il s'agit d'une propriété importante mais précédemment négligée de chaque opération.
Toutes les fonctions sont des opérations unitaires arbitraires. L'exception concerne les opérateurs - fonctions
non -
crochets intégrées au langage (opérations initiales).
La promotion
L'assistance est une action concomitante.
Si nous considérons l'opération comme l'action principale, alors nous pouvons distinguer deux accompagnements, qui fournissent l'opération et en diffèrent. Ce sont 1) le contrôle variable et 2) la soumission. Cette action s'appelle une
promotion .
Ici, il est nécessaire de distraire et de dire séparément les traductions russes des manuels de programmation. Une nouvelle expression (expression) de mot a été introduite dans le texte K / P pour enregistrer les actions, ce qui a tenté de diviser les concepts d'une commande de machine en différentes actions: 1) une opération, 2) une annonce et 3) la soumission (appelée "structures de contrôle"). Cette tentative a été enterrée par des traducteurs russes, remplaçant "l'expression" par le mot "opérateur", qui:
- est devenu synonyme du mot machine "équipe"
- s’est avéré être synonyme de «signe d’action»,
- et a également reçu un nombre illimité de valeurs supplémentaires. Autrement dit, il s'est transformé en une ressemblance avec l'article anglais "euh ...".
Envisagez des activités ou des
facilités associées.
Gestion variable
Gestion des variables (UE) - créer / supprimer des cellules variables.
UP se produit implicitement lorsqu'une variable est déclarée, ce qui est déjà écrit pour une autre raison - pour indiquer l'image d'une quantité. Un seul type de
variable incrémentielle est explicitement contrôlé à l'aide des fonctions malloc () et free ().
Il convient de noter que les actions implicites sont plus pratiques pour l'écriture, car elles ne nécessitent rien du tout, mais sont plus difficiles à comprendre - elles sont plus difficiles à prendre en compte et à interpréter.
Soumission
Soumission - activer / désactiver les sections de couche.
Le langage C proposait une manière différente de l'assembleur, une façon appliquée de contrôler l'ordre des actions - la soumission. Il reflète et développe une phrase complexe de discours avec une division explicite en la partie principale (soumission de la phrase) et la partie subordonnée (sections de sous-niveau / sous-programme).
L'annonce et la soumission sont entièrement construites sur le concept d'une
couche .
Couche
Une couche est un ensemble d'expressions sélectives à niveau unique limité.
La couche a explicitement et implicitement pris en charge l'exécution de plusieurs tâches à la fois:
- rationaliser le programme,
- restriction de visibilité des noms (implicitement),
- gestion des variables (cellules mémoire) (implicitement),
- définition des sections subordonnées pour la subordination,
- définitions des fonctions et collections et autres.
Dans les langages machine, il n'y avait pas de concept de couche, donc il n'apparaissait pas en K / P, et si quelque chose n'était pas là, alors l'introduire dans les livres suivants serait une hérésie et une libre pensée. Par conséquent, le concept de couche n'apparaît pas du tout, bien qu'il soit extrêmement utile et assez évident.
Sans couche, il est impossible d'expliquer brièvement et clairement bon nombre des actions et des règles du programme. Par exemple, pourquoi un simple goto comme trois kopecks est mauvais et délicat est bon. Vous ne pouvez que jurer impuissant, comme l'a fait Dijkstra ("la qualification des programmeurs est une fonction qui dépend inversement de la fréquence d'apparition des instructions goto dans leurs programmes." En bref, seules les chèvres utilisent goto. Le niveau de justification est Dieu.) Certes, ce n'est pas si mal si vos livres ils n'ont rien à expliquer du tout, mais, comme nous l'avons dit, ce n'est pas notre destin.
Soit dit en passant, on peut supposer que Den Ritchie a laissé goto exactement comme clé pour rechercher un concept sans nom, car il n'y avait ni besoin ni beauté dans l'expression goto. Mais il fallait une explication simple et compréhensible des nouveaux principes du langage que Richie lui-même ne voulait pas donner, et qui ne sont basés que sur le concept de couche .Déviation
Déviation - modification des propriétés habituelles d'un nouveau nom.L'écart le plus important est simplement lié aux propriétés des couches du programme et est décrit par un mot «statique», qui a des significations différentes dans chaque type de couche.5. LE DERNIER CHAPITRE. Langues d'application courantes
Les langues appliquées sont des langues figuratives (ayant une image, "typée"). Ils sont basés sur une utilisation explicite ou implicite de l'image. Et là encore, une contradiction se manifeste: l'image explicite est plus compréhensible, mais moins commode, et vice versa.
(La mise en page du tableau n'a pas encore été livrée, donc le tableau est donné dans une image.)Après C, le développement des langages appliqués est allé dans le sens d'augmenter leur imagerie. Le plus important pour comprendre la haute définition est un descendant direct de C - le langage C ++. Il développe l'idée d'une sélection arbitraire des opérations pour les quantités et l'incarne sur la base d'une expression sy-expressive, une collection qui reçoit un nouveau nom - un objet. Cependant, C ++ n'est pas aussi concis et expressif que C, en raison de la surcharge de nouveaux types de collections et des règles associées. Soit dit en passant, parlons de «surcharge».Surcharge et polymorphisme
Le mot surcharge est un terme dépassé dans une approche machine qui désigne la création de plusieurs opérations .Les programmeurs de machine (système) pourraient être ennuyés par la multiplicité des opérations: «Que signifie ce signe (+): addition d'entiers, addition de nombres fractionnaires, ou même d'un décalage?! De nos jours, ils n’écrivaient pas comme ça! " D'où la connotation négative du mot sélectionné ("buste", "fatigué"). Pour un programmeur d'applications, plusieurs opérations sont la pierre angulaire, la principale réalisation et l'héritage du langage C, si naturelles qu'elles ne sont souvent pas réalisées.En C ++, pluralitéétendu non seulement aux opérations d'origine, mais aussi aux fonctions - à la fois individuelles et regroupées en méthodes - méthodes. Avec plusieurs méthodes, il est devenu possible de les redéfinir dans des classes étendues, ce qui était vaguement appelé «polymorphisme». La combinaison du polymorphisme et de la surcharge a donné un mélange explosif, qui s'est dispersé en deux polymorphismes: «vrai» et «ad hoc». Vous ne pouvez comprendre cela qu'en dépit des noms attribués. Des noms étrangers ont ouvert la voie à la publicité.La déclaration de la forme "surcharge" est mieux exprimée par le mot add - en ajoutant une déclaration de la fonction du même nom avec les arguments d'une autre image.Une annonce de la forme «polymorphisme» est mieux appelée le mot redéclaration- déclaration de chevauchement dans une nouvelle couche d'extension de la fonction du même nom avec des arguments de la même image.Il sera alors facile de comprendre que les méthodes du même nom d'images différentes (arguments) sont redéclarées , et de la même image sont redéclarées .Les mots russes décident.Piste
La prise en compte des concepts des langages hautement figuratifs confirme l'importance d'une définition claire des concepts fondamentaux. Avec C correctement décrit, l'apprentissage de langages de grande forme sera facile et agréable.Ceci est particulièrement important pour les langages implicites hautement figuratifs (PHP, JavaScript). Pour eux, l'importance des objets (images composites) devient encore plus élevée qu'en C ++, mais le concept même d'image devient implicite et insaisissable. Du point de vue de la commodité, ils sont devenus plus simples, mais du point de vue de la compréhension, c'est plus compliqué.Par conséquent, vous devez commencer à apprendre les langages de programmation avec le langage C et continuer dans l'ordre dans lequel les langages de la famille C apparaissent.Il en va de même pour les descriptions de langue. Différentes langues ont le même ou plus petit ensemble d'unités de genre que la langue C. Le nombre d'espèces et d'échantillons peut différer dans les deux sens: C ++ a plus d'espèces que C, JavaScript en a moins.Le langage MySQL mérite une mention spéciale. Il semblerait - rien de commun, mais il est parfaitement décrit par Matryoshka, et apprendre à le connaître devient plus rapide et plus facile. Ce qui est important, étant donné son importance pour le web - la cantine de la programmation moderne. Où se trouve MySQL, il existe d'autres SQL. Eh bien, toutes sortes de pythons Fortran-Pascal sont également décrits par Matryoshka dès que leurs mains atteignent.De grandes choses nous attendent donc - une description appliquée du langage C et une seule description des langages qui le suivent. «Nos objectifs sont clairs, les tâches sont définies. Pour travailler, camarades! (Applaudissements orageux et prolongés, se transformant en une ovation debout. Tout le monde se lève.) »Vos opinions seront entendues avec une grande attention, votre aide pour la création du site de poupée russe sera grandement appréciée. Des informations plus complètes sur le livre sont sur le site, astucieusement cachées dans Matryoshka C.