этом продолжить заниматься веб-разработкой? Я сам javascript/typescript full-stack веб-разработчик и пишу сайты или точнее динамические spa-приложения (которые помимо работы в браузере могут быть упакованы в мобильные приложения через cordova или десктоп-приложения через electron) и появилось желание переключится на с++ посему возникли вопросы:
1) Как много народу пишут бэкенд на плюсах, много ли вакансий?
2) Как много народу которые пишут фронтенд на плюсах? Поскольку в браузерах уже несколько лет как появился webassembly а язык с++ умеет компилироваться него то я не вижу никаких преград к тому чтобы писать сайты или сложные динамические spa-приложения которые будут работать в браузерах точно так же это делают на javasscript.
3) Как много народу пишут мобильные и десктопные кросс-платформенные приложения на плюсах? В javascript-индустрии популярна разработка мобильных приложений c использованием cordova (враппер поверх webview для anroid и ios) и десктопных приложений с помощью еlectron (враппер поверх webview для windows/linux/ios). А webview это по сути контент-часть браузера которая предоставляет апи для написания ui/gui интерфейсов и написав один раз код для webview оно будет одинаково выглядеть и работать на всех платформах. Можно сказать что webview это некая кросс-платформенная gui-библиотека которая предоставляет апи для создания html-элементов/виджетов (которые стилизуются установкой css-стилей) с помощью которой разработчик может написать фронтенд/ui-приложение для работы не только в браузерах но и под все мобильные и все десктопные операционные системы.
Как с этим обстоит дела в плюсах? Поскольку сами браузеры написаны на плюсах то это значит что их webview уже предоставляет готовое с++ апи которое можно вызывать напрямую (без javascript) и соотвественно нет никаких преград к тому чтобы пилить кросс-платформенные приложения на html/css используя с++ (точно так же как как это делают на javascript)
1) 2) 3)
Бэк как правило пишут на java(Spring\JavaEE), EcmaScript (nodejs) или php А зачем вам так заморачиваться с C++ ?
вебассембли и плюсы в фронтенде это возможно будущее, но пока я не слышал особой популярности(никто ещё не успел попробовать мб)
поддерживаю - оно пока что очень сырое и про этот способ нужно думать только если есть очень веские причины
Если вкратце то мне надоело возиться с различными нюансами джаваскрипта которые влияют на производительность и которые должен знать сениор javascript-разработчик. Вот пример подобных статей и нюансов https://habr.com/ru/post/350018 https://habr.com/ru/company/ruvds/blog/350240 https://habr.com/ru/post/303542 В с++ с этим на порядки проще - предсказуемая модель работы и расположение объектов в памяти, отсутствие оверхеда (хедеров у объектов) ну и главное - отсутствие GC. Ну а с последними стандартами плюсов начиная с замыканий в с++14 заканчивая корутинами в с++20 по удобству и возможностям плюсы теперь стали не хуже чем тот же джаваскрипт
ну между джабаскриптом и крестами есть еще выбор - зачем сразу кресты то
Богдан, вы глубоко копаете 😊👍 Но, все дело в том, что мы всегда чем то платим за удобства. Например, скорость разработки программ и их сопровождение. А быстродействие JS я бы оставил на откуп разработчикам движка и искал бы алгоритмические и архитектурные проблемы. Возможно, там есть узкие места. Если все возможности исчерпаны, то можно подумать о том чтобы написать куски кода на Asm\С\С++ и вызывать этот код из языка более высокого уровня. Такие механизмы есть практически в любых языках.
Я просто хочу заниматься full-stack разработкой (писать фронтенд в виде сайтов/приложений для браузеров, мобилок и десктопов а также бэкенд для их работы и даже high-load backend на случай взлета стартапа) на одом и и том же языке. Потому что зачем выбирать один язык для фронтенда а другой язык для бэкенда а третий язык для мобильной/десткопной версии приложения? Чтобы испытывать постоянное переключение контекста и дисонанс из-за разного ситаксиса, код-стайла различных подходов и разной экостистемы? Чтобы в три раза раза больше времени тратить на подучивание новых версий языков и различных нюансов и языковых особенностей? В общем смысла в постоянном переключении между языками нет и до появления поддержки webassembly в браузерах единственным таким full-stack языком на котором можно было писать не только сайты но desktop/mobile приложения и бэкенд был javascript а с появлением webassembly теперь можно выбирать между другими языками. И если сравнить популярность и количество разработчиков а также возможности языка то с++ тут вне конкуренции. А благодаря отсутствию GC на с++ еще можно писать high-load сервера и базы данных и альтернативой ему среди других языков может быть разве что только rust который местами непонятно переусложнен (я так и не разобрался как на нем написать двухсвязный список) и он на порядки менее популярен и на нем намного меньше разработчиков (язык си как подможество c++ преподают в школах и вузах что подразумевает миллионы потенциальных разработчиков а про раст я такого не слышал) ну и наконец на расте на порядки меньшая экосистема и написанного софта чем на c/c++.
в раст просто встроят внутрь языка двусвязный список и им нужно будет пользоваться под unsafe ))
Шутки шутками, а сколько раз тебе пригождался неинтрузивный двусвязный список на проде?
ну недавно на корутинах делал, правда односвязный... Но ситуация когда есть те самые ссылки на что то и это совершенно нормально в С++ и ошибка в расте - постоянно
Односвязный и интрузивный, а я задал вполне конкретный вопрос)
0, вообще написать интрузивныц двусвязный проще чем односвязным, каждую ноду циклишь на себя, и dummy хранишь в списке, красота же С односвязным же начинаются проверки на null :(
Односвязный кольцевой, разве нет?)
Вы когда что-то хотите переписать на плюсы - вам нужно очень очень очень хорошо подумать
Пощупайте qt под wasm. Сразу поймёте надо оно вам или нет.
Оба просты, непростость возникает в хранении size/back.
Я вас понимаю ) Во-первых, с языками и технологиями во многом сложилось исторически. Во-вторых, вы представляете себе front написанный на C++ ? ))) Написать то можно, но кто потом этот код будет поддерживать ? Например, Java была придумана не просто так ) Решались вопросы переносимости, упрощения и скорости разработки, безопасности и др. Люди хотят думать о предметной области больше, нежели об управлении памятью. То есть, я хочу сказать, что бизнес-логика как правило пишется на более подходящем для этого языке с необходимым уровнем абстракции. А низкоуровневые вещи пишутся на С\С++ и заворачиваются в удобные обертки и предоставляется интерфейс наружу. Я не хочу думать о выделении\освобождении памяти, примитивах синхронизации и тд и тп. Другими словами, язык как выразительно средство должен помогать мне в реализации задач, а не заставлять меня думать о том как мне не получить спагетти код на выходе.
Ну я не утверждал что сложные, утверждал что один проще и красивее
А чем с++ плох для написания бизнес-логики или фронта или логики какой-то предметной области? Я честно не понимаю какой смысл мне как с++ программисту юзать какой-то там скриптовый язык со своим синтаксисом чтобы писать какую-то там "важную бизнес-логику" ? Аргумет про "не думать про ручное управления памяти" не уместен потому что всегда будет некий слой с которым будет работать разработчик бизнес-логики и этот слой будет автоматически заниматься управлением памяти (через тот же shared_ptr или другие средства) и другими задачами. Ок, пожалуй синтаксис "user->profile->firstName" в плюсах менее удобен чем "user.profile.firstName" как в javascript но это мизерный недостаток а в остальном есть те же условия, циклы, объекты, классы, лябда-функции, замыкания, корутины - в общем если собрать все возможности последних стандартов вроде с++20 и с++23 то я не уверен что можно будет найти какую-то фичу которая есть у популярных скриптовых языках для написания "бизнес-логики" и которой нет или нельзя реализовать в с++ (кстати может кто-то подскажет чего еще не хватает в плюсах?)
а с какими еще технологиями и насколько глубокий вы имеете опыт?
Имхо, здесь проблема плюсов не в том, чего у них нет, а в том, что они оставляют слишком большой простор для "пострадать на ровном месте", "увязнуть в споре о трактовках стандарта" и... просто для различного оверинжиниринга Кроме того, сам факт наличия неопределенного поведения не способствует написанию бизнес-логики. Лучше исключение, чем краш или форматирование диска И в любом случае, я бы предпочел специализированный язык разметки вместо general purpose language даже вне контекста плюсов
На мой взгляд, удачный альянс предлагает Qt: - Система сигнал/слотов - реактивность - QML - декларативный UI - JS/Property Binding- презентационная логика - С++ - бизнес логика Скорость разработки UI, верифицируемость бизнес-логики выше всяких похвал
А зачем мне Qt если есть более распространенная и производительная кросс-платформенная библиотека для построения gui которая прекрасно работает на windows/linux/macos/android/ios и называется она Blink и является редер-движком браузера хрома и предоставляет c++ апи для построения дерева html-виджетов (и их стилизации через css-свойства). Главным отличием Blink от Qt является то что написав gui приложение на с++ поверх blink я дальше могу скомпилировать это приложение в webassembly и выбросить эту жирную библиотеку blink заменив вызовы ее апи на вызовы dom-api через js (которые являются идентичными с++ апи) и получить по сути работающее в браузере сайт-проложение которое будет рендерить gui через html/css и будет занимать сравнимый с javascript объем при загрузки страницы (а может быть и меньше так как webassembly будет компактнее чем js). А как Qt-приложение будет работать в браузере и сколько мегабайт нужно будет загрузить юзеру при заходе на сайт?
В плюсах много чего не хватает *Ждун Freestanding*
я же просил - с продолжением вот сюда: https://t.me/fludpac
С точки зрения поддержки будущей. Заказчику пох на Вас персонально,важна лишь стабильность продуктв. Срр кодеров, у кого руки ровно растут,все меньше и меньше)
ИМХО, на плюсах не стоит писать просто потому что захотелось, надо на все 100% понимать почему именно плюсы, если реально веских причин нет, то я бы советовал выбрать более современный и безопасный язык
Так можно про любой язык сказать. Язык ведь выбирается под задачу, а не наоборот
Обсуждают сегодня