Войти
ФлеймФорумСофт

Границы применимости JavaScript (5 стр)

Страницы: 14 5 6 7 8 Следующая »
#60
12:10, 14 июня 2017

kipar
> JIT - он может в рантайме анализировать частоту запусков и то какие типы (или
> конкретные значения) где чаще встречаются.

А что делать когда позовут таки с другими типами?


#61
12:12, 14 июня 2017

=A=L=X=
на входе в оптимизированную версию проверка - изменилось что-то или нет (передали другой тип, функцию подменили и т.д.). Если изменилось - вызывается неоптимизированная версия.

#62
12:17, 14 июня 2017

kipar
> на входе в оптимизированную версию проверка - изменилось что-то или нет

Т.е. нужно всё-таки будет передавать в функцию информацию о переданных в неё типах? Чем это лучше Variant?
Всё-таки нужно будет в райнтайме чекать? Чем это лучше switch type?

#63
12:21, 14 июня 2017

=A=L=X=
лучше тем, что если у нас есть большая функция "ComplexCalc", то мы можем проверить что на входе в нее пришли числа и внутри выпилить виртуальные методы и прочие варианты, всё заинлайнить и оптимизировать.

#64
12:22, 14 июня 2017

P.S.

Да не, вопрос довольно однозначный - отсутствие типов довольно сильно ломает хребет оптимизациям и все решения, сейчас разрабатываемые, крутятся вокруг той или иной типизации со способностью к хорошему укладыванию в нативную компиляцию, JIT или не совсем.
Тут уже возвращаемся к вопросу - как быстро повторится история с Java?

#65
12:23, 14 июня 2017

kipar
> о мы можем проверить что на входе

К сожалению бывает еще и "на выходе" и оно тоже нетипизировано, поэтому всё плохо и с кишками одной и той же функции, где вызываются другие.

#66
12:32, 14 июня 2017

=A=L=X=
если у нас на входе в "add ecx, ebx" пришли два числа, то на выходе определенно будет вполне типизированное число. Конечно в общем случае это может не работать, соответственно там где написано что-то типа 'return x<0 ? 1 : "1" ' да, добавится проверка.

#67
15:38, 14 июня 2017

Пацаны, может все же не стоит блистать знаниями в теме, в которой вы ни бум-бум?

=A=L=X=
> Ты реально походу не понимаешь принципы работы процессоров, что такое компиляция и типы данных.
Ты реально походу вообще не читаешь ни ссылки, ни что я пишу.
Типов данных как в Java и в TypeScript'е в wasm'е нет. Нет и все тут. Есть 8/4-байтные инты и 8/4-байтные флоаты (IEEE-754). Все в спеке написано. Такая виртуальная машина.
Не вижу смысла воду в ступе толочь.
> Это TypeScript от MS (вводит типы, но может "деградировать" до безтипового JS)
Он не "может", он всегда "деградирует". TypeScript является надстройкой над JavaScript и собирается в него, своего интерпретатора не имеет.
Это у них прямо на главной написано

TypeScript is a typed superset of JavaScript that compiles to plain JavaScript.

> что wasm и asm.js оба выросли (по крайней мере духовно) из Native Client от гугл же
Решают одну задачу, да. Но технологии совершенно разные. Native Client - x86/arm бинарники с кучей ограничений, которые проверяются при загрузке. asm.js/wasm - виртуальная машина.
> Хрень, не работает в большинстве случаев, не позволяет ничего толком оптимизировать.
Ты же в курсе, что JIT в Java'е (по крайней мере в HotSpot'е и OpenJDK), которую ты тут весь тред втюхиваешь как орифлейм, все методы (кроме статических) - virtual и очень ограниченный инлайн? И это не считая RuntimeExpection'ов и call stack'а.
Так что если такой не-очень-умный JIT работает для Java'ы, почему аналогичный не должнен работать для JavaScript'а? Особенно учитывая всякие hidden class'ы в V8.

bodja
Пропустил все неудобные вопросы, молодец.
> То что было у AS3 изначально и даже больше
Эм. Ну да. Было изначально. Только дырявое, кривое, и неспецифицированное. Да еще с vendor-lock'ом (много ты альтернативных flash плееров видел).
Думаешь, флеш просто так побанили?
> Не прошло и двух страниц, как ты догадался, что я использовал другой сайт и кроссдомен по AJAX :)
Очень удобный формат общения. Даешь информацию супер маленькими порциями, чтобы когда запахнет дилетанством повторить чужие слова и сказать "я это и имел в виду, ты что тупой?!"
Так и запишем: врунишка.
> посмотрим насколько JS стал реально крут
Как JS относится к скорости рисования полигонов OpenGL'ем? Ну создам я VBO в JavaScript'е, а не в ActionScript'е или каких-нибудь крестах. Чем меряться то? Кто быстрее 400к полигонов обновит? Числодробилкой? Ну тут ActionScript проиграет любому современному JavaScript движку.
Вот тебе пример из репы three.js 5000 сюзан по 500 полигонов каждая = 1250k полигонов, в ТРИ раза больше чем в твоей демке. https://threejs.org/examples/?q=perfor#webgl_performance
И, нет, я не собираюсь меряться письками с тобой. Потому что это не привнесет ничего в обсуждение.

Zefick
А еще в V8 завезли очень быстрый lookbehind: https://v8project.blogspot.ru/2016/02/regexp-lookbehind-assertions.html upd: про очень быстрый в этой статье нет, сейчас поищу где это видел. Емнип, они как-то хитро разворачивали DFA/NFA. Может и наврал.
> так как в Си регекспов нет
Ну, в posix'е чисто технически есть: https://linux.die.net/man/3/regex Но это, конечно, не то, что сейчас обычно понимают под регеспами.

#68
15:56, 14 июня 2017

Fla
> Если это работает для Java'ы, почему это не должно работать для JavaScript'а?

Потому что он тормозит из-за call VariantAdd, а не из-за вызова методов.
Если бы можно было достигнуть производительность явы - то особо и не парились бы, им ведь позарез нужна быстро всего лишь работающая со скоростью Flash-игр инфраструктура в HTML5, а каменный цветок не выходит по вышеобозначенным причинам.
Обычной Явы для такого - более чем за глаза.
И когда "решительно отказались" не только от явы, но и от флешей - проблема оказалась насущной и её начали решать.
Если TypeScript был еще до этого придуман чисто ради статического анализа - окей, там ему подобных десяток наберется не вылазая из первой же статьи в вики, в этой кодле всего, что "решает неисправимые недостатки яваскрипта" подробно разбираться - время своё не уважать.
Это только еще один признак какой там разброд и метания.

#69
16:35, 14 июня 2017

=A=L=X=
> Потому что он тормозит из-за call VariantAdd, а не из-за вызова методов.
Да ёлки-палки. Нет никакого никакого VariantAdd в джитенном коде. Функция джитится для определенных типов, с проверкой вначале сгенеренного кода.
http://thibaultlaurens.github.io/javascript/2013/04/29/how-the-v8-engine-works
https://blog.ghaiklor.com/optimizations-tricks-in-v8-d284b6c8b183
http://jayconrod.com/posts/54/a-tour-of-v8-crankshaft-the-optimizing-compiler
https://www.youtube.com/watch?v=hWhMKalEicY
> там ему подобных десяток наберется не вылазая из первой же статьи в вики
Ну попробуй набрать. Только не надо студенческих недо-поделок и языков из двух коммитов 2010 года. Flow не считается, это скорее линтер для es6 чем язык.
Я вот могу только Elm и ClojureScript вспомнить. Остальные или мертвы или на них нет работы от слова совсем. CoffeeScript мертв, 2007й давно позади.
Ну а собираться в JavaScript умеет почти все, что ты сможешь назвать. Включая, внезапно, Java'у (GWT) и кресты (emscripten, может даже не в asm.js и не в wasm).
Вот большой список, если тебе интересно: https://github.com/jashkenas/CoffeeScript/wiki/List-of-languages-… compile-to-JS

#70
16:39, 14 июня 2017

Fla
> с проверкой вначале сгенеренного кода.

всё, не годится. быстрее чем скрипт, конечно, но не ява.
P.S.
Всё это выше уже обсуждали.
Не годится.
И если мне до сих пор поверить не можешь, то поверь гуглу и файрфоксу в главных целях wasm и asm.js.
Обрати внимание как именно работает asm.js - и что V8 как раз эту технику уже тоже позаимствовал. Возможно это сбивает тебя с толку.

Ей богу я уже даже перестал понимать с чем ты споришь. Всё тупо и просто до безобразия - чуваки с плясками и бубнами переизобретают яву и радуются при этом.
И да, если TypeScript парой страниц назад я написал напрасно, но про Dart - в точку, более того: https://ru.wikipedia.org/wiki/Dart

Один из разработчиков языка Марк Миллер (Mark S. Miller) написал, что JavaScript «имеет фундаментальные изъяны»[2] («Javascript has fundamental flaws…»), которые невозможно исправить. Поэтому и был создан Dart.
...
Высокая производительность получаемых программ как в браузерах, так и в иных окружениях, начиная от смартфонов и заканчивая серверами.
Изначально было предложено два способа исполнения Dart-программ: с использованием виртуальной машины (в поддерживающих язык браузерах) или с промежуточной трансляцией в javascript (универсальный)[4][5].

Так что не надо ля-ля тоже, разброд имеется.

#71
17:04, 14 июня 2017

=A=L=X=
> всё, не годится. быстрее чем скрипт, конечно, но не ява.
/facepalm Java так же делает. Сам пруфы ищи, я уже устал кормить твое невежество.
> Обрати внимание как именно работает asm.js - и что V8 как раз эту технику уже тоже позаимствовал
/facepalm Подходы вообще перпендикулярные. А еще V8 появился раньше. Общего только то, что оба на выхлопе дают машинный код.
asm.js/wasm: байткод, где есть только инты и флоаты и (сюрприз) нет garbage collector'а. В asm.js байткод выглядит как сильно ограниченное подмножество JavaScript'а.
JIT в V8: компилятор JavaScript'а в машинный код. Работает в симбиозе с garbage-collector'ом, расставляет для него safe point'ы, для динамических типов (т.е. для всех, кроме 31-битных интов) подписывает к каждому объекту уникальный тег (hidden class), по которому можно направить выполнение на оптимизированный специально для этого типа кусок машинного кода.

> Dart
Лол. Это тот самый мертвый язык, виртуальной машины для которого нет ни в одном браузере, который сейчас собирается в JavaScript тремя с половиной энтузиастами, а гугл его пытается толкнуть как язык для мобильной разработки? Вот уж действительно, аргумент.

> я уже даже перестал понимать с чем ты споришь
Потому что твое невежество в обсуждаемой темах (JavaScript, JIT, V8, да та же Java) не дает тебе понять о чем я говорю, очевидно же.

#72
17:17, 14 июня 2017

Fla
> /facepalm Java так же делает.

Ты реально профан. Ява так не делает. Получая на вход int[] она ничего не проверяет и нигде не тормозит, складывает с нативной скоростью два массива интов не хуже C++.
Мог бы сразу сказать что профан я бы реально время не тратил. Еще щёки дует...
P.S.
То то я смотрю ты как то странно про "жонглирование байтами" рассуждал, а оно да, реально не понимаешь как работает процессор и что такое типы и байты, поэтому и не можешь понять что вызывает тормоза, а что нет и почему wasm это тот же явовский JIT вид сбоку с теми же последствиями в будущем.

#73
17:34, 14 июня 2017

=A=L=X=
проверяет. Если массивы всегда попадаются из трех элементов, она заанроллит цикл и будет проверять в начале длину. Ну т.е. общая идея та же что у js, но масштаб конечно разный, java это делает поверх своей типизации а js - вопреки.

#74
17:41, 14 июня 2017

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

Изображение

https://hacks.mozilla.org/2017/02/what-makes-webassembly-fast/

Страницы: 14 5 6 7 8 Следующая »
ФлеймФорумСофт

Тема в архиве.