Daniël Mantione wrote:
Ok, lets put it blunt. It is absolutely not important to have templates at all. We've been able to develop top class code of the best kind without templates.

That is true. Yet I really like the type-safety of templates. Advantages 
include:
- you have to type less type casts
- in an IDE like Lazarus you can directly use code completion (result of the 
previous item)
- less potential bugs due to storing an object of the 'wrong' class in a 
container

It will speed up the development process in complex applications where you need 
all kinds of containers all the time.
And it's cool. And type casts look like hacks :) So perhaps generics can be 
characterized as a hype, but I think the real advatages of generics are 
apparent.

I also like dynamic arrays. (Note that they weren't available in FPC in the 
past.) They make things type-safer too.

People were asking for case studies in this thread. Well, I'm creating a report 
generator. This is more or less an example of the above mentioned 'complex 
software where you need all kinds of containers all the time'. For example:
- I'd be very happy to replace all TLists by TList<specific type>s.
- Also, adding caches (hash tables) would be a lot easier. Caches can for 
example prevent you from including the same resource (image, font) multiple 
times in the output file.
Motto: No more type casts, only CTRL+Space :)

(Ok, maybe I'm exaggerating a little bit, but don't you agree generics /are/ 
useful?)

There's a big risk involved with templates; code bloat. Namely, with templates, you can instantiate classes without realising that you are adding tens of kilobytes of code.

I.e. in C++ if you instantiate a vector<class_a *>, vector<class_b *>, vector<class_c *>, you have three implementations of the vector in your code, which are all an array of pointers! Surely Pascal's Tcollection/Tlist is much more efficient.

Won't the compiler sometimes be able to handle this smarter? When the code generated for 
vector<TClassA> and vector<TClassB> is equivalent, we only need to include it 
once in the resulting executable, right? The only thing is we have to see when this 
situation occurs.

Things can go wrong when for example
- an overloaded method or operator is called on T
- a method of T is called (but this is no problem when it concerns the same 
(virtual) method for the actual type parameters under consideration)
- class of T is used
- RTTI info is requested for T

But if I am correct, this is in general not the case for container classes like 
vector<T> (or: TList<T>).

Templates can save typing. People are demanding them, because there is a hype. Lack of templates is seen as a deficiency of Pascal against C++.

Somehow people from the well known ACM programming contest seem to see Pascal 
as a 'deficiency' itself:

From "The Rules of the 2005 ICPC Regional Contests" 
(http://icpc.baylor.edu/icpc/regionals/About.htm):

"The programming languages of the regional contest will include C/C++. Additional 
programming languages may be used. The programming languages of the 2006 World Finals are 
Java, C/C++, and Pascal.  Prior to the World Finals, the judges will have solved all 
problems in Java and C/C++, but not necessarily in Pascal.  Pascal is a legacy language 
that is provided at the World Finals as a courtesy to the teams that are still dependent 
on it. Pascal will no longer be available starting with the 2007 World Finals."

I think that indeed C++'s STL and Java 1.5 rule over Pascal at the moment for 
programming contests. Perhaps generics & a nice container library using 
generics can help getting Pascal back (but I don't know all the considerations of 
the ACM World Finals' organisers!)

Regards,

Bram
_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-devel

Reply via email to