Kawa proposed typing changes

Per Bothner per@bothner.com
Sun Sep 27 16:36:00 GMT 2009


On 09/26/2009 11:21 AM, Helmut Eller wrote:
> * Per Bothner [2009-09-26 18:34+0200] writes:
> A minor question is if
>
>   (+ int (+ integer-literal integer-literal))
>
> has a different type than
>
>   (+ (+ int integer-literal) integer-literal)

Good question.  They both get int type:

(define (Foo (x :: int))
   (let ((y (+ x (+ 2 3)))
	(z (+ (+ x 5) 7)))
     (* y z)))

becomes:

Method name:"Foo" public static Signature: (int)int
Attribute "Code", length:81, max_stack:3, max_locals:3, code_length:15
   0: iload_0
   1: iconst_5
   2: iadd
   3: iload_0
   4: iconst_5
   5: iadd
   6: bipush 7
   8: iadd
   9: istore_2
  10: istore_1
  11: iload_1
  12: iload_2
  13: imul
  14: ireturn


>
>
>>> or string conversions are needed.
>>
>> What "string conversions" were you thinking about?
>
> Code like this:
>
> (define (foo (s java.lang.String)) s)
> (define (bar (s String)) (foo s))
> (define (baz (s gnu.lists.FString)) (bar s))
>
> (let ((x (string #\a)))
>    (list (instance? x java.lang.String)
>          (instance? (baz x) java.lang.String)))
>
> =>  (#f #t)
>
> Apparently x gets converted to java.lang.String somewhere along the way.
>
>>> Warnings about
>>> improper tail calls would also be nice.
>>
>> I'm concerned about too many false positives.
>> Any ides for avoiding that?
>
> If there is a compiler switch like [no-]warn-tail-calls it could be used
> as argument to with-compile-options on selected regions.  Or the
> compiler switch could also have arguments to name [un]interesting
> functions like
>
>   (with-compile-options warn-tail-calls: (foo) no-warn-tail-calls: (bar)
>     (if x
>         (foo) ; warn
>         (bar) ; ignore
>         ))
>
>
> BTW, it would be useful if Kawa had a disassemble function which takes
> procedures as argument.  That would be much more convenient than
> compiling to a class file and calling javap on it.

I agree.  More soon ...
-- 
	--Per Bothner
per@bothner.com   http://per.bothner.com/



More information about the Kawa mailing list