This is the mail archive of the kawa@sourceware.cygnus.com mailing list for the Kawa project. See the Kawa home page for more information.
At 12:09 PM 3/11/99 -0800, Per Bothner wrote:
>One option is to use extra parentheses:
> (let (((i <int>) 10)) ...)
That to me is the best form as it is most in keeping with LISP syntax.
I believe though that it should be:
(let (((<int> i) 10)) ...)
Putting the type specifier first keeps the parsing unambiguous and avoids
potential conflict with other forms.
The thing that I most want to see along these lines is the ability to have
seamless use of Java classes:
(let (((<java.util.Vector> v) ((<java.util.Vector> new <int>) 100)))
((v addElement <object>) "foo")
...)
Of course it would be even nicer if the compiler can disambiguate the
parameter types and pick the proper method.
OTOH, what about aligning this feature with Common Lisp syntax:
(let ((x 10) (y 20) ...)
(declare (type integer x y) ...)
...)
Kawa's <typename> form would also permit:
(let ((x 10) ...)
(declare (<integer> x) ...)
...)
Note that Common Lisp sez that this means that *both* x's are integer:
(define (foo x)
(declare (<integer> x))
(let ((x 10)) ...))
Common Lisp also has the 'the' form for asserting the type of values which
is probably a necessary thing (it would work with the method disambiguation
for example).
I also wonder whether it is worthwhile to try and harmonize this feature
with CLOS, at least so far as syntax where functionality is common.
jim
----------------------------------------------------------------
James P. White Netscape DevEdge Champion for IFC
IFC Exchange * Insanely great Java * http://www.ifcx.org
jim@pagesmiths.com Pagesmiths' home is http://www.pagesmiths.com