Наткнулся на поучительную историю, которая прямо сейчас разворачивается в мире джаваскрипта.

Я уже как-то рассказывал про занимательную особенность жс, которая позволяет определять объектам собственные методы и даже переопределять уже существующие. Использование этой возможности называется «манки патчинг» и, как оказалось, имеет далеко идущие последствия.

Лет десять назад, когда никаких ES6, бабелей и нпмов не было и в помине, была написана библиотека «mootools». Она добавляла при помощи манки патчинга всякие удобные методы, которые по умолчанию в языке отсутствовали. Среди таких методов был, помимо прочего, flatten, делающий массив плоским:

[1, 2, [3, 4], 5].flatten()
// [1, 2, 3, 4, 5]

Библиотека пользовалась популярностью и все бы было хорошо, но в очередную версию джаваскрипта захотели добавить flatten по умолчанию. Если это сделать, то весь код, написанный с использованием flatten из mootools, будет вместо него вызывать нативный метод. А так как они имеют разный интерфейс, это приведет к ошибкам.

Теперь на гитхабе ожесточенно спорят, как поступить: дать методу какое-нибудь другое название вроде smoosh, чтобы избежать конфиликта; или оставить каноничное название, а тот, у кого из-за этого сломается сайт — сам виноват: https://github.com/tc39/proposal-flatMap/pull/56

Кстати, ровно по такой же причине метод, проверяющий наличие элемента в массиве, называется includescontains уже использовался в том же mootools.

Не знаю кто виноват в этом бардаке: создаели языка, которые предоставили такие возможности, или создатели библиотек, которые эти возможности неправильно используют. Но пугает решимость, с которой сообщество готово поломать кучу старых сайтов, лишь бы не давать методу глупое название.

Из всего этого можно сделать следующий вывод: не стоит рассчитывать, что написанный тобой код на джаваскрипте будет работать через 5–10 лет.