Skip to content
Snippets Groups Projects
Forked from Glasgow Haskell Compiler / GHC
5869 commits behind the upstream repository.
  • Matthew Pickering's avatar
    e058b138
    Interface Files with Core Definitions · e058b138
    Matthew Pickering authored and Marge Bot's avatar Marge Bot committed
    This commit adds three new flags
    
    * -fwrite-if-simplified-core: Writes the whole core program into an interface
      file
    * -fbyte-code-and-object-code: Generate both byte code and object code
      when compiling a file
    * -fprefer-byte-code: Prefer to use byte-code if it's available when
      running TH splices.
    
    The goal for including the core bindings in an interface file is to be able to restart the compiler pipeline
    at the point just after simplification and before code generation. Once compilation is
    restarted then code can be created for the byte code backend.
    This can significantly speed up
    start-times for projects in GHCi. HLS already implements its own version of these extended interface
    files for this reason.
    
    Preferring to use byte-code means that we can avoid some potentially
    expensive code generation steps (see #21700)
    
    * Producing object code is much slower than producing bytecode, and normally you
      need to compile with `-dynamic-too` to produce code in the static and dynamic way, the
      dynamic way just for Template Haskell execution when using a dynamically linked compiler.
    
    * Linking many large object files, which happens once per splice, can be quite
      expensive compared to linking bytecode.
    
    And you can get GHC to compile the necessary byte code so
    `-fprefer-byte-code` has access to it by using
    `-fbyte-code-and-object-code`.
    
    Fixes #21067
    e058b138
    History
    Interface Files with Core Definitions
    Matthew Pickering authored and Marge Bot's avatar Marge Bot committed
    This commit adds three new flags
    
    * -fwrite-if-simplified-core: Writes the whole core program into an interface
      file
    * -fbyte-code-and-object-code: Generate both byte code and object code
      when compiling a file
    * -fprefer-byte-code: Prefer to use byte-code if it's available when
      running TH splices.
    
    The goal for including the core bindings in an interface file is to be able to restart the compiler pipeline
    at the point just after simplification and before code generation. Once compilation is
    restarted then code can be created for the byte code backend.
    This can significantly speed up
    start-times for projects in GHCi. HLS already implements its own version of these extended interface
    files for this reason.
    
    Preferring to use byte-code means that we can avoid some potentially
    expensive code generation steps (see #21700)
    
    * Producing object code is much slower than producing bytecode, and normally you
      need to compile with `-dynamic-too` to produce code in the static and dynamic way, the
      dynamic way just for Template Haskell execution when using a dynamically linked compiler.
    
    * Linking many large object files, which happens once per splice, can be quite
      expensive compared to linking bytecode.
    
    And you can get GHC to compile the necessary byte code so
    `-fprefer-byte-code` has access to it by using
    `-fbyte-code-and-object-code`.
    
    Fixes #21067
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
T16670_th.stdout 42 B
~~~~~~~~ testing T16670_th
./my-odir/TH.o