Very high number of keywords for a starting language. No way to avoid garbage collection. Seemed too much like "design by fad".
Printable View
Yes, but my original point with that code was about how to design a language which was both powerful/efficient and fully strong-typed (like C++/D) and also simple to write & understand with a syntax not shy of weak-typed language (like Javascript/Python).
It's of course possible in C++, and the same thing is much cleaner looking in D. However, it's still chalk full of all kinds of extra keywords and qualifiers. C++ gets much more complicated once you start adding in compile-time conditions, etc. D is better, but there's still a lot of it's syntax design which, IMO, could be improved (and never will, since it's strives to be compatible with C). I was responding to a comment about "the perfect language".
As I understand, Bjarne Stroustrup has been fighting to get it in for over 20 years, but there were compatibility problems with C that were only worked out in time for C++11.
Also, he's now fighting to get the auto keyword to be used as a form of template for the next revision:
Code:auto foo(auto i, auto j) {
return i * j;
}
An oxymoron if I ever heard one.
Personally, I prefer C++ (though I admit I have yet to use D on a project of any size) for the majority of my work. Despite its occasional oddities, its simply the easiest to develop with (aside from C# for a Windows program) and easiest to expand.
My least favorite language is the one I'm stuck with for the next decade: Ada, which comes in just ahead of Assembly on my list.
Does Vala work like that? I know it's variables are, by default, non-null types.. but I thought it was still classic ref-counting/smart-pointer stuff. My proposal would be more optimized (in theory) since 'var' memory would be directly tied to their scope, and all clean-up code (for both vars & refs) could be statically determined. Thereby avoiding the need to count references on variable assignment... now that I think about it though, I guess Vala could implement similar optimizations for their non-nullable types. Do you know if this is the case?
There's also more things about Vala that I don't appreciate.. namely no operators or method overloads (also, I'm not really a fan of the overly-airy C#-like syntax, but it's not that bad). I talked to a Vala dev once, and he informed me that was due mostly to Vala's tie to GObject linking and the fact that Vala is OOC and designed to play perfectly with C.
I would still like to know about any optimization information you're aware of though (or any links you might have on the topic).
Syntax being easy to read, expressive and flexible seems like it's the most important thing.
(I notice that with the << it's easier to read, produces smaller code and is (less error prone?) shorter than printf.)
(The use of the %s, %d specifiers has an issue since the type specification seems to conflict with the DRY principle of software engineering. )
The first one was D, the second one was C.
Yea, it was an example that people picked up. In general I just feel that C++ is too reliant on all their operators, so code is no longer as easily readable if you are not familiar with the meaning of each.
And for the reference, here's the D version (with an additional case and that is syntactically valid):
Code:template foo(T, O : int)
{
auto foo(T x, O y)
{
return x * y;
}
}
int main()
{
string s = "text"; // 's' is text
auto i = 0; // 'i' is an int
auto f = 0.0 ; // 'f' is a double
auto r = foo(s, i) ;// error: can't pass text as a first parameter
auto r2 = foo(f, i) ;// works: because compiler can multiply a 'int' and a 'float'
auto r3 = foo(i, i) ;// works: compiler can compile 'int' and 'int'
auto r4 = foo(i, f) ;// error: can't pass non-int as second parameter
return 0;
}
I think you're exaggerating C++'s reliance on operators since only two are used to define an extensible and cascaded input/output mechanism.
Function overloading and the cascading behavior of operators make a strong case for this scheme ... no matter how unusual it looks.
In the end, most C++ programmers don't write their own operators (except for extending stream operators). Those that do are often doing it for mathematical objects (where it makes sense) or string-like objects (where + and "concatenate" are universally synonymous).