Proviamo ad immaginare la chimica senza il Sistema Periodico di Mendeleev (1869). Quanti elementi avremmo dovuto tenere a mente, in un ordine casuale... (Allora erano 60.)
Basta pensare a uno o più linguaggi di programmazione. Le stesse sensazioni, lo stesso disordine creativo.
Adesso possiamo rivivere le emozioni dei chimici del XIX secolo, quando gli fu presentato tutto il loro sapere, e qualcosa in più, in un'unica Tavola Periodica.

Il libro «Matryoshka C. Sistema stratificato del linguaggio di programmazione» rappresenta tutte le unità del linguaggio C come su un palmo di mano. Questo permette di ordinarle, correggere informazioni obsolete e persino chiarire il concetto stesso di programma.
Oggi le informazioni sulla programmazione necessitano di sistematizzazione più di quanto non fosse il caso degli elementi chimici 150 anni fa.
La prima necessità è l'insegnamento. Mendeleev cominciò a creare il suo sistema quando si trovò di fronte alla domanda: da quale elemento iniziare a tenere lezioni: O, H, N, He, Au... In questo, lui era avvantaggiato: insegnava ai migliori studenti dell'Università di San Pietroburgo. E ora la programmazione è già insegnata a scuola e presto inizierà anche all'asilo.
La seconda necessità è l'approccio scientifico. Con il Sistema Periodico sono stati scoperti nuovi elementi e corretti dati su quelli vecchi. Ha aiutato nella creazione del modello atomico (1911). E così via.
La terza necessità è chiarire il concetto di programma.
La programmazione moderna è rimasta bloccata negli anni '50 del XX secolo. Allora i programmi erano semplici, e le macchine e i linguaggi macchina erano complessi, quindi tutto ruotava attorno a macchine e linguaggi.
Ora è tutto il contrario: i programmi sono complessi e primari, i linguaggi sono semplici e secondari. Questo è chiamato approccio applicato, che a tutti sembra familiare. Ma studenti e sviluppatori continuano a essere convinti che sia tutto come prima.
Questo ci riporta alla prima lezione del privat-docente Mendeleev. Cosa dire ai neofiti? Dove si trova la verità? È questa la questione.
Il libro «Matryoshka C. Sistema stratificato del linguaggio di programmazione» offre una sua risposta. Ed è rivolto non solo agli studenti, ma anche ai programmatori esperti, poiché la verità e il ribaltamento della visione del mondo devono essere ricercati proprio da loro, ovvero da noi.
Di seguito troviamo un breve riassunto del libro.
1. Introduzione
Nel 1969 è stato creato il linguaggio C, che è diventato il linguaggio di programmazione fondamentale e lo è rimasto per già 50 anni. Perché è così? Innanzitutto perché C è un linguaggio applicato che ha dato al programma un aspetto umano invece che meccanico. Questo risultato è stato consolidato dai linguaggi della famiglia C: C++, JavaScript, PHP, Java, C# e altri. In secondo luogo, è un linguaggio breve e bello.Tuttavia, il linguaggio C viene spesso confuso con l'assemblatore macchina, complicandone e distorcendo così la percezione. L'altra estremità è l'imposizione di una 'filosofia' al linguaggio: procedurale, orientata agli oggetti, funzionale, compilato, interpretato, tipizzato e così via. Questo aggiunge emozioni, ma non aiuta a descrivere meglio il linguaggio.
La verità si trova a metà strada, e per il linguaggio C è rigorosamente a metà strada tra una percezione filosofica e meccanica.
Il linguaggio C non è autonomo, si sottopone alla normale lingua scritta e allo stesso tempo controlla il linguaggio assembler. Questa posizione è descritta dal
Modello linguistico del programma , secondo il quale il programma è diviso in tre tipi subordinati: linguistico, codice, comando. Il linguaggio C risponde al secondo, tipo codice.Definendo il posto del linguaggio all'interno del programma, è possibile sistematizzare le informazioni su di esso, cosa che fa il
Sistema stratificato del linguaggio di programmazione , che rappresenta il linguaggio C nello spirito del sistema di Mendeleev — su una sola pagina.Il sistema è costruito tenendo conto dell'
universalità dei linguaggi applicativi , derivante dalla loro subordinazione linguistica. Un insieme di unità della Matryoshka C consente di descrivere e comparare diversi linguaggi, creando una serie di Matryoshka: C++, PHP, JavaScript, C#, MySQL, Python e così via. È giusto e corretto che diversi linguaggi siano descritti con le unità del linguaggio fondamentale.2. CAPITOLO 1. Modello linguistico del programma. C chiaro.
Nel primo capitolo è presentato il
modello linguistico del programma , che riflette l'approccio applicato. Secondo esso, il programma ha tre evidenti modi sequenziali:linguistico — il discorso diretto del programmatore che risolve un problema,
- codice — codificazione della soluzione in forma matematica nel linguaggio C (o in qualsiasi altro)
- e comando — comandi macchina diretti.
- Il modello linguistico spiega perché C è un linguaggio semplice e chiaro. C è costruito sull'immagine e somiglianza del nostro linguaggio umano.
Il modello del linguaggio spiega perché il C è un linguaggio semplice e comprensibile. Il C è costruito sulla base del linguaggio umano a noi familiare.
Il primo tipo di programma è il discorso diretto del programmatore. Il discorso corrisponde al pensiero umano. Attraverso il discorso, i programmatori principianti scrivono programmi — inizialmente in russo, per poi tradurre passo dopo passo le azioni nel linguaggio di codice. Ed è proprio su questo modello che è stato creato il linguaggio C.
Le inferenze del programmatore, espresse a parole, vengono trasformate in codice numerico. Questa trasformazione dovrebbe essere chiamata riflessione, poiché il discorso e il codice hanno una natura comune (riflessione — nascita — genitore). Questo è piuttosto evidente se si confrontano la forma parlata (a sinistra) e quella codificata (a destra) del programma.

È curioso notare che la riflessione avviene molto semplicemente — attraverso due tipi di espressioni.
Tuttavia, la descrizione moderna del linguaggio C (dal 1978) non contiene un elenco sufficiente di nomi né per descrivere il linguaggio in generale né per il compito della riflessione in particolare. Pertanto, siamo costretti a darci da fare e introdurre questi nomi.
La scelta delle parole deve essere precisa e chiara. A tal fine, è stato necessario un approccio particolare, esprimibile brevemente così: uso rigoroso della lingua madre. Per gli inglesi sarebbe stata l'inglese, ma noi non siamo inglesi. Quindi utilizziamo ciò che abbiamo e cerchiamo di parlare in russo.
La riflessione viene eseguita attraverso due tipi di espressioni:
- calcolo (Ce) — riflette il cambiamento delle proprietà di un oggetto. La proprietà dell'oggetto è espressa da un numero, quindi l'azione sulla proprietà è un'azione sul numero — operazione.
- sottomissione (Se) — riflette il cambiamento nell'ordine delle azioni. Il modello di Se è una proposizione complessa del discorso, per cui la maggior parte delle forme di Se inizia con congiunzioni subordinanti come "se", "altrimenti", "mentre", "per". Altre forme di Se li completano.
A proposito, potete credere che nella descrizione di C non esista un nome per le espressioni di calcolo — sono chiamate semplicemente "espressioni"? Dopo questo, non sorprenderà l'assenza di un nome e di una classificazione per il tipo di sottomissione e, in generale, la scarsità di nomi, definizioni e generalizzazioni. Tutto ciò perché il famoso K/R ("Linguaggio C", Kernighan/Ritchie, 1978) non è una descrizione, ma una guida all'uso del linguaggio.
Tuttavia, sarebbe bello avere comunque una descrizione del linguaggio. Pertanto, questo è ciò che propone , che rappresenta il linguaggio C nello spirito del sistema di Mendeleev — su una sola pagina..
3. CAPITOLO 2. Sistema a livelli. Breve C
Qualsiasi descrizione deve essere precisa e estremamente concisa. Nel caso del linguaggio di programmazione, una descrizione diretta è difficile.
Ecco che abbiamo un programma. Esso consiste di moduli. I moduli sono composti da sottoprogrammi e raccolte (structure). I sottoprogrammi consistono in espressioni singole: dichiarazioni, calcoli, sottomissioni. Ci sono dieci tipi di sottomissioni. Le sottomissioni collegano sotto-livelli e sottoprogrammi. Anche le dichiarazioni sono numerose. In effetti, le dichiarazioni non vengono incluse solo nei sottoprogrammi e nei sotto-livelli, ma anche nei moduli e nelle raccolte. E la maggior parte delle espressioni è composta da parole, che sono così complesse da descrivere che di solito vengono semplicemente fornite in due liste — parole di base e parole derivate, con cui ci si dovrà familiarizzare durante tutto lo studio e l'uso del linguaggio. A questo si aggiungono la punteggiatura e una serie di altre espressioni.
In questa esposizione, è difficile capire chi sta su chi.
Un approccio diretto e gerarchico per descrivere il linguaggio sarebbe eccessivamente complicato. La ricerca di percorsi indiretti porta a una descrizione del linguaggio basata sulla sua natura linguistica e sulla parte comandi. Così è nato il Sistema a Livelli, che coincide parzialmente con il Sistema Periodico di Mendeleev, il quale è anche stratificato. Come è emerso 42 anni dopo la sua pubblicazione (1869), la periodicità del sistema è legata agli strati elettronici (1911, modello di atomo di Bohr-Rutherford). Inoltre, il Sistema a Livelli e il Sistema Periodico condividevano una disposizione tabellare di tutte le unità su una pagina.
La descrizione delle unità del linguaggio risulta essere concisa — soltanto 10 tipi di espressioni e 8 tipi di altre unità, oltre a essere sostanziosa e chiara. Anche se poco familiare per i primi approcci.
Le unità del linguaggio sono suddivise in 6 livelli:
- gruppi — righe della tabella
- sezioni — gruppi speciali di tipi (parti della prima riga)
- tipi — celle (livello principale di divisione)
- super-tipi — separatori dei tipi (livello raro)
- tipi — formule delle unità in fondo alla cella o separatamente
- modelli — le stesse unità (solo per le parole)
I modelli delle parole sono descritti dal dizionario — un sottosistema separato, composto dagli stessi sei livelli.
La componente linguistica del linguaggio C è ben evidente, anche se merita comunque una descrizione. Tuttavia, la parte comando del linguaggio è legata alla gestione della compilazione, durante la quale si crea un terzo tipo di programma — il comando. Qui arriviamo all'aspetto più affascinante del linguaggio C — la sua bellezza.
4. CAPITOLI SUCCESSIVI. Il bel C
Il linguaggio C è alla base della programmazione moderna. Perché? Prima di tutto, per la sua maggiore affinità con il linguaggio naturale. In secondo luogo, perché ha superato elegantemente i limiti dell'elaborazione numerica da parte delle macchine.
Cosa ha effettivamente proposto C? Immagini e tipi.
La parola «tipo» è una traduzione dell'inglese «type», che deriva dal greco «prototypos» — «modello». In italiano, la parola «tipo» non esprime compiutamente il concetto, e si confonde anche con il significato funzionale di «categoria».
Inizialmente, il tipo risolveva un problema puramente meccanico di calcolo, e successivamente è diventato una pista di lancio per la nascita dei linguaggi orientati agli oggetti.
Il tipo affrontava immediatamente più problemi — sia meccanici che applicativi. Pertanto, l'analisi inizierà con il tipo monofunzionale e passerà al tipo multifunzionale.
Una delle spiacevoli caratteristiche della programmazione storica è che la maggior parte dei concetti, compresi quelli fondamentali, viene presentata senza definizioni. «Un linguaggio di programmazione (nome dei fiumi) ha tipi di numeri interi e floating...» — e si va avanti. Non è obbligatorio definire cosa sia un «tipo» (tipo), perché gli autori stessi non lo comprendono appieno e lo eludono per «chiarezza». Se sono messi alle strette, forniscono una definizione vaga e inutile. È molto utile nascondersi dietro parole straniere: per gli autori russi — dietro l'inglese (tipo), per gli inglesi — dietro il francese (subroutine), il greco (polimorfismo), il latino (incapsulamento) o le loro combinazioni (polimorfismo ad hoc).
Ma questo non è il nostro destino. La nostra scelta è di fornire definizioni chiare in un russo puro.
Immagine
Immagine — è un nome generico di grandezza, che definisce 1) proprietà peculiari della grandezza e 2) abbinamento delle operazioni alla grandezza.
La parola «tipo» (categoria) corrisponde alla prima parte della definizione: «proprietà peculiari della grandezza». Ma il significato principale del tipo risiede nella seconda parte: «abbinamento delle operazioni alle grandezze».
Il punto di partenza per introdurre il tipo nel linguaggio C è un'operazione aritmetica comune, ad esempio, l'operazione di somma.
La matematica su carta, scritta a mano o stampata, non fa particolari distinzioni tra i tipi di numeri, solitamente considerandoli come numeri reali. Pertanto, le operazioni di elaborazione sono univoche. La matematica, scritta a mano o stampata, non fa particolari distinzioni tra i tipi di numeri, generalmente considerandoli come numeri reali. Pertanto, le operazioni su di essi sono univoche.
La matematica meccanica divide rigorosamente i numeri in interi e frazionari. I diversi tipi di numeri vengono memorizzati in modo diverso in memoria e vengono elaborati da comandi diversi del processore. Ad esempio, i comandi per sommare numeri interi e frazionari sono due comandi distinti, corrispondenti a due nodi diversi del processore. Tuttavia, il comando per sommare argomenti interi e frazionari non esiste. La matematica applicativa, cioè il linguaggio C, distingue i tipi di numeri, ma unisce le operazioni: la somma per numeri interi e/o frazionari è rappresentata da un solo simbolo di operazione.
Una chiara definizione del concetto di tipo consente di parlare in modo preciso di altri due concetti: grandezza
operazione Grandezza e operazione e Grandezza.
— numero elaborato.
— elaborazione dei valori delle grandezze originali (argomenti) per ottenere il numero finale (risultato). Grandezza e operazione sono interconnesse. Ogni operazione è una grandezza, poiché ha un risultato numerico. E ogni grandezza è il risultato del trasferimento di un valore nel registro del processore/dal processore, cioè — il risultato di un'operazione. Nonostante questa interconnessione, rimane fondamentale la possibilità di una loro descrizione separata, anche a costo di ripetere una parola in diverse sezioni del dizionario, come avviene in ma3.
Operazione L'approccio meccanico divide tutti i numeri usati dal programmatore in
. In passato, entrambi erano effettivamente numeri, ad esempio, i comandi erano scritti con codici numerici. Tuttavia, nei linguaggi applicativi, i comandi hanno smesso di essere numeri e sono diventati
parole del comando. e datisimboli di operazione . I numeri rimasti sono solo i «dati», ma continuare a chiamarli così è insensato, poiché nel passaggio da un punto di vista meccanico a quello matematico, i numeri sono grandezze, che si dividono in originali ( e ) e finali (cercatidati). «Un dato ignoto» suonerebbe ridicolo.Anche i comandi si sono divisi in due tipi di operazioni: matematiche e ausiliarie. Le operazioni matematiche sono operazioni. Torneremo su quelle ausiliarie in seguito.Nei linguaggi C, le abituali operazioni matematiche univoche di carta e meccaniche diventano quasi tutte multiple.
Le operazioni multiple sono diverse operazioni omonime con diversi tipi di argomenti e diversi, simili per significato, azioni.
Nei linguaggi C, le abituali operazioni matematiche univoche, sia su carta che su macchine, diventano quasi tutte multiple.
Le operazioni multiple sono diverse operazioni omonime con diverse rappresentazioni degli argomenti e azioni diverse, ma simili in significato.
Le operazioni corrispondono agli argomenti interi, mentre a quelli frazionari corrispondono le operazioni frazionarie. Questa differenza è particolarmente evidente nell'operazione di divisione, dove l'espressione 1/2 restituisce 0 invece di 0,5. Questa notazione non rispetta le regole della matematica tradizionale, ma il linguaggio C non aspira a seguirle (a differenza del Fortran) — gioca secondo le sue. applicativo regole.
Nel caso di miscelazione di numeri interi e frazionari viene attivata un'unica corretta conversione dei valori degli argomenti — una trasformazione selettiva del valore da una forma all'altra. Infatti, quando si somma un numero intero e uno frazionario, il risultato è frazionario, quindi la forma dell'operazione sceglie l'operazione di trasformazione dell'argomento intero in un valore frazionario.
Alcune operazioni rimangono non multiple, e singole.Tali operazioni sono definite solo per un tipo di argomenti: il resto della divisione — argomenti interi, e la bitwise (operazioni bit per bit) — interi naturali. Ma3 indica la molteplicità delle operazioni con i segni (#^) specificando le forme per cui l'operazione è definita. Questa è una caratteristica importante ma spesso trascurata di ogni operazione.
Tutte le funzioni sono operazioni unitari arbitrarie. Un'eccezione sono gli operatori — funzioni senza parentesi, integrate nel linguaggio (operazioni primitive).
Assistenza
Assistenza — l'azione associata all'operazione.
Se consideriamo l'operazione come l'azione principale, possiamo distinguere due azioni accessorie che supportano l'operazione e si differenziano da essa. Queste sono 1) gestione della variabile e 2) subordinazione. Questa azione è chiamata assistenza..
A questo punto è necessario fare una pausa e parlare separatamente delle traduzioni russe dei testi sui programmi. Nel testo K/R per registrare le azioni è stata introdotta una nuova parola, statement (espressione), che ha cercato di separare i concetti dei comandi macchina in diverse azioni: 1) operazione, 2) dichiarazione e 3) subordinazione (chiamata "costrutti di controllo"). Questo tentativo è stato sepolto dai traduttori russi, sostituendo "espressione" con "operatore", che è diventato:
- il sinonimo della parola macchina "comando",
- è risultato sinonimo della locuzione "segno di azione",
- e otteneva anche un numero illimitato di significati aggiuntivi. Cioè è diventato simile all'articolo inglese "uhhh...".
Consideriamo le azioni accessorie, o assistenza..
Gestione della variabile
Gestione della variabile (GV) — creazione/rimozione di celle della variabile.
La GV avviene in forma implicita al momento della dichiarazione della variabile, che è già scritta per un altro scopo — per indicare la forma della grandezza. Solo un tipo di variabili aggiuntive è gestito esplicitamente attraverso le funzioni malloc() e free().
Va notato che le azioni implicite sono più comode da scrivere, in quanto non richiedono di scrivere nulla, ma sono più difficili da comprendere — è più difficile tenerne conto e interpretarli.
Subordinazione
Subordinazione — connessione/disconnessione delle sezioni a livello subordinato.
Il linguaggio C propone un modo pratico di gestire l'ordine delle azioni, diverso dall'assemblatore — la subordinazione. Essa riflette e sviluppa la frase complessa subordinata del linguaggio parlato, con una chiara separazione tra la parte principale (frase subordinata) e la parte dipendente (sezioni sottolivello/sottoprogramma).
Sia la dichiarazione che la subordinazione sono completamente costruite sul concetto di strato..
Strato
Strato — è un insieme selettivo limitato di espressioni a un livello.
Lo strato ha assunto esplicitamente e implicitamente più compiti:
- ordinamento del programma,
- limitazione della visibilità dei nomi (implicitamente),
- gestione delle variabili (celle di memoria) (implicitamente),
- definizione delle sezioni subordinate per la subordinazione,
- definizione delle funzioni e selezioni e altro.
Nei linguaggi di macchina non esisteva il concetto di strato, quindi non è apparso nemmeno nel K/R, e se qualcosa non esisteva lì — introdurlo nei libri successivi sarebbe stata un'eresia e una libertà di pensiero. Pertanto, il concetto di strato non è mai apparso, anche se estremamente utile e del tutto ovvio.
Senza strati è impossibile spiegare in modo chiaro e conciso molte azioni e regole del programma. Ad esempio, perché il semplice goto — è cattivo, mentre il complicato while — è buono. Si può solo imprecare impotentemente, come faceva Dijkstra ("la qualificazione dei programmatori è una funzione inversamente correlata con la frequenza di utilizzo dei comandi goto nei loro programmi". In breve, solo i caproni usano goto. Il livello di giustificazione — Dio.) In realtà, questo non è così terribile, se i vostri libri non devono spiegare nulla, ma, come già detto, questo non è il nostro destino.
Si può presumere che Den Ritchie abbia lasciato il goto come chiave per la ricerca di un concetto non rinominato, poiché non c'era bisogno o bellezza nell'espressione goto. Tuttavia, c'era la necessità di una spiegazione semplice e chiara dei nuovi principi del linguaggio, che Ritchie stesso non voleva fornire, e che si basavano proprio su questo concetto. strato..
Deviazione
Deviazione — modifica delle proprietà abituali del nuovo nome.
La più importante deviazione riguarda le proprietà stratificate del programma e si descrive con una sola parola: «static», che ha significati diversi in ciascun tipo di strato.
5. ULTIMO CAPITOLO. Universalità dei linguaggi applicativi
I linguaggi applicativi sono immaginifici linguaggi (che hanno un’immagine, «tipizzati»). Essi si basano su un uso esplicito o implicito dell’immagine. Qui si ripresenta un contraddizione: un’immagine esplicita è più comprensibile, ma meno conveniente, e viceversa.

(La formattazione della tabella non è ancora disponibile, quindi la tabella è fornita come immagine.)
Dopo il C, lo sviluppo dei linguaggi applicativi ha preso la strada dell'aumento della loro immaginazione. Il più importante per comprendere il grado di immaginazione elevata è il diretto discendente del C: il linguaggio C++. Esso sviluppa l'idea della selezione arbitraria di operazioni sui valori e la realizza sulla base dell'espressione C di selezione, che riceve un nuovo nome: oggetto. Tuttavia, C++ non è così conciso ed espressivo come C, a causa del sovraccarico di nuovi tipi di selezione e delle regole ad esse associate. A proposito, parliamo del «sovraccarico».
Sovraccarico e polimorfismo
La parola «sovraccarico» (overload) è un termine obsoleto dell'approccio macchina, che indica la creazione di multiple operazioni.
I programmatori (sistemici) la molteplicità delle operazioni poteva infastidire: «Cosa significa questo simbolo (+): somma di numeri interi, somma di numeri decimali o addirittura uno spostamento?! Al nostro tempo non si scriveva così!» Da qui deriva il tono negativo della parola scelta («sovraccarico», «stancante»). Per il programmatore applicativo, le operazioni multiple sono la pietra angolare, il principale risultato e il lascito del linguaggio C, così naturali da rimanere spesso inavvertite.
Nel linguaggio C++ la molteplicità si è diffuso non solo alle operazioni originali ma anche alle funzioni — sia singole che raggruppate in classi — metodi. Insieme ai metodi multipli si è aperta la possibilità della loro ridefinizione in classi estese, che è stata vagamente chiamata «polimorfismo». La combinazione di polimorfismo e sovraccarico ha dato una miscela esplosiva che si è divisa in due polimorfismi: «vero» e «ad-hoc». Capirlo è possibile solo contro i nomi assegnati. I nomi stranieri hanno spianato la strada all'ad.
La dichiarazione di tipo «sovraccarico» è meglio esprimerla con la parola dichiarazione supplementare — dichiarazione aggiuntiva della stessa funzione con argomenti di un'immagine diversa.
La dichiarazione di tipo «polimorfismo» è meglio chiamarla ridefinizione — dichiarazione che sovrappone in un nuovo strato espansivo la funzione con nome identico e argomenti della stessa immagine.
Allora sarà facile capire che i metodi omonimi di varie immagini (argomenti) sono dichiarati nuovamente, mentre quelli della stessa immagine sono ridefiniti..
Le parole russe chiariscono.
Pista di decollo
La considerazione dei concetti di linguaggi altamente immaginativi conferma l'importanza di definire chiaramente i concetti fondamentali. Con un C ben descritto, lo studio dei linguaggi altamente immaginativi sarà facile e piacevole.
Particolarmente importante è per linguaggi altamente immaginativi impliciti (PHP, JavaScript). Per loro, l'importanza degli oggetti (immagini composite) diventa ancora più alta rispetto a C++, ma il concetto stesso di immagine diventa implicito e difficile da afferrare. In termini di comodità sono diventati più semplici, mentre da un punto di vista della comprensione — più complessi.
Pertanto, l'apprendimento dei linguaggi di programmazione dovrebbe iniziare con il C e procedere nell'ordine di apparizione dei linguaggi della famiglia C.
Lo stesso vale per la descrizione dei linguaggi. Diversi linguaggi presentano un insieme di generi di unità coincidente o inferiore rispetto al linguaggio C. Il numero di tipi e modelli può variare in entrambe le direzioni: C++ ha più tipi di C, JavaScript — meno.
Merita una menzione particolare il linguaggio MySQL. Sembrerebbe — nulla in comune, ma è descritto perfettamente dalla Matrioska, e la familiarizzazione con esso diventa più rapida e semplice. Cosa importante, data la sua rilevanza per il web — la strada principale della programmazione moderna. E dove c'è MySQL, ci sono anche altri SQL. E, naturalmente, vari Fortran-Pascal-Python sono pure descritti dalla Matrioska, appena se ne avrà l'occasione.
Quindi, ci aspettano grandi cose: una descrizione pratica del linguaggio C e una descrizione uniforme dei linguaggi successivi. «I nostri obiettivi sono chiari, i compiti definiti. Al lavoro, compagni! (Applausi entusiasti e prolungati, seguiti da un'ovazione. Tutti in piedi.)»
Le vostre opinioni saranno ascoltate con grande attenzione, il vostro aiuto nella creazione del sito delle matrioske sarà accolto con immensa gratitudine. Maggiori informazioni sul libro sono disponibili sul sito, astutamente nascosto nella Matrioska C.
Fonte: habr.com
