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