Originally posted by mark45
View Post
Announcement
Collapse
No announcement yet.
John Carmack's Comments On C/C++
Collapse
X
-
Originally posted by h**2 View PostC++(11) does *exactly* this:
Code:template<typename T> T foo(const T x &, const int y) { return x * y; } int main() { char s[] = "text"; # 's' is text auto i = 0; # 'i' is an int auto f = 0.0 ; # 'f' is a float 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' return 0; }
Comment
-
Originally posted by h**2 View PostC++(11) does *exactly* this:
Code:template<typename T> T foo(const T x &, const int y) { return x * y; } int main() { char s[] = "text"; # 's' is text auto i = 0; # 'i' is an int auto f = 0.0 ; # 'f' is a float 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' return 0; }
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".
Comment
-
Originally posted by log0 View PostThat auto stuff is neat. I can't understand why it took them so long, should have been added to the spec together with the templates.
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; }
Last edited by Vax456; 15 January 2013, 12:35 PM.
Comment
-
Originally posted by F i L View PostI was responding to a comment about "the perfect language".
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.
Comment
-
Originally posted by newwen View PostIt seems you're describing Vala.
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).
Comment
-
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. )
Comment
-
Originally posted by nslay View PostThe first one would never work in C. See stdarg.h for more information. In C++11, you can use variadic templates for a writeln() function as you described. But then, at the very worst, the compiler will produce a unique function for every output format you use. More likely, the compiler will inline such templated writeln() functions.
Originally posted by Ancurio View PostAlso, as to "printf() vs cout", that just seems like such a stupid and unnecessary discussion.
You're not discussing languages, only conventions of standard libraries at best.
Originally posted by h**2 View PostC++(11) does *exactly* this:
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; }
Comment
-
Originally posted by GreatEmerald View PostThe 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.
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).
Comment
Comment