The compromises of the C# language design
C#’s design involves certain trade-offs. Let’s examine them and understand their impact:
- Historical baggage: C# has evolved over the years, adding new features while ensuring backward compatibility. This means that older, less “honest” ways of doing things will always remain a part of the language.
- Performance versus safety: Offering both low-level performance-oriented features and high-level safety features is not easy. Sometimes, the requirements of performance might lead developers away from purely “honest” constructs.
- Broad audience: C# is designed for a vast range of developers, from those writing system-level code to high-level enterprise applications. As a result, the language can’t be too opinionated in favor of any single paradigm, including functional programming.
- Exceptions system: The current system of exceptions makes it virtually impossible to have a truly honest...