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