Комментарии 21
сейчас принцип организации памяти js другой? Иначе не ясно почему тип string как таковой в js не имеет ограничения по длине. Обясните.
Полагаю, в разных движках вполне может быть разный принцип организации памяти.
Вот, у каждого символа младшими битами были
string
в js — это, грубо говоря, упорядоченный набор символов, каждый из которых представлен в UTF-8. Конец строки обозначается специальным символом EOS
(End of string). Вот, у каждого символа младшими битами были
100
. У каждого символа, а не у всей строки.Зачем же у каждого символа? У указателя на строку младшими битами были 100. А символы в строке без изменений.
Спасибо. Да, так логичнее.
У указателя биты? Какой-то пустой расход памяти, если младшие биты у указателя фиксированы.
Выравнивание же. Они бы были нулевыми иначе.
Помеченные указатели (tagged pointers) техника старая как мир. Основывается она на том, большинство распределителей памяти и так выделяют выровненную память и указатели оказываются кратными какой-нибудь степени двойки. Делается это по разным причинам, зависящим от конкретного аллокатора, от фундаментального желания гарантировать правильное выравнивание для данных, которое CPU удовлетворит, до желания уменьшить какие-то внутренние структуры данных. glibc например гарантирует выравнивание на 8 (или даже на 16 на 64-битной системе) для памяти, т.е. младшие 3 бита указателей возвращаемых mallocом всегда 0. (другое дело, что malloc для реализации кучи в VM лучше не использовать, но это другая история). Разумеется это привносит определенную фрагментацию в кучу, но практика показывает, что она не так уж и страшна.
'use strict 2' какой-нибудь?
удалено
Просто баг. Null определяется, как object, при этом для undefined обработка сделана была корректна, он не определяется же как целое.
>>> Этот баг, вероятно, никогда не будет исправлен из-за необходимости сохранения обратной совместимости существующего кода с новыми версиями языка.
Ну и зря. Наоборот, периодически полезно устраивать в языках несовместимые изменения, чтобы неподдерживаемый код «умирал» естественной смертью.
Если код нужен, его починят. Если код не нужен, нафиг такой код.
Другой вопрос, а что ДОЛЖЕН возвращать typeof null?
Ну и зря. Наоборот, периодически полезно устраивать в языках несовместимые изменения, чтобы неподдерживаемый код «умирал» естественной смертью.
Если код нужен, его починят. Если код не нужен, нафиг такой код.
Другой вопрос, а что ДОЛЖЕН возвращать typeof null?
очевидно, что как и в случае в undefined — null
>>>Ну и зря. Наоборот, периодически полезно устраивать в языках несовместимые изменения, чтобы неподдерживаемый код «умирал» естественной смертью.
Python, который уже лет 5 переезжает на 3.x и волевым решением запретивший 2.8, с данным мнением согласен :)
Java смотрит с презрением.
Python, который уже лет 5 переезжает на 3.x и волевым решением запретивший 2.8, с данным мнением согласен :)
Java смотрит с презрением.
Вообще-то в 9 случаях их 10 умирает «обновлённый язык». В лучшем случае, если очень повезёт лет так через 10 люди постепенно переходят на новую версию — если всё это время разработчики с нечеловеческими усилиями стремятся всех пересадить на новую версию. См. Perl6, PHP6, Python3. Из более ранних примеров: Algon/Pascal/Modula-2/Oberon — «очистка языка» привела к тому, что он, может и стал лучше, но однозначно из категории «популярный и широкоизвестный» перекочевал в категорию «прикольный курьёз».
Разработчики Javascript'ы выбрали единственный разумный вариант: сделать так, чтобы разработчик мог выбирать диалект. Посмотрим как у них получится.
Разработчики Javascript'ы выбрали единственный разумный вариант: сделать так, чтобы разработчик мог выбирать диалект. Посмотрим как у них получится.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Почему typeof null === 'object'?