> On Mar 9, 2016, at 11:53 PM, Daryle Walker <dary...@mac.com> wrote:
> 
>  In my head, I came up with (in Swift):

This is exactly the kind of thing that frustrates me about the Cocoa APIs: 
they’re so very bad at streams and producer/consumer patterns. This kind of 
problem really calls out for a proper stream API, not to mention channel-based 
concurrency. (An implementation in Go is trivial — you start a goroutine that 
reads from a stream until it accumulates a line, then writes the string to a 
channel.)

Anyway, given the Foundation APIs we have, your solution seems reasonable.

> I have the algorithm in mind for the parsing, then realized that the handling 
> needed to wait for the single line-break characters in case a paired 
> character followed may be generalized.

That’s reasonable in the case of reading from a file. But if you want this to 
be a general purpose library that might read from a network socket, then you’re 
about fall into a trap that I saw pretty often in Java apps running on Mac OS 
8/9. This would happen with code implementing some kind of line-oriented 
protocol like FTP:

— Client sends a command, terminated with a CR (because it’s running on Mac OS 
9 where CR was the default line ending.)
— Server parses the line and the CR, and decides it won’t signal end-of-line 
until it reads the next byte, in case it’s an LF.
— Server is now waiting to receive another byte, before it sends the command to 
the command parser.
— Client is now waiting to receive the response to its command, before it sends 
any more data.
— Deadlock!

This was due to a bug in the Java InputStream’s readLine method in Java 1.1. 
This was fixed in 1.2 by having readLine return the line after receiving the 
CR, but it also sets a flag reminding itself that if the next byte received is 
an LF it should ignore it.

Maybe this is irrelevant and/or TMI, but your post caused me to flash back to a 
common, and hard to debug, support problem circa 1999, so I had to [over]share 
:)

—Jens
_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to