{"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\/sq\/blog\/administrirovanie\/kak-my-pereveli-10-millionov-strok-koda-c-na-standart-c-14-a-potom-i-na-c-17","title":{"rendered":"Si e kemi p\u00ebrkthyer 10 milion\u00eb rreshta kodi C++ n\u00eb standardin C++14 (dhe m\u00eb pas n\u00eb C++17)","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Dikur (n\u00eb vjesht\u00ebn e vitit 2016), gjat\u00eb zhvillimit t\u00eb nj\u00eb versioni t\u00eb ri t\u00eb platform\u00ebs teknologjike 1C:Enterprise, ekipi i zhvillimit u ballafaqua me \u00e7\u00ebshtjen e mb\u00ebshtetjes s\u00eb standardit t\u00eb ri <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/C%2B%2B14\">C++14<\/a><\/noindex> n\u00eb kodin ton\u00eb. Kalimi n\u00eb standardin e ri, si\u00e7 e parashikuam, do t\u00eb na lejonte t\u00eb shkruanim shum\u00eb gj\u00ebra m\u00eb eleganta, m\u00eb t\u00eb thjeshta dhe m\u00eb t\u00eb besueshme, duke e thjeshtuar mb\u00ebshtetje dhe mir\u00ebmbajtjen e kodit. Duket se nuk ka asgj\u00eb t\u00eb jasht\u00ebzakonshme n\u00eb p\u00ebrkthim, p\u00ebrve\u00e7 p\u00ebrmasave t\u00eb kodit dhe ve\u00e7orive specifike t\u00eb kodit ton\u00eb.<\/p>\n<p>P\u00ebr ata q\u00eb nuk e din\u00eb, 1C:Enterprise \u00ebsht\u00eb nj\u00eb mjedis p\u00ebr zhvillimin e shpejt\u00eb t\u00eb aplikacioneve biznesore nd\u00ebr-platform\u00eb dhe runtime p\u00ebr ekzekutimin e tyre n\u00eb sisteme t\u00eb ndryshme operative dhe DBMS. N\u00eb p\u00ebrmbledhje, produkti p\u00ebrfshin:<\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/v8.1c.ru\/overview\/Term_000000885.htm\">Nj\u00eb grup serverash aplikacionesh<\/a><\/noindex>, punon n\u00eb Windows dhe Linux<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/v8.1c.ru\/overview\/Term_000000124.htm\">Klienti<\/a><\/noindex>, q\u00eb komunikon me serverin p\u00ebrmes http(s) ose me protokollin ton\u00eb binar, punon n\u00eb Windows, Linux, macOS<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/1c\/blog\/315414\/\">Klienti web<\/a><\/noindex>, q\u00eb funksionon n\u00eb shfletuesit Chrome, Internet Explorer, Microsoft Edge, Firefox, Safari (shkruar n\u00eb JavaScript)<\/li>\n<li>Mjedisi i zhvillimit (<noindex><a rel=\"nofollow\" href=\"http:\/\/v8.1c.ru\/overview\/Term_000000008.htm\">Konfiguratori<\/a><\/noindex>), punon n\u00eb Windows, Linux, macOS<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/v8.1c.ru\/overview\/Term_000000813.htm\">Mjetet e administrat\u00ebs<\/a><\/noindex> t\u00eb serverave t\u00eb aplikacioneve, punojn\u00eb n\u00eb Windows, Linux, macOS<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/wonderland.v8.1c.ru\/blog\/mobilnyy-klient\/\">Klienti mobil<\/a><\/noindex>, q\u00eb lidhet me serverin p\u00ebrmes http(s), punon n\u00eb pajisje mobile me sistemin operativ Android, iOS, Windows<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/1c\/blog\/283198\/\">Platforma mobil<\/a><\/noindex> \u2014 nj\u00eb korniz\u00eb p\u00ebr krijimin e aplikacioneve mobile offline me mund\u00ebsi sinkronizimi, punon n\u00eb Android, iOS, Windows<\/li>\n<li>Mjedisi i zhvillimit <noindex><a rel=\"nofollow\" href=\"http:\/\/v8.1c.ru\/overview\/IDE\/\">1C:Enterprise Development Tools<\/a><\/noindex>, shkruar n\u00eb Java<\/li>\n<li>\u0421\u0435\u0440\u0432\u0435\u0440 <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/1c\/blog\/422903\/\">Sistemet e Nd\u00ebrveprimit<\/a><\/noindex><\/li>\n<\/ul>\n<p>\nNe p\u00ebrpiqemi t\u00eb shkruajm\u00eb nj\u00eb kod t\u00eb vet\u00ebm p\u00ebr sisteme t\u00eb ndryshme operative \u2014 baza e kodit t\u00eb serverit \u00ebsht\u00eb e p\u00ebrbashk\u00ebt n\u00eb 99%, e klientit \u2014 rreth 95%. Platforma teknologjike 1C:Enterprise \u00ebsht\u00eb kryesisht e shkruar n\u00eb C++ dhe m\u00eb posht\u00eb jan\u00eb karakteristikat p\u00ebrkat\u00ebse t\u00eb kodit:<\/p>\n<ul>\n<li>10 milion rreshta kodi C++,<\/li>\n<li>14 mij\u00eb skedar\u00eb,<\/li>\n<li>60 mij\u00eb klasa,<\/li>\n<li>nj\u00eb gjysm\u00eb milioni metoda.<\/li>\n<\/ul>\n<p>\nDhe t\u00eb gjith\u00eb k\u00ebto gj\u00ebra duhej t\u00eb p\u00ebrfitoheshin n\u00eb C++14. Ne do t\u00eb tregojm\u00eb sot se si e b\u00ebm\u00eb k\u00ebt\u00eb dhe me \u00e7far\u00eb sfidash u p\u00ebrball\u00ebm n\u00eb proces.<\/p>\n<p><img decoding=\"async\" alt=\"Si e kemi p\u00ebrkthyer 10 milion\u00eb rreshta kodi C++ n\u00eb standardin C++14 (dhe m\u00eb pas n\u00eb C++17)\" 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>Kufizimi<\/h3>\n<p>\n\u00c7do gj\u00eb e shkruar m\u00eb posht\u00eb rreth pun\u00ebs s\u00eb ngadalt\u00eb\/shpejt\u00eb, (jo) konsumi i vog\u00ebl t\u00eb memories nga implementimet e klasave standarde n\u00eb biblioteka t\u00eb ndryshme \u00ebsht\u00eb e v\u00ebrtet\u00eb: kjo \u00ebsht\u00eb e sakt\u00eb P\u00cbR NE. Mund t\u00eb jet\u00eb q\u00eb p\u00ebr detyrat tuaja implementimet standarde t\u00eb ndihmojn\u00eb m\u00eb s\u00eb miri. Ne u bazuam n\u00eb nevojat tona: mor\u00ebm t\u00eb dh\u00ebnat tipike p\u00ebr klient\u00ebt tan\u00eb, i testuam n\u00eb skenar\u00eb tipik\u00eb, vler\u00ebsuam shpejt\u00ebsin\u00eb e pun\u00ebs, sasin\u00eb e memories s\u00eb konsumuar, etj., dhe analizuam \u2013 a na k\u00ebnaqin rezultatat e tilla ne dhe klient\u00ebt tan\u00eb apo jo. Dhe vepruam p\u00ebrkat\u00ebsisht.<\/p>\n<h3>\u00c7far\u00eb kishim<\/h3>\n<p>\nFillimisht, ne shkruam kodin e platform\u00ebs 1C:Enterprise 8 n\u00eb Microsoft Visual Studio. Projekti filloi n\u00eb fillim t\u00eb viteve 2000 dhe ne kishim vet\u00ebm nj\u00eb version p\u00ebr Windows. Natyrisht, q\u00eb at\u00ebher\u00eb kodi u zhvillua aktivisht, shum\u00eb mekanizma u rishkruan plot\u00ebsisht. Por kodi ishte shkruar sipas standardit t\u00eb vitit 1998, dhe p\u00ebr shembull, k\u00ebndet e djathta ishin ndar\u00eb me hap\u00ebsira p\u00ebr t\u00eb kaluar me sukses kompilimin, k\u00ebshtu:<\/p>\n<pre><code class=\"cpp\">vector&lt;vector &gt; IntV;<\/code><\/pre>\n<p>\nN\u00eb vitin 2006, me daljen e versionit 8.1 t\u00eb platform\u00ebs, ne filluam t\u00eb mb\u00ebshtesim Linux dhe kaluam n\u00eb nj\u00eb bibliotek\u00eb standarde t\u00eb jashtme <noindex><a rel=\"nofollow\" href=\"http:\/\/www.stlport.org\/\">STLPort<\/a><\/noindex>. Nj\u00eb nga arsyet p\u00ebr kalimin ishte puna me vargje t\u00eb gjera. Ne p\u00ebrdorim gjithashtu std::wstring, i bazuar n\u00eb tipin wchar_t. Madh\u00ebsia e tij n\u00eb Windows \u00ebsht\u00eb 2 byte, nd\u00ebrsa n\u00eb Linux p\u00ebr default \u00ebsht\u00eb 4 byte. Kjo \u00e7oi n\u00eb papajtueshm\u00ebri t\u00eb protokolleve tona binar\u00eb midis klientit dhe serverit, si dhe t\u00eb dh\u00ebnave t\u00eb ndryshme t\u00eb q\u00ebndrueshme. Me opsionet e gcc mund t\u00eb specifikohet q\u00eb madh\u00ebsia e wchar_t gjat\u00eb kompilimit t\u00eb jet\u00eb gjithashtu 2 byte, por at\u00ebher\u00eb harrojm\u00eb p\u00ebr p\u00ebrdorimin e bibliotek\u00ebs standarde nga kompajleri, pasi ajo p\u00ebrdor glibc, e cila \u00ebsht\u00eb e kompajluar p\u00ebr wchar_t 4-byte. Arsyet e tjera ishin implementimi m\u00eb cil\u00ebsor i klasave standarde, mb\u00ebshtetje e tabelave t\u00eb hash dhe madje edhe imitim i semantik\u00ebs s\u00eb l\u00ebvizjes brenda konteiner\u00ebve, t\u00eb cilat ne i p\u00ebrdorim aktivisht. Dhe nj\u00eb arsye tjet\u00ebr, si\u00e7 thuhet \u00ebsht\u00eb e fundit por jo m\u00eb pak e r\u00ebnd\u00ebsishme, ishte performanca e vargjeve. Ne kishim klas\u00ebn ton\u00eb p\u00ebr vargje, pasi p\u00ebr shkak t\u00eb natyr\u00ebs s\u00eb softuerit ton\u00eb, operacionet mbi vargje p\u00ebrdoren shum\u00eb gjer\u00ebsisht dhe p\u00ebr ne kjo \u00ebsht\u00eb kritike. <\/p>\n<p>Vargu yn\u00eb \u00ebsht\u00eb i bazuar n\u00eb idet\u00eb e optimizimit t\u00eb vargjeve, t\u00eb paraqitura n\u00eb fillim t\u00eb viteve 2000 <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\">Andrei Alexandrescu<\/a><\/noindex>. M\u00eb von\u00eb, kur Alexandrescu punonte n\u00eb Facebook, n\u00eb iniciativ\u00ebn e tij n\u00eb motorin e Facebook u p\u00ebrdor nj\u00eb varg q\u00eb funksiononte sipas parimeve t\u00eb ngjashme (shih bibliotek\u00ebn <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/facebook\/folly\">folly<\/a><\/noindex>).<\/p>\n<p>. N\u00eb vargun ton\u00eb ishin p\u00ebrdorur dy teknologji kryesore optimizimi:<\/p>\n<ol>\n<li>P\u00ebr vlera t\u00eb shkurtra, p\u00ebrdoret nj\u00eb tampon i brendsh\u00ebm n\u00eb objektin e vargut (q\u00eb nuk k\u00ebrkon alokim t\u00eb shtes\u00eb t\u00eb memories).<\/li>\n<li>P\u00ebr t\u00eb gjitha t\u00eb tjerat p\u00ebrdoret mekanika <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>. Vlera e vargut ruhet n\u00eb nj\u00eb vend, kur i atribuohet\/modifikohet p\u00ebrdoret numri i referencave.<\/li>\n<\/ol>\n<p>\nP\u00ebr t\u00eb p\u00ebrshpejtuar kompilimin e platform\u00ebs, ne p\u00ebrjashtuam nga versioni yn\u00eb STLPort implementimin e stream (t\u00eb cilin nuk e p\u00ebrdorim), \u00e7ka na dha nj\u00eb p\u00ebrshpejtim t\u00eb kompilimit af\u00ebrsisht 20%. M\u00eb von\u00eb, na duhej t\u00eb p\u00ebrdornim me kufizime. <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/Boost\">Boost<\/a><\/noindex>. Boost p\u00ebrdor aktivisht stream, sidomos n\u00eb API-t\u00eb e tij t\u00eb sh\u00ebrbimeve (p.sh. p\u00ebr logimin), prandaj na duhej t\u00eb modifikonim at\u00eb, duke p\u00ebrjashtuar p\u00ebrdorimin e stream. Kjo, nga ana tjet\u00ebr, e b\u00ebri t\u00eb v\u00ebshtir\u00eb kalimin n\u00eb versionet e reja t\u00eb Boost. <\/p>\n<h3>Rruga e tret\u00eb<\/h3>\n<p>\nKur kaluam n\u00eb standardin C++14, shqyrtuam k\u00ebto mund\u00ebsi:<\/p>\n<ol>\n<li>T\u00eb \u00e7onim STLPortin e modifikuar nga ana jon\u00eb n\u00eb standardin C++14. Kjo opsion ishte shum\u00eb e v\u00ebshtir\u00eb, pasi mb\u00ebshtetja p\u00ebr STLPort ishte ndalur n\u00eb vitin 2010, dhe na duhej ta ngrisnim t\u00eb gjith\u00eb kodin vet\u00eb.<\/li>\n<li>T\u00eb kalojm\u00eb n\u00eb nj\u00eb implementim tjet\u00ebr t\u00eb STL, t\u00eb kompatibilsh\u00ebm me C++14. Preferohej q\u00eb ky implementim t\u00eb ishte p\u00ebr Windows dhe Linux.<\/li>\n<li>T\u00eb p\u00ebrdorim bibliotek\u00ebn e integruar t\u00eb p\u00ebrkatsh\u00ebm p\u00ebr \u00e7do OS gjat\u00eb kompilimit.<\/li>\n<\/ol>\n<p>\nOpsioni i par\u00eb u refuzua menj\u00ebher\u00eb p\u00ebr shkak t\u00eb volumit t\u00eb madh t\u00eb pun\u00ebs.<\/p>\n<p>N\u00eb fillim menduam p\u00ebr opsionin e dyt\u00eb; si kandidat kishim <noindex><a rel=\"nofollow\" href=\"https:\/\/libcxx.llvm.org\/\">libc++<\/a><\/noindex>, por n\u00eb at\u00eb koh\u00eb nuk punonte p\u00ebr Windows. P\u00ebr t\u00eb portuar libc++ n\u00eb Windows, do t\u00eb duhej t\u00eb b\u00ebnim shum\u00eb pun\u00eb \u2014 p\u00ebr shembull, t\u00eb shkruanim vet\u00eb gjith\u00e7ka q\u00eb lidhet me rrjedhat, sinkronizimin e rrjedhave dhe atomik\u00ebn, pasi n\u00eb libc++ ishin p\u00ebrdorur <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/POSIX\">POSIX API<\/a><\/noindex>.<\/p>\n<p>Dhe zgjodh\u00ebm rrug\u00ebn e tret\u00eb.<\/p>\n<h3>Kalimi<\/h3>\n<p>\nPra, na duhej t\u00eb z\u00ebvend\u00ebsonim p\u00ebrdorimin e STLPort me bibliotekat p\u00ebrkat\u00ebse t\u00eb kompiler\u00ebve (Visual Studio 2015 p\u00ebr Windows, gcc 7 p\u00ebr Linux, clang 8 p\u00ebr macOS). <\/p>\n<p>Fatmir\u00ebsisht, kodi yn\u00eb ishte kryesisht i shkruar sipas udh\u00ebzimeve dhe nuk p\u00ebrdorte truket e ndryshme, k\u00ebshtu q\u00eb migraimi n\u00eb bibliotekat e reja kaloi mjaft pa probleme, duke p\u00ebrdorur skriptet q\u00eb z\u00ebvend\u00ebsuan n\u00eb skedar\u00ebt e burimit emrat e tipave, klasave, hap\u00ebsirave t\u00eb emrave dhe p\u00ebrfshirjeve. Migrimi p\u00ebrfshiu 10,000 skedar\u00eb burimor\u00eb (nga 14,000). wchar_t u z\u00ebvend\u00ebsua me char16_t; ne vendos\u00ebm t\u00eb hiqnim p\u00ebrdorimin e wchar_t, pasi char16_t n\u00eb t\u00eb gjitha OS-t\u00eb merr 2 byte dhe nuk prish kompatibilitetin e kodit midis Windows dhe Linux.<\/p>\n<p>Nuk kaluam pa aventura t\u00eb vogla. P\u00ebr shembull, n\u00eb STLPort nj\u00eb iterator mund t\u00eb konvertohej n\u00eb m\u00ebnyr\u00eb t\u00eb pak\u00ebt n\u00eb nj\u00eb tregues p\u00ebr elementin, dhe n\u00eb disa vende n\u00eb kodin ton\u00eb kjo ishte p\u00ebrdorur. N\u00eb bibliotekat e reja nuk ishte m\u00eb e mundur t\u00eb b\u00ebhej k\u00ebshtu, dhe k\u00ebto vende duhej t\u00eb analizohej dhe t\u00eb ri-shkruheshin manualisht. <\/p>\n<p>Pra, migrimi i kodit p\u00ebrfundoi, kodi kompilon p\u00ebr t\u00eb gjitha OS-t\u00eb. Ka ardhur koha p\u00ebr testet. <\/p>\n<p>Testet pas kalimit treguan nj\u00eb r\u00ebnie t\u00eb performanc\u00ebs (n\u00eb disa raste deri n\u00eb 20-30%) dhe rritje t\u00eb konsumit t\u00eb memories (deri n\u00eb 10-15%) krahasuar me versionin e vjet\u00ebr t\u00eb kodit. Kjo ishte, p\u00ebrve\u00e7 t\u00eb tjerash, e lidhur me pun\u00ebn jo optimale t\u00eb vargjeve standarde. Prandaj na duhej s\u00ebrish t\u00eb p\u00ebrdornim vargje t\u00eb tona, t\u00eb p\u00ebrmir\u00ebsuara pak. <\/p>\n<p>Gjithashtu u zbulua nj\u00eb karakteristik\u00eb interesante e implementimit t\u00eb kontejner\u00ebve n\u00eb bibliotekat e integruara: std::map dhe std::set t\u00eb zbraz\u00ebt (pa elemente) nga bibliotekat e integruara alokojn\u00eb memorie. Dhe n\u00eb disa vende n\u00eb kodin ton\u00eb krijohej nj\u00eb num\u00ebr mjaft i madh kontejner\u00ebsh t\u00eb tilla. Standardet e kontejner\u00ebve alokojn\u00eb pak memorie, p\u00ebr nj\u00eb element rr\u00ebnj\u00eb, por p\u00ebr ne kjo u b\u00eb kritike - n\u00eb disa skenar\u00eb kemi v\u00ebn\u00eb re nj\u00eb r\u00ebnie t\u00eb ndjeshme t\u00eb performanc\u00ebs dhe nj\u00eb rritje t\u00eb konsumit t\u00eb memories (krahasuar me STLPort). Prandaj ne z\u00ebvend\u00ebsuam n\u00eb kodin ton\u00eb k\u00ebto dy tipe kontejner\u00ebsh nga bibliotekat e integruara me implementimin e tyre nga Boost, ku k\u00ebto kontejner\u00eb nuk kishin k\u00ebt\u00eb karakteristik\u00eb dhe kjo zgjidhi problemin me ngadal\u00ebsimin dhe rritjen e konsumit t\u00eb memories.<\/p>\n<p>Si\u00e7 ndodh shpesh pas ndryshimeve masive n\u00eb projekte t\u00eb m\u00ebdha, iteracioni i par\u00eb i burimeve nuk funksionoi pa probleme, dhe k\u00ebtu na ndihmoi shum\u00eb, n\u00eb ve\u00e7anti, mb\u00ebshtetja p\u00ebr iterator\u00ebt p\u00ebr-debug n\u00eb implementimin e Windows. Hap pas hapi ne po l\u00ebviznim p\u00ebrpara, dhe n\u00eb pranver\u00ebn e vitit 2017 (versioni 8.3.11 t\u00eb 1C:Enterprise) migraimi p\u00ebrfundoi. <\/p>\n<h3>P\u00ebrfundimet<\/h3>\n<p>\nKalimi n\u00eb standardin C++14 na mori rreth 6 muaj. Kryesisht nj\u00eb zhvillues (por shum\u00eb i kualifikuar) punoi mbi projektin, dhe n\u00eb faz\u00ebn p\u00ebrfundimtare u p\u00ebrfshin\u00eb p\u00ebrfaq\u00ebsues t\u00eb ekipeve q\u00eb ishin p\u00ebrgjegj\u00ebs p\u00ebr fusha t\u00eb caktuara - UI, serverin e klaster\u00ebve, mjetet e zhvillimit dhe administrat\u00ebs, etj.<\/p>\n<p>Kalimi e thjeshtoi shum\u00eb pun\u00ebn ton\u00eb p\u00ebr migrimin n\u00eb versionet m\u00eb t\u00eb fundit t\u00eb standardit. N\u00eb k\u00ebt\u00eb m\u00ebnyr\u00eb, versioni 1C:Enterprise 8.3.14 (n\u00eb zhvillim, publikimi \u00ebsht\u00eb planifikuar p\u00ebr fillimin e vitit t\u00eb ardhsh\u00ebm) tashm\u00eb \u00ebsht\u00eb p\u00ebrkthyer n\u00eb standard <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/C%2B%2B17\">C++17<\/a><\/noindex>. <\/p>\n<p>Pas migros, zhvilluesit fituan m\u00eb shum\u00eb mund\u00ebsi. N\u00ebse m\u00eb par\u00eb kishim versionin ton\u00eb t\u00eb p\u00ebrmir\u00ebsuar t\u00eb STL dhe nj\u00eb hap\u00ebsir\u00eb emrave std, tani hap\u00ebsira jon\u00eb e emrave std p\u00ebrmban klasat standarde nga bibliotekat e integruara t\u00eb kompilatorit, n\u00eb hap\u00ebsir\u00ebn e emrave stdx \u2013 klasat tona t\u00eb optimizuara p\u00ebr ne, si dhe vargje dhe kontejner\u00eb, nd\u00ebrsa n\u00eb boost \u00ebsht\u00eb versioni m\u00eb i ri i boost. Dhe zhvilluesi p\u00ebrdor ato klasa, t\u00eb cilat p\u00ebrputhen m\u00eb mir\u00eb me zgjidhjen e problemeve t\u00eb tij. <\/p>\n<p>Po ashtu ndihmon edhe implementimi 'i natyrsh\u00ebm' i konstruktor\u00ebve t\u00eb l\u00ebvizjes (<noindex><a rel=\"nofollow\" href=\"https:\/\/en.cppreference.com\/w\/cpp\/language\/move_constructor\">move constructors<\/a><\/noindex>) p\u00ebr disa klasa. N\u00ebse nj\u00eb klas\u00eb ka nj\u00eb konstruktor l\u00ebvizjeje dhe kjo klas\u00eb vihet n\u00eb nj\u00eb kontejner, STL optimizon kopjimin e elementeve brenda kontejnerit (p.sh., kur kontejneri zgjerohet dhe duhet t\u00eb ndryshoj\u00eb kapacitetin dhe t\u00eb rialokoj\u00eb memorjen). <\/p>\n<h3>Nj\u00eb lug\u00eb katran<\/h3>\n<p>\nMund t\u00eb jet\u00eb, ndoshta, pasoja m\u00eb e pak\u00ebndshme (por jo fatale) e migros \u2014 u p\u00ebrball\u00ebm me rritjen e volumit <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-file<\/a><\/noindex>, dhe rezultati p\u00ebrfundimtar i nd\u00ebrtimit me t\u00eb gjitha skedar\u00ebt e nd\u00ebrmjet\u00ebm tani z\u00eb 60 \u2013 70 GB. Ky sjellje \u00ebsht\u00eb e lidhur me karakteristikat e bibliotekave standarde moderne, t\u00eb cilat jan\u00eb b\u00ebr\u00eb m\u00eb pak kritike p\u00ebr volumin e skedar\u00ebve sh\u00ebrbyes q\u00eb gjenerohen. Kjo nuk ndikon n\u00eb funksionimin e aplikacionit t\u00eb kompiluar, por krijon disa shqet\u00ebsime n\u00eb zhvillim, ve\u00e7an\u00ebrisht rrit koh\u00ebn e kompilimit. K\u00ebrkesat p\u00ebr hap\u00ebsir\u00ebn e lir\u00eb n\u00eb disqe n\u00eb server\u00ebt e nd\u00ebrtimit dhe n\u00eb makinat e zhvilluesve po ashtu jan\u00eb rritur. Zhvilluesit tan\u00eb punojn\u00eb paralelisht mbi disa versionet e platform\u00ebs, dhe qindra gigabajt skedar\u00ebsh t\u00eb nd\u00ebrmjet\u00ebm ndonj\u00ebher\u00eb krijojn\u00eb v\u00ebshtir\u00ebsi n\u00eb pun\u00eb. Problemi \u00ebsht\u00eb i pak\u00ebndsh\u00ebm, por jo kritik, ndihm\u00ebn p\u00ebr t\u00eb zgjidhur at\u00eb e kemi shtyr\u00eb p\u00ebr momentin. Nj\u00eb nga opsionet e zgjidhjes s\u00eb saj po shqyrtojm\u00eb \u00ebsht\u00eb teknika <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Single_Compilation_Unit\">unity build<\/a><\/noindex> (e cila, ve\u00e7an\u00ebrisht, p\u00ebrdoret nga Google gjat\u00eb zhvillimit t\u00eb shfletuesit Chrome).<br \/>\n<br \/>Burimi: <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.0.1 - 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 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,\" \/>\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\/sq\/blog\/administrirovanie\/kak-my-pereveli-10-millionov-strok-koda-c-na-standart-c-14-a-potom-i-na-c-17\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.0.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"sq_AL\" \/>\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 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,\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/sq\/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\udd47Si e p\u00ebrkthyem 10 milion rreshta kodi C++ n\u00eb standardin C++14 (dhe m\u00eb pas n\u00eb C++17) | ProHoster","description":"Disa koh\u00eb m\u00eb par\u00eb (n\u00eb vjesht\u00ebn e vitit 2016), gjat\u00eb zhvillimit t\u00eb versionit t\u00eb radh\u00ebs t\u00eb platform\u00ebs teknologjike 1C:Enterprise, ekipi i zhvillimit u p\u00ebrball me pyetjen p\u00ebr mb\u00ebshtetje t\u00eb standardit t\u00eb ri C++14 n\u00eb kodin ton\u00eb. Kalimi n\u00eb standardin e ri, si\u00e7 supozonim, do t\u00eb na lejonte t\u00eb shkruanim shum\u00eb gj\u00ebra m\u00eb elegant, m\u00eb thjesht dhe m\u00eb besuesh\u00ebm, duke thjeshtuar mb\u00ebshtetje dhe ruajtjen e kodit. Dhe n\u00eb p\u00ebrkthim nuk ka asgj\u00eb t\u00eb jasht\u00ebzakonshme,","canonical_url":"https:\/\/prohoster.info\/sq\/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":"sq_AL","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 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,","og:url":"https:\/\/prohoster.info\/sq\/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\/sq\/wp-json\/wp\/v2\/posts\/32466","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/comments?post=32466"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/32466\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media\/24270"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media?parent=32466"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/categories?post=32466"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/tags?post=32466"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}