Having just converted a server process of about 1800 lines of untyped Racket to 
1900 lines of typed Racket, I'd like to make some comments

1) I highly suggest starting in Typed Racket if you are going to go end up 
there.  I made the mistake of writing it untyped and then retrofitting which 
clearly is the more difficult path.

2) The conversion caught one likely-to-happen-sometime bug, thank you.

3) The end-product appears to be a 50%-performance hybrid due to boundary 
contracts,  but ameliorated runtime-wise by utilizing the typed/racket/no-check 
language after it's all working in type checked mode.

4) I failed to create a valid new language with conditional inclusion of typed 
and no-check variants, but a command line or in-program conditional ability to 
disable types would permit an easy to accept morphing systems which need to 
gently attain 100% typed nature.   At the moment, I use a Unix shell script to 
doctor the #lang lines.  For instance 'raco -no-check exe ...' would really be 
nice after concluding that my slow hybrid is operating correctly.

5) When retrofitting, Dr Racket nicely points out errors, which in quantity 
should perhaps be limited to speed the retrofit cycle.  Being familiar with G++ 
template errors, I was not too shocked.  One thing that I learned was instead 
of attacking the first error which often was deeper in a function, it was more 
profitable to start at the outside, i.e. the function signature, and allow that 
information to imply further information.   I found that otherwise, I ended up 
with correct but superfluous annotations.

6) A few missing typed versions of libraries were what caused me to not start 
there, notably the lack of typed/db.

Thanks,
JG

-- 
You received this message because you are subscribed to the Google Groups 
"Racket Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to racket-users+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to