* 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