The following is a non-exhaustive list meant to give a first impression and mostly focuses on features that appear in other languages. The way some of those features are supported in the language might be different from what one might be used to from other languages.
- eager & lazy evaluation
- compile-time & partial evaluation
- operator definition
- operator & function overloading
- positional and named parameters
- default arguments
- higher-order functions
- anonymous functions
- closures
- currying & partial application
- variadic functions & templates
- templates (through partial evaluation, not as a separate entity)
- homogeneous & heterogeneous translation
- lexical scopes
- unicode support
- eval, mixin or similar facility
- foreach and forever loops
- exceptions
- modules
- attributes / annotations
- classes
- encapsulation
- [read & write] x [public, protected, private]
- +friends
- RAII
- properties
- subtyping (probably structural)
- interfaces / concepts (common for static and dynamic polymorphism)
- dynamic dispatch
- static & dynamic reflection
- metaprogramming
- RTTI
- lists, tuples & records
- pattern matching
- embedding of DSLs
- multiple storage classes including TLS.
- multiple pointer types
- manual & automatic memory management
- structures equivalent to those traditionally offered by a preprocessor:
- includes
- symbolic names
- macros
- conditional compilation
- wide range of operators
- mathematical (e.g. ×, ⋅,∩,∪,∁,∈,∉,⊆,⊈,=,≠,∧,∨,¬)
- range generation
- 1..5 = [1, 2, 3, 4]
- 1,3,...,7 = [1, 3, 5, 7]
- [2.1, 3.1]:5 = [2.1, 2.35, 2.6, 2.85, 3.1]
- 1,...,2ⁱ,...,64 = [1, 2, 4, 8, 16, 32, 64]