typing

Joe Armstrong <>
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.

[] > 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