If the language were statically typed, I would know straight away what
type the parameter was and can look up, exactly, what it does and can
probably easily discern what it's role is.
i think that's a silly thing to say. straight away, tell me what role this
function plays:
void (*signal(volatile int x, void (*const y)(int )))(int );
??
and i don't think that's being unfair. the reason is that static typing
builds up mountains of information for even mildly complex function
definitions. there is a reason a program exists (cdecl) to decode them! it's
very existence backs my assertion that little can be groked 'staight away'
merely by statically/explicitly typing function signatures.
in addition, languages like ocaml, while also statically typed, leave this
information out of the source while still be readable:
let double x = x * 2;;
let sum x y = x + y;;
let factorial x =
if (0 > x) then (raise Exit) else
match x with
0 -> 1
> n -> (n * (factorial (n - 1)));;
notice - this is statically typed. also notice the lack of explicitly encoded
typing - the compiler figures it out.
my point, in going down this tangent, is hopefully to point out what i always
point out in these threads - that people generally do not even understand what
it means to be statically (c is static ruby is not) or strongly typed (ruby is
strongly typed, c and java are not) and, furthermore, that having this
explicitly written by the programmer has nothing to do with the existence if a
feature in the language - taking ocaml's type inference as an example.
so, to drive it home further, you seem to think 'static' means 'explicitly
written by the programmer' - but of course that's not what it means.
fortunately, the 'explicit' route is available to you in ruby by simply
following certain pratices, either comment functions or cast arguments using
the 'class name as casting ctor pattern' used all over the place in ruby. for
isntance
def m a, b, c
a = String a
b = Integer b
c = Float f
....
end
now, that's not static, but it is explicit. you can obivously follow this
pattern with user defined classes.
regards.
Now, don't misunderstand me, I'm not advocating turning Ruby into a
statically typed language. I enjoy that Ruby has no "templates" (in the
C++ sense) because every method is "templatized!" The mere fact that C++
has templates is testimony to the power of dynamic typing.
templates are not dynamic typing though - i'd say they are testimony to how
much of a bastard a strong/static/non-inferred type system can be and how
adding compiler features to do the work for us is essential. note that
templates and any other sort of compiler inference feature __remove__ explicit
type info from the source!
I'm just saying that static typing "ain't so bad," in that this is one
problem I would not have had were I working with a statically typed
language.
correct - you'd simply have different ones.
I'm also looking for how people deal with this issue, since it surely must
come up from time to time...
well, i showed one solution above. there are plenty of others.
cheers.
-a
···
On Tue, 22 Aug 2006, Just Another Victim of the Ambient Morality wrote:
--
to foster inner awareness, introspection, and reasoning is more efficient than
meditation and prayer.
- h.h. the 14th dali lama