Ответ 1
Решение об отказе от функций util.is*()
было изначально сделано в техническом руководящем комитете Node.js в апреле 2015 года. Ну, на тот момент он все еще был io.js, но тот же комитет теперь является Node.js TSC, а база кода, о которой они говорили, стала Node.js 4.0.0.
минуты от собрания находятся в режиме онлайн. Поэтому вы можете прочитать его сами, чтобы увидеть плюсы и минусы, которые были взвешены. Наиболее четкое изложение вопроса в те минуты может быть от Берт Белдера:
Причина, по которой мы хотим обесценить это, заключается в том, что мы действительно не хотим ее исправлять, потому что это было бы несовместимым с предыдущим, поэтому это действительно слишком велико, чтобы быть в ядре.
(К сожалению, в минутах есть недостающий контекст. Посмотрим, смогу ли я выкопать еще какой-то контекст из других источников и, если найду что-нибудь полезное, я обновлю этот ответ.)
ОБНОВЛЕНИЕ: Судя по некоторым протоколам TSC за период с февраля и обсуждение в тянуть запрос с того же месяца, похоже, что аргументация такова:
Эй, выглядит как util.isObject()
возвращает false
для функции. Это неверно. Функция - это объект. Он должен вернуться true
. Но внесение такого изменения потенциально разрушает огромные части экосистемы Node. Подумайте обо всех этих модулях на npm, которые могут зависеть от этого поведения. Чтобы не подвергать риску разрушение экосистемы удивительными способами, нам нужно как-то получить массу людей, чтобы пересмотреть свой код. И разрушающее изменение было бы полностью назад несовместимым. Все для функции удобства, которая даже не относится к основному ядру и легко предоставляется модулями userland. (См., Например, core-util-is.) Вместо того, чтобы вводить изменение разбиения и основной удар, чтобы исправить util.isObject()
, допустим что должно было быть сделано в первую очередь и даже не иметь его в ядре.
Я думаю, что, возможно, также было ощущение, что в функциях util.is*()
есть вероятность появления других угловых случаев.
Философия проекта в целом состоит в том, чтобы иметь минимальное ядро. При прочих равных условиях, если что-то может быть предоставлено модулями userland без особых проблем, оно должно жить в модулях userland, а не в ядре.
Хорошо, что я рисую много умозаключений из некоторых битов текста, но я думаю, что более или менее то, что с устаревшим.