超厲害!{fmt}開源格式化庫快速安全性能優,眾多知名項目都在用! 發布時間:2026/9/3 17:01:45 建盈捌捌建站 {fmt}開源格式化庫快速安全性能卓越眾多知名項目都在用{fmt} 是一個開源的格式化庫為 C 語言的 stdio 和 C 的 iostreams 提供了一種快速且安全的替代方案。文檔與問答可在 StackOverflow 上使用標簽 fmt 提問獲取文檔速查表還能在 Compiler Explorer 中嘗試使用 {fmt}。特性{fmt} 具有眾多出色特性擁有簡單的格式化 API支持使用位置參數進行本地化。實現了 C20 的 std::format 和 C23 的 std::print是 C 標準實現。格式字符串語法與 Python 的 format 類似有類似 Python 的格式化字符串語法。運用 Dragonbox 算法是快速的 IEEE 754 浮點數格式化器保證正確的舍入、簡潔性和往返性。提供跨平臺的 Unicode 支持具備可移植的 Unicode 特性。是安全的 printf 實現包括對位置參數的 POSIX 擴展。支持用戶自定義類型具備可擴展性。高性能比常見標準庫實現的 (s)printf、iostreams、to_string 和 to_chars 更快詳情可查看速度測試和“每秒將一億個整數轉換為字符串”的測試。代碼體積小在最小配置下源代碼僅由三個文件base.h、format.h 和 format-inl.h組成編譯后的代碼體積也很小具體可查看編譯時間和代碼膨脹測試。可靠性高擁有大量測試用例并持續進行模糊測試。安全性強完全類型安全格式字符串中的錯誤可在編譯時報告自動內存管理可防止緩沖區溢出錯誤。易于使用代碼庫小巧且自包含無外部依賴采用寬松的 MIT 許可證。跨平臺兼容性好在不同平臺上輸出一致支持舊版本編譯器。代碼干凈無警告即使在 -Wall -Wextra -pedantic 等高警告級別下代碼庫也不會產生警告。默認與區域設置無關無需考慮區域設置的影響。可通過 FMT_HEADER_ONLY 宏啟用可選的僅頭文件配置。更多詳情請查看文檔。示例輸出到標準輸出#include fmt/core.hint main() { fmt::print(Hello, world!\n);}格式化字符串std::string s fmt::format(The answer is {}., 42); // s The answer is 42.使用位置參數格式化字符串std::string s fmt::format(Id rather be {1} than {0}., right, happy); // s Id rather be happy than right.輸出日期和時間#include fmt/chrono.hint main() { auto now std::chrono::system_clock::now(); fmt::print(Date and time: {}\n, now); fmt::print(Time: {:%H:%M}\n, now);}輸出結果Date and time: 2023-12-26 19:10:31.557195597Time: 19:10輸出容器#include fmt/ranges.h#include vectorint main() { std::vectorint v {1, 2, 3}; fmt::print({}\n, v);}輸出結果[1, 2, 3]在編譯時檢查格式字符串std::string s fmt::format({:d}, I am not a number);}在 C20 中這會導致編譯時錯誤因為 d 是字符串的無效格式說明符。單線程寫入文件#include fmt/os.hint main() { auto out fmt::output_file(guide.txt); out.print(Dont {}, Panic);}這比 fprintf 快達 9 倍。帶顏色和文本樣式輸出#include fmt/color.hint main() { fmt::print(fg(fmt::color::crimson) | fmt::emphasis::bold, Hello, {}!\n, world); fmt::print(fg(fmt::color::floral_white) | bg(fmt::color::slate_gray) | fmt::emphasis::underline, Olá, {}!\n, Mundo); fmt::print(fg(fmt::color::steel_blue) | fmt::emphasis::italic, 你好{}\n, 世界);}在支持 Unicode 的現代終端上的輸出效果更佳。基準測試速度測試庫方法運行時間 (s)libcprintf0.66libcstd::ostream1.63{fmt}fmt::print0.44Boost Formatboost::format3.89Folly Formatfolly::format1.28{fmt} 是基準測試方法中最快的比 printf 快約 50%。上述結果是在 macOS 15.6.1 上使用 clang -O3 -DNDEBUG -DSPEED_TEST -DHAVE_FORMAT 編譯 tinyformat_test.cpp 并取三次運行的最佳結果得出的。在測試中格式字符串 %0.10f:%04d:%g:%s:%p:%c:%%\n 或等效字符串被填充 200 萬次輸出結果發送到 /dev/null更多詳情可參考源代碼。在 IEEE754 浮點數和雙精度數格式化方面dtoa-benchmark{fmt} 比 std::ostringstream 和 sprintf 快 20 - 30 倍也比 double-conversion 和 ryu 更快。編譯時間和代碼膨脹format-benchmark 中的 bloat-test.py 腳本用于測試非平凡項目的編譯時間和代碼膨脹情況。它生成 100 個翻譯單元并在每個單元中使用 printf() 或其替代方案 5 次以模擬一個中等規模的項目。以下是在 Apple clang version 15.0.0 (clang - 1500.1.0.2.5)、macOS Sonoma 系統上三次運行的最佳結果優化構建 (-O3)方法編譯時間 (s)可執行文件大小 (KiB)剝離后大小 (KiB)printf1.65450IOStreams28.49884{fmt}5.05450tinyformat32.6164136Boost Format55.0530317{fmt} 編譯速度快在每次調用的二進制大小方面與 printf 相當在該系統上誤差在舍入范圍內。非優化構建方法編譯時間 (s)可執行文件大小 (KiB)剝離后大小 (KiB)printf1.45450IOStreams27.08868{fmt}4.78784tinyformat28.1185145Boost Format38.9678381為了僅比較格式化函數的開銷libc、lib(std)c 和 libfmt 均作為共享庫鏈接。Boost Format 是僅頭文件的庫因此不提供鏈接選項。運行測試若要運行測試需參考“構建庫”部分了解如何構建庫并運行單元測試。基準測試位于單獨的倉庫 format-benchmark 中要運行基準測試首先需要克隆該倉庫并使用 CMake 生成 Makefile$ git clone --recursive https://github.com/fmtlib/format-benchmark.git$ cd format-benchmark$ cmake .然后可以運行速度測試$ make speed-test或者運行代碼膨脹測試$ make bloat-test代碼遷移clang - tidy v18 提供了 modernize-use-std-print 檢查若進行相應配置它能夠將 printf 和 fprintf 的調用轉換為 fmt::print默認轉換為 std::print。使用該庫的知名項目眾多知名項目都在使用 {fmt} 庫0 A.D.一款免費、開源、跨平臺的實時策略游戲。AMPL/MP一個用于數學編程的開源庫。Apples FoundationDB一個開源的分布式事務性鍵值存儲。Aseprite動畫精靈編輯器和像素藝術工具。AvioBook一套全面的飛機運營套件。Blizzard Battle.net一個在線游戲平臺。Celestia太空實時 3D 可視化工具。Ceph一個可擴展的分布式存儲系統。ccache一個編譯器緩存。ClickHouse一個分析型數據庫管理系統。ContextVision醫學成像軟件。Contour一個現代終端模擬器。CUAUV康奈爾大學的自主水下航行器。Drake一個用于非線性動力系統的規劃、控制和分析工具箱麻省理工學院。EnvoyC 的 L7 代理和通信總線Lyft。FiveMGTA V 的修改框架。fmtlog一個高性能的 fmtlib 風格的日志庫延遲可達納秒級。FollyFacebook 的開源庫。GemRBBioware 無限引擎的便攜式開源實現。Grand Mountain Adventure一款精美的開放世界滑雪和單板滑雪游戲。HarpyWar/pvpgn經過優化的玩家對戰游戲網絡。KBEngine一個開源的大型多人在線游戲MMOG服務器引擎。KeypirinhaWindows 的語義啟動器。Kodi原 xbmc家庭影院軟件。Knuth高性能的比特幣全節點。libunicode一個現代的 C17 Unicode 庫。MariaDB關系型數據庫管理系統。Microsoft Verona用于并發所有權的研究性編程語言。MongoDB分布式文檔數據庫。MongoDB Smasher一個用于生成隨機數據集的小工具。OpenSpace一個開源的天文可視化框架。PenUltima Online (POL)一個與大多數《網絡創世紀》客戶端兼容的 MMO 服務器。PyTorch一個開源的機器學習庫。quasardb一個分布式、高性能的關聯數據庫。Quill異步低延遲日志庫。QKW將別名泛化以簡化導航并執行復雜的多行終端命令序列。redis - cerberus一個 Redis 集群代理。redpanda一個比 Kafka? 快 10 倍的關鍵任務系統替代方案用 C 編寫。rpclib一個現代的 C msgpack - RPC 服務器和客戶端庫。Salesforce Analytics Cloud商業智能軟件。Scylla一個與 Cassandra 兼容的 NoSQL 數據存儲單服務器每秒可處理 100 萬筆交易。Seastar一個先進的開源 C 框架用于現代硬件上的高性能服務器應用程序。spdlog超快速的 C 日志庫。Stellar金融平臺。Touch Surgery手術模擬器。TrinityCore開源的大型多人在線角色扮演游戲MMORPG框架。 userver framework開源的異步框架擁有豐富的抽象和數據庫驅動。Windows Terminal全新的 Windows 終端。如果您知道其他使用該庫的項目請通過電子郵件或提交問題告知。維護者{fmt} 庫由 Victor Zverovichvitaut維護同時也有許多其他人員做出了貢獻。部分貢獻者和版本信息可查看“貢獻者”和“版本發布”部分。如果您的貢獻未被列出或提及有誤請告知我們會及時更正。 商務建站 企業官網 運營推廣 返回列表 PREV 查看更多資訊 NEXT 返回資訊列表