* Primitive type system
* No overloading
* Limited possibility of data abstraction, polymorphism, subtyping and code reuse
* No metaprogramming except preprocessor macros
* No exceptions
Why C++ sucks
* No garbage collection
* No reflection
* Type system excessively complicated
* No support for variadic functions and variadic templates
* Really hard to write efficient, object oriented mathematical code
* Not even compile time reflection (ie in a template you cannot inspect the parameter type)
Why C# sucks
* Way too prolix
* It has many special purpose constructs (such as yield/foreach)
* Not so powerful generic system
* No compile time metaprogramming facility
Why Java sucks
* No data pointers nor function pointers
* No templates (java 1.5 templates are a fake)
* No operator overloading
* No anonymous methods (C++ operator())
* Extremely verbose to write - and slow to run
Why Haskell sucks
* Indentation dependent syntax
* Types and values live in completely different worlds
* No metaprogramming (solved by Template Haskell)
* It is quite difficult to learn and to use for simple things, expecially if you come from an imperative/OO background. Sometimes, language features, extensions and design patterns are best documented by research articles, instead of tutorials written in an informal style.
Why Nemerle sucks
Some reasons as C#, except first and last.
Why Ocaml sucks
* Too many keywords
* Ugly syntax
* No templates and oveloading (unless you are using a still a bit limited and incompilete gcaml)
* Strange behavior of '_a and 'a types.
Why Ruby sucks
* Slow
* Complex
* Surprising
* Inconsistent
* Bad embedding
* No native threads
* No m17n
what doesn't suck then?
What makes you think there is such a thing?
Also, since when do you need garbage collection? Only retards and fags can't keep track of that.
Only retards and fags are willing to waste their time keeping track of their allocations.