From mboxrd@z Thu Jan 1 00:00:00 1970 Received: (from majordomo@localhost) by pauillac.inria.fr (8.7.6/8.7.3) id XAA27289; Wed, 28 Apr 2004 23:44:48 +0200 (MET DST) X-Authentication-Warning: pauillac.inria.fr: majordomo set sender to owner-caml-list@pauillac.inria.fr using -f Received: from nez-perce.inria.fr (nez-perce.inria.fr [192.93.2.78]) by pauillac.inria.fr (8.7.6/8.7.3) with ESMTP id XAA27277 for ; Wed, 28 Apr 2004 23:44:46 +0200 (MET DST) Received: from gatekeeper.elmer.external.excelhustler.com (gatekeeper.excelhustler.com [68.99.114.105]) by nez-perce.inria.fr (8.12.10/8.12.10) with ESMTP id i3SLijjq007702 for ; Wed, 28 Apr 2004 23:44:45 +0200 Received: from chatterbox.elmer.internal.excelhustler.com (unknown [192.168.0.12]) (using TLSv1 with cipher EDH-RSA-DES-CBC3-SHA (168/168 bits)) (Client CN "chatterbox.elmer.internal.excelhustler.com", Issuer "excelhustler.com" (not verified)) by gatekeeper.elmer.external.excelhustler.com (Postfix) with ESMTP id 7FE17E01DF; Wed, 28 Apr 2004 16:44:42 -0500 (CDT) Received: from localhost (localhost [127.0.0.1]) by chatterbox.elmer.internal.excelhustler.com (Postfix) with ESMTP id 4AF885C006; Wed, 28 Apr 2004 16:44:42 -0500 (CDT) Received: from wile.internal.excelhustler.com (wile.internal.excelhustler.com [192.168.1.34]) by chatterbox.elmer.internal.excelhustler.com (Postfix) with ESMTP id 35A3F5C005; Wed, 28 Apr 2004 16:44:42 -0500 (CDT) Received: by wile.internal.excelhustler.com (Postfix, from userid 1000) id 30DD31405C; Wed, 28 Apr 2004 16:44:42 -0500 (CDT) Date: Wed, 28 Apr 2004 16:44:42 -0500 From: John Goerzen To: Benjamin Geer Cc: caml-list@inria.fr Subject: Re: [Caml-list] Re: Common IO structure Message-ID: <20040428214442.GE10198@excelhustler.com> References: <016401c42bc4$b6438840$19b0e152@warp> <20040428.004358.45522587.yoriyuki@mbg.ocn.ne.jp> <016501c42c73$24e64b30$ef01a8c0@warp> <20040428.015800.126758722.yoriyuki@mbg.ocn.ne.jp> <408EEE3E.7050008@socialtools.net> <20040428034415.GB19564@complete.org> <40902265.9040702@socialtools.net> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <40902265.9040702@socialtools.net> User-Agent: Mutt/1.5.5.1+cvs20040105i X-Scanned-By: clamscan at chatterbox.elmer.internal.excelhustler.com X-Miltered: at nez-perce by Joe's j-chkmail ("http://j-chkmail.ensmp.fr")! X-Loop: caml-list@inria.fr X-Spam: no; 0.00; caml-list:01 2004:99 nio:99 api:01 layered:01 wrappers:01 cannasse:01 python:01 readline:01 extlib:01 abstractions:01 readline:01 encodings:01 implemented:01 unicode:01 Sender: owner-caml-list@pauillac.inria.fr Precedence: bulk On Wed, Apr 28, 2004 at 10:30:13PM +0100, Benjamin Geer wrote: > >>the new one (java.nio)[2]. The old one has the virtue of being easy to > >>understand and use, and flexible enough for many situations. The basic > > > >Uh, no. I don't have the API reference in front of me, > > I provided links to it in the very message you're replying to. > > >but I seem to > >recall somewhere around a dozen or so predefined classes for doing > >I/O... > > I've been using java.io every day for several years, and I find those > classes simple and intuitive, particularly the layered approach of using > wrappers to add functionality to stream objects, as Nicholas Cannasse > points out in another message. I'm looking at java.io right now. I count no less than 10 interfaces and 50 classes. Let's say that I want to open up a file for read/write access and be able to seek around in it. Looking at the class list, I don't know if I want BufferedInputStream, BufferedOutputStream, BufferedReader, BufferedWriter, CharArrayReader, CharArrayWriter, DataInputStream, DataOutputStream, File, FileDescriptor, FileInputStream, FileOutputStream, FileReader, FileWriter, InputStream, InputStreamReader, OutputStream, OutputStreamWriter, RandomAccessFile, Reader, or Writer. Really, I literally *do not know how to open a simple file*. I would not call that intuitive. Even OCaml, for all its faults, makes that easier (and that's after I've already found the function I need in Unix!) > >Python is simple. One standard for everything. You get read(), > >write(), readline(), readlines(), xreadlines() (hello Extlib, this one's > >for you), seek(), etc. This can apply to files, strings, sockets, > >pipes, whatever. Before we can start fussing about unicode > >abstractions, I think we need to have a uniform I/O layer. > > OK, but then you can leave out readline(), readlines() and xreadlines(), > because they don't make any sense unless you've already dealt with > character encodings. No, they can simply be implemented in terms of read(). > Then, before you can divide text into lines, you also need to know which > newline character(s) to use. This needs to be configurable > programmatically rather than guessed based on the platform the program > is running on; some protocols require you to use \r\n regardless of the > platform. That's pretty easy as a class variable, not to mention that \r\n or \n line-endings can be automatically handled in a reliable way if used uniformly throughout a file. -- John ------------------- To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners