При рассмотрении подробно его страницы сравнительного теста производительности Вы заметите, что старый добрый C printf
- функции семейства все еще побеждают на Linux. На самом деле единственный тестовый сценарий, где они работают плохо, является тестовым сценарием, который должен быть статическими конкатенациями строк, где я ожидал бы printf
быть расточительным. Кроме того, GCC обеспечивает статическую проверку типа на printf
- вызовы функции стиля, таким образом, преимущество безопасности типов уменьшается. Так: при работе Linux и при необходимости в абсолютной лучшей производительности FastFormat является, вероятно, не оптимальным решением.
Обнаружена одна «загвоздка», хотя для большинства людей она никогда не проявляется. Со страницы проекта:
Атомарная операция. Он не записывает элементы операторов по одному, как IOStreams, поэтому не имеет проблем с атомарностью
Единственный способ, которым я могу это увидеть, - это буферизация всего вывода write ()
. сам, затем записывает его в поток
за один шаг. Это означает, что ему необходимо выделить память, и если объект, переданный в вызов write ()
, производит большой объем вывода (несколько мегабайт или более), он может потреблять вдвое больше памяти во внутренних буферах ( предполагая, что он использует трюк с увеличением размера буфера каждый раз, удваивая его размер).
Если вы используете его просто для ведения журнала, а не, скажем, для сброса огромных объемов XML, вы Я никогда не увижу эту проблему.
Единственная другая «уловка», которую я вижу:
Высокая переносимость. Он будет работать со всеми хорошими современными компиляторами C ++; он работает даже с Visual C ++ 6!
Поэтому он не будет работать со старым компилятором C ++, например cfront
, тогда как iostreams
обратно совместим с конца 80-х. Опять же, я
Это действительно выглядит довольно интересно! Хороший совет в любом случае, и +1 за это!
Я немного поигрался с ним. Главный недостаток, который я вижу, заключается в том, что FastFormat поддерживает меньше параметров форматирования для вывода. Я думаю, что это прямое следствие того, как достигается более высокая безопасность типов, и хороший компромисс в зависимости от ваших обстоятельств.
Библиотека зависит от пары переменных окружения, как упоминается в документации.
Возможно, для кого-то это не имеет значения, но я бы предпочел, чтобы мой код был настолько самодостаточным, насколько это возможно. Если я проверяю его из системы контроля исходных текстов, он должен работать и компилироваться. Этого не произойдет, если потребуется установить переменные окружения.