In parallel with preparing the next release, I am working on a separate code branch that tries to finish the task of fixing ECL's C API.<div><br></div><div>There are several things to do but the most important ones are</div>
<div><br></div><div>- Remove useless macros</div><div>- Provide accessors for all object properties that are there to stay</div><div>- Prefix macros and functions with ECL_, CL_, SI_ or EXT_</div><div>- Thinking again about function names and providing compatibility macros for deprecated ones.</div>
<div><br></div><div>I have been also thinking about the names and spelling of macros and functions. So far most of the C macros are uppercase names and may interrogate the macro argument twice, as in</div><div><br></div><div>
<div>#define ECL_ARRAYP(x) ((_ecl_tag(x) == 0) && (x)->d.t >= t_array && (x)->d.t <= t_bitvector)</div><div></div></div><div><br></div><div>The main problem is the lack of uniformity:</div><div>
<br></div><div>- Some macros check their arguments, most do not</div><div>- Some macros do have lowercase names, but typically they do not evaluate their argument twice</div><div>- Some functions prefixed with ecl_ do not check their arguments, others do.</div>
<div><br></div><div>If we had inline functions as standard things might be easier, but we would still have to decide to do argument checking, not to do it, providing versions of both or deciding a feature in the name that makes it easy to test it.</div>
<div><br></div><div>So far I am more or less approaching the following rules</div><div><br></div><div>- Accessors for object elements, as in ECL_SINGLE_FLOAT_VALUE are uppercase.</div><div>- Macros are all uppercase if we can not guarantee that they evaluate their argument once.</div>
<div>- Names are being changed to make them more like Common Lisp (sf(x) -> ECL_SINGLE_FLOAT_VALUE(x)), etc.</div><div>- All type predicates (ECL_ARRAYP) are uppercased macros.</div><div>- I am also inclined towards removing type checks from ecl_* functions except when the check is extremely cheap, as when we have performed a dispatch based on type.</div>
<div><br></div><div>Help is welcome for improving the overal design</div><div><br></div><div>Juanjo</div><div><br>-- <br>Instituto de Física Fundamental, CSIC<br>c/ Serrano, 113b, Madrid 28006 (Spain) <br><a href="http://tream.dreamhosters.com">http://tream.dreamhosters.com</a><br>

</div>