Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   ASM.JS. Источники знаний. (https://javascript.ru/forum/misc/51433-asm-js-istochniki-znanijj.html)

Tsamsiyu 06.11.2014 15:21

ASM.JS. Источники знаний.
 
Всем привет, такая проблема, нужно познакомиться asm.js, но информации на русском очень мало, а мой английский не позволяет мне нормально читать нерусскую документацию. Может кто-нибудь кинуть где я могу освоить основы, т.е. создание перменных, типы перменных, условия, циклы, функции.

Tsamsiyu 06.11.2014 16:03

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

Safort 06.11.2014 16:22

http://habrahabr.ru/post/193642/
http://ejohn.org/blog/asmjs-javascript-compile-target/
http://mrale.ph/blog/2013/03/28/why-...others-me.html
Так норм?)

kobezzza 06.11.2014 16:25

На чистом asm.js писан анриал, ибо синтаксис невероятно убог (пока), но для трансляций из всяуих LLVM норм.

Но есть такая штука lljs, которая позволяет юзать норм синтаксис, а затем всё транслируется в asm.js

Safort 06.11.2014 16:29

kobezzza,
Цитата:

ибо синтаксис невероятно убог (пока)
Ты так говоришь, как будто он станет не убогим)

kobezzza 06.11.2014 16:31

Цитата:

Сообщение от Safort (Сообщение 339446)
kobezzza,

Ты так говоришь, как будто он станет не убогим)

Ну добавят деклорацию типов, структуры и станет нормальный С-like язык :)

Safort 06.11.2014 16:40

kobezzza,
да, но это уже не asm.js, это уже ES7, например.

kobezzza 06.11.2014 16:42

Цитата:

Сообщение от Safort (Сообщение 339449)
kobezzza,
да, но это уже не asm.js, это уже ES7, например.

Ну говоря asm.js, я имею ввиду

'use asm'

:)

Tsamsiyu 07.11.2014 17:20

Asm.js Работа с DOM
 
Ребят спасибо за ответы, не подскажете как мне с DOM работать с помощью асми?

Tsamsiyu 07.11.2014 19:05

ASM.JS Компиляция.
 
И еще такой вопрос, как мне начать писать на asm.js, я читал, что нужно ставить emscripten, но что далее? Буду рад хотя бы кратенькому алгоритму, ну или еще лучше статье.

kobezzza 07.11.2014 21:13

Цитата:

emscripten
Это транслятор из LLVM в ASM.js, т.е. пишешь на C/C++, компилишь через Clang, потом через emscripten в JS.

А так:

(function () {
    'use asm';

    // Тут пишем наш азм
})();

Voronar 07.11.2014 22:27

Да, интересно услышать про манипуляции с DOM (всё-таки DOM - это фундамент классического веб-приложения то бишь сайта ). Есть ли ускорение по сравнению с JS?

kobezzza 07.11.2014 23:11

Цитата:

Сообщение от Voronar (Сообщение 339685)
Да, интересно услышать про манипуляции с DOM (всё-таки DOM - это фундамент классического веб-приложения то бишь сайта ). Есть ли ускорение по сравнению с JS?

У вас явное недопонимание, что же такое ASM.js.

DOM API - это браузерное АПИ, не имеющее абсолютно никакого отношения к JS, потому использование ASM.js никак не сможет повлиять на это.

ASM.js - это отсутствие сборщика мусора (т.е. ручное управление памятью), явная строгая типизация и AOT вместо JIT.

В общем основная задача ASM.js - это портирование низкоуровневых программ, например, на C/C++ в JS.

Voronar 07.11.2014 23:25

Я поэтому и спрашиваю, что у меня есть недопонимание.

То есть не имеет смысла использовать asm.js для ускорения производительности в пользовательских веб-интерфейсах?

kobezzza 08.11.2014 00:19

Цитата:

То есть не имеет смысла использовать asm.js для ускорения производительности в пользовательских веб-интерфейсах?
Нет :) (да и зачем? там и так всё летает, если не говнокодить)

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

Например, игровой движок Unreal Engine 4 умеет компилиться в ASM.js, а там производительность критична.

Voronar 08.11.2014 00:49

А если говорить о desktop-подобных веб-приложениях и той же 2d-графики в <canvas>, реализованных на JS? Лично я заметил, что-подобные вещи очень сильно нагружают среднестатистический компьютер.

kobezzza 08.11.2014 01:05

Цитата:

А если говорить о desktop-подобных веб-приложениях
Сейчас веб-приложение уже ничем не отличается от десктопа, но если нужно написать аналог Фотошопа, то для работы с графикой: трансормация, эффекты и т.д. ASM.js даст сильный профит.

Цитата:

<canvas>, реализованных на JS?
Canvas - это HTML5 тег который никакого отношения к JS не имеет.

У Canvas есть 2 контекста:

1) 2d - простой АПИ, изначально работало на CPU, но сейчас браузеры могут использовать и GPU для ускорения;

2) webGL - порт OpenGL ES, позволяет писать программы напряму на GPU (c помощью GLSL шейдеров - это С, а не JS) и может работать очень быстро.

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

Пример 2D игры на Unreal Engine, скомпиленный в JS: https://www.unrealengine.com/html5
http://beta.unity3d.com/jonas/DT2/ - демка unity 5 скомпиленного в JS

Цитата:

Лично я заметил, что-подобные вещи очень сильно нагружают среднестатистический компьютер
Всё зависит от рук, современные браузеры работают ну очень быстро.

Voronar 08.11.2014 01:36

Например, при активном использовании разных виджетов мой процессор (Intel® Core™ i5-4570 CPU @ 3.20GHz × 4, Ubuntu 14.04 32-bit) грузится больше чем на 60%. Это, если честно, неприлично много. Вот вам и "летает", но за какую цену.
Ну не подходит JS (ES5) для таких серьёзных вещей, а терять связь на уровне удобных манипуляций с HTML/CSS не хочется.
Кстати, в случае использования ES6 производительность повысится или всё таки лучше смотреть в сторону Dart/TypeScript или Cheerp?

Я правильно понимаю смысл EcmaScript? По сути, это просто стандарт языка, а его производительность будет зависеть от реализации интерпретатора в веб-движке? То есть с новым стандартом выйдет обновленный, более быстрый движок?

kobezzza 08.11.2014 09:20

Я же вам уже 3-й раз обьясняю - DOM не имеет отношения к JS, поэтому смена языка никак не скажется на производительности. Вы для начала поймите что у вас тормозит, а потом уже рвитесь оптимизировать :)

Цитата:

Ну не подходит JS (ES5) для таких серьёзных вещей,
Ой вот не нужно фантазироваться, я 8 лет в этом деле и каких хреновин только не писал и всё замечательно работало. Касательно EXTJS - это просто интерпрайз тяжеловес, т.е. не нужно обвинять платформу, если у вас тормозит библиотека.

Цитата:

Кстати, в случае использования ES6 производительность повысится или всё таки лучше смотреть в сторону Dart/TypeScript или Cheerp?
ES6 - это не новый язык, а эволюционное развитие старого, поэтом VM у них одна и таже. Некоторые оптимизацию в ES6 есть, например, оптимизация хвостовых рекурсий, но в основном - это сахар.

TS, Dart и т.д. - это языки которые транслируются в JS (у Darta есть своя VM, но она нигде не юзается сейчас), т.е. на выходе тот же JS. Ещё раз, всё зависит от рук, т.к. сейчас JS один из самых быстрых скриптовых языков в мире (кстатим есть хорошее правило написания быстрого JS: пишите код так, как писали бы его на C), но никто не отменял гавнокод :)

Цитата:

Я правильно понимаю смысл EcmaScript? По сути, это просто стандарт языка, а его производительность будет зависеть от реализации интерпретатора в веб-движке?
Да, ES - это стандарт, реализаций у JS вагон: V8, SpiderMonkey, Nitro, Nashorn, Rhino, JSCore и т.д.

Цитата:

То есть с новым стандартом выйдет обновленный, более быстрый движок?
Нет, скорость движка зависит только от его создателей.

kobezzza 08.11.2014 09:29

А вообще чего я вас отговариваю: пишите на ASM.js, только учтите, что там 90% ASM и только 10% JS :D

bes 08.11.2014 11:04

Цитата:

Сообщение от kobezzza
Пример 2D игры на Unreal Engine, скомпиленный в JS: https://www.unrealengine.com/html5
http://beta.unity3d.com/jonas/DT2/ - демка unity 5 скомпиленного в JS

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

kobezzza 08.11.2014 11:51

Цитата:

Сообщение от bes (Сообщение 339721)
у всех в хроме опаньки на эти игры или только у меня?
в ff первая заработала, вторая только полосу загрузки до конца догнала

У меня обе демки хорошо работают в хроме.

Safort 08.11.2014 12:25

kobezzza,
Цитата:

Всё зависит от рук, современные браузеры работают ну очень быстро.
И кушают ресурсы тоже быстро)

Voronar,
Цитата:

Ну не подходит JS (ES5) для таких серьёзных вещей
Не подходит, потому, что ты не осилил? Или из-за того, что увидел где-то говнокод который только и делает, что грузит проц?

Цитата:

или всё таки лучше смотреть в сторону Dart/TypeScript или Cheerp?
Эти ЯПы в основном для неосиляторов сделаны.
А не всё ли равно? Это всё в любом случае компилится в JS.
Я, конечно, понимаю, что та же строгая типизация может упростить жизнь, но головой тоже нужно думать, а не менять постоянно типы переменных, радуя тем самым и VM и пользователей. Но это только один из примеров.

Safort 08.11.2014 12:26

kobezzza,
Цитата:

А вообще чего я вас отговариваю: пишите на ASM.js, только учтите, что там 90% ASM и только 10% JS
В ручную!

bes 08.11.2014 14:24

Цитата:

Сообщение от kobezzza
У меня обе демки хорошо работают в хроме.

тогда хз чё ему надо, хром последний, антивирус и расширение abp отключал - не помогло, может наоборот включить что-нибудь нужно, помимо мозга :)

bes 08.11.2014 14:39

может из-за этого
http://beta.html5test.com/
Цитата:

WebGL 3D graphics
Yes ✔
WebGL 2 3D graphics
No ✘
хотя тогда бы первая игра и в ff не работала

Voronar 08.11.2014 16:32

Цитата:

Не подходит, потому, что ты не осилил? Или из-за того, что увидел где-то говнокод который только и делает, что грузит проц?
Все знают что написание тяжелых веб-приложений, в том числе интерпрайз, с использованием чистого JS, себя не оправдывает, иначе не было бы столько проектов, ускоряющих веб-приложения и в частности JS. В связи с этой особенностью Я И ХОЧУ ПРОСТО ПОДОБРАТЬ себе инструмент для создания тяжёлых (гистограммы, таблицы и прочая визуализация данных), но не сильно затратных приложений, которые строятся на основе DOM и рендерятся с помощью веб-движка.

Safort 08.11.2014 16:40

Voronar,
Цитата:

Все знают
Нет.

Цитата:

ускоряющих веб-приложения и в частности JS.
Как они это делают?
Вот напишу я на том же TS какую-нибудь числодробилку, скомпилю, и она будет быстрее работать, чем если бы я её изначально написал на JS?

Voronar 08.11.2014 16:54

kobezzza:
Цитата:

кстатим есть хорошее правило написания быстрого JS: пишите код так, как писали бы его на C
Что подразумевается под этим правилом? Без классов что-ли? Вы ведь про чистый Си говорите?

kobezzza 08.11.2014 17:31

Цитата:

Сообщение от Voronar (Сообщение 339805)
kobezzza:

Что подразумевается под этим правилом? Без классов что-ли? Вы ведь про чистый Си говорите?

Не менят тип переменным, не делать динамические примеси к объектам, не менять динамически ссылки на прототипы...кароч писать в строгом статичном стиле, т.к. чем проще код, тем лучше он заоптимизируется JIT-компилятором.

Voronar 08.11.2014 18:34

Как можно писать на JS в строгом статичном стиле, если это динамически типизированный язык или вы имеете ввиду "JS++"(ES6, ASM.js, etc)?

kobezzza 08.11.2014 18:38

Цитата:

Сообщение от Voronar (Сообщение 339833)
Как можно писать на JS в строгом статичном стиле, если это динамически типизированный язык или вы имеете ввиду "JS++"(ES6, ASM.js, etc)?

Очень просто, вас же никто не заставляет складывать строки с числами и т.д. JS позволяет писать как угодно - это его сильная сторона.

Safort 08.11.2014 18:40

Voronar,
это значит, что если у тебя была переменная числового типа, то не надо ей присваивать строку/объект.

Voronar 08.11.2014 18:47

После моего опыта программирования на С/С++ такие вещи - это естественно. А вот кто начинает с JS, то им это определлённо нужно узнать и как можно скорее.

Safort 08.11.2014 18:48

Voronar,
тогда не стоит особо беспокоиться.

Voronar 08.11.2014 18:53

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


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