Received: from mx0.gmx.net (mx0.gmx.net [213.165.64.100]) by h1439878.stratoserver.net (8.14.2/8.14.2/Debian-2build1) with SMTP id p8I9P7oo009795 for ; Sun, 18 Sep 2011 11:25:08 +0200 Received: (qmail 9370 invoked by alias); 18 Sep 2011 09:25:02 -0000 Delivered-To: GMX delivery to rainer.schoepf@gmx.net Received: (qmail invoked by alias); 18 Sep 2011 09:25:02 -0000 Received: from relay.uni-heidelberg.de (EHLO relay.uni-heidelberg.de) [129.206.100.212] by mx0.gmx.net (mx001) with SMTP; 18 Sep 2011 11:25:02 +0200 Received: from listserv.uni-heidelberg.de (listserv.uni-heidelberg.de [129.206.100.94]) by relay.uni-heidelberg.de (8.14.1/8.14.1) with ESMTP id p8I9MsCm019487 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Sun, 18 Sep 2011 11:22:54 +0200 Received: from listserv.uni-heidelberg.de (localhost.localdomain [127.0.0.1]) by listserv.uni-heidelberg.de (8.13.1/8.13.1) with ESMTP id p8HM14Up032401; Sun, 18 Sep 2011 11:22:53 +0200 Received: by LISTSERV.UNI-HEIDELBERG.DE (LISTSERV-TCP/IP release 16.0) with spool id 1593944 for LATEX-L@LISTSERV.UNI-HEIDELBERG.DE; Sun, 18 Sep 2011 11:22:53 +0200 Received: from relay.uni-heidelberg.de (relay.uni-heidelberg.de [129.206.100.212]) by listserv.uni-heidelberg.de (8.13.1/8.13.1) with ESMTP id p8I9Mr7V030049 for ; Sun, 18 Sep 2011 11:22:53 +0200 Received: from anchor-post-2.mail.demon.net (anchor-post-2.mail.demon.net [195.173.77.133]) by relay.uni-heidelberg.de (8.14.1/8.14.1) with ESMTP id p8I9MeP9019430 for ; Sun, 18 Sep 2011 11:22:44 +0200 Received: from morningstar2.demon.co.uk ([80.176.134.7] helo=palladium.local) by anchor-post-2.mail.demon.net with esmtp (Exim 4.69) id 1R5DaC-0005Lr-kP for LATEX-L@LISTSERV.UNI-HEIDELBERG.DE; Sun, 18 Sep 2011 09:22:40 +0000 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:6.0.2) Gecko/20110902 Thunderbird/6.0.2 MIME-Version: 1.0 References: <4E692829.2000003@morningstar2.co.uk> X-Enigmail-Version: 1.3.1 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Message-ID: <4E75B860.40106@morningstar2.co.uk> Date: Sun, 18 Sep 2011 10:22:40 +0100 Reply-To: Mailing list for the LaTeX3 project Sender: Mailing list for the LaTeX3 project From: Joseph Wright Subject: Re: Removal of previously-notified functions To: LATEX-L@listserv.uni-heidelberg.de In-Reply-To: Precedence: list List-Help: , List-Unsubscribe: List-Subscribe: List-Owner: List-Archive: X-GMX-Antispam: 0 (Sender is in whitelist: joseph.wright@MORNINGSTAR2.CO.UK); Detail=5D7Q89H36p4L00VTXC6D4q0N+AH0PUCnBi0P5cROEGjO+pG7NAH/K+tf9SrVFtpLrKONl 2T9EL4W4U4jgzLbnCcGpk1z/zwmKT/K1fv3lD0=V1; X-Resent-By: Forwarder X-Resent-For: rainer.schoepf@gmx.net X-Resent-To: rainer@rainer-schoepf.de Status: R X-Status: X-Keywords: X-UID: 6867 On 18/09/2011 09:50, Philipp Stephani wrote: > It's probably too late, I'd hope we are a long way from 'too late'! It's clear that we will continue to adjust expl3 as issues arise, and it seems pretty clear that the team are willing to look again at issues as they arise. > but I'm quite sure that the removal of > \tl_new:Nn, \ior_new:N and \iow_new:N should be reverted. It is > universally considered good style to combine declaration and > initialization of variables, and having two different commands for > declaration and setting leads to awkward duplication. Part of the reasoning we had here is that \tl_new:Nn was being used almost entirely for declaring constants. We have a conceptually-separate \tl_const:Nn for that job. The other part to the reasoning was that while we had \tl_new:Nn, we did not have \int_new:Nn, etc. So we were not exactly consistent in that regard. I guess based on the underlying TeX concept that registers have to be allocated separately to assignment, it seemed easier to take a similar approach to everything. (I also note that we'd have issues with, for example, property lists as they can't really be created and fully-assigned in one shot, at least through anything like the documented interface.) > Regarding > \io[rw]_new, without them it is is impossible to check for overwriting > of stream names. Just like with all other variable types, these should > be declared before usage. This is a slightly different issue, as streams are not exactly variables. In the current implementation, streams are undefined when they are closed, as once TeX closes a write stream we can't simple re-open it. We could I guess check for an existing file, read the entire thing to memory, then re-write it and then append. On the other hand, perhaps this would be overkill and simply overwriting would be the correct response. With a read stream, I guess we'd need to worry about whether you'd store the position in the file, so that you'd re-start from the same line. Again, this might be overkill. I guess an alternative is to set up the code such that a stream which has been closed will give a suitable error message if one tries to use it. > Also a \cs_new:N command is missing which reserves a "function" name > without assigning it. Both \io[rw]_new:N and \cs_new:N can essentially > be aliases for \chk_if_free_cs. Well, they can't simply be \chk_if_free... as there has to be a 'reserve' stage too. With \cs_new:N, the problem was that you don't know how many arguments there may be, or in what form they could be. So you'd at the least need \cs_new:Np, and then have to work out how to delimit the end of the primitive argument specification. That's before you worry about long and protected status (which apart from a small number of tmp:w functions should not vary). So for functions I'm not sure I see a gain over \cs_new(_protected)(_nopar):N(p)n. -- Joseph Wright