Matryoshka Si. Sistema de capes del llenguatge del programa

Intentem imaginar la química sense la Taula Periòdica de Mendeleiev (1869). Quants elements s'havien de tenir en compte, i sense cap ordre particular... (Llavors - 60.)

Per fer-ho, només cal pensar en un o diversos llenguatges de programació alhora. Els mateixos sentiments, el mateix caos creatiu.

I ara podem reviure els sentiments dels químics del segle XIX quan els van oferir tots els seus coneixements, i una mica més, en una Taula Periòdica.

Matryoshka Si. Sistema de capes del llenguatge del programa


El llibre "Matryoshka C. Sistema en capes de llenguatge de programa" presenta totes les unitats del llenguatge C d'un cop d'ull. Això us permet organitzar-los, corregir informació obsoleta i, fins i tot, aclarir el concepte mateix del programa.

Avui dia, la informació de programació necessita sistematització encara més que els elements químics fa 150 anys.

La primera necessitat és ensenyar. Mendeleiev va començar a crear el seu sistema quan es va enfrontar a la pregunta de quin element començar a ensenyar: O, H, N, He, Au... Al mateix temps, li va ser més fàcil -va ensenyar química als millors- estudiants de Universitat de Sant Petersburg. I la programació ja s'ensenya a l'escola i aviat començarà a la llar d'infants.

La segona necessitat és un enfocament científic. Amb l'ajuda de la Taula Periòdica es van descobrir nous elements i es va corregir informació sobre els antics. Va ajudar a crear el model de l'àtom (1911). Etcètera.

La tercera necessitat és aclarir el concepte de programa.

La programació moderna té un peu enganxat als anys 50 del segle XX. Aleshores, els programes eren senzills, però les màquines i els llenguatges de màquina eren complexos, de manera que tot girava al voltant de màquines i llenguatges.

Ara tot és al revés: els programes són complexos i primaris, els idiomes són simples i secundaris. Això s'anomena enfocament aplicat, que tothom sembla estar familiaritzat. Però estudiants i desenvolupadors continuen convençuts que tot és igual.

El que ens porta de nou a la primera conferència de Privatdozent Mendeleiev. Què dir als estudiants de primer any? On és la veritat? Aquesta és la pregunta.

El llibre "Matryoshka C" ofereix la seva resposta a aquesta pregunta. Sistema en capes de llenguatge de programa". A més, s'adreça no només als estudiants, sinó també a programadors formats, ja que som ells, és a dir, nosaltres, els que hem de buscar la veritat i canviar la visió del món.

El que segueix és un resum del llibre.

1. Introducció

L'any 1969 es va crear el llenguatge C, que es va convertir en el llenguatge de programació fonamental i ha estat així durant 50 anys. Per què és així? En primer lloc, perquè C és aplicat l'idioma que va donar el programa humana vista en canvi màquina. Aquest assoliment va ser garantit per llenguatges de la família C: C++, JavaScript, PHP, Java, C# i altres. En segon lloc, és un llenguatge curt i bonic.

No obstant això, el propi llenguatge C se sol barrejar amb l'assemblador de màquines, cosa que complica i distorsiona la seva percepció. L'altre extrem és la imposició d'una certa “filosofia” al llenguatge: procedimental, objectual, funcional, compilat, interpretat, mecanografiat, etc. Això afegeix emoció, però no ajuda a descriure millor el llenguatge.

La veritat està al mig, i per al llenguatge C està estrictament al mig entre la percepció filosòfica i la de la màquina.

El llenguatge C no és independent, obeeix al llenguatge escrit ordinari i, alhora, controla el propi llenguatge assemblador. Aquesta posició descriu Model de parla del programa, segons el qual el programa es divideix en tres tipus subordinats: parla, codi, ordre. El llenguatge C és responsable del segon, el tipus de codi.

Després d'haver determinat el lloc de l'idioma al programa, podeu organitzar la informació sobre ell, el que fa Sistema de llenguatge de programa en capes, que representa el llenguatge C en l'esperit del sistema periòdic - en una pàgina.

El sistema es construeix tenint en compte comunitats de llengües aplicades, derivats de la seva subordinació de la parla. Un conjunt d'unitats C de matrioixques us permet descriure i comparar diferents idiomes, creant una sèrie de matrioixques: C++, PHP, JavaScript, C#, MySQL, Python, etc. És digne i correcte que les diferents llengües siguin descrites per unitats de la llengua fonamental.

2. CAPÍTOL 1. Model de parla del programa. Neteja C

El primer capítol presenta model de parla del programa, reflectint un enfocament aplicat. Segons ell, el programa té tres tipus seqüencials evidents:

  1. parla: discurs directe d'un programador que resol un problema,
  2. codificat: codificar una solució en una forma matemàtica en llenguatge C (o qualsevol altre)
  3. i ordre - ordres directes de la màquina.

El model de parla explica per què C és un llenguatge senzill i entenedor. Xi es construeix a la imatge i semblança de la parla humana que ens és familiar.

El primer tipus de programa és el discurs directe del programador. La parla correspon al pensament humà. Els programadors principiants escriuen programes mitjançant la parla, primer en rus, i després tradueixen les accions pas a pas a un llenguatge de codi. I és precisament sobre aquest model on es va crear el llenguatge C.

Les conclusions del programador, expressades en veu, es converteixen en una forma numèrica codificada. Aquesta transformació s'ha d'anomenar reflexió, ja que la parla i el codi tenen la mateixa naturalesa (reflexió - naixement - gènere). Això és força evident si comparem els tipus de parla (a l'esquerra) i de codi (a la dreta) del programa.

Matryoshka Si. Sistema de capes del llenguatge del programa

És curiós que la reflexió es produeixi de manera molt senzilla, amb només dos tipus d'expressions.

Tanmateix, la descripció moderna del llenguatge C (a partir de 1978) no conté una llista suficient de noms ni per descriure el llenguatge en general, ni per a la tasca de reflexió en particular. Per tant, ens veiem obligats a ser creatius i introduir aquests noms.

L'elecció de les paraules ha de ser precisa i clara. Això requeria un enfocament especial, expressat breument de la manera següent: ús estricte de la llengua materna. Per als anglesos seria anglès, però nosaltres no som anglesos. Així que farem servir el que tenim i intentarem parlar rus.

La reflexió es realitza mitjançant dos tipus d'expressions:

  1. càlcul (HF) - reflecteix un canvi en les propietats d'un objecte. La propietat d'un objecte s'expressa mitjançant un nombre, llavors una acció sobre una propietat és una acció sobre un nombre: una operació.
  2. subordinació (Pch) - reflecteix un canvi en l'ordre de les accions. El prototip de Pch és una oració complexa de parla, per tant, la majoria dels tipus de Pch comencen amb conjuncions subordinades "si", "en cas contrari", "mentre", "per". Altres tipus d'ordinadors els complementen.

Per cert, podeu creure que a la descripció C no hi ha cap nom per a les expressions de càlcul: simplement s'anomenen "expressions"? Després d'això, ja no serà d'estranyar que no hi hagi un nom i una associació per al tipus de subordinació, i de fet l'escassetat de noms, definicions i generalitzacions en general. Això es deu al fet que el famós K/R (“The C Language”, Kernighan/Ritchie, 1978) no és una descripció, sinó una guia per utilitzar el llenguatge.

Tanmateix, encara m'agradaria tenir una descripció de l'idioma. Per això s'ofereix Sistema de llenguatge de programa en capes.

3. CAPÍTOL 2. Sistema de capes. Breu C

Qualsevol descripció ha de ser precisa i extremadament concisa. En el cas d'un llenguatge de programa, una descripció frontal és difícil.

Aquí tenim un programa. Consta de mòduls. Els mòduls consisteixen en subrutines i col·leccions (estructura). Les subrutines consisteixen en expressions individuals: declaracions, càlculs, subordinació. Hi ha fins a deu tipus de subordinació. La subordinació connecta subnivells i subrutines. També hi ha diversos anuncis. Tanmateix, les declaracions s'inclouen no només en subrutines i subnivells, sinó també en mòduls i col·leccions. I la majoria de les expressions consisteixen en paraules que són tan difícils de descriure que normalment es donen simplement en dues llistes: paraules originals i derivades, amb les quals us familiaritzareu al llarg de l'aprenentatge i l'ús de la llengua. Afegim signes de puntuació i una sèrie d'altres expressions a això.

En una presentació d'aquest tipus, no és fàcil entendre qui es trobava sobre qui.

Un enfocament jeràrquic directe per descriure una llengua seria massa complex. Una cerca indirecta condueix a una descripció de la llengua basada en la seva naturalesa de parla i el seu costat de comandament. Així, va néixer el Sistema de Capes, coincidint parcialment amb el Sistema Periòdic de Mendeleiev, que també és capa. Com va resultar 42 anys després de la seva publicació (1869), la periodicitat del sistema s'associa a l'electrònica. capes (1911, model de l'àtom de Bohr-Rutherford). A més, els sistemes en capes i periòdics són similars en la disposició tabular de totes les unitats d'una pàgina.

La descripció de les unitats del llenguatge és breu: només 10 tipus d'expressions i 8 tipus d'altres unitats, així com significatives i visuals. Encara que poc habitual per al primer conegut.

Les unitats lingüístiques es divideixen en 6 nivells:

  1. unitats - files de la taula
  2. departaments - grups especials de gèneres (parts de la primera línia)
  3. gènere - cèl·lules (nivell principal de divisió)
  4. superespècies - separadors d'espècies (nivell rar)
  5. tipus: fórmules d'unitats a la part inferior de la cel·la o per separat
  6. patrons: les unitats en si (només per a paraules)

Les paraules d'exemple descriuen diccionari - un subsistema separat format pels mateixos sis nivells.

El component de parla del llenguatge C és força evident, tot i que encara mereix una descripció. Però la part de comandament del llenguatge està relacionada precisament amb el control de la compilació, durant el qual es crea el tercer tipus de programa: l'ordre. Aquí arribem a l'aspecte més emocionant del llenguatge C: la bellesa.

4. CAPÍTOLS SEGÜENTS. Guapo Si

El llenguatge C és la base de la programació moderna. Per què? En primer lloc, per la major correspondència amb la parla. En segon lloc, perquè va superar les limitacions del processament de números de màquina.

Què va proposar exactament Xi? Imatge i capa.

La paraula "imatge" és una traducció de la paraula anglesa "tipus", que prové del grec "prototip" - "tipus". En llengua russa, la paraula "tipus" no transmet la pedra angular del concepte que s'expressa; a més, es confon amb el significat auxiliar "tipus".

Inicialment, la imatge va resoldre un problema de càlcul purament màquina, i després es va convertir en una pista per al naixement dels llenguatges d'objectes.

La capa va resoldre immediatament diversos problemes, tant a màquina com aplicats. Per tant, la consideració començarà amb una imatge d'una sola tasca i passarà a una capa de múltiples tasques.

Una de les característiques desagradables de la programació històrica és que la majoria de conceptes, inclosos els bàsics, es donen sense definicions. "El llenguatge de programació (nom dels rius) té tipus de nombres enters i flotants..." i van ratllar més. No cal definir què és un "tipus" (imatge), perquè els mateixos autors no ho entenen del tot i ho callaran "per a la claredat". Si estan enganxats a la paret, donaran una definició vaga i inútil. Ajuda molt amagar-se darrere de paraules estrangeres: per als autors russos - darrere de l'anglès (tipus), per als anglesos - darrere del francès (subrutina), del grec (polimorfisme), del llatí (encapsulació) o de les seves combinacions (polimorfisme ad-hoc).

Però aquest no és el nostre destí. La nostra elecció són definicions amb una visera elevada en rus pur.

Imatge

Imatge és un nom prefiguratiu d'una quantitat, que defineix 1) les propietats intrínseques de la quantitat i 2) la selecció d'operacions per a la quantitat.

La paraula "tipus" (tipus) correspon a la primera part de la definició: "propietats intrínseques d'una quantitat". Però el significat principal de la imatge es troba a la segona part: "selecció d'operacions a quantitats".

El punt de partida per introduir una imatge en C és un càlcul normal, com ara l'operació d'addició.

Paper Les matemàtiques, ja siguin escrites a mà o impreses, no fan gaire distinció entre els tipus de nombres, normalment assumint que són reals. Per tant, les seves operacions de processament són inequívoques.

màquina Les matemàtiques divideixen estrictament els nombres en nombres enters i fraccions. Els diferents tipus de números s'emmagatzemen de manera diferent a la memòria i es processen per diferents instruccions del processador. Per exemple, les instruccions per sumar nombres enters i fraccions són dues instruccions diferents corresponents a dos nodes de processador diferents. Però no hi ha cap ordre per afegir arguments enters i fraccionaris.

Aplicat les matemàtiques, és a dir, el llenguatge C, separa els tipus de nombres, però combina operacions: la suma de nombres enters i/o fraccions s'escriu amb un signe d'acció.

Una definició clara de la imatge conceptual ens permet parlar definitivament de dos conceptes més: magnitud и operació.

Magnitud i funcionament

Valor - el número que s'està processant.

Operació — processant els valors dels valors inicials (arguments) per obtenir el nombre final (total).

La magnitud i el funcionament estan interrelacionats. Cada operació és una quantitat perquè té un resultat numèric. I cada valor és el resultat de transferir un valor a/des del registre del processador, és a dir, el resultat de l'operació. Malgrat aquesta relació, el més important és la possibilitat de la seva descripció separada, encara que amb la repetició d'una paraula en diferents seccions del diccionari, que és el que passa a MA3.

L'enfocament de la màquina va dividir tots els números utilitzats pel programador en ordres и dades. Anteriorment, tots dos eren números, per exemple, les ordres estaven escrites en codis numèrics. Tanmateix, en els llenguatges aplicats, les ordres van deixar de ser números i es van convertir en en paraules и senyals d'acció. Només queden les “dades” com a nombres, però és absurd continuar anomenant-los així, perquè en el pas d'una màquina a un punt de vista matemàtic, els nombres són magnituds que es divideixen per l'original (dades) i final (requerit). "Data desconeguda" sonarà estúpid.

Els equips també es van dividir en dos tipus d'accions: matemàtiques i de servei. Accions matemàtiques - operacions. Més tard arribarem a les coses oficials.

En els llenguatges C, les operacions matemàtiques inequívoques, o senzilles, habituals de paper i màquina es tornen gairebé universalment múltiples.

Les operacions múltiples són diverses operacions del mateix nom amb diferents tipus d'arguments i diferents, de significat semblant, accions.

Els arguments enters corresponen a una operació sencera i els arguments fraccionaris corresponen a una operació fraccionària. Aquesta diferència és especialment clara durant l'operació de divisió, quan l'expressió 1/2 dóna un total de 0, no 0,5. Aquesta notació no es correspon amb les regles de les matemàtiques de paper, però el llenguatge C no s'esforça per complir-les (a diferència de Fortran): juga segons el seu propi aplicat regles.

En el cas de barrejar nombres enters i fraccions, s'inclou l'únic correcte llançament dels valors dels arguments — transformació selectiva d'un valor d'una imatge a una altra. De fet, quan s'afegeix un nombre enter i un nombre fraccionari, el resultat és fraccionari, de manera que la imatge de l'operació recull l'operació de convertir un argument enter en un valor fraccionari.

Queden diverses operacions múltiplesI solter. Aquestes operacions només es defineixen per a un tipus d'arguments: residu de divisió - arguments enters, apilament (operacions per bits) - enters naturals. Ma3 indica la multiplicitat d'operacions amb signes (#^) que indiquen les imatges per a les quals es defineix l'operació. Aquesta és una propietat important però prèviament passat per alt de cada operació.

Totes les funcions són operacions unitat arbitràries. L'excepció són els operadors - funcions sense parèntesi, incorporat al llenguatge (operacions originals).

Assistència

Assistència - acció que acompanya l'operació.

Si considerem l'operació com a acció principal, podem distingir-ne dues d'acompanyants que proporcionen l'operació i en diferencien. Aquests són 1) control variable i 2) subordinació. Aquesta acció s'anomena assistència.

Aquí hem de fer una divagació i parlar per separat sobre les traduccions al rus dels llibres de text de programació. Es va introduir una paraula nova al text del K/R per registrar les accions declaració (expressió), que intentava dividir els conceptes d'una ordre de màquina en diferents accions: 1) operació, 2) declaració i 3) subordinació (anomenades "construccions de control"). Aquest intent va ser enterrat pels traductors russos, substituint "expressió" per la paraula "operador", que:

  1. s'ha convertit en sinònim de la paraula màquina "comandament",
  2. va resultar ser sinònim de la frase "signe d'acció",
  3. i també va rebre un nombre il·limitat de valors addicionals. És a dir, s'ha convertit en una cosa semblant a l'article en anglès “uhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh”

Considereu les accions que l'acompanyen, o bé assistència.

Control variable

Control variable (UP) - creant/suprimint cel·les variables.
UE es produeix implícitament quan es declara una variable, que ja està escrita per un altre motiu: per indicar la imatge del valor. Només es gestiona explícitament una vista variables addicionals utilitzant les funcions malloc() i free().

Cal tenir en compte que les accions implícites són més convenients per escriure, ja que no requereixen escriure res, però són més difícils d'entendre: són més difícils de tenir en compte i interpretar.

Subordinació

Subordinació - connectar/desactivar seccions de capa.

El llenguatge C oferia un mètode aplicat per controlar l'ordre de les accions, diferent de l'assemblador - subordinació. Reflecteix i desenvolupa una oració complexa de parla amb una divisió clara en la part principal (oració de subordinació) i la part subordinada (seccions de subnivell/subrutina).

Tant la declaració com la presentació es basen completament en el concepte слой.

Capa

Capa és un conjunt limitat d'expressions selectives d'un sol nivell.

La capa va assumir de manera explícita i implícita diverses tasques alhora:

  1. organitzant el programa
  2. limitar la visibilitat dels noms (implícitament),
  3. gestió de variables (cel·les de memòria) (implícita),
  4. definició d'oracions subordinades per a la subordinació,
  5. definicions de funcions i seleccions i altres.

No hi havia cap concepte de capa en els llenguatges de màquina, de manera que no apareixia a K/R, i si alguna cosa no hi havia, introduir-lo en llibres posteriors seria heretgia i lliurepensament. Per tant, el concepte de capa no va aparèixer en absolut, tot i que és extremadament útil i força evident.

Sense una capa, és impossible explicar breument i clarament moltes de les accions i regles del programa. Per exemple, per què és tan simple com tres copecs dolents, i el temps complicat és bo. Només pots jurar sense poder, com va fer Dijkstra ("l'habilitat dels programadors és una funció que depèn inversament de la freqüència d'ocurrència de les declaracions goto als seus programes". En resum, només les cabres utilitzen goto. El nivell de justificació és Déu.) És cert que això no fa tanta por si els teus llibres No hem d'explicar res, però, com ja hem dit, aquest no és el nostre destí.

Per cert, es pot suposar que Dan Ritchie va deixar goto precisament com a clau per buscar algun concepte sense nom, perquè no hi havia necessitat ni bellesa en l'expressió goto. Però calia una explicació senzilla i entenedora dels nous principis del llenguatge, que el mateix Richie no volia donar, i que es basen precisament en el concepte. слой.

Desviació

Desviació — canviar les propietats habituals del nou nom.

La desviació més important està relacionada precisament amb les propietats de la capa del programa, i es descriu amb una paraula "estàtica", que té un significat diferent en cada tipus de capa.

5. L'ÚLTIM CAPÍTOL. Comunitat de llenguatges aplicats

Els idiomes aplicats són figuratiu idiomes (que té una imatge, "mecanografiat"). Es basen en l'ús explícit o implícit de la imatge. A més, aquí torna a aparèixer una contradicció: una imatge explícita és més comprensible, però menys convenient, i viceversa.

Matryoshka Si. Sistema de capes del llenguatge del programa

(El disseny de la taula encara no s'ha lliurat, de manera que la taula es mostra amb una imatge.)

Després de C, el desenvolupament dels llenguatges aplicats va prendre el camí d'augmentar la seva figurativitat. El més important per entendre les imatges altes és el descendent directe de C, el llenguatge C++. Desenvolupa la idea d'una selecció arbitrària d'operacions per a quantitats i la incorpora sobre la base de la selecció d'expressió sintètica, que rep un nou nom: objecte. Tanmateix, C++ no és tan concís i expressiu com C a causa de la sobrecàrrega de nous tipus de col·lecció i les seves regles associades. Per cert, parlem de "sobrecàrrega".

Sobrecàrrega i polimorfisme

La paraula "sobrecàrrega" és un terme obsolet d'aprenentatge automàtic per crear múltiples operacions.

Programadors de màquines (sistemes). pluralitat les operacions podrien ser molestes: "Què significa aquest signe (+): suma d'enters, suma de nombres fraccionaris o fins i tot desplaçament?! En els nostres temps no escrivien així!" D'aquí la connotació negativa de la paraula escollida (“excés”, “cansat”). Per a un programador d'aplicacions, les múltiples operacions són la pedra angular, el principal assoliment i llegat del llenguatge C, tan naturals que sovint no es reconeixen.

En llenguatge C++ pluralitat s'estenia no només a les operacions originals, sinó també als mètodes de funcions, tant individuals com combinades en classes. Amb múltiples mètodes va arribar la capacitat d'anul·lar-los en classes esteses, que vagament es va anomenar "polimorfisme". La combinació de polimorfisme i sobrecàrrega va produir una barreja explosiva que es va dividir en dos polimorfismes: "vertader" i "ad-hoc". Això només es pot entendre malgrat els noms assignats. El camí cap a l'anunci està empedrat amb noms estrangers.

Una declaració de la forma "sobrecàrrega" s'expressa millor en la paraula anunci addicional — afegir una declaració d'una funció del mateix nom amb arguments d'una imatge diferent.

Una declaració de la forma "polimorfisme" és millor anomenada re-anunci — una declaració superposada en una nova capa d'extensió d'una funció del mateix nom amb arguments de la mateixa imatge.

Aleshores serà fàcil entendre que els mateixos mètodes de diferents imatges (arguments) - anunciat addicionalment, i una imatge - torna a anunciar.

Les paraules russes decideixen.

Pista d'aterratge

La consideració dels conceptes de llenguatges altament figuratius confirma la importància d'una definició clara dels conceptes fonamentals. Amb C correctament descrit, aprendre llenguatges d'alta figuració serà fàcil i agradable.

Això és especialment important per a llenguatges implícits altament figuratius (PHP, JavaScript). Per a ells, la importància dels objectes (imatges compostes) esdevé encara més gran que en C++, però el concepte mateix d'imatge esdevé implícit i esquivant. Des del punt de vista de la comoditat, s'han tornat més senzills, però des del punt de vista de la comprensió, s'han tornat més difícils.

Per tant, hauríeu de començar a aprendre llenguatges de programació amb el llenguatge C i avançar més en l'ordre en què apareixen els llenguatges de la família C.

El mateix passa amb la descripció de les llengües. Els diferents idiomes tenen el mateix conjunt, o més petit, de gèneres unitaris que el llenguatge C. El nombre de tipus i mostres pot diferir en ambdues direccions: C++ té més tipus que C, mentre que JavaScript en té menys.

El llenguatge MySQL mereix una menció especial. Sembla que no hi ha res en comú, però Matryoshka el descriu perfectament, i conèixer-lo es fa més ràpid i fàcil. La qual cosa és important, donada la seva importància per a la web: el camí gastronòmic de la programació moderna. I on hi ha MySQL, hi ha altres SQL. Bé, Matryoshka també descriu tota mena de Fortran-Pascal-Pythons, tan bon punt hi posen les mans.

Per tant, ens esperen grans coses: una descripció aplicada del llenguatge C i una descripció unificada dels idiomes que el segueixen. “Els nostres objectius són clars, les nostres tasques estan definides. A la feina, companys! (Aplaudiments tempestuosos i prolongats, convertint-se en ovacions. Tothom s'aixeca.)"

Les vostres opinions seran escoltades amb molta atenció, la vostra ajuda en la creació del lloc web de nines niu serà rebuda amb gran agraïment. Trobareu informació més completa sobre el llibre al lloc web, intel·ligentment amagat a Matryoshka C.

Font: www.habr.com

Afegeix comentari