Fix Issue 6644 - std.stdio write/writef(ln) are not @trusted #2230
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
https://issues.dlang.org/show_bug.cgi?id=6644
More discussion here: http://stackoverflow.com/questions/19101305/how-can-i-do-i-o-in-safe-functions-in-d
Changes I have made to get write and family callable from
@safe
code:LockingTextWriter
and factory function@trusted
- I didn't see anything inherently unsafe about the way it manages the lock. I'm certainly open to correction, though.File.write
,File.writeln
,File.writef
andFile.writefln
to non-member functions (UFCS). This is because member functions, even templated ones, cannot infer safety. If you do not infer safety then you can calltoString
on@system
types (that may actually be unsafe) from@safe
code.stdout
global variable's usage in aprivate @trusted
property that is used bywrite
and friends. If this is not done they always infer to@system
due to accessing a global variable. I'm not 100% sure this is safe to to, but with the property being private all external use of the global will still be@system
.