null references redux + Looney Tunes
language_fan
somewhere at internet.com.invalid
Sun Oct 4 03:02:08 PDT 2009
On Sun, 04 Oct 2009 04:28:35 -0500, Andrei Alexandrescu wrote:
> language_fan wrote:
>> On Sat, 03 Oct 2009 16:39:29 -0400, Justin Johansson wrote:
>>
>>> People might remember that when I picked up D and joined this forum
>>> just some 3 or so weeks ago I made mention of being a Scala
>>> refugee.*** When asked what I didn't like about Scala I commented
>>> about there being too many language constructs.
>>
>> Compared to D that is not even true. The Scala language spec lists 40
>> keywords + 10 additional reserved tokens. D 2.0 spec lists 106 keywords
>> + a bit over 60 reserved tokens. In general there are no features in
>> Scala that are not built around those keywords and tokens. The keywords
>> and token are not more heavily overloaded than in D, on the contrary in
>> my subjective opinion.
>>
>> So how I see things is that the language core in Scala is about 75%
>> smaller, faster to learn, and easier to reason about. I have to admit
>> that the features often are more powerful than in D. You need to
>> recognize concepts like contra/co/invariance, higher order functions
>> and kinds, and algebra that is based on terms discussed in lambda
>> calculus books.
>
> I agree that a hemorrhage of keywords is of dubious value, and Walter
> has been much more generous with keywords than I would have ever liked.
>
> Assuming you're not hanging out in this group just to feel smug: what
> steps do you think we could take to make D a better language than it
> currently is?
I would concentrate on combining and generalizing the core constructs and
types to cut down language complexity. Starting from basic algebraic
facts, D lacks built-in first class sum and product types. Higher order
type operators also feel like a hack. The level of orthogonality is often
very poor -- this is the result of the uncontrolled language evolution. D
was not designed to be very orthogonal in these respects. Practical
languages are rarely built with types in mind. Same applies to rationale
behind built-in meta-properties of types and free function like
constructs.
Even though templates and string mixins provide some kind of macro
facility, I would like to offer something more Scheme like, with Template
Haskell like flavor. String mixins are powerful, but unfortunately they
do not provide any kind of meta-level type system. As a result the
compile errors on the wrong abstraction level. It also fails at capturing
symbol references in a nicely scoped manner. Andrei, I remember you also
suggested all kinds of macro systems, but the discussion died ages ago.
In OOP I have found Scala and some prototype based OOP languages to
behave in the most elegant way. You should read the OOP articles by
Odersky. For instance, try to find a solution to the Node-Edge subtyping
problem in D. Experiment with traits to see how powerful they are. Try to
find justifications for the lack of genuine new features of Scala (self
types, etc.).
I cannot foretell how changing the low level abstractions changes the
overall look and feel. Probably some constructs become unnecessary,
others will remain. I do not have the skills to build a full language
that works optimally in all possible ways.
The keyword comparison was a bit unfair. I find it acceptable for a lower
level language to have a bit more keywords since there are many hardware
capabilities that need to have a mapping on the language level.
More information about the Digitalmars-d
mailing list