Объявлено о начале тестирования в ночных сборках Firefox (https://hacks.mozilla.org/2016/03/a-webassembly-milestone/), в Chromium/Chrome Canary (http://v8project.blogspot.ru/2016/03/experimental-support-fo...) и в Microsoft Edge (https://blogs.windows.com/msedgedev/2016/03/15/previewing-we.../) технологии WebAssembly (https://www.opennet.dev/opennews/art.shtml?num=42451) (WASM), предоставляющей не зависящий от браузера универсальный низкоуровневый промежуточный код для выполнения в браузере приложений, скомпилированных из различных языков программирования. В ночных сборках Firefox также доступны (https://blog.mozilla.org/blog/2016/03/14/mozilla-pushes-the-.../) новые технологии для разработчиков игр, такие как WebGL 2, SIMD.js и Shared Array Buffer. В Firefox WebAssembly активируется в about:config через переменную javascript.options.wasm, а в Chrome (начиная с Canary 51.0.2677.0) через "chrome://flags#enable-webassembly".
По своим задачам WebAssembly во многом напоминает PNaCl (Portable Native Client) и Asm.js. Основное отличие от Asm.js состоит в том, что WebAssembly является бинарным форматом, не завязанным на исходных текстах JavaScript и позволяющим выполнять в браузере низкоуровневый промежуточный код. В отличие от PNaCl, промежуточный код WASM не является машинным кодом и не изолирован в отдельной виртуальной машине, а выполняется с похожим на JavaScript уровнем изоляции. Среди основных задач WebAssembly выделяется обеспечение переносимости между браузерами, предсказуемость поведения и идентичности выполнения кода на разных платформах. Использование WebAssembly также позволит существенно сократить размер приложений, благодаря компактному промежуточному коду, и увеличить скорость декодирования.
URL: https://hacks.mozilla.org/2016/03/a-webassembly-milestone/
Новость: http://www.opennet.dev/opennews/art.shtml?num=44051
Uh-oh! WebAssembly isn't enabled in this browser. To get an early preview of this experimental technology, at your own risk:on Chrome Canary, open chrome://flags/#enable-webassembly and enable the switch.
on Firefox Nightly, open about:config and set javascript.options.wasm to true.See a preview of Microsoft Edge support and follow Safari support on WebKit's feature status page.
Молодец какой, научился копировать и вставлять!
Молодец какой, научился копировать и вставлять!
Молодец какой, научился копировать и вставлять
А тебе ещё нужно подучиться, чтоб знаки препинания не терять.
Молодец какой, научился копировать и вставлять!
Молодец какой, научился копировать и вставлять!
Молодец какой, научился знаки препинания не терять!
езать умею. Я ещё выр
Мало того что сейчас всё больше сайтов состоят из нечитаемого JS, который в последствии добавляет элементы на страницу, хотя можно было бы без особых проблем вставлять в виде html сразу, так они теперь внедряют новый формат, в котором чтение человеком исходников затрудняется ещё сильнее.
Это всё не про opennet.ru
Это такая стратегия отвлечения ресурсов конкурирующих групп на ненужные технологии
Есть функционал, а есть исходники. И это разные вещи. Доступность исходников - вопрос нравов людей.
А вот технически - код должен быть как можно более быстрым. И тут бинарь выигрывает у текста JS
Я не вижу особого смысла в веб приложениях. К примеру меня например целиком бы утраивала возможность скачать видео одной программой, а смотреть другой. Документы редактиовать в нативном редакторе. А так получается куча слоёв, где чем больше, тем медленнее.
Ну да. Но по отношению к JS WebAssembly ситуацию не ухудшает совершенно.
>Я не вижу особого смысла в веб приложениях.Кроссплатформенность?
У разработчиков нативных приложений морока с кроссплатформенностью, у веб-разработчиков -- с кроссбраузерностью. В этом плане принципиальной разницы нет, зато веб куда лучше подходит для реализации принципа "жрите, что дают" и вендор-лока "куда ж вы денетесь с подводной лодки".
> Кроссплатформенность?Ответ неправильный. Один поддерживаемый браузер строго последней версии и ещё два в режиме "работает и ладно" (и всё это максимум на 3 ОС и на 1 аппаратной платформе) это не кроссплатформенность.
Правильный ответ - отсутствие необходимости устанавливать софт и отсутствие необходимости иметь админские права на своём компе для запуска софта. При терпимом уровне производительности.
>Я не вижу особого смысла в веб приложениях.продавать подписку в облаках
> бинарьуниверсальный низкоуровневый промежуточный код
и как в этом бинаре рекламу резать?
как резали в разметке - так и режьте.с другой стороны, как резать рекламу в заведомо "орекламленых" материалах? Например какое-то время назад на ленте можно было с помошью марки чая включить только хорошие новости
> и как в этом бинаре рекламу резать?Ну вот так. Всегда можно придумать новый способ показа рекламы, который не берут существующие адблокеры. В ответ можно сделать новый адблокер, который справится и с такой рекламой.
Оно декомпилируется до текстового представления открытым общедоступным софтом. Результат - менее страшен, чем asm.js, так как костылей вроде |0 и подобного нет.Но, конечно, суть любого веб-приложения - отобрать у пользователя/администратора контроль над кодом.
> суть любого веб-приложения - отобрать у пользователя/администратора контроль над кодомНе только над кодом, но и, в некотором смысле, данными: нативное приложение можно изолировать от внешнего мира, бекапить что надо и когда надо, самостоятельно распоряжаясь своими данными; с веб-приложениями такое невозможно просто по определению, там всё держится исключительно на доверии к разработчикам/владельцам сервиса, которые могут втихаря делать всё, что им заблагорассудится.
>> суть любого веб-приложения - отобрать у пользователя/администратора контроль над кодом
> Не только над кодом, но и, в некотором смысле, данными: нативное приложение
> можно изолировать от внешнего мира, бекапить что надо и когда надо,
> самостоятельно распоряжаясь своими данными; с веб-приложениями такое невозможно просто
> по определению, там всё держится исключительно на доверии к разработчикам/владельцам сервиса,
> которые могут втихаря делать всё, что им заблагорассудится.А ваше нативное приложение где находится ? Если у разработчиков сервиса, то чем "распоряжаюсь данными" отличается от веб ? Если приложение у вас, то и веб-приложение поставьте себе и не парьтесь. Если не хотите ставить, то зачем сравнивать приложения, когда надо сравнивать среду выполнения+хранения
Есть такое понятие - "экосистема". Вот веб-приложение поставить себе, да ещё так, Чтобы оно не обновлялось само - довольно сложно. А вот нативные приложения в этом плане проще, и данные обычно в них проще хранить. Ну вот сложилось так. Да, теоретически можно и для веб-приложений сделать всё красиво - но вот не делают. А для натива - всё есть, как правило.
Здравсвтуй, новый дивный мир!
ещё веб сервер установи
Они изобрели JVM?
И близко не оно. Для понимания - сравнивай наборы опкодов.
Весь javascript - это с самого начала попытка изобрести JVM, проходящая под лозунгом "главное, что не джава", при том что задачи джавы всё больше пытаются решать на js. Хотя могли для скриптов взять common lisp или схемку, как это сделал GNU проект (guile), и не изобретать велосипед.А вебасембли - это ещё один шаг к jvm. Народ заметил, что в яваскрипт умеют компилироваться сотни языков программирования, а значит парсить сгенерированный компилятором яваскрипт - лишняя работу, пусть лучше компилятор предоставляет сразу AST.
Оно к джаваскрипту имеет примерно такое отношение, как Си - к Питону. WebAssembly - гораздо более никоуровневая штука, чем JVM. Тем и хорошо. Ну и тем, что, в отличие от JVM, по пять лет не надо новых фич ждать.
> WebAssembly - гораздо более никоуровневая штука, чем JVM.Эм, что?
Java-байткод - это почти ассемблер, только для абстрактной (виртуальной) машины.
WebAssembly - это просто готовое AST в бинарном виде. По сути те же исходники, только уже распарсенные и немного обработанные.
Грубо говоря, сравнивая с изображениями. Исходный код - это PostScript. WebAssembly - это PDF. Java-байткод - PNG. Ассемблер реальной машины - BMP.
Java-байткод оперирует объектами, ссылками, массивами и прочим высоким уровнем. вот практически первые попавшиеся из описания instruction set:aaload - Load reference from array
aconst_null - Push the null object reference onto the operand stack.
anewarray - Create new array of reference
arraylength - Get length of array
Для сравнения - опкоды WebAssembly:I32Store8 - записать int32 32 бита по 32-битному адресу
I32StoreOff8 - записать i32 значение по i32 адресу с i32 смещением
и так далее - их там куса похожих.Там существующие на уровне опкодов сущности - инты, флоаты, смещения по адресу в куче - то есть куда более низкоуровневые штуки. Собственно, поэтому в WebAssembly без особого труда ложится Си и поэтому там можно, например, реализовать какое угодно управление памятью.
Ок, у JVM и WebAssembly разные "процессоры", и? Что из этого следует кроме того, что в WebAssembly проще реализовать переполнение буфера?
Следует то, что кроме переполнения там реализуется ещё и очистка неиспользуемой памяти без глючных сборщиков мусора и оптимизация кода вручную, что как показывает практика C/C++ ускоряет программы в разы. Часто - в десятки раз.
Следует то, что у WebAssembly более низкий уровень абстракций, о чём я и говорил с самого начала. Ну и всё, что из этого следует - любые модели управления памятью, отсутствие необходимости привязываться к джавовским методам (в частности - можно иметь свободные функции) и так далее. Что означает, что туда проще портировать разнообразные языки и среды.
они изобрели НЕОТКЛЮЧАЕМЫЙ JVM, флэш и всё прочее в одном флаконе.
При том, что уже сейчас без NoScript ходить по страничкам невозможно.
> они изобрели НЕОТКЛЮЧАЕМЫЙ JVM, флэш и всё прочее в одном флаконе.Почему же неотключаемый? Ставишь uMatrix какой-нибудь. Если даже не умеет - скоро научится.
> При том, что уже сейчас без NoScript ходить по страничкам невозможно.
Если ты разрешаешь выполнение кода - то уж разрешаешь. JS - тюринг полный, он может то же что и WASM и любой другой ЯП. Только криво, медленно и с огромным потреблением памяти.
Вы этим бинарником моделировать что-то собрались? Нет? Ах, да, Вы решили купить и поиграть в игрушку, которую ленивые разработчики поленились собрать в нормальный бинарник под вашу платформу... Но это уже никого, кроме покупателя не касается.
Гугол хром завис, крикнул пару раз, что скрипт на странице жрёт и жрёт и его надо прибить, что и было сделано, но asmjs в режиме fallback заработал.
В файрфоксе всё заработало, и WebAssembly и asmjs, первый раз вижу встраиваемый Unity3D под линуксами:
https://youtu.be/QdG3-XrJjBo
> первый раз вижу встраиваемый Unity3D под линуксамиЭто вариант на WebGL, без плагина, которого без костылей не было под линукс
Это же суперкруто. Скоро не будет программулин под Винду и/или Линукс.
Конец всем спорам.Хотя... А можно браузер под браузером в браузере запустить?)
А так же супермедленно.
Чего ради? Оно стаически типизированное и отлично компилируется в машинный код. Его проблемы (или преимущества - для кого как) связаны исключительно с отсутствием контроля пользователя над кодом, как и с JS. В остальном - вполне рабочий подход.
Не факт что сильно медленнее кода на java или .net исполняемого тоже виртуальной машиной, и скорее всего быстрее обычного жс, пайтона и прочих скриптовых языков.
Быстрее - там, по факту, и виртуальной машины-то нет толком, просто промежуточное представление для AOT-компилятора. По идее, скорость должна быть на уровне NaCl - то есть практически натив.
> - то есть практически натив.Теперь еще нормальный комплект компиляторов и сокеты, хотя-бы после подтверждения пользователем. Вот тогда будет огого.
> Хотя... А можно браузер под браузером в браузере запустить?)ну так запустили же вынь95 в браузере
>> Хотя... А можно браузер под браузером в браузере запустить?)
> ну так запустили же вынь95 в браузереОпоздали )
http://bellard.org/jslinux/
http://bellard.org/jslinux/news.html
> May 20, 2011:
> added support for more browsers including Opera 11.11 and Internet Explorer 9
> reduced VM RAM size from 32 MB to 16 MB
Очень тормозной, у меня на ARM малохольном линукс быстрее грузится чем это на огроменном восьмиядернике. А ASM.js еще и файрфокс подразумевает. Не портабельно.
Так их и сейчас нету. Вопрос только в используемых тулкитах и либах.
> Так их и сейчас нету. Вопрос только в используемых тулкитах и либах.Как запустить SolidWorks/AutoCAD под Linux?
> Как запустить SolidWorks/AutoCAD под Linux?Установить вайн и запускаешь. А чтобы нарисовать деталь в DXF, которую потом вырежет лазерный резак хватит и какого-нибудь librecad'а.
> Среди основных задач WebAssembly выделяется обеспечение переносимости между браузерами,Вообще-то подобные проблемы решаются стандартизацией, а не еще одной технологией, "которая-то уж точно будет всеми реализована 100% соответственно спекам, без своих дополнений и особенностей". Так бы сразу и сказали, что просто с веб-бинарей тяжелее будет рекламу вырезать ))
Тут нет противоречия. Ведь не сказано, что технология разрабатывается только для этого, а является лишь одной из основных задач.
Один хрен реклама вырезается либо на этапе загрузки из сети либо из DOM, в этом плане ничего не меняется.Шансы на совместимость неплохие - потому что сама эта штуковина гораздо проще, чем 9/10 современных браузерных технологий. Различия, скорее всего, будут на уровне "инструкции процессора Intel vs инструкции AMD".
А стандартизацией, как показывает практика, в вебе мало что решается.
"Textual encoding will be standardized before stable release" это про кодировку текстовых данных, а не про текстуры.
Не терпится воткнуть вычисление факториала на Haskell.
Думаю скоро JavaScript перестанет быть "родным языком браузера", будет куча равноправных языков, компилируемых в этот WASM или что-то аналогичное.
наконец-то можно будет выкинуть это недоразумение (javascript) и писать на нормальном c++ для браузера
Тогда уязвимостей связанных с управлением памятью станет ещё больше.
> Тогда уязвимостей связанных с управлением памятью станет ещё больше.Если код в VM хочет сам себя хакнуть - он и с JS это может, document.write же есть, может поменять все что захочет в контексте документа, включая замену кода. А расхакать за пределами VM не позволит VM. Иначе зачем вообще VM нужна? Можно было просто качать и компилировать.
но зачем?
> но зачем?Затем что JS хорош только для совсем мелких проектов. А захочешь например игру написать - от JS одни проблемы уже.
в настоящее время, плюсы — единственный адекватный язык программирования
Думаю уже нет. Появились более удобные языки Rust, D, Swift.по поводу WASM: у RUST очень хорошие шансы стать самым подходящим для этой задачи:
на нём будет новый файрфокс(Servo), Luke Wagner, один из соавторов формата, разработчик mozilla Research
> Думаю уже нет. Появились более удобные языки Rust, D, Swift.И где на них всех хоть 1 крупный проект, размером с современный 3D движок какой-нибудь игры? Почему-то игроделы дружно используют плюсы.
> более удобные языки Rust, D, SwiftNim рвёт их все.
> Nim рвёт их все.И от чего ж его так рвёт?
Ура! Многопоточность на клиенте )))
Пойду, предложу разработчикам Ruby WASM