-
Notifications
You must be signed in to change notification settings - Fork 781
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
Remove unnecessary Console.SetOut #17761
base: main
Are you sure you want to change the base?
Conversation
|
IIRC the HostedCompiler was relying on stdout redirection, should only be used for some of the legacy test suites (FsharpQA I think). But FSharpQA still runs here, so that keeps working after your change. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@majocha , @T-Gro --- I'm afraid the savedOut is necessary.
The scenario is this:
- The host application is using a non-UTF8 Encoding, E.g UTF-7 or UTF-32
- The host executes the compilation and passes in the '--utf8output' flag
- This flag changes the Encoding of the Console.Out to UTF which is not what the host app was set to.
- The purpose of the savedOut is to ensure that these changes caused by our compiler do not adversely impact the hosts.
fsharp/src/Compiler/Driver/fsc.fs
Line 276 in 52133d0
if tcConfigB.utf8output then |
It also looks as if unused binding analysis didn't find the unused: I wonder why. |
Might be related to #13849 |
Thanks @KevinRansom, this is important because it seems in the course of recent changes the test for this got lost. Also, I'm wondering, maybe just restoring the encoding (if the Out is still the same during dispose) would be less intrusive. |
I'm frankly confused about this but I suspect that setting OutputEncoding affects the underlying system level stuff and has no effect when console is redirected? |
Anything interesting from the git blame? (I can also take a look later in the day) |
@majocha --- |
I'll write a test to see what the situation is right now. I understand that from the consumer's pov it's important that fsc writes using the correct encoding according to the given switch and that console encoding is restored afterwards. |
It works, but yes a test case in the repo would be useful to ensure that it doesn't get inadvertently ripped out in the future. |
There is some code in fsi and fsc to remember and finally restore the initial
Console.Out
.However, the fsc or fsi itself never modifies console streams with
Console.SetOut
etc.Modifying a global resource like this can lead to difficult to track errors in hosted multithreaded execution, like parallel testing (#17662).
Maybe there is a reason for this that I don't see?