May 11th, 2012

flow

Юзабилити для языков программирования - 3

Часть 1
Часть 2

За окном дождь и Питер, самое настроение обругать C++. Продолжаем тему юзабилити.

C++ (особенно в версии C++11) это самый мощный язык программирования, единственный, способный совместить высокоуровневые абстракции (вплоть до тьюринг-полной системы типов) с ядрёной оптимизацией и отсутствием оверхеда. Но его синтаксис настолько ужасен, что может считаться эталоном наслаивания неудачных решений.

1. Декларирование типов.

Рассмотрено в Части 1.

2. Использование < и > в качестве скобок при параметризации.

vector<set<T> > -- бинарный оператор внезапно превращается в скобку. Сложно читается, сложно парсится, зачем? По заявлениям Страуструпа "они искали решение, которое выглядело бы максимально чуждо на фоне привычного синтаксиса, чтобы выделить новые конструкции". Хотели сделать криво - сделали. Позже это решение собезьянили в Java, C#... Только в следующем поколении авторы Nemerle и Scala догадались не наступать на те же грабли.

3. Разные операторы работы с контекстами.

std::lower_bound -- запрашиваю функцию lower_bound в контексте пространства имён std.
vec.x -- запрашиваю значение поля x в контексте структуры vec.
pObj->m_systemId -- запрашиваю значение поля m_systemId в контексте указателя на объект pObj.

Одна операция, разные символы. Которые не позволяют выбрать действие, но требуют ручного дублирования единственного возможного в данном контексте.

Языки, где используется только точка, выглядят намного приятнее и чище.

Дополнения приветствуются.