unicode characters are not printed correctly on the windows command line?

Steven Schveighoffer schveiguy at gmail.com
Mon Dec 23 15:34:13 UTC 2019


On 12/22/19 11:53 PM, Symphony wrote:
> On Sunday, 22 December 2019 at 22:47:43 UTC, Steven Schveighoffer wrote:
>> To fix Phobos, we just(!) need to remove libc as the underlying stream 
>> implementation.
>>
>> I had at one point agreement from Walter to make a 
>> "backwards-compatible-ish" mechanism for file/streams. But it's not 
>> pretty, and was convoluted. At the time, I was struggling getting what 
>> would become iopipe to be usable on its own, and I eventually quit 
>> worrying about that aspect of it.
>>
>> We have the basic building blocks with 
>> https://github.com/MartinNowak/io and 
>> https://github.com/schveiguy/iopipe. It would be cool to get this into 
>> Phobos, but it's a lot of work.
>>
>> I bet Rust just skips libc altogether.
>>
> I don't have the ingenuity, intelligence, nor experience that many of 
> you possess, but I have *a lot* of time on my hands for something like 
> this. I assume I should start with std.stdio's source code and the 
> aforementioned projects' source code, but some guidance on this would be 
> very helpful, if not needed. D has been quite useful to me since I 
> stumbled upon it, and I think it's time to give back in some way. (I'd 
> do it financially, but I'm poor, haha) Anyway, if anybody wants to take 
> me up on this offer, just let me know!

I really appreciate the enthusiasm here, but at the risk of being 
cynical, I see little chance that this gets accepted. Before you spend 
any time on actual code, a DIP is going to be required, as this would be 
a huge change to the language. I'm sure you have a lot of time, but I 
don't want you to waste it on something that is likely to be rejected.

If you still want to proceed, even at the risk of doing a lot of work 
for nothing (or at least, a lot of work that ends up being just on 
code.dlang.org instead of Phobos), I can tell you what my plan was:

1. std.stdio.File was going to be set up to source from either an 
iopipe-based io subsystem, or a FILE *.

2. The standard handles would be open with the default C FILE * standard 
handles as the source/target.

3. Upon using any "d-like" features on a File that is sourced from a 
FILE * (i.e. byline), the File would be switched to a newly-created 
iopipe-based source. The theory is here, that once you do something like 
this, you commit to using D on that, and I'd much rather use a higher 
performing subsystem (iopipe beats Phobos right now by 2x performance). 
This only counts for things that make the File unusable on its own 
anyway. So writefln and writeln would NOT switch the source, neither 
would lockingTextReader/Writer.

4. Any new File that is opened using any constructor other than passing 
in a FILE * will be opened with an iopipe source.

5. The iopipe and io subsystems can be used directly instead of with 
File, as a lot of times you don't need that overhead.

Let me know if you decide to do this, I can guide you.

-Steve


More information about the Digitalmars-d-learn mailing list