<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:Tahoma
}
--></style>
</head>
<body class='hmmessage'>
> Recently I met these... Isn't it nice, to find your error happening somewhere in some .h file you never heard of?<br><br><br>The error messages are better these days.<br>It is true they were terrible for a long time.<br>Don't Modula-3 generics have the same problem?<br>At least in the C++ case:<br>  - the errors aren't in generated files <br>  - you don't have to explicitly instantiate everything "in the build system"<br>  - for function templates, you never have to instantiate anything<br> The automatic deduction of function template parameters is very powerful.<br> You have to try it.<br> I *believe* it enables a style of programming similar to ML, esp. when combined with the more recent<br> feature "auto".<br><br><br>It is also true that templates seem to be largely accidental in what they allow.<br>It seems they were designed with two primary applications:<br>  std::vector<br>  std::min/max<br><br><br>The compile-time Turing-completeness seems to have been an accident,<br>and what people use this for is/was perhaps better implemented through special<br>language constructs builtin to the compiler. It is both impressive and depressive.<br>Impressive that it is doable, depressive what it looks like.<br>When people do "meta programming" like "is_pod", "has_copy_constructor", etc.<br><br><br>Consider this though, have you heard the ability to do this:<br>matrix<int> a,b,c,d;<br>a = b + c + d;<br><br><br>where there are no intermediate matrices?<br>The results are written directly into a.<br><br><br>The people do this is that operator+ doesn't return a matrix, but rather<br>a type that represents the result matrix addition, which is assignable<br>to a matrix, and can also be added to matrices or the results of matrix addition.<br>So ultimately what is assigned to a is something representation the addition<br>of b, c, d. You can add any number of matrices. Or subtract. Or multiply (within<br>the rules of matrix multiplication) etc. There is no special casing, no special<br>purpose code to handle certain combinations. I don't believe any other<br>language has this power.<br><br><br>Simple string addition can benefit from this same technique.<br>Instead, string concatenation gets very special treatment<br>by compilers, including I believe in Modula-3, Java, and C#.<br>That's not "fair". Why should string get all the power and syntactic sugar,<br>but not any user-defined types?<br><br><br>Look for articles by Todd Veldhuzien. Libraries such as Blitz++.<br>http://www.cs.rpi.edu/~musser/design/blitz/meta-art.html<br>http://www.oonumerics.org/blitz/<br>etc.<br><br><br>If C++ is just a bit too gnarly and difficult to understand and implement,<br>I suspect subset exists with about the same level of expressiveness. But I don't know.<br> <br><br> - Jay<br><br>> Subject: Re: [M3devel] Enumeration or subrange value out of range<br>> From: dragisha@m3w.org<br>> Date: Tue, 30 Nov 2010 08:49:01 +0100<br>> CC: hosking@cs.purdue.edu; m3devel@elegosoft.com; kcdurocher@gmail.com<br>> To: jay.krell@cornell.edu<br>> <br>> Recently I met these... Isn't it nice, to find your error happening somewhere in some .h file you never heard of?<br>> <br>> No, it isn't ! :)<br>> <br>> I don't care much for generics, but templates are just one of C hells. Nice concept, surely, when everything goes well. But once it doesn't, you'll not solve it inspecting it - guessing is what you're doing. And peppering your code with "cerr <<".<br>> <br>> I understand you're doing C/C++ for ages... It is like climbing a hill on the way to your work. After some time, it becomes funny and you (almost) enjoy it. Except for part where you're comimg sweaty to that morning meeting, but well - one can't have everything. I knew people in Belgrade with just such a nice workplace :) - meteorologic observatory on a bit remote hill.<br>> <br>> On Nov 30, 2010, at 4:43 AM, Jay K wrote:<br>> <br>> >   generics are good, but not as good as C++ templates  <br>> <br>                                          </body>
</html>