Matryoshka C. Sistem de limbaj de program stratificat

Să încercăm să ne imaginăm chimia fără Tabelul periodic al lui Mendeleev (1869). Câte elemente au trebuit să se țină cont și în nicio ordine anume... (Apoi - 60.)

Pentru a face acest lucru, gândiți-vă la unul sau mai multe limbaje de programare simultan. Aceleași sentimente, același haos creativ.

Și acum putem retrăi sentimentele chimiștilor din secolul al XIX-lea când li s-au oferit toate cunoștințele și puțin mai mult, într-un singur Tabel periodic.

Matryoshka C. Sistem de limbaj de program stratificat


Cartea „Matryoshka C. Sistemul stratificat al limbajului programului" prezintă toate unitățile limbajului C dintr-o privire. Acest lucru vă permite să le organizați, să corectați informații învechite și chiar să clarificați însuși conceptul programului.

Astăzi, programarea informațiilor necesită sistematizare chiar mai mult decât elementele chimice în urmă cu 150 de ani.

Prima necesitate este predarea. Mendeleev a început să-și creeze sistemul când s-a confruntat cu întrebarea cu ce element să înceapă să predă: O, H, N, He, Au... În același timp, i-a fost mai ușor - le-a predat chimia celor mai buni - studenți din Universitatea din Sankt Petersburg. Și programarea este deja predată la școală și va începe în curând la grădiniță.

A doua nevoie este o abordare științifică. Cu ajutorul Tabelului periodic s-au descoperit elemente noi și au fost corectate informații despre cele vechi. Ea a contribuit la crearea modelului atomului (1911). Și așa mai departe.

A treia nevoie este de a clarifica conceptul de program.

Programarea modernă are un picior blocat în anii 50 ai secolului XX. Pe atunci, programele erau simple, dar mașinile și limbajele mașinilor erau complexe, așa că totul se învârtea în jurul mașinilor și limbajelor.

Acum totul este invers: programele sunt complexe și primare, limbile sunt simple și secundare. Aceasta se numește abordare aplicată, cu care toată lumea pare să fie familiarizată. Dar studenții și dezvoltatorii continuă să fie convinși că totul este la fel.

Ceea ce ne readuce la prima prelegere a lui Privatdozent Mendeleev. Ce să le spun bobocilor? Unde este adevarul? Aceasta este întrebarea.

Cartea „Matryoshka C” oferă răspunsul la această întrebare. Sistem stratificat de limbaj de program”. Mai mult, se adresează nu numai studenților, ci și programatorilor instruiți, deoarece ei, adică noi, trebuie să căutăm adevărul și să schimbăm viziunea asupra lumii.

Ceea ce urmează este un rezumat al cărții.

1. Introducere

În 1969, a fost creat limbajul C, care a devenit limbajul fundamental de programare și a rămas așa timp de 50 de ani. De ce este așa? În primul rând, pentru că C este aplicat limbajul care a dat programul uman vizualiza in schimb mașinărie. Această realizare a fost asigurată de limbaje din familia C: C++, JavaScript, PHP, Java, C# și altele. În al doilea rând, este o limbă scurtă și frumoasă.

Cu toate acestea, limbajul C în sine este de obicei amestecat cu mașina de asamblare, complicând și distorsionându-i astfel percepția. Cealaltă extremă este impunerea unei anumite „filozofii” asupra limbajului: procedurală, obiectuală, funcțională, compilată, interpretată, dactilografiată și așa mai departe. Acest lucru adaugă emoție, dar nu ajută la descrierea mai bine a limbajului.

Adevărul este la mijloc, iar pentru limbajul C este strict la mijloc între percepția filozofică și cea mașină.

Limbajul C nu este independent, se supune limbajului scris obișnuit și, în același timp, controlează limbajul de asamblare în sine. Această poziție descrie Modelul de vorbire al programului, conform căruia programul este împărțit în trei tipuri subordonate: vorbire, cod, comandă. Limbajul C este responsabil pentru al doilea tip de cod.

După ce ați determinat locul limbii în program, puteți organiza informații despre aceasta, ceea ce face Sistem de limbaj de program stratificat, reprezentând limbajul C în spiritul sistemului periodic - pe o singură pagină.

Sistemul este construit ținând cont comunități de limbi aplicate, decurgând din subordonarea lor vorbirii. Un set de unități Matryoshka C vă permite să descrieți și să comparați diferite limbi, creând o serie de Matryoshka: C++, PHP, JavaScript, C#, MySQL, Python și așa mai departe. Este demn și corect ca diferitele limbi să fie descrise de unități ale limbii fundamentale.

2. CAPITOLUL 1. Modelul de vorbire al programului. Clear C

Primul capitol prezintă modelul de vorbire al programului, reflectând o abordare aplicată. Potrivit lui, programul are trei tipuri secvențiale evidente:

  1. vorbire - vorbire directă a programatorului care rezolvă problema,
  2. codificat - codificarea unei soluții într-o formă matematică în limbaj C (sau oricare altul)
  3. și comandă - comenzi directe ale mașinii.

Modelul de vorbire explică de ce C este un limbaj simplu și ușor de înțeles. Xi este construit după imaginea și asemănarea vorbirii umane care ne sunt familiare.

Primul tip de program este vorbirea directă a programatorului. Vorbirea corespunde gândirii umane. Programatorii începători scriu programe folosind vorbirea - mai întâi în rusă, apoi traducând pas cu pas acțiunile într-un limbaj de cod. Și tocmai pe acest model a fost creat limbajul C.

Concluziile programatorului, exprimate în vorbire, sunt convertite într-o formă numerică codificată. Această transformare ar trebui numită reflecţie, întrucât vorbirea și codul au aceeași natură (reflecție – naștere – gen). Acest lucru este destul de evident dacă comparăm tipurile de vorbire (în stânga) și cod (în dreapta) ale programului.

Matryoshka C. Sistem de limbaj de program stratificat

Este curios că reflecția are loc foarte simplu - cu doar două tipuri de expresii.

Cu toate acestea, descrierea modernă a limbajului C (din 1978) nu conține o listă suficientă de nume nici pentru a descrie limbajul în general, nici pentru sarcina de reflecție în special. Prin urmare, suntem nevoiți să fim creativi și să introducem aceste nume.

Alegerea cuvintelor trebuie să fie precisă și clară. Aceasta a necesitat o abordare specială, exprimată pe scurt după cum urmează: folosirea strictă a limbii materne. Pentru englezi ar fi engleza, dar noi nu suntem englezi. Așa că vom folosi ceea ce avem și vom încerca să vorbim rusă.

Reflecția se realizează prin două tipuri de expresii:

  1. calcul (HF) - reflectă o modificare a proprietăților unui obiect. Proprietatea unui obiect este exprimată printr-un număr, apoi o acțiune asupra unei proprietăți este o acțiune asupra unui număr - o operație.
  2. subordonare (Pch) - reflectă o schimbare în ordinea acțiunilor. Prototipul lui Pch este o propoziție complexă de vorbire, prin urmare majoritatea tipurilor de Pch încep cu conjuncții subordonate „dacă”, „altfel”, „în timp ce”, „pentru”. Alte tipuri de PC-uri le completează.

Apropo, poți să crezi că în descrierea C nu există un nume pentru expresiile de calcul - ele se numesc pur și simplu „expresii”? După aceasta, nu va mai fi de mirare că nu există nume și asociere pentru tipul de subordonare și, într-adevăr, lipsa de nume, definiții și generalizări în general. Acest lucru se datorează faptului că celebrul K/R („The C Language”, Kernighan/Ritchie, 1978) nu este o descriere, ci un ghid de utilizare a limbajului.

Cu toate acestea, aș dori totuși să am o descriere a limbii. Prin urmare, el este oferit Sistem de limbaj de program stratificat.

3. CAPITOLUL 2. Sistemul de straturi. Scurtul C

Orice descriere trebuie să fie exactă și extrem de concisă. În cazul unui limbaj de program, o descriere frontală este dificilă.

Aici avem un program. Este format din module. Modulele constau din subrutine și colecții (structură). Subprogramele constau din expresii individuale: declarații, calcule, subordonare. Există până la zece tipuri de subordonare. Subordonarea conectează subnivelurile și subrutinele. Există, de asemenea, mai multe reclame. Cu toate acestea, declarațiile sunt incluse nu numai în subrutine și subnivele, ci și în module și colecții. Și majoritatea expresiilor constau din cuvinte atât de greu de descris încât sunt de obicei prezentate pur și simplu în două liste - cuvinte originale și derivate, cu care te vei familiariza pe parcursul învățării și utilizării limbii. Să adăugăm semne de punctuație și o serie de alte expresii la aceasta.

Într-o astfel de prezentare, nu este ușor de înțeles cine a stat pe cine.

O abordare ierarhică directă a descrierii unei limbi ar fi prea complexă. O căutare giratorie duce la o descriere a limbajului pe baza naturii sale de vorbire și a părții de comandă. Astfel, a luat naștere Sistemul Straturilor, parțial coincid cu Sistemul Periodic al lui Mendeleev, care este, de asemenea, strat. După cum sa dovedit la 42 de ani de la publicarea sa (1869), periodicitatea sistemului este asociată cu electronica. straturi (1911, modelul Bohr-Rutherford al atomului). De asemenea, sistemele Stratificat și Periodic sunt similare în aranjarea tabelară a tuturor unităților de pe o singură pagină.

Descrierea unităților de limbaj este scurtă - doar 10 tipuri de expresii și 8 tipuri de alte unități, precum și semnificative și vizuale. Deși neobișnuit pentru prima cunoștință.

Unitățile de limbă sunt împărțite în 6 nivele:

  1. unități - rânduri de tabel
  2. departamente - grupuri speciale de genuri (părți din prima linie)
  3. gen - celule (nivel principal de diviziune)
  4. superspecii - separatori de specii (nivel rar)
  5. tipuri - formule de unitate în partea de jos a celulei sau separat
  6. modele - unitățile în sine (numai pentru cuvinte)

Exemple de cuvinte descriu dicționar - un subsistem separat format din aceleași șase niveluri.

Componenta de vorbire a limbajului C este destul de evidentă, deși încă merită descriere. Dar partea de comandă a limbajului este legată tocmai de controlul compilării, în timpul căruia este creat al treilea tip de program - comanda. Aici ajungem la cel mai interesant aspect al limbajului C: frumusețea.

4. URMĂTOARELE CAPITOLULE. Frumos Si

Limbajul C este baza programării moderne. De ce? În primul rând, datorită celei mai mari corespondențe cu vorbirea. În al doilea rând, pentru că a ocolit frumos limitările procesării numerelor mașinii.

Ce anume a propus Xi? Imagine și strat.

Cuvântul „imagine” este o traducere a cuvântului englezesc „tip”, care provine din grecescul „prototip” - „tip”. În limba rusă, cuvântul „tip” nu transmite piatra de temelie a conceptului care este exprimat; în plus, este confundat cu sensul auxiliar „tip”.

Inițial, imaginea a rezolvat o problemă de calcul pur mașină, iar apoi a devenit o pistă pentru nașterea limbajelor obiectelor.

Stratul a rezolvat imediat mai multe probleme - atât la mașină, cât și aplicat. Prin urmare, luarea în considerare va începe cu o imagine cu o singură sarcină și va trece la un strat cu mai multe sarcini.

Una dintre caracteristicile neplăcute ale programării istorice este că majoritatea conceptelor, inclusiv cele de bază, sunt date fără definiții. „Limbajul de programare (numele râurilor) are tipuri de numere întregi și flotante...” și au zgâriat mai departe. Nu este necesar să se definească ce este un „tip” (imagine), deoarece autorii înșiși nu înțeleg pe deplin acest lucru și îl vor tăce „de dragul clarității”. Dacă sunt prinse de perete, vor da o definiție vagă și inutilă. Ajută foarte mult să se ascundă în spatele cuvintelor străine: pentru autorii ruși - în spatele englezei (tip), pentru englezi - în spatele franceză (subrutină), greacă (polimorfism), latină (încapsulare) sau combinațiile lor (polimorfism ad-hoc).

Dar acesta nu este destinul nostru. Alegerea noastră este definițiile cu o vizor ridicat în limba rusă pură.

imagine

imagine este un nume prefigurativ al unei mărimi, definind 1) proprietățile intrinseci ale mărimii și 2) selecția operațiilor pentru mărime.

Cuvântul „tip” (tip) corespunde primei părți a definiției: „proprietăți intrinseci ale unei cantități”. Dar sensul principal al imaginii este în a doua parte: „selectarea operațiunilor în cantități”.

Punctul de plecare pentru introducerea unei imagini în C este un calcul normal, cum ar fi operația de adăugare.

Hârtie Matematica, indiferent dacă este scrisă de mână sau tipărită, nu face prea multă distincție între tipurile de numere, de obicei presupunând că sunt reale. Prin urmare, operațiunile lor de prelucrare sunt lipsite de ambiguitate.

mașină Matematica împarte strict numerele în numere întregi și fracții. Diferite tipuri de numere sunt stocate diferit în memorie și procesate de diferite instrucțiuni ale procesorului. De exemplu, instrucțiunile pentru adăugarea numerelor întregi și fracțiilor sunt două instrucțiuni diferite care corespund la două noduri diferite de procesor. Dar nu există nicio comandă pentru adăugarea argumentelor întregi și fracționale.

Aplicat matematica, adică limbajul C, separă tipurile de numere, dar combină operații: adunarea pentru numere întregi și/sau fracții se scrie cu un singur semn de acțiune.

O definiție clară a imaginii conceptului ne permite să vorbim cu siguranță despre alte două concepte: valoare и Operațiune.

Mărimea și funcționarea

valoare — numărul în curs de procesare.

Operație — prelucrarea valorilor valorilor inițiale (argumente) pentru a obține numărul final (total).

Mărimea și funcționarea sunt interdependente. Fiecare operație este o cantitate deoarece are un rezultat numeric. Și fiecare valoare este rezultatul transferului unei valori în/din registrul procesorului, adică rezultatul operației. În ciuda acestei relații, principalul lucru este posibilitatea descrierii lor separate, deși cu repetarea unui cuvânt în diferite secțiuni ale dicționarului, ceea ce se întâmplă în MA3.

Abordarea mașinii a împărțit toate numerele folosite de programator în comenzi и de date. Anterior, ambele erau numere, de exemplu, comenzile erau scrise în coduri numerice. Cu toate acestea, în limbajele aplicate, comenzile au încetat să mai fie numere și au devenit cuvinte и semne de acțiune. Numai „datele” rămân ca numere, dar este absurd să le numim în continuare așa, pentru că în trecerea de la o mașină la un punct de vedere matematic, numerele sunt cantități care sunt împărțite la original (de date) și final (necesar). „Datum necunoscut” va suna stupid.

De asemenea, echipele au fost împărțite în două tipuri de acțiuni: matematice și de serviciu. Acțiuni matematice – operații. Vom ajunge la lucrurile oficiale mai târziu.

În limbajele C, operațiile obișnuite pe hârtie și pe mașină, fără ambiguitate, sau unice, devin aproape universal multiple.

Operațiile multiple sunt mai multe operații cu același nume cu diferite tipuri de argumente și acțiuni diferite, similare ca înțeles.

Argumentele întregi corespund unei operații întregi, iar argumentele fracționale corespund unei operații fracționale. Această diferență este deosebit de clară în timpul operației de împărțire, când expresia 1/2 dă un total de 0, nu 0,5. O astfel de notație nu corespunde regulilor matematicii pe hârtie, dar limbajul C nu se străduiește să le respecte (spre deosebire de Fortran) - joacă în conformitate cu propriile sale aplicat reguli.

În cazul amestecării numerelor întregi și fracțiilor, este inclusă singura corectă aruncarea valorilor argumentelor — transformarea selectivă a unei valori de la o imagine la alta. Într-adevăr, la adăugarea unui număr întreg și a unui număr fracționar, rezultatul este fracționar, deci imaginea operației ridica operația de conversie a unui argument întreg într-o valoare fracțională.

Au mai rămas o serie de operațiuni pluralȘi singur. Astfel de operații sunt definite doar pentru un singur tip de argumente: rest de diviziune - argumente întregi, stivuire (operații pe biți) - numere întregi naturale. Ma3 indică multiplicitatea operațiilor cu semne (#^) indicând imaginile pentru care este definită operația. Aceasta este o proprietate importantă, dar trecută anterior cu vederea, a fiecărei operațiuni.

Toate funcțiile sunt operații unitare arbitrare. Excepția sunt operatorii - funcții fără paranteze, încorporat în limbaj (operații originale).

Asistenţă

Asistenţă - acţiunea care însoţeşte operaţiunea.

Dacă considerăm operația ca acțiune principală, atunci putem distinge două însoțitoare care asigură operația și diferă de aceasta. Acestea sunt 1) controlul variabilelor și 2) subordonarea. Această acțiune se numește asistenţă.

Aici trebuie să ne divagăm și să spunem separat despre traducerile în limba rusă ale manualelor de programare. Un nou cuvânt a fost introdus în textul K/R pentru a înregistra acțiuni declaraţie (expresie), care a încercat să împartă conceptele unei comenzi de mașină în diferite acțiuni: 1) operare, 2) declarație și 3) subordonare (numite „construcții de control”). Această încercare a fost îngropată de traducătorii ruși, înlocuind „expresie” cu cuvântul „operator”, care:

  1. a devenit sinonim cu cuvântul mașină „comandă”,
  2. s-a dovedit a fi sinonim cu expresia „semn de acțiune”,
  3. și a primit, de asemenea, un număr nelimitat de valori suplimentare. Adică s-a transformat în ceva asemănător cu articolul în engleză „uhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh”

Luați în considerare acțiunile însoțitoare sau asistenţă.

Control variabil

Control variabil (SUS) - crearea/ștergerea celulelor variabile.
UE apare implicit la declararea unei variabile, care este deja scrisă dintr-un alt motiv - pentru a indica imaginea valorii. O singură vizualizare este gestionată în mod explicit variabile suplimentare folosind funcțiile malloc() și free().

Trebuie remarcat faptul că acțiunile implicite sunt mai convenabile pentru scris, deoarece nu necesită deloc scrisul, dar sunt mai greu de înțeles - sunt mai greu de luat în considerare și de interpretat.

Subordonare

Subordonare — conectați/dezactivați secțiunile de strat.

Limbajul C oferea o metodă aplicată de control al ordinii acțiunilor, diferită de asamblare - subordonare. Ea reflectă și dezvoltă o propoziție complexă de vorbire cu o împărțire clară în partea principală (propoziție de subordonare) și partea subordonată (secțiuni de subnivel/subrutine).

Atât declarația, cât și depunerea sunt construite în întregime pe concept слой.

Strat

Strat este un set limitat de expresii selective pe un singur nivel.

Stratul a preluat în mod explicit și implicit mai multe sarcini simultan:

  1. organizarea programului
  2. limitarea vizibilității numelor (implicit),
  3. gestionarea variabilelor (celule de memorie) (implicit),
  4. definirea propozițiilor subordonate pentru subordonare,
  5. definiții ale funcțiilor și selecțiilor și altele.

Nu a existat un concept de strat în limbajele mașinilor, așa că nu a apărut în K/R, iar dacă ceva nu era acolo, atunci introducerea lui în cărțile ulterioare ar fi erezie și gândire liberă. Prin urmare, conceptul de strat nu a apărut deloc, deși este extrem de util și destul de evident.

Fără un strat, este imposibil să explici pe scurt și clar multe dintre acțiunile și regulile programului. De exemplu, de ce este la fel de simplu ca trei copeici rău, iar timpul complicat este bun. Nu poți decât să înjuri neputincios, așa cum a făcut Dijkstra („aptitudinea programatorilor este o funcție care depinde invers de frecvența de apariție a declarațiilor goto în programele lor.” Pe scurt, numai caprele folosesc goto. Nivelul de justificare este Dumnezeu.) Adevărat, acest lucru nu este atât de înfricoșător dacă cărțile tale. Nu trebuie să explicăm absolut nimic, dar, așa cum am spus deja, acesta nu este destinul nostru.

Apropo, se poate presupune că Dan Ritchie a părăsit goto tocmai ca o cheie pentru căutarea unui concept fără nume, pentru că nu era nevoie sau frumusețe în expresia goto. Dar era nevoie de o explicație simplă și de înțeles a noilor principii ale limbajului, pe care Richie însuși nu a vrut să le dea și care se bazează tocmai pe conceptul слой.

Deviere

Deviere — modificarea proprietăților obișnuite ale noului nume.

Cea mai importantă abatere este legată tocmai de proprietățile stratului programului și este descrisă de un cuvânt „static”, care are un sens diferit în fiecare tip de strat.

5. ULTIMUL CAPITOLUL. Comunitatea limbilor aplicate

Limbile aplicate sunt figurativ limbi (având o imagine, „dactilografiat”). Ele se bazează pe utilizarea explicită sau implicită a imaginii. Mai mult, aici apare din nou o contradicție: o imagine explicită este mai de înțeles, dar mai puțin convenabilă și invers.

Matryoshka C. Sistem de limbaj de program stratificat

(Dispunerea tabelului nu a fost încă livrată, așa că tabelul este afișat cu o imagine.)

După C, dezvoltarea limbajelor aplicate a luat calea creșterii figurativității lor. Cel mai important pentru înțelegerea imaginilor înalte este descendentul direct al C - limbajul C++. El dezvoltă ideea unei selecții arbitrare de operații pentru cantități și o întruchipează pe baza selecției expresiei sintetice, care primește un nou nume - obiect. Cu toate acestea, C++ nu este la fel de concis și expresiv ca C din cauza supraîncărcării noilor tipuri de colecții și a regulilor asociate acestora. Apropo, să vorbim despre „supraîncărcare”.

Supraîncărcare și polimorfism

Cuvântul „supraîncărcare” este un termen învechit de învățare automată pentru creare operatii multiple.

Programatori de mașini (sistem). multitudine operațiunile ar putea fi deranjante: „Ce înseamnă acest semn (+): adăugarea de numere întregi, adăugarea de fracții sau chiar schimbarea?! Pe vremea noastră nu scriau așa!” De aici și conotația negativă a cuvântului ales („exagerat”, „obosit”). Pentru un programator de aplicații, operațiunile multiple reprezintă piatra de temelie, principala realizare și moștenire a limbajului C, atât de firesc încât adesea nu sunt recunoscute.

În limbajul C++ multitudine extins nu numai la operațiile originale, ci și la funcții - atât individuale, cât și combinate în clase - metode. Cu mai multe metode a venit abilitatea de a le depăși în clase extinse, care a fost numit vag „polimorfism”. Combinația de polimorfism și suprasarcină a produs un amestec exploziv care s-a împărțit în două polimorfisme: „adevărat” și „ad-hoc”. Este posibil să înțelegeți acest lucru numai în ciuda numelor atribuite. Drumul spre reclamă este pavat cu nume străine.

O declarație de forma „supraîncărcare” este mai bine exprimată în cuvânt anunț suplimentar — adăugarea unei declarații a unei funcții cu același nume cu argumente ale unei imagini diferite.

O declarație de forma „polimorfism” este mai bine numită re-anunț — o declarație suprapusă într-un nou strat de extensie al unei funcții cu același nume cu argumente ale aceleiași imagini.

Atunci va fi ușor de înțeles că aceleași metode ale diferitelor imagini (argumente) - anunțat suplimentarși o imagine - reanuntat.

Cuvintele rusești decid.

Pistă de decolare

Luarea în considerare a conceptelor limbajelor extrem de figurative confirmă importanța unei definiții clare a conceptelor fundamentale. Cu C descris corect, învățarea limbilor figurative va fi ușoară și plăcută.

Acest lucru este deosebit de important pentru limbaje implicite foarte figurative (PHP, JavaScript). Pentru ei, importanța obiectelor (imagini compozite) devine chiar mai mare decât în ​​C++, dar însuși conceptul de imagine devine implicit și evaziv. Din punct de vedere al confortului, au devenit mai simple, dar din punct de vedere al înțelegerii au devenit mai dificile.

Prin urmare, ar trebui să începeți să învățați limbaje de programare cu limbajul C și să mergeți mai departe în ordinea în care apar limbile din familia C.

Același lucru este valabil și pentru descrierea limbilor. Limbi diferite au același set sau mai mic de genuri unitare decât limbajul C. Numărul de tipuri și eșantioane poate diferi în ambele direcții: C++ are mai multe tipuri decât C, în timp ce JavaScript are mai puține.

Mențiune specială merită limbajul MySQL. S-ar părea că nu există nimic în comun, dar el este descris perfect de Matryoshka, iar cunoașterea lui devine mai rapidă și mai ușoară. Ceea ce este important, având în vedere importanța sa pentru web - drumul mesei al programării moderne. Și unde există MySQL, există și alte SQL-uri. Ei bine, tot felul de Fortran-Pascal-Pythons sunt descrise și de Matryoshka, de îndată ce pun mâna pe ea.

Deci, ne așteaptă lucruri grozave - o descriere aplicată a limbajului C și o descriere unificată a limbilor care îl urmează. „Obiectivele noastre sunt clare, sarcinile noastre sunt definite. Treceți la treabă, tovarăși! (Aplauze furtunoase, prelungite, transformate în ovații. Toată lumea se ridică.)”

Părerile voastre vor fi ascultate cu mare atenție, ajutorul dumneavoastră în realizarea site-ului de păpuși cuibăroase va fi primit cu mare recunoștință. Mai multe informații complete despre carte se găsesc pe site-ul web, ascunse inteligent în Matryoshka C.

Sursa: www.habr.com

Adauga un comentariu