[chuck-users] wishlist for the new year

Hans Aberg haberg at math.su.se
Sun Jan 3 14:24:18 EST 2010


On 3 Jan 2010, at 16:47, Kassen wrote:

>> If we're serious about changing the ChucK language, I'd put in my  
>> vote
>> for a Ruby-style approach.
>
> Personally I'm more interested in looking what issues those other
> languages solve, how those related to our concerns, then finally
> figuring out how to solve those things in a ChucKist way.

I think so, too. All computer languages have quirks, or "gotchas" as  
they are called here:
   http://en.wikipedia.org/wiki/Gotcha_(programming)

In addition, languages tend to be well designed for a certain type of  
issues, and using them in other circumstances can be rather cumbersome.

> If you are really interested in mixing ChucK and Ruby you may want to
> look at what's on Tom's cocktail menu; http://github.com/alltom/ruck

This link describes some peculiarities of Ruby, of which some are not  
so good:
   http://en.wikipedia.org/wiki/Ruby_(programming_language)#Deviations_from_behaviour_elsewhere

For example, imposing extra conditions on identifiers is not good - I  
use Haskell, in which variables can only start with lower case (those  
that start with uppercase are reserved fro types), and when one  
accidentally is doing wrong, one gets mysterious compiler errors. A  
declarative language, I think is best, which is essentially what is  
used in math - the road that ChucK is on.

Another problem of languages is having too few precedence levels -  
some investigated math, and found that there are a lot more than in  
typical computer languages. Here, Ruby inherits the problem of Pascal  
for logical operators. A language benefits readability if one can  
eliminate the need of parenthesizes.

Also, Ruby treats a line ending as an end of statement, which  
generally is bad if one needs to write something that takes up more  
than one line. This idea comes from scripting languages, like shell,  
which are good for writing simple things, but known to be problematic  
for outright programs (steeps learning curve, and hard to read and  
debug).

Haskell uses an alternative called layout syntax: in addition to  
normal bracketing to environments one can drop them and use  
indentation instead. For example,
   -- Leading term in monomial order.
   lead :: Polynomial -> Term
   lead p = last xs
     where
     Xs xs = normalize p
Here, the indentation of "where" says that the stuff that follows on  
the same indentation level belongs to the block. The problem is that  
the compiler tends to give strange error messages "possibly due to  
wrong layout" and one may have to guess if it is a layout problem or  
not. (Also, it sets a tab equal to 8 spaces when computing layouts,  
which has fallen out of use.)

Haskell has the problem that the function name must be repeated often  
when defining a new function. Another quirk is the lazy evaluation,  
which is wholly incompatible with imperative structures, which leads  
to the introduction of the complicated concept of monads (an import  
from math category theory).

Getting back to Ruby, it treats various objects as Boolean, which is a  
bad idea, inviting errors. The gotcha link mentions the classical C  
mistake, confusing the two
   if (a = b) then ...
   if (a == b) then ...
The first is an assignment, and the second a test of equality - it is  
common to do mistakes on this one.

But the problem could have largely been circumvented if types did not  
implicitly convert to Boolean types. Then the first one would have  
generated a compiler error, except when programming specifically  
Boolean types, but that does not happen so often.

In general, it is a bad to have implicit type conversions to types  
which loose information. That is a C-quirk.

Anyway, just examples on what one might have to think about when  
moving along. If people try out what works and not works and discusses  
it here, that may give the developers feedback.

   Hans




More information about the chuck-users mailing list