О стандартах замолвите слово
Пришлось мне тут глубоко погрузиться в стандарт языка JavaScript. Если кто не в курсе, кратко скажу, что стандарт языка — это более или менее формализованное описание языка, определяющее смысл и поведение различных конструкций языка и их реализации. Этот документ нужен для согласования разработки компилятора и другого инструментария.
В каком-то смысле стандарт языка является законом, которому следуют все участвующие стороны. Также как в обычной жизни отклонение от закона может стоить дорого, так и отклонение от стандарта в сфере построения языков и компиляторов грозит тем, что инструментом просто не смогут и, как следствие, не будут пользоваться заинтересованные стороны.
С другой стороны, стандарты, как и законы, могут отстать от фактического положения вещей. Больше того, иногда в стандартах, как и в законах, могут быть ошибки, от этого никто не застрахован. Это не значит, что реальность нужно подминать под закон, иногда необходимо менять стандарты.
Первый стандарт языка JavaScript появился в 1997 году.
В нем появился тип Date
, предназначенный для использования дат и времени в скриптах. Идея, разумеется, прекрасная, ни одна сколь-нибудь серьезная программа не обходится без обработки дат и времён.
Но на дворе уже 2023 год, стандарт пережил 12 ревизий, а никто не обратил на вопиющие проблемы с именами:
- метод
getDate()
возвращает не дату, не копию объекта или что-то еще, он возвращает день месяца! - метод
getDay()
возвращает день недели, хотя из имени это совершенно не следует.
Неужели не нашлось никого, кто бы спросил, почему такие странные имена в стандарте? Давайте их переименуем во что-то более вменяемое. Например, getDate()
в getMonthDay()
, а getDay()
в getWeekDay()
.
Хорошо, пусть обратная совместимость превыше всего и мы не собираемся ломать работающий код. Но ведь у нас уже, как минимум, есть strict mode
, который ломал обратную совместимость.
Но даже не обязательно переименовывать. Можно пройти через режим deprecated, как это произошло с парой getYear()
и getFullYear()
.
Складывается ощущение, что над этими именами просто никто не задумывался.
UPD1: Интересные рассуждения, почему не стоит засорять язык версионированием.
UPD2: Открыл обсуждение изменений в стандарте JS
UPD3: Оказывается, есть предложение о доработке языка, прошедшее уже до стадии 3 (всего их 4). Проверил, в FireFox и V8 уже создан код для поддержки этого предложения. Вера в человечество возвращена )