Чего только не напишут )))
Фреймворк это тоже библиотека, но не простая, а задающая развитие проекта при его использовании.
Поясню примером:
class CarInterface {
public:
virtual ~CarInterface() = 0 {}
virtual void go() = 0;
};
int go(const CarInterface& car);
Смотря на этот кусок мы видим ДВУХ программистов: программист-разработчик и программист-пользователь. Первый это автор фреймворка и он задумал, что его интерфейс автомобиля будет иметь определенные варианты использования и характеристики, но он не может знать какие именно? Поэтому он ОБЯЗЫВАЕТ программиста пользователя реализовать конкретный автомобиль.
Фрейморк это библиотека решающая определенный круг задач и при этом направляющая программиста пользователя в строго определенном направлении при решении задачи!
Другой пример, библиотека Flask: Для того , чтобы обработать HTTP-запрос POST-методом я обязан применять функцию route с аргументом methods в котором указать список содержащий строку 'POST'. Код:
@app.route('/executables/<id>', methods=['POST'])
def get_executables(id):
pass
можеть мне удобнее не
methods,
http_verbs, но автор ЗАСТАВИЛ меня передавать с названием
methods.
Фрейморк заставляет не просто так, а с целью получения однообразности кода.