Nīnauele nui me Cliff Click, ka makua kāne o JIT compilation ma Java

Nīnauele nui me Cliff Click, ka makua kāne o JIT compilation ma JavaCliff 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!

Hiki iā ʻoe ke hoʻomau i kāu kamaʻilio ʻana me Cliff ma ka hui ʻo Hydra 2019, e mālama ʻia ma Iulai 11-12, 2019 ma St. E hele mai ʻo ia me kahi hōʻike "ʻO ka ʻike hoʻomanaʻo hoʻomanaʻo ʻo Azul Hardware Transactional Memory". Hiki ke kūʻai ʻia nā tiketi ma ka pūnaewele mau.

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka