Обзорный курс по языкам программирования [Антон Евгеньевич Москаль kouzdra] (pdf) читать онлайн
Книга в формате pdf! Изображения и текст могут не отображаться!
[Настройки текста] [Cбросить фильтры]
Àíòîí Ìîñêàëü
17 ÿíâàðÿ 2003 ã.
Îãëàâëåíèå
1
2
Îñíîâíûå êîíöåïöèè ÿçûêîâ ïðîãðàììèðîâàíèÿ
2
1.1
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2
1.1.1
ïåðåõîäû, õâîñòîâàÿ ðåêóðñèÿ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2
1.1.2
if, match
2
1.1.3
öèêëû,
1.1.4
èñêëþ÷åíèÿ
Óïðàâëÿþùèå êîíñòðóêöèè
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
while
÷åðåç ðåêóðñèþ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2
ßçûêè ïðîãðàììèðîâàíèÿ
3
2.1
3
2.2
2.3
2.4
ßçûêè àññåìáëåðà . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
PDP-11
2.1.1
Ñèñòåìà êîìàíä
2.1.2
Ìåòêè, ëîêàëüíûå ìåòêè, îïåðàòîðû ïðèñâàèâàíèÿ è ñåêöèîíèðîâàíèÿ . . . . . . . . .
5
2.1.3
Ìàêðîñðåäñòâà . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5
2.1.4
Ìèíèìàëüíàÿ àðõèòåêòóðà:
ßçûê
C
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
PDP-8
3
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5
2.2.1
CPL, BCPL,
ñîçäàíèå
B
2.2.2
Îïèñàíèå
B
2.2.3
PDP-11 :
2.2.4
Äàëüíåéøàÿ ýâîëþöèÿ
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5
Ýâîëþöèÿ
Ôóíêöèîíàëüíûå ÿçûêè
B
â
C
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6
C
λ-èñ÷èñëåíèÿ
2.3.1
Îñíîâíûå ïîíÿòèÿ
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6
2.3.2
LISP, Scheme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6
2.3.3
ML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6
2.3.4
ëåíèâûå ÿçûêè: Haskell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6
2.3.5
Ââîä-âûâîä â ÷èñòî ôóíêöèîíàëüíûõ ÿçûêàõ, ëèíåéíûå òèïû â Clean
. . . . . . . . .
6
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6
2.4.1
Simula-67 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6
2.4.2
SmallTalk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6
2.4.3
Self: Áåcêëàññîâûé ÎÎ-ÿçûê . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6
2.4.4
Ðàçëè÷íûå âèäû íàñëåäîâàíèÿ
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6
2.4.5
Ìóëüòèìåòîäû: ßçûê Cecil
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6
Îáúåêòíî-îðèåíòèðîâàííûå ÿçûêè
1
Ãëàâà 1
Îñíîâíûå êîíöåïöèè ÿçûêîâ
ïðîãðàììèðîâàíèÿ
1.1
Óïðàâëÿþùèå êîíñòðóêöèè
1.1.1
ïåðåõîäû, õâîñòîâàÿ ðåêóðñèÿ
1.1.2
if, match
1.1.3
öèêëû,
1.1.4
èñêëþ÷åíèÿ
while
÷åðåç ðåêóðñèþ
2
Ãëàâà 2
ßçûêè ïðîãðàììèðîâàíèÿ
2.1
ßçûêè àññåìáëåðà
ßçûêè àññåìáëåðà ÿâëÿþòñÿ ÿçûêàìè íèçêîãî óðîâíÿ, ïðåäíàçíà÷åííûìè äëÿ ïðîãðàììèðîâàíèÿ â òåðìèíàõ ìàøèííûõ êîìàíä. Íàèáîëåå ñóùåñòâåííûìè èõ îñîáåííîñòÿìè ÿâëÿþòñÿ:
•
ïðÿìîå ñîîòâåòñòâèå îïåðàòîðîâ àññåìáëåðà è ìàøèííûõ êîìàíä
•
ñðåäñòâà, ïîçâîëÿþùèå äåòàëüíî óïðàâëÿòü ðàçìåùåíèåì ïðîãðàììû è äàííûõ â ïàìÿòè
•
ìàêðîñðåäñòâà, ïîçâîëÿþùèå ñîçäàâàòü ïñåâäîêîìàíäû íåñêîëüêî áîëåå âûñîêîãî óðîâíÿ, íåæåëè
ìàøèííûå îïåðàöèè
 ñâîå âðåìÿ ÿçûêè àññåìáëåðà èñïîëüçîâàëèñü êàê ÿçûêè äëÿ ñèñòåìíîãî ïðîãðàììèðîâàíèÿ: íà íèõ
ïèñàëèñü îïåðàöèîííûå ñèñòåìû, êîìïèëÿòîðû è ïðîñòî ñòàíäàðòíûå óòèëèòû. Âûçûâàëîñü ýòî ñ îäíîé
ñòîðîíû íåäîñòàòêîì ãèáêîñòè òîãäàøíèõ ÿçûêîâ âûñîêîãî óðîâíÿ, ñ äðóãîé ñòîðîíû êðàéíåé îãðàíè÷åííîñòüþ ðåñóðñîâ. Àññåìáëåð ïîçâîëÿåò âûæàòü èç àïïàðàòóðû ìàêñèìóì âîçìîæíîãî, îñîáåííî,
ïîêà îáúåìû ïðîãðàìì ñðàâíèòåëüíî íåâåëèêè è ïðîáëåìû, ñâÿçàííûå ñî ñëîæíîñòüþ è óïðàâëÿåìîñòüþ
ïðîåêòà íå íà÷èíàþò ñòàíîâèòüñÿ îïðåäåëÿþùèìè.
À íà ìàøèíàõ, ó êîòîðûõ îáúåì ïàìÿòè èñ÷èñëÿëñÿ òûñÿ÷àìè, â ëó÷øåì ñëó÷àå äåñÿòêàìè òûñÿ÷
ñëîâ, îíè íå ìîãëè áûòü âåëèêè.
Ñî âðåìåíåì îáëàñòü ïðèìåíåíèÿ àññåìáëåðà ñóæàëàñü, è â íàñòîÿùèé ìîìåíò îíà îãðàíè÷åíà ïðîãðàììèðîâàíèåì êðèòè÷åñêèõ ïî ýôôåêòèâíîñòè ôðàãìåíòîâ êîäà (÷àñòî ïåðåïèñûâàíèå íåñêîëüêèõ äåñÿòêîâ
ñòðîê êðèòè÷åñêîãî ó÷àñòêà êîäà íà àññåìáëåð ñïîñîáíî äàòü âûèãðûø â ñêîðîñòè â íåñêîëüêî ðàç, èíîãäà
íà ïîðÿäêè), îñîáåííî, åñëè òàì âîçìîæíî èñïîëüçîâàíèå ñïåöèàëèçèðîâàííûõ êîìàíä, íàïîäîáèå êîìàíä
ñèãíàëüíûõ ïðîöåññîðîâ èëè
IA-32 SSE .
Êðîìå ýòîãî, ÿçûê àññåìáëåðà ÷àñòî èñïîëüçóåòñÿ êàê ïðîìåæóòî÷íîå ïðåäñòàâëåíèå ïðîãðàììû â
Unix,
ïðîöåññå êîìïèëÿöèè: áîëüøèíñòâî êîìïèëÿòîðîâ, ðàáîòàþùèõ ïîä
ïîðîæäàþò èìåííî àññåìáëåð,
êîòîðûé ïîòîì óæå êîìïèëèðóåòñÿ â îáúåêòíûé êîä.
2.1.1
PDP-11
Ñèñòåìà êîìàíä
PDP-11
îäíà èç âû÷èñëèòåëüíûõ ìàøèí, ðàçðàáîòàííûõ ôèðìîé
DEC
(
Digital Equipment Corporation ) â
??? ãîäó. Õîòÿ ìàøèíà ïîëíîñòüþ óñòàðåëà, åå àðõèòåêòóðà îêàçàëà áîëüøîå âëèÿíèå íà ïîñëåäóþùóþ
ýâîëþöèþ âû÷èñëèòåëüíîé òåõíèêè, à ïîÿâèâøèåñÿ íà íåé ÎÑ
Unix
è ÿçûê ïðîãðàììèðîâàíèÿ
C
äî ñèõ
ïîð ÿâëÿþòñÿ âàæíåéøèìè èíñòðóìåíòàëüíûìè ñðåäñòâàìè.
PDP-11
ÿâëÿåòñÿ 16-ðàçðÿäíîé ìàøèíîé ñ áàéòîâîé àäðåñàöèåé. Îíà èìååò âîñåìü ðåãèñòðîâ îáùåãî
íàçíà÷åíèÿ, èìåþùèõ íîìåðà ñ 0 äî 7. Ðåãèñòðû 6 è 7 âûïîëíÿþò ñïåöèàëüíûå ôóíêöèè: Ðåãèñòð 7 íàçûâàåòñÿ ñ÷åò÷èêîì êîìàíä è ñîäåðæèò àäðåñ ñëåäóþùåé, ïîäëåæàùåé âûïîëíåíèþ, èíñòðóêöèè. Ðåãèñòð
ñ÷åò÷èêà êîìàíä îáîçíà÷àåòñÿ
PC (program counter ). Ñ íèì ìîæíî âûïîëíÿòü âñå òå æå îïåðàöèè, êîòîðûå
3
ìîæíî âûïîëíÿòü è ñ îáû÷íûìè ðåãèñòðàìè, íî ñëåäóåò èìåòü â âèäó, ÷òî èçìåíåíèå åãî ñîäåðæèìîãî
ïðèâîäèò ê èçìåíåíèþ òîãî, êàêàÿ êîìàíäà áóäåò âûïîëíåíà ñëåäóþùåé. Ñêàæåì, çàñûëêà àäðåñà â
PC ïî
äåéñòâèþ ýêâèâàëåíòíà îïåðàöèè áåçóñëîâíîãî ïåðåõîäà.
Ðåãèñòð 6 íàçûâàåòñÿ óêàçàòåëåì ñòåêà
SP
(
stack pointer ) è ìàëî îòëè÷àåòñÿ îò îáû÷íûõ ðåãèñòðîâ.
Îñòàëüíûå ðåãèñòðû îáû÷íî îáîçíà÷àþòñÿ èìåíàìè
Êîìàíäû
PDP-11
R0R5.
ñîñòîÿò èç îäíîãî ñëîâà, çà êîòîðûì, â çàâèñèìîñòè îò âèäîâ îïåðàíäîâ, ìîãóò ñëåäî-
âàòü îäíî èëè äâà ñëîâà äàííûõ. Êîìàíäû
PDP-11
áûâàþò äâóõ-, îäíî-, è áåçàäðåñíûå. Ó ïîäàâëÿþùåãî
áîëüøèíñòâà êîìàíä îïåðàíä êîäèðóåòñÿ óíèôèöèðîâàííûì îáðàçîì: êàæäûé îïåðàíä çàíèìàåò â êîäå
êîìàíäû 6 áèò, ïåðâûå òðè èç êîòîðûõ çàäàþò ñïîñîá àäðåñàöèè, à ïîñëåäíèå òðè íîìåð èñïîëüçóåìîãî
äëÿ àäðåñàöèè îïåðàíäà, ðåãèñòð:
M2
M1
M0
R2
R1
R0
Îñíîâíûå âèäû àäðåñàöèè
M = 0:
Ðåãèñòðîâàÿ àäðåñàöèÿ. Èñïîëüçóåòñÿ äëÿ íåïîñðåäñòâåííîãî îáðàùåíèÿ ê ðåãèñòðó, íîìåð êîòîðîãî
ñîäåðæèòñÿ â ìëàäøèõ òðåõ áèòàõ
R.
 ÿçûêå àññåìáëåðà ýòîò âèä àäðåñàöèè îáîçíà÷àåòñÿ ïðîñòî
èìåíåì èëè íîìåðîì ðåãèñòðà ( R0 ëèáî
M = 2:
%0)
Êîñâåííàÿ ïîñò-àâòîèíêðåìåíòíàÿ àäðåñàöèÿ: íîìåð ðåãèñòðà èñïîëüçóåòñÿ â êà÷åñòâå àäðåñà îïåðàíäà. Ïîñëå èñïîëüçîâàíèÿ ïðîèçâîäèòñÿ óâåëè÷åíèå åãî ñîäåðæèìîãî íà 1 èëè 2 (â çàâèñèìîñòè
îò òîãî, ðàáîòàåò ëè äàííàÿ êîìàíäà ñ áàéòàìè èëè ñî ñëîâàìè)
íà àññåìáëåðå òàê:
M = 4:
(R5)+ .
1 . Çàïèñûâàåòñÿ ýòîò âèä îïåðàíäîâ
Êîñâåííàÿ ïðå-àâòîäåêðåìåíòíàÿ àäðåñàöèÿ: àíàëîãè÷íà ïðåäûäóùåìó âèäó, íî ñîäåðæèìîå ðåãèñòðà, óìåíüøàåòñÿ , à íå óâåëè÷èâàåòñÿ, è ïðîèçâîäèòñÿ ýòî ïåðåä èñïîëüçîâàíèåì ñîäåðæèìîãî
ðåãèñòðà â êà÷åñòâå àäðåñà. Çàïèñûâàåòñÿ ýòîò âèä îïåðàíäîâ íà àññåìáëåðå òàê:
M = 6:
-(SP) .
Îòíîñèòåëüíàÿ àäðåñàöèÿ: ïðè âû÷èñëåíèè àäðåñà âûáèðàåòñÿ çíà÷åíèå ñëîâà, íà êîòîðîå â äàííûé
ìîìåíò óêàçûâàåò
PC
(çíà÷åíèå ñ÷åò÷èêà êîìàíä ïðè ýòîì óâåëè÷èâàåòñÿ íà 2) è â êà÷åñòâå àäðåñà
èñïîëüçóåòñÿ ñóììà ýòîãî ñëîâà ñ áàçîâûì ðåãèñòðîì.
Âèäû àäðåñàöèè ñ íå÷¼òíûìè íîìåðàìè ( M0
= 1)
ÿâëÿþòñÿ êîñâåííûìè ìîäèôèêàöèÿìè ñîîòâåò-
ñòâóþùèõ ÷¼òíûõ âèäîâ àäðåñàöèè. Ýòî îçíà÷àåò, ÷òî çíà÷åíèÿ îïåðàíäîâ, ïîëó÷àåìûå â ðåçóëüòàòå
îáðàáîòêè ñîîòâåòñòâóþùåãî ÷åòíîãî âèäà àäðåñàöèè íå èñïîëüçóþòñÿ íåïîñðåäñòâåííî, à ðàññìàòðèâàþòñÿ â êà÷åñòâå àäðåñà îïåðàíäà. Ýòîò âèä àäðåñàöèè çàïèñûâàåòñÿ íà àññåìáëåðå ïóòåì ïðèïèñûâàíèÿ
â íà÷àëå îïåðàíäà çíà÷êà
|@|: @R0, @(R5)+ , @-(SP) , @10(R2) .
Äîïîëíèòåëüíûå âèäû àäðåñàöèè
 ñëó÷àå, êîãäà â êà÷åñòâå áàçîâîãî ðåãèñòðà èñïîëüçóåòñÿ
PC,
íåêîòîðûå âèäû àäðåñàöèè ïðèîáðåòàþò îñîáûé ñìûñë:
•
Íåïîñðåäñòâåííàÿ
àäðåñàöèÿ: ðàññìîòðèì êîìàíäó
MOV (PC)+, R0 .
 ìîìåíò âûáîðêè ïåðâîãî îïå-
ðàíäà PC óêàçûâàåò íà ñëîâî, ñëåäóþùåå çà ýòîé êîìàíäîé.  ðåçóëüòàòå îíî âûáèðàåòñÿ â êà÷åñòâå
îïåðàíäà, à
PC
ïðîäâèãàåòñÿ íà ñëåäóþùèé àäðåñ. Òàêèì îáðàçîì ôàêòè÷åñêè ýòà êîìàíäà çàñûëàåò
ëèòåðàë, ñëåäóþùèé çà íåé â ðåãèñòð
R0.
Ïîñêîëüêó íåîáõîäèìîñòü â òàêîé àäðåñàöèè âñòðå÷àåòñÿ ÷àñòî, òî äëÿ íåå â àññåìáëåðå
ââåäåíî ñïåöèàëüíîå îáîçíà÷åíèå:
#n.
PDP-11
Òî åñòü, åñëè â íàøåì ïðèìåðå çà êîìàíäîé ñëåäóåò ÷èñëî 1,
÷òî çàïèñûâàåòñÿ íà àññåìáëåðå ñëåäóþùèì îáðàçîì:
mov
.word
(pc)+, r0
1
òî âìåñòî ýòîãî ìîæíî íàïèñàòü ïðîñòî
1â
mov #1, r0
ñëó÷àå èñïîëüçîâàíèÿ â ýòîì è ñëåäóþùåì âèäàõ àäðåñàöèè ðåãèñòðîâ
SP
è
PC,
èõ ñîäåðæèìîå âñåãäà óâåëè÷èâàåòñÿ
íà äâà, íåçàâèñèìî îò ðàçìåðà îïåðàíäà. Ýòî îáåñïå÷èâàåò ñîõðàíåíèå âûðàâíèâàíèÿ àäðåñà êîìàíäû èëè âåðõóøêè ñòåêà
4
•
Àáñîëþòíàÿ
àäðåñàöèÿ: åñëè âìåñòî àâòîèíêðåìåíòíîé àäðåñàöèè îòíîñèòåëüíî
êîñâåííàÿ àâòîèíêðìåíòíàÿ àäðåñàöèÿ ( M
= 3),
êà÷åñòâå àäðåñà îïåðàíäà: òàêèì îáðàçîì êîìàíäà
176560 .
•
PC
èñïîëüçóåòñÿ
òî ñëîâî, ñëåäóþùåå çà êîìàíäîé èñïîëüçóåòñÿ â
mov #1, @#17650
ïåðåøëåò ñëîâî
1
ïî àäðåñó
Îòíîñèòåëüíàÿ àäðåñàöèÿ: êîãäà â îòíîñèòåëüíîé àäðåñàöèè ( M = 6) â êà÷åñòâå áàçîâîãî ðåãèñòðà
PC,
èñïîëüçóåòñÿ
òûâàåìûé
òî ñëîâî, ñëåäóþùåå çà êîìàíäîé ôàêòè÷åñêè îáîçíà÷àåò àäðåñ îïåðàíäà, îòñ÷è-
îòíîñèòåëüíî àäðåñà òåêóùåé êîìàíäû.
 ïðèíöèïå, îòíîñèòåëüíàÿ è àáñîëþòíàÿ àäðåñàöèÿ âçàèìîçàìåíÿåìû (çà èñêëþ÷åíèåì òîãî, ÷òî
îòíîñèòåëüíàÿ àäðåñàöèÿ ìîæåò èñïîëüçîâàòü êîñâåííûì îáðàçîì), íî êàê ïðàâèëî àáñîëþòíîé àäðåñàöèåé ïîëüçóþòñÿ äëÿ îáðàùåíèÿ ê àäðåñàì, èìåþùèì ïîñòîÿííûé ôèçè÷åñêèé àäðåñ (âåêòîðàì
ïðåðûâàíèé, ïîðòàì âíåøíèõ óñòðîéñòâ è ò.ï.), òîãäà êàê îòíîñèòåëüíóþ àäðåñàöèþ èñïîëüçóþò äëÿ
îáðàùåíèÿ ê ïåðåìåííûì, ëåæàùèì âìåñòå ñ èñïîëíÿåìûì êîäîì. Ýòî ïîçâîëÿåò ìèíèìèçèðîâàòü
çàâèñèìîñòü êîäà ïðîãðàììû îò åå ìåñòîïîëîæåíèÿ â ïàìÿòè (â èäåàëüíîì ñëó÷àå - ñâåñòè åå ê
íóëþ).
PC
Îòíîñèòåëüíàÿ àäðåñàöèÿ îò
îáîçíà÷àåòñÿ ïðîñòî óêàçàíèåì àäðåñà èëè ìåòêè:
mov #1, 176562
ýêâèâàëåíòà ïî ñìûñëó êîìàíäå èç ïðåäûäóùåãî ïóíêòà.
2.1.2
Ìåòêè, ëîêàëüíûå ìåòêè, îïåðàòîðû ïðèñâàèâàíèÿ è ñåêöèîíèðîâàíèÿ
2.1.3
Ìàêðîñðåäñòâà
2.1.4
Ìèíèìàëüíàÿ àðõèòåêòóðà:
PDP-8
Ëèòåðàòóðà: [3]
2.2
ßçûê
C
2.2.1
CPL, BCPL,
2.2.2
Îïèñàíèå
B
ßçûê
ñîçäàíèå
B
B
áûë ðàçðàáîòàí äëÿ
2.2.3
PDP-11:
2.2.4
Äàëüíåéøàÿ ýâîëþöèÿ
•
ïðåïðîöåññîð
Ýâîëþöèÿ
C,
B
â
C
C
K&R C
• ANSI C
• C99
Ëèòåðàòóðà: [1], [2],
5
2.3
Ôóíêöèîíàëüíûå ÿçûêè
2.3.1
Îñíîâíûå ïîíÿòèÿ
2.3.2
LISP, Scheme
2.3.3
ML
2.3.4
ëåíèâûå ÿçûêè: Haskell
2.3.5
Ââîä-âûâîä â ÷èñòî ôóíêöèîíàëüíûõ ÿçûêàõ, ëèíåéíûå òèïû â Clean
2.4
λ-èñ÷èñëåíèÿ
Îáúåêòíî-îðèåíòèðîâàííûå ÿçûêè
2.4.1
Simula-67
2.4.2
SmallTalk
2.4.3
Self: Áåcêëàññîâûé ÎÎ-ÿçûê
2.4.4
Ðàçëè÷íûå âèäû íàñëåäîâàíèÿ
Ìíîæåñòâåííîå íàñëåäîâàíèå â Ñ++
Èíòåðôåéñû â Java
Signatures â GNU C++, íàñëåäîâàíèå â O'Caml
2.4.5
Ìóëüòèìåòîäû: ßçûê Cecil
Ëèòåðàòóðà: [4]
6
Ëèòåðàòóðà
[1] Dennis Ritchie,
Evolution of C
[2] Brian Kernighan, Dennis Ritchie,
C programming language
[3] Áðóñåíöîâ, Ìèíè-ÝÂÌ
[4] Simula-67
7
Последние комментарии
20 часов 19 минут назад
22 часов 36 минут назад
1 день 13 часов назад
1 день 13 часов назад
1 день 18 часов назад
1 день 22 часов назад