Cat
т.к. сама по себе компиляция в васм не будет влиять на порог входа, если у вас уже есть готовый пайплайн
Roman
это очень сложный вопрос, думаю утром профессионалы с++ и js проснутся и ответят более точно но вообще, если вы не знаете ни с++, ни раста, то у с++ порог будет меньше, но раст будет выигрывать на дистанции
я имею опыт с C++, правда сейчас конкретно на нём не работаю. с Rust'ом опыта нет ещё вообще, но, не смотря на убогость его синтаксиса, "compile-time гарантия отсутствия проблем с памятью, синхронизацией и т.д." звучит заманчиво учитывая сколько времени я убил на устранение багов связанных с неправильной работой с памятью
Cat
> убогость его синтаксиса а вы точно имеете опыт с с++?
Cat
это больше риторический вопрос
Roman
> убогость его синтаксиса а вы точно имеете опыт с с++?
имею опыт с C++11 давний, но сейчас работаю на Go и JS, в плане синтаксиса обожаю Go, C++ конечно далеко не сказка
Cat
имею опыт с C++11 давний, но сейчас работаю на Go и JS, в плане синтаксиса обожаю Go, C++ конечно далеко не сказка
сложно сказать. мне с с++03 было сложно переходить на раст больше не из-за синтаксиса, а из-за концепций
Alexander
Достаточно покопаться в нём неделю, чтобы понять, что оно да, решено, но не так, как создаётся впечатление, что решено и забыли, а немного другой ценой.
Alexander
ну в том, что это не C++, где просто всё проблемное магическим образом исчезло.
Cat
ну в том, что это не C++, где просто всё проблемное магическим образом исчезло.
естественно, в языке с доступом к памяти "решено и забыли" не бывает
Cat
тем более кейс специфичный, > учитывая сколько времени я убил на устранение багов связанных с неправильной работой с памятью
Cat
о Расте же :)
если честно, тоже не очень понимаю
Roman
ну я так понял мы говорим о compile-time guarantees
Cat
@Romshark, а вы в васме тоже хотите работать с памятью?
Roman
@Romshark, а вы в васме тоже хотите работать с памятью?
как можно что-либо написать не работая с памятью?)
Cat
ну я так понял мы говорим о compile-time guarantees
насколько я понял, Александр пытается намекнуть, что compile time garantees достигаются путём того, что приходится делать разные вещи немного по-другому, нежели в с++
Alexander
ну сорян, может как-то криво выразился. я хотел сказать, что почему-то многие думают, что такие вещи как "безопасность" в расте берутся из ниоткуда и на нём можно писать как на плюсах, но нет, чтобы на расте писать, надо вкурить концепцию, благодаря которой это всё и соблюдается, а она очень мешает писать так, как привыкли многие в других языках. ещё раз сорян за корявое описание.
Cat
как можно что-либо написать не работая с памятью?)
можно работать с памятью безопасно, и не натыкаться на проблемы, которые решает раст
Roman
можно работать с памятью безопасно, и не натыкаться на проблемы, которые решает раст
можно, даже в любом языке. Но когда работаешь над большой кодовой базой и ещё и не один, то гибкость языка может превратиться в ночной кошмар
Roman
когда несколько потоков одновременно работают с shared state'ом и компилятор молча сиё дело пропускает то это дико опасно и дорого обойдётся
Roman
а как раст спасёт от "ночного кошмара большой кодовой" базы?
большей строгостью о том, где какая память откуда и когда пишется/читается, не?
Roman
а васм умеет в несколько потоков? я просто не шарю
пока ещё нет, но думаю это вопрос времени
Cat
я думаю это вопрос бесконечного потенциала
Cat
большей строгостью о том, где какая память откуда и когда пишется/читается, не?
зависит от того, что вы вкладываете в "ночной кошмар" если это работа с шаред стейтом, то да, раст зафорсит вас писать везде lock() и прочее
Cat
всмсл?
а подскажите ещё (тоже не шарю), wasm исполняется отдельным рантаймом? или тем же JS-овским?
Cat
если второе, то это нужно идти к js-никам и спрашивать, когда им завезут многопоточность
Cat
(ставлю на то, что через несколько лет) (моё авторитетное мнение никому не сдалось)
Roman
а подскажите ещё (тоже не шарю), wasm исполняется отдельным рантаймом? или тем же JS-овским?
WASM исполняется внутри JS движка браузера, это по сути виртуальный CPU, со своим instruction set'ом. Т.е. это обеспечивает безопасность и представляет собой compile target который очень близок к CPU
Roman
если второе, то это нужно идти к js-никам и спрашивать, когда им завезут многопоточность
им уже давно завезли многопоточность к качестве WebWorker'ов, правда shared state'а у них, естественно, нет. Только asynchronous message passing
Alexander
Я что-то бенчил wasm от нечего делать, и что-то даже не близко к cpu было. Просто для коммента.
Cat
в общем, мне кажется вы решаете несуществующую проблему
Cat
но, если решите присоединиться к рустовому сообществу, будем рады помочь и разобравться в концепциях
Roman
в общем, мне кажется вы решаете несуществующую проблему
проблема существует и называется она JavaScript. garbage collection, dynamic typing.... всё это может и подходит для сайтиков, но вот для систем и приложений уже не совсем.
Cat
я бы сказал "для систем и приложений не нужно использовать wasm/js", но сдержусь
Alexander
я бы сказал "для систем и приложений не нужно использовать wasm/js", но сдержусь
+1. К тому же не пойму про dyn-types каким они боком к типу приложения.
Alexander
Си со слабой типизацией не сильно лучше динамического языка, однако системный.
Roman
я бы сказал "для систем и приложений не нужно использовать wasm/js", но сдержусь
я изначально пришёл из мира C++ Qt, где есть просто великолепный фреймворк Qt Quick со своим языком написания UI - QML. Когда я перешёл на веб HTML/CSS/JS оказался катастрофой. Веб сам по себе это более 50% рынка и за ним будущее, он убьёт app store'ы, в браузеры переместится весь софт, включая 3Д игры и подобное, с лишь небольшими исключениями, но вот HTML/CSS для написания современных динамичных приложений совершенно не годится, но это отдельная тема. Поэтому я задался вопросом, лично для себя, попробовать написать небольшой SceneGraph на WASM и WebGL, простенький тупенький MVP. WASM по той причине что JS для этого абсолютно не годится, это не systems programming language и он слишком прожорлив чтоб писать на нём рендеринг движок. Просто составить граф мета объектов со свойствами и биндингами и вывести их на экран.
Roman
и тут буквально на днях я услышал, что мол одних из самых популярных языков для WASM'а сейчас это Rust, глянул несколько детальных презентаций и заинтересовался, хотя изначально хотел писать всё это на C++
Roman
Go, на котором я сейчас реализую GraphQL API'шки, т.е. бэкэнд приложений, для этого к сожалению тоже не подходит, даже не смотря на то что компилятор Go в скором сможет компилить WASM. Garbage collection и graphics engine просто не подружатся
Cat
Сложно сказать, у меня нет опыта на wasm, поэтому не могу сказать точнее Если вы интересуетесь именно производительностью кода rust vs c++, то она сравнимая (читай: одинаковая) нужно дождаться пока проснуться те, кто бенчмаркал wasm код, и скажут более подробно Ну и насчет самой идеи, можете считать меня ретроградом, но по моему (никому не нужному) мнению игры не уйдут в веб, по крайней мере пока все js программисты не перейдут на что-то адаптированное для (хотя бы) многопоточных вычислений
Cat
Тем не менее, если очень хочется wasm, раст должен неплохо себя показать как замена c++ Кривая входа конечно будет покруче, но все изучаемо
Roman
Сложно сказать, у меня нет опыта на wasm, поэтому не могу сказать точнее Если вы интересуетесь именно производительностью кода rust vs c++, то она сравнимая (читай: одинаковая) нужно дождаться пока проснуться те, кто бенчмаркал wasm код, и скажут более подробно Ну и насчет самой идеи, можете считать меня ретроградом, но по моему (никому не нужному) мнению игры не уйдут в веб, по крайней мере пока все js программисты не перейдут на что-то адаптированное для (хотя бы) многопоточных вычислений
никто не будет писать 3д игры на JS, это нонсенс, для этого и появился WASM, это среда напоминающая виртуальный процессор, без garbage collection, с (как обещают разработчики браузеров) 5% overhead'ом по сравнению с кодом, компилированным на x86 5% это вполне приемлимо, учитывая уровень безопасности который мы получаем от sandbox'а браузера. В будущем приложения не будут устанавливаться из app store'ов, достаточно будет зайти на URL, подождать загрузки приложения в cache если загружаем первый раз и вуаля..
Roman
это впервые позволит писать абсолютно cross platform'енные приложения с идеалогией "write once - run everywhere", которые по производительности сопостовимы с нативными. пишешь 1 приложения, пользуешься на абсолютно любом стационарном или мобильном девайсе
Roman
https://caniuse.com/#search=WASM уже поддерживается в основных браузерах таких как Edge, Chrome, Firefox, Safari
Alexander
та ну, какие 5%, wasm не везде даже js обгоняет
Cat
та ну, какие 5%, wasm не везде даже js обгоняет
Тут главное иметь самые актуальные данные, тк ускоряется он довольно быстро
Alexander
+ GC не помеха UI. если электрон приехал на десктопы уже
Ivan
> В будущем приложения не будут устанавливаться из app store'ов, достаточно будет зайти на URL, подождать загрузки приложения в cache если загружаем первый раз и вуаля.. такое себе будущее, этакая смесь киберпанка с "навозными веками" =)
Roman
та ну, какие 5%, wasm не везде даже js обгоняет
технология молодая, поживём - увидим. Ещё даже потоки не завезли, но вроде как обещают. Однако тот факт что основные браузеры сию инициативу подхватили уже обо многом говорит.
Ivan
write once - run everywhereгде-то мы это уже слышали... точно! в прошлый раз они назвали это "Java"
Roman
+ GC не помеха UI. если электрон приехал на десктопы уже
мы говорим не про логику UI, а про graphics & layout engine, а тут GC stop-the-world может отрицательно сказаться на UX. Даже малейшие паузы могут привести к микро-лагам и потерянным кадрам, а это некрасиво особенно в 2018 году.
Cat
Руст вроде тоже пытается придерживаться этого слогана
Но тут про ffi в первую очередь конеш https://blog.rust-lang.org/2015/04/24/Rust-Once-Run-Everywhere.html
Ivan
50% рынка - веб - очень смелое утверждение
Ivan
"веб" - это самая верхушечка айсберга
Roman
write once - run everywhereгде-то мы это уже слышали... точно! в прошлый раз они назвали это "Java"
Да, вот только в браузере Java не запустится (без плагинов разумеется). Qt тоже прекрасная вещь, но в браузере она не работает. Но именно браузер сейчас является самый главной платформой.
Ivan
под водой у неё тонны системного софта, тонны железа, очень сложная инфраструктура
Ivan
а ещё был, прости хоспаде, ActiveX
Ivan
ну и Silverlight
Ivan
а флеш даже ещё шевелится местами
Ivan
в общем не в первый раз у нас впереди светлое (нет) будущее с переносом всего в веб
Roman
На самом деле уже лет 5 обещают подобное будущее, электрон конеш пинает натив, но какими средствами
Пока мы не перейдём с HTML/CSS/JS на что-то более подходящее, для написания приложений - ситуация не изменится. HTML/CSS изначально создавался как язык описания статичных документов. То что его сейчас используют для динамики, просто извращение, я сам сейчас этим занимаюсь но никакого удовольствия это не приносит, одни боли. Следственно, если веб как среда улучшится, а к этому всё и идёт - больше приложений будут переходить в браузер по причине меньшего порога доступа к клиенту.
Alexander
ну да, я согласен, что отличия апплетов от wasm что-то не сильно заметны. кстати апплетам тоже прочили именно игры в браузере.