Skip to content

Remove <string> includes in headers to improve build time#1840

Merged
dsnopek merged 1 commit into
godotengine:masterfrom
dementive:no-std-string
Sep 15, 2025
Merged

Remove <string> includes in headers to improve build time#1840
dsnopek merged 1 commit into
godotengine:masterfrom
dementive:no-std-string

Conversation

@dementive

@dementive dementive commented Sep 9, 2025

Copy link
Copy Markdown
Contributor

The <string> header was in class_db.hpp and method_bind.hpp even though no parts of it are used in either of those files. I also removed the <iostream> header from class_db.hpp because it was also unused. Both of these files ended up getting included in thousands of other cpp files so slowed down build time a lot.

There seem to be only 2 uses of code from <string> in godot-cpp as the code works now:

  1. In src/godot.cpp it was used for printf and snprintf. Removing from the class_db header broke this but just including stdio fixed it.
  2. It was also used in templates/char_traits.cpp for std::char_traits::length. I left the include in this file because I didn't want to change how it works and it's in a cpp file so it doesn't matter that much.

I did 2 test runs where I ran with ClangBuildAnalyzer and the time command then did scons --clean. These are the timings I got before and after making these changes:

Without these changes

Executed in 108.61 secs
Executed in 107.91 secs

**** Time summary:
Compilation (1025 times):
Parsing (frontend): 1701.6 s
Codegen & opts (backend): 187.1 s

With these changes

Executed in 97.04 secs
Executed in 91.19 secs

**** Time summary:
Compilation (1025 times):
Parsing (frontend): 1393.1 s
Codegen & opts (backend): 181.2 s

@dementive
dementive requested a review from a team as a code owner September 9, 2025 02:02

@Ivorforce Ivorforce left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Makes sense to me. We do not use std::string with godot-cpp. So it should be good as long as it compiles.

@Calinou Calinou added enhancement This is an enhancement on the current functionality topic:buildsystem Related to the buildsystem or CI setup labels Sep 9, 2025

@Calinou Calinou left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code looks good to me.

@dsnopek
dsnopek merged commit d884bb1 into godotengine:master Sep 15, 2025
16 checks passed
@dsnopek

dsnopek commented Sep 15, 2025

Copy link
Copy Markdown
Collaborator

Thanks!

@dsnopek

dsnopek commented Oct 20, 2025

Copy link
Copy Markdown
Collaborator

Cherry-picked for 4.4 in PR #1871

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement This is an enhancement on the current functionality topic:buildsystem Related to the buildsystem or CI setup

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants