digitalmars.D - Suggestion: adding stubs to function definition
- claudio fanelli (58/58) Aug 27 2006 I am not an expert in languages ( I don't know neither english, it is no...
I am not an expert in languages ( I don't know neither english, it is no=
t =
my language :-) ),
but I think that adding a "stub" section in function definition can make=
D =
better.
Consider this example:
///this function returns the integer part of the square root of its inpu=
t
int isqrt(int x)
in{
assert(x0=3D>0);
}
out(y) {
assert( y*y <=3D x );
assert( (y+1)*(y+1) >=3D x);
}
stub{
if(x<4) return 1;
if(x<9) return 2;
if(x<16) return 3;
}
body {
//TODO
}
the stub section is optional, and if there is a stub section, the body =
section is optional.
Probably there is the need for a fixed structure in a stub section, mayb=
e =
allowing only
if-statements, return and accessing simple variables (calling a function=
, =
or using loops must be disallowed ).
The stub section can be used for:
1) prototyping: if writing the function body is complex,it is possible =
initially to write a simple stub
2) debugging: when there are both a stub section and a body section, it =
is =
possible the compare the results returned by both at compile time (in =
simple cases).
3) optimization: the information in the stub section can be used for =
optimize the code generated.
For example if somewhere there is the code
z=3D30/isqrt(7);
the compiler can convert this code to z=3D30/2; and then to z=3D15;
I am aware that stubs do not add new functions to D, and also that they =
=
can add complexity to the compiler, because I think that it is not easy =
to =
extract the information for 2) and 3) in the general case (for example i=
f =
the input parameters of the function are objects or complex types), but =
=
there are cases in which adding the functionality 2 and 3 is trivial.
Greetings.
-- =
Creato con il rivoluzionario client e-mail di Opera: =
http://www.opera.com/mail/
Aug 27 2006








"claudio fanelli" <digitalmars1.20.cfan_84084b spamgourmet.com>