Смиреноста и редот, општиот душевен мир се посакуваните состојби на секој човек. Нашиот живот во основа оди во замав - од негативни емоции до еуфорија и назад.

Како да се најде и одржи точка на рамнотежа за светот да се перцепира позитивно и смирено, ништо не иритира или плаши, а сегашниот момент носи инспирација и радост? И дали е можно да се најде траен душевен мир? Да, можно е! Освен тоа, со мирот доаѓа вистинска слобода и едноставна среќа за живеење.

Ова едноставни правила, и тие работат религиозно. Треба само да престанете да размислувате КАКО да се промените и да почнете да ги применувате.

1. Престанете да прашувате: „Зошто ми се случи ова?“ Поставете си друго прашање: „Што одлично се случи? Какво добро може да ми направи ова? Има добрина сигурно, само треба да ја видите. Секој проблем може да се претвори во вистински подарок одозгора ако го сметате како можност, а не како казна или неправда.

2. Негувајте благодарност. Секоја вечер, направете преглед на она за што можете да кажете „благодарам“ во текот на денот. Ако го изгубите душевен мир, запомнете ги добрите работи што ги имате и за што можете да бидете благодарни во животот.

3. Оптоварете го вашето тело физичка вежба. Запомнете дека мозокот најактивно произведува „хормони на среќа“ (ендорфини и енкефалини) за време на физичкиот тренинг. Затоа, доколку ве совладаат проблеми, анксиозност, несоница, излезете надвор и шетајте неколку часа. Брзиот чекор или трчање ќе ве одвлече од тажните мисли, ќе ви го засити мозокот со кислород и ќе го подигне нивото на позитивни хормони.

4. Развијте „весела поза“ и размислете за среќна поза за себе. Телото има прекрасен начин да помогне кога треба да го вратите мирот на умот. Ќе го „запомни“ чувството на радост ако едноставно го исправите грбот, ги исправите рамениците, весело се истегнете и се насмевнете. Свесно држете се малку во оваа позиција и ќе видите дека мислите во вашата глава стануваат посмирени, посамоуверени и посреќни.

5. Вратете се во состојбата „овде и сега“. Едноставна вежба може да ви помогне да се ослободите од анксиозноста: погледнете наоколу, фокусирајте се на она што го гледате. Започнете ментално да ја „звучите“ сликата со вметнување што повеќе зборови „сега“ и „овде“ што е можно повеќе. На пример: „Сега одам по улицата, сонцето сјае овде. Сега гледам човек, тој носи жолти цветови…“ итн. Животот се состои само од моменти „сега“, не заборавајте за тоа.

6. Не преувеличувајте ги вашите проблеми. На крајот на краиштата, дури и ако приближите мува до вашите очи, таа ќе добие големина на слон! Ако некое искуство ви изгледа несовладливо, размислете како веќе да поминале десет години... Колку проблеми сте имале досега - сите сте ги решиле. Затоа, оваа неволја ќе помине, не нурнувајте во неа безглаво!

7. Смејте се повеќе. Обидете се да најдете нешто смешно за моменталната состојба на работите. Ако не успее, тогаш пронајдете причина искрено да се смеете. Гледајте смешен филм, запомнете една смешна случка. Моќта на смеата е едноставно неверојатна! Мирот на умот често се враќа по добра доза хумор.

8. Простете повеќе. Незадоволствата се како тешки камења со непријатен мирис што ги носите со себе насекаде. Каков мир може да има човек со таков товар? Затоа, не држете лутина. Луѓето се само луѓе, тие не можат да бидат совршени и секогаш да носат само добрина. Затоа, простете им на навредувачите и простете си себеси.

10. Комуницирајте повеќе. Секоја болка скриена внатре се множи и носи нови тажни плодови. Затоа, споделете ги вашите искуства, разговарајте за нив со најблиските и побарајте поддршка од нив. Не заборавајте дека човекот не е наменет да биде сам. Мир на умот може да се најде само во блиските односи - пријателства, љубов, семејство.

11. Молете се и медитирајте. Не дозволувајте лошите, лути мисли да ве контролираат и да предизвикуваат паника, болка и иритација. Променете ги во кратки молитви - апел до Бога или на медитација - состојба на неразмислување. Запрете го неконтролираниот тек на само-разговор. Ова е основа на добра и стабилна состојба на умот.

Кога ќе се чини дека следното ниво е завршено, Сенки сигурно ќе ползат надвор и ќе проверат дали се одржуваат рамнотежа и присуство на умот за време на нивните танци.

Реакцијата на Сенката го замавнува нишалото на егото и ја открива немилосрдната вистина: рамнотежата е напната, како претпазливост на јаже и се заканува да го собори храбриот човек во бездната на минатото.

Вистинската рамнотежа е отсуството на опсесивно набљудување: потрагата по фактот дека тука нешто не е во ред.

„Сè е како и обично“, вели внатрешниот контемплатор, дури и ако има чума или закани наоколу, „едноставно овие луѓе се ранети и треба да го разберат нивниот пат“.

Но, доколку има други реакции, тогаш патеката не е завршена и допрва претстои завршувањето на сцената.

- Зошто го правам ова? – Вие сте само на почетокот на вашето патување низ нивото.
– Подготвен сум да се борам до смрт! – Поминавте една четвртина од патот.
– Ми се допаѓа оваа авантура! – половина пат е веќе поминат.
„Дојди кај мене, ќе те спасам“, помина три четвртини од патот.
– Колку сум ти благодарен што сум токму како тебе! – 2/10 од патот остануваат до крајот на нивото.
- Патник, каде одиш и што сакаш да постигнеш со својата агресија? – Го положивте ова ниво и го полагате испитот на заканувачкиот Сенка.

Во сенка има многу љубов и многу уметност. Како добар учител, таа совршено глуми тиранин, жртва и спасител за да ја тестира вашата рамнотежа. На крајот на краиштата, на јазикот на гејмерите: БИЛАНСОТ Е БОГ НИВО.

©Марк Ифраимов

********

ПРАВИЛА НА СМИРЕЊЕ

Бидете спремни да се ослободите.

Луѓето кои ве залажуваат, манипулираат, обвинуваат, се жалат, се несреќни, ве доведуваат до лудило, ви го лишуваат емотивниот мир.

Бидете еднакви.

Таа еднаквост во која секој е одговорен за својот живот, и не очекува некој да го израдува или да му каже како да живее.

Бидете внимателни.

Не попуштајте на поплаки и манипулации. Врските се за тоа да се биде присутен во животот на другиот, а не да се спасат. Да не се меша со директно барање за помош. Тие прашуваат - помогнете што е можно повеќе за вас.

Бидете подготвени да се оддалечите.

Не се вовлекувајте во кавги и обвинувања. Не барајте изговори. Ако грешите, извинете се. Тоа е доволно. Ако си нанел голема штета на чувствата на некоја личност, прашај што може да се направи за да се поправи? Ако нема одговор, подгответе се да си заминете. Тука веќе не се работи за вашата вина, туку за неговите обвинувања.

Бидете цврсти.

„Тие те фалат - не биди среќен. Тие ве караат - не се вознемирувајте“ (в). Не можете постојано да победувате или губите. Не можете да поделите сè на губење и победа. Пронајдете што научивте и какви нови работи откривте за себе благодарение на овој настан. Тргнете напред по сопствен пат, со цврст чекор.

Бидете минливи.

Поминете покрај туѓите конфликти, озборувања, категоричноста, расудувањето, лутината, одмаздата, лелекаат, етикетите, зависта. Не се вклучувајте во сето ова, не поддржувајте, не трошете време... Продолжете понатаму...

Бидете подготвени да раскинете.

Продолжуваме да се запознаваме со јазичните иновации на стандардот C++17. Во оваа статија ќе го разгледаме она што јас би го нарекол продолжување на облагородувањето на јазикот. Оние. Нема да видиме никакви сосема нови, од функционална гледна точка, работи овде - напротив, доведување на старата функционалност во поприфатлива состојба. Овде ќе погледнеме што се смени со редоследот на извршување на подизразите, какви нови гаранции се појавија во врска со исклучувањето на непотребното копирање, а исто така и какви нови работи се додадени на ламбдите.

Ставање на работите во ред

Многу програмери на C++ наидоа на „интересни“ проблеми кои претставуваат некој контроверзен код и прашуваат: „Што ќе биде излез? Еден вообичаен пример за таков код е следниов пример:

Int i = 0; i = i++ + i++;

Овој вид „паметен“ код може да се најде и на интернет и на интервјуа. Целта на ваквите прашања е да се открие колку одговарачот е запознаен со особеностите на редоследот на извршување на изразите во C++.

Барем ова е декларираната цел. Навистина, верувам дека во повеќето случаи личноста што поставува такви прашања едноставно сака да ја погали својата суета. Да се ​​знае што ќе излезе таков код е сосема непотребно, бидејќи таков код едноставно не може да се напише. И бидејќи не можете да пишувате, тогаш зошто да го прашате апликантот за ова? Ваквите прашања се соодветни за „соби за пушење“ каде познатите програмери разговараат за рабови; тие не се соодветни за интервјуа. Препорачувам да ги прочитате размислувањата на Рејмонд Чен на оваа тема: „Дали луѓето пишуваат луд код со повеќекратни преклопувачки несакани ефекти со директно лице?

Но, ова е патолошки случај кој е видлив со голо око и, како што веќе спомнав, нормален програмер никогаш не би пишувал вака. Но, има и помалку очигледни случаи што дури и искусни програмери можат да ги напишат. Ајде да го погледнеме ова парче код:

Void f2() ( std::string s = "но сум слушнал дека работи дури и ако не веруваш во тоа"; s.replace(0, 4, "") .replace(s.find("дури" ), 4, "само") .replace(s.find(" don"t"), 6, ""); assert(s == "Слушнав дека работи само ако верувате во тоа"); )

Овој код е претставен во последната книга Stroustrup „The C++ Programming Language 4th edition“, во делот 36.3.6, и на прв поглед изгледа сосема соодветно и правилно. Но, ова е само на прв поглед; всушност, не постои гаранција дека горенаведениот код ќе ја генерира очекуваната низа и, соодветно, тврдењето нема да работи.

Како што можеме да видиме, дури и креаторот на C++ направи грешка во толку мало парче код. Што значи тоа? Пред сè, се работи за тоа што нема потреба да се натрупа еден куп код во еден израз, во кој се случуваат многу различни работи. Првата верзија на овој код, која е претставена на истата страница од книгата, е многу поедноставна и подобра:

Void f() ( std::string s = "но слушнав дека работи дури и ако не верувате во тоа"; s.replace(0, 4, ""); s.replace(s.find(" дури"), 4, "само"); s.replace(s.find("не"т"), 6, ""); тврдеј(s == "Слушнав дека работи само ако веруваш во тоа" );)

Оваа опција не само што е точна од гледна точка на текот на програмата, туку е и полесна за читање. Но, ова не е единствениот заклучок што треба да го извлечеме, има уште еден што авторите на предлогот P0145R3 веќе го направија за нас: нешто не е во ред со редоследот на извршување на подизразите на изразите во C++.

Стар ред

Пред да преминеме на самиот предлог и промените до кои доведоа неговото усвојување, предлагам да се потсетиме на сегашните правила. Ова ќе ви помогне да ја освежите вашата меморија (и да му помогнете на некој да открие) зошто 2-те примери дадени претходно се лош C++ код (чисто од гледна точка на јазикот, а не од естетска гледна точка). Значи, за разлика од многу други програмски јазици, во C++ редоследот на извршување на подизразите во изразите не се одредува според стандардот и е препуштен на компајлерот. Секако, сè уште има одреден ред, но нема да ги опишам сите детали овде, бидејќи ... ги има доста. Важно е да се разбере дека, по правило, 2 подизрази на еден голем израз се извршуваат независно еден од друг во неизвеснаред (голем исклучок од ова правило е операторот запирка ",").

На пример, да го земеме нашиот прв пример: i = i++ + i++; . Во голем израз има 4 мали подизрази: i , i++ , i++ и i++ + i++ . Што гарантира стандардот C++14? Гарантира (expr.ass) дека двата израза i++ ќе бидат оценети пред да се оцени нивниот збир, а исто така и дека изразот i ќе биде оценет пред да му се додели резултатот од збирот. Ве потсетувам и дека изразот i++ ја враќа старата вредност на i и потоа го зголемува i за еден (го зголемува). Ова, пак, значи дека изразот се смета за оценет кога ќе се добие старата вредност на i.

Ова значи дека компајлерот може да избере неколку начини за оценување на целосниот израз: не е ограничен во тоа кога ефектот од ++ треба да се примени на i . Како резултат, можеме да добиеме различни значењаво i , што, се разбира, не е добро, бидејќи програмата мора да произведе предвидливи резултати кои не се предмет на каприците на компајлерот. На пример, редоследот може да биде:

    Го пресметуваме првото i, тоа е еднакво на 0.

    Го пресметуваме второто i, тоа е еднакво на 0.

    Го запишуваме резултатот од второто зголемување, добиваме i == 1 .

    Го запишуваме резултатот од првото зголемување, добиваме i == 2.

    Ние го пресметуваме i лево од знакот за еднаквост.

    Го пресметуваме збирот: 0 + 0 == 0.

    Резултатот од збирот го запишуваме во i.

    Го враќаме резултатот од целосниот израз, т.е. i, што е еднакво на 0.

Горенаведените чекори може да се извршат по кој било редослед што не ги нарушува гаранциите предвидени со стандардот, а резултатот ќе биде различни одговори.

Патем, можете да размислите за поедноставна опција: i = ++i + i++; . Овде веднаш можете да видите дека резултатот ќе биде различен во зависност од тоа што се пресметува прво ++i или i++, бидејќи при првиот израз несакани ефекти(зголемување на i за еден) се случува пред да се пресмета.

Иако втората опција е повизуелна, и двете го даваат т.н недефинирано однесување(НП, англиски недефинирано однесување). Сите искусни C++ програмери се запознаени со овој термин, но малку е веројатно дека многумина ги знаат сите места во јазикот C++ каде што може да се појави такво однесување. Широк е и доволно интересна тема, што може да биде тема на повеќе од една статија, затоа нема да се задржувам на ова подетално. Всушност, толку детална анализа на изразот не беше потребна, бидејќи според стандардот (intro.execution/p15) нашиот израз е NP веќе затоа што во еден израз има два подизрази кои го модифицираат истиот скаларен објект, а редоследот на промените не е дефиниран. Зошто тогаш ја претставив оваа анализа? Се обидов да покажам зошто НП се манифестира врз основа на сегашните ограничувања за извршување на изразите, т.е. целта беше да се покаже дека со сегашните правила стандардот нема друг избор освен да крене раце.

Сега да продолжиме со нашиот втор пример и да дознаеме што не е во ред со него. За полесно да се разбере, овој пример ќе го скратам на овој израз: s.replace(s.find("дури"), 4, "само"). Што имаме овде? Има објект s, има повик до членската функција std::string::replace, друга функција std::string::find, како и аргументи за овие функции. Какви гаранции ни дава стандардот? Стандардот гарантира дека аргументите на функцијата ќе бидат оценети пред да се повика функцијата. Исто така, осигурува дека објектот на кој се извршува функцијата мора да се оцени пред да се повика функцијата на него. Сето ова е јасно и логично. Точно, немаме други гаранции: нема гаранција дека s ќе се пресмета пред да се пресметаат аргументите на функцијата замена, а исто така нема гаранции во однос на редоследот по кој се пресметуваат истите тие аргументи. Затоа, можеме да го добиеме следниов редослед на пресметување: s.find("дури") , "само" , 4 , s , s.replace(...) . Или кој било друг што не ги нарушува претходно наведените гаранции на стандардот.

Од горенаведениот текст, треба да истакнете 2 главни точки: 1) изразите лево и десно од точката може да се оценуваат по кој било редослед, 2) функционалните аргументи може да се оценуваат по кој било редослед. Врз основа на ова, сега треба да биде јасно зошто кодот во книгата на Струшруп е неточен. Во изразот:

S.replace(0, 4, "") .replace(s.find("дури"), 4, "само") .replace(s.find(" don"t"), 6, "");

И двата повици за наоѓање може да завршат пред да се извршат претходните (во кодот) заменети повици. А можеби и после. Првиот можеби е порано, а вториот подоцна - не се знае, бидејќи ... редоследот не е дефиниран. Како резултат на тоа, овој код произведува непредвидливи резултати, иако тоа не е НП. Сепак, како што веќе реков, компетентен програмер не би напишал таков код, а фактот што го има во книгата на Струшруп не значи дека тој би го напишал така - тој едноставно даде пример за синџир на повици.

Покрај тоа, синџирот на повици можеби не е толку очигледен. На пример, еве го кодот:

Std::cout<< first << second;

Ова е исто така синџир на повици, кој може да биде вака:

Std::cout.оператор<<(first).operator<<(second);

или вака:

Оператор<<(operator<<(std::cout, first), second);

Разликата не е фундаментална. Ако одеднаш изразите првиот и вториот некако се однесуваат на истиот објект, и еден од овие изрази го модифицира овој објект, тогаш постои голема шанса дека излезот ќе биде нестабилен код или НП.

Уште еден интересен пример од горната реченица:

Стд::мапа речник речник = речник.големина();

Да, кодот изгледа бесмислен, но што ќе произведе како резултат? Дури и бесмислениот код треба да произведе предвидливи резултати. За жал, C++ од 2014 година само ги крева рамениците - не знам, велат тие.

Функции и оператори

Кога го погледнавме синџирот на повици, допревме уште една интересна точка: што всушност прави повикот std::cout?<< first << second; . Как мы уже видели, в зависимости от того, чем являются first и second , мы можем получить либо цепочку вызовов функций-членов, либо же вложенные вызовы свободных функций. Но ведь в изначальном варианте записи у нас есть три выражения и 2 оператора << , у нас нет вообще никаких функций!

Малку е веројатно дека овој код предизвикал проблеми за програмерите во C++: сите ние порано или подоцна дознаваме за преоптоварувањето на операторот и сето тоа го земаме здраво за готово, но има една нијанса за ова преоптоварување. За да ја прикажеме оваа нијанса, ајде да го напишеме следниов образец за функција:

Шаблон << "first\n", value++) && (cout << "second\n", value++); }

Да, шаблонот не е најкорисен или највпечатлив, но, како што ќе видиме сега, тој е многу индикативен. Да ја повикаме функцијата cleverFun со аргумент int, кој ќе инстанцира функција како оваа:

Bool cleverFun(int& value) (врати (cout<< "first\n", value++) && (cout << "second\n", value++); }

Кога ќе се повика оваа функција, се гарантира дека излезот е:

ако првата вредност ++ врати 0, во спротивно ќе биде вака:

Првата секунда

И нема друго, што е очигледно: постои строга гаранција за операторот && краток спој(KZ, англиски краток спој) и изведување на левиот дел надесно. Од друга страна, ако креираме одреден тип Int за кој ги отфрламе и операторот за постфикс ++ и операторот&&, а потоа го инстанцираме нашиот шаблон со него, ќе ја добиеме следнава функција:

Int cleverFun(Int& value) (врати (cout<< "first\n", value.operator++(0)) .operator&&((cout << "second\n", value.operator++(0))); }

Не открив во што би се претворил повикот на Cout, за да не се натрупува уште повеќе кодот кој веќе не е премногу лесен за читање. Врз основа на она што го дискутиравме досега, не треба да ве изненади што излезот на овој код ќе се разликува од она што би го добиле за обична int . Овде можете да добиете и 2 опции, но тие ќе бидат различни:

Првата секунда

Второ прво

Очигледно, не можеме да ја добиеме опцијата со еден прв поради фактот што краток спој за префрлени оператори не работи. Ако внимателно го погледнете овој пример, треба да разберете зошто: за да се изврши отфрлен оператор&&, аргументот мора да се оцени за него (т.е. збогум KB), а покрај тоа, KB работи само кога изразот лево е bool , што е случај со пребришеното не може да има оператор. Така, не може да има илузии за краток спој - тој не постои и нема да постои за префрлените оператори.

Па, не може да има краток спој, така што не можеме да ја добиеме првата излезна опција (само прва), но дури и опцијата со две излезни линии може или не може да биде различна! Само размислете за тоа: го имаме истиот код во шаблон за функција, кој, за некои аргументи на шаблонот, се извршува според едно правило, а за други според сосема различни.

Сето ова се случува затоа што во C++14, гаранциите за операторите и нивните операнди се разликуваат во зависност од тоа кои се операндите. Според стандардот, за интегралните типови сите гаранции на операторот функционираат како што се опишани за нив во стандардот, но за надминатите оператори правилата што ги регулираат функциите за повикување веќе функционираат. Оние. за пребришените оператори, изразот го „препишува“ компајлерот во синџирот за повикување на функции, а потоа се применуваат правилата од стандардот што се дефинирани за таков синџир. Какви било гаранции на операторот од стандардот не важат за отфрлените оператори..

Сè што е претходно опишано дава многу мрачна слика: има премногу хаос во C++ кога станува збор за оценување на изразите. Не е ни чудо што луѓето се уморни да трпат такви работи, а вечните изјави дека сето тоа е потребно за некаква митска оптимизација и дека не треба да се менува повеќе не се сметаат за доволно оправдување. Преовладуваше здравиот разум, а C++17 доби неколку промени во однос на расчистувањето на овој хаос. И какви промени ќе разгледаме сега?

Нов поредок

Првата промена што ја донесе C++17 е нарачката извршувањепостфикс-оператори, оператори за доделување и оператори со битови смени. Сега сите постфиксни оператори, како и операторите со битови поместување, се извршуваат од лево кон десно, додека операторите за доделување се извршуваат од десно кон лево. Под „извршено“, во овој контекст, мислам дека изразот се оценува (односно се враќа неговиот резултат) и се направени сите несакани ефекти поврзани со него.

За да објасниме како сега се подредени изразите, да земеме пример од реченица (во примерот подолу, прво се извршува изразот a, потоа b):

A.b a->b a->*b a(b1, b2, b3) b @= a a[b] a<< b a >>б

Каде @ е кој било валиден оператор во овој контекст (на пример + ). Така, врз основа на новите правила, примерот даден во книгата на Струшруп за C++11 конечно станува точен во C++17 и секогаш ќе го дава точниот и очекуваниот резултат. Како што можете да видите, новите правила не влијаат на редоследот по кој се извршуваат функционалните аргументи еден на друг: тие сè уште можат да се извршат по кој било редослед, но нивното извршување не може да се меша. Со други зборови, тие се наредени релативно едни на други, но редоследот не е регулиран.

Сега да погледнеме неколку „интересни“ примери каде во C++14 имавме НП, но во C++17 исчезна. Овие примери ги давам исклучиво за моја потрошувачка, ве молам да не ги мачите луѓето со нив за време на интервјуата.

I = i++; f(++i, ++i) f(i++, i++) низа = i++ i<< i++ cout << i++ << i++

Но, овие примери остануваат НП во новиот стандард:

I = i++ + i++ i = ++i * i++

Бидејќи не беа додадени правила со кои се регулира редоследот по кој се извршуваат подизразите на аритметичките оператори. Но, факт е дека Исчезнувањето на НП од овие примери воопшто не значи дека е време да го заситите вашиот код со слични - не. Секој од овие примери бара грижа и доказ дека не е НП. Оние. секој програмер што ќе види таков код ќе биде принуден да застане, запомни (или погледне во стандардот) и да се увери дека го гледа точниот код пред себе. Кодот не треба да биде „паметен“, кодот треба да биде разбирлив.Покрај тоа, таквата комбинација на изрази, всушност, дава малку.

Патем, внимателниот читател веројатно ја забележал линијата<< i++ << i++ в вышеприведённых примерах, и если он не знает обо всех правилах и поверил автору, то он наверняка воспользовался такой логикой: пример переписывается как

Cout.оператор<<(i++).operator<<(i++)

по што новите правила за . , значи не е во кодот НП. Таквото размислување изгледа логично, но не е сосема точно. Всушност, сè е поедноставно: примерот всушност го „препишува“ компајлерот на оној што го дадов, но налогот за извршување е изграден пред препишувањето! Оние. според новите правила, преоптоварените оператори ги почитуваат правилата за извршување за вградените оператори, барем во однос на редоследот по кој се оценуваат потизразите. Според тоа, врз основа на фактот дека левиот операнд на операторот<< вычисляется до правого у нас и нет НП во кодот.

Излегува дека веќе немаме несовпаѓање во редоследот по кој ќе се извршуваат изразите за вградените и преоптоварените оператори, и нашиот пример од последниот дел:

Шаблон bool cleverFun(T& value) (врати (враќање (cout<< "first\n", value++) && (cout << "second\n", value++); }

за кој било тип секогаш ќе се печати прво, а потоа второ. Обратниот редослед на излезот сега е исклучен од стандардот. Ова е, се разбира, многу важна иновација, која ви овозможува да размислувате за кодот што е напишан, а не што ќе се генерира од него. Интересно е да се забележи дека оваа иновација создаде разлика помеѓу експлицитно и имплицитно повикување на преоптоварен оператор. Ајде да погледнеме на пример:

#вклучи користејќи именски простор std; класа SomeClass (пријател int оператор<<(const SomeClass& obj, int&); public: SomeClass(int var): m_Var{var} { } private: int m_Var; }; int operator<<(const SomeClass& obj, int& shift) { return obj.m_Var << shift; } int main() { int i = 0; int result = SomeClass{i = 1} << (i = 2); cout << "First result: " << result << "\n"; result = operator<<(SomeClass{i = 1}, i = 2); cout << "Second result: " << result << "\n"; };

Првиот резултат е загарантиран да биде 4, додека вториот може да биде или 2 или 4. Овој пример добро ја покажува разликата помеѓу експлицитно и имплицитно повикување на преоптоварен оператор во C++17.

Очигледно со воведувањето на новиот поредок се појавија многу различни сложени изрази кои дадоа НП во претходните стандарди сега се прифатливи, но тоа не значи дека тие треба да почнат масовно да се појавуваат во кодот. Ова не треба да се случи само затоа што се комплекс, и сè што е тешко да се разбере треба да се избегнува. Но, новите правила не само што ни даваат можност да повикуваме функции како f(i++, i++) без страв дека ќе добиеме расипана програма. Новите правила му даваат на C++ кодот повеќе строгост и ред, благодарение на што, меѓу другото, сега можеме да пишуваме сигурен код со синџир на повици (експлицитно или имплицитно, не е важно).

Иако кажав малку за кодот во книгата на Струструп, не сум противник на синџир на повици, и ако погледнеме во модерниот код напишан со употреба на императивни јазици, можеме да видиме дека содржи сè повеќе поврзување (на пример, LINQ и Task+ContinueWith од C#, или Lodash/подвлекување и Promise+потоа од JS). Во оваа насока се движи и C++, а наскоро ќе можеме да видиме аналози на горенаведените примери во форма на Range-v3 и future+ потоа во идните C++ стандарди. Но, дури и пред објавувањето на новите стандарди, можеме да користиме различни библиотеки чиј интерфејс поттикнува употреба на синџири за повици.

Севкупно, според мене, промената на правилата за редоследот по кој се оценуваат изразите е една од најважните иновации во C++17, која малкумина ќе ја забележат, бидејќи сè (или речиси сè) едноставно ќе функционира како што е треба да работи според здравиот разум. И секој ден има се повеќе здрав разум во стандардот C++.

Минимизирање на копирањето

Еден од првите чекори во учењето на C++ е учењето на конструкторот за копирање. На крајот на краиштата, со негова помош можете лесно да одредите што се копира и кога. Оние. ја пишуваме нашата сопствена класа, додаваме конструктор за копирање таму, во кој го запишуваме излезот преку cout , и уживаме во излезот, врз основа на чиј резултат дознаваме колку копии создаваме.

Со доаѓањето на семантиката на движење, ситуацијата стана нешто покомплицирана, па за да ја комплетирате сликата, сега треба да креирате и конструктор за движење. Но, за овој дел тоа не е важно, бидејќи ... сè подолу е точно и за копирање и за преместување.

На пример, да го напишеме овој код:

#вклучи користејќи именски простор std; класа SomeClass (јавна: SomeClass() = стандардно; SomeClass(const SomeClass&) (cout<< "Copy ctor called.\n"; } }; SomeClass meReturn() { return SomeClass{}; } int main() { auto some = meReturn(); };

Колку пати на екранот ќе се појави фразата „Copy ctor ctor.” ако го компајлирате овој код на компајлер што имплементира C++14 и ја извршите програмата? Нула, еден или можеби два пати? Точен одговор: непознат.

Оние за кои одговорот дојде како изненадување заслужуваат објаснување, на кое сега се осврнуваме. Значи, прво, да го отпакуваме стандардот и да размислиме колкав е максималниот број на копии овде Можебида се создаде. Најголемиот број можни копии овде е 2: првата копија се создава кога се извршува изјавата за враќање, а втората копија се создава кога некој објект е конструиран. Но, ако го извршите овој код на повеќе или помалку модерен компајлер (без дополнителни прекинувачи!), Малку е веројатно дека ќе видите двоен излез; поверојатниот исход е или една линија, или воопшто нема излез. Сега малку да го измениме кодот на нашата функција, ова ќе биде втората опција:

SomeClass meReturn() ( SomeClass some(); врати некои;)

Ако го извршиме овој код на популарни компајлери, излезот може или не може да се промени (се менува на MSVC 2017, во режим за отстранување грешки). Конечно, ќе го промениме кодот на функцијата уште малку, само што овој пат се гарантира дека излезот ќе се промени (во однос на првата опција и земајќи ја предвид моменталната состојба на работите со компајлерите):

SomeClass meReturn() ( SomeClass some(); if (false) врати SomeClass(); врати некои; )

Значи, функцијата е суштински иста во сите варијанти, но однесувањето е различно - што се случува овде? Започнете одново. Според стандардот C++, во некои случаи компајлерот може да не копира објект; оваа ситуација се нарекува прескокнување на копирање(ПЦ, англиски копија elision). Комплетна листа (прилично кратка) на знаци што може да се користат за да се утврди дали е дозволено прескокнување копирање е опишана во class.copy/p31. Нас нè интересираат две слични, но сепак различни ситуации.

Во оригиналниот пример, нашата функција враќа привремена безимениобјект. Во таква ситуација, компајлерот има право да ги прескокне двете копии и едноставно да го креира објектот директно во некои . Оваа ситуација популарно се нарекува оптимизација на повратната вредност(OVZ, оптимизација на повратна вредност на англиски јазик). Ако ги погледнеме gcc/clang/MSVC, можеме да видиме дека за ваква функција тие се ослободуваат од двете копии и оттука излезот ќе биде празен.

Овој вид на оптимизација е дозволена не само за враќање, туку и за други места каде што се случува иницијализацијата со привремен, безимен објект. Значи, ако имате void meAccept(SomeClass) функција која се нарекува meAccept(SomeClass()), тогаш компајлерот има права да го испушти вишокот на копирање.

Сега да преминеме на втората опција, каде што создадовме именуванобјект на оџакот. Излезот за gcc/clang не се промени, но за MSVC (во режим за отстранување грешки) се појави една линија на излезот, очигледно е дека во овој случај MSVC се ослободи од само втората копија. Врз основа на горенаведеното, станува јасно дека компајлерот користи и компјутер, но овде тоа се случува според малку поинаков критериум: има право да се ослободи од копирање именуванобјект на стекот што се враќа од функцијата. Овој тип на оптимизација популарно се нарекува именувана оптимизација на повратната вредност(OIVZ, англиско име оптимизација на повратна вредност).

Овој вид на оптимизација е потешко да се изврши за компајлерот, што е она што го гледаме во третата опција, каде што додадовме апсолутно бескорисно ако , што ги принуди сите три главни компајлери да се откажат и да направат копија. Така, OIVZ е покревка оптимизација од едноставната OIV и, по правило, е оневозможена кога има неколку различни враќања во кодот. Ова е една од причините зошто треба да има само едно враќање во функцијата (не можам да кажам дека аргументот е многу убедлив).

Интересен факт е дека горната оптимизација се применува во компајлери дури и кога компајлираме со оневозможена оптимизација (-O0 , /Od ). Покрај тоа, само gcc и clang можат да бидат принудени да ги создадат сите копии. За да го направите ова, треба да го користите прекинувачот -fno-elide-constructors и под никакви околности MSVC нема да создаде две копии и нема [јавни] прекинувачи за оневозможување на ова однесување.

Има уште една точка што треба да се спомене. Иако во C++14 компајлерот може да ги отстрани двете копии, со што нема да го изврши конструкторот на копијата ниту еднаш, треба да фрли грешка при компајлирање ако нема таков конструктор. Оние. ако наместо постоечкиот конструктор на копии го напишеме ова: SomeClass(const SomeClass&) = избришете, тогаш програмата нема да биде изградена дури и кога компајлерите можат сосема легално да се ослободат од копирањето - сепак мора да има конструктор.

И конечно, третата точка: движење. Ако компајлерот може да го испушти копирањето, може да испушти движење. Оние. во овој поглед тие се апсолутно еквивалентни. Во овој поглед, патем, постои една интересна ситуација. Многу програмери (за многумина донесувам заклучок врз основа на кодот што го видов на Интернет) не ја разбираат баш семантиката на преместувањето и пишуваат код сличен на овој: return std::move(someObject) . Кодот изгледа апсолутно безопасен и работи како што се очекува од лицето кое го напишало, но ова е кодот гарантираного оневозможува OIVZ. Што мислите дека е подобро: да се изврши еден евтин потег конструктор или да не се изврши ништо?

Нова реалност

Сега е време да погледнеме што се смени во C++17 во однос на компјутерот. Сите промени за кои ќе разговараме во овој дел се дел може да се најдат во оригиналниот предлог P0135R1. Ако го погледнете овој документ, ќе видите дека опишува бројни промени на стандардот во однос на категоријата изрази (најчесто вредност), како и разни уредувања кои појаснуваат каде експлицитно да се изврши директно(директно-) и копирање(copy-) иницијализација. Од целиот овој сет, ние сме заинтересирани само за една промена, која е опишана во stmt.return/p2.

Значи, според горенаведената иновација, враќајќи од функција привремен неименуван објект (prvalue) од ист тип (т.е. не е потребна конверзија) како повратниот тип на функцијата врши иницијализација на копија на резултатот (што, според dcl.init/ p(17.6. 1), ви овозможува да го прескокнете копирањето). Она што е напишано во реченицата погоре е, во суштина, истото ХИА, само овој пат задолжително. Оние. ако компајлерот е C++14 би можелослободете се од копирање/преместување во овој случај, тогаш сега тоа моранаправи го. Што ни дава ова, бидејќи веќе видовме дека самиот компајлер одлично работи? И ова ни го дава следново, имајќи го следниот код:

SomeClass meReturn() ( врати SomeClass(); )

Не можеме воопшто да немаме конструктори за копирање и преместување, а тој сепак ќе се компајлира. Важно е да се напомене дека само случајот е променет кога друг објект е креиран од привремен безимен објект, но ако вратиме именуван објект (OIVZ), тогаш дури и ако компајлерот може да го прескокне копирањето, присуството на соодветен конструктор е задолжително .

Има уште една точка, која веќе е поврзана со донесувањето на аргументите, а не со повратната вредност. Ако го имаме овој код:

Неважечки ме Прифати([] SomeClass s) ( )

Потоа, при повикување на функцијата meAccept(SomeClass()), исто така нема да има копирање и ова повторно повеќе не е оптимизација, туку барање на стандардот. Ова се должи на промените во дефиницијата на prvalue (основна.lval) и што повлекува оваа промена. Ајде да ја погледнеме оваа линија: meAccept(SomeClass()) . Во старите услови за вредност, SomeClass() е привремен објект кој потоа се копира во параметарот на функцијата. Но, новата дефиниција на prvalue е дека повеќе не е објект, Но изразување, чија евалуација е иницијализација на објектот. Што значи ова за нас? Ова значи дека во изразот што го разгледуваме, SomeClass() не е привремен објект, туку израз за иницијализирање на параметар на функција. Овде, претходно споменатото правило опишано во dcl.init/p(17.6.1) е овозможено и не се случува копирање - иницијализацијата се врши директно.

На прв поглед, ова е прилично безначајна иновација, бидејќи истото се случи порано, само што компајлерите не беа обврзани да го прават тоа. Сепак, оваа иновација ја промени самата суштина на концептот prvalue, па затоа не треба да се смета за незначителен. И од чисто практична гледна точка, треба да знаете за оваа промена, бидејќи кога проучуваме јазик, ние го учиме емпириски, а во овој процес, експериментите со конструктори за копирање/преместување се многу чести. Значи, почнувајќи со C++17, не можете на кој било начин да го принудите компајлерот да направи копија во претходно опишаните примери. Ниту едно знаменце нема да помогне ако програмата е компајлирана за C++17, а компајлерот всушност ја поддржува. Што се однесува до секојдневниот код, оваа иновација ви овозможува да креирате фабрички функции кои враќаат објекти кои немаат конструктори за копирање/преместување. Колку е ова потребно? Времето ќе покаже.

Ламбда

Комитетот продолжува да ја покажува својата љубов на ламбдите, додавајќи им нешто ново во секое ново издание на стандардот. 2017 година не беше исклучок, а ламбдите го добија својот дел од иновации. Иако продолжувам да чекам кратка синтакса (како C#'s x => x) и ги сметам иновациите на овој стандард за незначителни, сепак не можам да ги игнорирам.

Доловување на ова

Значи, првата иновација. Сега можете да пренесете копија од објект во списокот за снимање користејќи го овој покажувач. Пред C++17, ако сакавме да пренесеме копија од тековниот објект на ламбда, бевме принудени да напишеме вакво нешто:

#вклучи користејќи именски простор std; класа SomeClass ( јавно: SomeClass(size_t вредност): m_Value(вредност) ( ) void someMethod() (автоматско ламбда = [_this = *this] (за(големина_t i = 0; i< _this.m_Value; ++i) cout << "This is lambda!!!\n"; }; lambda(); } private: size_t m_Value; }; int main() { SomeClass some{3}; some.someMethod(); };

Главниот недостаток на овој пристап е потребата експлицитно да се специфицира името на објектот во кој го копиравме *тоа секогаш кога ќе му пристапиме. C++17 го коригира овој недостаток, овозможувајќи ви да пишувате вака:

Автоматско ламбда = [*ова] (за(големина_t i = 0; i< m_Value; ++i) cout << "This is lambda!!!\n"; };

Оние. пристапот до членовите на објектот се врши исто како да сме создале ламбда со таква листа за снимање, но во овој случај, не тековниот објект (т.е. овој покажувач), туку копија од него се пренесува на ламбда. Би сакал да напоменам дека не сум морал да пишувам таков код, па тешко ми е да ја проценам корисноста на иновацијата, но очигледно некому ќе му го олесни животот. Можам само да се радувам за нив и да преминам на следната иновација.

Потребна е поголема конзистентност!

Друга промена која е одамна задоцнета е додавањето на способноста да се користат ламбди во постојани изрази. Се разбира, таквите ламбди исто така мора да бидат константни. На пример:

Автоматски единаесет = ( враќање 11; ); низа arr;

Како што можете да видите, ништо не се променило во дефиницијата за ламбда, но нејзиниот повик се користи во контекст каде што употребата на константа за компајлирање е задолжителна. Бидејќи Овој код успешно се компајлира, секој внимателен програмер може да го извлече следниов заклучок: операторот() на класата генерирана од ламбда е член на constexpr и овој заклучок е несомнено точен. Од C++17, сите ламбда изрази се стандардно constexpr, додека пред C++17 тие беа едноставно const . Но, тие ќе бидат префрлени на const ако телото на ламбда функцијата не исполнува барем еден критериум на кој подлежат сите функции на constexpr (критериумите се опишани во dcl.constexpr). Ајде да направиме минимална промена во нашиот код и ламбда повеќе нема да биде constexpr:

Автоматски единаесет = ( int x; враќање 11; );

Со таква ламбда, кодот за создавање низа ќе даде грешка при компилација (што всушност и сакавме), но самото создавање на ламбда нема да даде грешка. Сепак, можеме да ги затегнеме завртките и да бараме ламбда да има тело што ги почитува горенаведените правила:

Автоматски единаесет = () constexpr ( int x; враќање 11; );

Забележете дека моравме да ги додадеме и очигледните constexpr и () , кои не носат никакво функционално оптоварување и им служи само на каприците на стандардот. На овој начин можеме да создадеме ламбда функции за кои се гарантира дека ќе бидат употребливи во контекст на constexpr.

Оваа промена доаѓа одамна и не треба да биде изненадување за никого: едноставните функции може да бидат constexpr, функциите на членовите исто така, зошто ламбдите се полоши? Колку се неопходни constexpr ламбда? Ова е поинтересно прашање. Мислам дека на constexpr кодот му требаат исто колку што му требаат на едноставниот код. Во моментов има бум на constexpr во C++, со луѓе кои се натпреваруваат да видат кој може да оди најдалеку во преместувањето на работата од времето на извршување на времето за компајлирање.

Тие одат до таму што пишуваат JSON парсер, па дури и извршуваат регуларни изрази (за заинтересираните, погледнете го видеото од CppCon2017: "constexpr СИТЕ Работи!"). Дополнително, сè повеќе стандардни (и не толку стандардни) алгоритми стануваат constexpr, што доведува до најочигледна употреба на ламбда, бидејќи тие едноставно се создадени за алгоритми. Затоа, според мое мислење, додавањето на constexpr е добар чекор напред, што ќе ви овозможи да напишете повеќе код што ќе се изврши во времето на компајлирање.

Од друга страна, дали навистина треба толку многу да преминеме во фазата на компилација? Се разбира, кога нешто може да се премести од повеќекратно динамично извршување во едно извршување при компајлирање, ова е дефинитивен плус. Или не? Тоа зависи од задачата и придобивките што ги добиваме при извршувањето. Дозволете ни да напишеме JSON парсер кој троши многу RAM и го зголемува времето на компилација (погледнете ги барем последните 3 минути од гореспоменатото видео), што ни дава ова? Да, сега можеме да ја анализираме конфигурацијата во времето на компајлирање и да ја користиме во код. Но, можевме да го направиме ова порано, без да користиме JSON, а исто така ќе има нула време на оптоварување (само збир на знаменца во заглавието, на пример). Ова ме потсетува на брада шега:

Се среќаваат двајца пријатели:

– Слушнав дека си купил автомобил?

- Да! И како живеев! Сега имам време да направам сè! Вчера за еден ден успеав да сменам масло, купив нови гуми, отидов на автопазар да купам браници, веднаш отидов во автосервис и ги сменив, а отидов и во продавница за антифриз. Како можев да го направам сето ова без автомобил?!

Луѓето може да ми приговараат дека JSON е поудобен. Нека биде. Потоа, ајде да додадеме скрипта во Python (или дури и CMake), која ќе генерира конфигурациски објект од JSON за нас. Да, ќе треба да додадеме уште еден чекор за градење на нашиот проект, но дали е тоа потешко од пишувањето C++ код што го анализира JSON? И никој не го откажал времето на компилација (и мислам дека оваа причина е многу позначајна): ако на кодот треба долго време да се состави, тогаш развојот ќе се претвори во пекол. Затоа, не гледам апсолутно никаква смисла да се префрлаат сложените работи на шините на constexpr. Според мене, ова е непотребна компликација што може да се прикаже на конференции, но е сосема непотребна во реалниот код. Употребата на пресметки за време на компајлирање треба да биде оправдана, не само затоа што „можеме сега!“

Последните два параграфи може да дадат погрешна идеја за мојот став кон оваа иновација: јас не сум против тоа, јас сум само против чукање клинци со микроскоп, тоа е сè. Пример за второто е јасно видлив на видеото од CppCon, но самата појава на constexpr ламбда е секако добра вест, бидејќи ламбдите, функционално, не треба да се разликуваат во никој случај од обичните функции - тие треба да ги имаат сите исти способности, и ако меморијата не успее се промени, останува само едно да додадам: именувани параметри на шаблон за ламбда. Дали ги очекуваме во C++20?

Во секоја неразбирлива ситуација, смирете се, легнете, прегрнете се, одете да јадете вкусна храна. Грижете се за вашите нерви :)

Оставете ги грешките на минатото.

Ценете ја сегашноста.

Насмевнете се на иднината)

Веднаш штом ќе се ослободите од ситуацијата што ве измачува, ситуацијата веднаш ќе ве пушти.




Не ги губете нервите. Не може да се каже што може да се случи во ваше отсуство.

Оди до дрвото. Нека ве научи на мир.

- Која е тајната на вашата смиреност?

„Во целосно прифаќање на неизбежното“, одговори Господарот.

Ставете ги во ред вашите мисли - и ќе го видите светот со други очи.

Не заборавајте да го исчистите срцето.

Што е мир?

Без непотребни мисли.

И кои мисли се непотребни?

(Веи Де-Хан)

Вашето најважно богатство е мирот во вашата душа.

Камилицата смирува.

Контролирајте го вашето расположение, бидејќи ако не се покорува, заповеда.


Можете да најдете мир само ако станете набљудувач, мирно гледајќи во минливиот тек на животот. Ирвин Јалом



Смиреноста е посилна од емоциите.

Тишината е погласна од крик.

И што и да ви се случи, не земајте ништо при срце. Неколку работи во светот остануваат важни долго време.

Ерих Марија Ремарк „Триумската капија“ ---

Ако ве фати дождот, можете да научите корисна лекција од него. Ако неочекувано почне да врне, не сакате да се навлажни, па трчате по улицата кон вашата куќа. Но, кога ќе стигнете дома, ќе забележите дека сте уште влажни. Ако од самиот почеток одлучите да не го забрзате темпото, ќе се навлажните, но нема да се гужвате. Истото треба да се направи и во други слични околности.

Јамамото Цунетомо - Хагакуре. Самурај книга



Утре ќе биде како што треба

и ништо нема да се случи што не треба да се случи -

не гужвајте.

Ако нема мир во нас, бескорисно е да го бараме надвор.

Неоптоварени со грижи -
ужива во животот.
Не е среќен кога ќе го најде,
кога губи не е тажен, затоа што знае
дека судбината не е константна.
Кога не сме обврзани со нештата,
Спокојството е целосно доживеано.
Ако телото не мирува од напнатоста,
се истроши.
Ако духот е секогаш во грижи,
тој избледува.

Чуанг Цу ---

Ако му фрлите стап на кучето, тоа ќе го погледне стапот. И ако му фрлите стап на лавот, тој, без да погледне нагоре, ќе го погледне фрлачот. Ова е формална фраза што се зборуваше за време на дебатите во античка Кина ако соговорникот почна да се држи до зборовите и престане да ја гледа главната работа.

Додека дишам, ги смирувам телото и умот.
Додека издишувам, се насмевнувам.
Бидејќи сум во сегашниот момент, знам дека овој момент е неверојатен!

Дозволете си да дишете длабоко и не се присилувајте во граници.

Силата им припаѓа на оние кои веруваат во сопствената сила.

Развијте навика да ја следите вашата ментално-емоционална состојба преку самонабљудување. Добро е редовно да се прашувате: „Дали сум мирен во овој момент? е прашање кое е корисно редовно да си го поставувате. Можете исто така да прашате: „Што се случува во мене во моментов?

Екхарт Толе

Слободата е слобода од грижи. Откако ќе разберете дека не можете да влијаете на резултатите, игнорирајте ги вашите желби и стравови. Нека доаѓаат и си одат. Не ги хранете со интерес и внимание. Во реалноста, работите се прават со вас, а не од вас.

Нисаргадата Махарај


Колку е човекот помирен и поурамнотежен, толку е помоќен неговиот потенцијал и поголем ќе биде неговиот успех во добри и достојни дела. Рамномерноста на умот е едно од најголемите богатства на мудроста.


Основата на сета мудрост е смиреноста и трпението.

Престанете да се грижите и тогаш ќе можете да ја видите прекрасната шема...

Кога умот ќе дојде до мир, почнувате да ја цените светлината на месечината и ударот на ветрот и разбирате дека нема потреба од вревата на светот.

Најдете мир во вашата душа, и илјадници околу вас ќе бидат спасени.

Всушност, вие сакате само мир и љубов. Ти си дојден од нив, ќе им се вратиш и ти си тие. Папаџи


Најубави и здрави луѓе се луѓето кои не ги нервира ништо.


Највисок степен на човечка мудрост е способноста да се остане смирен и покрај надворешните грмотевици.



Не сте обврзани со вашите искуства, туку со фактот дека се држите за нив.

Не донесувајте избрзани одлуки. Добро измерете ги сите добрите и лошите страни. Скоро секој човек има небесен водич, второ јас. Размислете и прашајте го, дали вреди да го правите тоа што сте го планирале или не?! Научете да набљудувате, гледајте го невидливото, предвидувајте ситуации.

Кога размислувате за планинските шуми и потоците што течат над камењата, вашето срце, заматено од световна нечистотија, постепено станува јасно. Кога ги читате древните канони и ги гледате сликите на античките мајстори, духот на световната вулгарност малку по малку исчезнува. Хонг Зихен, Вкусот на корените.


Мудроста доаѓа со способноста да се биде смирен. Само гледајте и слушајте. Ништо повеќе не е потребно. Кога сте во мир, кога само гледате и слушате, тоа ја активира интелигенцијата без концепти во вас. Дозволете мирот да ги води вашите зборови и дела.

Екхарт Толе


Никогаш не можеме да постигнеме мир во надворешниот свет додека не го постигнеме во внатрешниот свет.

Суштината на рамнотежата е да не се држиме.

Суштината на релаксација не е да се држите.

Суштината на природноста не е да се вложи напор.

Оној кој не е завидлив и никому не сака зло, постигна рамнотежа. За него целиот свет е исполнет со среќа.

За животот повторно да процвета, да зоврие и да се исполни со возбудлива радост и среќа, само треба да престанете... Застанете и дозволете си да се растворите во задоволството...

Не грижи се за својата иднина, биди мирен сега и се ќе си дојде на свое место.

Ако водата не е заматена, таа сама ќе се смири. Ако огледалото не е валкано, самото ќе ја рефлектира светлината. Човечкото срце не може да се чисти со нечија волја. Елиминирајте го она што го загадува, и неговата чистота ќе се манифестира. Не мора да гледате надвор од себе за радост. Елиминирајте го она што ви пречи, и радоста автоматски ќе завладее во вашата душа.


Понекогаш само оставете го на мира...

Секогаш е тивко во центарот на ураганот. Бидете тоа тивко место во центарот, дури и ако има бури насекаде наоколу.

Ти си рајот. Сè друго е само време.

Само во мирни води работите се рефлектираат неискривени.

Само мирна свест е погодна за согледување на светот.

Кога не знаете што да правите, почекајте малку. Крие. Живеј како што живееш. Знакот ќе се појави порано или подоцна. Главната работа е да знаете дека чекате и да бидете подготвени да се соочите со она што го чекате. Луис Ривера

Не грижи се за својата иднина, биди мирен сега и се ќе си дојде на свое место.


Смиреноста ги лишува вашите непријатели од силата. Во смиреноста нема ниту страв, ниту прекумерен гнев - само реалност, исчистена од искривувања и мешање од емоционални испади. Кога сте мирни, вие сте навистина силни.

Затоа, вашите противници секогаш ќе се обидуваат со сите сили да ве извлечат од оваа состојба - да всадат страв, да сеат сомнежи, да предизвикаат гнев. Внатрешната состојба е директно поврзана со дишењето. Во каква ситуација и да се најдете, веднаш смирете го дишењето - вашиот дух потоа ќе се смири.


Најважното нешто во духовниот живот е да го одржувате своето срце во мир.

Треба да му верувате на животот.
Мораме без страв да му се довериме на неговиот тек, бидејќи животот е бескрајно помудар од нас.
Таа сепак ќе се однесува со вас на свој начин, понекогаш прилично грубо,
но на крајот ќе сфатите дека таа беше во право.

Бидете мирни сега и се ќе си дојде на свое место.

Твојот дух да не се вознемирува, од твоите усни да не излегува лош збор; мора да останете добронамерни, со срце полно со љубов, кое не содржи тајна злоба; па дури и лошо добронамерниците мора да ги прифатите со љубовни мисли, дарежливи мисли, длабоки и безгранични, исчистени од секаков гнев и омраза. Вака, мои студенти, треба да постапите.

Само мирната вода правилно го рефлектира небото.

Најдобар показател за нивото на свест е способноста мирно да се поврзе со животните тешкотии.

Тие го влечат онесвестениот надолу, додека свесниот се крева се повеќе и повеќе.

Екхарт Толе.


Седнете мирно и ќе разберете колку се претрупани секојдневните грижи. Молчи малку и ќе сфатиш колку е празен секојдневниот говор. Откажете се од секојдневните задолженија и ќе сфатите колку енергија луѓето залудно трошат. Чен Џиру.


Смиреноста ни помага да најдеме излез од најтешките ситуации.

Ви снемало трпението?...Повторно надува!)

3 ТИВКИ СЕКУНДИ

Доволно е да размислите мирно три секунди за да разберете сè.

Но, каде можам да ги добијам, овие навистина три тивки секунди? Премногу сме возбудени од сопствените фантазии за да престанеме дури и за момент.


Дали некогаш сте виделе дабово дрво во состојба на стрес, делфин во мрачно расположение, жаба која страда од ниска самодоверба, мачка што не може да се опушти или птица оптоварена со незадоволство? Научете од нив способност да се помирите со сегашноста.
Екхарт Толе

Одвојте време. Секоја пупка цвета во свое време. Не присилувајте пупка да стане цвет. Не виткајте ги ливчињата. Тие се нежни; ќе ги повредиш. Почекај и сами ќе се отворат. Шри Шри Рави Шанкар

Не му се поклонувајте на брадестиот човек на небото или идолот во книгата. Обожувај се на вдишувањето и издишувањето, зимскиот ветар што ти го гали лицето, утринската гужва луѓе во метрото, само чувството да си жив, никогаш да не знаеш што доаѓа.Забележете го Бога во очите на странец, Промислата во скршеното и обичното. Обожувајте се на земјата на која стоите. Направете го секој ден танц, со солзи во очите, размислувајќи за божественото во секој момент, забележувајте го апсолутното во сè релативно и оставете ги луѓето да ве нарекуваат луд. Оставете ги да се смеат и да се шегуваат.

Џеф Фостер

Врховната моќ не е способноста да се освојуваат другите, туку способноста да се стане едно со другите.

Шри Чинмој

Обидете се, барем на мал начин, да не го доведете вашиот ум.
Погледнете го светот - само погледнете.
Не кажувајте „ми се допаѓа“ или „не ми се допаѓа“. Не кажувај ништо.
Не кажувај зборови, само гледај.
Умот ќе се чувствува непријатно.
Умот би сакал да каже нешто.
Едноставно му велиш на умот:
„Молчи, да видам, само ќе гледам“...

6 мудри совети од Чен Џиру

1. Седнете мирно и ќе разберете колку се претрупани секојдневните грижи.
2. Молчи малку и ќе сфатиш колку е празен секојдневниот говор.
3. Откажете се од секојдневните задолженија, и ќе сфатите колку енергија залудно трошат луѓето.
4. Затворете ги портите и ќе разберете колку се тешки врските на познанството.
5. Имајте малку желби, и ќе разберете зошто болестите на човечкиот род се толку многубројни.
6. Бидете похумани, и ќе сфатите колку обичните луѓе се бездушни.

Ослободете го умот од мислите.
Нека ти се смири срцето.
Смирено следете ги превирањата на светот,
Погледнете како се си доаѓа на свое место...

Среќната личност е многу лесно да се препознае. Се чини дека зрачи со аура на смиреност и топлина, полека се движи, но успева да стигне секаде, зборува мирно, но сите го разбираат. Тајната на среќните луѓе е едноставна - отсуството на напнатост.

Ако седите некаде на Хималаите и ве опкружува тишина, тоа е тишина на Хималаите, а не ваша. Мора да најдете свои Хималаи во...

На раните нанесени од мисли им треба подолго време за заздравување од било која друга.

Џ.К. Роулинг, „Хари Потер и редот на феникс“

Мудроста доаѓа со способноста да се биде смирен.Само гледајте и слушајте. Ништо повеќе не е потребно. Кога сте во мир, кога само гледате и слушате, тоа ја активира интелигенцијата без концепти во вас. Дозволете мирот да ги води вашите зборови и дела.

Екхарт Толе „Што вели тишината“

Колку е човекот помирен и поурамнотежен, толку е помоќен неговиот потенцијал и поголем ќе биде неговиот успех во добри и достојни дела. Рамномерноста на умот е едно од најголемите богатства на мудроста.

Џејмс Ален

Кога живеете во хармонија со себе, можете да се согласувате со другите.

Источна мудрост -

Седиш и седиш за себе; оди - и оди самиот.
Главната работа е да не се гужвате залудно.

Променете го односот кон работите што ве мачат и ќе бидете безбедни од нив. (Маркус Аврелиј)

Обрнете внимание на соларниот плексус. Обидете се да замислите дека во вас свети мала топка сонце. Оставете го да се разгори, да стане поголем и посилен. Нека те осветлуваат неговите зраци. Нека сонцето го засити целото тело со своите зраци.

Хармонијата е рамномерност во сè. Ако сакате да направите скандал, избројте до 10 и „пуштете“ го сонцето.

Мирно, само смирено :)

Бидете заинтересирани за она што се случува внатре во вас, како и за она што е околу вас. Ако се е во ред во внатрешниот свет, тогаш сè во надворешниот свет ќе си дојде на свое место.

Екхарт Толе ---

Будалата и неукиот имаат пет знаци:
лути без причина
зборуваат непотребно
се менува од непознати причини
се мешаат во нешто што воопшто не ги засега,
и не знаат да разликуваат кој им посакува добро, а кој зло.

Индиска поговорка ---

Што си оди, нека си оди.
Што и да дојде, нека дојде.
Немаш ништо и никогаш немаш ништо освен себе си.

Кога би можеле едноставно да одржувате внатрешна тишина, незагадена од спомени и очекувања, ќе можете да забележите убава шема на настани. Вашата грижа е таа што создава хаос.

Нисаргадата Махарај ---

Има само еден пат до среќата - тоа е да престанеме да се грижиме за оние работи кои се надвор од нашата контрола.

Епиктет ---

Кога ќе го изгубиме чувството за самобитност, стануваме неранливи.

За да бидеш силен, мора да бидеш како вода. Нема пречки - тече; брана - ќе престане; Ако браната се скрши, таа повторно ќе тече; во четириаголен сад е четириаголен; во круг - таа е тркалезна. Бидејќи таа е толку попустлива, таа е најпотребна и најмоќно.

Светот е како железничка станица, каде што секогаш или чекаме или брзаме.

Кога вашиот ум и чувства се забавуваат до отчукувањата на срцето, вие спонтано доаѓате во хармонија со космичкиот ритам. Почнувате да го перцепирате светот преку божествени очи, набљудувајќи како сè се случува само по себе и во свое време. Откако откривте дека сè е веќе во склад со законот на Универзумот, доаѓате до разбирање дека не се разликувате од светот и неговиот Господар. Ова е Слобода. Муџи

Премногу се грижиме. Ние го сфаќаме премногу сериозно. Треба да ги сфатиме работите поедноставно. Но мудро. Без нерви. Главната работа е да се размислува. И не прави ништо глупо.

Она што можете мирно да го восприемите повеќе не ве контролира...

Мирот не може никаде да се најде за оние кои не го нашле во себе.

Да се ​​биде лут и иритиран не е ништо друго освен да се казнуваш себеси за туѓите глупости.

Ти си небото. А облаците се нешто што се случува, доаѓа и си оди.

Екхарт Толе

Живеј со мир. Дојде пролет, а цвеќињата сами ќе процветаат.


Познато е дека колку човек изгледа помирно, толку поретко другите луѓе му противречат и се расправаат со него. И обратно, ако човек жестоко ја брани својата гледна точка, му се спротивставува разумно и насилно.

Немој да брзаш. Јадете во часот на јадење, и ќе дојде часот на патување- удри на патот.

Пауло Коељо „Алхемичарот“

Предавањето значи прифаќање на она што е. Значи, вие сте отворени за живот. Отпорот е внатрешна стегач... . Значи, вие сте целосно затворени. Што и да правите во состојба на внатрешен отпор (што може да се нарече и негативност), тоа ќе предизвика уште поголем надворешен отпор, а универзумот нема да биде на ваша страна, животот нема да ви помогне. Светлината не може да влезе низ затворени ролетни. Кога внатрешно ќе попуштите и ќе престанете да се борите, се отвора нова димензија на свеста. Ако акцијата е возможна... тоа ќе биде направено... поддржано од креативниот ум... со кој, во состојба на внатрешна отвореност, станувате едно. И тогаш околностите и луѓето почнуваат да ви помагаат, станете едно со вас. Среќни случајности се случуваат. Сè оди во ваша корист. Ако акцијата не е возможна, го доживувате мирот и внатрешниот мир што доаѓа со откажувањето од борбата.

Екхарт Толе Нова земја

Порака „Смири се“. Поради некоја причина секогаш ме нервира уште повеќе.Уште еден парадокс.Обично после таков повикникој не ни помислува да се смири.

Бернард Вербер Огледалото на Касандра

Оној што се понизи, ги победи своите непријатели.

Силуан Атонски

Смирен е оној што го чува Бога во себе.


Кога се расправате со будала, тој најверојатно го прави истото.

Вистинската сила на човекот не е во импулсите, туку во непоколебливата смиреност.

Највисок степен на човечка мудрост е способноста да се прилагоди на околностите и да остане смирен и покрај надворешните бури.

Попречувачките чувства и мисли ќе исчезнат ако не им обрнете внимание. Лама Оле Најдал

Никогаш нема да зажалите за што успеавте да премолчите.
--- Источна мудрост ---

Вреди да се стремиме кон состојба на свест во која сите настани ќе се перципираат неутрално.