{"id":33886,"date":"2019-10-31T21:55:15","date_gmt":"2019-10-31T18:55:15","guid":{"rendered":"https:\/\/prohoster.info\/blog\/matryoshka-si-slojnaya-sistema-yazyka-programmy\/"},"modified":"2019-10-31T21:55:15","modified_gmt":"2019-10-31T18:55:15","slug":"matryoshka-si-slojnaya-sistema-yazyka-programmy","status":"publish","type":"post","link":"https:\/\/prohoster.info\/pl\/blog\/news\/matryoshka-si-slojnaya-sistema-yazyka-programmy","title":{"rendered":"Matrioszka Si. Warstwowy system j\u0119zyka programowania","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Spr\u00f3bujmy wyobrazi\u0107 sobie chemi\u0119 bez Uk\u0142adu Okresowego Mendelejewa (1869). Ile element\u00f3w trzeba by\u0142oby zapami\u0119ta\u0107, i to w dowolnej kolejno\u015bci... (Wtedy \u2014 60.)<\/p>\n<p>Wystarczy pomy\u015ble\u0107 o jednym lub kilku j\u0119zykach programowania jednocze\u015bnie. Te same uczucia, ten sam kreatywny ba\u0142agan. <\/p>\n<p>A teraz mo\u017cemy prze\u017cy\u0107 emocje chemik\u00f3w XIX wieku, kiedy zaproponowano im ca\u0142\u0105 ich wiedz\u0119, a nawet wi\u0119cej, w jednej tabeli okresowej. <\/p>\n<p><img decoding=\"async\" alt=\"Matrioszka Si. Warstwowy system j\u0119zyka programowania\" src=\"\/wp-content\/uploads\/2019\/05\/15ce1538e152aad5fcd683fe7fcd96c0.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nKsi\u0105\u017cka \u201eMatrioszka C. Warstwowy system j\u0119zyka programu\u201d przedstawia wszystkie jednostki j\u0119zyka C jak na d\u0142oni. Umo\u017cliwia to uporz\u0105dkowanie ich, popraw\u0119 przestarza\u0142ych informacji, a nawet doprecyzowanie samego poj\u0119cia programu. <\/p>\n<p>Dzi\u015b informacje na temat programowania potrzebuj\u0105 systematyzacji nawet bardziej ni\u017c chemiczne elementy 150 lat temu. <\/p>\n<p>Pierwsza potrzeba \u2014 nauczanie. Mendelejew zacz\u0105\u0142 tworzy\u0107 sw\u00f3j system, gdy stan\u0105\u0142 przed pytaniem \u2014 od kt\u00f3rego elementu zacz\u0105\u0107 wyk\u0142ady: O, H, N, He, Au... Przy tym by\u0142o mu \u0142atwiej \u2014 uczy\u0142 chemii najlepszych \u2014 student\u00f3w Uniwersytetu w Petersburgu. A programowanie ju\u017c uczy si\u0119 w szkole i wkr\u00f3tce zacznie w przedszkolu. <\/p>\n<p>Drug\u0105 potrzeb\u0105 \u2014 podej\u015bcie naukowe. Dzi\u0119ki Uk\u0142adowi Okresowemu odkryto nowe elementy i poprawiono informacje o starych. Pom\u00f3g\u0142 on w stworzeniu modelu atomu (1911). I tak dalej. <\/p>\n<p>Trzecia potrzeba \u2014 doprecyzowanie poj\u0119cia programu. <\/p>\n<p>Nowoczesne programowanie jedn\u0105 nog\u0105 utkn\u0119\u0142o w latach 50. XX wieku. Wtedy programy by\u0142y proste, a maszyny i j\u0119zyki maszynowe \u2014 skomplikowane, wi\u0119c wszystko kr\u0119ci\u0142o si\u0119 wok\u00f3\u0142 maszyn i j\u0119zyk\u00f3w. <\/p>\n<p>Teraz jest odwrotnie: programy s\u0105 skomplikowane i pierwotne, a j\u0119zyki proste i wt\u00f3rne. To nazywa si\u0119 podej\u015bciem aplikacyjnym, kt\u00f3re wszystkim wydaje si\u0119 znajome. Ale student\u00f3w i programist\u00f3w wci\u0105\u017c przekonuje si\u0119, \u017ce wszystko jest nadal takie samo. <\/p>\n<p>Co przywraca nas do pierwszego wyk\u0142adu prywatnego docenta Mendelejewa. Co m\u00f3wi\u0107 pierwszakom? Gdzie jest prawda? To jest pytanie. <\/p>\n<p>Swoj\u0105 odpowied\u017a na to oferuje ksi\u0105\u017cka \u201eMatrioszka C. Warstwowy system j\u0119zyka programu\u201d. Przy czym jest ona skierowana nie tylko do student\u00f3w, ale tak\u017ce do przygotowanych programist\u00f3w, poniewa\u017c to oni powinni szuka\u0107 prawdy i przewraca\u0107 \u015bwiatopogl\u0105d, czyli my. <\/p>\n<p>Poni\u017cej znajduje si\u0119 kr\u00f3tka tre\u015b\u0107 ksi\u0105\u017cki. <\/p>\n<h2>1. Wprowadzenie<\/h2>\n<p>\nW 1969 roku stworzono j\u0119zyk C, kt\u00f3ry sta\u0142 si\u0119 fundamentem programowania i ju\u017c od 50 lat pozostaje nim. Dlaczego tak si\u0119 sta\u0142o? Przede wszystkim, poniewa\u017c C to <i>praktyczny<\/i> j\u0119zyk, kt\u00f3ry nadaje programowi <i>ludzki<\/i> wygl\u0105d zamiast <i>maszynowego<\/i>. Osi\u0105gni\u0119cie to umocni\u0142y j\u0119zyki z rodziny C: C++, JavaScript, PHP, Java, C# i inne. Po drugie, jest to zwi\u0119z\u0142y i estetyczny j\u0119zyk. <\/p>\n<p>Jednak sam j\u0119zyk C zazwyczaj mylony jest z asemblerem, co komplikuje i zniekszta\u0142ca jego postrzeganie. Drugim skrajno\u015bci\u0105 jest narzucenie do j\u0119zyka jakiej\u015b \u201efilozofii\u201d: proceduralnej, obiektowej, funkcyjnej, kompilowanej, interpretowanej, typowanej i tak dalej. To dodaje emocji, ale nie pomaga w lepszym opisie j\u0119zyka. <\/p>\n<p>Prawda le\u017cy w \u015brodku, a w przypadku j\u0119zyka C \u2014 dok\u0142adnie po\u015brodku mi\u0119dzy filozoficznym a maszynowym postrzeganiem. <\/p>\n<p>J\u0119zyk C nie jest samodzielny, podporz\u0105dkowuje si\u0119 normalnemu j\u0119zykowi pisanemu, a jednocze\u015bnie \u2014 sam zarz\u0105dza j\u0119zykiem asemblera. To stanowisko opisuje <i>Model mowy programu<\/i>, wed\u0142ug kt\u00f3rego program dzieli si\u0119 na trzy podporz\u0105dkowane rodzaje: mowa, kod, polecenie. J\u0119zyk C odpowiada za drugi, kodowy rodzaj. <\/p>\n<p>Okre\u015blaj\u0105c miejsce j\u0119zyka w programie, mo\u017cna uporz\u0105dkowa\u0107 informacje o nim, co sprawia, \u017ce <i>System warstwowy j\u0119zyka programu<\/i>, reprezentuj\u0105cy j\u0119zyk C w duchu systemu Mendelejewa \u2014 na jednej stronie. <\/p>\n<p>System jest zbudowany z uwzgl\u0119dnieniem <i>wsp\u00f3lno\u015bci j\u0119zyk\u00f3w aplikacyjnych<\/i>, wynikaj\u0105cej z ich podporz\u0105dkowania w mowie. Jeden zestaw jednostek Matrioszki C umo\u017cliwia opis i por\u00f3wnanie r\u00f3\u017cnych j\u0119zyk\u00f3w, tworz\u0105c szereg Matrioszek: C++, PHP, JavaScript, C#, MySQL, Python i inne. S\u0142usznie i poprawnie, \u017ce r\u00f3\u017cne j\u0119zyki s\u0105 opisywane jednostkami j\u0119zyka podstawowego. <\/p>\n<h2>2. ROZDZIA\u0141 1. Model mowy programu. Zrozumia\u0142y C<\/h2>\n<p>\nW pierwszym rozdziale przedstawiono <i>model mowy programu<\/i>, odzwierciedlaj\u0105cy praktyczne podej\u015bcie. Zgodnie z nim, program ma trzy oczywiste, nast\u0119puj\u0105ce rodzaje: <\/p>\n<ol>\n<li>mowa \u2014 bezpo\u015brednia mowa programisty, rozwi\u0105zuj\u0105cego zadanie, <\/li>\n<li>kodowy \u2014 kodowanie rozwi\u0105zania w matematycznej postaci w j\u0119zyku C (lub innym)<\/li>\n<li>i polecenie \u2014 bezpo\u015brednie polecenia maszynowe. <\/li>\n<\/ol>\n<p>\nModel mowy wyja\u015bnia, dlaczego C jest prostym i zrozumia\u0142ym j\u0119zykiem. C jest skonstruowane na wz\u00f3r i podobie\u0144stwo naszej codziennej ludzkiej mowy. <\/p>\n<p>Pierwszy rodzaj programu to bezpo\u015brednia mowa programisty. Mowa odpowiada ludzkiemu my\u015bleniu. Programy pisz\u0105 pocz\u0105tkuj\u0105cy programi\u015bci, zaczynaj\u0105c po polsku, a nast\u0119pnie stopniowo t\u0142umacz\u0105c dzia\u0142ania na j\u0119zyk kodu. I w\u0142a\u015bnie wed\u0142ug tego wzoru stworzono j\u0119zyk C. <\/p>\n<p>Rozumowania programisty, wyra\u017cone w mowie, przekszta\u0142caj\u0105 si\u0119 w numeryczn\u0105 posta\u0107 kodu. To przekszta\u0142cenie powinno by\u0107 nazwane <i>odzwierciedleniem<\/i>, poniewa\u017c mowa i kod maj\u0105 jedn\u0105 natur\u0119 (odzwierciedlenie \u2014 narodziny \u2014 rodzaj). Jest to ca\u0142kowicie oczywiste, gdy por\u00f3wnamy posta\u0107 wypowiedzi (po lewej) i posta\u0107 kodu (po prawej). <\/p>\n<p><img decoding=\"async\" alt=\"Matrioszka Si. Warstwowy system j\u0119zyka programowania\" src=\"\/wp-content\/uploads\/2019\/05\/e88d13730660ebac1d661bb2d34a33d5.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nCiekawe, \u017ce odzwierciedlenie zachodzi bardzo prosto \u2014 zaledwie dwoma rodzajami wyra\u017ce\u0144. <\/p>\n<p>Jednak wsp\u00f3\u0142czesny opis j\u0119zyka C (z 1978 roku) nie zawiera wystarczaj\u0105cej listy nazw ani do og\u00f3lnego opisu j\u0119zyka, ani do zadania odzwierciedlenia w szczeg\u00f3lno\u015bci. Dlatego musimy zaj\u0105\u0107 si\u0119 tw\u00f3rczo\u015bci\u0105 i wprowadzi\u0107 te nazwy.<\/p>\n<p>Wyb\u00f3r s\u0142\u00f3w musi by\u0107 precyzyjny i jasny. Wymaga\u0142o to szczeg\u00f3lnego podej\u015bcia, kt\u00f3re mo\u017cna kr\u00f3tko wyrazi\u0107 w ten spos\u00f3b \u2014 \u015bcis\u0142ego u\u017cywania rodzimego j\u0119zyka. Dla Anglik\u00f3w by\u0142by to angielski, ale my nie jeste\u015bmy Anglikami. Dlatego u\u017cywamy tego, co mamy, i staramy si\u0119 m\u00f3wi\u0107 po polsku. <\/p>\n<p>Odzwierciedlenie realizuj\u0105 dwa rodzaje wyra\u017ce\u0144: <\/p>\n<ol>\n<li><i>obliczenie <\/i>(Obl) \u2014 odzwierciedla zmian\u0119 w\u0142a\u015bciwo\u015bci przedmiotu. W\u0142a\u015bciwo\u015b\u0107 przedmiotu wyra\u017cana jest liczb\u0105, wtedy dzia\u0142anie nad w\u0142a\u015bciwo\u015bci\u0105 \u2014 to dzia\u0142anie nad liczb\u0105 \u2014 operacja. <\/li>\n<li><i>podporz\u0105dkowanie <\/i>(Pp) \u2014 odzwierciedla zmian\u0119 porz\u0105dku dzia\u0142a\u0144. Prototypem Pp jest z\u0142o\u017cone zdanie podrz\u0119dne, dlatego wi\u0119kszo\u015b\u0107 rodzaj\u00f3w Pp zaczyna si\u0119 od sp\u00f3jnik\u00f3w podrz\u0119dnych \u201eje\u015bli\u201d, \u201ew przeciwnym razie\u201d, \u201epodczas gdy\u201d, \u201edla\u201d. Inne rodzaje Pp je uzupe\u0142niaj\u0105. <\/li>\n<\/ol>\n<p>\nPrzy okazji, czy mo\u017cesz uwierzy\u0107, \u017ce w opisie C nie ma nazwy dla wyra\u017ce\u0144 obliczeniowych \u2014 s\u0105 nazywane po prostu \u201ewyra\u017ceniami\u201d? Po tym ju\u017c nikogo nie zdziwi brak nazwy i po\u0142\u0105czenia dla rodzaju podporz\u0105dkowania, a i w og\u00f3le ub\u00f3stwo w zakresie nazw, definicji i uog\u00f3lnie\u0144. Wszystko dlatego, \u017ce s\u0142ynny K\/R (\u201eJ\u0119zyk C\u201d, Kernighan\/Ritchie, 1978) jest nie opisem, a przewodnikiem po zastosowaniu j\u0119zyka. <\/p>\n<p>Jednak chcia\u0142oby si\u0119 mie\u0107 opis j\u0119zyka. Dlatego proponuje go <i>System warstwowy j\u0119zyka programu<\/i>. <\/p>\n<h2>3. ROZDZIA\u0141 2. System warstwowy. Kr\u00f3tkie C<\/h2>\n<p>\nKa\u017cdy opis powinien by\u0107 precyzyjny i maksymalnie zwi\u0119z\u0142y. W przypadku j\u0119zyka programowania og\u00f3lne opisanie jest trudne. <\/p>\n<p>Oto mamy program. Sk\u0142ada si\u0119 z modu\u0142\u00f3w. Modu\u0142y sk\u0142adaj\u0105 si\u0119 z podprogram\u00f3w i zestawie\u0144 (structure). Podprogramy sk\u0142adaj\u0105 si\u0119 z pojedynczych wyra\u017ce\u0144: deklaracji, oblicze\u0144, podleg\u0142o\u015bci. Podleg\u0142o\u015bci \u2014 jest ich dziesi\u0119\u0107 rodzaj\u00f3w. Podleg\u0142o\u015bci \u0142\u0105cz\u0105 podpoziomy i podprogramy. Deklaracji te\u017c jest kilka. Zreszt\u0105, deklaracje w\u0142\u0105czane s\u0105 nie tylko w podprogramy i podpoziomy, ale tak\u017ce w modu\u0142y i zestawienia. Wi\u0119kszo\u015b\u0107 wyra\u017ce\u0144 sk\u0142ada si\u0119 z s\u0142\u00f3w, kt\u00f3rych opisanie jest na tyle trudne, \u017ce zazwyczaj podaje si\u0119 je po prostu w dw\u00f3ch listach \u2014 s\u0142owa \u017ar\u00f3d\u0142owe i pochodne, z kt\u00f3rymi b\u0119dziemy si\u0119 zapoznawa\u0107 przez ca\u0142y proces uczenia si\u0119 i stosowania j\u0119zyka. Dodajmy do tego znaki interpunkcyjne oraz szereg innych wyra\u017ce\u0144. <\/p>\n<p>W takim uj\u0119ciu trudno zrozumie\u0107, kto na kim stoi. <\/p>\n<p>Bezpo\u015brednie hierarchiczne podej\u015bcie do opisu j\u0119zyka b\u0119dzie zbyt skomplikowane. Poszukiwanie okr\u0119\u017cnych dr\u00f3g prowadzi do opisu j\u0119zyka opartego na jego naturze mowy i stronie komend. W ten spos\u00f3b powsta\u0142 System Warstwowy, cz\u0119\u015bciowo pokrywaj\u0105cy si\u0119 z Okresowym Uk\u0142adem Pierwiastk\u00f3w Mendelejewa, kt\u00f3ry r\u00f3wnie\u017c jest <i>warstwowy<\/i>. Jak si\u0119 okaza\u0142o 42 lata po jego wydaniu (1869), okresowo\u015b\u0107 systemu zwi\u0105zana jest z elektronicznymi <i>warstwami <\/i>(1911, model atomu Bohra-Rutherforda). Tak\u017ce w Systemie Warstwowym i Okresowym \u0142\u0105czy tabliczne rozmieszczenie wszystkich jednostek na jednej stronie. <\/p>\n<p>Opis jednostek j\u0119zyka jest kr\u00f3tki \u2014 zaledwie 10 rodzaj\u00f3w wyra\u017ce\u0144 i 8 rodzaj\u00f3w innych jednostek, a tak\u017ce tre\u015bciwy i przejrzysty. Cho\u0107 dla pierwszego spotkania do\u015b\u0107 nietypowy. <\/p>\n<p>Jednostki j\u0119zyka s\u0105 podzielone na 6 poziom\u00f3w:<\/p>\n<ol>\n<li>rz\u0119dy \u2014 wiersze tabeli<\/li>\n<li>dzia\u0142y \u2014 specjalne grupy rodzaj\u00f3w (cz\u0119\u015bci pierwszego wiersza)<\/li>\n<li>rodzaje \u2014 kom\u00f3rki (g\u0142\u00f3wny poziom podzia\u0142u)<\/li>\n<li>nadrodzaje \u2014 podzia\u0142y rodzaj\u00f3w (rzadki poziom)<\/li>\n<li>rodzaje \u2014 formu\u0142y jednostek na dole kom\u00f3rki lub osobno<\/li>\n<li>wzorce \u2014 same jednostki (wy\u0142\u0105cznie dla s\u0142\u00f3w)<\/li>\n<\/ol>\n<p>\nWzorce s\u0142\u00f3w opisuje <i>s\u0142ownik<\/i> \u2014 osobny podsystem, sk\u0142adaj\u0105cy si\u0119 z tych samych sze\u015bciu poziom\u00f3w. <\/p>\n<p>Aspekt mowy j\u0119zyka C jest jak najbardziej oczywisty, chocia\u017c nadal zas\u0142uguje na opis. Z kolei cz\u0119\u015b\u0107 komend j\u0119zyka jest zwi\u0105zana z zarz\u0105dzaniem kompilacj\u0105, w trakcie kt\u00f3rej powstaje trzeci rodzaj programu \u2014 komendowy. Tutaj przechodzimy do najbardziej fascynuj\u0105cej strony j\u0119zyka C \u2014 jego pi\u0119kna. <\/p>\n<h2>4. KOLEJNE ROZDZIA\u0141Y. Pi\u0119kny C<\/h2>\n<p>\nJ\u0119zyk C stanowi fundament nowoczesnego programowania. Dlaczego? Po pierwsze, ze wzgl\u0119du na najwi\u0119ksze podobie\u0144stwo do mowy. Po drugie, poniewa\u017c doskonale omija ograniczenia oblicze\u0144 maszynowych.<\/p>\n<p>Co dok\u0142adnie zaproponowa\u0142 C? Typ i obiekt. <\/p>\n<p>S\u0142owo \u201etyp\u201d jest t\u0142umaczeniem angielskiego s\u0142owa \u201etype\u201d, kt\u00f3re pochodzi od greckiego \u201eprototypos\u201d \u2013 \u201epierwowz\u00f3r\u201d. W j\u0119zyku polskim s\u0142owo \u201etyp\u201d nie oddaje istoty wyra\u017canego poj\u0119cia, dodatkowo myli si\u0119 ze s\u0142u\u017cbowym znaczeniem \u201erodzaj\u201d. <\/p>\n<p>Pocz\u0105tkowo typ rozwi\u0105zywa\u0142 czysto maszynowe zadanie obliczeniowe, a p\u00f3\u017aniej sta\u0142 si\u0119 pasem startowym dla narodzin j\u0119zyk\u00f3w obiektowych. <\/p>\n<p>Obiekt od razu rozwi\u0105zywa\u0142 kilka zada\u0144 \u2013 zar\u00f3wno maszynowych, jak i aplikacyjnych. Dlatego rozwa\u017cania rozpoczn\u0105 si\u0119 od jednego zadania obiektu, a przejd\u0105 do wielozadaniowego obiektu. <\/p>\n<p>Jedn\u0105 z nieprzyjemnych cech historycznego programowania jest to, \u017ce wi\u0119kszo\u015b\u0107 poj\u0119\u0107, w tym podstawowe, podawane s\u0105 bez definicji. \u201eJ\u0119zyk programowania (nazwa rzek) ma typ liczb ca\u0142kowitych i zmiennoprzecinkowych\u2026\u201d \u2013 i leci dalej. Co oznacza \u201etyp\u201d (obiekt) \u2013 nie trzeba definiowa\u0107, poniewa\u017c autorzy sami tego do ko\u0144ca nie rozumiej\u0105 i zamkn\u0105 spraw\u0119 \u201edla jasno\u015bci\u201d. Je\u015bli ich przyci\u015bniesz do \u015bciany, to dadz\u0105 niejasn\u0105 i bezu\u017cyteczn\u0105 definicj\u0119. Bardzo pomaga ukrycie si\u0119 za obcymi s\u0142owami: dla rosyjskich autor\u00f3w \u2013 za angielskimi (typ), dla Anglik\u00f3w \u2013 za francuskimi (subroutine), greckimi (polimorfizm), \u0142aci\u0144skimi (enkapsulacja) lub ich kombinacjami (polimorfizm ad-hoc). <\/p>\n<p>Ale to nie jest nasze przeznaczenie. Naszym wyborem s\u0105 definicje w czystym j\u0119zyku polskim. <\/p>\n<h3>Obraz<\/h3>\n<p>\n<i>Obraz<\/i> \u2013 to pierwowzorowe imi\u0119 wielko\u015bci, definiuj\u0105ce 1) w\u0142asne w\u0142a\u015bciwo\u015bci wielko\u015bci oraz 2) dob\u00f3r operacji do wielko\u015bci. <\/p>\n<p>S\u0142owu \u201etyp\u201d (rodzaj) odpowiada pierwsza cz\u0119\u015b\u0107 definicji: \u201ew\u0142asne w\u0142a\u015bciwo\u015bci wielko\u015bci\u201d. Jednak g\u0142\u00f3wnym znaczeniem obiektu jest druga cz\u0119\u015b\u0107: \u201edob\u00f3r operacji do wielko\u015bci\u201d.<\/p>\n<p>Punkt wyj\u015bcia dla wprowadzenia obiektu w j\u0119zyku C \u2013 to zwyk\u0142e obliczenie, na przyk\u0142ad operacja dodawania. <\/p>\n<p><i>Papierowa<\/i> matematyka, zapisywana r\u0119cznie lub drukowana, nie robi specjalnego rozr\u00f3\u017cnienia pomi\u0119dzy rodzajami liczb, zwykle uznaj\u0105c je za rzeczywiste. Dlatego operacje na nich s\u0105 jednoznaczne.<\/p>\n<p><i>Maszynowa<\/i> Matematyka dzieli liczby na ca\u0142kowite i u\u0142amkowe. R\u00f3\u017cne rodzaje liczb s\u0105 w r\u00f3\u017cny spos\u00f3b przechowywane w pami\u0119ci i przetwarzane przez r\u00f3\u017cne polecenia procesora. Na przyk\u0142ad polecenia dodawania liczb ca\u0142kowitych i u\u0142amkowych to dwa r\u00f3\u017cne polecenia odpowiadaj\u0105ce dw\u00f3m r\u00f3\u017cnym rdzeniom procesora. Z drugiej strony, polecenie dodawania argument\u00f3w ca\u0142kowitych i u\u0142amkowych nie istnieje. <\/p>\n<p><i>Praktyczna<\/i> matematyka, czyli j\u0119zyk C, dzieli rodzaje liczb, ale \u0142\u0105czy operacje: dodawanie dla liczb ca\u0142kowitych i\/lub u\u0142amkowych zapisuje si\u0119 jednym znakiem dzia\u0142ania.<\/p>\n<p>Wyra\u017ane zdefiniowanie poj\u0119cia obrazu pozwala jednoznacznie m\u00f3wi\u0107 o dw\u00f3ch innych poj\u0119ciach: <i>wielko\u015b\u0107 <\/i>i <i>operacja<\/i>. <\/p>\n<h3>Wielko\u015b\u0107 i operacja<\/h3>\n<p>\n<i>Wielko\u015b\u0107 <\/i> \u2014 przetwarzana liczba.<\/p>\n<p><i>Operacja<\/i> \u2014 przetwarzanie warto\u015bci danych \u017ar\u00f3d\u0142owych (argument\u00f3w) w celu uzyskania wyniku (wyniku). <\/p>\n<p>Wielko\u015b\u0107 i operacja s\u0105 ze sob\u0105 powi\u0105zane. Ka\u017cda operacja jest wielko\u015bci\u0105, poniewa\u017c ma wynik liczbowy. A ka\u017cda wielko\u015b\u0107 jest wynikiem przesy\u0142ania warto\u015bci do rejestru procesora\/z procesora, to znaczy \u2014 wynikiem operacji. Mimo tej wzajemnej zale\u017cno\u015bci, najwa\u017cniejsze jest jednak mo\u017cliwo\u015b\u0107 ich oddzielnego opisu, nawet je\u015bli powtarzaj\u0105 si\u0119 te same s\u0142owa w r\u00f3\u017cnych dzia\u0142ach s\u0142ownika, co ma miejsce w ma3. <\/p>\n<p>Podej\u015bcie maszynowe dzieli\u0142o wszystkie liczby u\u017cywane przez programist\u0119 na <i>polece\u0144 <\/i>i <i>z sondy kosmicznej WMAP na temat niejednorodno\u015bci temperatury promieniowania reliktowego, kt\u00f3re jest jednym z g\u0142\u00f3wnych obiekt\u00f3w bada\u0144 w naszym wszech\u015bwiecie. Analizuj\u0105c te dane, odkryto du\u017c\u0105 anomali\u0119 k\u0105towego rozk\u0142adu fluktuacji promieniowania reliktowego w niskich harmonicznych. Jednym z wyja\u015bnie\u0144 tego zjawiska jest teoria, \u017ce topologia naszego wszech\u015bwiata r\u00f3\u017cni si\u0119 od tr\u00f3jwymiarowej p\u0142aszczyzny lub kuli. Przy rozwa\u017caniu topologii naszego wszech\u015bwiata w postaci dwunasto\u015bcianu, teoretyczne obliczenia zbli\u017caj\u0105 si\u0119 do danych eksperymentalnych.<\/i>. Kiedy\u015b zar\u00f3wno jedne, jak i drugie by\u0142y liczbami, na przyk\u0142ad polecenia by\u0142y zapisane kodami liczbowymi. Jednak w j\u0119zykach aplikacyjnych polecenia przesta\u0142y by\u0107 liczbami i sta\u0142y si\u0119 <i>s\u0142owami <\/i>i <i>symbolami dzia\u0142a\u0144<\/i>. Liczbami pozosta\u0142y tylko \u201edane\u201d, ale kontynuowanie nazywania ich tak jest absurdalne, poniewa\u017c z punktu widzenia maszynowego do matematycznego liczby s\u0105 wielko\u015bciami, kt\u00f3re dziel\u0105 si\u0119 na \u017ar\u00f3d\u0142owe (<i>z sondy kosmicznej WMAP na temat niejednorodno\u015bci temperatury promieniowania reliktowego, kt\u00f3re jest jednym z g\u0142\u00f3wnych obiekt\u00f3w bada\u0144 w naszym wszech\u015bwiecie. Analizuj\u0105c te dane, odkryto du\u017c\u0105 anomali\u0119 k\u0105towego rozk\u0142adu fluktuacji promieniowania reliktowego w niskich harmonicznych. Jednym z wyja\u015bnie\u0144 tego zjawiska jest teoria, \u017ce topologia naszego wszech\u015bwiata r\u00f3\u017cni si\u0119 od tr\u00f3jwymiarowej p\u0142aszczyzny lub kuli. Przy rozwa\u017caniu topologii naszego wszech\u015bwiata w postaci dwunasto\u015bcianu, teoretyczne obliczenia zbli\u017caj\u0105 si\u0119 do danych eksperymentalnych.<\/i>) i wynikowe (<i>poszukiwane<\/i>). \u201eNieznana dana\u201d \u2013 to brzmia\u0142oby g\u0142upio. <\/p>\n<p>Polecenia tak\u017ce podzieli\u0142y si\u0119 na dwa rodzaje dzia\u0142a\u0144: matematyczne i pomocnicze. Dzia\u0142ania matematyczne to operacje. Do dzia\u0142a\u0144 pomocniczych wr\u00f3cimy p\u00f3\u017aniej. <\/p>\n<p>W j\u0119zykach C, tradycyjne jednoznaczne operacje matematyczne prawie ca\u0142kowicie staj\u0105 si\u0119 mnogie. <\/p>\n<p>Operacje mnogie \u2013 to kilka jednoimiennych operacji z r\u00f3\u017cnymi obrazami argument\u00f3w i r\u00f3\u017cnymi, bliskimi znaczeniom, dzia\u0142aniami. <\/p>\n<p>Ca\u0142kowitym argumentom odpowiada ca\u0142kowita operacja, a u\u0142amkowym \u2013 u\u0142amkowa. R\u00f3\u017cnica ta jest szczeg\u00f3lnie widoczna podczas dzielenia, kiedy wyra\u017cenie 1\/2 daje wynik 0, a nie 0,5. Taki zapis nie odpowiada zasadom matematyki papierowej, ale j\u0119zyk C nie stara si\u0119 ich przestrzega\u0107 (w przeciwie\u0144stwie do Fortrana) \u2013 gra wed\u0142ug swoich <i>aplikacyjnych<\/i> regu\u0142.<\/p>\n<p>W przypadku mieszania liczb ca\u0142kowitych z u\u0142amkowymi, w\u0142\u0105cza si\u0119 jedynie poprawne <i>przyprowadzenie warto\u015bci argument\u00f3w<\/i> \u2013 selektywna konwersja warto\u015bci z jednego obrazu w inny. Rzeczywi\u015bcie, podczas dodawania liczby ca\u0142kowitej i u\u0142amkowej wynik jest u\u0142amkowy, dlatego obraz operacji <i>dobiera <\/i>operacj\u0119 konwersji argumentu ca\u0142kowitego na warto\u015b\u0107 u\u0142amkow\u0105. <\/p>\n<p>Wiele operacji pozostaje nie <i>wielokrotnymi<\/i>, a <i>jednostkowymi<\/i>. Takie operacje zdefiniowane s\u0105 tylko dla jednego rodzaju argument\u00f3w: reszta z dzielenia \u2013 argumenty ca\u0142kowite, bitowe operacje \u2013 naturalne liczby ca\u0142kowite. Ma3 wskazuje wielokrotno\u015b\u0107 operacji symbolami (#^) z wskazaniem obraz\u00f3w, dla kt\u00f3rych operacja jest zdefiniowana. To wa\u017cna, ale wcze\u015bniej pomijana cecha ka\u017cdej operacji. <\/p>\n<p>Wszystkie funkcje s\u0105 dowolnymi jednostkowymi operacjami. Wyj\u0105tek stanowi\u0105 operatory \u2013 <i>funkcje beznawiasowe<\/i>, wbudowane w j\u0119zyk (operacje \u017ar\u00f3d\u0142owe). <\/p>\n<h3>Wsparcie<\/h3>\n<p>\n<i>Wsparcie <\/i> \u2013 towarzysz\u0105ce dzia\u0142aniu operacyjnemu dzia\u0142anie.<\/p>\n<p>Je\u015bli rozwa\u017camy operacj\u0119 jako g\u0142\u00f3wne dzia\u0142anie, mo\u017cna wyr\u00f3\u017cni\u0107 dwa towarzysz\u0105ce, kt\u00f3re zapewniaj\u0105 operacj\u0119 i r\u00f3\u017cni\u0105 si\u0119 od niej. To 1) zarz\u0105dzanie zmienn\u0105 i 2) podporz\u0105dkowanie. Takie dzia\u0142anie nazwano <i>wspieraniem<\/i>.<\/p>\n<p>Tutaj nale\u017cy si\u0119 zatrzyma\u0107 i osobno wspomnie\u0107 o rosyjskich t\u0142umaczeniach podr\u0119cznik\u00f3w do programowania. W tek\u015bcie K\/R wprowadzono nowe s\u0142owo <i>statement <\/i>(wyra\u017cenie), kt\u00f3re pr\u00f3bowa\u0142o oddzieli\u0107 poj\u0119cia komendy maszynowej na r\u00f3\u017cne dzia\u0142ania: 1) operacj\u0119, 2) deklaracj\u0119 i 3) podporz\u0105dkowanie (nazwanego \u201ekonstrukcjami kontrolnymi\u201d). T\u0119 pr\u00f3b\u0119 pogrzebali rosyjscy t\u0142umacze, zast\u0119puj\u0105c \u201ewyra\u017cenie\u201d s\u0142owem \u201eoperator\u201d, kt\u00f3re:<\/p>\n<ol>\n<li>sta\u0142o si\u0119 synonimem maszyny s\u0142owa \u201ekomenda\u201d, <\/li>\n<li>okaza\u0142o si\u0119 synonimem wyra\u017cenia \u201esymbol dzia\u0142ania\u201d,<\/li>\n<li>a tak\u017ce uzyskiwa\u0142o nieograniczon\u0105 liczb\u0119 dodatkowych znacze\u0144. Sta\u0142o si\u0119 podobne do angielskiego rodzajnika \u201euhm...\u201d. <\/li>\n<\/ol>\n<p>\nRozwa\u017cmy towarzysz\u0105ce dzia\u0142ania, lub <i>wsparcia<\/i>.<\/p>\n<h4><i>Zarz\u0105dzanie zmienn\u0105<\/i> <\/h4>\n<p>\n<i>Zarz\u0105dzanie zmienn\u0105<\/i> (UP) \u2014 tworzenie\/usuwanie kom\u00f3rek zmiennych. <br \/>\nUP odbywa si\u0119 w spos\u00f3b niejawny podczas deklaracji zmiennej, kt\u00f3ra i tak jest ju\u017c pisana w innym celu \u2014 aby okre\u015bli\u0107 warto\u015b\u0107. Jawnie zarz\u0105dzany jest tylko jeden rodzaj <i>dodatkowych zmiennych<\/i> przy pomocy funkcji malloc() i free(). <\/p>\n<p>Nale\u017cy zauwa\u017cy\u0107, \u017ce dzia\u0142ania niejawne s\u0105 wygodniejsze do pisania, poniewa\u017c w og\u00f3le nie wymagaj\u0105 niczego do pisania, ale trudniejsze do zrozumienia \u2014 trudniej je uwzgl\u0119dni\u0107 i zinterpretowa\u0107. <\/p>\n<h4><i>Podporz\u0105dkowanie<\/i><\/h4>\n<p>\n<i>Podporz\u0105dkowanie <\/i> \u2014 pod\u0142\u0105czenie\/od\u0142\u0105czenie warstwowych sekcji. <\/p>\n<p>J\u0119zyk C zaproponowa\u0142 odmienny od asemblera, praktyczny spos\u00f3b kontrolowania kolejno\u015bci dzia\u0142a\u0144 \u2014 podporz\u0105dkowanie. Odzwierciedla ono i rozwija z\u0142o\u017cone zdanie podrz\u0119dne z wyra\u017anym podzia\u0142em na cz\u0119\u015b\u0107 g\u0142\u00f3wn\u0105 (zdanie podporz\u0105dkowane) i cz\u0119\u015b\u0107 podrz\u0119dn\u0105 (sekcje podpoziomowe\/podprogramy). <\/p>\n<p>Zar\u00f3wno deklaracja, jak i podporz\u0105dkowanie s\u0105 w pe\u0142ni oparte na poj\u0119ciu <i>warstwa<\/i>. <\/p>\n<h3>Warstwa<\/h3>\n<p>\n<i>Warstwa <\/i> \u2014 to ograniczony, jednopoziomowy wyb\u00f3r wyra\u017ce\u0144. <\/p>\n<p>Warstwa w spos\u00f3b jawny i niejawny przej\u0119\u0142a wykonywanie kolejnych zada\u0144: <\/p>\n<ol>\n<li>porz\u0105dkowanie programu,<\/li>\n<li>ograniczenie widoczno\u015bci nazw (niejawnie),<\/li>\n<li>zarz\u0105dzanie zmiennymi (kom\u00f3rkami pami\u0119ci) (niejawnie),<\/li>\n<li>okre\u015blenie dodatkowych sekcji do podporz\u0105dkowania,<\/li>\n<li>okre\u015blenie funkcji i zestaw\u00f3w oraz inne. <\/li>\n<\/ol>\n<p>\nW j\u0119zykach maszynowych nie istnia\u0142o poj\u0119cie warstwy, dlatego nie pojawi\u0142o si\u0119 ono tak\u017ce w K\/R, a je\u015bli co\u015b tam nie istnia\u0142o \u2014 wprowadzenie tego w kolejnych ksi\u0105\u017ckach by\u0142oby absurdem i nielicuj\u0105ce z rozumem. Dlatego poj\u0119cie warstwy w og\u00f3le nie pojawi\u0142o si\u0119, chocia\u017c jest niezwykle u\u017cyteczne i ca\u0142kowicie oczywiste. <\/p>\n<p>Bez warstwy nie mo\u017cna kr\u00f3tko i jasno wyja\u015bni\u0107 wielu dzia\u0142a\u0144 i zasad programu. Na przyk\u0142ad, dlaczego proste jak trzy grosze goto \u2014 jest z\u0142e, a skomplikowane while \u2014 dobre. Mo\u017cna tylko bezsilnie narzeka\u0107, jak to robi\u0142 Dijkstra (\u201ekwalifikacja programist\u00f3w \u2014 funkcja odwrotnie zale\u017cna od cz\u0119stotliwo\u015bci wyst\u0119powania operator\u00f3w goto w ich programach\u201d. Kr\u00f3tko m\u00f3wi\u0105c, tylko os\u0142y u\u017cywaj\u0105 goto. Poziom uzasadnienia \u2014 B\u00f3g.) To jednak nie jest takie straszne, je\u015bli twoje ksi\u0105\u017cki w og\u00f3le nic nie musz\u0105 t\u0142umaczy\u0107, ale, jak ju\u017c powiedzieli\u015bmy, to nie jest nasze przeznaczenie. <\/p>\n<p>Mo\u017cna przypuszcza\u0107, \u017ce Den Ritchie zostawi\u0142 goto w\u0142a\u015bnie jako klucz do poszukiwania pewnej nieokre\u015blonej koncepcji, poniewa\u017c nie by\u0142o potrzeby ani pi\u0119kna w wyra\u017ceniu goto. By\u0142a z kolei potrzeba prostego i zrozumia\u0142ego wyja\u015bnienia nowych zasad j\u0119zyka, kt\u00f3rych sam Ritchie nie chcia\u0142 poda\u0107, a kt\u00f3re bazuj\u0105 na koncepcji. <i>warstwa<\/i>. <\/p>\n<h3>Odst\u0119pstwo<\/h3>\n<p>\n<i>Odst\u0119pstwo <\/i> \u2014 zmiana zwyczajnych w\u0142a\u015bciwo\u015bci nowej nazwy. <\/p>\n<p>Najwa\u017cniejsze odst\u0119pstwo dotyczy w\u0142a\u015bciwo\u015bci warstwowych programu i jest opisane jednym s\u0142owem \u201estatic\u201d, maj\u0105cym r\u00f3\u017cne znaczenie w ka\u017cdym z rodzaj\u00f3w warstwy. <\/p>\n<h2>5. OSTATNI ROZDZIA\u0141. Og\u00f3lno\u015b\u0107 j\u0119zyk\u00f3w aplikacyjnych<\/h2>\n<p>\nJ\u0119zyki aplikacyjne \u2014 to <i>obrazy <\/i>j\u0119zyki (maj\u0105ce obraz, \u201etypizowane\u201d). Opieraj\u0105 si\u0119 na wyra\u017anym lub niejawny u\u017cyciu obrazu. I tutaj znowu wyst\u0119puje sprzeczno\u015b\u0107: wyra\u017any obraz \u2014 bardziej zrozumia\u0142y, ale mniej wygodny, i odwrotnie. <\/p>\n<p><img decoding=\"async\" alt=\"Matrioszka Si. Warstwowy system j\u0119zyka programowania\" src=\"\/wp-content\/uploads\/2019\/05\/7d0fd49d678736a023f471b54847be7d.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<i>(Uk\u0142ad tabeli jeszcze nie dotar\u0142, dlatego tabela podana jest jako obrazek.)<\/i><\/p>\n<p>Po C rozw\u00f3j j\u0119zyk\u00f3w aplikacyjnych poszed\u0142 w kierunku zwi\u0119kszenia ich obrazowo\u015bci. Najwa\u017cniejszym dla zrozumienia wyspecjalizowania jest bezpo\u015bredni potomek C \u2014 j\u0119zyk C++. Rozwija on ide\u0119 dowolnego dobierania operacji do warto\u015bci i wciela j\u0105 na podstawie c-owego wyra\u017cenia dob\u00f3r, kt\u00f3re zyskuje now\u0105 nazw\u0119 \u2014 obiekt. Jednak C++ nie jest tak kr\u00f3tki i wyrazisty jak C, z powodu przeci\u0105\u017cenia nowych rodzaj\u00f3w doboru i zwi\u0105zanych z nimi zasad. A propos, porozmawiajmy o \u201eprzeci\u0105\u017ceniu\u201d. <\/p>\n<h3>Przeci\u0105\u017cenie i polimorfizm <\/h3>\n<p>\nS\u0142owo \u201eprzeci\u0105\u017cenie\u201d (overload) \u2014 przestarza\u0142y termin podej\u015bcia maszynowego, oznaczaj\u0105cy tworzenie <i>wielu operacji<\/i>. <\/p>\n<p>Programist\u00f3w maszynowych (systemowych) <i>wieloznaczno\u015b\u0107 <\/i>operacji mog\u0142a irytowa\u0107: \u201eCo oznacza ten znak (+): dodawanie liczb ca\u0142kowitych, dodawanie liczb u\u0142amkowych czy mo\u017ce przesuni\u0119cie?! W naszych czasach tak si\u0119 nie pisa\u0142o!\u201d St\u0105d negatywna konotacja wybranego s\u0142owa (\u201eprzeci\u0105\u017cenie\u201d, \u201eznudzi\u0142o si\u0119\u201d). Dla programisty aplikacyjnego wielo\u015b\u0107 operacji \u2014 to kamie\u0144 w\u0119gielny, g\u0142\u00f3wne osi\u0105gni\u0119cie i dziedzictwo j\u0119zyka C, tak naturalne, \u017ce cz\u0119sto nieu\u015bwiadamiane. <\/p>\n<p>W j\u0119zyku C++ <i>wieloznaczno\u015b\u0107<\/i> rozprzestrzeni\u0142a si\u0119 nie tylko na podstawowe operacje, ale tak\u017ce na funkcje \u2014 zar\u00f3wno jako osobne, jak i zgrupowane w klasy \u2014 metody. Wraz z wieloma metodami pojawi\u0142a si\u0119 mo\u017cliwo\u015b\u0107 ich nadpisywania w rozszerzonych klasach, kt\u00f3ra zosta\u0142a poch\u0142oni\u0119ta przez mgliste poj\u0119cie \u00abpolimorfizm\u00bb. Po\u0142\u0105czenie polimorfizmu i przeci\u0105\u017cania stworzy\u0142o wybuchow\u0105 mieszank\u0119, kt\u00f3ra podzieli\u0142a si\u0119 na dwa rodzaje polimorfizmu: \u00abprawdziwy\u00bb i \u00abad-hoc\u00bb. Mo\u017cna to zrozumie\u0107 tylko wbrew przypisanym nazwom. Obcymi nazwami wylano drog\u0119 do ad. <\/p>\n<p>Og\u0142oszenie rodzaju \u201eprzeci\u0105\u017cenie\u201d lepiej wyrazi\u0107 s\u0142owem <i>dopowiedzenie <\/i> \u2014 dodaj\u0105ce og\u0142oszenie tej samej funkcji z argumentami innego rodzaju. <\/p>\n<p>Og\u0142oszenie rodzaju \u201epolimorfizm\u201d lepiej nazwa\u0107 s\u0142owem <i>przeciwdzia\u0142anie<\/i> \u2014 pokrywaj\u0105ce og\u0142oszenie w nowej rozszerzaj\u0105cej warstwie tej samej funkcji z argumentami tego samego rodzaju. <\/p>\n<p>Wtedy b\u0119dzie \u0142atwiej zrozumie\u0107, co nazywane s\u0105 metody o tej samej nazwie r\u00f3\u017cnych rodzaj\u00f3w (argument\u00f3w) \u2014 <i>dopowiadane<\/i>, a jednego rodzaju \u2014 <i>przeciwdzia\u0142ane<\/i>. <\/p>\n<p>Rosyjskie s\u0142owa rozwi\u0105zuj\u0105. <\/p>\n<h3>Pasa\u017c startowy<\/h3>\n<p>\nRozwa\u017cenie poj\u0119\u0107 wysoko-abstrakcyjnych j\u0119zyk\u00f3w potwierdza znaczenie jasnego definiowania podstawowych poj\u0119\u0107. Z prawid\u0142owo opisanym C, nauka wysoko-abstrakcyjnych j\u0119zyk\u00f3w b\u0119dzie \u0142atwa i przyjemna. <\/p>\n<p>Szczeg\u00f3lnie wa\u017cne jest to dla <i>niejawnych wysoko-abstrakcyjnych j\u0119zyk\u00f3w<\/i> (PHP, JavaScript). Dla nich znaczenie obiekt\u00f3w (kompozyt\u00f3w) staje si\u0119 jeszcze wy\u017csze ni\u017c w C++, ale samo poj\u0119cie obiektu staje si\u0119 niejawne i trudne do uchwycenia. Z punktu widzenia wygody sta\u0142y si\u0119 prostsze, a z punktu widzenia zrozumienia \u2014 trudniejsze. <\/p>\n<p>Dlatego nauk\u0119 j\u0119zyk\u00f3w programowania nale\u017cy zacz\u0105\u0107 od j\u0119zyka C, a potem przechodzi\u0107 dalej w kolejno\u015bci pojawiania si\u0119 j\u0119zyk\u00f3w z rodziny C. <\/p>\n<p>To samo dotyczy opisu j\u0119zyk\u00f3w. R\u00f3\u017cne j\u0119zyki maj\u0105 pokrywaj\u0105cy si\u0119, lub mniejszy zbi\u00f3r rodzaj\u00f3w jednostek ni\u017c j\u0119zyk C. Liczba typ\u00f3w i wzorc\u00f3w mo\u017ce r\u00f3\u017cni\u0107 si\u0119 w obie strony: C++ ma wi\u0119cej typ\u00f3w ni\u017c C, a JavaScript \u2014 mniej. <\/p>\n<p>Szczeg\u00f3lnej wzmianki zas\u0142uguje j\u0119zyk MySQL. Zdawa\u0142oby si\u0119 \u2014 nic wsp\u00f3lnego, ale doskonale opisuje si\u0119 go Matrioszk\u0105, a zapoznanie si\u0119 z nim staje si\u0119 szybsze i prostsze. Co wa\u017cne, bior\u0105c pod uwag\u0119 jego znaczenie dla webu \u2014 g\u0142\u00f3wnej drogi nowoczesnego programowania. A gdzie MySQL, tam i inne SQL. No i wszelkie fortrany-paskale-pythony r\u00f3wnie\u017c opisuje si\u0119 Matrioszk\u0105, jak tylko r\u0119ce do tego dotr\u0105. <\/p>\n<p>Czekaj\u0105 nas wielkie dzie\u0142a \u2014 praktyczny opis j\u0119zyka C oraz jednolite opisy j\u0119zyk\u00f3w, kt\u00f3re za nim nast\u0119puj\u0105. \u201eNasze cele s\u0105 jasne, zadania okre\u015blone. Do pracy, towarzysze! (Gromkie, d\u0142ugie oklaski, przechodz\u0105ce w owacje. Wszyscy wstaj\u0105.)\u201d <\/p>\n<p>Wasze opinie b\u0119d\u0105 wys\u0142uchane z du\u017c\u0105 uwag\u0105, a wasza pomoc w stworzeniu strony internetowej z matrioszkami zostanie przyj\u0119ta z ogromn\u0105 wdzi\u0119czno\u015bci\u0105. Pe\u0142niejsze informacje o ksi\u0105\u017cce znajduj\u0105 si\u0119 na stronie, sprytnie ukrytej w matrioszce C.<br \/>\n<br \/>\u0179r\u00f3d\u0142o: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/452328\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0445\u0438\u043c\u0438\u044e \u0431\u0435\u0437 \u041f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u041c\u0435\u043d\u0434\u0435\u043b\u0435\u0435\u0432\u0430 (1869). \u0421\u043a\u043e\u043b\u044c\u043a\u043e \u0436\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043d\u0430\u0434\u043e \u0431\u044b\u043b\u043e \u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0432 \u0433\u043e\u043b\u043e\u0432\u0435, \u043f\u0440\u0438\u0447\u0451\u043c \u0432 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435\u2026 (\u0422\u043e\u0433\u0434\u0430 \u2014 60.) \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u043e\u0434\u0443\u043c\u0430\u0442\u044c \u043e\u0431 \u043e\u0434\u043d\u043e\u043c \u0438\u043b\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0441\u0440\u0430\u0437\u0443 \u044f\u0437\u044b\u043a\u0430\u0445 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u0422\u0435 \u0436\u0435 \u0447\u0443\u0432\u0441\u0442\u0432\u0430, \u0442\u043e\u0442 \u0436\u0435 \u0442\u0432\u043e\u0440\u0447\u0435\u0441\u043a\u0438\u0439 \u0431\u0435\u0441\u043f\u043e\u0440\u044f\u0434\u043e\u043a. \u0410 \u0442\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u0435\u0440\u0435\u0436\u0438\u0442\u044c \u0447\u0443\u0432\u0441\u0442\u0432\u0430 \u0445\u0438\u043c\u0438\u043a\u043e\u0432 XIX \u0432\u0435\u043a\u0430, \u043a\u043e\u0433\u0434\u0430 \u0438\u043c \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u043b\u0438 \u0432\u0441\u0435 \u0438\u0445 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":25550,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[702],"tags":[],"class_list":["post-33886","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-news"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0445\u0438\u043c\u0438\u044e \u0431\u0435\u0437 \u041f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u041c\u0435\u043d\u0434\u0435\u043b\u0435\u0435\u0432\u0430 (1869).\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/pl\/blog\/news\/matryoshka-si-slojnaya-sistema-yazyka-programmy\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"pl_PL\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041c\u0430\u0442\u0440\u0451\u0448\u043a\u0430 \u0421\u0438. \u0421\u043b\u043e\u0439\u043d\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u044f\u0437\u044b\u043a\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0445\u0438\u043c\u0438\u044e \u0431\u0435\u0437 \u041f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u041c\u0435\u043d\u0434\u0435\u043b\u0435\u0435\u0432\u0430 (1869).\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/pl\/blog\/news\/matryoshka-si-slojnaya-sistema-yazyka-programmy\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T18:55:15+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T18:55:15+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Matrioszka C. Warstwowy system j\u0119zyka programu | ProHoster","description":"Spr\u00f3bujmy przedstawi\u0107 chemi\u0119 bez Uk\u0142adu Okresowego Mendelejewa (1869).","canonical_url":"https:\/\/prohoster.info\/pl\/blog\/news\/matryoshka-si-slojnaya-sistema-yazyka-programmy","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"pl_PL","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041c\u0430\u0442\u0440\u0451\u0448\u043a\u0430 \u0421\u0438. \u0421\u043b\u043e\u0439\u043d\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u044f\u0437\u044b\u043a\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b | ProHoster","og:description":"\u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0445\u0438\u043c\u0438\u044e \u0431\u0435\u0437 \u041f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u041c\u0435\u043d\u0434\u0435\u043b\u0435\u0435\u0432\u0430 (1869).","og:url":"https:\/\/prohoster.info\/pl\/blog\/news\/matryoshka-si-slojnaya-sistema-yazyka-programmy","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T18:55:15+00:00","article:modified_time":"2019-10-31T18:55:15+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"33886","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-21 17:06:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 02:31:23","updated":"2026-01-21 17:06:19","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/33886","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/comments?post=33886"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/33886\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media\/25550"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media?parent=33886"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/categories?post=33886"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/tags?post=33886"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}