Pull to refresh

Comments 63

Хорошо, ты собираешься сесть или не являешься тобой?
UFO landed and left these words here
UFO landed and left these words here

Вы удивитесь, но именно так работают все компиляторы. Вы пишете на Си, и ваш код превращается в машинный код.

UFO landed and left these words here

Расскажите поподробнее, какой дискомфорт у вас возникает от того, что код, который вы пишите, превращается в Javascript, который понимает браузер?

Расскажите поподробнее, какой дискомфорт у вас возникает от того, что код, который вы пишите, превращается в Javascript, который понимает браузер?
какой дискомфорт? — дикий, у тех кто не знает (или не хочет знать Javascript), и пишет на «TS, Dart, C# etc для фронтенда» — само наличие «окончательного» Javascript вызывает дикий дискомфорт, так как… есть люди которые, «сволочи окаянные и подлюги» просто прямо, ну не подлецы же,… просто прямо пишут сходу на этом самом… Javascript.

Само наличие этих людей просто сносит у них (тех кто пишет на «TS, Dart, C# etc для фронтенда»)… крышу и вызывает дикий дискомфорт!

Дикий!!!

Имхо, конечно, имхо. (С)
UFO landed and left these words here
Какая вам вообще разница, во что потом превращается ваш ламповый dart/ts/что_угодно? В js, в asm.js, в wasm, в экзотический байткод, в тыкву в конце концов? Вы пишите на языке другого уровня, какое вам дело до формата, понимаемого браузером?
Вот чем принципиально затранспайленный JS отличается от собранного wasm? Вы же явно не лазите в собранный код с лупой? Вы используете (надеюсь) сорс-мапы. Какая тогда вообще разница?

Я лазжу. Правда это наброс на бейбель, но не суть.


Вчера буквально наткнулся на странное поведение (с точностью до синтаксиса):


class A extends React.Component {
    someCallbackMethod = () => {
       const result = false;
       console.log('result', result);
       return result;
    }
}

const a = new A();
a.someCallbackHandler();

и вывод в консоли

> 'result' false
> ReactComponent { ... }

Моему изумлению не было предела, когда функция возвращает не значение переменной result, а this. Пришлось лезть в сорцы, смотреть что он там накомпилил, наткнулся на эту ошибку https://github.com/babel/babel/issues/5817


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

Ну так, судя по тикету, это ж альфа 7 бабеля, чего вы ожидали? :)

А если серьезно, то, правильно, это уже проблемы компилятора, а не конечного формата, принимаемого браузером.
UFO landed and left these words here
ээээээмм…

да, нормально, абсолютно нормально

так лучше?
UFO landed and left these words here
А при чем тут вкладки и ресурсы? Все в одну кашу?

Вы как-то наивно жонглируете какими-то терминами, бэкенды, фронтенды, как будто программирование одного идеологически лучше чем программирование другого. Не все на вебе замыкается, есть десктопы, мобайлы, мейнфреймы.

Вместо того, чтобы создать нормальный язык (или юзать, скажем, Dart, Kotlin etc) в качестве основы для браузеров, мы будем babel.

Пожалуйста, пишите на дарте, вам кто-то мешает?
UFO landed and left these words here

Вкладка браузера может отжирать немыслимые ресурсы и если писать на ванильном JS, и на Typescript, и на Dart. Это зависит не от используемого языка, а от рук программиста в первую очередь.


Если вы считаете, что переход на компиляцию Dart->WASM вместо нынешнего Dart->JS, волшебным образом даст прирост производительности, то я позволю с вами не согласиться

justboris
Вкладка браузера может отжирать немыслимые ресурсы и если писать на ванильном JS, и на Typescript, и на Dart. Это зависит не от используемого языка, а от рук программиста в первую очередь.

На JS всё же труднее создавать монстров. А вот на Dart гораздо проще.
На клиент мы в данный момент грузим около 10 мегабайт сжатого кода, раньше было 5 или 6. И раньше эта цифра выглядела страшно, сейчас и подавно. Но мы тут ничего не можем сделать -продукт активно растет функционально. Разумеется, мы стремимся, чтобы отдельные куски кода грузились по требованию, но в каких-то случаях приходится подгружать весь код сразу...
То есть ребята идут на рекорд — сейчас 10, через пару лет 25, через пяток — 50-100 мегов сжатого кода придёт на их клиент. — Именно поэтому им нужен… Dart — Хотя могли с таким же успехом выбрать Java в инкарнации GWT.

Alexeyco
По поводу дискомфорта — я бы назвал это не дискомфортом, а идиотизмом. Это вынужденная мера, я понимаю. 10 дней из жизни Брендана Айка прилетели громадным ментальным страпоном нашим современникам. И снова же — я не виню его, я понимаю, что так уж вышло. Но даже с этим пониманием нельзя отрицать, что в мире JS бардак страшнейший.
Попытки внедрить «обработчики» различных языков прямо в броузер — были и неоднократно были — в виде плагинов (апплеты Java и т.п.) — но все они… провалились и сейчас довыпиливают последние остатки Flash из броузера.

Ибо — JS победил окончательно и бесповоротно на клиенте в броузере.

Не знаю, что там происходит во Wrike и что они грузят в браузер.
Зато есть демка от разработчиков Dart: https://webdev.dartlang.org/examples/ng/doc/toh-6/dashboard
Общий вес JS — 500 Кб.


Конечно, на ванильном JS могло бы быть меньше, но если вы не хотите наступать на грабли Javascript, то придется заплатить немножко большим бандлом.

Когда? Лет через 10! Сначала его нужно сделать, потом подождать смены устаревших браузеров, затем создать компиляторы для Вашего любимого языка, затем снова обкатать эти компиляторы и уже потом… Потом, это лет через 10, Вы поймете, что самое медленное и ужасное что было в вэб-разработке, а именно dom — осталось!
Вашему языку придется подстраиваться под dom. Ну и не будите же Вы писать на чистом, придется ещё подождать, пока пишущие на c# или java выучат весь вэб на отлично и даже лучше, для того чтобы зазубрить основы кривого dom, чтобы написать фраймворк, который тоже нужно обкатать. А потом скажут что все это ерунда и уже придумали что-то новое! И так было, есть и будет всегда! Поэтому совет — учитесь идти в ногу со временем и для начала — научитесь учится.
"… самое медленное и ужасное что было в вэб-разработке, а именно dom — осталось!" — Да уж. А ещё там остались HTML и CSS. Вот какая беда. Да и DOM развивается.
А вообще умиляет паталогическая нелюбовь C#(С++)-кодеров к JavaScript, и не имеющих понятия об интерфейсах DOM, а также о том, что HTML, CSS, JavaScript и DOM — это единое целое…
Настолько же единое, на сколько v8 един с ОС. Интерфейсы dom? Вы о чем?
«Интерфейсы dom? Вы о чем? » — https://developer.mozilla.org/ru/docs/Web/Reference/API
Не ожидал знаете-ли такого вопроса. И причём здесь ОС? Браузеры на движке V8 могут работать в разных операционных системах, а операционные системы и не знают о V8. А что такое JavaScript без DOM, HTML и CSS? И зачем DOM без JavaScript, HTML и CSS?
UFO landed and left these words here
Зачем такой умозрительный подход? Я понимаю, что Вам чем-то сильно насолил фронтенд, но ради этого оставить клиента, а значит и его пользователя без браузера, это уж чересчур. Да и разработчики браузеров не поймут
UFO landed and left these words here
UFO landed and left these words here
Да бросьте, я по таким пустякам не злюсь, и с вами я просто в корне не согласен, и это прекрасно, и только поднимает настроение :)
UFO landed and left these words here
Вы какой-то совсем поехавший :)
Ладно уж, на этом разойдемся
UFO landed and left these words here
Не так страшен бекендщик, который пришел во фронтенд
Уж поверьте, еще как страшен. Как слон в посудной лавке. И кончается это все в 99% случаев истериками «ой все, идите вы со своим жабаскриптом в *». Проходили, изучали.

Из реального опыта
Идиотов полно, на всех стеках.

мы не понимаем, как могут одновременно существовать два стандарта JS
Стандарт один — ECMA. Версий языка по этому стандарту несколько. Вас же не удивляяет, что в природе есть одновременно и Java 7, и Java 8?

и самое страшное — coffeescript.
Ну классика жанра просто. Наитипичнейшая классика.

Когда мне нужно перевести с английского на русский, я не перевожу сначала с английского на суахили, а с него на русский.
Пример что-то совсем корявенький.
Если вы пишете на английском и вас это устраивает — пожалуйста, пишите на английском. Хотите на чем-нибудь, для чего нет прямого перевода на русский — отлично, пишите тоже, только с перегоном через английский. Все же просто.

UFO landed and left these words here
Вы какой-то странный. Вы вот на чем пишите, на go вроде? Вот представьте, что можете запустить свой go в браузере, но использовать нужно — о боже, какой ужас — транспайлер. Что, вам ваши моральные устои все-таки не дадут пользоваться любимым языком для решения задач?

Или вы не задачи решаете, а в технологии копаетесь?
UFO landed and left these words here
А при чем тут php? У вас php в браузере работает?
Если Вы что-то не понимаете, то говорите конкретно ТОЛЬКО за себя. Неужели Вы думает что можете вот так с пол пинка за пару дней выучить api для работы с дом деревом, api svg, api canvas, api file system, событийную модель, работу gui, архитектуру gui, клиентсукую архитектуру, webgl, чтобы потом взять и написать фраймвор, который будет компилироваться с вашего языка в wasm? Или Выдумаете что сможете с помощью wasm написать фраймворк, который будет работать быстрее чем v8 от гугла, который десятилетие сотни человек пишут? Да фиг Вам! Поэтому прежде чем говорить что js фигня, скорее бы wasm, то подумайте, что вам-то от этого будет!

И лично Вы доказываете что Только Вы не можете вникнуть в клиентскую часть из-за того что препроцессоры Вам мешают. А если бы Вы были капельку осведомлены, то не говорили бы такую ерунду, ведь препроцессоры в клиентскую часть пришли из ruby, который тоже серверсайд. Поэтому в все проблемы только у Вас и у тех кто так же как и Вы не может привыкнуть к новым воротам. Это без обид, мне самому иногда сложно с чем-то мирится, но я стараюсь искать причины в себе.
UFO landed and left these words here
А можете уточнить, что именно я
ы выдумываете в голове какие-то мои фразы, а потом мне на них отвечаете

ВЫДУМАЛ?
UFO landed and left these words here
Это я к тому, что в посте, к которому Вы написали коммент, было всего одно упоминание о так называемых бакэндщиках —
придется ещё подождать, пока пишущие на c# или java выучат весь вэб на отлично и даже лучше, для того чтобы зазубрить основы кривого dom

На что Вы пишите —
Когда пишут про то, что бекендеры чего-то там не понимают.

И начиная со второго предложения первого абзаца я объяснил что именно имел ввиду.

Поэтому после заявлений что я пишу на убогом стеке технологий, я могу сказать лишь одно — а на каком Вы, не убогом, пишите gui? И какой по Вашему мнению лучший язык для серверного кода?
UFO landed and left these words here
Думается, что криворуких бекендщиков как и аналогичных фронтендов (это Ваши названия) поровну в Web-разработке. А доводить отношения между собой до прямого антагонизма — это наверное наша национальная специфика. Что касается всех этих webassembly, babel etc и проч — это не более чем текущие заморочки. То что стандарт JS меняется, как меняются и DOM, и HTML, и CSS, это означает лишь что Web — живой, и продолжает жить. Вам разве это не нравится? Кто-то из архитекторов говорил о Нью-Йорке, что его архитектура это катастрофа, но катастрофа красивая. Наверное это же можно сказать и современном Web.
UFO landed and left these words here

Стоит заметить, что Webpack тоже не стоит на месте. Во 2й версии появилась нативная поддержка import деклараций, без Babel, и соответственно, tree-shaking оптимизация


А в 3й версии (да-да вышла на этой неделе), появился ModuleConcatenatioPlugin, делающий то же самое, что и Rollup. Почитать можно в официальном release post:
https://medium.com/webpack/webpack-3-official-release-15fd2dd8f07b

Короче походу сейчас проще со старичком maven, что для сборки java разобраться, чем с современной сборкой js. Прескорбно очень. Кучи настроек и файлов, чтобы просто проект начать… Капец… Сам страдаю, если что) в java правда на Градо перешел, так что полегче стало. Но js капец… Такое ощущение, что вообще не смотрят на какие грабли уже натыкались в старых топовых языках

А на какие грабли уже натыкались в топовых языках?

Так используйте всякие cli или репозитории-стартеры. Это как аналог архетипов в мавене. Если проект большой и сложный, конфиг будет сложный везде: как в мавене, так и в js-мире. Для небольших проектов готовые решения вполне подойдут.

UFO landed and left these words here

А чего дурацкого в задаче по конвертации кода в совместимый с более старыми интерпретаторами?


Для Java, например, есть Retrolambda, чтобы фишки Java 8 в более старых версиях работали.

UFO landed and left these words here

При чем тут русский, при чем тут суахили? Цитирую:


а в мире js под сборкой понимается пляска с бубнами и вызов Ктулху, чтобы превратить один es в другой es

Процесс довольно однозначный, переводим ES6 -> ES5, где тут танцы?

Да и то с развитием браузеров переводим все меньше.
UFO landed and left these words here

А то в Яве не используют кодогенераторы.

В чем-то вы правы, в мире браузеров исторически сложившийся бардак и несовместимость. В основном это вина нежестких стандартов w3c/ecma, откуда проистекает несовместимость в разных движках и конечно любимой Майкрософт, которая хочет как лучше, а получается как всегда. Кроме этого бурное развитие всего во фронт-энде дополняет кошмар.

НО.

Если разобраться по сути, то окружение Джавы, С# и JS не так уж принципиально отличаются. В Java и С# существует Виртуальная машина, её ассемблер/intermediate language (e.g. MSIL) и JIT компиляция. В JS тоже самое. Браузер с его V8 или другим движком это собственно та же виртуалка, её ассемблер/IL это и есть тот самый JS, а проблема совместимости версий существует из-за необходимости поддержки старых браузеров (привет Майкрософту). И транспиляторы компилируют код из разных языков в JS так же как компиляторы из Java/Scala/C#/VB в код их виртуалок. А далее за дело берется JIT, который существует во всех них. И то, что код VM не читабелен, а код JS да, принципиального рояля не играет.
Тоже можно сказать и про инструменты сборки проектов. У Java есть Maven/Gradle, у C# — MSBuild у JS много всего на выбор. Часть умирает, часть выживает.

И так практически по всем пунктам. Со временем поутихнет развитие и останутся проверенные временем решения. Уйдут в небытие старые несовместимые браузеры, ужесточатся стандарты, надают по шее Майкрософту. На смену (или в дополнение) интерпретируемому JS придет нормальный IL, например webasm. Напишут компиляторы с разных языков и будет всем счастье. Устаканятся фреймворки. Может кто и до реализации WPF дойдёт (Я его реально люблю). Возможно и с CSS layout что нибудь нормальное сделают (хотя в это мне намного меньше верится, чем в победу разума над JS)

Чисто для инфы, я работал на клиенте, когда серверов (в нынешнем понимании) ещё не существовало, работал на сервере и сейчас пишу на всяческом фронт-энде. Просто в большинстве знаю эту кухню и весь кошмар не по-наслышке. И, если честно, не смотря на все его недостатки, мне нравится JS.
UFO landed and left these words here

Да уж, еще один инструмент который стал не актуален (с релизом новой версии webpack) быстрее чем о нем перевели статью на хабре)

Alexeyco
Ну так es6 уже вовсю движется в правильном направлении. ООП более-менее стало приходить в норму.


ООП в ES6 не изменилось ни на йоту по сравнению с ООП в ES5.

Когда-нибудь люди это поймут и начнут уже писать на js

Sign up to leave a comment.

Articles