Pull to refresh

Comments 83

Позиционируется:
«как писать на js чтобы было быстро и язык не менялся»
Является:
«как писать на очередном диалекте js, который мы теперь тоже поддерживаем»
UFO just landed and posted this here
Я всегда полагал, что диалект это и есть подмножество/ответвление языка.

Предлагаю задуматься над тем, зачем вообще нужен asm.js. На мой взгляд чтобы javascript в браузере быстро работал. И именно javascript, так как у нас есть уже огромное количество кода на нем и нам нужно его оптимизировать. То есть что бы не думали авторы о предназначении asm.js, использоваться он будет именно теми, кто пишет на js, а не теми кому в шутку хочется что-то портировать на js.
Это нисколько не умаляет достоинств asm.js, равно как и не делает написание кода на C/C++ полезным, с учетом того что он будет портирован в js.
UFO just landed and posted this here
Позиционирование более похоже на «как скомпилировать программу в JavaScript для достижения кросс-платформенного выполнения во браузере со скоростью не более чем в два раза меньшей по сравнению с родным кодом». Что по сути позволяет программисту гораздо меньше трахаться со сборкою (потому что достаточно собрать один раз), а также это открывает новую светлую страницу в книжке о кросс-компилировании в целом. (В настоящее-то время легко ли, сидя на Linux, собирать модули под Windows? А наоборот?)

Но это только первая ласточка.

По-настоящему шарахнет, когда движок V8 (известный в качестве довольно шустрого) применит аналогичную оптимизацию, то есть начнёт исполнять asm.js (или иной близко аналогичный диалект джаваскрипта) со страшной, непреоборимой скоростью. Потому что на V8 основан движок Node.js — и тогда пред очами изумлённого мира ярко вспыхнет светоч очередного WORA-движка (от слов «Write once, run anywhere», изначально это был лозунг Sun про Java), но движок этот станет разительно отличаться от всех предыдущих, во-первых, по скорости (потому что V8 и asm.js), а во-вторых, по гибкости: не будет ни малейшей необходимости сочинять только на одном специальном языке — ни на Java (как это было в случае с Sun), ни на asm.js, ни даже только на JavaScript, потому что число языков, в JavaScript компилируемых, весьма значительно, и даже один только Emscripten (автор которого породил asm.js) позволил скомпилировать движки Python, Ruby, Lua, не говоря уж о том, что сам Emscripten является средством для преобразования в JavaScript итогов работы LLVM, а LLVM, в свою очередь, воспринимает ActionScript, Ada, D, Fortran, GLSL, Haskell, байткод Java, Objective-C, Python, Ruby, Rust, Scala и C#.

Будущее будет лучезарным.
Хех, будущее наступит скорее, если поставщики браузеров договорятся и предоставят единую виртуальную машину языка низкого уровня. И вот тогда да — пиши однажны, используй везде. А до этого момента пиши однажды, портируй всегда =)
А зачем единая машина? Например, есть Node.js и что же, разве там исполняется какой-то другой JavaScript, не такой, как во браузерах? Меж тем виртуальные машины в общем случае различны. (Например, в Файерфоксе — IonMonkey, а во Хроме и в Node.js — V8.)

У меня даже есть наглядный пример, близкий событиям вокруг Emscripten и поэтому asm.js. Как известно, одним из наиболее зрелищных примеров работы Emscripten является сборка SQLite. И что же? Во браузере она работает (в каждом из современных браузеров, хотя виртуальная машина в них далеко не единая). Но и в Node.js также работает! (Есть даже проект, основанный на этом модуле.) Работает, однако же, не без проблем, но это проблемы не SQLite, а атомарного доступа к файловой системе изнутри Node.
Ну как зачем? Чем ниже уровень инструкций, тем ближе результат к желаемому, независимо от языка.

Что же до «равного» исполнения js — во Файерфоксе, например, нет концепции скрытых классов, которая есть в V8. То есть язык один, код один, а исполняется по-разному (имеется ввиду скорость, не результат выполнения). И для оптимальной работы писать нужно тоже по-разному.
В то же время, если бы у нас была одна VM с одним набором инструкций — то автоматически важным становится только транслятор (с любого исходного языка на общепринятый конечный байт-код), а не браузер, исполняющий код.
Согласен в целом. Но это уже слишком лучезарно, чтобы сбыться. А так если задуматься, то абсолютно логично писать клиентскую часть на том языке, каком ты считаешь нужным, стыковать клиентскую и серверную часть без лишних костылей, не ждать когда поставщики браузеров запилят более современный диалект javascript, а просто скачать свеженькую версию компилятора своего любимого языка в «межбраузерный байт-код» и наслаждаться жизнью.
UFO just landed and posted this here
Русский термин такой русский.
Русскость повысилась за счёт перехода на русский способ словообразования («-ник» вместо «-er»), удобство употребления возросло за счёт краткости (всего два слога, тогда как в слове «браузер» их три, а в слове «обозреватель» — пять).

Не идеал ли достигнут? Можно ли улучшить этот результат?

Можно было бы дополнительно улучшить одно из этих двух качеств, но только за счёт ухудшения другого (и наоборот), а зачем это.
UFO just landed and posted this here
Когда я дал гиперссылку на ту блогозапись, в которой рассматривалось то моё предложение, то имел в виду и возможность нынешним читателям ознакомиться с тогдашними высказанными там комментариями. Вариант «сетевик» был рассмотрен вон в том комментарии 11 апреля 2012 года и аргументированно отвергнут мною.
UFO just landed and posted this here
ПСДИ для русского уха несколько неблагозвучно.
Есть в этой аббревиатуре что-то от Патрульного Инспектора Дорожного Регулирования.
UFO just landed and posted this here
неее, сетевик — это нетник. Вебник — это паутинник.
Веб — имя собственное, оно не переводится.
А браузер тогда зачем переводить если «веб» нельзя? Как то тут взаимоисключающими параграфами попахивает.
В контексте Word Wide Web последнее слово не значит «паутина», это нечто вроде нашего «БСЭ», но сленгового. Может «Всемирная Матчасть».
Кому удобство? Трафик экономить?
Слово — это не просто набор букв. Слово «браузер» имеет четкую семантику, от слова 'browse' — просматривать. Что означает «вебник»? Нечто, связанное с вебом? Это слово может означать что угодно, начиная от сетевой карты, кончая человеком, зависимым от интернета.
Может не надо устраивать фарс и предлагать какой-то суржик вместо устоявшегося термина?
Слово «рефрижератор» имеет чёткую семантику, от слова «refrigerate» — охлаждать, замораживать. Что означает «холодильник»? Нечто, связанное с холодом? Это слово может означать что угодно, начиная от змеевика с фреоном и кончая человеком, лопатою подкидывающим лёд. Может, не надо устраивать фарс?
UFO just landed and posted this here
Слово «холодильник» в русском языке — сокращение от «холодильный шкаф».
Слово «будильник» в русском языке — сокращение от «будильный аппарат». (А слово «приёмник» — сокращение от «приёмный аппарат».)

Слово «паяльник» в русском языке — сокращение от «паяльный инструмент». (А слово «напильник» — сокращение от «напильный инструмент». А слово «пробойник» — сокращение от «пробойный инструмент».)

Слово «матюгальник» в русском языке — сокращение от «матюгальный мегафон».

Слово «светильник» в русском языке — сокращение от «осветительный прибор».

Слово «учебник» в русском языке — сокращение от «учебный материал». (А слово «задачник» — сокращение от «задачный материал».)

Слово «треугольник» в русском языке — сокращение от «треугольная фигура».

Слово «курятник» в русском языке — сокращение от «курятный сарай».

Слово «внедорожник» в русском языке — сокращение от «внедорожный автомобиль».

Слово «запальник» в русском языке — сокращение от «запальный механизм».

Слово «подрамник» в русском языке — сокращение от «подрамный держатель».

Слово «обменник» в русском языке — сокращение от «обменный пункт». (А слово «файлообменник» — сокращение от «файлообменный сайт».)

Слово «чайник» в русском языке — сокращение от «чайная утварь».

Слово «пододеяльник» в русском языке — сокращение от «пододеяльный утеплитель».

Если нравится Вам эта стройная теория о том, что все слова, суффиксом «-ник» образуемые, являются на самом деле сокращениями — ради Бога; но тогда думайте, что слово «вебник» является сокращением от «вебный облазыватель», и тем невозбранно уложите его в ту же теорию.
В ответ уместно процитировать ваш-же коммент чуть выше:
>Вы нарочно доводите до абсурда, я за Вами это ещё в мае прошлого года заметил.
>
>Пожалуйста, ПСДИте в другом месте.

Как можно заметить, сами вы доводить до абсурда не гнушаетесь.

Как бы вам ни хотелось, новые слова так не вводятся. Не нужно никому такое слово. А тем более, если это замена текущего технического термина. Технические термины должны быть понятны *всем*, чтобы более эффективно обмениваться знаниями. Хотите развивать язык — пишите художественные книги, а не повышайте «русскость» в комментах.
Большая часть слов из вашего списка никогда не употреблялась в разговорной речи в полном варианте.
А «холодильный шкаф» — употреблялся.

Примеры
Книг там было много, но зато стоял и
большой холодильный шкаф. Из этого шкафа издатель вытаскивал различные
бутылки и кубики льда, потом спрашивал, какой коктейль мы предпочитаем — «Манхэттен», «Баккарди», «Мартини»? — и сейчас же принимался его сбивать с
такой сноровкой, словно никогда в жизни не издавал книг, не писал стихов, а
всегда работал барменом. Американцы любят сбивать коктейли.
***
Зато во всех этих городах можно купить автомобиль последней модели,
электрический холодильный шкаф (мечта молодоженов), в домах течет из кранов
холодная и горячая вода, а если городок получше и в нем есть приличный
отель, то в номере у вас будут три воды — горячая, холодная и ледяная.
***
Большинство таких девушек живет у родителей, заработок их идет на то,
чтобы помочь родителям уплатить за домик, купленный в рассрочку, или за
холодильный шкаф, тоже купленный в рассрочку.


Илья Ильф, Евгений Петров. Одноэтажная Америка
Холодильник холодит, охлаждает (продукты). А вебник вебает?
Словарит или энциклопедничает.
Моя незабвенная преподавательница по ОССО однажды сказала:

— «Фаерволл»? Зачем использовать англицизмы? Есть же прекрасное русское слово: «брандмауэр».
Оно, конечно, тоже заимствованное, но всё-таки ещё с XIX века, и уже успело прижиться.
С одной стороны, успело.

С другой стороны, оно создает разночтения в русской и английской терминологии, все еще являясь иностранным заимствованием, и к тому же менее благозвучным, чем «фаерволл».

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

Хочу убежать подальше из этого лучезарного будущего. Почему не сделать нормальную виртуальную машину, а не эти костыли?
1. Обратная совместимость со старыми браузерами.
2. Очевидно, что производители браузеров не смогут договориться о единой виртуальной машине. Посмотрите на ситуацию с поддержкой аудио-видео кодеков в браузерах.
3. Google делает Native Client, но кроме Google Chrome его никто не поддерживает — он не используется повсеместно, поэтому производители других браузеров просто игнорируют его существование. asm.js можно будет использовать уже сегодня, и это будет работать во всех браузерах. Разница будет только в производительности. Если использование asm.js станет популярным, производители браузеров будут вынуждены добавить его поддержку для повышения производительности такого кода.
Ну в целом после её повсеместного внедрения уже можно будет, наверное, превратить её в настоящую виртуальную машину. Но мой перфекционизм просто кричит от боли!
Рассказываю: если сделать нормальную виртуальную машину, то всё работать будет только в альтернативном лучезарном будущем и только у тех, у кого эта машина установлена.

А так будет работать у всех и будет работать прямо сейчас. Только медленнее. (Причём на уровне «немножко медленнее», а не на уровне «убейте меня, зачем мучаете?». Разница менее чем на порядок.)

И так как состояние «виртуальная машина работает» куда привлекательнее состояния «виртуальная машина нормальная, но заработает только через несколько лет», то имеем то, что имеем.
Можно подумать, поддержка asm.js ускорит V8 в той же мере, что и *Monkey. Эдак мы и обычный ASM (который без js) перегоним? А количество языков… Как ни крути, но скорость порта Java -> LLVM -> asm.js будет куда ниже, чем просто Java. С другими языками аналогично.
не будет ни малейшей необходимости сочинять только на одном специальном языке — ни на Java (как это было в случае с Sun)
А кто вам сказал, что виртуальные машины Java исполняют только код, написаный на Java?
Я правильно понимаю, что для подобного ускорения нужно будет все свои скрипты переписывать вручную под asm.js?
UFO just landed and posted this here
Если верить статье, то не «просто работать» а «только медленнее»
Медленнее, чем в ночном фаерфоксе.
Как я понял из презентации, суть скорее не в том, чтобы писать прямо на asm.js, а писать на статитически типизированных языках и транслировать на него, сейчас основные успехи с С/C++.
Statically-typed languages and especially C/C++ can be compiled effectively to JavaScript
Хм. То бишь взять тот же zlib и легко и просто его перенести на яваскрипт?
Да, притом они уже это сделали, чтобы проверить производительность. В статье есть табличка

             odin (now)  odin (next)   sm       v8
zlib         2.02         1.61         5.15    5.95

Числа показывают во сколько раз полученный код исполняется медленнее скомпилированного через gcc с флагом O2 (1.0 будет означал бы ту же скорость).
UFO just landed and posted this here
Отлично, значит с C# тоже можно будет.
наверное TypedScript можно будет скрестить с asm.js
У asm.js только один большой минус, — не поддерживается строковый тип. Если бы поддерживался, это была бы революция.
Эмс, это что предлагаю писать js на С, компилить через asm.js что бы код быстрее работал аж в Firefox Nightly и то, если отдельно включить там OdinMonkey?
Просветите в чем смылс?
Для избранных которые будут ставить Firefox Nightly+OdinMonkey можно на С прогу написать, а все остальные разницы не заметят.
Да и код такой поддерживать и дебажить явно сложнее обычно JS.
Или я что-то не так понял?
Как я только что (одновременно с Вами) огласил чуть выше, перед нами первая ласточка.

Во-первых, Firefox Nightly является отправною точкою шестинедельного цикла разработки: через шесть недель он превратится в Firefox Aurora, ещё через шесть — в Firefox Beta, а ещё через шесть — в реальный Mozilla Firefox, один из наиболее популярных браузеров Интернета. Поддержка asm.js будет доставлена многим миллионам реальных людей по всему миру, а не только горстке энтузиастов, употребляющих еженощные сборки.

Во-вторых, есть надежда на то, что остальные браузеропроизводители подхватят эту движуху, и тогда величина аудитории asm.js превзойдёт всякое воображение.
UFO just landed and posted this here
UFO just landed and posted this here
Ну вот захотите вы написать онлайн-оптимизатор изображений. Но при этом вы хотите делать все вычисления на клиенте, чтобы не загружать сервер. Берём исходники pngquant, компилируем в js — и все дела. Со временем asm.js будет поддерживаться в Firefox по умолчанию. А если фишкой будут пользоваться, и Firefox будет уделывать в таких скриптах другие браузера, думаю и остальные начнут поддерживать asm.js со временем. В результате — у пользователей изображения на вашей страничке будут оптимизироваться достаточно быстро, при этом сервер не будет нагружен этими вычислениями.
UFO just landed and posted this here
UFO just landed and posted this here
UFO just landed and posted this here
Да уже года 2 как сделали. Реализации на java есть, и даже где то я сайт видел подобный.
Были попытки на javascript написанные, и они некоторое время работали.

В принципе ничего сложного там нет, исходники биткоин клиента доступны — портировать не проблема.
Мозги разминал, писал, знаю :)
Эффективнее это будет сделать на RiverTrail aka Parallel.js (вычисления на GPU) который, кстати, уже включен в FF Nighty. И, как ни странно, имеет обратную совместимость c однопоточным и процессорным JavaScript.
Ого, и это всего Один Манки! А если два?
UFO just landed and posted this here
UFO just landed and posted this here
редко используемые конструкции языка, наподобие "|0"

Используется как integer cast в каждом втором скрипте, чего она редкая-то.
На позапрошлой неделе рассказ о ней получил трёхзначный рейтинг на Хабрахабре — так что, наверное, всё же не общеизвестною была конструкция эта.
Даешь программирование в машинных кодах для браузера! Это же сколько возможностей откроется.
В машинных кодах какого процессора?
Всех, под которые портирован браузер.
Софтварный рендеринг в «2d» контексте будет гораздо быстрее :)
asm.js имеет очень ограниченный user-case и хорош только для написания молотилок цифр. Для многих их нас от него не будет ни горячо ни холодно. Однако же используя AOT компиляцию это даст существенный прирост в скорости рассчета физики в играх, адовы алгоритмы вроде Дугласа-Пекера и вычисление любого хэша. Притом, что функция, написанная, с asm.js будет работать быстрее из-за строгой типизации на бинарном уровне в любом браузере. В итоге выигрывают все!
UFO just landed and posted this here
А я всегда так кодил на javascript — как на ассемблере!
Интересно быол бы посмотреть на онлайн-стрелялку на asm.js
Sign up to leave a comment.

Articles