In this talk Andrew brought up a great reason why he thinks that reader and writer should be renamed to source/sink. Not only is reader and writer technically wrong (a writer reads from the buffer to send data, a reader writes to the buffer to give us data), but it is also extremely confusing. Reader and writer imply agency, but in actuality they are objects. In writer.write(bytes) you are writing to a writer (whatever that means) whereas in sink.pour(bytes) it is obvious that the sink is the destination that is being fed bytes. As a bonus these semantics all work with flush perfectly already.
What he proposed in the talk is very exciting to me, but I am confused why after writergate the language still uses std.io.Reader and std.io.Writer. The change was already breaking, so why not commit to it fully? I hope it is not because the Zig foundation wants to make it more compatible with the naming schemes used in old code. To me, one of the biggest problem with programming is bad semantics confusing newcomers (or anyone for that matter) because they are inaccurate in conveying their true behavior. This what makes Zig appealing to me. It is set on being explicit, and is not afraid to learn from past mistakes to modernize programming (C) to be much more intuitive, rather than following the old ways that everyone is used to. So I hope this change will still happen, as Zig is still not 1.0.
