There are two perspectives about reflection: code as data, and meta-objects.
A programming language can have static types only, dynamic types only, or both.
Can we classify object-oriented programming languages along three axis, like the lambda cube for functional programming? An attempt.
Dealing with immutable objects is often inelegant: you need to use clone and builder everywhere to manipulates copies. Can we improve the syntax?
All features in a programming language must integrate with each other correctly. The more features, the harder. Sometimes, things don't work as expected.
Sandboxing facilities of current runtimes are very limited. We could do a lot more.
Every one in a while, you need to model parallel class families. Sadly, there's still no language that provide a compelling solution to this need.
If ownership is dynamic rather that static, we can react at run time to ownership violations. This opens new possibilities.
There are several ways to implement semaphores. A quick tour.
Identity and equality aren't the same. An exploration.