Как стать автором
Обновить

Комментарии 83

Позиционируется:
«как писать на js чтобы было быстро и язык не менялся»
Является:
«как писать на очередном диалекте js, который мы теперь тоже поддерживаем»
НЛО прилетело и опубликовало эту надпись здесь
Я всегда полагал, что диалект это и есть подмножество/ответвление языка.

Предлагаю задуматься над тем, зачем вообще нужен asm.js. На мой взгляд чтобы javascript в браузере быстро работал. И именно javascript, так как у нас есть уже огромное количество кода на нем и нам нужно его оптимизировать. То есть что бы не думали авторы о предназначении asm.js, использоваться он будет именно теми, кто пишет на js, а не теми кому в шутку хочется что-то портировать на js.
Это нисколько не умаляет достоинств asm.js, равно как и не делает написание кода на C/C++ полезным, с учетом того что он будет портирован в js.
НЛО прилетело и опубликовало эту надпись здесь
Позиционирование более похоже на «как скомпилировать программу в 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, а просто скачать свеженькую версию компилятора своего любимого языка в «межбраузерный байт-код» и наслаждаться жизнью.
НЛО прилетело и опубликовало эту надпись здесь
Русский термин такой русский.
Русскость повысилась за счёт перехода на русский способ словообразования («-ник» вместо «-er»), удобство употребления возросло за счёт краткости (всего два слога, тогда как в слове «браузер» их три, а в слове «обозреватель» — пять).

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

— «Фаерволл»? Зачем использовать англицизмы? Есть же прекрасное русское слово: «брандмауэр».
Оно, конечно, тоже заимствованное, но всё-таки ещё с 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?
НЛО прилетело и опубликовало эту надпись здесь
Если верить статье, то не «просто работать» а «только медленнее»
Медленнее, чем в ночном фаерфоксе.
Как я понял из презентации, суть скорее не в том, чтобы писать прямо на 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 будет означал бы ту же скорость).
НЛО прилетело и опубликовало эту надпись здесь
Отлично, значит с 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 превзойдёт всякое воображение.
НЛО прилетело и опубликовало эту надпись здесь
У них уже есть TypeScript
НЛО прилетело и опубликовало эту надпись здесь
Ну вот захотите вы написать онлайн-оптимизатор изображений. Но при этом вы хотите делать все вычисления на клиенте, чтобы не загружать сервер. Берём исходники pngquant, компилируем в js — и все дела. Со временем asm.js будет поддерживаться в Firefox по умолчанию. А если фишкой будут пользоваться, и Firefox будет уделывать в таких скриптах другие браузера, думаю и остальные начнут поддерживать asm.js со временем. В результате — у пользователей изображения на вашей страничке будут оптимизироваться достаточно быстро, при этом сервер не будет нагружен этими вычислениями.
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
Да уже года 2 как сделали. Реализации на java есть, и даже где то я сайт видел подобный.
Были попытки на javascript написанные, и они некоторое время работали.

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

Используется как integer cast в каждом втором скрипте, чего она редкая-то.
На позапрошлой неделе рассказ о ней получил трёхзначный рейтинг на Хабрахабре — так что, наверное, всё же не общеизвестною была конструкция эта.
Odin в поле не Monkey
Даешь программирование в машинных кодах для браузера! Это же сколько возможностей откроется.
В машинных кодах какого процессора?
На DCPU-16 конечно!
Всех, под которые портирован браузер.
Софтварный рендеринг в «2d» контексте будет гораздо быстрее :)
asm.js имеет очень ограниченный user-case и хорош только для написания молотилок цифр. Для многих их нас от него не будет ни горячо ни холодно. Однако же используя AOT компиляцию это даст существенный прирост в скорости рассчета физики в играх, адовы алгоритмы вроде Дугласа-Пекера и вычисление любого хэша. Притом, что функция, написанная, с asm.js будет работать быстрее из-за строгой типизации на бинарном уровне в любом браузере. В итоге выигрывают все!
НЛО прилетело и опубликовало эту надпись здесь
А я всегда так кодил на javascript — как на ассемблере!
Интересно быол бы посмотреть на онлайн-стрелялку на asm.js
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории