{"id":32466,"date":"2019-10-31T21:47:13","date_gmt":"2019-10-31T18:47:13","guid":{"rendered":"https:\/\/prohoster.info\/blog\/kak-my-pereveli-10-millionov-strok-koda-c-na-standart-c-14-a-potom-i-na-c-17\/"},"modified":"2019-10-31T21:47:13","modified_gmt":"2019-10-31T18:47:13","slug":"kak-my-pereveli-10-millionov-strok-koda-c-na-standart-c-14-a-potom-i-na-c-17","status":"publish","type":"post","link":"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/kak-my-pereveli-10-millionov-strok-koda-c-na-standart-c-14-a-potom-i-na-c-17","title":{"rendered":"Hogyan ford\u00edtottunk le 10 milli\u00f3 C++ k\u00f3dsort a C++14 szabv\u00e1nyra (majd k\u00e9s\u0151bb a C++17-re)","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>N\u00e9h\u00e1ny id\u0151vel ezel\u0151tt (2016 \u0151sz\u00e9n) az 1C:Enterprise technol\u00f3giai platform \u00faj verzi\u00f3j\u00e1nak fejleszt\u00e9se sor\u00e1n a fejleszt\u0151csapatban felmer\u00fclt a k\u00e9rd\u00e9s, hogy t\u00e1mogass\u00e1k az \u00faj szabv\u00e1nyt. <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/C%2B%2B14\">C++14<\/a><\/noindex> a k\u00f3dunkban. Az \u00faj szabv\u00e1nyra val\u00f3 \u00e1t\u00e1ll\u00e1s, ahogyan felt\u00e9telezt\u00fck, lehet\u0151v\u00e9 tette, hogy sok dolgot eleg\u00e1nsabban, egyszer\u0171bben \u00e9s megb\u00edzhat\u00f3bban \u00edrjunk, megk\u00f6nny\u00edtve a k\u00f3d karbantart\u00e1s\u00e1t \u00e9s t\u00e1mogat\u00e1s\u00e1t. A ford\u00edt\u00e1sban l\u00e1tsz\u00f3lag nincs semmi k\u00fcl\u00f6n\u00f6s, ha nem vessz\u00fck figyelembe a k\u00f3dalap m\u00e9ret\u00e9t \u00e9s a k\u00f3dunk specifikus jellemz\u0151it.<\/p>\n<p>Akik nem tudj\u00e1k, az 1C:Enterprise egy gyors fejleszt\u00e9si k\u00f6rnyezet a multiplatform \u00fczleti alkalmaz\u00e1sok sz\u00e1m\u00e1ra, \u00e9s runtime, amely lehet\u0151v\u00e9 teszi azok v\u00e9grehajt\u00e1s\u00e1t k\u00fcl\u00f6nb\u00f6z\u0151 oper\u00e1ci\u00f3s rendszereken \u00e9s adatb\u00e1zis-kezel\u0151 rendszereken. \u00c1ltal\u00e1nos \u00e9rtelemben a term\u00e9k tartalmazza:<\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/v8.1c.ru\/overview\/Term_000000885.htm\">Alkalmaz\u00e1s szerver klaszter<\/a><\/noindex>, amely Windows \u00e9s Linux alatt m\u0171k\u00f6dik<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/v8.1c.ru\/overview\/Term_000000124.htm\">\u00dcgyf\u00e9l<\/a><\/noindex>, amely a szerverrel http(s) vagy saj\u00e1t bin\u00e1ris protokollj\u00e1n kereszt\u00fcl kommunik\u00e1l, m\u0171k\u00f6dik Windows, Linux, macOS rendszereken<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/1c\/blog\/315414\/\">Web kliens<\/a><\/noindex>, amely a Chrome, Internet Explorer, Microsoft Edge, Firefox, Safari b\u00f6ng\u00e9sz\u0151kben m\u0171k\u00f6dik (JavaScript nyelven k\u00e9sz\u00fclt)<\/li>\n<li>Fejleszt\u0151i k\u00f6rnyezet (<noindex><a rel=\"nofollow\" href=\"http:\/\/v8.1c.ru\/overview\/Term_000000008.htm\">Konfigur\u00e1tor<\/a><\/noindex>), amely Windows, Linux, macOS rendszereken m\u0171k\u00f6dik<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/v8.1c.ru\/overview\/Term_000000813.htm\">Adminisztr\u00e1ci\u00f3s eszk\u00f6z\u00f6k<\/a><\/noindex> alkalmaz\u00e1s szerverekhez, amelyek Windows, Linux, macOS rendszereken m\u0171k\u00f6dnek<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/wonderland.v8.1c.ru\/blog\/mobilnyy-klient\/\">Mobil klien<\/a><\/noindex>, amely http(s) kapcsolaton kereszt\u00fcl csatlakozik a szerverhez, mobil eszk\u00f6z\u00f6k\u00f6n Android, iOS, Windows alatt m\u0171k\u00f6dik<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/1c\/blog\/283198\/\">Mobil platform<\/a><\/noindex> \u2014 keretrendszer offline mobilalkalmaz\u00e1sok l\u00e9trehoz\u00e1s\u00e1hoz szinkroniz\u00e1l\u00e1si lehet\u0151s\u00e9ggel, Android, iOS, Windows rendszereken m\u0171k\u00f6dik<\/li>\n<li>Fejleszt\u0151i k\u00f6rnyezet <noindex><a rel=\"nofollow\" href=\"http:\/\/v8.1c.ru\/overview\/IDE\/\">1C:Enterprise Fejleszt\u0151i Eszk\u00f6z\u00f6k<\/a><\/noindex>, Java nyelven \u00edr\u00f3dott<\/li>\n<li>Szerver <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/1c\/blog\/422903\/\">Interakci\u00f3s rendszerek<\/a><\/noindex><\/li>\n<\/ul>\n<p>\nMaksimumra t\u00f6reksz\u00fcnk, hogy egyetlen k\u00f3dot \u00edrjunk k\u00fcl\u00f6nb\u00f6z\u0151 OS-ekhez \u2014 a szerver k\u00f3dalap 99%-ban k\u00f6z\u00f6s, az \u00fcgyf\u00e9l pedig k\u00f6r\u00fclbel\u00fcl 95%-ban. Az 1C:Enterprise technol\u00f3giai platform f\u0151k\u00e9nt C++ nyelven \u00edr\u00f3dott, \u00e9s az al\u00e1bbiakban felt\u00fcntetett k\u00f3d jellemz\u0151i:<\/p>\n<ul>\n<li>10 milli\u00f3 sor C++ k\u00f3d,<\/li>\n<li>14 ezer f\u00e1jl,<\/li>\n<li>60 ezer oszt\u00e1ly,<\/li>\n<li>f\u00e9lmilli\u00f3 met\u00f3dus.<\/li>\n<\/ul>\n<p>\n\u00c9s mindezt a C++14-re kellett ford\u00edtani. Arr\u00f3l, hogy ezt hogyan csin\u00e1ltuk \u00e9s mikkel tal\u00e1lkoztunk a folyamat sor\u00e1n, ma fogunk besz\u00e9lni.<\/p>\n<p><img decoding=\"async\" alt=\"Hogyan ford\u00edtottunk le 10 milli\u00f3 C++ k\u00f3dsort a C++14 szabv\u00e1nyra (majd k\u00e9s\u0151bb a C++17-re)\" src=\"\/wp-content\/uploads\/2019\/04\/7f9270bc37fa9fd462ac9efbb12f0764.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>Megjegyz\u00e9s<\/h3>\n<p>\nMinden, amit az al\u00e1bbiakban \u00edrtunk a lass\u00fa\\\/gyors m\u0171k\u00f6d\u00e9sr\u0151l, a (nem) nagy mem\u00f3riafogyaszt\u00e1s\u00fa standard oszt\u00e1lyok megval\u00f3s\u00edt\u00e1s\u00e1r\u00f3l k\u00fcl\u00f6nb\u00f6z\u0151 k\u00f6nyvt\u00e1rakban, egyet jelent: ez r\u00e1nk igaz. Lehet, hogy az \u00d6n feladataihoz a standard megval\u00f3s\u00edt\u00e1sok a legjobban megfelelnek. Mi a saj\u00e1t feladatainkra alapozva dolgoztunk: tipikus \u00fcgyf\u00e9ladatokat haszn\u00e1ltunk, tipikus forgat\u00f3k\u00f6nyveken futtattuk \u0151ket, figyelt\u00fck a sebess\u00e9get, a mem\u00f3riafogyaszt\u00e1st stb., \u00e9s elemezt\u00fck, hogy ezek az eredm\u00e9nyek megfelelnek-e sz\u00e1munkra \u00e9s \u00fcgyfeleink sz\u00e1m\u00e1ra. Ennek megfelel\u0151en j\u00e1rtunk el.<\/p>\n<h3>Ami n\u00e1lunk volt<\/h3>\n<p>\nKezdetben a 1C:Enterprise 8 platform k\u00f3dj\u00e1t a Microsoft Visual Studio alatt \u00edrtuk. A projekt a 2000-es \u00e9vek elej\u00e9n indult, \u00e9s csak Windows verzi\u00f3nk volt. Term\u00e9szetesen az\u00f3ta a k\u00f3d akt\u00edvan fejl\u0151d\u00f6tt, sok mechanizmus teljesen \u00fajra\u00edr\u00e1sra ker\u00fclt. De a k\u00f3d 1998-as szabv\u00e1ny szerint k\u00e9sz\u00fclt, \u00e9s p\u00e9ld\u00e1ul a jobboldali sz\u00f6gletes z\u00e1r\u00f3jelek k\u00f6z\u00f6tt voltak sz\u00f3k\u00f6z\u00f6k a sikeres ford\u00edt\u00e1s \u00e9rdek\u00e9ben, \u00edgy:<\/p>\n<pre><code class=\"cpp\">vector&lt;vector &gt; IntV;<\/code><\/pre>\n<p>\n2006-ban, a 8.1-es verzi\u00f3 kiad\u00e1s\u00e1val elkezdt\u00fck t\u00e1mogatni a Linuxot, \u00e9s \u00e1tt\u00e9rt\u00fcnk egy harmadik f\u00e9lt\u0151l sz\u00e1rmaz\u00f3 standard k\u00f6nyvt\u00e1rra <noindex><a rel=\"nofollow\" href=\"http:\/\/www.stlport.org\/\">STLPort<\/a><\/noindex>. Az \u00e1tt\u00e9r\u00e9s egyik oka a sz\u00e9les karakterl\u00e1ncokkal val\u00f3 munka volt. A k\u00f3dunkban sz\u00e9les k\u00f6rben haszn\u00e1ljuk a std::wstring-et, amely a wchar_t t\u00edpusra alapoz. Windows alatt a m\u00e9rete 2 byte, m\u00edg Linux alatt alap\u00e9rtelmez\u00e9s szerint 4 byte. Ez inkonzisztenci\u00e1hoz vezetett a kliens \u00e9s a szerver k\u00f6z\u00f6tti bin\u00e1ris protokolljaink, valamint k\u00fcl\u00f6nb\u00f6z\u0151 tart\u00f3s adatok k\u00f6z\u00f6tt. A gcc opci\u00f3ival meg lehet adni, hogy a wchar_t m\u00e9rete is 2 byte legyen a ford\u00edt\u00e1s sor\u00e1n, de akkor a ford\u00edt\u00f3 standard k\u00f6nyvt\u00e1r\u00e1nak haszn\u00e1lat\u00e1r\u00f3l le lehet mondani, mivel az glibc-t haszn\u00e1l, amely viszont 4 byte-os wchar_t-ra lett ford\u00edtva. M\u00e1s okok k\u00f6z\u00f6tt szerepelt a standard oszt\u00e1lyok jobb megval\u00f3s\u00edt\u00e1sa, a hash-t\u00e1bl\u00e1k t\u00e1mogat\u00e1sa, \u00e9s m\u00e9g a kont\u00e9nerek belsej\u00e9ben a mozg\u00e1s szemantika emul\u00e1l\u00e1sa is, amelyet akt\u00edvan haszn\u00e1ltunk. Tov\u00e1bb\u00e1, ahogy mondani szokt\u00e1k, last but not least, a karakterl\u00e1ncok teljes\u00edtm\u00e9nye volt az egyik oka. Saj\u00e1t karakterl\u00e1nc oszt\u00e1lyunk volt, mivel a szoftver\u00fcnk specifikuma miatt a karakterl\u00e1nc m\u0171veleteket sz\u00e9les k\u00f6rben haszn\u00e1lj\u00e1k, ami kritikus sz\u00e1munkra. <\/p>\n<p>A karakterl\u00e1ncunk a karakterl\u00e1ncok optimaliz\u00e1l\u00e1s\u00e1nak \u00f6tletein alapul, amelyeket m\u00e1r a 2000-es \u00e9vek elej\u00e9n megfogalmaztak <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80%D0%B5%D1%81%D0%BA%D1%83,_%D0%90%D0%BD%D0%B4%D1%80%D0%B5%D0%B9\">Andrej Alexandresku<\/a><\/noindex>. K\u00e9s\u0151bb, amikor Alexandrescu a Facebookn\u00e1l dolgozott, az \u0151 kezdem\u00e9nyez\u00e9s\u00e9re a Facebook motorj\u00e1ban hasonl\u00f3 elven m\u0171k\u00f6d\u0151 sztringet haszn\u00e1ltak (l\u00e1sd k\u00f6nyvt\u00e1r <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/facebook\/folly\">folly<\/a><\/noindex>).<\/p>\n<p>A mi sztring\u00fcnkben k\u00e9t f\u0151 optimaliz\u00e1l\u00f3 technol\u00f3gia volt:<\/p>\n<ol>\n<li>R\u00f6vid \u00e9rt\u00e9kek eset\u00e9n a sztring objektumon bel\u00fcl t\u00e1rolt bels\u0151 puffer haszn\u00e1latos (ami nem ig\u00e9nyel tov\u00e1bbi mem\u00f3riaallok\u00e1l\u00e1st).<\/li>\n<li>Minden egy\u00e9b esetben a mechanizmus <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%9A%D0%BE%D0%BF%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D1%80%D0%B8_%D0%B7%D0%B0%D0%BF%D0%B8%D1%81%D0%B8\">Copy On Write<\/a><\/noindex>. A sztring \u00e9rt\u00e9ke egy helyen t\u00e1rol\u00f3dik, asign\u00e1l\u00e1s\/m\u00f3dos\u00edt\u00e1s eset\u00e9n hivatkoz\u00e1s sz\u00e1ml\u00e1l\u00f3 haszn\u00e1latos.<\/li>\n<\/ol>\n<p>\nA platform ford\u00edt\u00e1s\u00e1nak felgyors\u00edt\u00e1sa \u00e9rdek\u00e9ben elt\u00e1vol\u00edtottuk STLPort-unk stream megval\u00f3s\u00edt\u00e1s\u00e1t (amit nem haszn\u00e1ltunk), ez k\u00f6r\u00fclbel\u00fcl 20%-os ford\u00edt\u00e1si gyorsul\u00e1st eredm\u00e9nyezett. K\u00e9s\u0151bb korl\u00e1tozottan haszn\u00e1lnunk kellett <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/Boost\">Boost<\/a><\/noindex>. A Boost akt\u00edvan haszn\u00e1lja a stream-et, k\u00fcl\u00f6n\u00f6sen a szolg\u00e1ltat\u00e1si API-j\u00e1ban (p\u00e9ld\u00e1ul napl\u00f3z\u00e1sra), ez\u00e9rt m\u00f3dos\u00edtanunk kellett, hogy kiiktassuk a stream haszn\u00e1lat\u00e1t. Ez viszont megnehez\u00edtette az \u00faj Boost verzi\u00f3khoz val\u00f3 \u00e1t\u00e1ll\u00e1st. <\/p>\n<h3>Harmadik \u00fat<\/h3>\n<p>\nA C++14 szabv\u00e1nyra val\u00f3 \u00e1tt\u00e9r\u00e9s sor\u00e1n a k\u00f6vetkez\u0151 lehet\u0151s\u00e9geket vizsg\u00e1ltuk:<\/p>\n<ol>\n<li>A m\u00f3dos\u00edtott STLPort-unkat C++14 szabv\u00e1nyra emelni. Ez a lehet\u0151s\u00e9g nagyon neh\u00e9z, mivel az STLPort t\u00e1mogat\u00e1s\u00e1t 2010-ben megsz\u00fcntett\u00e9k, \u00e9s az \u00f6sszes k\u00f3dot nek\u00fcnk kellett volna felemelni.<\/li>\n<li>\u00c1tt\u00e9rni egy C++14-kompatibilis STL m\u00e1sik megval\u00f3s\u00edt\u00e1s\u00e1ra. El\u0151ny\u00f6s lenne, ha ez a megval\u00f3s\u00edt\u00e1s Windows \u00e9s Linux alatt is m\u0171k\u00f6dne.<\/li>\n<li>Haszn\u00e1lni a megfelel\u0151 ford\u00edt\u00f3 be\u00e9p\u00edtett k\u00f6nyvt\u00e1r\u00e1t minden OP ford\u00edt\u00e1sakor.<\/li>\n<\/ol>\n<p>\nAz els\u0151 lehet\u0151s\u00e9get azonnal elvetett\u00fck a t\u00fal nagy munkamennyis\u00e9g miatt.<\/p>\n<p>N\u00e9h\u00e1ny ideig a m\u00e1sodik lehet\u0151s\u00e9gen t\u0171n\u0151dt\u00fcnk; mint jel\u00f6ltet <noindex><a rel=\"nofollow\" href=\"https:\/\/libcxx.llvm.org\/\">libc++<\/a><\/noindex>, de akkoriban nem m\u0171k\u00f6d\u00f6tt Windows alatt. A libc++ Windowsra val\u00f3 portol\u00e1s\u00e1hoz jelent\u0151s munk\u00e1t kellett volna elv\u00e9gezn\u00fcnk \u2014 p\u00e9ld\u00e1ul nek\u00fcnk kellett volna \u00edrni mindent, ami a sz\u00e1lakkal, sz\u00e1lak szinkroniz\u00e1ci\u00f3j\u00e1val \u00e9s atomoss\u00e1ggal kapcsolatos, mivel a libc++ ezen a ter\u00fcleten <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/POSIX\">POSIX API-t haszn\u00e1lt.<\/a><\/noindex>.<\/p>\n<p>\u00cdgy mi a harmadik utat v\u00e1lasztottuk.<\/p>\n<h3>\u00c1t\u00e1ll\u00e1s<\/h3>\n<p>\nTeh\u00e1t az STLPort haszn\u00e1lat\u00e1nak a megfelel\u0151 ford\u00edt\u00f3kra (Visual Studio 2015 Windows-ra, gcc 7 Linux-ra, clang 8 macOS-ra) val\u00f3 cser\u00e9j\u00e9t kellett elv\u00e9gezn\u00fcnk. <\/p>\n<p>Szerencs\u00e9re a k\u00f3dunk alapvet\u0151en a guidelineok szerint k\u00e9sz\u00fclt, \u00e9s nem haszn\u00e1lt k\u00fcl\u00f6nf\u00e9le tr\u00fckk\u00f6ket, \u00edgy a \u00faj k\u00f6nyvt\u00e1rakra val\u00f3 migr\u00e1ci\u00f3 viszonylag z\u00f6kken\u0151mentesen zajlott, k\u00f6sz\u00f6nhet\u0151en a szkripteknek, amelyek az eredeti f\u00e1jlokban cser\u00e9lt\u00e9k az adatt\u00edpusok, oszt\u00e1lyok, n\u00e9vterek \u00e9s include-ok neveit. A migr\u00e1ci\u00f3 10 000 forr\u00e1sf\u00e1jlt \u00e9rintett (14 000-b\u0151l). A wchar_t t\u00edpust char16_t-re cser\u00e9lt\u00fck; \u00fagy d\u00f6nt\u00f6tt\u00fcnk, hogy lemondunk a wchar_t haszn\u00e1lat\u00e1r\u00f3l, mivel a char16_t minden oper\u00e1ci\u00f3s rendszeren 2 b\u00e1jt helyet foglal el, \u00e9s nem rontja a k\u00f3d kompatibilit\u00e1s\u00e1t Windows \u00e9s Linux k\u00f6z\u00f6tt.<\/p>\n<p>Nem m\u00falt el kis kalandok n\u00e9lk\u00fcl. P\u00e9ld\u00e1ul az STLPort-ban az iter\u00e1torokat implicit m\u00f3don lehetett pointerr\u00e9 castolni, \u00e9s a k\u00f3dunk egyes r\u00e9szein ezt haszn\u00e1ltuk. Az \u00faj k\u00f6nyvt\u00e1rakban ezt m\u00e1r nem lehetett \u00edgy csin\u00e1lni, \u00e9s ezeket a r\u00e9szeket elemezni \u00e9s manu\u00e1lisan \u00e1t\u00edrni kellett. <\/p>\n<p>Teh\u00e1t a k\u00f3d migr\u00e1ci\u00f3ja befejez\u0151d\u00f6tt, a k\u00f3d minden oper\u00e1ci\u00f3s rendszeren lefordul. Itt az ideje a teszteknek. <\/p>\n<p>A migr\u00e1ci\u00f3 ut\u00e1ni tesztek teljes\u00edtm\u00e9nycs\u00f6kken\u00e9st mutattak (helyenk\u00e9nt 20-30% -ot) \u00e9s megn\u00f6vekedett mem\u00f3riafogyaszt\u00e1st (10-15% -ot) a r\u00e9gi k\u00f3d verzi\u00f3hoz k\u00e9pest. Ez els\u0151sorban a standard stringek nem optim\u00e1lis m\u0171k\u00f6d\u00e9s\u00e9vel volt \u00f6sszef\u00fcgg\u00e9sben. Ez\u00e9rt a stringet ism\u00e9t saj\u00e1t, kiss\u00e9 tov\u00e1bbfejlesztett verzi\u00f3ra kellett cser\u00e9ln\u00fcnk. <\/p>\n<p>Egy \u00e9rdekes saj\u00e1toss\u00e1got is felfedezt\u00fcnk az embedded k\u00f6nyvt\u00e1rak kont\u00e9nerimplement\u00e1ci\u00f3j\u00e1ban: az \u00fcres (elemek n\u00e9lk\u00fcli) std::map \u00e9s std::set a be\u00e9p\u00edtett k\u00f6nyvt\u00e1rakb\u00f3l mem\u00f3ri\u00e1t allok\u00e1lnak. N\u00e1lunk a megval\u00f3s\u00edt\u00e1s saj\u00e1toss\u00e1gai miatt a k\u00f3d egyes helyein viszonylag sok \u00fcres kont\u00e9ner j\u00f6n l\u00e9tre ebb\u0151l a t\u00edpusb\u00f3l. A standard kont\u00e9nerek meglehet\u0151sen minim\u00e1lis mem\u00f3ri\u00e1t allok\u00e1lnak, egy gy\u00f6k\u00e9relem sz\u00e1m\u00e1ra, de sz\u00e1munkra ez kritikusnak bizonyult \u2013 egyes forgat\u00f3k\u00f6nyvekben a teljes\u00edtm\u00e9ny\u00fcnk \u00e9rz\u00e9kelhet\u0151en cs\u00f6kkent \u00e9s a mem\u00f3riafogyaszt\u00e1s megn\u00f6vekedett (a STLPort-hoz k\u00e9pest). Ez\u00e9rt a k\u00f3dunkban ezeket a k\u00e9t t\u00edpus\u00fa kont\u00e9nert a be\u00e9p\u00edtett k\u00f6nyvt\u00e1rakb\u00f3l lecser\u00e9lt\u00fck a Boost implement\u00e1ci\u00f3j\u00e1ra, ahol ezek a kont\u00e9nerek nem rendelkeztek ezzel a tulajdons\u00e1ggal, \u00e9s ez megoldotta a lassul\u00e1s \u00e9s a megn\u00f6vekedett mem\u00f3riafogyaszt\u00e1s probl\u00e9m\u00e1j\u00e1t.<\/p>\n<p>Ahogy az gyakran t\u00f6rt\u00e9nik nagyobb projektekben v\u00e9grehajtott \u00e1tfog\u00f3 v\u00e1ltoz\u00e1sok ut\u00e1n, az els\u0151 iter\u00e1ci\u00f3k nem voltak probl\u00e9m\u00e1k n\u00e9lk\u00fcl, \u00e9s itt k\u00fcl\u00f6n\u00f6sen hasznos volt a Windows implement\u00e1ci\u00f3j\u00e1ban a debug iter\u00e1torok t\u00e1mogat\u00e1sa. L\u00e9p\u00e9sr\u0151l l\u00e9p\u00e9sre haladtunk el\u0151re, \u00e9s 2017 tavasz\u00e1ra (1C:Enterprise 8.3.11 verzi\u00f3) a migr\u00e1ci\u00f3 befejez\u0151d\u00f6tt. <\/p>\n<h3>\u00d6sszegz\u00e9s<\/h3>\n<p>\nA C++14 szabv\u00e1nyra val\u00f3 \u00e1tt\u00e9r\u00e9s k\u00f6r\u00fclbel\u00fcl 6 h\u00f3napot vett ig\u00e9nybe. A projekt munk\u00e1j\u00e1nak nagy r\u00e9sz\u00e9t egy (de nagyon magasan k\u00e9pzett) fejleszt\u0151 v\u00e9gezte, m\u00edg a v\u00e9gs\u0151 szakaszban csatlakoztak a csapat k\u00e9pvisel\u0151i, akik konkr\u00e9t ter\u00fcletek\u00e9rt feleltek \u2014 UI, klaszter szerverek, fejleszt\u00e9si \u00e9s adminisztr\u00e1ci\u00f3s eszk\u00f6z\u00f6k stb.<\/p>\n<p>Az \u00e1tt\u00e9r\u00e9s jelent\u0151sen egyszer\u0171s\u00edtette a leg\u00fajabb szabv\u00e1nyokra val\u00f3 migr\u00e1l\u00e1sunkat. \u00cdgy p\u00e9ld\u00e1ul az 1C:Enterprise 8.3.14 verzi\u00f3 (fejleszt\u00e9s alatt, a kiad\u00e1s a k\u00f6vetkez\u0151 \u00e9v elej\u00e9re van tervezve) m\u00e1r \u00e1t lett \u00fcltetve a szabv\u00e1nyra. <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/C%2B%2B17\">C++17<\/a><\/noindex>. <\/p>\n<p>A migr\u00e1ci\u00f3 ut\u00e1n a fejleszt\u0151knek sz\u00e1mos \u00faj lehet\u0151s\u00e9g\u00fck akadt. M\u00edg kor\u00e1bban saj\u00e1t v\u00e1ltoztatott STL verzi\u00f3nk \u00e9s egy std n\u00e9vt\u00e9r volt, most a std n\u00e9vt\u00e9rben a ford\u00edt\u00f3 be\u00e9p\u00edtett k\u00f6nyvt\u00e1raib\u00f3l sz\u00e1rmaz\u00f3 standard oszt\u00e1lyok tal\u00e1lhat\u00f3k, a stdx n\u00e9vt\u00e9rben a saj\u00e1t, a feladatainkhoz optimaliz\u00e1lt sztringek \u00e9s kont\u00e9nerek, a boost pedig a legfrissebb boost verzi\u00f3t tartalmazza. A fejleszt\u0151 azokat az oszt\u00e1lyokat haszn\u00e1lhatja, amelyek optim\u00e1lisan illeszkednek a feladatmegold\u00e1s\u00e1hoz. <\/p>\n<p>A fejleszt\u00e9st a \"nat\u00edv\" mozg\u00e1si konstrukt\u0151r\u00f6k megval\u00f3s\u00edt\u00e1sa is seg\u00edti (<noindex><a rel=\"nofollow\" href=\"https:\/\/en.cppreference.com\/w\/cpp\/language\/move_constructor\">move constructors<\/a><\/noindex>) t\u00f6bb oszt\u00e1ly eset\u00e9ben. Ha egy oszt\u00e1lynak van mozg\u00e1si konstrukt\u0151re, \u00e9s ezt az oszt\u00e1lyt tartalmaz\u00f3 kont\u00e9nerbe helyezz\u00fck, akkor az STL optimaliz\u00e1lja az elemek m\u00e1sol\u00e1s\u00e1t a kont\u00e9neren bel\u00fcl (p\u00e9ld\u00e1ul amikor a kont\u00e9ner b\u0151v\u00fcl \u00e9s meg kell v\u00e1ltoztatni a capacity-t \u00e9s a mem\u00f3ri\u00e1t realloc\u00e1lni). <\/p>\n<h3>Egy kan\u00e1l k\u00e1tr\u00e1ny<\/h3>\n<p>\nA migr\u00e1ci\u00f3 legval\u00f3sz\u00edn\u0171bb kellemetlen (de nem kritikus) k\u00f6vetkezm\u00e9nye az volt, hogy n\u0151tt a <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%9E%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BD%D1%8B%D0%B9_%D0%BC%D0%BE%D0%B4%D1%83%D0%BB%D1%8C\">obj-f\u00e1jlok<\/a><\/noindex>, \u00e9s a build teljes eredm\u00e9nye az \u00f6sszes k\u00f6zbens\u0151 f\u00e1jllal egy\u00fctt 60-70 GB-ot foglalt el. Ez a viselked\u00e9s a modern standard k\u00f6nyvt\u00e1rak saj\u00e1toss\u00e1gaival magyar\u00e1zhat\u00f3, amelyek kev\u00e9sb\u00e9 kritikusak a gener\u00e1lt seg\u00e9df\u00e1jlok mennyis\u00e9g\u00e9vel szemben. Ez nem befoly\u00e1solja a leford\u00edtott alkalmaz\u00e1s m\u0171k\u00f6d\u00e9s\u00e9t, de sz\u00e1mos k\u00e9nyelmetlens\u00e9get okoz a fejleszt\u00e9s sor\u00e1n, k\u00fcl\u00f6n\u00f6sen n\u00f6veli a ford\u00edt\u00e1si id\u0151t. A build szervereken \u00e9s a fejleszt\u0151k g\u00e9pein is n\u0151nek a szabad lemezter\u00fclet k\u00f6vetelm\u00e9nyei. Fejleszt\u0151ink p\u00e1rhuzamosan dolgoznak a platform t\u00f6bb verzi\u00f3j\u00e1n, \u00e9s a k\u00f6zbens\u0151 f\u00e1jlok sz\u00e1zai n\u00e9ha neh\u00e9zs\u00e9geket okoznak a munk\u00e1ban. A probl\u00e9ma kellemetlen, de nem kritikus, a megold\u00e1s\u00e1t egyel\u0151re halasztottuk. Egy lehets\u00e9ges megold\u00e1sk\u00e9nt a <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Single_Compilation_Unit\">unity build<\/a><\/noindex> (p\u00e9ld\u00e1ul a Google ezt haszn\u00e1lja a Chrome b\u00f6ng\u00e9sz\u0151 fejleszt\u00e9se sor\u00e1n).<br \/>\n<br \/>Forr\u00e1s: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/1c\/blog\/429678\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043d\u0430\u0437\u0430\u0434 (\u043e\u0441\u0435\u043d\u044c\u044e 2016), \u043f\u0440\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b 1\u0421:\u041f\u0440\u0435\u0434\u043f\u0440\u0438\u044f\u0442\u0438\u0435 \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0432\u0441\u0442\u0430\u043b \u0432\u043e\u043f\u0440\u043e\u0441 \u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0435 \u043d\u043e\u0432\u043e\u0433\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0430 C++14 \u0432 \u043d\u0430\u0448\u0435\u043c \u043a\u043e\u0434\u0435. \u041f\u0435\u0440\u0435\u0445\u043e\u0434 \u043d\u0430 \u043d\u043e\u0432\u044b\u0439 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442, \u043a\u0430\u043a \u043c\u044b \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u043b\u0438, \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u043b \u0431\u044b \u043d\u0430\u043c \u043f\u0438\u0441\u0430\u0442\u044c \u043c\u043d\u043e\u0433\u0438\u0435 \u0432\u0435\u0449\u0438 \u044d\u043b\u0435\u0433\u0430\u043d\u0442\u043d\u0435\u0439, \u043f\u0440\u043e\u0449\u0435 \u0438 \u043d\u0430\u0434\u0435\u0436\u043d\u0435\u0439, \u0443\u043f\u0440\u043e\u0449\u0430\u043b \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u0438 \u0441\u043e\u043f\u0440\u043e\u0432\u043e\u0436\u0434\u0435\u043d\u0438\u0435 \u043a\u043e\u0434\u0430. \u0418 \u0432 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0435 \u0432\u0440\u043e\u0434\u0435 \u0431\u044b \u043d\u0435\u0442 \u043d\u0438\u0447\u0435\u0433\u043e \u044d\u043a\u0441\u0442\u0440\u0430\u043e\u0440\u0434\u0438\u043d\u0430\u0440\u043d\u043e\u0433\u043e, [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":24270,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-32466","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.3 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043d\u0430\u0437\u0430\u0434 (\u043e\u0441\u0435\u043d\u044c\u044e 2016), \u043f\u0440\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b 1\u0421:\u041f\u0440\u0435\u0434\u043f\u0440\u0438\u044f\u0442\u0438\u0435 \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0432\u0441\u0442\u0430\u043b \u0432\u043e\u043f\u0440\u043e\u0441 \u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0435 \u043d\u043e\u0432\u043e\u0433\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0430\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/kak-my-pereveli-10-millionov-strok-koda-c-na-standart-c-14-a-potom-i-na-c-17\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"hu_HU\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041a\u0430\u043a \u043c\u044b \u043f\u0435\u0440\u0435\u0432\u0435\u043b\u0438 10 \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u043e\u0432 \u0441\u0442\u0440\u043e\u043a \u043a\u043e\u0434\u0430 C++ \u043d\u0430 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442 C++14 (\u0430 \u043f\u043e\u0442\u043e\u043c \u0438 \u043d\u0430 C++17) | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043d\u0430\u0437\u0430\u0434 (\u043e\u0441\u0435\u043d\u044c\u044e 2016), \u043f\u0440\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b 1\u0421:\u041f\u0440\u0435\u0434\u043f\u0440\u0438\u044f\u0442\u0438\u0435 \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0432\u0441\u0442\u0430\u043b \u0432\u043e\u043f\u0440\u043e\u0441 \u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0435 \u043d\u043e\u0432\u043e\u0433\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0430\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/kak-my-pereveli-10-millionov-strok-koda-c-na-standart-c-14-a-potom-i-na-c-17\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T18:47:13+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T18:47:13+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Hogyan ford\u00edtottuk le a 10 milli\u00f3 sor C++ k\u00f3dot C++14 szabv\u00e1nyra (majd C++17-re) | ProHoster","description":"N\u00e9h\u00e1ny id\u0151vel ezel\u0151tt (2016 \u0151sz\u00e9n) az 1C:Enterprise technol\u00f3giai platform \u00faj verzi\u00f3j\u00e1nak fejleszt\u00e9se sor\u00e1n a fejleszt\u0151csapatban felmer\u00fclt a k\u00e9rd\u00e9s, hogy t\u00e1mogass\u00e1k az \u00faj szabv\u00e1nyt.","canonical_url":"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/kak-my-pereveli-10-millionov-strok-koda-c-na-standart-c-14-a-potom-i-na-c-17","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"hu_HU","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041a\u0430\u043a \u043c\u044b \u043f\u0435\u0440\u0435\u0432\u0435\u043b\u0438 10 \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u043e\u0432 \u0441\u0442\u0440\u043e\u043a \u043a\u043e\u0434\u0430 C++ \u043d\u0430 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442 C++14 (\u0430 \u043f\u043e\u0442\u043e\u043c \u0438 \u043d\u0430 C++17) | ProHoster","og:description":"\u041d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043d\u0430\u0437\u0430\u0434 (\u043e\u0441\u0435\u043d\u044c\u044e 2016), \u043f\u0440\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b 1\u0421:\u041f\u0440\u0435\u0434\u043f\u0440\u0438\u044f\u0442\u0438\u0435 \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0432\u0441\u0442\u0430\u043b \u0432\u043e\u043f\u0440\u043e\u0441 \u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0435 \u043d\u043e\u0432\u043e\u0433\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0430","og:url":"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/kak-my-pereveli-10-millionov-strok-koda-c-na-standart-c-14-a-potom-i-na-c-17","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T18:47:13+00:00","article:modified_time":"2019-10-31T18:47:13+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"32466","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-21 11:00:20","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 02:58:23","updated":"2026-01-21 11:00:20","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts\/32466","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/comments?post=32466"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts\/32466\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/media\/24270"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/media?parent=32466"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/categories?post=32466"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/tags?post=32466"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}