On Monday 01 September 2003 16:43, Dominique Devienne wrote: > > -----Original Message----- > > From: peter reilly [mailto:[EMAIL PROTECTED] > > > > > 3. <macrodef> and <presetdef> > > > > a) resolution of properties > > The issue here is that properties get resolved when the > > macro is used and not when the macro is defined. > > I think that it would be difficult to resolve the > > properties correctly when the macro is defined. > > > > I think that the current implementation and behaviour is > > preferable. > > I think it's sad that you reflect on this from the implementation > perspective rather than the user's one... One of the major 'feature' > of Ant is that it is very explicit and relatively simple.
The problem is that I do not know how (or if it is possible) to implement the feature of expanding the properties at definition time. > > It's not all about power, or one would use a real programming language > like Perl or Python. <macrodef>, although powerful, complexifies the rules > of Ant, namely the property expansion one, making it context dependent! > > Never underestimate the power and simplicity of context/scope free rules. > Although Ant already has scopes with <ant>/<antcall>/<subant>, the property > expansion rules works the same everywhere, and I'd like this to stay the > same. <macrodef> follows (I think) the same rules of properties as <antcall> with inheritall=yes. <target name="do.echo.target"> <echo>${do.echo}</echo> <do.echo.task/> </target> <target name="do.echo.test"> <macrodef name="do.echo.task"> <sequential> <echo>${do.echo}</echo> </sequential> </macrodef> <antcall target="do.echo.target"> <param name="do.echo" value="Hello world"/> </antcall> </target> <macrodef> should make ant a little simpler by removing the need for a lot of <antcall>s. People sometimes use them at the moment to emulate macros/templates. Normally (I think), <macrodef> would be used in the same project that defined it, so the rules for property expansion would not be an issue. > > > b) syntax of attributes > > After using macrodef for a little while (well mostly in writing > > examples), I think that ${name} feels the best. > > That's one opinion. You obviously don't mind complexity yourself b-) > I, OTOH, prefer things clear&simple, with the least possible surprise. Ok, after using perl, I do not like the idea of having different syntax for different (but similar) things. > > > In future I expect that there will be different scopes for > > variables/properties (perhaps only for ant-contrib / antelope > > / other and not in core ant), - task level variables, macro level > > variables and global variables (properties). It would be strange > > to have different syntax for each. > > Wowwww, hold on! We're not turning Ant into a programming language, > remember? But it is one of the objectives/consequences of ant-contrib/antelope. One would like to do things like: <notation:warning name="Use of ant as a progamming language" <foreach param="file"> <path> <fileset dir="${test.dir}/mains" includes="*.cpp"/> <pathelement path="${test.dir}/probeoffline/probeoffline.cpp"/> <pathelement path="src/shell/probesh.cpp"/> </path> <sequential> <propertyregex property="program" input="${file}" regexp=".*/([^\.]*)\.cpp" replace="\1"/> <compile-exec program="${program}"> <cc-files> <path path="${file}"/> </cc-files> </compile-exec> <compile-exec-file file="${file}"/> </sequential> </foreach> </notation:warning> without the "program" property being visible outside the foreach sequential element. > > > However this (unlike a) is easy to code for :-), if ${name} syntax > > is not liked my other preference would be ${macroattr:name}. > > Sigh... Again, this notation would introduce a subtle variation on property > expansion, which may indeed be backward incompatible. It's currently > perfectly > OK to have regular property names that for some reason start with > macroattr:. Ok, scratch ${macroattr:name}. > > Property interceptors are not part of Ant, and might never be for that > matter. > Using a notation that mimicks interceptors is probably not a good idea > either. > > As I've been saying all along, lets just introduce a new (unique) notion > for attribute/variable expansion (at use time rather than definition time), > which > is something new in Ant anyhow. No (or less?) backward compatibility > issues, and makes it plain and obvious what is what: > > ${name} it's a property! > (@name) it's an attribute/variable!!! yes but (IMO) this is confusingly similar to XPath use of variables. <macrodef name="cut"> <attribute name="use"> <sequential> <xmltask source="input.xml" dest="1.xml > <cut path="web/servlet/context/[EMAIL PROTECTED]'(@use)']" buffer="storedXml" /> </xmltask> </sequential> </macrodef> > > No context, no unnecessary brain cycles to figure out what is what. > > I'll be just as glad as the next guy to use <macrodef>, I just don't want > that > power to come of the expanse of Ant's simplicitly and user-friendliness. +1 Peter --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]