[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: another take on hackers and painters
Icon certainly does a very nice job. The tension between overloading
and implicit conversion is introduced by the language trying to
balance DWIM and error checking. Whereas some people may insist that
a program should never try to deduce "intent" others may happily give
that up for more succinct syntax.
In the case of Icon (as in the case of perl, I might add), having
different operators for addition and concatenation means that the
program can make good assumptions about what the programmer intended
to do. Ditto introducing a new operator for list appends. Using ||
to do list append would mean that its difficult to deduce whether by
"alpha" || ["beta"]
the programmer meant to get ["alpha","beta"] or "alphabeta" (that is
string to list then append or convert list to string and concatenate).
Its a pity that icon, having paid the expense of introducing a new
operator "|||" did not go ahead and reap its benefits. Namely,
1 ||| [2,3,4] and ["hello"] ||| "world"
should do the right thing and implicitly convert the scalars to lists
before appending the lists because ||| is a list operator. It does
these conversions for + and || afterall.
"Todd Proebsting" <toddpro@microsoft.com> writes:
> The Icon programming language got this right. The + operator is for
> numerical addition, and the || operator is for string catenation. With
> this, all the implicit conversions do what you'd expect:
> 1 + 2 => 3
> 1 + "2" => 3
> "1"+ 2 => 3
> "1"+ "2" => 3
> 1 || 2 => "12"
> 1 || "2" => "12"
> "1"|| 2 => "12"
> "1"|| "2" => "12"
>
> It's not a type problem, but an overloading-meets-conversions problem.
> I happily give up overloading for implicit conversions.
>
> (And, the ||| operator is for list append. All three are associative.)
>
> Todd
>
> -----Original Message-----
> From: owner-ll1-discuss@ai.mit.edu [mailto:owner-ll1-discuss@ai.mit.edu]
> On Behalf Of Guy Steele - Sun Microsystems Labs
> Sent: Wednesday, May 21, 2003 12:02 PM
> To: Jerry.Jackson@sun.com
> Cc: ll1-discuss@ai.mit.edu
> Subject: Re: another take on hackers and painters
>
>
>
> Date: Wed, 21 May 2003 09:48:11 -0600
> From: Jerry Jackson <Jerry.Jackson@Sun.COM>
> CC: ll1-discuss@ai.mit.edu
> Subject: Re: another take on hackers and painters
>
>
>
> Matt Hellige wrote:
>
> > [Dan Sugalski <dan@sidhe.org>]
> >
> >>At 5:00 PM -0400 5/20/03, John Clements wrote:
> >>
> >>>...
> >>>
> >>>Depends what you mean by "a type problem." If I'm adding a number
>
> >>>and a string, that's definitely a "type problem,"
> >>>
> >>Is it? What's wrong with 1 + "3" producing 4?
> >>
> >
> > Wow... That just makes me cringe... And sets off my "perl
> proximity"
> > alarm. By the same token, why not have 1 + "3" produce the string
> "13"?
> >
>
> Heh, heh. That's what Java does... :-)
>
> With the unfortunate consequence, I might add, that
> the "+" operator fails to be associative:
>
> ("foo" + 1) + 3 => "foo13"
> "foo" + (1 + 3) => "foo4"
>
> --Guy
>
>
>
--
Jasvir Nagra
http://www.cs.auckland.ac.nz/~jas