stdio line-streaming revisited

Sean Kelly sean at f4.ca
Thu Mar 29 13:46:01 PDT 2007


Andrei Alexandrescu (See Website For Email) wrote:
> 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.

This sounds to me like logging output, which is exactly what I 
described.  The logger could be attached to the console or a socket as 
easily as a file.  Why use Cout for this?


Sean



More information about the Digitalmars-d mailing list