Jos van Uden:

I added that precondition reluctantly, that's why its short :-). I really feel that
input validation should be done elsewhere.

A full validation needs to be done somewhere :-)


I was thinking about adding a factory method to the UTM that accepts a string array, parses and validates it, and returns a fully initialized immutable TuringMachine.
It would still be a lot of ugly code though.

Probably in D there are better solutions.



That stronger typing can reduce the need for input checking is something I find interesting.

It's interesting :-) A strong typing has some disadvantages (the code is more fussy, the program usually gets a little less easy to read and a little longer, etc.), but it has some advantages too. Languages like Ada, Haskell and ATS enjoy such strong typing to avoid many bugs and many run-time errors.

In some Rosettacode Tasks I have put two different solutions, one less and one more strongly typed:

http://rosettacode.org/wiki/Hidato#D

http://rosettacode.org/wiki/Matrix_multiplication#D

There are languages like ATS (http://www.ats-lang.org/ ) able to catch statically many problems otherwise found at run-time in lesser languages. Well written ATS programs are also fast as C programs, so there is no loss in performance. On the other hand writing ATS code is not easy.


I'll have a look at the Ada code.

Ada code is very readable (far more than C++). But compared to D you have to write too much code.


(but we have also to benchmark if this doesn't decrease the program performance for a
successive bigger Busy Beaver machine):

On the other hand, if we have stronger typing we may not have to do the rather expensive
checks that are currently in the loop.

Right :-)

Onward to the next Rosetta tasks :-)

Bye,
bearophile

Reply via email to