Psixologiya Hikoyalar Ta'lim

Buyurtma bering va tinchlaning. xotirjamlik

Keyingi bosqichdan o'tganga o'xshab ko'rinsa, Shadows albatta sudralib chiqib, raqslari davomida muvozanat va aql mavjudligini tekshiradi.

Soyaga munosabat nafsning mayatnikini silkitadi va shafqatsiz haqiqatni ochib beradi: muvozanat arqon yuruvchining ehtiyotkorligi kabi tarang bo'lib, jasur odamni o'tmishning tubsiz tubiga uloqtirmoqchi.

Haqiqiy muvozanat - bu noto'g'ri kuzatuvning yo'qligi: bu erda nima sodir bo'layotganini izlash to'g'ri emas.

"Hammasi odatdagidek," deydi ichki mulohazakor, garchi atrofda vabo bo'lsa yoki tahdidlar yog'ayotgan bo'lsa ham, "bu odamlar jarohatlangan va ularning yo'lidan xabardor bo'lishlari kerak.

Ammo boshqa reaktsiyalar bo'lsa, unda yo'l tugallanmagan va bosqichning tugashi hali oldinda.

- Bu menga nimaga kerak? - Siz faqat darajadagi sayohatingizning boshida turibsiz.
Men o'limgacha kurashishga tayyorman! Siz yo'lning to'rtdan bir qismidasiz.
Men bunday sarguzashtni yaxshi ko'raman! - yo'lning yarmi allaqachon o'tib ketgan.
- Mening oldimga keling, men sizni qutqaraman - siz yo'lning to'rtdan uch qismini bosib o'tdingiz.
— Aynan shunday ekanligingiz uchun sizdan qanchalik minnatdorman! – darajaning oxirigacha bo'lgan yo'lning 2/10 qismi.
– Sayohatchi, qayoqqa ketyapsiz va tajovuzkorligingiz bilan nimaga erishmoqchisiz? - Siz bu darajadan o'tdingiz va tahdidli soya imtihonini topshiryapsiz.

“Soya”da juda ko‘p muhabbat va ko‘p san’at bor. Yaxshi o'qituvchi sifatida u sizning muvozanatingizni sinab ko'rish uchun Zolim, Qurbon va Qutqaruvchini mukammal o'ynaydi. Axir geymerlar tili bilan aytganda: MUVOZANAT ALLOH DARAJASI.

©Mark Ifraimov

********

TINCHLIK QOIDALARI

Qo'yib yuborishga tayyor bo'ling.

Sizni aldaydigan, manipulyatsiya qiladigan, ayblaydigan, shikoyat qiladigan, baxtsiz bo'lgan, sizni aqldan ozdiradigan, hissiy xotirjamlikdan mahrum qiladigan odamlar.

Teng bo'ling.

Har kim o'z hayoti uchun mas'ul bo'lgan, kimdir uni baxtli qilishini yoki qanday yashashni aytishini kutmaydigan o'sha tenglik.

Hushyor bo'ling.

Shikoyatlarga va manipulyatsiyaga berilmang. Aloqalar - bu uning najoti emas, balki boshqa birovning hayotida mavjudligi. To'g'ridan-to'g'ri yordam so'rovi bilan adashtirmaslik kerak. So'rang - siz uchun imkon qadar yordam bering.

Ketishga tayyorlaning.

Demontaj va ayblovlarga aralashmang. Uzr keltirmang. Agar xato qilsangiz, kechirim so'rang. Bu yetarli. Agar siz insonning his-tuyg'ulariga katta zarar etkazgan bo'lsangiz, tuzatish uchun nima qilish mumkinligini so'rang? Agar javob bo'lmasa, uzoqlashishga tayyor bo'ling. Bu sizning aybingiz haqida emas, balki uning ayblovlari haqida.

Qat'iy bo'ling.

“Sizni maqtashdi - xursand bo'lmang. Ular so'kadilar - xafa bo'lmang ”(c). Siz doimo g'alaba qozona olmaysiz yoki yutqazmaysiz. Siz hatto hamma narsani yo'qotish va daromadga bo'lolmaysiz. Ushbu tadbir tufayli nimani o'rganganingizni va o'zingizda nimani kashf etganingizni toping. O'z yo'lingda, qat'iy qadam bilan bor.

O'tib keting.

Boshqa odamlarning to'qnashuvlari, g'iybatlari, kategoriyalari, baholashlari, g'azablari, qasoslari, nolalari, yorliqlari, hasadlari bilan o'ting. Bularning barchasiga aralashmang, qo'llab-quvvatlamang, vaqtingizni behuda sarflamang ... Keling ...

Ketishga tayyorlaning.

Biz C ++ 17 standartining til yangiliklari bilan tanishishda davom etamiz. Ushbu maqolada men tilning olijanobligining davomi deb ataydigan narsalarni ko'rib chiqamiz. Bular. Funktsionallik nuqtai nazaridan biz bu erda mutlaqo yangi narsalarni ko'rmaymiz - aksincha, eski funksiyani maqbulroq holatga keltiramiz. Bu erda biz pastki ifodalarni bajarish tartibi bilan nima o'zgarganligini, ixtiyoriy nusxa ko'chirishni istisno qilish bo'yicha qanday yangi kafolatlar paydo bo'lganini, shuningdek, lambdalarga nima qo'shilganligini ko'rib chiqamiz.

Ishlarni tartibga solish

Ko'pgina C++ dasturchilari "qiziqarli" muammolarga duch kelishdi, unda ba'zi munozarali kodlar berilgan va savol: "Nima chiqadi?". Bunday kodning umumiy misollaridan biri quyidagi misoldir:

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

Bunday "aqlli" kod tarmoqda ham, intervyularda ham topiladi. Bunday savollarning maqsadi - javob beruvchining C ++ da ifodalarni bajarish tartibining o'ziga xos xususiyatlari bilan qanchalik tanishligini aniqlash.

Hech bo'lmaganda bu e'lon qilingan maqsad. To'g'ri, men ishonamanki, aksariyat hollarda bunday savollarni so'ragan odam o'zining bema'niligini ko'rishni xohlaydi. Bunday kod nima chiqishini bilish mutlaqo ixtiyoriy, chunki bunday kodni oddiygina yozib bo'lmaydi. Va siz yoza olmaganingiz uchun, nega bu haqda ariza beruvchidan so'rashingiz kerak? Bunday savollar boshqa dasturchilar cheklov holatlarini muhokama qiladigan "chekish xonalari" uchun mos keladi; ular intervyu uchun mos emas. Men Raymond Chenning ushbu mavzu bo'yicha fikrlarini o'qishni tavsiya qilaman: "Odamlar bir-biriga to'g'ri keladigan bir nechta yon ta'sirlar bilan aqldan ozgan kod yozadilarmi?"

Ammo bu oddiy ko'zga ko'rinadigan patologik holat va yuqorida aytib o'tganimdek, oddiy dasturchi hech qachon bunday yozmaydi. Ammo tajribali dasturchilar ham yozishi mumkin bo'lgan kamroq aniq holatlar mavjud. Keling, ushbu kod qismini ko'rib chiqaylik:

Void f2() ( std::string s = "lekin men u siz ishonmasangiz ham ishlaydi deb eshitdim"; s.replace(0, 4, "") .replace(s.find("hatto" ), 4, "faqat") .replace(s.find("don"t"), 6, ""); assert(s == "Men eshitganman, agar bunga ishonsangizgina ishlaydi"); )

Ushbu kod Stroustrupning so'nggi kitobi, C++ dasturlash tilining 4-nashri, 36.3.6 bo'limida keltirilgan va bir qarashda juda foydali va to'g'ri ko'rinadi. Ammo bu faqat birinchi qarashda, aslida yuqoridagi kod kutilgan qatorni tashkil etishiga kafolatlar yo'q va shunga mos ravishda tasdiqlash ishlamaydi.

Ko'rib turganimizdek, hatto C++ yaratuvchisi ham shunday kichik kod bo'lagida xatoga yo'l qo'ygan. U nima deydi? Birinchidan, ko'p turli xil narsalar sodir bo'ladigan bir iboraga bir nechta kodlarni yig'ishingiz shart emas. Kitobning bir sahifasida taqdim etilgan ushbu kodning birinchi versiyasi ancha sodda va yaxshiroq:

Void f() ( std::string s = "lekin men eshitdimki, agar bunga ishonmasangiz ham ishlaydi"; s.replace(0, 4, ""); s.replace(s.find(" hatto"), 4, "faqat"); s.replace(s.find("don"t"), 6, ""); assert(s == "Men eshitganman, agar bunga ishonsangizgina ishlaydi" );)

Ushbu parametr nafaqat dasturning bajarilishi nuqtai nazaridan to'g'ri, balki uni o'qish ham osonroq. Ammo bu biz chiqarishimiz kerak bo'lgan yagona xulosa emas, P0145R3 taklifi mualliflari biz uchun allaqachon qilgan yana bir xulosa bor: C++ da ifoda pastki ifodalarini bajarish tartibida nimadir noto'g'ri.

eski tartib

Taklifning o'ziga va uning qabul qilinishiga olib kelgan o'zgarishlarga o'tishdan oldin, men amaldagi qoidalarni eslashni taklif qilaman. Bu yuqoridagi 2 ta misol nima uchun yomon C++ kodini yangilashga (va kimgadir bilishga yordam beradi) yordam beradi (faqat til nuqtai nazaridan, estetika nuqtai nazaridan). Demak, boshqa ko'pgina dasturlash tillaridan farqli o'laroq, C++ da ifodalardagi pastki ifodalarni bajarish tartibi standart tomonidan belgilanmaydi va kompilyatorga qo'yiladi. Albatta, hali ham ma'lum bir tartib bor, lekin men bu erda barcha nozikliklarni tasvirlamayman, chunki. ular yetarlicha. Shuni tushunish kerakki, qoida tariqasida, bitta katta iboraning ikkita kichik ifodasi bir-biridan mustaqil ravishda bajariladi. noaniq tartib (bu qoidadan katta istisno - vergul "," operatori).

Masalan, birinchi misolimizni olaylik: i = i++ + i++; . Katta ifodada 4 ta kichik kichik ifoda mavjud: i , i++ , i++ va i++ + i++ . C++ 14 standarti nimani kafolatlaydi? U ( expr.ass ) ikkala i++ ifodasi ularning yig‘indisi hisoblanmasidan oldin baholanishini va i ifodasi unga yig‘indining natijasi tayinlanishidan oldin baholanishini kafolatlaydi. Shuni ham eslatib o'tamanki, i++ ifodasi i ning eski qiymatini qaytaradi va keyin i ni bir marta oshiradi (o'sish). Bu, o'z navbatida, i ning eski qiymati olinganda ifoda baholangan deb hisoblanadi.

Shunday qilib, kompilyator to'liq ifodani baholashning bir necha usullarini tanlashi mumkinligi ma'lum bo'ldi: bu ++ effekti i ga qachon qo'llanilishi bilan cheklanmaydi. Natijada, biz turli xil qiymatlarni olishimiz mumkin i , bu, albatta, yaxshi emas, chunki dastur kompilyatorning injiqliklaridan mustaqil bo'lgan bashorat qilinadigan natijani berishi kerak. Masalan, buyurtma quyidagicha bo'lishi mumkin:

    Biz birinchi i ni hisoblaymiz, u 0 ga teng.

    Biz ikkinchi i ni hisoblaymiz, u 0 ga teng.

    Ikkinchi o'sish natijasini yozamiz, biz i == 1 ni olamiz.

    Birinchi o'sish natijasini yozamiz, biz i == 2 ni olamiz.

    Teng belgisining chap tomonidagi i ni hisoblang.

    Yig'indini hisoblang: 0 + 0 == 0 .

    Yig'indining natijasini i ga yozamiz.

    To'liq ifodaning natijasini qaytaramiz, ya'ni. i, bu 0.

Yuqoridagi amallarni standart tomonidan taqdim etilgan kafolatlarni buzmaydigan istalgan tartibda bajarishingiz mumkin va natijada siz turli xil javoblarni olasiz.

Aytgancha, siz oddiyroq variantni ko'rib chiqishingiz mumkin: i = ++i + i++; . Bu erda siz darhol ++i yoki i++ baholanishiga qarab natija boshqacha bo'lishini ko'rishingiz mumkin, chunki birinchi ifoda baholanishidan oldin yon ta'sirga ega (i ni bir marta oshirish).

Ikkinchi variant ko'proq tasviriy bo'lsa-da, ularning ikkalasi ham shunday deb ataladi aniqlanmagan xatti-harakatlar(NP, inglizcha aniqlanmagan xatti-harakatlar). Barcha tajribali C++ dasturchilari bu atama bilan tanish, ammo ko'pchilik C++ tilida bunday xatti-harakatlar sodir bo'lishi mumkin bo'lgan barcha joylarni bilishmaydi. Bu bir nechta maqolada yoritilishi mumkin bo'lgan keng va juda qiziqarli mavzu, shuning uchun men bu haqda batafsil to'xtalmayman. Aslida, iborani bunday batafsil tahlil qilish kerak emas edi, chunki standartga muvofiq (intro.execution/p15 ) bizning ifodamiz NP allaqachon, chunki bitta ifodada bir xil skaler ob'ektni o'zgartiradigan ikkita pastki ifoda mavjud va o'zgarishlar tartibi aniqlanmagan. Nega men bu tahlilni berdim? Buning sababini ko'rsatishga harakat qildim NP ifodalarni bajarish bo'yicha joriy cheklovlar asosida o'zini namoyon qiladi, ya'ni. maqsad amaldagi qoidalar bilan standartning yelka qisishdan boshqa chorasi yo‘qligini ko‘rsatish edi.

Endi ikkinchi misolimizga o'tamiz va unda nima noto'g'ri ekanligini aniqlaymiz. Tushunishni osonlashtirish uchun men ushbu misolni quyidagi iboraga qisqartiraman: s.almashtirish(s.find("juft"), 4, "faqat"). Bu yerda bizda nima bor? s ob'ekti mavjud, std::string::replace a'zo funksiyasiga qo'ng'iroq, boshqa std::string::find funktsiyasi va bu funktsiyalarga argumentlar mavjud. Standart bizga qanday kafolatlar beradi? Standart funktsiya argumentlari funksiya chaqirilishidan oldin baholanishini kafolatlaydi. Bundan tashqari, funksiya bajarilayotgan ob'ektga funktsiya chaqirilishidan oldin baholanishi kerakligini ta'minlaydi. Bularning barchasi aniq va mantiqiy. To'g'ri, bizda boshqa kafolatlar yo'q: almashtirish funksiyasining argumentlari baholanishidan oldin s baholanishiga kafolat yo'q, shuningdek, ushbu argumentlarni baholash tartibi bo'yicha ham kafolatlar yo'q. Shuning uchun biz ushbu baholash tartibini olishimiz mumkin: s.find("juft") , "faqat" , 4 , s , s.replace(...) . Yoki standartning ilgari belgilangan kafolatlarini buzmaydigan har qanday boshqa.

Yuqoridagi matndan 2 ta asosiy fikrni ajratib ko‘rsatish kerak: 1) nuqtaning chap va o‘ng tomonidagi ifodalar istalgan tartibda baholanishi mumkin, 2) funksiya argumentlari istalgan tartibda baholanishi mumkin. Shunga asoslanib, endi Stroustrup kitobidagi kod nima uchun noto'g'ri ekanligi aniq bo'lishi kerak. Bir ifodada:

S.almashtirish(0, 4, "") .almashtirish(s.topish("juft"), 4, "faqat") .almashtirish(s.topish("don"t"), 6, "");

Topish uchun ikkala qo'ng'iroq ham oldingi (kodda) almashtirishlar tugagunga qadar tugashi mumkin. Va ehtimol keyin. Hatto birinchisi ham oldin mumkin, ikkinchisi keyinroq - bu ma'lum emas, chunki tartibi aniqlanmagan. Natijada, bu kod oldindan aytib bo'lmaydigan natija beradi, garchi bunday bo'lmasa ham NP. Biroq, aytganimdek, malakali dasturchi bunday kod yozmaydi va uning Stroustrupning kitobida bo'lishi uning shunday yozishini anglatmaydi - u shunchaki qo'ng'iroqlar zanjiriga misol keltirdi.

Bundan tashqari, qo'ng'iroqlar zanjiri unchalik aniq bo'lmasligi mumkin. Masalan, bu erda kod:

std :: cout<< first << second;

Bu ham shunday bo'lishi mumkin bo'lgan qo'ng'iroqlar zanjiri:

std::cout.operator<<(first).operator<<(second);

yoki shunga o'xshash:

operator<<(operator<<(std::cout, first), second);

Farqi asosiy emas. Agar to'satdan birinchi va ikkinchi iboralar qandaydir tarzda bir xil ob'ektga tegishli bo'lsa va ushbu iboralardan biri ushbu ob'ektni o'zgartirsa, biz chiqishda beqaror kodni olish ehtimoli katta yoki NP.

Yuqoridagi jumladan yana bir qiziqarli misol:

std :: xaritasi lug'at; lug'at = dictionary.size();

Ha, kod ma'nosiz ko'rinadi, ammo natijada u nima beradi? Hatto ma'nosiz kod bashorat qilinadigan natijalarni berishi kerak. Afsuski, 2014-yilgi C++ faqat yelkalarini qisib qo‘yadi – bilmayman, deyishadi.

Funksiyalar va operatorlar

Qo'ng'iroqlar zanjiriga nazar tashlaganimizda, biz yana bir qiziq jihatga to'xtalib o'tdik: std :: cout ga qo'ng'iroq aslida nimaga aylanadi<< first << second; . Как мы уже видели, в зависимости от того, чем являются first и second , мы можем получить либо цепочку вызовов функций-членов, либо же вложенные вызовы свободных функций. Но ведь в изначальном варианте записи у нас есть три выражения и 2 оператора << , у нас нет вообще никаких функций!

Bu kod C++ dasturchilari uchun muammo tug‘dirgan bo‘lishi dargumon: ertami-kechmi biz hammamiz operatorning haddan tashqari yuklanishi haqida bilib olamiz va bularning barchasini tabiiy deb qabul qilamiz, lekin bu ortiqcha yuklanishda bitta nuance bor. Ushbu nuanceni ko'rsatish uchun quyidagi funktsiya shablonini yozamiz:

Shablon << "first\n", value++) && (cout << "second\n", value++); }

Ha, shablon eng foydali va e'tiborga loyiq emas, lekin biz hozir ko'rib turganimizdek, bu juda ko'rsatkichdir. Keling, cleverFun funksiyasini int argumenti bilan chaqiraylik, bu funksiyani ishga tushiradi:

Bool cleverFun(int& value) (qaytish (cout<< "first\n", value++) && (cout << "second\n", value++); }

Ushbu funktsiya chaqirilganda, chiqish kafolatlanadi:

agar birinchi qiymat ++ 0 ni qaytarsa, aks holda u shunday bo'ladi:

Birinchi soniya

Va boshqalar yo'q, bu aniq: && operatori uchun kuchli kafolat bor qisqa tutashuv(KZ, inglizcha qisqa tutashuv) va chap tomonning o'ngga bajarilishi. Boshqa tomondan, agar biz postfiks operatori++ va operator&& ni qayta aniqlaydigan Int turini yaratsak va keyin shablonimizni u bilan yaratsak, biz quyidagi funktsiyani olamiz:

Int cleverFun(Int& value) (qaytish (cout<< "first\n", value.operator++(0)) .operator&&((cout << "second\n", value.operator++(0))); }

Men o'qish oson bo'lmagan kodni ko'proq ifloslantirmaslik uchun cout qo'ng'irog'i nimaga aylanishini ochishni boshlamadim. Hozirgacha ko'rgan narsangizga asoslanib, ushbu kodning chiqishi oddiy int uchun olganingizdan farq qilishi sizni ajablantirmasligi kerak. Bu erda siz ikkita variantni ham olishingiz mumkin, ammo ular boshqacha bo'ladi:

Birinchi soniya

Ikkinchi birinchi

Shubhasiz, biz birinchi variantni tanlay olmaymiz, chunki qayta belgilangan operatorlar uchun qisqa tutashuv ishlamaydi. Agar siz ushbu misolni diqqat bilan ko'rib chiqsangiz, nima uchun ekanligini tushunishingiz kerak: bekor qilingan operatorni bajarish uchun&& , uning uchun argumentni baholash kerak (ya'ni qisqa tutashuv bilan xayrlashing), bundan tashqari, qisqa tutashuv faqat chapdagi ifoda bo'lsa ishlaydi. a bool , bu bekor qilingan taqdirda operator bo'lishi mumkin emas. Shunday qilib, qisqa tutashuv haqida hech qanday illyuziya bo'lishi mumkin emas - bu qayta belgilangan operatorlar uchun mavjud emas va hech qachon bo'lmaydi.

Xo'sh, qisqa tutashuv bo'lishi mumkin emas, shuning uchun biz birinchi chiqish variantini ololmaymiz (faqat birinchi ), lekin hatto ikkita chiqish liniyasi bo'lgan variant ham farq qilishi yoki bo'lmasligi mumkin! Bir o'ylab ko'ring: bizda funksiya shablonida bir xil kod mavjud bo'lib, u ba'zi shablon argumentlari bilan bitta qoidalar bo'yicha, boshqalari uchun esa butunlay boshqa qoidalar bo'yicha bajariladi.

Buning sababi shundaki, C++ 14 da operatorlar va ularning operandlari uchun kafolatlar operandlar nima ekanligiga qarab farqlanadi. Standartga ko'ra, integral turlar uchun barcha operator kafolatlari ular uchun standartda tasvirlanganidek ishlaydi, lekin bekor qilingan operatorlar uchun funksiya chaqiruvlarini boshqaruvchi qoidalar allaqachon ishlaydi. Bular. bekor qilingan operatorlar uchun ifoda kompilyator tomonidan funksiya chaqiruvlari zanjiriga "qayta yoziladi" va shundan so'ng bunday zanjir uchun belgilangan standart qoidalari qo'llaniladi. Standartdagi operator kafolatlarining hech biri bekor qilingan operatorlarga taalluqli emas..

Oldin tasvirlanganlarning barchasi juda xira rasmni ko'rsatadi: C ++ da ifodalarni baholashda juda ko'p tartibsizlik mavjud. Odamlar bunday narsalarga chidashdan charchaganlari ajablanarli emas va bularning barchasi qandaydir afsonaviy optimallashtirishlar uchun zarur va o'zgartirilmasligi kerakligi haqidagi abadiy bayonotlar etarli asos deb hisoblanishni to'xtatdi. Sog'lom fikr ustunlik qildi va C++ 17 bu tartibsizlikni tozalash uchun bir nechta o'zgarishlarni oldi. Va biz hozir qanday o'zgarishlarni ko'rib chiqamiz.

Yangi buyurtma

C++ 17 tomonidan olib kelingan birinchi o'zgarish buyurtmadir bajarilishi postfiks operatorlari, tayinlash operatorlari va bitli siljish operatorlari. Endi barcha postfiks operatorlari, shuningdek, bitli siljish operatorlari chapdan o'ngga, tayinlash operatorlari esa aksincha, o'ngdan chapga bajariladi. Bu kontekstda "bajarish" deganda men iboraning baholanishini (ya'ni, uning natijasi qaytarilishini) va u bilan bog'liq barcha nojo'ya ta'sirlar sodir bo'lishini nazarda tutyapman.

Endi iboralar qanday tartiblanganligini tushuntirish uchun gapdan misol keltiramiz (quyidagi misolda avval a, keyin b ifodasi bajariladi):

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

Bu erda @ har qanday operator ushbu kontekstda amal qiladi (masalan, + ). Shunday qilib, yangi qoidalarga asoslanib, Stroustrupning C++ 11 bo'yicha kitobida keltirilgan misol nihoyat C++ 17 da to'g'ri bo'ladi va har doim to'g'ri va kutilgan natijani beradi. Ko'rib turganingizdek, yangi qoidalar bir-biriga nisbatan funktsiya argumentlarini bajarish tartibiga ta'sir qilmaydi: ular hali ham istalgan tartibda bajarilishi mumkin, ammo ularning bajarilishi bir-biri bilan aralashib keta olmaydi. Boshqacha qilib aytganda, ular bir-biriga nisbatan buyurtma qilingan, ammo tartib tartibga solinmagan.

Keling, C++ 14 da bizda bo'lgan ba'zi "qiziqarli" misollarni ko'rib chiqaylik NP, lekin C++ 17 da u yo'q edi. Men bu misollarni faqat o'zim iste'mol qilish uchun keltiraman, intervyuda odamlarni ular bilan qiynamaslikni iltimos qilaman.

I=i++; f(++i, ++i) f(i++, i++) massiv = i++ i<< i++ cout << i++ << i++

Ammo bu misollar saqlanib qolmoqda Yangi standartda NP:

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

Chunki arifmetik operatorlarning pastki ifodalarini bajarish tartibini tartibga soluvchi qoidalar qo'shilmagan. Lekin bu haqiqat Ushbu misollardan NP yo'qolganligi sizning kodingizni shunga o'xshashlar bilan to'ldirish vaqti kelganligini anglatmaydi - yo'q. Ushbu misollarning har biri diqqat bilan e'tibor va bunday emasligini isbotlashni talab qiladi NP. Bular. Bunday kodni ko'rgan har qanday dasturchi to'xtashga, eslab qolishga (yoki standartga ko'tarilishga) va uning oldida to'g'ri kodni ko'rishiga ishonch hosil qilishga majbur bo'ladi. Kod "aqlli" bo'lmasligi kerak, kod tushunarli bo'lishi kerak. Bundan tashqari, iboralarning bunday birikmasi aslida juda oz narsani beradi.

Aytgancha, diqqatli o'quvchi chiziq ko'rinishini payqagan bo'lishi kerak<< i++ << i++ в вышеприведённых примерах, и если он не знает обо всех правилах и поверил автору, то он наверняка воспользовался такой логикой: пример переписывается как

cout.operator<<(i++).operator<<(i++)

keyin yangi qoidalar. shuning uchun kod yo'q NP. Bunday mulohazalar mantiqiy ko'rinadi, lekin butunlay to'g'ri emas. Aslida, hamma narsa oddiyroq: misol, albatta, kompilyator tomonidan men bergan narsaga "qayta yozilgan", lekin ijro tartibi qayta yozishdan oldin tuzilgan! Bular. yangi qoidalarga muvofiq haddan tashqari yuklangan operatorlar o'rnatilgan operatorlar uchun bajarish qoidalariga bo'ysunadi, hech bo'lmaganda pastki ifodalarni baholash tartibi bo'yicha. Shuning uchun, operatorning chap operandiga asoslanadi<< вычисляется до правого у нас и нет Koddagi NP.

Ma'lum bo'lishicha, bizda endi o'rnatilgan va haddan tashqari yuklangan operatorlar uchun ifodalarni bajarish tartibida va oldingi bo'limdagi misolimizda tafovut yo'q:

Shablon bool cleverFun(T& qiymati) (qaytish (cout<< "first\n", value++) && (cout << "second\n", value++); }

har qanday turdagi uchun har doim birinchi va keyin ikkinchi chiqadi. Ishlab chiqarishning teskari tartibi endi standart tomonidan chiqarib tashlanadi. Bu, albatta, juda muhim yangilik bo'lib, undan nima hosil bo'lishi haqida emas, balki yozilgan kod haqida fikr yuritish imkonini beradi. Shunisi qiziqki, ushbu yangilik haddan tashqari yuklangan operatorni aniq va yashirin chaqirish o'rtasidagi farqni yaratdi. Bir misolni ko'rib chiqing:

#o'z ichiga oladi std nom maydonidan foydalanish; class SomeClass (friend int operator<<(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"; };

Birinchi natija 4 bo'lishi kafolatlangan, ikkinchisi esa 2 yoki 4 bo'lishi mumkin. Bu misol C++ 17 da haddan tashqari yuklangan operatorning aniq va yashirin chaqirilishi o'rtasidagi farqni yaxshi ko'rsatadi.

Shubhasiz, yangi tartibning kiritilishi bilan turli xil murakkab iboralar paydo bo'ldi Oldingi standartlardagi NPlar endi amal qiladi, ammo bu ularning kodda ommaviy ravishda paydo bo'lishini anglatmaydi. Bu shunchaki ular bo'lgani uchun bo'lmasligi kerak murakkab, va tushunish qiyin bo'lgan hamma narsadan qochish kerak. Lekin yangi qoidalar bizga nafaqat f(i++, i++) kabi funksiyalarni buzilgan dasturni olishdan qo‘rqmasdan chaqirish imkoniyatini beradi. Yangi qoidalar C++ kodiga yanada qat'iylik va tartibni beradi, buning natijasida, boshqa narsalar qatori, biz endi qo'ng'iroqlar zanjiri bilan ishonchli kod yozishimiz mumkin (aniq yoki yashirin, bu muhim emas).

Garchi men Stroustrup kitobidagi kod haqida bir oz "fi" deb aytgan bo'lsam ham, men zanjirga qarshi emasman va agar biz imperativ tillar yordamida yozilgan zamonaviy kodni ko'rib chiqsak, unda tobora ko'proq zanjirlar mavjudligini ko'rishimiz mumkin (masalan, LINQ va Task+ContinueWith C# dan yoki Lodash/pastki chiziq va Promise+ keyin JS dan). C++ ham shu yo‘nalishda harakat qilmoqda va biz tez orada Range-v3 va kelajak+ keyin kelajakdagi C++ standartlarida yuqoridagi misollarga ekvivalentlarini ko‘ramiz. Ammo yangi standartlar chiqarilishidan oldin ham biz interfeysi qo'ng'iroqlar zanjiridan foydalanishni rag'batlantiradigan turli xil kutubxonalardan foydalanishimiz mumkin.

Umuman olganda, mening fikrimcha, iboralarni baholash qoidalarining o'zgarishi C++ 17-dagi eng muhim yangiliklardan biri bo'lib, uni kam odam sezadi, chunki hamma narsa (yoki deyarli hamma narsa) xuddi shunday ishlaydi. sog'lom fikrga. Va har kuni C++ standartida ko'proq va ko'proq sog'lom fikr mavjud.

Nusxalashni minimallashtirish

C++ tilini o'rganishning birinchi qadamlaridan biri nusxa ko'chirish konstruktorini o'rganishdir. Axir, uning yordami bilan nima va qachon ko'chirilganligini osongina aniqlashingiz mumkin. Bular. biz o'z sinfimizni yozamiz, u erda nusxa ko'chirish konstruktorini qo'shamiz, unda biz cout orqali chiqishni yozamiz va chiqishdan zavqlanamiz, natijada biz qancha nusxa yaratganimizni bilib olamiz.

Harakat semantikasining paydo bo'lishi bilan vaziyat biroz murakkablashdi, shuning uchun to'liqlik uchun biz endi harakat konstruktorini yaratishimiz kerak. Lekin bu bo'lim uchun, bu muhim emas, chunki. Quyidagilarning barchasi nusxa ko'chirish va ko'chirish uchun to'g'ri keladi.

Masalan, quyidagi kodni yozamiz:

#o'z ichiga oladi std nom maydonidan foydalanish; sinf SomeClass ( ommaviy: SomeClass() = sukut; SomeClass (const SomeClass&) ( cout<< "Copy ctor called.\n"; } }; SomeClass meReturn() { return SomeClass{}; } int main() { auto some = meReturn(); };

Agar biz ushbu kodni C++ 14 ni amalga oshiradigan kompilyatorda tuzsak va dasturni ishga tushirsak, ekranda “Copy ctor called.” iborasi necha marta paydo bo'ladi? Nol, bir yoki ikki martami? To'g'ri javob: noma'lum.

Javob kutilmagan bo'lganlar tushuntirishga loyiqdir, endi biz unga murojaat qilamiz. Shunday qilib, yangi boshlanuvchilar uchun standartni ochamiz va bu erda maksimal nusxalar soni qancha ekanligini ko'rib chiqamiz Balki yaratilishi. Bu erda mumkin bo'lgan eng katta nusxalar soni 2: birinchi nusxasi return operatori bajarilganda, ikkinchi nusxasi esa ba'zi ob'ekt tuzilganda yaratiladi. Ammo agar siz ushbu kodni ko'proq yoki kamroq zamonaviy kompilyatorda ishlatsangiz (qo'shimcha kalitlar yo'q!), siz ikki tomonlama chiqishni ko'rmaysiz; ko'proq ehtimoliy natija yo bitta satr, yoki umuman chiqmaydi. Endi biz funktsiyamiz kodini biroz o'zgartiramiz, bu ikkinchi variant bo'ladi:

SomeClass meReturn() ( SomeClass some(); ba'zilarini qaytaring; )

Agar biz ushbu kodni mashhur kompilyatorlarda bajarsak, chiqish o'zgarishi yoki o'zgarmasligi mumkin (u MSVC 2017 da, disk raskadrovka rejimida o'zgaradi). Va nihoyat, biz funktsiya kodini biroz ko'proq o'zgartiramiz, faqat bu safar chiqish o'zgarishi kafolatlanadi (birinchi variantga nisbatan va kompilyatorlarning hozirgi holatini hisobga olgan holda):

SomeClass meReturn() ( SomeClass some(); agar (false) SomeClass(); bir qismini qaytarsa; )

Demak, funktsiya barcha variantlarda bir xil, ammo xatti-harakatlar boshqacha - bu erda nima sodir bo'lmoqda? Boshlamoq. C++ standartiga ko'ra, ba'zi hollarda kompilyator ob'ektdan nusxa ko'chirmasligi mumkin; bu holat deyiladi nusxa o'tkazib yuborish(Kompyuter, inglizcha nusxa elision). Nusxa o'tkazib yuborishga ruxsat yoki yo'qligini aniqlash uchun ishlatilishi mumkin bo'lgan xususiyatlarning to'liq (qisqa) ro'yxati class.copy/p31 da tasvirlangan. Bizni ikkita o'xshash, ammo baribir boshqacha vaziyat qiziqtiradi.

Asl misolda bizning funksiyamiz vaqtinchalik qiymatni qaytaradi nomsiz ob'ekt. Bunday vaziyatda kompilyator ikkala nusxani ham tashlab qo'yishi va ob'ektni to'g'ridan-to'g'ri ba'zilarida yaratishi mumkin. Bu holat xalq orasida mashhur Qaytish qiymatini optimallashtirish(OVZ, eng. Qaytish qiymatini optimallashtirish). Agar biz gcc/clang/MSVC ga qarasak, bunday funktsiya uchun ular ikkala nusxadan ham xalos bo'lishini va shuning uchun chiqish bo'sh bo'lishini ko'rishimiz mumkin.

Ushbu optimallashtirish nafaqat qaytish uchun, balki vaqtinchalik, nomsiz ob'ekt bilan ishga tushirilgan boshqa joylar uchun ham ruxsat etiladi. Shunday qilib, agar sizda meAccept(SomeClass()) kabi nomli void meAccept(SomeClass) funksiyasi bo'lsa, kompilyator ortiqcha nusxani o'tkazib yuborishi mumkin.

Endi biz yaratgan ikkinchi variantga o'tamiz nomli stekdagi ob'ekt. Gcc/clang uchun chiqish o'zgarmadi, lekin MSVC uchun (disk raskadrovka rejimida) chiqishda bitta qator paydo bo'ldi, bu holda MSVC faqat ikkinchi nusxadan xalos bo'lganligi aniq. Yuqorida aytilganlarga asoslanib, kompilyator shaxsiy kompyuterdan ham foydalanishi aniq bo'ladi, ammo bu erda u biroz boshqacha mezon bo'yicha sodir bo'ladi: u nusxa ko'chirishdan xalos bo'lish huquqiga ega. nomli funksiyadan qaytariladigan stekdagi ob'ekt. Ushbu optimallashtirish xalq orasida mashhur Qaytish qiymatini optimallashtirish deb nomlangan(OIVZ, qaytish qiymatini optimallashtirish deb ataladi).

Ushbu optimallashtirish kompilyator uchun qiyinroq, biz buni uchinchi variantda ko'ramiz, bu erda biz mutlaqo foydasiz if qo'shdik, bu esa uchta asosiy kompilyatorni o'tishga va nusxa olishga majbur qildi. Shunday qilib, OIV oddiy OIVdan ko'ra ko'proq "mo'rt" optimallashtirishdir va kodda bir nechta turli xil qaytishlar mavjud bo'lganda, u odatda o'chiriladi. Bu nima uchun funktsiyada faqat bitta qaytish bo'lishi kerakligi haqidagi argumentlardan biridir (argument juda ishonarli deb ayta olmayman).

Qizig'i shundaki, yuqoridagi optimallashtirishlar kompilyatorlarda optimallashtirish o'chirilgan holda ham qo'llaniladi (-O0 , /Od ). Bundan tashqari, faqat gcc va clang barcha nusxalarini yaratishga majbur bo'lishi mumkin. Buni amalga oshirish uchun -fno-elide-constructors kalitidan foydalanishingiz kerak va MSVC hech qanday sharoitda ikkita nusxa yaratmaydi va bu xatti-harakatni o'chirish uchun [ommaviy] kalitlar mavjud emas.

Yana bir jihatni aytib o'tish kerak. C++ 14 da kompilyator ikkala nusxani ham olib tashlashi mumkin bo'lsa-da, nusxa ko'chirish konstruktorini bir marta ham bajara olmasa ham, agar bunday konstruktor bo'lmasa, kompilyatsiya xatosini berishi kerak. Bular. agar mavjud nusxa konstruktor o'rniga buni yozsak: SomeClass(const SomeClass&) = o'chirish, keyin kompilyatorlar qonuniy ravishda nusxa ko'chirishdan xalos bo'lganda ham dastur tuzilmaydi - konstruktor hali ham bo'lishi kerak.

Va nihoyat, uchinchi nuqta: harakat. Agar kompilyator nusxani o'tkazib yuborsa, u ko'chirishni o'tkazib yuborishi mumkin. Bular. bu jihatdan ular mutlaqo ekvivalentdir. Shu munosabat bilan, aytmoqchi, bitta qiziqarli vaziyat bog'liq. Ko'pgina dasturchilar (men tarmoqda ko'rgan kodga asoslanib, ko'pchilik haqida xulosa qilaman) ko'chirish semantikasini to'liq tushunmaydi va shunga o'xshash kod yozadi: return std::move(someObject) . Tashqi ko'rinishida kod mutlaqo zararsiz va uni yozgan odam kutganidek ishlaydi, faqat shu kod kafolatlangan OIVZ ni o'chiradi. Sizningcha, bitta arzon ko'chirish konstruktorini qilish yaxshiroqmi yoki umuman hech narsa qilmaslik kerakmi?

yangi haqiqat

Endi C++ 17 da kompyuterga nisbatan nima o'zgarganini ko'rib chiqish vaqti keldi. Ushbu bo'limda biz muhokama qiladigan barcha o'zgarishlarni P0135R1 asl taklifida topish mumkin. Agar siz ushbu hujjatni ko'rib chiqsangiz, unda iboralar toifasi (asosan) bo'yicha standartdagi ko'plab o'zgarishlar tasvirlanganligini ko'rasiz. qiymat), shuningdek, qaerda aniq bajarilishi kerakligini aniqlaydigan turli xil tahrirlar bevosita(to'g'ridan-to'g'ri) va nusxa ko'chirish(nusxa ko'chirish) ishga tushirish. Ushbu butun to'plamdan bizni faqat bitta o'zgarish qiziqtiradi, bu stmt.return/p2 da tasvirlangan.

Shunday qilib, yuqoridagi yangilikka ko'ra, funktsiyaning qaytish turi bilan bir xil turdagi vaqtinchalik nomsiz ob'ektni (prvalue) qaytarish (ya'ni, konvertatsiya qilish shart emas) natijaning nusxa ko'chirish-insializatsiyasini amalga oshiradi (bu dcl. init/p(17.6. 1) , nusxalashni o'tkazib yuborishga imkon beradi). Yuqoridagi jumlada yozilgani aslida bir xil HIA, faqat bu safar majburiy. Bular. C++ 14 kompilyatorida bo'lsa mumkin Bunday holatda nusxa ko'chirish/ko'chirishdan qutuling, endi u kerak qiling. Bu bizga nima beradi, chunki biz kompilyatorning o'zi ajoyib ish qilishini allaqachon ko'rganmiz? Va bu kodga ega bo'lgan bizga quyidagilarni beradi:

SomeClass meReturn() ( SomeClass(); ni qaytaring)

Bizda hech qanday nusxa ko'chirish va ko'chirish konstruktorlari bo'lishi mumkin emas va u hali ham kompilyatsiya qilinadi. Shuni ta'kidlash kerakki, vaqtincha nomlanmagan ob'ektdan boshqa ob'ekt yaratilganda faqat holat o'zgargan, ammo agar biz nomlangan ob'ektni (OIVZ) qaytarsak, kompilyator nusxalashni o'tkazib yuborsa ham, tegishli konstruktorning mavjudligi talab qilinadi. .

Qaytariladigan qiymatlarni emas, balki argumentlarni uzatish bilan bog'liq bo'lgan yana bir narsa bor. Agar bizda ushbu kod bo'lsa:

Void meAccept([] SomeClass s) ( )

Keyin, meAccept(SomeClass()) funksiyasini chaqirganda, nusxa ko'chirish ham bo'lmaydi va bu yana optimallashtirish emas, balki standart talabidir. Bu prvalue ( basic.lval ) taʼrifidagi oʻzgarishlar va bu oʻzgarish nimaga olib kelishi bilan bogʻliq. Keling, ushbu qatorni ajratamiz: meAccept(SomeClass()) . Eski prvalue nuqtai nazaridan, SomeClass() vaqtinchalik ob'ekt bo'lib, keyinchalik u funktsiya parametriga ko'chiriladi. Ammo prvaluening yangi ta'rifi shundaki, u endi yo'q ob'ekt, Lekin ifoda, uning baholashi ob'ektni ishga tushirishdir. Bu biz uchun nimani anglatadi? Bu shuni anglatadiki, biz ko'rib chiqayotgan ifodada SomeClass() vaqtinchalik ob'ekt emas, balki funksiya parametrlarini ishga tushirish ifodasidir. Bu erda dcl.init/p(17.6.1) da ilgari tasvirlangan biz aytib o'tgan qoida kiritilgan va hech qanday nusxa ko'chirilmaydi - ishga tushirish to'g'ridan-to'g'ri amalga oshiriladi.

Bir qarashda, bu juda ahamiyatsiz yangilik, chunki ilgari hamma narsa xuddi shunday sodir bo'lgan, shunchaki kompilyatorlardan buni qilish talab qilinmagan. Biroq, bu yangilik prvalue tushunchasining mohiyatini o'zgartirdi, shuning uchun uni ahamiyatsiz deb hisoblamaslik kerak. Ha, va sof amaliy nuqtai nazardan, siz ushbu o'zgarish haqida bilishingiz kerak, chunki tilni o'rganishda biz uni empirik tarzda o'rganamiz va bu jarayonda nusxa ko'chirish / ko'chirish konstruktorlari bilan tajribalar juda keng tarqalgan. Shunday qilib, C++ 17 dan boshlab, ilgari tasvirlangan misollarda kompilyatorni nusxa olishga majburlashning iloji yo'q. Agar dastur C++ 17 uchun kompilyatsiya qilingan bo'lsa va kompilyator uni qo'llab-quvvatlasa, hech qanday bayroqlar yordam bermaydi. Kundalik kodga kelsak, ushbu yangilik nusxa ko'chirish / ko'chirish konstruktorlari bo'lmagan ob'ektlarni qaytaradigan zavod funktsiyalarini yaratishga imkon beradi. Qancha kerak? Vaqt ko'rsatadi.

lambdalar

Qo'mita lambdalarga bo'lgan sevgisini ko'rsatishda davom etmoqda va standartning har bir yangi tahririda ularga yangi narsalarni qo'shmoqda. 2017 yil ham bundan mustasno emas edi va lambdalar innovatsiyalarning o'z qismini oldilar. Garchi men qisqa sintaksisni kutishda davom etsam ham (masalan, C# ning x => x ) va ushbu standartning yangiliklarini ahamiyatsiz deb bilsam ham, men hali ham ularni aylanib o'ta olmayapman.

Buni suratga olish

Shunday qilib, birinchi yangilik. Endi siz ushbu ko'rsatgich yordamida ob'ekt nusxasini suratga olish ro'yxatiga o'tkazishingiz mumkin. C++ 17 dan oldin, agar biz joriy ob'ektning nusxasini lambdaga o'tkazmoqchi bo'lsak, biz shunday yozishga majbur bo'ldik:

#o'z ichiga oladi std nom maydonidan foydalanish; sinf SomeClass ( umumiy: SomeClass(size_t qiymati): m_Value(qiymat) ( ) void someMethod() ( auto lambda = [_this = *this] ( for(size_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(); };

Ushbu yondashuvning asosiy kamchiligi - biz ko'chirgan ob'ekt nomini aniq ko'rsatish zarurati *this , har safar kirishda. C++ 17 bu kamchilikni quyidagi tarzda yozishga imkon berish orqali tuzatadi:

Avtomatik lambda = [*bu] ( for(size_t i = 0; i< m_Value; ++i) cout << "This is lambda!!!\n"; };

Bular. ob'ekt a'zolariga kirish xuddi shunday tasvirga ega bo'lgan lambda yaratganimiz kabi amalga oshiriladi, lekin bu holda, joriy ob'ekt (ya'ni, bu ko'rsatkich) emas, balki uning nusxasi lambdaga uzatiladi. . Shuni ta'kidlashni istardimki, men bunday kod yozishga majbur bo'lmaganman, shuning uchun men uchun innovatsiyaning foydaliligini baholash qiyin, ammo kimdir uchun yashash osonroq bo'lishi aniq. Men ular uchun faqat xursand bo'lishim va keyingi yangilikka o'tishim mumkin.

Ko'proq doimiylik kerak!

Uzoq vaqtdan beri so'ragan yana bir o'zgarish - doimiy iboralarda lambdalardan foydalanish qobiliyatining qo'shilishi. Albatta, bunday lambdalar ham doimiy bo'lishi kerak. Masalan:

Avtomatik o'n bir = (qaytish 11; ); massiv arr;

Ko'rib turganingizdek, lambda ta'rifida hech narsa o'zgarmadi, lekin uning chaqiruvi kompilyatsiya vaqti konstantasidan foydalanish talab qilinadigan kontekstda qo'llaniladi. Chunki bu kod muvaffaqiyatli tuzilgan bo'lsa, har qanday ehtiyotkor dasturchi lambdadan yaratilgan sinfning operatori() konstexpr a'zosi degan xulosaga kelishi mumkin va bu xulosa shubhasiz to'g'ri. C++ 17 dan boshlab, barcha lambda ifodalari sukut bo'yicha constexpr dir, C++ 17 dan oldin esa ular faqat const edi. Ammo agar lambda funksiyasining tanasi barcha constexpr funktsiyalari bo'ysunadigan mezonlardan kamida bittasiga javob bermasa, ular const ga tushiriladi (mezonlar dcl.constexpr da tasvirlangan). Keling, kodimizga minimal o'zgartirish kiritaylik va lambda endi constexpr bo'lmaydi:

Avtomatik o'n bir = ( int x; qaytish 11; );

Bunday lambda bilan massivni yaratish kodi kompilyatsiya xatosini beradi (bu biz xohlagan narsadir), lekin lambdani yaratishning o'zi xato qilmaydi. Biroq, biz vintlarni tortamiz va lambda yuqoridagi qoidalarga rioya qiladigan tanaga ega bo'lishini talab qilishimiz mumkin:

Avtomatik o'n bir = () constexpr ( int x; qaytish 11; );

E'tibor bering, biz har qanday funktsional yukni ko'tarmaydigan va faqat standartning injiqliklariga xizmat qiladigan aniq constexpr va () ni qo'shishimiz kerak edi. Shunday qilib, biz constexpr kontekstida foydalanish kafolatlangan lambda funksiyalarini yaratishimiz mumkin.

Bu o'zgarish uzoq vaqtdan beri taklif qilingan va hech kimni ajablantirmasligi kerak: oddiy funktsiyalar constexpr bo'lishi mumkin, a'zo funktsiyalar ham bo'lishi mumkin, nima uchun lambdalar yomonroq? Constexpr lambdalari qanchalik zarur? Bu qiziqroq savol. Menimcha, constexpr kodi ularga oddiy kod kerak bo'lganidek kerak. Hozirda C++ da constexpr boom bor: odamlar ishni bajarish vaqtidan kompilyatsiya vaqtiga o'tkazishda kim oldinga borishi mumkinligini bilish uchun raqobatlashmoqda.

Ular JSON tahlilchisi yozish va hatto muntazam ifodalarni bajarishgacha boradi (qiziqadiganlar uchun CppCon2017 videosini tomosha qiling: "Constexpr ALL the Things!"). Bundan tashqari, tobora ko'proq standart (va unchalik emas) algoritmlar constexpr ga aylanib bormoqda, bu esa lambdalarning eng aniq ishlatilishini keltirib chiqaradi, chunki ular oddiygina algoritmlar uchun yaratilgan. Shuning uchun, mening fikrimcha, constexpr qo'shilishi oldinga yaxshi qadam bo'lib, kompilyatsiya vaqtida bajariladigan ko'proq kod yozish imkonini beradi.

Boshqa tomondan, vaqtni kompilyatsiya qilish uchun haqiqatan ham ko'p harakat qilishimiz kerakmi? Albatta, kompilyatsiya vaqtida biror narsa bir nechta dinamik bajarishdan bitta bajarilishiga o'tkazilishi mumkin bo'lsa, bu aniq ortiqcha. Yoki yo'q? Bu vazifa va biz bajarish paytida oladigan foydalarga bog'liq. Biz juda ko'p RAM sarflaydigan va kompilyatsiya vaqtini oshiradigan JSON tahlilchisini yozdik deylik (yuqoridagi videoning kamida oxirgi 3 daqiqasini tomosha qiling), bu bizga nima beradi? Ha, endi biz kompilyatsiya vaqtida konfiguratsiyani tahlil qilishimiz va uni kodda ishlatishimiz mumkin. Axir, biz buni JSON-dan foydalanmasdan ham qilishimiz mumkin edi va bu bajarilish vaqtiga nol yuk bo'lar edi (masalan, sarlavhadagi bayroqlar to'plami). Bu menga soqolli hazilni eslatadi:

Ikki do'st uchrashdi:

— Mashina sotib olganingizni eshitdimmi?

- Ha! Va u qanday yashagan! Endi men hamma narsani qila olaman! Kecha men bir kunda moyni almashtirishga muvaffaq bo'ldim, yangi shinalar sotib oldim, qanotlar uchun avtomobil bozoriga bordim, darhol avtoservisga bordim va ularni almashtirdim, shuningdek, antifriz uchun do'konga bordim. Bularning barchasini mashinasiz qanday qila olaman?

JSON qulayroq ekanligi menga e'tiroz bildirishi mumkin. Tinch qo'y, hamma narsa o'z holidagiday qo'sin; shunday bo'lsin. Keyin o'sha Python (yoki umuman CMake) ga skript qo'shamiz, u biz uchun JSON'dan konfiguratsiya ob'ektini yaratadi. Ha, biz loyihamizni yaratish uchun yana bir qadam qo'shishimiz kerak, lekin JSONni tahlil qiluvchi C++ kodini yozishdan ko'ra qiyinroqmi? Va hech kim kompilyatsiya vaqtini bekor qilmadi (va bu sabab ancha muhimroq deb o'ylayman): agar kodni kompilyatsiya qilish uzoq vaqt talab qilsa, rivojlanish do'zaxga aylanadi. Shunday qilib, murakkab narsalarni constexpr relslariga o'tkazishda hech qanday nuqta ko'rmayapman. Menimcha, bu konferentsiyalarda ko'rsatilishi mumkin bo'lgan keraksiz murakkablik, ammo haqiqiy kodda mutlaqo keraksiz. Kompilyatsiya vaqtini hisoblashdan foydalanish faqat "biz endi qila olamiz!" Deb emas, balki oqlanishi kerak.

Oxirgi ikki xatboshi bu yangilikka bo‘lgan munosabatim haqida noto‘g‘ri fikr bildirishi mumkin: men bunga qarshi emasman, shunchaki mikroskop bilan mix urishga qarshiman, tamom. Ikkinchisining misoli CppCon videosida aniq ko'rinadi, ammo constexpr lambdalarining ko'rinishi albatta yaxshi yangilikdir, chunki lambdalar funktsional jihatdan oddiy funktsiyalardan hech qanday farq qilmasligi kerak - ular bir xil imkoniyatlarga ega bo'lishi kerak va agar mening xotiram o'zgarmadi, qo'shish uchun faqat bitta narsa qoldi: lambdalar uchun shablon parametrlari. Biz ularni C++ 20 da kutyapmizmi?

Har qanday tushunarsiz vaziyatda tinchlaning, yoting, o'zingizni quchoqlang, borib, mazali taomlarni iste'mol qiling. Nervlaringizni ehtiyot qiling :)

O'tmishdagi xatolarni qoldiring.

Haqiqiyni qadrlang.

Kelajakga tabassum qiling

Sizni qiynayotgan vaziyatdan voz kechishingiz bilanoq, vaziyat sizni darhol qo'yib yuboradi.




Vahima qilmang. Sizning yo'qligingizda nima bo'lishi noma'lum.

Daraxtga keling. Bu sizga tinchlik o'rgatadi.

Sizning xotirjamligingizning siri nimada?

"Muqarrarga to'liq rozilik bilan", deb javob berdi usta.

Fikrlaringizda narsalarni tartibga soling - va siz dunyoni boshqa ko'zlar bilan ko'rasiz.

Yuragingizni tozalashni unutmang.

Dam olish nima?

Keraksiz fikrlar yo'q.

Va qanday fikrlar keraksiz?

(Vey Te-Xan)

Sizning eng muhim boyligingiz - qalbingizdagi tinchlik.

Moychechak tinchlantiradi.

Kayfiyatingizni boshqaring, chunki u itoat qilmasa, u buyuradi.


Siz faqat kuzatuvchi bo'lib, hayotning o'tkinchi oqimiga xotirjam qarab turib, tinchlik topishingiz mumkin. Irvin Yalom



Tinchlik hissiyotlardan kuchliroqdir.

Jimlik qichqiriqdan balandroqdir.

Va sizga nima bo'lishidan qat'iy nazar, hech narsani yuragingizga olmang. Dunyoda ozgina narsa uzoq vaqt davomida muhimdir.

Erich Mariya Remark "Arc de Triomphe" ---

Yomg'irga tushib qolsangiz, bundan foydali saboq olishingiz mumkin. Agar kutilmaganda yomg'ir yog'a boshlasa, siz ho'l bo'lishni xohlamaysiz, shuning uchun siz ko'chadan uyingizga yugurasiz. Ammo uyga kelganingizda, siz hali ham ho'l ekanligingizni sezasiz. Agar siz boshidanoq qadamingizni tezlashtirmaslikka qaror qilsangiz, siz ho'l bo'lasiz, lekin siz bezovtalanmaysiz. Boshqa shunga o'xshash vaziyatlarda ham xuddi shunday qilish kerak.

Yamamoto Tsunetomo - Xagakure. Samuray kitob



Ertaga qanday bo'lishi kerak bo'ladi

va bo'lmasligi kerak bo'lgan hech narsa bo'lmaydi -

ovora bo'lmang.

Ichimizda tinchlik bo'lmasa, uni tashqaridan izlash befoyda.

Xavotirlardan xalos bo'lish -
hayotdan zavqlanadi.
Qabul qilish baxtli emas
yo'qotish qayg'urmaydi, chunki u biladi
bu taqdir abadiy emas.
Biz narsalar bilan bog'lanmaganimizda
xotirjamlik to'liq ma'lum.
Agar tana kuchlanishdan tinchlanmasa,
eskiradi.
Agar ruh doimo tashvishda bo'lsa,
u xiralashadi.

Chuang Tzu ---

Agar itga tayoq tashlasangiz, u bu tayoqqa qaraydi. Va agar siz sherga tayoq tashlasangiz, u boshini ko'tarmasdan, uloqtiruvchiga qaraydi. Bu, agar suhbatdosh so'zlarga yopishib qolsa va asosiy narsani ko'rishni to'xtatsa, qadimgi Xitoydagi nizolar paytida aytilgan rasmiy ibora.

Nafas olayotganimda tanam va ongimni tinchlantiraman.
Nafas chiqarar ekanman, tabassum qilaman.
Hozirgi vaqtda bo'lganim uchun, men bu lahzaning ajoyib ekanligini bilaman!

O'zingizga chuqur nafas olishga ruxsat bering va o'zingizni ramkaga tortmang.

Kuch o'z kuchiga ishonganlarga tegishli.

O'z-o'zini kuzatish orqali ruhiy-emotsional holatingizni kuzatish odatini rivojlantiring. Muntazam ravishda o'zingizdan so'rash yaxshidir: "Men hozir xotirjammanmi?" muntazam ravishda o'zingizdan so'rash foydali bo'lgan savol. Siz ham so'rashingiz mumkin: "Hozirda ichimda nima bo'lyapti?"

Ekxart Tolle

Erkinlik - bu tashvishlardan xalos bo'lish. Natijalarga ta'sir qila olmasligingizni tushunib, istaklaringiz va qo'rquvlaringizga e'tibor bermang. Ular kelsin va ketsin. Ularni qiziqish va e'tibor bilan boqmang. Aslida, ishlar siz bilan emas, siz bilan amalga oshiriladi.

Nisargadatta Maxaraj


Inson qanchalik xotirjam va muvozanatli bo'lsa, uning salohiyati qanchalik kuchli bo'lsa, ezgu va savobli ishlardagi muvaffaqiyati shunchalik yuqori bo'ladi. Aqlning xotirjamligi donolikning eng katta xazinalaridan biridir.


Barcha donolikning asosi xotirjamlik va sabr-toqatdir.

Xavotirni to'xtating, shunda siz ajoyib naqshni ko'rishingiz mumkin ...

Aql oromga kelgach, oy nuri va shamol nafasining qadriga yeta boshlaysiz va dunyoviy shov-shuvga hojat yo‘qligini tushunasiz.

Qalbingizda tinchlik toping va atrofingizdagi minglab odamlar qutqariladi.

Siz haqiqatan ham tinchlik va sevgini xohlaysiz. Siz ulardan chiqdingiz, ularga qaytasiz va siz ularsiz. Papaji


Eng go'zal va sog'lom odamlar hech narsadan bezovta bo'lmagan odamlardir.


Inson donoligining eng yuqori darajasi tashqi bo'ronlarga qaramay xotirjamlikni saqlash qobiliyatidir.



Siz tajribangiz bilan bog'lanmaysiz, balki ularga yopishib olasiz.

Shoshilinch qarorlar qabul qilmang. Yaxshi va barcha ijobiy va salbiy tomonlarini torting. Deyarli har bir insonda samoviy yo'lboshchi, ikkinchi "men" bor. O'ylab ko'ring va undan so'rang, o'zingiz rejalashtirgan ishni bajarishga arziydimi yoki yo'qmi?! Kuzatish, ko'rinmas narsalarni ko'rish, vaziyatlarni oldindan bilishni o'rganing.

Tog'li o'rmonlar va toshlar ustidan oqayotgan soylar haqida o'ylaganingizda, dunyoviy axloqsizlik bilan qoplangan yurak asta-sekin tozalanadi. Qadimgi qonunlarni o'qib, qadimgi ustalarning rasmlarini ko'rsangiz, dunyoviy qo'pollik ruhi asta-sekin tarqaladi. Xong Zicheng, ildizlarning ta'mi.


Donolik xotirjam bo'lish qobiliyati bilan birga keladi. Faqat tomosha qiling va tinglang. Boshqa hech narsa kerak emas. Siz xotirjam bo'lganingizda, shunchaki qarab va tinglaganingizda, bu sizning ichingizda tushunchasiz aql-zakovatingizni faollashtiradi. Tinchlik so'z va amallaringizga yo'l bersin.

Ekxart Tolle


Biz ichki dunyoda tinchlikka erishmagunimizcha, hech qachon tashqi dunyoda tinchlikka erisha olmaymiz.

Muvozanatning mohiyati yopishmaslikdir.

Dam olishning mohiyati o'zini tutmaslikdir.

Tabiiylikning mohiyati harakat qilish emas.

Hasad qilmaydigan va hech kimga yomonlikni xohlamagan odam muvozanatga erishadi. Uning uchun butun dunyo baxtga to'la.

Hayot yana gullab-yashnashi, to'lqinlanib, hayajonli quvonch va baxtga to'lishi uchun siz shunchaki to'xtashingiz kerak ... To'xtab, o'zingizga zavqlanishga ruxsat bering ...

Kelajagingiz haqida qayg'urmang, hozir xotirjam bo'ling va hammasi joyiga tushadi.

Agar suv aralashtirilmasa, u o'z-o'zidan cho'kadi. Agar oyna iflos bo'lmasa, u o'z-o'zidan yorug'likni aks ettiradi. Inson qalbini iroda bilan pok qilib bo‘lmaydi. Uni iflos qiladigan narsalarni yo'q qiling, shunda uning pokligi o'zini namoyon qiladi. Xursandchilikni o'zingizdan tashqarida topib bo'lmaydi. Sizni tashvishga soladigan narsalarni yo'q qiling va quvonch o'z-o'zidan qalbingizda hukmronlik qiladi.


Ba'zan narsalarni yolg'iz qoldiring ...

Dovul markazida doim tinch. Dovullar bo'ron bo'lsa ham, markazdagi sokin joy bo'ling.

Sen osmonsan. Qolgan hamma narsa faqat ob-havo.

Faqat sokin suvlarda narsalar buzilmagan holda aks etadi.

Dunyoni idrok etish uchun faqat xotirjam ong mos keladi.

Nima qilishni bilmasangiz, biroz kuting. Jimlikni saqlang. O'zingiz qanday yashasangiz, shunday yashang. Belgisi ertami-kechmi paydo bo'ladi. Asosiysi, siz kutayotganingizni bilish va kutayotganingizni kutib olishga tayyor bo'ling. Luis Rivera

Kelajagingiz haqida qayg'urmang, hozir xotirjam bo'ling va hammasi joyiga tushadi.


Xotirjamlik dushmanlaringizni kuchdan mahrum qiladi. Xotirjamlikda qo'rquv ham, haddan tashqari g'azab ham yo'q - faqat buzilishlardan va hissiy portlashlardan tozalangan haqiqat. Agar siz xotirjam bo'lsangiz, siz haqiqatan ham kuchli bo'lasiz.

Shuning uchun, sizning raqiblaringiz sizni bu holatdan chiqarish uchun har doim bor kuchlari bilan harakat qilishadi - qo'rquvni uyg'otish, shubhalarni ekish, g'azablanish. Ichki holat nafas olish bilan bevosita bog'liq. Qanday vaziyatga tushib qolsangiz, darhol nafasingizni tinchlantiring - ruh keyingi paytda tinchlanadi.


Ma'naviy hayotda eng muhimi, qalbni xotirjam saqlashdir.

Siz hayotga ishonishingiz kerak.
Uning oqimiga qo'rqmasdan ishonib topshirish kerak, chunki hayot bizdan ko'ra cheksiz donodir.
U hali ham sizga o'ziga xos tarzda muomala qiladi, ba'zida juda qattiq,
lekin oxirida siz uning haq ekanligini tushunasiz.

Hozir tinchlaning va hamma narsa joyiga tushadi.

Sizning ruhingiz hayajonlanmasin, og'zingizdan yomon so'z chiqmasin; siz mehr-muhabbatga to'la qalbingiz bilan, hech qanday yashirin yomonlikdan saqlanishingiz kerak; va hatto xayolparastlarni ham mehrli fikrlar, saxovatli fikrlar, chuqur va cheksiz, har qanday g'azab va nafratdan tozalangan holda o'rashingiz kerak. Shunday qilib, shogirdlarim, sizlar harakat qilishingiz kerak.

Faqat sokin suv osmonni to'g'ri aks ettiradi.

Ong darajasining eng yaxshi ko'rsatkichi - bu hayotdagi qiyinchiliklarga xotirjam munosabatda bo'lish qobiliyati.

Ular ongsiz odamni pastga tortadi, ongli odam esa ko'proq va yuqoriga ko'tariladi.

Ekxart Tolle.


Jimgina o'tiring va kundalik tashvishlar qanchalik behuda ekanligini tushunasiz. Bir oz jim turing va siz kundalik nutqlar qanchalik bo'sh ekanligini tushunasiz. Kundalik muammolardan voz keching, shunda odamlar qancha energiyani behuda sarflashlarini tushunasiz. Chen Jizhu.


Tinchlik bizga eng qiyin vaziyatlardan chiqish yo'lini topishga yordam beradi.

Sabringiz tugadimi? ... Yana shishiring!)

3 JIN SONIYA

Hamma narsani tushunish uchun uch soniya xotirjam o'ylash kifoya.

Ularni qaerdan olish mumkin, bu haqiqatan ham uch sokin soniya? Biz o'z xayollarimizdan juda hayajonlanganmiz, hatto bir lahzaga ham to'xtashimiz mumkin emas.


Siz hech qachon stress holatidagi eman daraxtini yoki g'amgin kayfiyatdagi delfinni, o'zini past baholagan qurbaqani, tinchlana olmaydigan mushukni yoki xafagarchilik bilan og'rigan qushni ko'rganmisiz? Ulardan hozirgi kunga chidash qobiliyatini o'rganing.
Ekxart Tolle

Shoshilmang. Har bir kurtak o'z vaqtida ochiladi. Kurtakni gulga aylanishga majburlamang. Gulbarglarini egmang. Ular yumshoq; siz ularni xafa qildingiz. Kuting va ular o'zlarini ochadilar. Shri Shri Ravi Shankar

Osmondagi soqolli odamga, kitobdagi butga sig‘inma. Nafas olish va chiqarishga, yuzingizni silagan qishki shabadaga, metrodagi ertalabki olomonga, shunchaki tirik bo'lish tuyg'usiga, nima bo'lishini hech qachon bilmasdan sig'ing.Begona ko'zda Xudoni ko'r, Vayron bo'lib oddiy ko'nglida. Siz turgan yerga sajda qiling. Har bir kunni ko'z yoshlari bilan raqsga aylantiring, har lahzada ilohiylik haqida o'ylang, har bir narsada mutlaq narsani payqang va odamlar sizni aqldan ozishlariga imkon bering. Ular kulib, hazil qilishsin.

Jeff Foster

Yuqori kuch - bu boshqalarni mag'lub etish qobiliyati emas, balki boshqalar bilan bir bo'lish qobiliyatidir.

Shri Chinmoy

Hech bo'lmaganda ozgina bo'lsa-da, fikringizni keltirmaslikka harakat qiling.
Dunyoga qarang - shunchaki qarang.
"Yoqdi" yoki "yoqmadi" demang. Hech narsa demang.
So'zlarni aytmang, shunchaki qarang.
Aql o'zini noqulay his qiladi.
Aqlim nimadir demoqchi.
Siz shunchaki aqlga aytasiz:
"Jim bo'l, ko'raylik, tomosha qilaman"...

Chen Jirudan 6 dono maslahat

1. Jimgina o'tiring va kundalik tashvishlar qanchalik behuda ekanligini tushunasiz.
2. Bir oz jim turing va kundalik nutqlar qanchalik bo'sh ekanligini tushunasiz.
3. Kundalik muammolardan voz keching, shunda odamlar qancha energiyani behuda sarflashini tushunasiz.
4. Darvozalaringizni yoping, shunda tanishuv rishtalari qanchalik og'ir ekanini tushunasiz.
5. Bir oz istaklarga ega bo'ling, shunda insoniyatning kasalliklari nima uchun juda ko'p ekanligini tushunasiz.
6. Insonparvarroq bo'ling, shunda oddiy odamlar qanchalik ruhsiz ekanini tushunasiz.

Fikringizni fikrlardan ozod qiling.
Yuragingiz tinchlansin.
Dunyodagi notinchlikni xotirjam kuzatib boring
Hammasi joyiga tushishini tomosha qiling ...

Baxtli odamni tanib olish juda oson. U xotirjamlik va iliqlik aurasini tarqatayotganga o'xshaydi, sekin harakat qiladi, lekin hamma narsani uddalaydi, xotirjam gapiradi, lekin hamma uni tushunadi. Baxtli odamlarning siri oddiy - bu keskinlikning yo'qligi.

Agar siz Himoloy tog'larida o'tirgan bo'lsangiz va sizni sukunat o'rab olsa, bu sizniki emas, Himoloylarning sukunatidir. Siz o'zingizning Himoloyingizni topishingiz kerak ...

O'ylangan yaralar boshqa har qanday yaralarga qaraganda ko'proq shifo oladi.

JK Rouling, "Garri Potter va Feniks ordeni"

Donolik xotirjam bo'lish qobiliyati bilan birga keladi.Faqat tomosha qiling va tinglang. Boshqa hech narsa kerak emas. Siz xotirjam bo'lganingizda, shunchaki qarab va tinglaganingizda, bu sizning ichingizda tushunchasiz aql-zakovatingizni faollashtiradi. Tinchlik so'z va amallaringizga yo'l bersin.

Ekxart Tolle "Jimjitlik nima deydi"

Inson qanchalik xotirjam va muvozanatli bo'lsa, uning salohiyati qanchalik kuchli bo'lsa, ezgu va savobli ishlardagi muvaffaqiyati shunchalik yuqori bo'ladi. Aqlning xotirjamligi donolikning eng katta xazinalaridan biridir.

Jeyms Allen

O'zingiz bilan hamjihatlikda yashasangiz, boshqalar bilan til topisha olasiz.

Sharq donoligi -

Siz o'tirasiz - va o'zingiz o'tirasiz; siz boring - va o'zingiz boring.
Asosiysi, behuda shovqin qilmang.

Sizni bezovta qiladigan narsalarga munosabatingizni o'zgartiring, shunda siz ulardan xavfsiz bo'lasiz. (Marcus Aurelius)

E'tiboringizni quyosh pleksusiga qarating. Kichkina quyosh to'pi sizda yonayotganini tasavvur qilishga harakat qiling. U alangalansin, kattaroq va kuchliroq bo'lsin. Uning nurlari sizni yoritib tursin. Quyosh butun tanangizni o'z nurlari bilan to'yintirsin.

Uyg'unlik - hamma narsada tenglik. Agar siz shov-shuv ko'tarmoqchi bo'lsangiz, 10 ga qadar hisoblang va quyoshni "boshlang".

Tinchla, tinchgina :)

Sizni o'rab turgan narsadan kam emas, ichingizda nima sodir bo'layotganiga qiziqing. Agar ichki dunyoda hamma narsa tartibda bo'lsa, tashqi dunyoda hamma narsa joyiga tushadi.

Ekxart Tolle ---

Nodon va nodonning beshta belgisi bor:
sababsiz g'azablangan
keraksiz gapirish
hech qanday sababsiz o'zgartirish
ularga umuman tegishli bo'lmagan narsalarga aralashish,
va kim ularga yaxshilik va kim yomonlikni xohlayotganini qanday ajratishni bilmayman.

Hind maqoli ---

Nima bo'ladi, qo'yib yuboring.
Nima keladi, kelsin.
Sizda o'zingizdan boshqa hech narsa yo'q va hech qachon bo'lmagan.

Agar siz shunchaki ichki sukunatni xotiralar va umidlar bilan ifloslantirmasangiz, voqealarning go'zal naqshini ko'rishingiz mumkin. Xaosni keltirib chiqaradigan sizning tashvishingizdir.

Nisargadatta Maxaraj ---

Baxtga erishishning yagona yo'li bor, bu bizning irodamizdan tashqari narsalar haqida tashvishlanishni to'xtatishdir.

Epiktet ---

O'zimizni qadrlash tuyg'usini yo'qotganimizda, biz daxlsiz bo'lamiz.

Kuchli bo'lish uchun suvdek bo'lish kerak. Hech qanday to'siq yo'q - u oqadi; to'g'on - u to'xtaydi; to'g'on buziladi - u yana oqadi; to'rtburchakli idishda u to'rtburchakdir; dumaloqda - bu dumaloq. Bu juda mos bo'lgani uchun, u eng zarur va eng kuchli hisoblanadi.

Dunyo temir yo'l vokzaliga o'xshaydi, u erda biz doimo kutamiz, keyin shoshilamiz.

Sizning ongingiz va his-tuyg'ularingiz Yurak urishigacha sekinlashganda, siz o'z-o'zidan kosmik ritm bilan uyg'unlikka kirasiz. Siz hamma narsa o'z-o'zidan va o'z vaqtida qanday sodir bo'lishini kuzatib, dunyoni ilohiy ko'zlar bilan idrok qila boshlaysiz. Hamma narsa allaqachon koinot qonuniga moslashganini bilib, siz dunyodan va uning Rabbiysidan farq qilmasligingizni tushunasiz. Bu Ozodlik. Mooji

Biz juda ko'p azob chekamiz. Biz buni juda jiddiy qabul qilamiz. Hamma narsa osonroq bo'lishi kerak. Ammo aql bilan. Nervlar yo'q. Asosiysi, o'ylash. Va ahmoqona ishlarni qilmang.

Siz xotirjam qabul qila oladigan narsa sizni boshqara olmaydi ...

Uni o'zida topa olmaganlar uchun hech kim tinchlik topa olmaydi.

G'azablanish va g'azablanish - bu boshqalarning ahmoqligi uchun o'zini jazolashdan boshqa narsa emas.

Sen osmonsan. Bulutlar esa nima sodir bo'ladi, keladi va ketadi.

Ekxart Tolle

Tinchlikda yashang. Bahor keladi va gullar o'z-o'zidan gullaydi.


Ma'lumki, odam qanchalik xotirjam ko'rinsa, boshqa odamlar unga qarshi turishadi va u bilan kamroq bahslashadilar. Aksincha, agar kishi o'z nuqtai nazarini shiddat bilan himoya qilsa, u bahslashadi va zo'ravonlik bilan qarshilik ko'rsatadi.

Shoshilma. Ovqatlanish vaqtida yenglar, yo'l soati keladi- yo'lga tushing.

Paulo Koelo "Alkimyogar"

Yo'l ko'rsatish, bor narsani qabul qilishni anglatadi. Shunday qilib, siz hayotga ochiqsiz. Qarshilik ichki qisqichdir... . Shunday qilib, siz butunlay yopiqsiz. Ichki qarshilik holatida nima qilsangiz ham (buni salbiy deb ham atash mumkin), u yanada ko'proq tashqi qarshilikka olib keladi va koinot siz tomonda bo'lmaydi, hayot sizga yordam bermaydi. Yopiq panjurlar orqali yorug'lik kirib bo'lmaydi. Ichkariga berilib, kurashni to'xtatsangiz, ongning yangi o'lchovi ochiladi. Agar harakat mumkin bo'lsa ... amalga oshiriladi ... ijodiy aql tomonidan qo'llab-quvvatlanadi ... u bilan ichki ochiqlik holatida siz bir bo'lasiz. Va keyin sharoit va odamlar sizga yordam bera boshlaydi, siz bilan bir bo'lasiz. Baxtli tasodiflar bor. Hammasi sizning foydangizga. Agar harakat qilishning iloji bo'lmasa, siz jang qilmaslik bilan birga keladigan tinchlik va ichki tinchlikdasiz.

Ekxart Tolle Yangi Yer

"Tinchlaning" xabari negadir zerikarli har doim ko'proq.Yana bir paradoks.Odatda bunday qo'ng'iroqdan keyinhech kim tinchlantirishni o'ylamaydi.

Bernard Verber Kassandraning oynasi

Kim o'zini kamtar qilsa, u dushmanlarni mag'lub etdi.

Atoslik Silouan

Tinchlik - Xudoni o'zida saqlaydigan kishi.


Agar siz ahmoq bilan bahslashsangiz, u ham xuddi shunday qiladi.

Insonning haqiqiy kuchi impulslarda emas, balki buzilmas xotirjamlikda.

Inson donoligining eng yuqori darajasi sharoitlarga moslashish va tashqi bo'ronlarga qaramay xotirjamlikni saqlash qobiliyatidir.

Agar siz ularga e'tibor bermasangiz, aralashadigan his-tuyg'ular va fikrlar yo'qoladi. Lama Ole Nidal

Siz nima haqida sukut saqlaganingizdan hech qachon afsuslanmaysiz.
--- Sharq donoligi ---

Bunday ong holatiga intilish kerak, unda barcha hodisalar neytral tarzda qabul qilinadi.

Tinchlik va tartib, umumiy xotirjamlik - bu har bir insonning orzu qilgan holatlari. Bizning hayotimiz asosan belanchakda o'tadi - salbiy his-tuyg'ulardan eyforiyagacha va aksincha.

Muvozanat nuqtasini qanday topish va saqlash kerak, shunda dunyo ijobiy va xotirjam qabul qilinadi, hech narsa bezovtalanmaydi yoki qo'rqitmaydi va hozirgi daqiqa ilhom va quvonch keltiradi? Va uzoq muddatli xotirjamlikni topish mumkinmi? Ha, mumkin! Bundan tashqari, tinchlik bilan birga haqiqiy erkinlik va yashash uchun oddiy baxt keladi.

Bu oddiy qoidalar va ular diniy jihatdan ishlaydi. Siz shunchaki QANDAY o'zgartirish haqida o'ylashni to'xtatib, ularni QO'LLANISHNI boshlashingiz kerak.

1. “Nega men bilan shunday bo‘ldi?” degan savolni to‘xtating. O'zingizga yana bir savol bering: “Qanday ajoyib voqea yuz berdi? Bu menga qanday foyda keltirishi mumkin? ” Yaxshilik bor, faqat uni ko'rish kerak. Har qanday muammo, agar siz buni jazo yoki adolatsizlik sifatida emas, balki imkoniyat deb hisoblasangiz, yuqoridan haqiqiy sovg'aga aylanishi mumkin.

2. Minnatdorchilikni mashq qiling. Har oqshom xulosa: siz yashagan kuningiz uchun "rahmat" aytishingiz mumkin bo'lgan narsalar uchun. Agar xotirjamlik yo'qolsa, sizda bor yaxshi narsalarni va hayotda minnatdor bo'lishingiz mumkin bo'lgan narsalarni eslang.

3. Tanani jismoniy mashqlar bilan yuklang. Esda tutingki, jismoniy tarbiya paytida miya eng faol ravishda "baxt gormonlari" (endorfinlar va enkefalinlar) ishlab chiqaradi. Shuning uchun, agar sizni muammolar, tashvish, uyqusizlik engib o'tsangiz - tashqariga chiqing va bir necha soat yuring. Tez qadam yoki yugurish qayg'uli fikrlardan chalg'itadi, miyani kislorod bilan to'ydiradi va ijobiy gormonlar darajasini oshiradi.

4. "Quvnoq holat" ni ishlab chiqing va o'zingiz uchun baxtli holatni yarating. Tana xotirjamlikni tiklash kerak bo'lganda ajoyib yordam berishi mumkin. Agar siz faqat orqangizni to'g'rilab, elkangizni to'g'rilab, xursandchilik bilan cho'zsangiz va tabassum qilsangiz, bu quvonch hissini "eslab qoladi". O'zingizni bir muncha vaqt ongli ravishda bu holatda ushlab turing, shunda siz boshingizdagi fikrlar tinchroq, ishonchli va baxtli bo'lishini ko'rasiz.

5. O'zingizni bu yerga va hozirga qaytaring. Oddiy mashq tashvishdan xalos bo'lishga yordam beradi: atrofga qarang, ko'rgan narsangizga e'tibor qarating. Rasmni aqliy ravishda "ovozlashni" boshlang, iloji boricha "hozir" va "bu erda" so'zlarini qo'shing. Masalan: “Men hozir ko‘chada ketyapman, bu yerda quyosh porlayapti. Endi men bir odamni ko'rmoqdaman, u sariq gullar ko'tarib yurgan ..." va hokazo. Hayot faqat "hozir" lahzalaridan iborat, buni unutmang.

6. Muammolaringizni bo'rttirib ko'rsatmang. Axir, pashshani ko'zingga yaqin olib kelsang ham, filning o'lchamini oladi-ku! Agar siz uchun qandaydir tajriba yengib bo'lmasdek tuyulsa, go'yo o'n yil o'tib ketgandek o'ylab ko'ring ... Ilgari qancha muammolar bor edi - barchasini hal qildingiz. Shuning uchun, bu muammo ham o'tib ketadi, unga boshingiz bilan sho'ng'imang!

7. Ko'proq kuling. Hozirgi vaziyatda kulgili narsani topishga harakat qiling. Bu ishlamaydi - keyin shunchaki samimiy kulish uchun sabab toping. Qiziqarli filmni tomosha qiling, kulgili voqeani eslang. Kulgining kuchi hayratlanarli! Ko'pincha yaxshi hazildan keyin xotirjamlik qaytadi.

8. Ko'proq kechiring. Xafagarchiliklar o'zing bilan olib yuradigan og'ir, yomon hidli toshlarga o'xshaydi. Bunday yuk bilan qanday xotirjamlik bo'lishi mumkin? Shuning uchun yomonlikni tutmang. Odamlar shunchaki odamlar, ular mukammal bo'lolmaydilar va har doim faqat yaxshilik keltiradilar. Shunday qilib, jinoyatchilarni kechiring va o'zingizni kechiring.

10. Ko'proq muloqot qiling. Ichkarida yashiringan har qanday og'riq ko'payadi va yangi qayg'uli mevalarni keltiradi. Shuning uchun, tajribangizni o'rtoqlashing, ularni yaqinlaringiz bilan muhokama qiling, ularning yordamini qidiring. Esda tutingki, inson yolg'iz qolish uchun mo'ljallanmagan. Tinchlik faqat yaqin munosabatlarda - do'stlik, sevgi, oilada bo'lishi mumkin.

11. Ibodat qiling va meditatsiya qiling. Yomon yovuz fikrlar sizni boshqarishiga yo'l qo'ymang, vahima, og'riq va g'azab seping. Ularni qisqa ibodatlarga o'zgartiring - Xudoga murojaat qilish yoki meditatsiya - o'ylamaslik holati. Ichki suhbatning tartibsiz oqimini to'xtating. Bu yaxshi va barqaror ruhiy holatning asosidir.