typing
Joe Armstrong
joe@REDACTED
Thu Aug 24 09:29:39 CEST 2000
On Wed, 23 Aug 2000, Alexander Williams wrote:
> On Wed, Aug 23, 2000 at 03:14:41PM +0100, Sean Hinde wrote:
> > Some of the comments came from a guy here who in a previous life spent 7
> > years writing SCPs in C. He is finding that he needs to be much more careful
> > about typos than he used to be. Old C model - hack it in let the compiler
> > find the typos, Erlang model - type it in very carefully and hope that in 6
> > months time your typo doesn't cause a breakage. He is feeling insecure about
> > some of his code compared to C (!)
Typing *is* useful but not a universal panacea. A type checker could
*prove* that the following factorial program was correct:
+type fac(int()) -> int().
fac(1) -> 17.
To get a "nice warm feeling inside" I'd also like to make a few spot
checks (i.e. compute fac(6) and check that I really do get 720)!
<<this is called testing :-)>>
As for being insecure in Erlang compared to C IHMO it's the other
way around.
In Erlang I write:
-module(fac).
-export([fac/1]).
fac(0) -> 1;
fac(N) -> N * fac(N-1).
And then incremetally test.
[joe@REDACTED] > erl
Erlang (BEAM) emulator version 4.9.1.b8 [source]
Eshell V4.9.1.b8 (abort with ^G)
1> c(fac).
{ok,fac}
2> fac:fac(6).
720
- looking good. I'm getting a nice warm feeling inside :-)
(oh and there *is* no type proof of correctness - but I'm not worried)
- try again
3> fac:fac(200).
788657867364790503552363213932185062295135977687173263294742533244359449963403342920304284011984623904177212138919638830257642790242637105061926624952829931113462857270763317237396988943922445621451664240254033291864131227428294853277524242407573903240321257405579568660226031904170324062351700858796178922222789623703897374720000000000000000000000000000000000000000000000000
Now I have to make an act of faith - do I believe this? -
Yes - the bignumber stuff was and is carefully tested.
Would I believe a C program that did the same thing? - no I'd have
to start worrying about the exact point when things overflowed etc. and
*that* is hard.
> 'm not sure I really understand his adopted mindset, though maybe
> that comes from having worked in dynamic languages extensively.
>
> Does he not do integrated testing as he goes? Crank up a temporary
> Erlang node and send in the module/application, then begin unit
> testing of the functions over various inputs. If he does it as he
> goes, actually testing interactively as he writes the source, perhaps
> he'll be MORE secure about his code, because its been tested a brick
> at a time.
Yes!
>
> Programming in dynamic languages does require a change in operational
> development mindset; the compiler no longer catches some kinds of
> errors for you, but is better at catching/adapting to others. Using
> the same kind of write-compile-rewrite cycle doesn't make sense. (I
> end up having the interpreter running, and literally "testing as I
> go." Probably end up testing more things that could go wrong than
> even the type system would catch, really.)
Yes again. It's even nicer you get to run your program really early in the
development cycle.
I view programming as the gradual discoving of types. When the
development is over I then know the types. If I'd known them before
I'd started then the program would have "written itself".
Erlang is an vehicle that helps me discover the types.
/Joe
--
Joe Armstrong,
Bluetail AB, tel: +46 8 692 22 11
Hantverkargatan 78, fax: +46 8 654 70 71
SE-112 38 Stockholm, Sweden info: www.bluetail.com
More information about the erlang-questions
mailing list