Nīnauele nui me Cliff Click, ka makua kāne o JIT compilation ma Java
Cliff Click - CTO o Cratus (IoT sensors no ka hoʻomaikaʻi ʻana i ke kaʻina hana), ka mea nāna i hoʻokumu a me ka hoʻokumu pū ʻana o kekahi mau hoʻomaka (me Rocket Realtime School, Neurensic a me H2O.ai) me nā puka kūleʻa. Ua kākau ʻo Cliff i kāna mea hōʻuluʻulu mua i ka makahiki 15 (Pascal no ka TRS Z-80)! Ua kaulana ʻo ia no kāna hana ma C2 ma Java (ke Kai o Nodes IR). Ua hōʻike kēia mea hōʻuluʻulu i ka honua e hiki iā JIT ke hana i nā code kiʻekiʻe, ʻo ia kekahi o nā kumu i ka puka ʻana mai o Java ma ke ʻano he mea nui o nā papahana polokalamu hou. A laila, kōkua ʻo Cliff iā Azul Systems e kūkulu i kahi pahu nui 864-core me ka polokalamu Java maʻemaʻe e kākoʻo ana i nā hoʻomaha GC ma kahi puʻu 500-gigabyte i loko o 10 milliseconds. Ma keʻano laulā, ua hoʻokō ʻo Cliff i nā hana a pau o ka JVM.
He nīnau nui kēia habrapost me Cliff. E kamaʻilio mākou e pili ana i kēia mau kumuhana:
Ke hoʻololi i nā koho haʻahaʻa haʻahaʻa
Pehea e hana ai i ka refactoring nui
kumu kūʻai
Aʻo haʻahaʻa optimization
Nā hiʻohiʻona kūpono o ka hoʻomaikaʻi ʻana i ka hana
No ke aha e hana ai i kāu ʻōlelo polokalamu ponoʻī
Hana ʻenehana hana
Nā Luʻi ʻenehana
He mea liʻiliʻi e pili ana i ka hoʻokaʻawale inoa a me nā multi-core
ʻO ka pilikia nui loa i ke ola
E alakaʻi ʻia ka nīnauele e:
Andrey Satarina mai Amazon Web Services. I kāna ʻoihana, ua hoʻokō ʻo ia e hana i nā papahana ʻokoʻa loa: ua hoʻāʻo ʻo ia i ka NewSQL i hāʻawi ʻia i ka waihona ma Yandex, kahi ʻōnaehana ʻike ao ma Kaspersky Lab, kahi pāʻani multiplayer ma Mail.ru a me kahi lawelawe no ka helu ʻana i nā kumukūʻai kūʻai haole ma Deutsche Bank. Makemake i ka hoʻāʻo ʻana i ka backend nui a me nā ʻōnaehana puʻupuʻu.
ʻO Vladimir Sitnikov mai Netcracker. He ʻumi makahiki o ka hana ma ka hana a me ka scalability o NetCracker OS, lako polokalamu i hoʻohana ʻia e nā mea lawelawe kelepona e hoʻomaʻamaʻa i nā kaʻina hana hoʻokele pūnaewele a me nā lako hana. Makemake i nā pilikia hana Java a me Oracle Database. ʻO ka mea kākau o ka hoʻomaikaʻi ʻana o ka hana ʻoi aku ma mua o ka hoʻokele PostgreSQL JDBC.
Ke hoʻololi i nā koho haʻahaʻa haʻahaʻa
Andrei: He inoa nui ʻoe ma ka honua o JIT compilation, Java, a me ka hana hana ma ka laulā, ʻeā?
pali: Pela no!
Andrei: E hoʻomaka kākou me kekahi mau nīnau maʻamau e pili ana i ka hana hana. He aha kou manaʻo e pili ana i ka koho ma waena o ka pae kiʻekiʻe a me ka haʻahaʻa haʻahaʻa e like me ka hana ʻana ma ka pae CPU?
pali: ʻAe, maʻalahi nā mea a pau maʻaneʻi. ʻO ka code wikiwiki loa ka mea holo ʻole. No laila, pono mau ʻoe e hoʻomaka mai kahi kiʻekiʻe, e hana i nā algorithms. ʻOi aku ka maikaʻi o ka helu O i ka ʻoi aku ka maikaʻi o ka helu O, ke ʻole ke komo ʻana o kekahi mau mea mau. ʻO nā mea haʻahaʻa e hele hope loa. ʻO ka mea maʻamau, inā ʻoe i hoʻomaikaʻi maikaʻi i ke koena o kāu waihona a aia kekahi mau mea hoihoi i koe, he pae haʻahaʻa kēlā. Akā, pehea e hoʻomaka ai mai kahi kiʻekiʻe? Pehea ʻoe e ʻike ai ua lawa ka hana kiʻekiʻe i hana ʻia? ʻAe... ʻaʻohe ala. ʻAʻohe mea i hoʻomākaukau ʻia. Pono ʻoe e hoʻomaopopo i ka pilikia, e hoʻoholo i kāu mea e hana ai (i ʻole e hana i nā hana kūpono ʻole i ka wā e hiki mai ana) a laila hiki iā ʻoe ke wehe i ka profiler, hiki ke ʻōlelo i kahi mea pono. I kekahi manawa, ʻike ʻoe ua hoʻopau ʻoe i nā mea pono ʻole a ʻo ka manawa kēia e hana ai i kahi hoʻoponopono haʻahaʻa haʻahaʻa. He ʻano kiʻi kūikawā kēia. Nui ka poʻe e hana nei i nā mea pono ʻole, akā e neʻe wikiwiki a ʻaʻohe manawa hopohopo e pili ana i ka huahana. Akā ʻo kēia a hiki i ka wā e kū ʻole ai ka nīnau. ʻO ka maʻamau 99% o ka manawa ʻaʻohe mea e manaʻo i kaʻu hana, a hiki i ka manawa e hele mai ai kahi mea nui ma ke ala koʻikoʻi ʻaʻohe mea e manaʻo ai. A eia ka poʻe a pau e hoʻomaka ana e ʻakaʻaka iā ʻoe e pili ana "no ke aha ʻaʻole i hana maikaʻi ʻia mai ka hoʻomaka ʻana." Ma keʻano laulā, loaʻa mau kahi mea e hoʻomaikaʻi ai i ka hana. Akā ʻo 99% o ka manawa ʻaʻohe āu alakaʻi! Ke ho'āʻo nei ʻoe e hana i kekahi mea a ma ke kaʻina hana ʻoe e ʻike ai i ka mea nui. ʻAʻole hiki iā ʻoe ke ʻike ma mua e pono e kūpono kēia ʻāpana, no laila, ʻoiaʻiʻo, pono ʻoe e hemolele i nā mea āpau. Akā hiki ʻole kēia a ʻaʻole ʻoe e hana. Nui nā mea e hoʻoponopono ai - a he mea maʻamau kēlā.
Pehea e hana ai i ka refactoring nui
Andrei: Pehea ʻoe e hana ai i kahi hana? He pilikia ʻokiʻoki kēia. No ka laʻana, ua hana paha ʻoe i nā pilikia e kū mai ana mai ka hui ʻana o ka nui o nā hana i loaʻa?
pali: Ke hoao nei au e pale aku. Inā ʻike wau he pilikia ka hana, noʻonoʻo wau ma mua o ka hoʻomaka ʻana i ka coding, ʻoi aku hoʻi me nā hoʻolālā ʻikepili. Akā ʻike pinepine ʻoe i kēia mau mea ma hope loa. A laila pono ʻoe e hele i nā hana koʻikoʻi a hana i ka mea aʻu i kapa ai "e kākau hou a lanakila": pono ʻoe e hopu i kahi ʻāpana nui. Pono e kākau hou ʻia kekahi o nā code ma muli o nā pilikia hana a i ʻole kekahi mea ʻē aʻe. ʻO ke kumu o ke kākau hou ʻana i ke code, ʻoi aku ka maikaʻi o ke kākau hou ʻana i kahi ʻāpana nui ma mua o kahi ʻāpana liʻiliʻi. I kēia manawa, haʻalulu nā mea a pau me ka makaʻu: "E kuʻu Akua, ʻaʻole hiki iā ʻoe ke hoʻopā i ka code nui!" Akā ʻoiaʻiʻo, ʻoi aku ka maikaʻi o kēia ala. Pono ʻoe e lawe koke i kahi pilikia nui, e kahaki i kahi pōʻai nui a puni ia a ʻōlelo: E kākau hou wau i nā mea āpau i loko o ka pōʻai. ʻOi aku ka liʻiliʻi o ka palena ma mua o nā mea i loko e pono ke hoʻololi. A inā ʻo ia ka wehewehe ʻana i nā palena e hiki ai iā ʻoe ke hana i ka hana i loko me ka maikaʻi, ua manuahi kou mau lima, e hana i kāu makemake. Ke hoʻomaopopo ʻoe i ka pilikia, ʻoi aku ka maʻalahi o ke kaʻina hana hou, no laila e ʻai nui!
I ka manawa like, ke hana ʻoe i kahi kākau hou nui a ʻike ʻoe e lilo ana ka hana i mea pilikia, hiki iā ʻoe ke hoʻomaka koke e hopohopo no ia. Hoʻololi pinepine kēia i nā mea maʻalahi e like me "ʻaʻole kope i ka ʻikepili, mālama i ka ʻikepili e like me ka hiki, e liʻiliʻi." Ma nā kākau hou nui, aia nā ala maʻamau e hoʻomaikaʻi ai i ka hana. A ʻaneʻane huli lākou i nā ʻikepili.
kumu kūʻai
Andrei: Ma kekahi o nā podcasts āu i kamaʻilio ai e pili ana i nā kumu kūʻai ma ke ʻano o ka huahana. Hiki iā ʻoe ke wehewehe i ke ʻano o kēia?
pali: ʻOiaʻiʻo. Ua hānau ʻia au i kahi au i koʻikoʻi loa ka hana ʻana o ka processor. A ua hoʻi hou kēia au - ʻaʻole me ka hoʻohenehene ka hopena. Ua hoʻomaka wau e noho i nā lā o nā mīkini ʻewalu-bit; ua hana kaʻu kamepiula mua me 256 bytes. Paita pololei. Ua liʻiliʻi loa nā mea a pau. Pono e helu ʻia nā ʻōlelo aʻo, a i ka wā i hoʻomaka ai mākou e neʻe i luna o ka ʻōlelo papahana, ua nui aʻe nā ʻōlelo. Aia ʻo Assembler, a laila Basic, a laila C, a mālama ʻo C i nā kikoʻī he nui, e like me ka hoʻopaʻa inoa ʻana a me ke koho ʻana. Akā, ua maopopo loa nā mea a pau ma laila, a inā wau e kuhikuhi i kahi mea hoʻololi, a laila e loaʻa iaʻu ka ukana, a ʻike ʻia ke kumukūʻai o kēia aʻo. Hoʻopuka ka mīkini i kekahi helu o nā pōʻai mīkini, no laila hiki ke helu ʻia ka wikiwiki o ka hoʻokō ʻana i nā mea like ʻole ma ka hoʻohui ʻana i nā ʻōlelo kuhikuhi a pau āu e holo ai. Hiki ke hoʻohui ʻia kēlā me kēia hoʻohālikelike / ho'āʻo / lālā / kelepona / ukana / hale kūʻai: ʻo ia ka manawa hoʻokō no ʻoe. I ka hana ʻana i ka hoʻomaikaʻi ʻana i ka hana, e hoʻolohe pono ʻoe i nā helu e pili ana i nā pōkole wela liʻiliʻi.
Akā ke hoʻololi koke ʻoe iā Java, Python a me nā mea like, neʻe koke ʻoe mai nā lako haʻahaʻa haʻahaʻa. He aha ke kumu kūʻai o ke kāhea ʻana i kahi kiʻi ma Java? Inā pololei ʻo JIT ma HotSpot inline, e hoʻouka ʻia, akā inā ʻaʻole ia i hana i kēia, he kelepona hana ia. No ka mea aia ke kelepona ma ka loop loop, e hoʻopau ʻo ia i nā loiloi ʻē aʻe a pau i kēlā loop. No laila, eʻoi aku ka nui o ke kumukūʻai maoli. A nalowale koke ʻoe i ka hiki ke nānā i kahi ʻāpana code a hoʻomaopopo pono mākou e hoʻokō iā ia ma ke ʻano o ka wikiwiki o ka uaki, ka hoʻomanaʻo a me ka cache i hoʻohana ʻia. E lilo kēia mau mea i mea hoihoi wale inā komo ʻoe i ka hana.
I kēia manawa ʻike mākou iā mākou iho i kahi kūlana kahi i piʻi ʻole ai ka wikiwiki o ka processor no hoʻokahi mau makahiki. Ua hoʻi mai nā lā kahiko! ʻAʻole hiki iā ʻoe ke hilinaʻi hou i ka hoʻokō ʻana i ka pae hoʻokahi. Akā inā hiki koke ʻoe i ka computing parallel, paʻakikī loa, nānā nā mea a pau iā ʻoe e like me James Bond. He ʻumi ʻumi ka wikiwiki ʻana ma ʻaneʻi ma nā wahi i hana ʻino ai kekahi. Pono ka Concurrency i ka hana nui. No ka loaʻa ʻana o kēlā wikiwiki XNUMXx, pono ʻoe e hoʻomaopopo i ke kumu kūʻai. He aha a ehia ke kumu kūʻai? A no ka hana ʻana i kēia, pono ʻoe e hoʻomaopopo i ke ʻano o ke alelo e pili ana i ka hāmeʻa lalo.
Ua koho ʻo Martin Thompson i kahi huaʻōlelo nui no kāna blog Aloha Mechanical! Pono ʻoe e hoʻomaopopo i ka mea e hana ai ka hāmeʻa, pehea e hana ai ia, a no ke aha ia e hana ai i ka hana mua. Ke hoʻohana nei i kēia, maʻalahi ka hoʻomaka ʻana i ka helu ʻana i nā ʻōlelo aʻo a me ka noʻonoʻo ʻana i kahi e hele ai ka manawa hoʻokō. Inā ʻaʻole ʻoe e aʻo kūpono, e ʻimi wale ana ʻoe i kahi pōpoki ʻeleʻele i loko o kahi lumi pouli. ʻIke au i ka poʻe e hoʻomaikaʻi ana i ka hana i nā manawa a pau ʻaʻole maopopo i kā lākou hana. Ua pilikia nui lākou a ʻaʻole holomua nui. A i koʻu lawe ʻana i ka ʻāpana like o ke code, e hoʻoheheʻe i nā hacks liʻiliʻi a loaʻa i ka wikiwiki ʻelima a ʻumi paha, ua like lākou: maikaʻi, ʻaʻole kūpono, ua ʻike mua mākou ua ʻoi aku ʻoe. Kupaianaha. He aha kaʻu e kamaʻilio nei ... ʻo ke kumu kūʻai e pili ana i ke ʻano o ke code āu e kākau ai a pehea ka wikiwiki o ka holo ʻana ma ka awelika i ke kiʻi nui.
Andrei: A pehea ʻoe e mālama ai i kēlā leo i kou poʻo? Loaʻa kēia me ka ʻike hou aku, a i ʻole? No hea mai ia ʻike?
pali: ʻAe, ʻaʻole i loaʻa iaʻu kaʻu ʻike ma ke ala maʻalahi. Ua hoʻolālā au ma Assembly i nā lā i hiki ai iā ʻoe ke hoʻomaopopo i kēlā me kēia ʻōlelo aʻo. He mea naʻaupō ia, akā mai ia manawa ua mau ke aʻo Z80 i koʻu poʻo, i koʻu hoʻomanaʻo. ʻAʻole wau e hoʻomanaʻo i ka inoa o ka poʻe i loko o hoʻokahi minute o ke kamaʻilio ʻana, akā hoʻomanaʻo wau i ke code i kākau ʻia he 40 mau makahiki i hala. He ʻakaʻaka, me he maʻi lā "ʻepekema hupo".
Aʻo haʻahaʻa optimization
Andrei: Aia kahi ala maʻalahi e komo ai?
pali: ʻAe a ʻaʻole. ʻAʻole i loli nui ka lako a mākou e hoʻohana nei i ka manawa. Hoʻohana ka poʻe āpau i ka x86, koe naʻe nā kelepona Arm. Inā ʻaʻole ʻoe e hana i kekahi ʻano hoʻopili paʻakikī, ke hana nei ʻoe i ka mea like. ʻAe, aʻe. ʻAʻole hoʻi i loli nā kuhikuhi no nā kenekulia. Pono ʻoe e hele a kākau i kekahi mea ma Assembly. ʻAʻole nui, akā lawa e hoʻomaka e hoʻomaopopo. Ke ʻakaʻaka nei ʻoe, akā ke ʻōlelo nei au me ke koʻikoʻi loa. Pono ʻoe e hoʻomaopopo i ka pilina ma waena o ka ʻōlelo a me ka lako. Ma hope o kēlā, pono ʻoe e hele e kākau i kahi liʻiliʻi a hana i kahi mea hoʻopili mea pāʻani liʻiliʻi no kahi ʻōlelo pāʻani liʻiliʻi. E like me ka mea pāʻani, pono e hana ʻia i ka manawa kūpono. Hiki ke maʻalahi loa, akā pono e hana i nā kuhikuhi. ʻO ka hana o ka hoʻokumu ʻana i kahi ʻōlelo aʻo e kōkua iā ʻoe e hoʻomaopopo i ke kumu kūʻai no ke alahaka ma waena o ke code pae kiʻekiʻe e kākau ai nā mea a pau a me ke code mīkini e holo ana ma ka ʻenehana. E puhi ʻia kēia leka i loko o ka lolo i ka manawa i kākau ʻia ai ka mea hoʻopili. ʻO ka mea hoʻopili maʻalahi loa. Ma hope o kēlā, hiki iā ʻoe ke hoʻomaka e nānā iā Java a me ka ʻoiaʻiʻo o ka hohonu o kona chasm semantic, a ʻoi aku ka paʻakikī o ke kūkulu ʻana i nā alahaka ma luna. I Java, ʻoi aku ka paʻakikī o ka hoʻomaopopo ʻana inā maikaʻi a maikaʻi ʻole paha kā mākou alahaka, he aha ka mea e hāʻule ai a ʻaʻole. Akā, pono ʻoe i kahi ʻano hoʻomaka kahi āu e nānā ai i ke code a hoʻomaopopo: "ʻae, pono e hoʻopili ʻia kēia getter i kēlā me kēia manawa." A laila ua ʻike ʻia i kekahi manawa ke hana ʻia kēia, koe wale nō ke kūlana i ka nui o ke ʻano, a hoʻomaka ka JIT i nā mea āpau. Hiki ke wānana koke ka hana o ia mau wahi. Hana maikaʻi nā getters, akā, nānā ʻoe i nā puka wela nui a ʻike ʻoe aia kekahi mau kelepona hana e lana ana ma laila ʻaʻole ʻike i kā lākou hana. ʻO kēia ka pilikia o ka hoʻohana nui ʻana i nā getter, ʻo ke kumu ʻaʻole lākou i hoʻopaʻa ʻia ʻo ia ka maopopo ʻole inā he getter lākou. Inā loaʻa iā ʻoe kahi waihona code liʻiliʻi liʻiliʻi, hiki iā ʻoe ke hoʻomanaʻo a laila ʻōlelo: he getter kēia, a he setter kēia. Ma kahi waihona code nui, ola kēlā me kēia hana i kona mōʻaukala ponoʻī, ʻaʻole i ʻike ʻia e kekahi. Wahi a ka profiler ua nalowale mākou i ka 24% o ka manawa ma kekahi loop a no ka hoʻomaopopo ʻana i ka hana a kēia loop, pono mākou e nānā i kēlā me kēia hana i loko. ʻAʻole hiki ke hoʻomaopopo i kēia me ka ʻole o ke aʻo ʻana i ka hana, a ke hoʻolohi nei kēia i ke kaʻina o ka ʻike. ʻO ia ke kumu ʻaʻole wau e hoʻohana i nā getters a me nā mea hoʻonohonoho, ua hiki au i kahi pae hou!
Ma hea e loaʻa ai ke kumu hoʻohālike? ʻAe, hiki iā ʻoe ke heluhelu i kekahi mea, ʻoiaʻiʻo... Akā, manaʻo wau ʻo ke ala maikaʻi loa ka hana. ʻO ka hana ʻana i kahi mea hōʻuluʻulu liʻiliʻi ʻo ia ke ala maikaʻi loa e hoʻomaopopo ai i ke kumu kūʻai a hoʻokomo iā ia i kou poʻo ponoʻī. ʻO kahi mea hōʻuluʻulu liʻiliʻi e kūpono i ka hoʻonohonoho ʻana i ka microwave kahi hana no ka mea hoʻomaka. ʻAe, ʻo wau, inā loaʻa iā ʻoe nā mākau polokalamu, a laila lawa kēlā. ʻO kēia mau mea āpau e like me ka hoʻopaʻa ʻana i kahi kaula i loaʻa iā ʻoe ma ke ʻano he ʻano huaʻōlelo algebraic, ka unuhi ʻana i nā ʻōlelo aʻoaʻo no ka hana makemakika mai laila mai i ka hoʻonohonoho pololei, lawe i nā waiwai kūpono mai nā papa inoa - hana ʻia kēia mau mea i ka manawa hoʻokahi. A ʻoiai ʻoe e hana ai, e paʻi ʻia ia i loko o kou lolo. Manaʻo wau ua ʻike nā mea a pau i ka hana a ka mea hoʻopili. A e hāʻawi kēia i ka hoʻomaopopo ʻana i ke kumu kūʻai.
Nā hiʻohiʻona kūpono o ka hoʻomaikaʻi ʻana i ka hana
Andrei: He aha nā mea ʻē aʻe āu e hoʻolohe ai i ka wā e hana ai i ka huahana?
pali: Nā hana ʻikepili. Ma ke ala, ʻae, ʻaʻole wau i aʻo i kēia mau papa no ka manawa lōʻihi... Kula Rocket. He leʻaleʻa ia, akā pono ia i ka hoʻoikaika nui, a loaʻa iaʻu kahi ola! OK. No laila, i kekahi o nā papa nui a hoihoi, "Ma hea kahi e hele ai kāu hana," hāʻawi wau i nā haumāna i kahi laʻana: ʻelua a me ka hapa gigabytes o ka ʻikepili fintech i heluhelu ʻia mai kahi faila CSV a laila pono lākou e helu i ka helu o nā huahana i kūʻai ʻia. . ʻIke maʻamau o ka mākeke tick. Ua hoʻololi ʻia nā ʻeke UDP i ke ʻano kikokikona mai ka makahiki 70. Chicago Mercantile Exchange - nā ʻano mea like ʻole e like me ka pata, kulina, soybeans, nā mea like. Pono e helu i kēia mau huahana, ka helu o nā kālepa, ka nui o ka neʻe ʻana o nā kālā a me nā waiwai, etc. He mea maʻalahi ka makemakika kālepa: e ʻimi i ke code huahana (ʻo ia ka 1-2 mau huaʻōlelo i ka papaʻaina hash), e kiʻi i ka nui, hoʻohui i kekahi o nā pūʻulu kālepa, hoʻohui i ka leo, hoʻohui i ka waiwai, a me kekahi mau mea ʻē aʻe. Helu maʻalahi loa. He mea maʻalahi loa ka hoʻokō ʻana i nā mea pāʻani: aia nā mea āpau i kahi faila, heluhelu au i ka faila a neʻe i loko o ia mea, e hoʻokaʻawale i nā moʻolelo pākahi i nā kaula Java, e ʻimi ana i nā mea pono i loko o lākou a hoʻohui iā lākou e like me ka makemakika i hōʻike ʻia ma luna. A hana ia ma kekahi māmā māmā.
Me kēia ʻano, ʻike maopopo ʻia ka mea e hana nei, a ʻaʻole kōkua ka hoʻopili like ʻana, ʻeā? ʻIke ʻia e hiki ke hoʻokō ʻia ka hoʻonui ʻana i ka hana ma ke koho ʻana i nā hoʻolālā ʻikepili kūpono. A he mea kupanaha kēia i nā polokalamu polokalamu ʻike! I koʻu hihia kūikawā, ʻo ka hoʻopunipuni ʻaʻole pono ʻoe e hoʻokaʻawale i ka hoʻomanaʻo i loko o kahi loop wela. ʻAe, ʻaʻole kēia ka ʻoiaʻiʻo holoʻokoʻa, akā ma ka laulā - ʻaʻole pono ʻoe e hōʻike i ka "hoʻokahi i X" inā nui ka X. Inā he ʻelua a me ka hapa gigabytes ʻo X, ʻaʻole pono ʻoe e hoʻokaʻawale i kekahi mea "hoʻokahi ma kēlā me kēia leka", a i ʻole "hoʻokahi ma kēlā me kēia laina", a i ʻole "hoʻokahi ma kēlā me kēia kahua", kekahi mea like. ʻO kēia kahi e hoʻopau ai ka manawa. Pehea e hana ai kēia? E noʻonoʻo iaʻu e kāhea ana String.split() ai ole ia, BufferedReader.readLine(). Readline hana i kahi kaula mai kahi pūʻulu paita i hiki mai ma luna o ka pūnaewele, hoʻokahi no kēlā me kēia laina, no kēlā me kēia o nā haneli miliona o nā laina. Lawe au i kēia laina, hoʻopau a hoʻolei aku. No ke aha wau e kiola aku ai - ʻo ia, ua hana mua wau, ʻo ia wale nō. No laila, no kēlā me kēia byte i heluhelu ʻia mai kēia 2.7G, e kākau ʻia ʻelua mau huaʻōlelo i ka laina, ʻo ia hoʻi, ʻo 5.4G, ʻaʻole pono wau iā lākou no kekahi mea hou aku, no laila ua kiola ʻia lākou. Inā ʻoe e nānā i ka bandwidth hoʻomanaʻo, hoʻouka mākou i ka 2.7G e hele ana i loko o ka hoʻomanaʻo a me ka kaʻa hoʻomanaʻo i loko o ke kaʻina hana, a laila ʻelua ka nui o ka hoʻouna ʻana i ka laina e waiho ana i ka hoʻomanaʻo, a pau kēia mau mea i ka wā i hana ʻia ai kēlā me kēia laina hou. Akā, pono wau e heluhelu, heluhelu ka lakohana, ʻoiai inā pau nā mea a pau ma hope. A pono wau e kākau i lalo no ka mea ua hana wau i kahi laina a ua piha nā cache - ʻaʻole hiki i ka cache ke hoʻokomo iā 2.7G. No laila, no kēlā me kēia byte aʻu i heluhelu ai, heluhelu au i ʻelua paita hou aʻe a kākau i ʻelua paita hou aʻe, a i ka hopena, loaʻa iā lākou kahi ratio 4: 1 - ma kēia ratio ke hoʻopau nei mākou i ka bandwidth hoʻomanaʻo. A laila ʻike ʻia inā hana wau String.split() - ʻaʻole kēia ka manawa hope aʻu e hana ai i kēia, aia paha he 6-7 mau māla i loko. No laila, ʻo ke code maʻamau o ka heluhelu ʻana i ka CSV a laila hoʻopau i nā kaula i hopena i kahi hoʻomanaʻo bandwidth hoʻomanaʻo ma kahi o 14:1 pili i ka mea āu e makemake ai e loaʻa. Inā hoʻolei ʻoe i kēia mau koho, hiki iā ʻoe ke loaʻa i ka wikiwiki ʻelima.
A ʻaʻole paʻakikī loa. Inā ʻoe e nānā i ke code mai ke kihi ʻākau, e maʻalahi nā mea āpau ke ʻike ʻoe i ka pilikia. ʻAʻole pono ʻoe e hoʻōki i ka hoʻokaʻawale ʻana i ka hoʻomanaʻo: ʻo ka pilikia wale nō ke hoʻokaʻawale ʻoe i kahi mea a make koke ia, a ma ke ala e puhi ai i kahi kumuwaiwai koʻikoʻi, ʻo ia ka bandwidth memory. A ʻo kēia mau mea a pau i ka hāʻule ʻana o ka huahana. Ma ka x86 pono ʻoe e puhi ikaika i nā pōʻaiapili kaʻina hana, akā eia ʻoe i puhi i ka hoʻomanaʻo āpau ma mua. ʻO ka hopena e hoʻemi i ka nui o ka hoʻokuʻu.
ʻO ka ʻaoʻao ʻē aʻe o ka pilikia, inā e holo ʻoe i ka profiler i ka wā e pau ai ka ʻōpala hoʻomanaʻo, i ka wā e hiki mai ai, ke kali nei ʻoe i ka hoʻi ʻana mai o ka cache no ka mea ua piha i ka ʻōpala āu i hana ai, kēlā mau laina āpau. No laila, e lohi ana kēlā me kēia ukana a hale kūʻai paha, no ka mea ke alakaʻi nei lākou i nā hala huna - ua lohi ka cache holoʻokoʻa, e kali ana no ka haʻalele ʻana o ka ʻōpala. No laila, e hōʻike wale ka profiler i ka leo pumehana i hoʻopili ʻia ma ka loop holoʻokoʻa - ʻaʻohe ʻōlelo wela kaʻawale a i ʻole kahi i loko o ke code. Ka walaʻau wale. A inā ʻoe e nānā i nā pōʻai GC, he Generation Young lākou āpau a wikiwiki loa - microseconds a i ʻole milliseconds maximum. Ma hope o nā mea a pau, make koke kēia hoʻomanaʻo. Hoʻokaʻawale ʻoe i nā piliona gigabytes, a ʻoki ʻo ia iā lākou, a ʻokiʻoki iā lākou, a ʻoki hou iā lākou. Hiki koke kēia mau mea a pau. Ua ʻike ʻia aia nā pōʻai GC maʻalahi, ka leo mahana ma ka pōʻai holoʻokoʻa, akā makemake mākou e kiʻi i ka wikiwiki 5x. I kēia manawa, pono e pani kekahi mea ma kou poʻo a kani: "no ke aha kēia?!" ʻAʻole i hōʻike ʻia ka overflow memo i loko o ka debugger maʻamau; pono ʻoe e holo i ka mīkini hoʻokō counter debugger a ʻike iā ʻoe iho a pololei. Akā ʻaʻole hiki ke kānalua pololei ʻia kēia mai kēia mau hōʻailona ʻekolu. ʻO ke kolu o ka hōʻailona ke nānā aku ʻoe i kāu mea e hōʻike ai, e nīnau i ka profiler, a pane ʻo ia: "Ua hana ʻoe i hoʻokahi piliona lālani, akā ua hana manuahi ka GC." Ke hiki koke mai kēia, ʻike ʻoe ua hana ʻoe i nā mea he nui a puhi i ke ala hoʻomanaʻo holoʻokoʻa. Aia kekahi ala e ʻike ai i kēia, akā ʻaʻole maopopo.
Aia ka pilikia i loko o ka ʻikepili: ʻo ke ʻano kūlohelohe i lalo o nā mea āpau, nui loa, ʻo 2.7G ia ma ka disk, no laila ʻaʻole makemake ʻia ke kope ʻana i kēia mea - makemake ʻoe e hoʻouka koke iā ia mai ka pūnaewele byte buffer. i loko o nā papa inoa, i ʻole e heluhelu-kākau i ka laina i hope a i hope ʻelima manawa. ʻO ka mea pōʻino, ʻaʻole hāʻawi ʻo Java iā ʻoe i kahi waihona ma ke ʻano he ʻāpana o ka JDK. Akā, he mea liʻiliʻi kēia, ʻeā? ʻO ka mea nui, ʻo ia nā laina 5-10 o ke code e hoʻohana ʻia no ka hoʻokō ʻana i kāu mea hoʻoili kaula i hoʻopaʻa ʻia, e hana hou ana i ke ʻano o ka papa string, ʻoiai ʻo ia ka mea e hoʻopili ai a puni ka byte buffer lalo. ʻO ka hopena, ua ʻike ʻoe e hana ana ʻoe me he mea lā me nā kaula, akā ʻo ka ʻoiaʻiʻo ke neʻe nei nā kuhikuhi i ka buffer ma laila, ʻaʻole kope ʻia nā bytes maka ma nā wahi āpau, a no laila ua hoʻohana hou ʻia nā buffers like ʻole, a ʻOliʻoli ka ʻōnaehana hana e lawe iā ʻoe iho i nā mea i hoʻolālā ʻia, e like me ka huna ʻana i ka pale pālua o kēia mau byte buffers, a ʻaʻole ʻoe e wili hou i kahi kahawai pau ʻole o ka ʻikepili pono ʻole. Ma ke ala, maopopo iā ʻoe i ka wā e hana pū ai me GC, ua hōʻoia ʻia ʻaʻole ʻike ʻia kēlā me kēia hoʻomanaʻo hoʻomanaʻo e ka mea hana ma hope o ka pōʻaiapuni GC hope? No laila, ʻaʻole hiki ke loaʻa kēia mau mea a pau i loko o ka cache, a laila loaʻa kahi 100% i hōʻoia ʻia. Ke hana nei me ka pointer, ma ka x86, e unuhi ana i ka papa inoa mai ka hoʻomanaʻo ʻana he 1-2 mau pōʻaiapuni o ka uaki, a ke hana ʻia kēia, uku ʻoe, uku, uku, no ka mea, pau ka hoʻomanaʻo. ʻEWA huna huna - a ʻo kēia ke kumukūʻai o ka hoʻokaʻawale hoʻomanaʻo. Waiwai maoli.
I nā huaʻōlelo ʻē aʻe, ʻo ka hoʻolālā ʻikepili ka mea paʻakikī loa e hoʻololi. A ʻike ʻoe ua koho ʻoe i ka hoʻolālā ʻikepili hewa e pepehi i ka hana ma hope aku, maʻamau ka nui o nā hana e hana ʻia, akā inā ʻaʻole ʻoe, e ʻoi aku ka hewa. ʻO ka mea mua, pono ʻoe e noʻonoʻo e pili ana i nā ʻōnaehana data, he mea nui kēia. ʻO ke kumukūʻai nui ma ʻaneʻi e hāʻule i nā hale ʻikepili momona, e hoʻomaka ana e hoʻohana ʻia ma ke ʻano o "Ua kope au i ka ʻikepili ʻikepili X i ka ʻikepili ʻikepili Y no ka mea makemake wau i ke ʻano o Y." Akā ʻo ka hana kope (e like me ka mea ʻuʻuku) e hoʻopau maoli i ka bandwidth hoʻomanaʻo a ma laila kahi i kanu ʻia ai nā manawa hoʻopau pau ʻole. Inā loaʻa iaʻu kahi kaula nui o JSON a makemake wau e hoʻohuli iā ia i kumu lāʻau DOM o POJO a i ʻole kekahi mea, ʻo ka hana o ka hoʻopaʻa ʻana i kēlā kaula a kūkulu i ka POJO, a laila komo hou i ka POJO ma hope, e hopena i ke kumu kūʻai ʻole - ʻo ia. ʻaʻole kūʻai. Inā ʻaʻole ʻoe e holo a puni nā POJO ma mua o kou holo ʻana a puni kahi kaula. Ma waho aʻe, hiki iā ʻoe ke hoʻāʻo e hoʻokaʻawale i ke kaula a unuhi wale i kāu mea e pono ai mai laila, me ka hoʻololi ʻole ʻana iā ia i POJO. Inā loaʻa kēia mau mea a pau ma ke ala e koi ʻia ai ka hana kiʻekiʻe, ʻaʻohe POJOs no ʻoe, pono ʻoe e ʻeli pololei i ka laina.
No ke aha e hana ai i kāu ʻōlelo polokalamu ponoʻī
Andrei: Ua ʻōlelo ʻoe no ka hoʻomaopopo ʻana i ke kumu kūʻai, pono ʻoe e kākau i kāu ʻōlelo liʻiliʻi ponoʻī...
pali: ʻAʻole he ʻōlelo, akā he mea hōʻuluʻulu. ʻO ka ʻōlelo a me ka mea hōʻuluʻulu ʻelua mau mea like ʻole. Aia ka ʻokoʻa nui loa i kou poʻo.
Andrei: Ma ke ala, i koʻu ʻike, ke hoʻāʻo nei ʻoe i ka hana ʻana i kāu mau ʻōlelo ponoʻī. He aha ke kumu?
pali: No ka mea hiki ia'u! Ua hoʻomaha au, no laila ʻo kaʻu mea leʻaleʻa. Ua hoʻokō wau i nā ʻōlelo a nā poʻe ʻē aʻe i koʻu ola a pau. Ua hana nui au i kaʻu ʻano coding. A no ka mea, ʻike wau i nā pilikia ma nā ʻōlelo ʻē aʻe. ʻIke wau aia nā ala maikaʻi e hana ai i nā mea maʻamau. A e hoʻohana wau iā lākou. Ua luhi wau i ka ʻike ʻana i nā pilikia i loko oʻu iho, ma Java, ma Python, ma kekahi ʻōlelo ʻē aʻe. Ke kākau nei au i kēia manawa ma React Native, JavaScript a me Elm ma ke ʻano he leʻaleʻa ʻaʻole e pili ana i ka hoʻomaha, akā no ka hana ikaika. Kākau pū wau ma Python a, ʻoi aku paha, e hoʻomau i ka hana ma ke aʻo ʻana i ka mīkini no nā backends Java. Nui nā ʻōlelo kaulana a loaʻa iā lākou nā hiʻohiʻona hoihoi. Maikaʻi nā kānaka a pau i ko lākou ala ponoʻī a hiki iā ʻoe ke hoʻāʻo e hoʻohui i kēia mau hiʻohiʻona a pau. No laila, ke aʻo nei au i nā mea hoihoi iaʻu, ke ʻano o ka ʻōlelo, ke hoʻāʻo nei e hoʻopuka i nā semantics kūpono. A hiki i kēia manawa ke holomua nei au! I kēia manawa ke hakakā nei au me nā semantics hoʻomanaʻo, no ka mea makemake wau e like me C a me Java, a loaʻa i kahi kumu hoʻomanaʻo ikaika a me nā semantics hoʻomanaʻo no nā ukana a me nā hale kūʻai. I ka manawa like, e loaʻa i ka ʻano ʻano inference e like me Haskell. Maʻaneʻi, ke hoʻāʻo nei au e hoʻohui i ka ʻano like me Haskell me ka hana hoʻomanaʻo ma C a me Java. ʻO kēia kaʻu e hana nei no nā mahina 2-3 i hala, no ka laʻana.
Andrei: Inā kūkulu ʻoe i kahi ʻōlelo e lawe i nā ʻano ʻoi aku ka maikaʻi mai nā ʻōlelo ʻē aʻe, manaʻo paha ʻoe e hana ʻē kekahi: e lawe i kou mau manaʻo a hoʻohana iā lākou?
pali: ʻO kēia ke ʻano o nā ʻōlelo hou! No ke aha i like ai ʻo Java me C? No ka mea, he hua'ōlelo maikaʻi ko C i hoʻomaopopo ʻia e nā mea a pau a ua hoʻoikaika ʻia ʻo Java e kēia syntax, hoʻohui i ke ʻano palekana, array bounds checking, GC, a ua hoʻomaikaʻi lākou i kekahi mau mea mai C. Ua hoʻohui lākou i kā lākou iho. Akā ua hoʻoikaika nui ʻia lākou, ʻeā? Kū nā kānaka a pau ma luna o nā poʻohiwi o nā pilikua i hele mai ma mua ou - pēlā ka holomua.
Andrei: E like me kaʻu i hoʻomaopopo ai, e hoʻomanaʻo ʻia kāu ʻōlelo. Ua noʻonoʻo paha ʻoe e pili ana i ka hoʻokō ʻana i kahi mea e like me ka hōʻaiʻē hōʻaiʻē mai Rust? Ua nānā ʻoe iā ia, pehea kou manaʻo iā ia?
pali: ʻAe, ua kākau wau iā C no nā makahiki, me kēia malloc āpau a me ka manuahi, a me ka mālama lima ʻana i ke ola. ʻIke ʻoe, ʻo 90-95% o ka manawa ola i hoʻokele lima ʻia he ʻano like. A he mea ʻeha loa ka hana lima ʻana. Makemake au e haʻi wale aku ka mea hōʻuluʻulu iā ʻoe i nā mea e hana nei ma laila a me nā mea āu i hoʻokō ai me kāu mau hana. No kekahi mau mea, hana ka mea hōʻaiʻē hōʻaiʻē i kēia ma waho o ka pahu. A pono e hōʻike i ka ʻike, hoʻomaopopo i nā mea āpau, ʻaʻole hoʻi e hoʻokaumaha iaʻu i ka hōʻike ʻana i kēia ʻike. Pono ia e hana ma ka liʻiliʻi loa o ka hoʻopalekana pakele kūloko, a inā hāʻule wale ia, a laila pono ia e hoʻohui i nā ʻano annotations e wehewehe i ke ola - a ʻoi aku ka paʻakikī o ia ʻano ma mua o ka mea hōʻaiʻē hōʻaiʻē, a i ʻole kekahi mea nānā hoʻomanaʻo. ʻO ka koho ma waena o "maikaʻi nā mea a pau" a "ʻAʻole maopopo iaʻu kekahi mea" - ʻaʻole, pono e loaʻa kahi mea maikaʻi aʻe.
No laila, e like me ka mea nāna i kākau i nā code he nui ma C, manaʻo wau ʻo ka loaʻa ʻana o ke kākoʻo no ka mana o ke ola maʻamau ka mea nui loa. Ua hānai pū wau i ka nui o ka hoʻohana ʻana o Java i ka hoʻomanaʻo a ʻo ka hoʻopiʻi nui ʻo ka GC. Ke hoʻokaʻawale ʻoe i ka hoʻomanaʻo ma Java, ʻaʻole ʻoe e hoʻihoʻi i ka hoʻomanaʻo i kū i ka wahi i ka pōʻai GC hope loa. ʻAʻole kēia ka hihia ma nā ʻōlelo me ka hoʻokele hoʻomanaʻo pololei. Inā kāhea ʻoe i ka malloc, loaʻa koke iā ʻoe ka hoʻomanaʻo i hoʻohana mau ʻia. Hana mau ʻoe i kekahi mau mea no ka manawa pōkole me ka hoʻomanaʻo a hoʻihoʻi koke iā ia. A hoʻi koke ia i ka wai malloc, a huki hou i ka pōʻai malloc hou. No laila, hoʻemi ʻia ka hoʻohana ʻana i ka hoʻomanaʻo maoli i ka hoʻonohonoho o nā mea ola i ka manawa i hāʻawi ʻia, a me nā leaks. A inā ʻaʻole leak nā mea a pau ma kahi ʻano ʻino loa, pau ka hapa nui o ka hoʻomanaʻo i nā caches a me ka mea hana, a hana wikiwiki ia. Akā makemake nui i ka hoʻokele hoʻomanaʻo manual me ka malloc a me ka manuahi i kāhea ʻia ma ke ʻano kūpono, ma kahi kūpono. Hiki i ka Rust ke mālama pono i kēia ma kāna iho, a i nā manawa he nui e hāʻawi i ka hana ʻoi aku ka maikaʻi, no ka mea, ua hōʻemi ʻia ka hoʻohana ʻana i ka hoʻomanaʻo i ka helu helu o kēia manawa - ma mua o ke kali ʻana i ka pōʻai GC aʻe e hoʻokuʻu i ka hoʻomanaʻo. ʻO ka hopena, loaʻa iā mākou kahi ala hoihoi loa e hoʻomaikaʻi i ka hana. A ikaika loa - ʻo wau, ua hana wau i nā mea i ka wā e hoʻoili ai i ka ʻikepili no ka fintech, a ua ʻae kēia iaʻu e loaʻa ka wikiwiki o ʻelima mau manawa. He mea hoʻoikaika nui kēlā, ʻoi aku ka maikaʻi ma kahi honua kahi e wikiwiki ʻole ai nā kaʻina hana a ke kali nei mākou i nā hoʻomaikaʻi.
Hana ʻenehana hana
Andrei: Makemake au e nīnau e pili ana i nā ʻoihana ma ka laulā. Ua kū ʻoe i ka hanohano me kāu hana JIT ma HotSpot a laila neʻe i Azul, ʻo ia hoʻi kahi hui JVM. Akā, ua hana hou mākou ma ka ʻenehana ma mua o ka lako polokalamu. A laila ua hoʻololi koke lākou i ka Big Data and Machine Learning, a laila i ka ʻike hoʻopunipuni. Pehea i hana ai kēia? He mau wahi ʻokoʻa loa kēia o ka hoʻomohala ʻana.
pali: Ua lōʻihi ka lōʻihi o koʻu hoʻolālā ʻana a ua hiki iaʻu ke lawe i nā papa like ʻole. A i ka wā e ʻōlelo ai ka poʻe: “ʻo, ʻo ʻoe ka mea nāna i hana JIT no Java!”, he ʻakaʻaka mau. Akā ma mua o kēlā, ke hana nei au i kahi clone o PostScript - ka ʻōlelo a Apple i hoʻohana mua ai no kāna mau paʻi laser. A ma mua o kēlā, ua hoʻokō au i ka ʻōlelo ʻehā. Manaʻo wau ʻo ke kumuhana maʻamau iaʻu ʻo ka hoʻomohala ʻana i nā mea hana. I koʻu ola a pau, ua hana wau i nā mea hana e kākau ai nā poʻe ʻē aʻe i kā lākou papahana maikaʻi. Akā, ua komo pū wau i ka hoʻomohala ʻana i nā ʻōnaehana hana, nā mea hoʻokele, nā debuggers kernel-level, nā ʻōlelo no ka hoʻomohala ʻana i ka OS, i hoʻomaka i ka mea liʻiliʻi, akā ua lilo ka manawa i mea paʻakikī. Akā ʻo ke kumuhana nui ka hoʻomohala ʻana i nā mea hana. Ua hala kekahi hapa nui o koʻu ola ma waena o Azul a me Sun, a e pili ana i Java. Akā, i koʻu komo ʻana i ka Big Data and Machine Learning, ua kau hou au i koʻu pāpale nani a ʻōlelo aku, "ʻAe, i kēia manawa he pilikia koʻikoʻi kā mākou, a he nui nā mea hoihoi e hana nei a hana nā kānaka." He ala hoʻomohala maikaʻi kēia e hele ai.
ʻAe, makemake nui au i ka hoʻopili helu helu. ʻO kaʻu hana mua ma ke ʻano he haumāna ma C, ma kahi papahana hoʻolaha. Ua hoʻokaʻawale ʻia kēia i ka hoʻopili ʻana ma nā chips Zilog Z80 i hōʻiliʻili i ka ʻikepili no ka OCR analog, i hana ʻia e kahi mea analogue analog maoli. He kumuhana ʻoluʻolu a pupule loa. Akā aia nā pilikia, ʻaʻole i ʻike pololei ʻia kekahi ʻāpana, no laila pono ʻoe e lawe i kahi kiʻi a hōʻike i kahi kanaka i hiki ke heluhelu me ko lākou mau maka a hōʻike i kāna ʻōlelo, a no laila aia nā hana me ka ʻikepili, a me kēia mau hana. loaʻa kā lākou ʻōlelo ponoʻī . Aia kekahi backend i hoʻoponopono i kēia mau mea a pau - Z80s e holo like ana me vt100 terminals e holo ana - hoʻokahi no kēlā me kēia kanaka, a aia kekahi kumu hoʻohālike like ma ka Z80. ʻO kekahi ʻāpana hoʻomanaʻo maʻamau i kaʻana like ʻia e nā Z80 āpau i loko o kahi hoʻonohonoho hoku; Ua kaʻana pū ʻia ka backplane, a ua māhele ʻia ka hapalua o ka RAM i loko o ka pūnaewele, a ʻo kahi hapa ʻē aʻe he pilikino a i ʻole i kahi mea ʻē aʻe. He ʻōnaehana puʻunaue like ʻole paʻakikī me ka hoʻomanaʻo like ʻana. I ka manawa hea kēia ... ʻaʻole hiki iaʻu ke hoʻomanaʻo, ma kahi o ka waena o 80s. He wā lōʻihi loa aku nei.
ʻAe, e manaʻo kākou ua lōʻihi loa nā makahiki he 30 i hala. Beowulf-huihui. Ua like ia mau puʻupuʻu ... No ka laʻana: aia ʻo Ethernet a ua hoʻopili ʻia kāu x86 wikiwiki i kēia Ethernet, a i kēia manawa makemake ʻoe e kiʻi i ka hoʻomanaʻo hoʻomanaʻo hoʻopunipuni, no ka mea ʻaʻohe mea hiki ke hana i ka coding computing distributed, ua paʻakikī loa a no laila aia. he hoʻomanaʻo like ʻole me nā ʻaoʻao hoʻomanaʻo palekana ma x86, a inā ʻoe i kākau i kēia ʻaoʻao, a laila ua haʻi mākou i nā kaʻina hana ʻē aʻe inā lākou e komo i ka hoʻomanaʻo like like, pono ia e hoʻouka ʻia mai iā ʻoe, a pēlā e like me kahi protocol no ke kākoʻo. ua ʻike ʻia ka coherence cache a me ka lako polokalamu no kēia. Manaʻo hoihoi. ʻO ka pilikia maoli, ʻoiaʻiʻo, he mea ʻē aʻe. Ua hana kēia mau mea a pau, akā ua loaʻa koke iā ʻoe nā pilikia hana, no ka mea, ʻaʻohe mea i hoʻomaopopo i nā hiʻohiʻona hana ma kahi pae maikaʻi - he aha nā hiʻohiʻona hoʻomanaʻo i laila, pehea e hōʻoia ai ʻaʻole i pau nā nodes i kekahi i kekahi, a pēlā aku.
ʻO kaʻu mea i loaʻa mai ai ma H2O, ʻo ia ka poʻe hoʻomohala iā lākou iho ke kuleana no ka hoʻoholo ʻana i kahi e hūnā ʻia ai ka parallelism a ma kahi ʻaʻole. Ua loaʻa iaʻu kahi hiʻohiʻona coding i maʻalahi a maʻalahi ke kākau ʻana i nā code hana kiʻekiʻe. Akā paʻakikī ke kākau ʻana i nā code holo mālie, e ʻino. Pono ʻoe e hoʻāʻo koʻikoʻi e kākau i ka code lohi, pono ʻoe e hoʻohana i nā ʻano hana maʻamau. ʻIke ʻia ke code braking i ka nānā mua ʻana. ʻO ka hopena, kākau pinepine ʻoe i ke code e holo wikiwiki ana, akā pono ʻoe e noʻonoʻo i ka mea e hana ai i ka hihia o ka hoʻomanaʻo like. Hoʻopili ʻia kēia mau mea a pau i nā arrays nui a ua like ke ʻano ma laila me nā arrays nui non-volatile ma Java like. ʻO kaʻu manaʻo, e noʻonoʻo e kākau ʻelua mau kaula i kahi ʻano like, lanakila kekahi o lākou, a ʻo kekahi, no laila, nalowale, a ʻaʻole ʻoe i ʻike ʻo wai ia. Inā ʻaʻole lākou e maʻalahi, a laila hiki ke kauoha i nā mea āu e makemake ai - a hana maikaʻi kēia. Manaʻo nui ka poʻe i ka hoʻonohonoho ʻana o nā hana, hoʻokomo lākou i nā wahi kūpono, a manaʻo lākou i nā pilikia hana pili i ka hoʻomanaʻo ma nā wahi kūpono. A i ʻole, e kākau wale lākou i nā code ma ke ʻano o nā puka lou mai ka 1 a i ka N, kahi o N he mau trillion, me ka manaʻolana e hoʻohālikelike ʻia nā hihia paʻakikī a pau - ʻaʻole ia e hana ma laila. Akā ma H2O ʻaʻole kēia ʻo Java a i ʻole Scala; hiki iā ʻoe ke noʻonoʻo iā ia "Java minus minus" inā makemake ʻoe. He ʻano papahana akaka loa kēia a ua like ia me ke kākau ʻana i ka code C a i ʻole Java maʻalahi me nā puka lou a me nā papa. Akā i ka manawa like, hiki ke hana ʻia ka hoʻomanaʻo i nā terabytes. Ke hoʻohana nei au i ka H2O. Hoʻohana wau ia i kēlā me kēia manawa i nā papahana like ʻole - a ʻo ia ka mea wikiwiki loa, ʻoi aku ka wikiwiki o nā manawa ma mua o kāna mau mea hoʻokūkū. Inā ʻoe e hana nei i ka ʻikepili nui me ka ʻikepili columnar, paʻakikī loa ka lanakila ʻana iā H2O.
Nā Luʻi ʻenehana
Andrei: He aha kāu paʻakikī nui loa i kāu ʻoihana holoʻokoʻa?
pali: Ke kūkākūkā nei mākou i ka ʻaoʻao ʻenehana a i ʻole ka ʻenehana o ka pilikia? E ʻōlelo wau ʻaʻole nā pilikia nui loa.
No nā pilikia ʻenehana. Ua lanakila wale au iā lākou. ʻAʻole maopopo iaʻu he aha ka mea nui loa, akā aia kekahi mau mea hoihoi loa i lōʻihi ka manawa, ka hakakā noʻonoʻo. I koʻu hele ʻana i Sun, ua maopopo iaʻu e hana wau i kahi mea hoʻopili wikiwiki, a ʻōlelo mai kekahi pūʻulu o nā poʻe ʻelemakule ma ka pane ʻana ʻaʻole loa wau e kūleʻa. Akā ua hahai au i kēia ala, kākau i kahi mea hoʻopili i lalo i ka mea hoʻopaʻa inoa, a ua wikiwiki loa. ʻOi aku ka wikiwiki e like me C1 hou, akā ʻoi aku ka lohi o ka mea hoʻokaʻawale i kēlā manawa, a i ka nānā ʻana he pilikia nui ka hoʻolālā ʻikepili. Pono wau e kākau i kahi mea hoʻopaʻa inoa kiʻi a ʻaʻole maopopo iaʻu i ka pilikia ma waena o ka code expressiveness a me ka wikiwiki, i ola i kēlā au a he mea nui loa. Ua ʻike ʻia ʻoi aku ka nui o ka ʻikepili ma mua o ka nui o ka cache ma nā x86s o kēlā manawa, a no laila, inā wau i manaʻo mua e hana ka mea hoʻopaʻa inoa i ka 5-10 pakeneka o ka manawa jitter a pau, a laila ʻoiaʻiʻo ua lilo ia. 50 pakeneka.
I ka hala ʻana o ka manawa, ua maʻemaʻe a ʻoi aku ka maikaʻi o ka mea hōʻuluʻulu, ua hoʻōki i ka hana ʻana i nā code weliweli i nā hihia hou aʻe, a ua hoʻomaka ka hana e like me ka mea a C compiler produces. . Inā kākau ʻoe i ke code e like me C, e loaʻa iā ʻoe ka hana e like me C i nā hihia hou aku. A ʻo ka hele ʻana aku, ʻo ka ʻoi aku ka nui o ka loaʻa ʻana o ke code i hui pū ʻia me ka pae C, ua hoʻomaka ka mea hoʻokaʻawale inoa e like me kahi mea piha ... me ka nānā ʻole inā holo wikiwiki a lohi paha kāu code. Ua hoʻomau wau i ka hana ma ka allocator e hana i nā koho maikaʻi aʻe. Ua lilo ʻo ia i lohi a lohi, akā hāʻawi ʻo ia i ka hana maikaʻi a maikaʻi aʻe i nā hihia i hiki ʻole i kekahi ke hoʻokō. Hiki iaʻu ke luʻu i loko o kahi mea hoʻopaʻa inoa, kanu i hoʻokahi mahina o ka hana ma laila, a hiki koke ke hoʻomaka ka code holoʻokoʻa e hoʻokō i ka 5% wikiwiki. Ua hana kēia i kēlā me kēia manawa a ua lilo ka mea hoʻokaʻawale inoa i mea o ka hana noʻeau - makemake nā mea a pau iā ia a inaina paha, a nīnau nā poʻe o ke kula i nā nīnau e pili ana i ke kumuhana "no ke aha i hana ʻia ai nā mea āpau", no ke aha ʻaʻole. laina laina, a he aha ka ʻokoʻa. Hoʻokahi nō ka pane: ʻo kahi mea hoʻokaʻawale i hoʻokumu ʻia i ka kala kala a me ka hana akahele loa me ka code buffer ua like ia me kahi mea kaua lanakila, ʻo ka hui maikaʻi loa ʻaʻole hiki i kekahi ke lanakila. A he mea maopopo ole keia. ʻO nā mea ʻē aʻe a ka mea hōʻuluʻulu e hana ai ma laila he mau mea i aʻo maikaʻi ʻia, ʻoiai ua lawe ʻia lākou i ka pae kiʻekiʻe. Ua hana mau wau i nā mea i manaʻo ʻia e hoʻohuli i ka mea hoʻopili i hana noʻeau. Akā, ʻaʻohe mea kupanaha - koe wale nō ka mea hoʻokaʻawale inoa. ʻO ka hoʻopunipuni ka makaʻala ʻoki ma lalo o ka ukana a, inā hiki mai kēia (hiki iaʻu ke wehewehe i nā kikoʻī hou aku inā makemake ʻoe), ʻo ia ka mea hiki iā ʻoe ke inline me ka ʻoi aku ka ikaika, me ka ʻole o ka hāʻule ʻana ma luna o kahi kink i ka papa hana. I kēlā mau lā, aia kekahi pūʻulu o nā mea hōʻuluʻulu piha piha, i kau ʻia me nā baubles a me nā kīkī, nona nā mea hoʻokaʻawale inoa, akā ʻaʻole hiki i kekahi ke hana.
ʻO ka pilikia inā ʻoe e hoʻohui i nā ʻano e pili ana i ka inlining, hoʻonui a hoʻonui i ka wahi inlining, ʻoi aku ka nui o nā waiwai i hoʻohana ʻia ma mua o ka helu o nā papa inoa, a pono ʻoe e ʻoki iā lākou. Hiki mai ka pae ko'iko'i i ka wā e ha'alele ai ka mea ho'oka'awale, a he mea waiwai kekahi moho maika'i no ke kahe 'ana, e kū'ai aku 'oe i kekahi mau mea hihiu. ʻO ka waiwai o ka inlining ma aneʻi ʻo ia ka nalowale ʻana i kahi hapa o ke poʻo, ke poʻo no ke kāhea ʻana a me ka mālama ʻana, hiki iā ʻoe ke ʻike i nā waiwai i loko a hiki ke hoʻonui hou iā lākou. ʻO ke kumukūʻai o ka inlining ʻo ia ka nui o nā waiwai ola i hoʻokumu ʻia, a inā ʻoi aku ka nui o kāu mea hoʻopaʻa inoa ma mua o ka pono, nalowale koke ʻoe. No laila, pilikia ka hapa nui o nā mea hoʻokaʻawale: ke hele ka inlining i kahi laina, hoʻomaka nā mea āpau o ka honua e ʻoki i lalo a hiki ke hoʻoheheʻe ʻia ka huahana i lalo o ka lua. ʻO ka poʻe e hoʻokō nei i ka compiler e hoʻohui i kekahi mau heuristics: no ka laʻana, e hoʻōki i ka inlining, e hoʻomaka me ka nui o ka nui, no ka mea e hōʻino nā mea āpau. ʻO kēia ke ʻano o ka hana ʻana i kahi kink i ka pakuhi hana - ʻo ʻoe ma ka laina, inline, ulu mālie ka hana - a laila boom! - hāʻule i lalo e like me ka jack swift no ka nui o kou laina. Pēlā i hana ai nā mea a pau ma mua o ka hiki ʻana mai o Java. Pono ʻo Java i ka nui o ka inlining, no laila pono wau e hana i kaʻu mea hoʻokaʻawale i ʻoi aku ka ikaika i mea e pae ai ma mua o ka hāʻule ʻana, a inā nui ʻoe i ka laina, hoʻomaka ia e kahe, akā hiki mai ka manawa "ʻaʻole e kahe hou". He ʻike hoihoi kēia a hiki mai iaʻu mai kahi ʻole, ʻaʻole maopopo, akā ua uku maikaʻi ʻia. Ua lawe au i ka inlining koʻikoʻi a ua lawe iaʻu i nā wahi e hana pū ai ʻo Java a me C. Kokoke loa lākou - hiki iaʻu ke kākau i ke code Java ʻoi aku ka wikiwiki ma mua o ka code C a me nā mea like, akā ma ka awelika, ma ke kiʻi nui o nā mea, ua like lākou. Manaʻo wau he ʻāpana o kēia pono ka mea hoʻokaʻawale inoa, kahi e hiki ai iaʻu ke inline me ka naʻaupō. Hoʻopili wale wau i nā mea a pau aʻu e ʻike ai. ʻO ka nīnau ma aneʻi inā maikaʻi ka hana a ka mea hoʻokaʻawale, inā paha e hana naʻauao ka hopena. He paʻakikī nui kēia: e hoʻomaopopo i kēia mau mea a pau.
He mea liʻiliʻi e pili ana i ka hoʻokaʻawale inoa a me nā multi-core
Владимир: ʻO nā pilikia e like me ka hoʻopaʻa inoa ʻana me he ʻano kumuhana mau loa ʻole. Ke noʻonoʻo nei au inā ua loaʻa kekahi manaʻo i manaʻo hoʻohiki a laila hāʻule i ka hana?
pali: ʻOiaʻiʻo! ʻO ka hoʻokaʻawale inoa ʻana he wahi āu e hoʻāʻo ai e ʻimi i kekahi mau heuristic e hoʻonā i kahi pilikia NP-hoʻopiha. A ʻaʻole hiki iā ʻoe ke hoʻokō i kahi hopena kūpono, pololei? He mea hiki ole keia. Nānā, Ahead of Time compilation - hana maikaʻi ʻole ia. ʻO ke kamaʻilio ʻana ma ʻaneʻi e pili ana i kekahi mau hihia maʻamau. E pili ana i ka hana maʻamau, no laila hiki iā ʻoe ke hele a ana i kahi mea āu e manaʻo ai he hana maʻamau maikaʻi - ma hope o nā mea a pau, ke hana nei ʻoe e hoʻomaikaʻi! ʻO ka hoʻokaʻawale inoa ʻana he kumuhana e pili ana i ka hana. Ke loaʻa iā ʻoe ka prototype mua, hana ia a pena i ka mea e pono ai, hoʻomaka ka hana hana. Pono ʻoe e aʻo i ke ana maikaʻi. No ke aha he mea nui? Inā loaʻa iā ʻoe ka ʻikepili maʻemaʻe, hiki iā ʻoe ke nānā i nā wahi like ʻole a ʻike: ʻae, ua kōkua ʻia ma ʻaneʻi, akā ma laila kahi i haki ai nā mea āpau! Piʻi mai kekahi mau manaʻo maikaʻi, hoʻohui ʻoe i nā heuristic hou a hoʻomaka koke nā mea a pau e hana ʻoi aku ka maikaʻi ma ka awelika. ʻAʻole hoʻomaka. Ua loaʻa iaʻu he mau hihia kahi a mākou e hakakā nei no ka hana ʻelima pakeneka i hoʻokaʻawale i kā mākou hoʻomohala ʻana mai ka mea hoʻokaʻawale mua. A i kēlā me kēia manawa e like me kēia: ma kahi e lanakila ai ʻoe, ma kahi e nalowale ai. Inā loaʻa iā ʻoe nā mea hana loiloi hana maikaʻi, hiki iā ʻoe ke ʻike i nā manaʻo nalowale a hoʻomaopopo i ke kumu o ka hāʻule ʻana. Pono paha e waiho i nā mea a pau e like me ia, a i ʻole e hana koʻikoʻi i ka hoʻoponopono maikaʻi ʻana, a i ʻole e hele i waho a hoʻoponopono i kahi mea ʻē aʻe. He mau mea a pau! Ua hana wau i kēia hack ʻoluʻolu, akā pono wau i kēia, a me kēia, a me kēia - a ʻo kā lākou hui pū ʻana e hāʻawi i kekahi mau hoʻomaikaʻi. A hiki i ka poʻe kaʻawale ke hāʻule. ʻO kēia keʻano o ka hana hana ma nā pilikia NP-hoʻopau.
Владимир: Loaʻa ka manaʻo o nā mea e like me ka pena ʻana i nā mea hoʻokaʻawale he pilikia i hoʻoholo ʻia. ʻAe, ua hoʻoholo ʻia no ʻoe, e noʻonoʻo ana i kāu mea e ʻōlelo nei, no laila, kūpono paha ia ...
pali: ʻAʻole i hoʻoholo ʻia e like me ia. Pono ʻoe e hoʻololi iā ia i "hoʻoholo". Aia nā pilikia paʻakikī a pono e hoʻoponopono ʻia. Pau kēia, ʻo ia ka manawa e hana ai i ka huahana. Pono ʻoe e hoʻokokoke i kēia hana e like me - e hana i nā benchmarks, e hōʻiliʻili i nā metric, e wehewehe i nā kūlana i ka wā i ʻōwili ai ʻoe i kahi mana o mua, hoʻomaka hou kāu hack kahiko (a i ʻole, hoʻōki). Mai haʻalele a hiki i ka loaʻa ʻana o kekahi mea. E like me kaʻu i ʻōlelo ai, inā he mau manaʻo maikaʻi ʻaʻole i hana, akā ma ke kahua o ka hoʻokaʻawale ʻana i nā papa inoa o nā manaʻo he mea pau ʻole ia. Hiki iā ʻoe, no ka laʻana, heluhelu i nā puke ʻepekema. ʻOiai i kēia manawa ua hoʻomaka kēia wahi e neʻe mālie a ʻoi aku ka maopopo ma mua o kona wā ʻōpio. Eia nō naʻe, he nui ka poʻe e hana nei ma kēia kahua a pono ke hoʻāʻo ʻia ko lākou mau manaʻo āpau, ke kali nei lākou a pau ma nā ʻēheu. A ʻaʻole hiki iā ʻoe ke haʻi i ka maikaʻi o lākou ke ʻole ʻoe e hoʻāʻo iā lākou. Pehea ka maikaʻi o kā lākou hoʻohui ʻana me nā mea ʻē aʻe i kāu allocator, no ka mea he nui nā mea a ka mea hoʻokaʻawale, a ʻaʻole e hana kekahi mau manaʻo i kāu allocator kikoʻī, akā ma kahi ʻāpana ʻē aʻe e maʻalahi lākou. ʻO ke ala nui e lanakila ai no ka mea hoʻokaʻawale, ʻo ia ka huki ʻana i nā mea lohi ma waho o ke ala nui a hoʻoikaika iā ia e māhele ma nā palena o nā ala mālie. No laila inā makemake ʻoe e holo i kahi GC, e hele i ke ala lohi, deoptimize, e hoʻolei i kahi ʻokoʻa, nā mea āpau - ʻike ʻoe he mea kakaikahi kēia mau mea. A kakaikahi loa lakou, ua nana au. Hana ʻoe i nā hana ʻē aʻe a hoʻoneʻe ia i ka nui o nā kaohi i kēia mau ala lohi, akā ʻaʻole ia he mea nui no ka mea lohi a kakaʻikahi ka hele ʻana. No ka laʻana, kahi kuhikuhi null - ʻaʻole hiki ke hana, ʻaʻole? Pono ʻoe e loaʻa i nā ala he nui no nā mea like ʻole, akā ʻaʻole pono lākou e hoʻopilikia i ka mea nui.
Владимир: He aha kou manaʻo e pili ana i nā multi-core, ke loaʻa nā kaukani cores i ka manawa hoʻokahi? He mea pono anei keia?
pali: Hōʻike ka holomua o ka GPU he mea pono loa ia!
Владимир: He akamai loa lakou. Pehea e pili ana i nā mea hana maʻamau?
pali: ʻAe, ʻo ia ke kumu hoʻohālike pāʻoihana a Azul. Ua hoʻi mai ka pane i kahi au i makemake nui ai ka poʻe i ka hana wānana. He mea paʻakikī ke kākau i nā code parallel i kēlā manawa. Hiki ke hoʻonui nui ʻia ke kumu hoʻohālike H2O, akā ʻaʻole ia he kumu hoʻohālike maʻamau. ʻOi aku ka laulā ma mua o ka hoʻohana ʻana i kahi GPU. Ke kamaʻilio nei mākou e pili ana i ka paʻakikī o ka hoʻomohala ʻana i ia mea a i ʻole ka paʻakikī o ka hoʻohana ʻana? No ka laʻana, ua aʻo mai ʻo Azul iaʻu i kahi haʻawina hoihoi, kahi haʻawina ʻike ʻole: he mea maʻamau nā huna huna liʻiliʻi.
ʻO ka pilikia nui loa i ke ola
Владимир: Pehea e pili ana i nā pilikia ʻenehana ʻole?
pali: ʻO ka paʻakikī nui loa, ʻaʻole ia e... lokomaikaʻi a maikaʻi i nā kānaka. A ʻo ka hopena, ʻike mau wau iaʻu iho i nā kūlana hakakā. ʻO nā mea aʻu i ʻike ai ua hewa nā mea, akā ʻaʻole maopopo iaʻu pehea e neʻe ai i mua me kēlā mau pilikia a ʻaʻole hiki ke hoʻoponopono iā lākou. Nui nā pilikia no ka wā lōʻihi, e mau ana no nā makahiki he nui, i ala mai ma kēia ʻano. ʻO ka mea i loaʻa iā Java nā C1 a me C2 compilers he hopena pololei o kēia. ʻO ka ʻoiaʻiʻo ʻaʻole i hui pū ʻia nā pae he nui ma Java no nā makahiki he ʻumi i ka lālani he hopena pololei. ʻIke ʻia ua makemake mākou i kēia ʻōnaehana, akā ʻaʻole maopopo ke kumu i loaʻa ʻole ai. Ua loaʻa iaʻu nā pilikia me hoʻokahi ʻenekinia... a i ʻole kahi hui o nā ʻenekinia. I kekahi manawa, i koʻu hoʻomaka ʻana e hana ma Sun, ʻo wau ... ʻAe, ʻaʻole wale ia manawa, loaʻa iaʻu koʻu manaʻo ponoʻī i nā mea āpau. A manaʻo wau he ʻoiaʻiʻo hiki iā ʻoe ke lawe i kēia ʻoiaʻiʻo a haʻi i ke poʻo. ʻOi loa mai koʻu haʻalulu pololei i ka hapa nui o ka manawa. A inā ʻaʻole ʻoe makemake i kēia ʻano hana... ʻoi loa inā maopopo ʻoe i ka hewa a me ka hana ʻole ʻana. ʻOiai hiki i kekahi, e like me aʻu. Ua kūkulu au i koʻu ola holoʻokoʻa ma luna o nā loina meritocratic. Inā hōʻike mai ʻoe iaʻu i kekahi mea hewa, e huli koke wau a ʻōlelo: ua ʻōlelo ʻole ʻoe. I ka manawa like, ʻoiaʻiʻo, ke kala aku nei au a me nā mea a pau, e nānā au i nā pono, inā he, a e hana i nā hana kūpono ʻē aʻe. Ma ka ʻaoʻao ʻē aʻe, haʻihaʻi wau e pili ana i kahi pākēneka weliweli o ka manawa holoʻokoʻa. A ʻaʻole maikaʻi loa ia ma ka pilina me nā kānaka. ʻAʻole wau e hoʻāʻo e maikaʻi, akā ke nīnau nei au i ka nīnau me ka palaka. "ʻAʻole e hana kēia, no ka mea hoʻokahi, ʻelua a ʻekolu." A ua like lākou, "ʻAe!" Aia kekahi mau hopena i ʻoi aku ka maikaʻi o ka haʻalele ʻana: no ka laʻana, nā mea i alakaʻi i ka hemo ʻana mai kaʻu wahine a me nā makahiki he ʻumi o ke kaumaha ma hope o kēlā.
ʻO ka paʻakikī ka hakakā me nā kānaka, me ko lākou ʻike i ka mea hiki iā ʻoe a ʻaʻole hiki ke hana, ka mea nui a me ka mea ʻole. Nui nā pilikia e pili ana i ke ʻano coding. Ke kākau nei au i nā code he nui, a i kēlā mau lā, pono wau e lohi no ka mea ke hana nei au i nā hana like ʻole a hana maikaʻi ʻole, ma kahi o ka nānā ʻana i hoʻokahi. Ke nānā nei i hope, kākau wau i ka hapalua o ke code no ke kauoha Java JIT, ke kauoha C2. ʻO ka mea coder wikiwiki aʻe i kākau i ka hapalua me ka lohi, ʻo ka hapa aʻe me ka lohi, a he emi nui ia. ʻO ka hiku o ka mea ma kēia lālani, ua lohi loa - e hana mau ana! Ua pā au i nā code he nui. Ua nānā au i ka mea nāna i kākau i ka mea, me ka ʻole, ua nānā au i kā lākou code, nānā i kēlā me kēia o lākou, a hoʻomau i ka kākau ʻana iaʻu iho ma mua o kekahi o lākou. ʻAʻole maikaʻi kēia ala me nā kānaka. ʻAʻole makemake kekahi poʻe i kēia. A ke hiki ʻole iā lākou ke mālama, hoʻomaka nā ʻano hoʻopiʻi āpau. No ka laʻana, ua haʻi ʻia iaʻu e hoʻōki i ka coding no ka mea ua kākau nui wau i nā code a ua pilikia ia i ka hui, a ua like ia me he mea hoʻohenehene iaʻu: dude, inā nalowale ke koena o ka hui a hoʻomau wau i ke kākau ʻana i ke code, ʻo ʻoe. E eo wale ana ka hapalua o na hui. Ma ka ʻaoʻao ʻē aʻe, inā e hoʻomau wau i ke kākau ʻana i ke code a nalowale ʻoe i ka hapalua o ka hui, ua like ia me ka hoʻokele maikaʻi ʻole. ʻAʻole wau i noʻonoʻo pono, ʻaʻole wau i kamaʻilio e pili ana, akā aia nō ia ma kahi o koʻu poʻo. Ke wili nei ka manaʻo ma hope o koʻu noʻonoʻo: "Ke hoʻomākeʻaka nei ʻoukou iaʻu?" No laila, ʻo wau ka pilikia nui loa a me koʻu pilina me nā kānaka. I kēia manawa ua ʻoi aku ka maikaʻi o koʻu hoʻomaopopo ʻana iaʻu iho, he alakaʻi au no ka poʻe papahana no ka manawa lōʻihi, a i kēia manawa ke haʻi pololei aku nei au i nā poʻe: ʻike ʻoe, ʻo wau nō wau, a pono ʻoe e hana me aʻu - maikaʻi paha inā kū wau maanei? A i ka wā i hoʻomaka ai lākou e hana me ia, ua hana nā mea a pau. ʻO kaʻoiaʻiʻo, ʻaʻole wau he ʻino a maikaʻi ʻole, ʻaʻohe oʻu manaʻo maikaʻi ʻole a i ʻole manaʻo pilikino, ʻo koʻu ʻano wale nō ia, a pono wau e noho pū me ia.
Andrei: I kēia mau lā i hoʻomaka ai nā mea a pau e kamaʻilio e pili ana i ka ʻike pilikino no ka poʻe introverts, a me nā mākau palupalu ma ka laulā. He aha kāu e ʻōlelo ai no kēia?
pali: ʻAe, ʻo ia ka ʻike a me ka haʻawina aʻu i aʻo ai mai koʻu hemo ʻana me kaʻu wahine. ʻO kaʻu mea i aʻo ai mai ka hemo ʻana, ʻo ia ka hoʻomaopopo ʻana iaʻu iho. ʻO kēia kaʻu i hoʻomaka ai e hoʻomaopopo i nā poʻe ʻē aʻe. E hoʻomaopopo i ka hana ʻana o kēia pilina. Ua alakaʻi kēia i nā ʻike i kēlā me kēia. Ua ʻike ʻia ʻo wai wau a me kaʻu mea e hōʻike nei. He aha kaʻu e hana nei: a i ʻole au e hopohopo nei i ka hana, a i ʻole ke pale aku nei i ka hakakā, a i ʻole kekahi mea ʻē aʻe - a ʻo kēia pae o ka ʻike pilikino e kōkua maoli i ka mālama ʻana iaʻu iho. Ma hope o kēia, ua maʻalahi nā mea a pau. ʻO kahi mea aʻu i ʻike ai ʻaʻole i loko oʻu wale nō, akā i loko o nā mea papahana ʻē aʻe, ʻo ka hiki ʻole ke haʻi i nā manaʻo i ka wā e pilikia ana ʻoe. No ka laʻana, ke noho nei ʻoe i ka coding, i ke ʻano o ke kahe, a laila holo mai lākou iā ʻoe a hoʻomaka i ka uē ʻana i ka hysterics ua haki kekahi mea a i kēia manawa e lawe ʻia nā hana koʻikoʻi iā ʻoe. A ʻaʻole hiki iā ʻoe ke ʻōlelo i kahi huaʻōlelo no ka mea aia ʻoe i kahi kūlana o ke kaumaha. ʻO ka ʻike i loaʻa iā ʻoe e hoʻomākaukau no kēia manawa, ola a neʻe i kahi hoʻolālā hoʻi, a laila hiki iā ʻoe ke hana i kekahi mea. No laila ʻae, ke hoʻomaka ʻoe e ʻike pehea e hana ai nā mea a pau, he hanana hoʻololi ola nui ia.
ʻAʻole hiki iaʻu iho ke loaʻa nā huaʻōlelo kūpono, akā hoʻomanaʻo wau i ke ʻano o nā hana. ʻO ka manaʻo, ʻo kēia pane e like me ke kino e like me ka waha, a pono ʻoe i kahi ākea. ʻO ia wahi, ma ke ʻano Zen. ʻO kēia ka mea pono e wehewehe ʻia, a laila e haʻalele koke i ke kino - e haʻalele i ke kino. Ke noho hāmau wau ma ka waha, hiki iaʻu ke hoʻoponopono i ke kūlana me ka manaʻo. I ka hiki ʻana o ka adrenaline i kou lolo, hoʻololi iā ʻoe i ke ʻano hakakā a lele paha, ʻaʻole hiki iā ʻoe ke ʻōlelo hou i kekahi mea, ʻaʻole - i kēia manawa he naʻaupō ʻoe, he ʻenekini hahau, hiki ʻole ke pane kūpono a hoʻōki paha i ka hoʻouka ʻana, a manuahi ka mea hoʻouka. e hoouka hou aku. Pono ʻoe e lilo hou iā ʻoe iho, e hoʻihoʻi hou i ka mana, e haʻalele i ke ʻano "hakakā a lele".
A no kēia pono mākou i ka waha waha. Wahi kaʻawale wale. Inā ʻōlelo ʻoe i kekahi mea, a laila hiki iā ʻoe ke ʻōlelo pololei i kēlā, a laila e hele a ʻimi maoli i ka "wahi" no ʻoe iho: hele e hele wāwae i ka paka, laka iā ʻoe iho i ka ʻauʻau - ʻaʻole ia he mea nui. ʻO ka mea nui e hoʻokaʻawale i kahi manawa mai kēlā kūlana. Ke hoʻopau ʻoe no kekahi mau kekona liʻiliʻi, hoʻi ka mana, hoʻomaka ʻoe e noʻonoʻo pono. "ʻAe, ʻaʻole wau he ʻano naʻaupō, ʻaʻole wau e hana naʻaupō, he kanaka maikaʻi wau." Ke hiki iā ʻoe ke hōʻoiaʻiʻo iā ʻoe iho, ʻo ia ka manawa e neʻe ai i ka pae aʻe: ʻike i ka mea i hana. Ua hoʻouka ʻia ʻoe, ua hele mai ka hoʻouka ʻana mai kahi āu i manaʻo ʻole ai, he hoʻohālua hoʻopunipuni. He ino keia. ʻO ka hana aʻe e hoʻomaopopo i ke kumu e pono ai ka mea hoʻouka i kēia. ʻOiaʻiʻo, no ke aha? Ma muli paha o kona huhū? No ke aha ʻo ia i huhū ai? No ka laʻana, no ka mea, ua hoʻopiʻi ʻo ia iā ia iho a ʻaʻole hiki ke ʻae i ke kuleana? ʻO kēia ke ala e mālama pono ai i ke kūlana holoʻokoʻa. Akā, pono kēia i ka lumi no ka hoʻololi ʻana, ka lewa waha. ʻO ka hana mua loa, ʻo ia ka hoʻopau ʻana i ka pilina waha. Hōʻalo i ke kūkākūkā me nā huaʻōlelo. Hoʻopau iā ia, e haʻalele koke i ka hiki. Inā he kamaʻilio kelepona, e kau wale i luna - he akamai kēia aʻu i aʻo ai mai ke kamaʻilio ʻana me kaʻu wahine mua. Inā ʻaʻole maikaʻi ke kamaʻilio ʻana, e ʻōlelo wale "aloha" a kau i luna. Mai kēlā ʻaoʻao o ke kelepona: "blah blah blah", pane ʻoe: "ʻae, bye!" a kau i luna. Hoʻopau wale ʻoe i ke kamaʻilio ʻana. ʻElima mau minuke ma hope mai, i ka wā e hoʻi mai ai ka hiki ke noʻonoʻo pono iā ʻoe, ua maʻalili iki ʻoe, hiki ke noʻonoʻo i nā mea āpau, nā mea i hana ʻia a me nā mea e hiki mai ana. A hoʻomaka i ka hoʻokumu ʻana i kahi pane noʻonoʻo, ma mua o ka pane wale ʻana me ka manaʻo. Noʻu, ʻo ka holomua o ka ʻike ponoʻī ʻo ia ka ʻoiaʻiʻo i ka pilikia o ka naʻau ʻaʻole hiki iaʻu ke ʻōlelo. Ke hele nei i waho o kēia mokuʻāina, noʻonoʻo a hoʻolālā i ka pane ʻana a me ka uku ʻana i nā pilikia - ʻo ia nā ala kūpono i ka hihia ke hiki ʻole iā ʻoe ke ʻōlelo. ʻO ke ala maʻalahi ka holo ʻana mai ke kūlana i hōʻike ʻia ai ke kaumaha o ka naʻau a hoʻōki wale i ke komo ʻana i kēia pilikia. Ma hope o laila hiki iā ʻoe ke noʻonoʻo, ke hiki iā ʻoe ke noʻonoʻo, hiki iā ʻoe ke ʻōlelo, a pēlā aku.
Ma ke ala, ma ka ʻaha hoʻokolokolo, hoʻāʻo ka loio kūʻē e hana i kēia iā ʻoe - i kēia manawa ua maopopo ke kumu. No ka mea hiki iā ia ke kāohi iā ʻoe i kahi kūlana ʻaʻole hiki iā ʻoe ke haʻi i kou inoa, no ka laʻana. Ma ke ʻano maoli, ʻaʻole hiki iā ʻoe ke ʻōlelo. Ina e hanaia keia ia oe, a ina oe e ike e loaa ana oe ia oe iho ma kahi o ka hakaka waha, ma kahi e like me ka aha hookolokolo, alaila, hiki ia oe ke hele mai me kou loio. E kū ka loio iā ʻoe a hoʻopau i ka hoʻouka waha, a e hana ia ma ke ʻano kānāwai holoʻokoʻa, a e hoʻi mai ka wahi Zen i nalowale iā ʻoe. No ka laʻana, pono wau e kelepona i koʻu ʻohana i ʻelua mau manawa, ʻoluʻolu loa ka luna kānāwai i kēia, akā ua uē ka loio kūʻē a hoʻōho mai iaʻu, ʻaʻole hiki iaʻu ke loaʻa i kahi huaʻōlelo ma ka edgewise. I kēia mau hihia, ʻoi aku ka maikaʻi o ka hoʻohana ʻana i ka mea uwao iaʻu. Hoʻopau ka mea ʻuwao i kēia kaomi a pau e ninini ana iā ʻoe i kahi kahawai mau, ʻike ʻoe i ka wahi Zen pono, a me ia ka hiki ke kamaʻilio. He kahua ʻike holoʻokoʻa kēia a he nui nā mea e aʻo ai, nui nā mea e ʻike ai i loko ou, a lilo kēia mau mea āpau i nā hoʻoholo hoʻoholo kiʻekiʻe i ʻokoʻa no nā poʻe like ʻole. ʻAʻole i loaʻa i kekahi poʻe nā pilikia i hōʻike ʻia ma luna; ʻo ka mea maʻamau, ʻaʻole i loaʻa i ka poʻe kūʻai ʻoihana. ʻO kēia poʻe a pau e ola nei me nā huaʻōlelo - nā mele kaulana, nā haku mele, nā alakaʻi hoʻomana a me nā poʻe kālai'āina, he mea mau kā lākou e ʻōlelo ai. ʻAʻohe o lākou pilikia, akā loaʻa iaʻu.
Andrei: He ... i manaʻo ʻole ʻia. Nui, ua kamaʻilio nui mākou a ʻo ka manawa kēia e hoʻopau ai i kēia nīnauele. E hui maoli mākou ma ka ʻaha kūkā a hiki ke hoʻomau i kēia kūkākūkā. E ʻike iā ʻoe ma Hydra!