topic "Сравнение Ultimate++ и языка программирования D"; [2 $$0,0#00000000000000000000000000000000:Default] [i448;a25;kKO9;*@(64)2 $$1,0#37138531426314131252341829483380:class] [l288;2 $$2,0#27521748481378242620020725143825:desc] [a83;*R6 $$3,0#31310162474203024125188417583966:caption] [l288;i1121;b17;O9;~~~.1408;2 $$4,0#10431211400427159095818037425705:param] [i448;a25;kKO9;*@(64)2 $$5,0#37138531426314131252341829483370:item] [*+117 $$6,6#14700283458701402223321329925657:header] [l288;a17;*1 $$7,7#70004532496200323422659154056402:requirement] [{_}%EN-US [s0; [*R6 Сравнение производительности библиотек:]&] [s0; [*R6 U`+`+ Core и D]&] [s0;>*^topic`:`/`/uppweb`/www`/vsd`$ru`-ru^1 &] [s0;^topic`:`/`/uppweb`/www`/comparison`$ru`-ru^ &] [s0; Авторы языка программирования предоставили отличный пример строк (string) и карт (map) здесь:&] [s0; &] [s0; [^http`:`/`/www`.digitalmars`.com`/d`/2`.0`/cppstrings`.html^ http://www.digitalmar s.com/d/2.0/cppstrings.html]&] [s0; &] [s0; Мы получили шанс повторить пример в U`+`+ и протестировать его в Ubuntu 64. Компилятор `"gdc`" использовался с флагами, предложенными в статье.&] [s0; &] [s0; Мы провели тест с большим по размеру файлом, чем `"Alice30.txt`", т. к. выбранная платформа очень быстра для такого мелкого файла. Мы скомбинировали тексты из [^http`:`/`/www`.gutenberg`.org`/ebooks`/11^ схожего исходника] и сформировали единый 2MB файл.&] [s0; &] [s0; Мы также удалили код вывода в консоль, чтобы результаты тестов были более релевантными.&] [s0; &] [s0; Результаты:&] [s0; &] [ {{3333:3333:3334<768;>800;h1;@7 [s0; [* Язык D]] :: [s0; [* U`+`+]] :: [s0; [* U`+`+ / Язык D]] ::@2 [s0; 0.072с] :: [s0; 0.043с] :: [s0; 1.7]}}&] [s0; &] [s0; означают, что C`+`+ всё ещё достаточно впереди от D (на 70%), если не ограничен дизайном стандартной библиотеки и средней реализацией&] [s0; &] [ {{10000@(254.254.208) [s0; [*C@5 #include ]&] [s0;*C@5 &] [s0; [*C@5 using namespace Upp;]&] [s0;*C@5 &] [s0; [*C@5 #define NOOUTPUT]&] [s0;*C@5 &] [s0; [*C@5 int main(int argc, const char `*argv`[`])]&] [s0; [*C@5 `{]&] [s0; [*C@5 -|int n;]&] [s0; [*C@5 -|VectorMap map;]&] [s0; [*C@5 -|Cout() << `" lines words bytes file`\n`";]&] [s0; [*C@5 -|int total`_lines `= 0;]&] [s0; [*C@5 -|int total`_words `= 0;]&] [s0; [*C@5 -|int total`_bytes `= 0;]&] [s0; [*C@5 -|for(int i `= 1; i < argc; i`+`+) `{]&] [s0; [*C@5 -|-|String f `= LoadFile(argv`[i`]);]&] [s0; [*C@5 -|-|int lines `= 0;]&] [s0; [*C@5 -|-|int words `= 0;]&] [s0; [*C@5 -|-|const char `*q `= f;]&] [s0; [*C@5 -|-|for(;;) `{]&] [s0; [*C@5 -|-|-|int c `= `*q;]&] [s0; [*C@5 -|-|-|if(IsAlpha(c)) `{]&] [s0; [*C@5 -|-|-|-|const char `*b `= q`+`+;]&] [s0; [*C@5 -|-|-|-|while(IsAlNum(`*q)) q`+`+;]&] [s0; [*C@5 -|-|-|-|map.GetAdd(String(b, q), 0)`+`+;]&] [s0; [*C@5 -|-|-|-|words`+`+;]&] [s0; [*C@5 -|-|-|`}]&] [s0; [*C@5 -|-|-|else `{]&] [s0; [*C@5 -|-|-|-|if(!c) break;]&] [s0; [*C@5 -|-|-|-|if(c `=`= `'`\n`')]&] [s0; [*C@5 -|-|-|-|-|`+`+lines;]&] [s0; [*C@5 -|-|-|-|q`+`+;]&] [s0; [*C@5 -|-|-|`}]&] [s0; [*C@5 -|-|`}]&] [s0; [*C@5 -|-|Cout() << Format(`"%8d%8d%8d %s`\n`", lines, words, f.GetCount(), argv`[i`]);]&] [s0; [*C@5 -|-|total`_lines `+`= lines;]&] [s0; [*C@5 -|-|total`_words `+`= words;]&] [s0; [*C@5 -|-|total`_bytes `+`= f.GetCount();]&] [s0; [*C@5 -|`}]&] [s0; [*C@5 -|Vector order `= GetSortOrder(map.GetKeys());]&] [s0; [*C@5 #ifndef NOOUTPUT]&] [s0; [*C@5 -|Cout() << Format(`"`-`-`-`-`-`-`-`-`-`-`-`-`-`-`-`-`-`-`-`-`-`-`-`-`-`-`-`- `-`-`-`-`-`-`-`-`-`-%8d%8d%8d total`\n`", total`_lines, total`_words, total`_bytes);]&] [s0;*C@5 &] [s0; [*C@5 -|for(int i `= 0; i < order.GetCount(); i`+`+)]&] [s0; [*C@5 -|-|Cout() << map.GetKey(order`[i`]) << `": `" << map`[order`[i`]`] << `'`\n`';]&] [s0; [*C@5 #endif]&] [s0; [*C@5 -|return 0;]&] [s0; [*C@5 `}]&] [s0;*C@5 ]}}&] [s0;%RU-RU ]