Мне неоднократно приходилось слышать (и самому говорить), что Smalltalk имеет большую гибкость (предоставляет больше свободы) чем любые майнстримовые на сегодня языки.
Дэвид Бак (David Buck), автор первоначальной версии POV-Ray, приводит интересное обоснование этого утверждения.
Например, рассмотрим того что даёт ООП:
- инкапсуляция - позволяет изменять реализацию класса не изменяя пользователей класса и, следовательно, облегчает внесение изменений в код;
- полиморфизм - облегчает написание обобщённого кода;
- наследование - позволяет легко расширять уже существующий код, облегчая создание новых классов.
Основная цель - облегчить написание кода.
Теперь посмотрим на ряд тенденций в майнстримовых языках:
- статическая типизация - ограничивает способы использования кода;
- декларации типов - требуют постоянного указания типа переменных, ограничивают возможность написания обобщенного кода настолько, что пришлось выдумать
дополнительную сущность, естественно, усложняющую язык;
- final/sealed классы - запрещают расширение классов;
- checked exceptions - требуют постоянного указания того, какие исключения могут быть брошены, и, зачастую, даже сторонники статической типизации признают,
что checked exceptions это уже перебор.
Цель использования этих принципов - минимизация ошибок, даже если ценой будет усложнение разработки.
Сегодня страх перед тем, что может написать программист побеждает возможности развития которые обычно даёт свобода. Но правильный ли это путь?