On Monday, 16 December 2013 at 18:20:23 UTC, Andrei Alexandrescu
wrote:
Nonsense. Using extralinguistic tools including code generators
is not the exclusive appurtenance of C.
Not sure what you mean is nonsense. In general, having to resort
to macros and source-generating tools have been seen as a
weakness of the semantics of the language. In most dynamic
languages you never have to do that (because you can eval()).
However, the Unix/C philosophy has always been that of having a
conglomerate of smaller programs to build larger systems. It is
not a "quick fix", it is in line with the basic philosophy of
having many simple tools. Hence it is idiomatic.
When you reach the complexity of C++/D you really should not be
required to resort to such techniques. C is a simple language
that used to have simple compilers.
And m4, more powerful and supposedly better, has only spawned
more madness.
m4 is quite powerful, but macro-processors are annoying, if that
is what you are implying. I've only used m4 to address
limitations in more limited languages.
Current applications also demand good modeling power. The days
when one thousand lines was a nontrivial program are behind us.
The right solution is a language that combines performance
control with the modeling required by large applications.
M… There are two schools of object-orientation: that of object
oriented design/modelling and that of object oriented
programming. If you don't skip the modelling part you can write
OO in most languages. Many programmers skip the modelling part
and think that doing OOP is sufficient. It is isn't. OOP is about
ADTs. OOD is about the understanding the domain, where you need
flexibility in the future etc, the language is not the most
important aspect of getting good structure. You can probably do a
good job even in PHP (which is a very crappy language) if your
analysis of the domain is good.
If you want more modelling power you should look at Beta,
Datalog/Prolog etc… D doesn't provide more modelling power than
other imperative OO languages. Does it? Are the objects nested
like in Beta? Do you have the ability to do virtual inheritance
on classes? Do you have the ability to extend virtual functions
by calling the sub-class from the superclass (inner-statements
rather than outer, so that you can enforce transactional
BEGIN/END clauses?)
But that was not my point. My point was that performance on the
CPU is going to be less important because it account for only 10%
of the total performance. GPUs now do TerraFLOPs. FPGAS are being
packaged with CPUs by Zynq, OpenCL will be able to compile to
FPGAs. So basically, to get performance the language should
support more than just the CPU and that is not easy because of
the potential bottlenecks between the subsystems.