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

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

Спасибо, статья по ссылке просто потрясающая!
Не могу отделаться от стойкого чувство что WASM это какое-то переизобретение java аплетов.

Пусть и переизобретение, главное чтобы оно учитывало предыдущие ошибки.

НЛО прилетело и опубликовало эту надпись здесь

Главная проблема "убить JS" (помимо тонны написанного кода) — сложность переноса рантайма и сборщика мусора, который есть у многих языков как C#, Java, Python и прочие. Поэтому жизнеспособными в WASM оказываются только такие языки как C++ или Rust, которым не надо тащить сборщики мусора и жирные рантаймы.А остальным языкам по сути необходимо носить всё этот в бинарнике WASM. Недавно Майкрософт выпустила "ужатую" VM C# для WASM, но это такой себе вариант, когда в браузере уже есть рантайм и GC для JS. Как один из возможных вариантов — портировать языки для работы с движком браузера напрямую, но кому это нужно? Да и смысл WASM теряется. Ну а писать весь сайт на C+++ или Rust не каждый сможет.

В дальних планах по Wasm — сделать для него GC: github.com/WebAssembly/gc
Но чтобы это реализовать, нужно пройти ещё несколько важных шагов по упрощению JS/Wasm interop.
Интересный проект. Будем надеятся на его дальнейшее развитие.
НЛО прилетело и опубликовало эту надпись здесь

Проверено, меньше 100Мб. Не забывайте про brotli

НЛО прилетело и опубликовало эту надпись здесь

Прототип чата вышел в 20Мб, brotli уменьшает до 5мб.

НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь

К проблемам уже зарепорченым staticlab я добавлю еще несколько


  1. Выделение текста мышью не работает. Причем не только в сообщениях, но и в текстовом инпуте
  2. Инвертированный скролл с очень дерганой ненативной анимацией
  3. Tab-клавиша не работает как надо, не получается перейти в адресную строку браузера
  4. Плюс всякие мелкие недостатки, вроде отсутствия скролла вниз чата при отправке нового сообщения.

Если именно такие кривые интерфейсы нас ждут с массовым приходом WebAssembly, то Javascript внезапно окажется еще и более предпочтительным вариантом.

Я тестировал поддержку WebAssembly в Qt когда он был в Technical Preview. Но мы в IQ Option пишем свой freamework на C++ и в нем всё вами перечисленное работает.

Да, вы присылали ссылку в личку, я покликал. Выглядит неплохо, почти как нативно.


Однако, возникает вопрос, зачем тратить столько усилий на переизобретение базовых штук вроде выделения текста или скролла, чем уже готовая браузерная функциональность не устраивает?

Так сложилось по историческим причинам. Разработчик, который был приглашен на оптимизацию рисования графиков, принес с собой готовый фреймворк. В какой то момент времени, было принято решение всё переписать на C++. Бонусом есть нативное приложение, которое лучше работает на слабых машинах.

НЛО прилетело и опубликовало эту надпись здесь
llvm умет собираться в wasm… А для него есть очень много фронтендов… Другой вопрос надо ли это.
для старых браузеров будет polyfill — возможность преобразования Wasm в asm.js

Для C++ можно сразу получить wasm и asm.js код. И это нужно не только для IE 11, но и на случай когда производитель сломает поддержку wasm в браузере. Из недавнего Safari на iOS 13-13.1.3.

это бинарный формат, запускаемый в браузере
Wasm всегда загружается и вызывается ТОЛЬКО из JavaScript

Две больших неправды. WASM вполне себе можно запускать и вне браузера (см. wasmer), а то и


вовсе за пару часов написать собственный рантайм

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


Python, Ruby, C++, Rust и все-все-все
Java Applet попадает под «другие плагины»?
С формальной точки зрения WASM выглядит похожим на аплеты.
внутри него работает ActionScript, по сути, тот же JavaScript

Во флеше работал байткод. Это как раз то, ради чего webasm задуман.
PS: не смог пройти мимо и не вступиться за покойничка.

JS тоже в рантайме мелется в некоторый байткод. Флешки писались на ActionScript, которое было подмножеством несостоявшегося ECMAScript 4.

НЛО прилетело и опубликовало эту надпись здесь
С одной стороны наконец-то будет GUI относительно безболезненный, а с другой «электронификация» всего и вся оптимизма не прибавляет.
НЛО прилетело и опубликовало эту надпись здесь

Интересно рассказываете. Не хотели бы написать статью на эту тему?

НЛО прилетело и опубликовало эту надпись здесь
Проблем с производительностью железа уже 5-10 лет нет.
А вот время и стоимость разработки увеличатся в разы если писать их на плюсах или Яве.
так wasm даёт возможность писать на шарпе/котлине/расте/го
По удобству и скорости разработки с JS может соревноваться только Python, но там выигрыша в скорости не будет. JS по тому и популярен, что позволяет делать всё намного проще.
Плюс такие вещи, как React, навряд ли кто станет воспроизводить на других языках.
Минусы без обоснования, предполагаю, от секты хейтеров JS:)
По удобству и скорости разработки с JS может соревноваться только Python

Как "хейтер JS" не могу не прокомментировать :) Кроме времени на разработку есть ещё и время на отладку + поддержку. Чтобы что-то спрототипировать, конечно, скриптовые языки с динамической типизацией удобны. А вот с гарантиями, что через неделю что-нибудь где-нибудь не отвалится в самый неожиданный момент — тут уже сложнее.


Может, это прозвучит странно, но я бы не рискнул написать что-то большое на Python, да и на счёт C бы задумался — я банально не настолько в себе уверен. :) Мне намного комфортнее на Scala. Просто квалификация — понятие векторное: у кого-то чёткая дисциплина, позволяющая с бешеной скоростью писать на языках со статически-слабой проверкой типов, а кого-то не напрягает формулировать типы (не пишу "указывать", поскольку в Scala это далеко не везде обязательно, в отличие от старых версий Java), но при этом спокойнее, когда компилятор страхует, где только можно. Про Haskell вон вообще шутки ходят, мол, если скомпилировалось, то почти наверняка работает, как надо.


Будете смеяться, но насколько я помню, когда-то в Селектеле, грубо говоря, переписывали скрипты с Python на Haskell — ну, такой мелкий рефакторинг устроили, ага… Итог был, что даже с учётом отладки всё-таки медленнее, но тем не менее провалом, вроде, это не посчитали.


К тому же ладно, если я один пишу. А если команда в течение пяти лет? А если это открытый проект с априори неизвестной квалификацией контрибьютеров. Вон, в Mozilla, говорят, стали спать спокойнее, когда перешли на Rust для некоторых многопоточных библиотек (или их вообще не решались сделать многопоточными до этого — точно не помню...).


В общем, всё-таки выбор языка зависит от задачи, и кроме времени разработки есть ещё и время отладки/поддержки и вероятность, что что-то может сломаться внезапно. JS — это ещё один вариант в trade-off (для меня вряд ли приемлемый), но едва ли серебряная пуля, как его некоторые пытаются выставить в последнее время (а другие с OpenNet их называют нехорошими словами. Впрочем, фанатам Раста и всего, что не C, там тоже часто достаётся).


PS: получилось довольно по-капитански, знаю...

Как «хейтер JS» не могу не прокомментировать :) Кроме времени на разработку есть ещё и время на отладку + поддержку. Чтобы что-то спрототипировать, конечно, скриптовые языки с динамической типизацией удобны. А вот с гарантиями, что через неделю что-нибудь где-нибудь не отвалится в самый неожиданный момент — тут уже сложнее.

99,9% фронтэнда написано JS, всё работает и не отваливается:)
Может быть секрет в автоматизации тестирования кода, если вы про него слышали.
На беке Node в качестве API Node выбирают такие компании, как Яндекс(видел вакансии), Гугл, ВК и многие другие. Знакомый лидом работает в высоконагруженном проекте там все сервисы на Node и тоже всё работает.
Может, это прозвучит странно, но я бы не рискнул написать что-то большое на Python, да и на счёт C бы задумался — я банально не настолько в себе уверен. :)

Действительно странно, учитывая, что на Python написаны такие «совсем простые и не нагруженные сервисы, как YouTube и Instgram.
Мне намного комфортнее на Scala. Просто квалификация — понятие векторное: у кого-то чёткая дисциплина, позволяющая с бешеной скоростью писать на языках со статически-слабой проверкой типов, а кого-то не напрягает формулировать типы (не пишу „указывать“, поскольку в Scala это далеко не везде обязательно, в отличие от старых версий Java), но при этом спокойнее, когда компилятор страхует, где только можно.

Указание типов это только 20% тормозов. То что в JS пишется в одну строчку на других языках может занять 10+.
Про Haskell вон вообще шутки ходят, мол, если скомпилировалось, то почти наверняка работает, как надо.

Будете смеяться, но насколько я помню, когда-то в Селектеле, грубо говоря, переписывали скрипты с Python на Haskell — ну, такой мелкий рефакторинг устроили, ага… Итог был, что даже с учётом отладки всё-таки медленнее, но тем не менее провалом, вроде, это не посчитали.

Про Hascel ничего не знаю, кроме того, что вакансий по нему почти нет. Может там и правда удобно.
К тому же ладно, если я один пишу. А если команда в течение пяти лет? А если это открытый проект с априори неизвестной квалификацией контрибьютеров. Вон, в Mozilla, говорят, стали спать спокойнее, когда перешли на Rust для некоторых многопоточных библиотек (или их вообще не решались сделать многопоточными до этого — точно не помню...).

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

В данной ситуации ясно о чём речь. JS на браузере — он же фронтэнд. Если вам уровень мышления позволяет без проблем проанализировать консоль и понять откуда что прилетело, то JS, если нет то TS, WebAsembly и т.п. вам больше подойдут.
99,9% фронтэнда написано JS, всё работает и не отваливается:)

Я в курсе :)


Может быть секрет в автоматизации тестирования кода, если вы про него слышали.

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


Указание типов это только 20% тормозов. То что в JS пишется в одну строчку на других языках может занять 10+.

Про Hascel ничего не знаю, кроме того, что вакансий по нему почти нет. Может там и правда удобно.

Когда-то, когда я только становился Scala-программистом, мне её рекламировали, как язык, на котором разработка почти столь же быстрая, как на ну грубо говоря Python (там был другой язык с динамической типизацией), но при этом с шикарной системой типов. Так вот прикол конкретно Scala в том, что она изначально задумывалась как, в том числе, язык для создания DSL, ну и традиционные вещи в ФП типа filter, map, flatMap и т. д. там во весь рост. При этом "под капотом" там местами какая-то лютая система типов, но ровно для того, чтобы для пользователя это был очень простой DSL, притом статически проверяемый. В общем, извините за излишнюю рекламу Scala — она здесь как пример, что статическая типизация — это не всегда синоним "неудобно писать код" — иногда да, но в целом нет. Так что, если вдруг ради интереса решите посмотреть в сторону Haskell — лучше гляньте на Scala. Она, скорее всего, покажется намного более понятной, да и используется "в дикой природе" намного чаще.


В данной ситуации ясно о чём речь. JS на браузере — он же фронтэнд. Если вам уровень мышления позволяет без проблем проанализировать консоль и понять откуда что прилетело, то JS, если нет то TS, WebAsembly и т.п. вам больше подойдут.

Так ведь некоторые и десктопные приложения в Electron пихают. И да, Scala тоже не полностью устраняет необходимость аккуратного кодинга.

Когда-то, когда я только становился Scala-программистом, мне её рекламировали, как язык, на котором разработка почти столь же быстрая, как на ну грубо говоря Python (там был другой язык с динамической типизацией), но при этом с шикарной системой типов. Так вот прикол конкретно Scala в том, что она изначально задумывалась как, в том числе, язык для создания DSL, ну и традиционные вещи в ФП типа filter, map, flatMap и т. д. там во весь рост. При этом «под капотом» там местами какая-то лютая система типов, но ровно для того, чтобы для пользователя это был очень простой DSL, притом статически проверяемый. В общем, извините за излишнюю рекламу Scala — она здесь как пример, что статическая типизация — это не всегда синоним «неудобно писать код» — иногда да, но в целом нет. Так что, если вдруг ради интереса решите посмотреть в сторону Haskell — лучше гляньте на Scala. Она, скорее всего, покажется намного более понятной, да и используется «в дикой природе» намного чаще.

Когда выбирал второй язык ( Python разбирал только пол месяца, поэтому его не считаю), посмотрел в сторону Scala, но в эту сторону и идут, как правило, последователи мира Java, поэтому выбрал Go.
Map, filter и т.п. — это ещё ES5 синтаксис для JS. Основное развитие пошло с ES6+ стандартов. Если взгляните, то увидите, сколько «сахара» сейчас предлагает JS.

Когда переходил на Scala, делал это с осторожностью, поскольку против Java испытывал некоторые предрассудки. В итоге на Scala особо "паттерны ради паттернов" не использовал. И здесь расчёт был как раз на то, что "надо будет — спрошу у Идеи все места использования, поправлю, проверю что всё компилируется — и после этого буду достаточно спокоен". Вот здесь как раз и помогала развесистая статическая типизация.


Map, filter и т.п. — это ещё ES5 синтаксис для JS. Основное развитие пошло с ES6+ стандартов. Если взгляните, то увидите, сколько «сахара» сейчас предлагает JS.

Это да, сейчас, кстати, и в Java всякие stream API появились — к счастью, языки заимствуют хорошие особенности друг у друга. Вот только когда я последний раз читал документацию по Python (довольно давно), там эти filter и т.д. по непонятной для меня причине были помечены как нежелательные к использованию.

Scala, так понимаю, позиционирует себя, как замена Java для создания корпоративного софта?

Ох… С "философией" и классификацией у меня вечные проблемы… Видимо, да. Скорее, может, как переосмысление идей ООП и ФП (ну и статической типизации, но с каждым по отдельности она и так отлично совмещается) внутри одного языка, преимущественно нацеленное на JVM (но также на компиляцию в JS и нативный код). Кстати, насколько мне известно, часть бекенда в Twitter как раз на Scala.

То есть современная Java без лишнего брэйнфака, как я и предполагал.
Значит ваша специализация корпоративный «серьёзный софт», только и всего.
Конечно вы можете попытаться изобрести фронтэнд фраемворк или заняться машинным обучением на Scala, но зачем если есть инструменты, которые дают лучшее соотношение цена/качество?

На самом деле, тоже не вполне понимаю, зачем писать на JS на Scala — скорее, к слову пришлось. Ну, то есть, это в каком-то смысле уже не та разрекламированная Scala, опирающаяся на всю экосистему библиотек на JVM, а просто язык с прикольной системой типов и некоторыми библиотеками, поддерживающими Scala.JS.


Впрочем "современная Java" — это, скорее Kotlin. Насколько мне известно, совместить ООП и ФП вместе со статической типизацией в одном языке — это был гигантский труд. В этом плане Scala — это скорее "новый язык, опирающийся на экосистему JVM".


Кстати, на Scala даже пишут продвинутые генераторы процессоров. Хотя, справедливости ради, на чём сейчас железо только не пишут (в качестве DSL) — на Haskell, Python, разве что, не на ассемблере.

Насколько мне известно, совместить ООП и ФП вместе со статической типизацией в одном языке — это был гигантский труд.

То есть к ограничениям ООП, Kotlin добавляет ещё и ограничения ФП?))) Воинстину брейнфак.
Кстати, на Scala даже пишут продвинутые генераторы процессоров. Хотя, справедливости ради, на чём сейчас железо только не пишут (в качестве DSL) — на Haskell, Python, разве что, не на ассемблере.

Вы сначала определитесь, что хотите писать, а потом уже выбирайте язык под эти цели.
То есть к ограничениям ООП, Kotlin добавляет ещё и ограничения ФП?))) Воинстину брейнфак.

Не Kotlin, а Scala и не ограничения, а возможности. :) Можно писать как на упрощённой Java с удобным автоматическим выводом типов и лаконичными конструкциями, имея при этом доступ ко всему наследию Java. Можно (но не обязательно) и как на ФП (правда, как раз-таки без ограничений на сайд-эффекты, например).


Kotlin, как я понимаю, это попытка упростить синтаксис Java и обуздать некоторые опасные вещи вроде null, который в Java может выскочить практически, где угодно. Но врать не буду — про Kotlin я лишь слышал чужие рассказы.


Вы сначала определитесь, что хотите писать, а потом уже выбирайте язык под эти цели.

Это само собой. Просто забавно, что язык подходит сразу для многого, и при этом удобным образом (потому что одно из предназначений по задумке — DSL).


Мда… Как-то мы умудрились затеять развесистое обсуждение Scala в треде про WASM, в который она даже и не факт, что компилируется...

Значит вы не совсем понимаете смыл типов программирования — каждое название (ОП, ФП, структурное программирование накладывает ограничения на язык, то есть что то отнимает).
Мда… Как-то мы умудрились затеять развесистое обсуждение Scala в треде про WASM, в который она даже и не факт, что компилируется...

Всё же в сравнении становиться плохим или хорошим. Когда то и ассемблер был прорывом:)
Так что, если вдруг ради интереса решите посмотреть в сторону Haskell — лучше гляньте на Scala

На правах нуба и чайника, замечу что лучше наверное сначала всё-таки в сторону Хаскеля. Скала типичный язык для продакшена, позволяющий делать что угодно и как угодно. В том числе вещи совсем не идиоматичные для ФП. И если человек никогда не писал в функциональном стиле, на Скале он в нём писать никогда и не научится. А вот сначала сломать мозг Хаскелем, который просто НЕ ПОЗВОЛИТ писать не идиоматично, а потом перейти на Скалу по-моему идея гораздо более здравая. Хотя всё конечно зависит от цели.

Наверное, вы правы — и сам я именно в таком порядке знакомился — но на момент написания комментария DMP7 мне казался "JS-хейтерохейтером" и я в порыве обсуждения предложил ему что-то менее вызывающее отторжение у человека, у которого нет жгучего желания узнать, что же это за ФП, а просто интересующегося. Scala — она и в плане синтаксиса меньше мозг выносит, и используется сильно больше где. Впрочем, и сам я и близко не "чистый функциональщик".


С другой стороны, напротив, вариант "полностью сломать мозг Хаскелем и нести ФП в родной JS" (а JS, насколько я понимаю, вполне позволяет использовать некоторые подобные вещи) тоже имеет право на жизнь.

Тут как я уже сказал, всё зависит именно от ЦЕЛИ. Если цель сразу начать писать что-то полезное и востребованное, то безусловно Scala, тут и спорить не о чем. Но если цель сломать мозг и тем самым получить его небольшой апгрейд, то конечно Haskell. Для меня одинаково далеки и frontend и backend. Я в основном железячник. И мне ближе verilog. Но GUI(в редких случаях когда он мне нужен) я предпочитаю писать в браузере. Именно так и познакомился со Scala (typescript у меня почему-то не пошел, хотя до сих пор пишу именно на нём, даже не знаю в чём тут дело). А познакомившись заинтересовался вообще ФП. И понял, что Scala тётка слишком добрая и слишком многое прощающая. А значит ничему и не обучит. Сэр Haskell порющий на конюшне за малейшую провинность своих почитателей, мне кажется в качестве учителя тут куда более годен. Впрочем повторю ещё раз. Главное тут ЦЕЛЬ. Моя цель — сломать себе мозг. Если цель написать что-то полезное, то Scala и только Scala. Например именно Scala отучила меня от jquery. Сейчас не пользуюсь ей вообще никогда.
Не понимаю почему JS относят к ФП, хотят даже в «Чистом коде» написано, что он ООП. Видимо люди не читали определения ФП.
Лично я JS не отношу ни к тем не тем, т.к. он по сути не накладывает никаких ограничений, кроме здравомыслия( повторяющийся код по функция, отступы и т.п.)
На беке Node в качестве API Node выбирают такие компании, как Яндекс(видел вакансии), Гугл, ВК и многие другие.

Только код теперь пишут на Typescript, а не голом JS. Все-таки фронтенд-девелоперы (в том числе и писатели для Node.js) поняли полезность статической типизации, когда большое количество ошибок удобнее ловить на этапе компиляции, а не в рантайме.
Многие нынешние фронтэндеры и бекендеры JS — это вчерашние «строгие ОПГ ООП-шники. Отсюда любовь ко всем этим сложностям.
Конкретно в Яндекс упоминание TS не такое частое. Возможно из-за того, что туда берут людей с довольно высоким интеллектом и проанализировать лог для них намного проще чем писать много лишнего кода.
угу, вот только почти во всех вакансиях яндекса упоминается ts интересно почему?
Когда я смотрел( пару месяцев назад), в 1 из 3-х упоминался. А почему я вам ответил — опытные программеры, переходя на язык, который хейтили решили прихватить с собой привычный функционал.
Проанализировать лог может и не проблема. А как быть если Вы передаёте свой код совершенно новому человеку, который до того его не видал? Со статически типизированным языком технология довольно понятна. Человек начинает разбираться с типов. А вот самостоятельно разобраться в серьёзном коде на JS, я бы например наверно не взялся.
Опять же зависит от способностей человека и насколько адекватно вы пишите код.
Если код без искусственных накруток( когда и так компактный js пытаются сделать ещё компактнее ) хорошо оформлен, где надо комменты — то никаких проблем.
Другое дело, что программеры любят делать себя незаменимыми и придумывают «фишки», вот за такое лид должен сразу наказывать.
Вы батенька похоже немножечко идеалист :))))) Где и когда Вы видали нормальные комменты! Я вот ни разу… Сам предпочитаю даже не комменты, а некое описание проекта с «птичьего полёта», где объяснены и наиболее важные классы и наиболее важные алгоритмы. Но это Я. В подавляющем большинстве кодеры чудовищные раздолбаи (знаю по себе !). И если язык ЗАСТАВЛЯЕТ их соблюдать какую-то дисциплину, тысяча респектов этому языку.
В серьёзных компаниях уже давно приняты стайл-гайды, а так конечно можно нарваться на любой код. Вы так привыкли и многие перешедшие в JS, так и возник TypeScript. Если бы вы начинали с JS, то есть сейчас бы плевались с лишнего кода.
Если бы вы начинали с JS, то есть сейчас бы плевались с лишнего кода.

Так и есть. У нас тоже есть стайл-гайд, но он не тянутый с других языков, а разработанный ява-скриптерами для ява-скриптеров.
Ведь лучше же, когда типы есть прямо в языке, а не изолентой примотаны сбоку? Благо что наконец хотя бы важность типов признали :)
НЛО прилетело и опубликовало эту надпись здесь

В 95% случаев компилятор прав. Зачастую такие проверки можно отключить, со всеми вытекающими последствиями.

НЛО прилетело и опубликовало эту надпись здесь

При миграции с js на ts с каждым шагом потихоньку включаешь все больше проверок компилятора, пока не переведешь проект в такое состояние, что он соберется с strict-type-checking. А затем в линтере объявляешь все any вне закона (и только в тех местах, где без него не обойтись (даже с помощью дженериков и/или type unions) втыкаешь коммент с отключением линтера). Компилятор, кстати, на ошибки с типами предсказуемо ругается, там магии и подводных камней нет.

НЛО прилетело и опубликовало эту надпись здесь

Не отваливается — понятие растяжимое.

Если вам уровень мышления позволяет без проблем проанализировать консоль и понять откуда что прилетело, то JS, если нет то TS, WebAsembly и т.п. вам больше подойдут.

Эк вы мощно — звучит как "Если мозгов хватает, пиши на JS" :) (извините, если неправильно понял) Я вообще-то про другое: для "более строгих" языков тоже мозги нужны, и не меньше — просто требуются другие сильные и прощаются другие слабые стороны. Вообще, в идеале для некоторых задач (не уверен, что фронтенд к ним относится) было бы удобно, чтобы "мозгов хватило — написал хорошо, не хватило — не написал никак". В этом плане впечатляют рассказы про Rust (который я мечтаю когда-нибудь изучить) от людей, пол-часа бившихся с компилятором, выполнявших его подсказки, и в итоге таки написавших безопасный многопоточный код. В то же время компилятор C++ согласился бы почти сразу, и оно почти всегда бы работало — это-то и страшно...

Вы же сами написали, что всё упирается отладку кода. Вы можете быстро понять, в чём ошибка или потратите сутки на прилетевший неверный тип? Из этого и надо исходить.
RUST создавался для системного программирования, а это сложнее и ответственнее веба(самолёты и ракеты должны летать так как задумано). Писать на нём фронтэнд — это всё равно, что беспилотник сбивать ракетой за млн. $

А вот с этим соглашусь! Только один нюанс: неверный тип в Scala/Rust (в TS, наверное, тоже) прилетит при компиляции, и вы его неспешно изучите и поправите, а вот undefined is not a function — в рантайме, и поправить может понадобиться срочно. Извините за приступ графоманства :) Просто сейчас у некоторых людей есть мода выставлять JS серебряной пулей вообще для всего. Вот против этого, а не написания фронтенда на JS, в моём представлении выступают JS-хейтеры.

Ничего страшного, мне нравиться общаться, если людям есть что сказать)
Я не так давно в программировании, хотя образование профильное ( жизнь помотала много где ), но о слове runtime впервые услышал в Go — такие ругательства в js не используются:)
Да без разницы что прилетит — выйдет ошибка в консоли, можно поставить точки останови или логи и посмотреть, что и откуда прилетело. Весь вопрос в том насколько это для вас сложный процесс.
У каждого языка своя специализация и ниши. По мере развития или появления новых технологий. какой то язык может занимать ниши другого — это эволюция.

Упс, прошу прощения за неточность формулировки: под run-time в данном случае я подразумевал "во время выполнения" (например, у клиента в браузере) в противовес compile-time (которое у вас на рабочем месте или на сборочном сервере).

Ясно, я про железо и ОС подумал:)
Ну прилетит и что случиться? Самолёт упадёт или город без электричества останется? Нет, он нажмёт кнопку обновить браузер и дальше будет заниматься своими веб-делами:)
вот из-за таких размышлений фронтенд и находится в таком состоянии. ну подумаешь я написал нерабочий код, в крайнем случае юзер обновит страничку и всё починится…
Чей фронтэнд и в каком состоянии?))
У меня и моих знакомых всё ок.
А вот платить в 2-3 раза больше, чтобы бороться с фантомными страхами бизнес не захочет.
У меня веб клиент-банкинг работает отвратительно. Если бы я десктопный софт так писал, меня бы наверно просто побили :)
Так и живем, что сказать. И это банк, не котики какие-то. И, да, писал баг-репорты, с нулевым эффектом конечно же.
А может проблема не в JS, а в том, что в штат набирают сватьев-братьев? Или в том, что критерии приёма на работу плохо продуманы?
Это проблема мира JS. Проблема не только в самом языке но и в том как кто и что на нем пишут. Скайп вот можно еще из известного вспомнить (там тоже наверно сват-брат?). Пока был на Делфи, работало с минимальными вопросами как стал на JS + Электрон — стал глюк на глюке, просто испортили хорошую программу. Мы на рабочих чатах, которые были в Скайпе, вынуждены были на телеграм перейти, просто стало невозможно работать. Уже никаких сил терпеть это глюкало.
Боюсь, тут дело в мелкомягких, а не в языке. Впрочем, электрон — тоже так себе идея.
Это проблема Электрона и Microsoft.
Для реализации скайпа можно было найти более подходящий язык. Почему Microsoft сделала выбор в сторону не очень популярного в JS фреймворка только им известно.
НЛО прилетело и опубликовало эту надпись здесь
Но можно предположить, что для популяризации TS им надо писать что в этой тематике. Но решение конечно типично микрософтное:)

Кого их?
Не Явой единой с плюсами. Есть тот же Котлин, Скала, Груви, если речь о jvm.

Не Явой единой с плюсами. Есть тот же Котлин, Скала, Груви, если речь о jvm.

То что на JS вы напишите за день на этих языках за 2-3, при условии одинаковой квалификации программистов.

Вы сравнивали с тем же Котлином или чисто теоретически рассуждаете?
Если сравнивали — какие критерии одинаковой квалификации вы выбрали между js и jvm-based?

Kotlin и без WebAssrmbly компилируется в JS, а значит на нём уже давно можно писать фронт.
Под квалификацией имел ввиду программистов одинаково уверенно знающих свой инструмент.

Ну то есть вы считаете, что условный сеньор на Котлин пишет в 2-3 раза медленнее чем JS?

Мне сложно рассуждать о Kotline, т.к. вообще им не интересовался. Но если рассуждать логически, то будь у Kotlina какие то существенные преимущества, то он бы вытеснял JS и TS, но о таком тренде не слышал.
НЛО прилетело и опубликовало эту надпись здесь
Закон рынка говорит о том, что если язык a хочет потеснить уже устоявшийся язык b он должен предложить что то на порядок лучше. А судя по вашему описанию речь, в лучшем случае, идёт о процентах, ради которых, никто заморачиваться не будет.
НЛО прилетело и опубликовало эту надпись здесь
Вот тут хотелось бы примеров. Я не JS-хейтер и вообще не хейтер чего-бы то ни было. Но пишу на статически типизированных языках. Давно уже понял что мозги у пишущих на JS устроены как-то по-другому. Вот и хотелось бы понять КАК. Судя по сложности написанных для джаваскрипта библиотек, их устройство мозгов ничем не хуже моего. Вот и хочется в этом разобраться.
Откройте jописание стандартов ES6, ES7 и т.д. — можете даже примеры сторонних сайтов, в интернете их много. Откроете для себя другой мир:)
Простите, а можно прямо конкретной ссылкой, и желательно с комментариями?
ES6+
вот вам видео на пару часов:)
Это только то, что добавили за последние 3 года

А вы попробуйте пересесть полностью на язык с динамической типизацией лет на 5. Когда вернетесь обратно — мыслить будете уже немного по другому. Но чем дальше — тем меньше будет чувствоваться отпечаток. Это не хорошо или плохо — это естественно. Когда общаетесь на английском — тоже мыслите по другому. Потому-что язык это не только фонетика и грамматика — это целое окружение.

НЛО прилетело и опубликовало эту надпись здесь
+100500!!!
И вот тут мне кажется JS очень сильно проигрывает. Был уже опыт.
Отлов ошибок — это опыт(знание особенностей языка) + аналитические способности. Язык не так важен.
Но как верно отметил Aingis, ошибки ловят тесты и грамотно выстроенная система автоматического тестирования — это 90% гарантия спокойной жизни.
НЛО прилетело и опубликовало эту надпись здесь
Когда в языке есть несколько видов неопределенных значений, например, null, undefined, NaN, которые возвращаются случайным образом, а результаты их сравнения (==) еще более случайны, это весьма затрудняет понимание кода и поиск ошибок.

Каждое из этих значений появляется в определённых ситуациях) Для знающего человека — это облегчения анализа, а не усложнение.
В JS добавляют продвинутые возможности, но ради сохранения совместимости остается весь этот бардак, который был там с первой версии.

Бардак в старом коде, новый пишется исключительно под ES6+
Только не на фронтенде. Хочешь писать для Web: изволь использовать ровно один язык. И ладно бы язык был хорош. Людей, которые его не любят, и зачастую обоснованно, намного больше чем тех, кто его любит.

У вас будет возможность понять почему именно JS выбрали языком для фронта:)
НЛО прилетело и опубликовало эту надпись здесь
Интересно, кем и как это гарантируется? По моему многолетнему опыту, если язык или библиотека позволяют выстрелить себе в ногу, то, увы, всегда найдется непустое множество людей, которые будут ежедневно стрелять себе в ногу.

Это гарантируется требованиями работадателей. Везде требуют ES6+. То что вы в вашем сознании ассоциируется с js уже давно умерло:)
Для таких людей создаются тесты, которые отлавливают эти выстрелы.
Да и в принципе веб программирование слишком простая отрасль, что бы такие выстрелы были частыми.
В том-то и дело, что никто не выбирал и выбора никогда не было. Потому и используется.

Давайте рассуждать логически. Если был язык, который мог бы решать эту задачу на порядок лучше, то его бы уже давно внедрили в браузеры.
НЛО прилетело и опубликовало эту надпись здесь
Опыт не большой и учили меня именно новым стандартам, с legacy дела не имел, в объявлении вакансий не видел.
У вас предвзятое отношение к языку, в котором вы не разбирались. В такой ситуации все мои аргументы бесполезны — вы всё равно будете приводить притянутые за уши примеры, которыми уже давно никто не пользуется.
НЛО прилетело и опубликовало эту надпись здесь
LOL. Вы это говорите сейчас человеку, который имеет дело с Javascript с момента его создания.

В том и проблема, что тот язык, который жив в вашей памяти уже давно не используется, а операторы вроде "==" используют либо застрявшие в прошлом динозавры, либо хейтеры)
В общем, все, как я и полагал. В частности, что ни с чем, кроме JS, вы дела не имели. Поживите, посмотрите, через несколько лет поговорим.

Пишу ещё на Go, тоже хороший язык для определённых целей.
операторы вроде "==" используют

По назначению. Там, где нужен именно этот тип сравнения.

Уже много лет в JS существует рекомендация от него отказаться.
Видите ли, в чём дело: рекомендация — она для начинающих. Для тех, кто не чувствует разницы.
Человек, который реально пишет сложный проект на JS, точно знает какой оператор и почему он использует. Таких рекомендаций, которые были бы хороши всегда и везде — не бывает.
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
и использовали бенчмарки SPEC для оценки производительности Wasm по сравнению с теми же тестами на asm.js и на родном коде

Интересно, за счёт чего 429.mcf wasm обогнал нативную версию…
Скорее всего, здесь играют какие-то особенности реализации, которые делают тест не совсем честным.
Так бывает, например, на сравнении JS и Wasm, когда алгоритм вроде бы одинаков, но в JS используется Number = 64-разрядный float, а в Wasm используется i32 или i64 — результаты различаются во много раз.
НЛО прилетело и опубликовало эту надпись здесь

Будет ли wasm быстрее сервера go?

Как я понял ваш вопрос — будет ли go, скомпилированный в wasm, работать на клиенте быстрее чем такой же go на сервере? Ответ — скорее всего нет, не будет быстрее, исходя из того что go->native скорее всего лучше оптимизируется чем go->wasm->native. Но нужно проверять с конкретным сервером и клиентом, чтобы узнать насколько проиграли. И результат может сильно зависеть от браузера, т.е. от шага wasm->native.

Можно нубский вопрос?
Какой инструментарий мне стоит использовать, чтобы разрабатывать модули WASM? Но только чтобы не пришлось скачивать дцать гигов фреймворков от майкрософт?
Язык я готов для этого изучить любой, я даже текстовый WASM не обломаюсь в ручную писать. Только скажите чем компилировать.

Как вариант: Emscripten позволяет транслировать большое количество кода на C в JS, но при этом он часто не прощает Undefined Behavior, на который ПОКА забивают многие другие компиляторы (UB — это всегда плохо, так что это не баг). Emscripten — это фактически backend для LLVM + run-time, изображающий из себя API системных вызовов чего-то POSIX'ного для musl libc. Также он может использоваться для C++, вроде бы для Rust, да и много ещё, наверное, для чего.


Также есть родственный ему проект Binaryen — своего рода binutils для WASM. Можно хоть из JS генерировать WASM на ходу (если собрать Binaryen в JS или WASM с помощью Emscripten), но помни, Золушка после приблизительно тысячного WASM-модуля вкладка Chrome превращается в тыкву.


На правах рекламы: вот здесь можно почитать, как я портировал QEMU для выполнения в браузере — там и Emscripten, и Binaryen, и JIT...

Emscripten в последних версиях уже использует LLVM для wasm.

Ну, для пользователя разница, видимо, будет не сильно заметной, своя у них поддержка или из upstream LLVM (всё равно всё работало через LLVM с давних времён). Скорее, это важно для остальной экосистемы LLVM и его frontend'ов.


UPD: говорят, компилируется значительно быстрее. Надо бы посмотреть...


Правда, они либо ещё не обновили документацию, либо не переключились по умолчанию на использование upstream backend:


Emscripten can currently (July 2019) use 2 backends to generate WebAssembly: fastcomp (the asm.js backend, together with asm2wasm) and the upstream LLVM wasm backend.
Fastcomp is currently the default, but we hope to switch the default soon to the upstream backend.

Как бы пользователи компиляторов, это разработчики. Разная скорость компиляции и разного качества выходные бинарники. fastcomp это набор скриптов на python и nodejs.


To install/activate it, use one of:
         latest                  [default (llvm) backend]
         latest-fastcomp         [legacy (fastcomp) backend]

Those are equivalent to installing/activating the following:
         1.39.3
         1.39.3-fastcomp

Ну, на качество выходных бинарников ещё не смотрел. А вот со скоростью по прошлым впечатлением, действительно, было куда расти. Особенно неприятно было на относительно слабом ноутбуке (Core i3-380M и 8Gb оперативки, ага) заметить ошибку, поправить один файл и минуту ждать линковки. Если новый backend это устраняет, то это очень радует!

НЛО прилетело и опубликовало эту надпись здесь
Как уже сказали, Emscripten для C/C++. Он очень развит и много умеет, но надо иметь в виду, что он тащит много кода в виде рантайма (большая часть которого может не потребоваться) и генерирует много «клеевого» кода на JS.
Также можно попробовать Rust.
Если вам ближе TypeScript, то AssemblyScript.
НЛО прилетело и опубликовало эту надпись здесь
А можно голый WASM-модуль собрать? Как и к чему его подключать — я как бы сам разберусь.

Можно. Например, с помощью Binaryen можно собрать из "ассемблерного листинга", а можно генерировать на ходу программно. Во втором случае поддерживается не только высокоуровневый control flow (if / while / switch или что там), но и низкоуровневые передачи управления между basic block'ами, а он уже сам сделает relooping (т.е. сведёт к первому случаю, как требуется в wasm) — это пригодится, если у вас уже некое промежуточное представление, а не человекочитаемый код, который вы вручную пишете.

НЛО прилетело и опубликовало эту надпись здесь
в идеале настолько быстро, насколько позволяет имеющийся у нас процессор.


виртуальная машина, байт-код


Миссия провалена.

Байт-код приводит к затратам на старте, но не замедляет последующее выполнение.

Нет. Любой байт-код интерпретируется виртуальной машиной. Любая интерпретация кода = дополнительные тормоза.
Если нужна макс. производительность — используйте JIT-компиляцию. Но тогда теряется безопасность, если код выполняется в адресном пространстве браузера или производительность — если в отдельном.
Вы все равно никак не получите макс. безопасность, переносимость и производительность одновременно. Чем-то придется жертвовать, в случае браузеров — это однозначно производительность.
Любой байт-код интерпретируется виртуальной машиной.

Кроме того, который можно при получении сразу скомпилировать в нативный код. Насколько я помню, с WebAssembly дело обстоит именно так. Что-то вроде "write once, compile everywhere", только компиляция делается непосредственно перед запуском, но не для каждой функции отдельно (как в случае JIT-компилятора), а для всего полученного байт-кода сразу.

Я не совсем понял, это получается что WASM ускоряет только выполнение логики, а обращение к функциям браузера все равно происходит через JavaScript?
Да, все обращения из Wasm наружу (вообще все) — только через JavaScript — в сцерарии с браузером.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории