On Wed, Nov 23, 2011 at 11:04 PM, Andy Wingo <wi...@pobox.com> wrote:
> Stefan, > > I must apologize for not responding to your mails! Or rather, for > responding so late. Apologies in any case. > np > On Sat 14 May 2011 20:57, Stefan Israelsson Tampe <stefan.ita...@gmail.com> > writes: > > > (macroexpand '(let ((A : integer 1)) A)) > > $2 = #<tree-il (let (A) (#{A 110}#) ((const 1)) (lexical A #{A 110}#) > (integer))> > > Obviously we'd need to type everything else, but OK. I guess my overall > reaction here is one of fear. This is really hard to get right. Though > I am not against types in tree-il in principle, I have a hard time > thinking how this can be a win for Guile. > > There are two reasons that I know of to use types: one, to avoid > run-time type checks. This could be useful to Guile in the future, but > we are not fast enough yet for it to matter. Secondly, types can prove > things about programs. But I have a hard time thinking how this relates > to the untyped parts of Guile, which will always be there. The best > work in this area that I know of is Typed Racket, and their treatment of > types and contracts. > > So, to get the advantages of types, I think it needs to be in a context > of stealing from Racket. That, in itself, is quite an effort; doable, > but it takes commitment. It does not seem to me that half-way > approaches are useful. > > But I really don't know. What do you think? > > Regards, > > Andy > -- > http://wingolog.org/ > Entering type information associated with various tree-il constructs is probably not nessesary when the speed increase is so small relative the baseline. So I would postpone any of this until jit/native compilation is available as you say. I would use the same interface as typed racket has for a typed guile. And in the first inkarnation use it just to statically prove something about correctness for those who want that. Then if any oppertunity comes to take advantage of type information for speed increase we could start an activity to enable storage if the type infromation for codegen's Also, maybe more usefull, contracts is something people here ask for so I think that we should start an activity to port that over as well. I'm a bit ignorant myself about contracts but I will read about it and see if I can do anything about it for guile. So would it be ok, to have Racket's type system ported. The question for me is if we should use the interface or if we should steel the whole shebang of system e.g. the inferential engine as well. Regards Stefan