Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   А как же работает наш любимый JS. (https://javascript.ru/forum/misc/50640-kak-zhe-rabotaet-nash-lyubimyjj-js.html)

mistermar92 05.10.2014 16:30

А как же работает наш любимый JS.
 
Всем доброго времени суток. Подскажите пожалуйста, ( а лучше поделитесь ссылкой) как JS обрабатывает код. Меня интересуют потоки обработки файла.

mistermar92 05.10.2014 19:01

Либо может знаете как этот процесс называется?) и с ноовыми силами долбить гугл)

melky 05.10.2014 19:07

Цитата:

Сообщение от mistermar92
как JS обрабатывает код

какой такой код обрабатывает js ?

mistermar92 05.10.2014 19:11

Возможно не корректно выразился, но к примеру когда происходит баблинг переменных. Сам процесс, с самого начала когда мы запустили браузер и попросили выполнить его JS файл, с чего начинается весь процесс.

Safort 05.10.2014 19:26

melky,
имеется в виду, как интерпретатор код обрабатывает.

MallSerg 05.10.2014 19:34

сначала идет интерпретация JS в современных браузерах JS переводится в промежуточный байт код боле понятный для компьютера на основании полученного кода проводится его анализ и оптимазация ( спасибо браузерным войнам) затем код встраивается в глобальный скоп (это такой специальный объект в котором сохраняются именна=ссылки на переменные строятся хеш таблицы) после этого запускается компиляция в нативный код системы после этого код запускается на выполнение как нативный код текущей системы

kobezzza 05.10.2014 19:47

Зависит от VM, т.к. реализаций JS много и они работают по разному, например Nashorn транслирует код в байт код JVM, а другие VM могут компилить код сразу в машинный, минуя байт код. Также может зависит от режима работы VM и т.д.

Примерная схема такова:

1) Парсинг исходного кода;
2) Генерация байт кода или непосредственная компиляция в машинный код;
3) В VM, которые используют JIT часто используемый байткод комплится в машинный.

Вообще VM может поступать как посчитает нужным, т.к. это никаким стандартом не контролируется, поэтому может статься, что принципы работы у того же SpiderMonkey и V8 сильно отличаются, в общем нужно разбираться конкретно.

mistermar92 06.10.2014 13:32

Для тех кому интересно = ) ссылка на материал по моему вопросу. Думаю полезно знать каждому.

kobezzza 06.10.2014 13:53

Цитата:

Сообщение от mistermar92 (Сообщение 333702)
Для тех кому интересно = ) ссылка на материал по моему вопросу. Думаю полезно знать каждому.

Это уже классика, думаю все здешние постояльцы читали блог Сошникова :)
Только следует заметить, что в статье по ссылке описан стандарт ES3, а сейчас ES5.1 и готовится ES6, а там многое сделано иначе, но у Сошникова есть статьи и про актуальные стандарты.

Safort 06.10.2014 18:37

kobezzza,
да, блог один из наигоднейших, что я читал.

petya 07.10.2014 10:13

kobezzza,
А вам не кажется, что этот ваш "классик", внезапно, путает function declaration с function expression?

petya 07.10.2014 10:22

kobezzza,
Да и вообще, эти его заклинания, "вход в контекст", как-то вызывает сомнение в том, что он понимает о чем говорит. Никакого входа нет, есть связывание.

kobezzza 07.10.2014 10:47

petya, нашёл ошибку - напиши автору, а пока ты похож на очередного "умника", а таких здесь не любят.

petya 07.10.2014 11:22

kobezzza,
А, тут у вас секта? Тогда понятно.

petya 07.10.2014 12:04

kobezzza,
Да и вообще, строго говоря, это не ошибка, а неверные рассуждения исходящие из превратного понимания. Такие вещи приводят не к ошибкам, а к неверной интерпретации. Если указывать на "ошибку", следовало бы написать "чувак, зачем ты говоришь о том, в чем не разбираешься?". Так ему написать Вы предлагаете?

kobezzza 07.10.2014 12:10

Цитата:

Сообщение от petya (Сообщение 333834)
kobezzza,
Да и вообще, строго говоря, это не ошибка, а неверные рассуждения исходящие из превратного понимания. Такие вещи приводят не к ошибкам, а к неверной интерпретации. Если указывать на "ошибку", следовало бы написать "чувак, зачем ты говоришь о том, в чем не разбираешься?". Так ему написать Вы предлагаете?

Это ты говоришь про ошибки, т.е. пиши как считаешь нужным, но пустое сотрясание воздуха с умной миной "я Д'Артаньян, а вы говно" кроме раздражения у меня лично ничего больше не вызывает.

Дмитрий Сошников один из самых известный в России JS прогеров, рецензор многих книг O'Really по JS, его блог переведён на хренову тучу языков и я склонен думать, что это ты не разбираешься в теме, но все мы люди и можем ошибаться, поэтому ты напиши, или признай что не прав.

petya 07.10.2014 12:22

Цитата:

Сообщение от kobezzza
пиши как считаешь нужным

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

Сообщение от kobezzza
Дмитрий Сошников один из самых известный в России JS прогеров, рецензор многих книг O'Really по JS, его блог переведён на хренову тучу языков

Видимо, это должно как то меня впечатлить, и я должен упасть на колени перед Гуру? Подозреваю, что "творчество" Александры Марининой пользуется еще бOльшей популярностью, что, впрочем, не отменяет Достоевского.

kobezzza 07.10.2014 12:25

Цитата:

Я не сотрясал воздух впустую, а указал, что человек трактует вещи превратно, указал, конкретные косяки.
Ты не указал ничего, я даже не понял о какой статье и каком месте ты говоришь. Приводи цитату, доказывай что он не прав, приводя факты из спецификации конкретной версии. Иначе ящитаю что ты лысый эскимос, у меня есть факты, но я их не покажу!!! (С) Дж. Псаки.

Цитата:

Если человек утверждает, скажем, что солнце крутится вокруг земли, будете ли вы читать его дальнейшие рассуждения?
Ты не привёл ни единого доказательства своих слов кроме "ящитаю", поэтому верить тебе уж точно не стоит :) А вот у Дмитрия, напротив, в каждой статье стоит сноска на стандарт ECMAScript конкретной версии, или стандарту языка тоже не стоит верить?

petya 07.10.2014 12:37

Цитата:

Сообщение от kobezzza
я даже не понял о какой статье и каком месте ты говоришь

Я думал, ты догадался, это по твоей ссылке

http://dmitrysoshnikov.com/ecmascrip...koda-konteksta

Цитата:

При входе в контекст исполнения (но до построчного выполнения его кода)
Контекст исполнения -- это окружение, никакого "входа" в него, а тем более "исполнения", в обычном смысле, не происходит. Окружение является структурой, по нему происходит разрешение имен. Он не понимает о чем он говорит, это очевидно.
Цитата:

спецификации
Тут не столько спецификация и версия, сколько программирование. Могу посоветовать SICP для общего понимания того, как интерпретируются компьютерные программы. Знание основ позволяет не выдрачивать доки, а понимать непосредственно код.

kobezzza 07.10.2014 12:47

Для справки: контекст исполнения, объект переменных и т.д. определён в стандарте ECMAScript3, а в версии ECMAScript5 был заменён на окружения, и в статье по ссылке описывается именно ECMAScript3. По сути статья является абстрактным описанием стандарта в удобном для чтения виде. Причём статья называется именно "Тонкости ECMAScript" т.е. вполне конкретное описание стандарта языка, а не реализаций самой VM, коих для JS over9000 и работать они могут по разному.

petya 07.10.2014 12:49

Цитата:

Сообщение от kobezzza
контекст исполнения, объект переменных и т.д. определён в стандарте ECMAScript3, а в версии ECMAScript5 был заменён на окружения,

Это не важно, они всего лишь заменили названия, сути это не меняет.

petya 07.10.2014 12:51

Цитата:

Сообщение от kobezzza
а не реализаций самой VM

Не стоит говорить о конкретной реализации, когда рассматривается семантика

kobezzza 07.10.2014 12:53

Цитата:

Сообщение от petya (Сообщение 333844)
Это не важно, они всего лишь заменили названия, сути это не меняет.

Следуя такой риторике можно докопаться абсолютно до чего угодно. Статья описывает ES3 и использует термины спецификации, в статьях по ES5 и ES6 используется другие термины. Всё таки статья называется не "Сферичная VM в вакууме".

petya 07.10.2014 12:58

kobezzza,
Я не рассматриваю вопросы терминологии тут вообще. Я говорю о превратном понимании автором процесса исполнения програмы. Он трактует стандарт по своему, якобы, проясняя что-то, но трактовка эта не верна.

kobezzza 07.10.2014 13:00

Цитата:

Сообщение от petya (Сообщение 333847)
kobezzza,
Я не рассматриваю вопросы терминологии тут вообще. Я говорю о превратном понимании автором процесса исполнения програмы. Он трактует стандарт по своему, якобы, проясняя что-то, но трактовка эта не верна.

Цитата:

Сообщение от petya (Сообщение 333847)
Контекст исполнения -- это окружение, никакого "входа" в него, а тем более "исполнения", в обычном смысле, не происходит.

Цитата:

Следующие шаги выполняются, когда управление входит в контекст исполнения кода функции, который содержится в объекте функции F, значения thisArg и argumentsList передаются при вызове:

Если код функции представляет собой строгий код, то ThisBinding присвоить значение thisArg Аргумент this.

Иначе, если thisArg – null или undefined, то ThisBinding присвоить значение глобального объекта.

Иначе, если Тип(thisArg) не объект, то ThisBinding присвоить значение ToObject(thisArg).

Иначе, ThisBinding присвоить значение thisArg.

Пусть localEnv Локальное окружение будет результатом вызова NewDeclarativeEnvironment с передачей в качестве аргумента значения внутреннего свойства [[Scope]] для F.

Присвоить LexicalEnvironment значение localEnv.

Присвоить VariableEnvironment значение localEnv.

Пусть code будет значением внутреннего свойства [[code]] для F.

Выполнить Инстанциирование привязки объявления, используя code и argumentList для кода функции, в соответствии с описанием в пункте 10.5.
http://es5.javascript.ru/x10.html#x10.4.3

***

Цитата:

Он трактует стандарт по своему, якобы, проясняя что-то, но трактовка эта не верна.
Ещё раз: нашли конкретное место, где он объективно не прав - напишите ему и он поправит статью (ну или напиши свою статью с блекджеком и кудесницами), иначе всё это ничего не стоящая болтовня.

petya 07.10.2014 13:02

kobezzza,
Там говорится о входе в функцию, а не входе в окружение. Я против этого ничего не имею

petya 07.10.2014 13:09

kobezzza,
Хотя да, вот это:

Следующие шаги выполняются, когда управление входит в контекст исполнения кода функции, который содержится в объекте функции F, значения thisArg и argumentsList передаются при вызове:


Достаточно неоднозначно, забубенно, я бы сказал. Возможно, косяки перевода. Правильным определением было бы, что-то вроде:

После входа в функцию происходит разрешение имен, в соответствии с окружением и правилами связывания. Рассматриваем исключительно семантику, разумеется.

kobezzza 07.10.2014 13:13

petya, я всего лишь призываю к объективизму. Блог Сошникова, как и этот сайт один из столпов общепризнанной документации JS и стандарта ES и если ты считаешь, что автор не прав и можешь это доказать (ссылки на спеку и т.д.), то напиши ему с этими замечаниями, а не начинай кидаться какашками с умным видом. Неужели это так сложно?

Octane 07.10.2014 19:14

kobezzza, не трать время, это все тот же унылый foo/govnocoder/nanaets/newobject


Часовой пояс GMT +3, время: 02:14.