stdio line-streaming revisited

Andrei Alexandrescu (See Website For Email) SeeWebsiteForEmail at erdani.org
Thu Mar 29 12:01:24 PDT 2007


Sean Kelly wrote:
> Andrei Alexandrescu (See Website For Email) wrote:
>> Sean Kelly wrote:
>>> Andrei Alexandrescu (See Website For Email) wrote:
>>>> Bill Baxter wrote:
>>>>>
>>>>> I believe the current discussion is only about under-the-hood 
>>>>> implementation issues.  So I don't think you have to worry about 
>>>>> any D libraries exposing (good or bad) C/C++ design decisions to 
>>>>> users.  Tango is going to expose the same D interface no matter how 
>>>>> it's implemented under the hood.
>>>>
>>>> That's great, however the interface has a problem too: it does not 
>>>> produce atomic strings in multithreaded programs.
>>>
>>> Which interface?  And are you talking about input or output?
>>
>> Cout. The thing is that the design using the syntax Cout(a)(b) is 
>> conducive to two separate calls to the library. I recall this has been 
>> briefly discussed here.
> 
> Just making sure we were on the same page.  In my experience, raw output 
> is typically used for logging--that's about the only case I can think of 
> where the random interleaving of messages is acceptable.  Tango has a 
> separate logging facility which performs synchronization for exactly 
> this purpose: tango.util.log.  Perhaps this particular critique would be 
> more appropriately applied to the logging package?

I don't think so. For example, I have a multithreaded program that 
starts processes on multiple machines and outputs "stamped" lines to the 
standard output - lines with a prefix clarifying which machine the line 
comes from, and at what time. That output is gzipped for efficiency and 
transported via ethernet to a hub where the lines are demultiplexed and 
put into multiple files etc.

It is essential that lines are written atomically, but beyond that, the 
actual order does not matter.


Andrei



More information about the Digitalmars-d mailing list