Received: from mail.proteosys.com ([213.139.130.197]) by nummer-3.proteosys with Microsoft SMTPSVC(6.0.3790.3959); Sun, 23 Dec 2007 22:10:55 +0100 Received: by mail.proteosys.com (8.13.8/8.13.8) with ESMTP id lBNLAonm031719 for ; Sun, 23 Dec 2007 22:10:50 +0100 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 lBNL2Clc001608 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Sun, 23 Dec 2007 22:02:12 +0100 Received: from listserv.uni-heidelberg.de (listserv.uni-heidelberg.de [129.206.100.94]) by listserv.uni-heidelberg.de (8.13.1/8.13.1) with ESMTP id lBMN1CN1027434; Sun, 23 Dec 2007 22:02:00 +0100 Received: by LISTSERV.UNI-HEIDELBERG.DE (LISTSERV-TCP/IP release 15.0) with spool id 242425 for LATEX-L@LISTSERV.UNI-HEIDELBERG.DE; Sun, 23 Dec 2007 22:01:59 +0100 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 lBNL1xer030227 for ; Sun, 23 Dec 2007 22:01:59 +0100 Received: from mx03.kabsi.at (mx03.kabsi.at [195.202.128.130]) by relay.uni-heidelberg.de (8.14.1/8.14.1) with ESMTP id lBNL1jU6000903 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO) for ; Sun, 23 Dec 2007 22:01:51 +0100 Received: from buckbeak.hogwarts (h081217001071.dyn.cm.kabsi.at [81.217.1.71]) by mx03.kabsi.at (8.13.8/8.13.8) with SMTP id lBNL1jaX029075 for ; Sun, 23 Dec 2007 22:01:45 +0100 Received: by buckbeak.hogwarts (Postfix, from userid 1000) id 5D32B330148; Sun, 23 Dec 2007 22:01:44 +0100 (CET) References: <87k5nxw76i.fsf@buckbeak.hogwarts> <87tzmwkdnr.fsf@buckbeak.hogwarts> <18269.25346.697845.365250@morse.mittelbach-online.de> <281f1dab73f627993b7d112bbabf8b74@residenset.net> <18271.50750.510995.826662@morse.mittelbach-online.de> User-Agent: Gnus/5.11 (Gnus v5.11) Emacs/22.1.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Message-ID: <874pe9yvk7.fsf@buckbeak.hogwarts> Date: Sun, 23 Dec 2007 22:01:44 +0100 Reply-To: Mailing list for the LaTeX3 project Sender: Mailing list for the LaTeX3 project From: Andreas Matthias Subject: Re: Misleading cs names? To: LATEX-L@LISTSERV.UNI-HEIDELBERG.DE In-Reply-To: <18271.50750.510995.826662@morse.mittelbach-online.de> (Frank Mittelbach's message of "Wed\, 12 Dec 2007 12\:30\:06 +0100") Precedence: list List-Help: , List-Unsubscribe: List-Subscribe: List-Owner: List-Archive: X-ProteoSys-SPAM-Score: -2.464 () BAYES_00,FORGED_RCVD_HELO X-Scanned-By: MIMEDefang 2.57 on 213.139.130.197 Return-Path: owner-latex-l@LISTSERV.UNI-HEIDELBERG.DE X-OriginalArrivalTime: 23 Dec 2007 21:10:55.0453 (UTC) FILETIME=[4E89B8D0:01C845A8] Status: R X-Status: X-Keywords: X-UID: 5138 Frank Mittelbach wrote: > Let us step back and reevaluate what the arg forms are supposed to mean: > > \foo:abc % abc are placeholders for real arg specifiers > > is intended to be a short form for saying > > - do "a" with the first argument do "b" with the second and do "c" with the > third argument prior to passing the argument values to the base function > \foo:nnn > > - it is really only a short form of \exp_args:Nabc \foo:nnn > > It makes no statements about what \foo:nnn does with the arguments it > receives. I see. I got the meaning of arg specs wrong. But now it makes sense. > but lets recap once more > > the current model is a functional model in the sense that it provides the > programmer with additional functionality which is > > - a way to manipulate arguments passed to a macro prior to calling the macro > This model is available a) as building blocks to be used with any kind of > macro, e.g., \exp_args:N... and as b) shorthands to even further reduce > complexity in the code by turning providing memorable shorthands often used > forms of \exp_args:N... \foo:nnn as \foo:... > > in contrast the other model outlined in the discussion (which we experimented > with as well) is a descriptive model with essentially tries to describe what > kind of arguments a certain function accepts (and in case of your description > below additionally tries to describe what the function does with its > arguments) > > - a descriptive model helps to understand better what a function does > > - however, there are much too much ways of dealing with arguments inside a > function so that codifyin them will be a) incomplete and b) resulting in > a lot of complexity with little gain > > - it doesn't provide any additional functionality to the programmer other > than training his/her brain-cell on whether the third arg of some function > \foo:... was called "r" or "n" or ... > > - there is also the problem that many higherlevel commands simply do not fit > into a model that claims that each argument is typed, many commands do > accept several types and internal check what they receive and act > accordingly. Problem then is what would those get in terms of descriptive > labels? > > > so in the end we ended up with > > - going for the arg preprocessing functionality > > - providing a few bits of descriptive guidance in addition for the most > important parts where we thought they would be useful/helpful, e.g., using > upper case N to indicate that a function expects a single token rather than > a braced argument or to use T and F to indicate branches of a > conditional. This is what I meant when using the word "inconsistency" but > that usage was probably misguided as I wasn't suggesting that TF should > vanish (however, O for example, turned out to be fairly useless) Thanks for these explanations. This whole discussion showed me that things are much more intricate than I thought. I will keep this in mind when writing code. I need some more experience before I can comment on the pros and cons. Ciao Andreas ps: I couldn't respond ealier since I was windsurfing in the Red Sea for the last two week. It was marvellous.