WebAssembly, или заговор четырёх

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by paranoy777, 10 Feb 2016.

  1. paranoy777

    paranoy777 Banned

    Joined:
    23 Jan 2016
    Messages:
    70
    Likes Received:
    25
    Reputations:
    10
    Пролог
    Вестерновый салун где-то на восточно-европейских просторах. Несколько олдфагов и миддлфагов играют в техасский холдем опкодами x86-процессора. Пара ньюфагов пытаются скомпилировать OneHalf под iOS. Неожиданно дверь распахивается, входит самурай с 64-х битной катаной на поясе и кладёт на стол постер «Разыскивается».

    «WASM Wanted!» — гласит большая надпись.

    — Мы снова в деле, котаны, — говорит самурай.

    Великолепная четвёрка
    Долгое, очень долгое время практически единственным языком программирования для страниц, загружающихся в браузере, был Javascript. Здесь можно вспомнить о Java-апплетах и Flash-виджетах, используя которые бесстрашные программисты пытались превзойти всевозможные ограничения, но все эти технологии имели ограниченное и не всегда удобное применение. Основным способом оживить свою страницу — заставить идти снег или бегать котика из одного угла в другой — оставался и остаётся Javascript. Для него было написано множество библиотек и фреймворков, но всё же в различных кругах росло недовольство.

    — Желаем программировать на нормальном языке! — роптали одни.
    — Почему всё такое медленное? — негодовали другие.
    — Хотим компилировать! — восклицали третьи.

    Наконец, их мольбы были услышаны. Google, Microsoft, Mozilla и группа инженеров, стоящая за Webkit (Apple, как обычно, делает загадочный вид), объединились, чтобы создать стандарт, который откроет новую эпоху в области web-программирования.

    Они решили назвать его WebAssembly, а сокращённо — попросту wasm.

    Что это такое
    Проблемы, которые были озвучены — сложность программирования на других языках и низкая скорость выполнения, производители браузеров пытались решить по отдельности. Mozilla разрабатывала asm.js — подмножество JavaScript, которое, с одной стороны, исполняется обычным браузером, а с другой, браузер, поддерживающий этот стандарт (Firefox), способен выполнить его гораздо быстрее, чем обычный JavaScript. Также asm.js задумывался как решение проблемы с программированием на других языках — чтобы он мог служить целью компиляции других языков. Google предложил своё решение — Native Client, в котором бы исполнялся запесоченный для безопасности скомпилированный код C и C++. Однако ни то, ни другое решение не смогло завладеть умами людей и разработчиков.

    WebAssembly — это новая попытка разработать новый стандарт, который решит старые проблемы и будет принят всеми основными участниками. Объединились производители основных браузеров, поэтому есть надежда, что в этот раз она окажется успешной.

    Что из себя представляет WebAssembly, главный репозиторий которого находится здесь? Это не совсем привычный нам байткод. WebAssembly имеет формат AST — абстрактного синтасического дерева, которое может быть представлено как в бинарном виде — основном для распространения, так и в текстовом, соответствующим двоичному.

    Вот пример WebAssembly в человекочитаемой форме.

    Code:
    (module
      (func $return_i32 (result i32)
        (unreachable))
      (func $return_f64 (result f64)
        (unreachable))
    
      (func $if (param i32) (result f32)
       (if_else (get_local 0) (unreachable) (f32.const 0)))
    
      (func $block
       (block (i32.const 1) (unreachable) (i32.const 2)))
    
      (func $return_i64 (result i64)
       (return (i64.const 1))
       (unreachable))
    
      (func $call (result f64)
       (call $return_i32)
       (unreachable))
    
      (export "return_i32" $return_i32)
      (export "return_f64" $return_f64)
      (export "if" $if)
      (export "block" $block)
      (export "return_i64" $return_i64)
      (export "call" $call)
    )
    Лисперам должно понравиться. Конечно, компилироваться wasm будет в бинарную форму.

    План захвата мира
    В первую очередь, WebAssembly рассчитан на web-платформу. Вот как определяется эта цель:

    Проектируется, чтобы запускаться внутри и хорошо интегрироваться с существующей веб-платформой:



    • сохранять безверсионную, протестированную и обратносовместимую историю Веб;
    • запускаться в той же семантической вселенной, что и JavaScript;
    • позволять синхронизированные вызовы из и в JavaScript;
    • соблюдать такие же политики безопасности;
    • иметь доступ к функциональности браузера через такие же Web API, которые доступны в JavaScript;
    • определить человекоредактируемый форма, конвертируемый в и из двоичного для поддержки функциональности просмотра исходников.


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

      Для программистов самое интересное – это то, для генерации приложений в WebAssembly можно будет использовать не JavaScript, а другие языки. Первым, для кого делается поддержка, является C++. Ветераны указатели и шаблонов снова впереди!

      Эпилог
      Будущее покажет, перерастёт ли это попытка в лавину. Если да – веб-разработка (прямая и обратная) стоит на пороге больших перемен и становится ближе к традиционной.
    P.s полезная информация.
    Програмирование на fasm под Win64 часть 1 "Ассемблер, отладчик, IDE"
    http://wasm.ru/article/538
    Програмирование на fasm под Win64 часть 2 "Системы счисления, память, регистры"
    http://wasm.ru/article/540

    Програмирование на fasm под Win64 часть 3 "Окна WinDbg, метки, основные команды"
    http://wasm.ru/article/541

     
    #1 paranoy777, 10 Feb 2016
    Last edited: 10 Feb 2016
    rct likes this.
  2. Ins3t

    Ins3t Харьковчанин

    Joined:
    18 Jul 2009
    Messages:
    939
    Likes Received:
    429
    Reputations:
    139
    не понимаю зачем это сюдой копипастить
     
  3. paranoy777

    paranoy777 Banned

    Joined:
    23 Jan 2016
    Messages:
    70
    Likes Received:
    25
    Reputations:
    10
    Источник я указал. Информация пригодится пользователям.
     
  4. Ins3t

    Ins3t Харьковчанин

    Joined:
    18 Jul 2009
    Messages:
    939
    Likes Received:
    429
    Reputations:
    139
    да это заметка а не статья, нечего ей здесь делать. переносите в статьи или удаляйте
     
  5. blackstrip

    blackstrip Member

    Joined:
    2 Feb 2016
    Messages:
    12
    Likes Received:
    5
    Reputations:
    0
    WASM - это же watcom assembler) Не сперли ли эти самураи и инженеры название часом?) webassembly...