Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Switch CARBON_VLOG to support a format string API. #4283

Merged
merged 10 commits into from
Sep 11, 2024

Commits on Sep 8, 2024

  1. Switch CARBON_VLOG to support a format string API.

    The goal is to replace our stream operator APIs with format string APIs
    that can be made to have much less impact on inlining and other
    optimizations of the performance critical path through the code.
    
    Several experiments show that the most compact representation we can
    arrange for is one that calls an uninlined function and passes a minimal
    number of arguments to it. It doesn't help to do any work to minimize
    the arguments such as building a lambda -- the cost of extra code to
    merge the arguments is likely to outweigh the benefit.
    
    Initial experiments showed that switching a hot but uninlined function
    to this new API enabled inlining and the subsequent performance
    improvement.
    
    This also adds a 'TemplateString` utility that allows using a string
    literal as a template parameter. This is useful to remove the format
    string itself from the arguments passed to the function by passing it as
    a template argument instead.
    
    Currently, support is left in place for both APIs because with
    `CARBON_VLOG` we can detect whether or not any message was provided
    expecting a format string. This should allow incrementally migrating
    code to this API. I've added some test coverage in this PR, but I'll
    separate out any switching of parts of the codebase over.
    
    The goal is to eventually replace all the usages and remove the
    streaming support entirely.
    
    This PR doesn't update `CARBON_CHECK` in the same way because it is
    substantially more complex to switch. I have a few experimental PRs
    looking at that and will discuss how best to approach this with the
    specific challenges check presents separately. But the goal is for all
    of the macro-based output APIs to move to format strings rather than
    streams.
    chandlerc committed Sep 8, 2024
    Configuration menu
    Copy the full SHA
    0056c69 View commit details
    Browse the repository at this point in the history

Commits on Sep 9, 2024

  1. Apply suggestions from code review

    Co-authored-by: josh11b <15258583+josh11b@users.noreply.github.com>
    chandlerc and josh11b authored Sep 9, 2024
    Configuration menu
    Copy the full SHA
    2ff364c View commit details
    Browse the repository at this point in the history
  2. review

    chandlerc committed Sep 9, 2024
    Configuration menu
    Copy the full SHA
    aab411a View commit details
    Browse the repository at this point in the history
  3. format

    chandlerc committed Sep 9, 2024
    Configuration menu
    Copy the full SHA
    59a13b8 View commit details
    Browse the repository at this point in the history
  4. Configuration menu
    Copy the full SHA
    6fd5168 View commit details
    Browse the repository at this point in the history

Commits on Sep 11, 2024

  1. Apply suggestions from code review

    Co-authored-by: Richard Smith <richard@metafoo.co.uk>
    chandlerc and zygoloid authored Sep 11, 2024
    Configuration menu
    Copy the full SHA
    b552b26 View commit details
    Browse the repository at this point in the history
  2. Update common/template_string_test.cpp

    Co-authored-by: Richard Smith <richard@metafoo.co.uk>
    chandlerc and zygoloid authored Sep 11, 2024
    Configuration menu
    Copy the full SHA
    d04daec View commit details
    Browse the repository at this point in the history
  3. fix more C-string

    chandlerc committed Sep 11, 2024
    Configuration menu
    Copy the full SHA
    f93b3b2 View commit details
    Browse the repository at this point in the history
  4. clean up and comment

    chandlerc committed Sep 11, 2024
    Configuration menu
    Copy the full SHA
    91e1e8e View commit details
    Browse the repository at this point in the history
  5. fixes

    chandlerc committed Sep 11, 2024
    Configuration menu
    Copy the full SHA
    b79e8ba View commit details
    Browse the repository at this point in the history