Tom Hughes <[EMAIL PROTECTED]> writes:
>In message <[EMAIL PROTECTED]>
>        Dan Sugalski <[EMAIL PROTECTED]> wrote:
>
>> At 10:42 AM 11/29/00 +0000, Nick Ing-Simmons wrote:
>>
>> >FILE * is not a good idea. PerlIO * is fine.
>> 
>> The problem with that is we're potentially getting the filehandle from
>> something that isn't perl. Or so my thinking went at the time. Right
>> now I'm thinkng that I need to rethink things.

That was my point. The Parser API should stick to PerlIO * - which is 
an abstract interface. How that interface gets provided is none
of the _parser's_ business.

There is another side to this - perl itself (particularly on Win32 or 
other places where stdio is "broken") may not have a FILE * to give 
you - it may only have PerlIO *.

>
>That shouldn't matter so long as there's a simple way to create
>a PerlIO * from a FILE * or whatever.

Bleadperl work on PerlIO is teaching that it is not necessarily "simple" to 
convert one to the other. One can wrap a FILE * inside a PerlIO simply 
enough, provided that the provider then promisses not to touch it in 
anyway while perl is messing with it, but the FILE *-ness gets
exposed. For example there are issues with FILE *'s
'textmode' and PerlIO's crlf layer fighting. Unless we inherit perl5's
twin-IO * concept (which I would not recommend at this stage) there are also 
issues with bi-directional things like sockets.

It is (currently) much better to open a PerlIO * from the outset,
either from a pathname, or a low level "file descriptor" (what a
low-level descriptor is on non-UNIX is work in progress).

Now we should be able to clean that up some (even in perl5) but 
we don't want to expose all the mess to the _parser_ API.

If we say FILE * we _may_ have to say - FILE *, open in binmode, not 
line buffered, not to a socket on Win32, ... and a whole host 
of other gunk. And then (presumably) inside the parser wrapper do 
the right thing to turn it into a PerlIO * so we can use UTF8, 
CRLF, encode/decode etc.

Better (IMHO) to do that _outside_ the parser API under another 
committee's juristiction. 

>
>That's probably something that needs to be specific to different
>language bindings - if you're embedding perl in C++ you probably
>have an iostream, and if you're embedding in Java you'll have a
>Java stream object. In each case you'll want an easy way to create
>a PerlIO object from that.

Why not export the PerlIO API and have language call that?

But if not possible then we can write 

parse_FILE(FILE *x,...)

which takes the FILE *, wraps in in a PerlIO * calls the generic Parser
unwraps can cleans up and returns.

>
>Tom
-- 
Nick Ing-Simmons <[EMAIL PROTECTED]>
Via, but not speaking for: Texas Instruments Ltd.

Reply via email to