LINUX.ORG.RU

Посоветуйте асинхронный бэкенд

 , , ,


2

7

Пишу в dev, а не web-dev потому, что C++ и другие якобы «не вэб языки» здесь в тему.

Буду в одиночку пилить сайт для определённых задач (не на заказ). Бэк, фронт, деплой, сопровождение, бизнес-специфичные занятия - всё своими руками и головой.

Есть некоторый опыт и хорошие впечатления от Django.

Нужны:

  • Хорошая производительность
  • Асинхронщина для любого IO а-ля нода
  • Выразительный ЯП со СТАТИЧЕСКОЙ типизацией
  • Хорошая документация и немаленькое сообщество (не просто API Reference, а ещё и Tutorials) и чтобы фреймворко-специфичные проблемы легко гуглились
  • Много батареек, как в джанге, обязательна ORM
  • И REST API, и Server Side Rendering // решил отказаться
  • Всякие Light, zero-dependency и embedded мне безразличны // но рассматривались тоже
  • Удобная работа с WebSocket // да, этот пункт я дописал гораздо позже

Лучше советовать не «язык Х» а «язык Х + фреймворк Y».

Также меня царь образумил в том смысле, чтобы делать SPA вместо server side rendering. Ведь перерисовывать ВСЁ по нажатию кнопки - это же антипаттерн отзывчивого интерфейса. Плюс везде, где можно заменю http на websocket - вместо целой страницы по тормозному хттп всего лишь небольшой json по шустрому вебсокету - это сильная разгрузка bottleneck’а на клиенте - обмен данными по сети.

Плюс можно реализовать свою логику на время ожидания ответа от сервера - хоть надпись «подождите», хоть прогрессбар, хоть что угодно, что вписывается в «домохозяйка видит плавный интерфейс».

UPD Решил брать NestJS + React + MobX. Если по ходу дела откажусь, то буду рассматривать Dart + Flutter, Scala + Play, Java/Kotlin + Spring/Boot.

В будущем обязательно поэксперементирую и запилю сайт крупнее хелловорлда на C++ и Rust и поделюсь с вами впечатлениями.



Последнее исправление: arturianec100 (всего исправлений: 5)
Ответ на: комментарий от intelfx

Вынужден не согласиться – эти хотя бы понимают зачем в языке выразительность (пусть и методы у них странные).

mersinvald ★★★★★
()
Ответ на: комментарий от arturianec100

Ну всё, видишь, тебя ждёт весёлое написание на крестах расширений ноды и клон jQuery на C++, который ты будешь пересобирать каждый раз (по 60 раз в час) в прекрасный и быстрый статически типизированный wasm

Твой клон сможет даже создавать статически типизированные алерты, при клике на вертящуюся картинку танка с тян в шлеме

menangen ★★★★★
()
Ответ на: комментарий от menangen

Но он хочет их ручками писать.

Даже в плюсах уже кое-какой вывод типов есть, так что ручками далеко не всё надо писать.

Miguel ★★★★★
()
Ответ на: комментарий от intelfx

Работодатели с зарплатами под 300 штук так не считают. Очень любят гошников

menangen ★★★★★
()
Ответ на: комментарий от Miguel

Да это всё калька с D, пока auto не стала яркой фичей в D - никто и не чесался в стандарт c++ внедрять, и то, очень во многих компаниях пишут на старье, никаких тебе c++17

menangen ★★★★★
()
Последнее исправление: menangen (всего исправлений: 1)
Ответ на: комментарий от Miguel

Он на сборку своего чудо проекта в общей сложности потратит недели, пока C++ соберётся - приложение на node.js уже отработает

menangen ★★★★★
()
Ответ на: комментарий от menangen

Современный С++ и «дёргать библиотеку из других ЯП» - вещи взаимоисключающие. В других ЯП не реализованы плюсовые шаблоны (кроме D), поэтому часто крестами называют куцый огрызок, где большинство фич смыто в унитаз.

arturianec100
() автор топика
Ответ на: комментарий от mersinvald

Выразительность это для академиков важно. А работодателю нужны винтики. Поэтому чем топорнее, тем успешнее. ПХП, Го это оно. Жаваскрипт тоже думали топорный, но слегка просчитались.

bread
()
Ответ на: комментарий от arturianec100

Так ты в своей библиотеке всю логику и пиши. А из скрипта её стартуй/дергай, в чём проблема 90% своего кода написать под ноду на C++ 17, а рулить им из js/ts?

menangen ★★★★★
()
Последнее исправление: menangen (всего исправлений: 1)
Ответ на: комментарий от Miguel

C++ уже тогда был в отстающих

Ну и замечательно. И что с того?

Всё отлично, за исключением того, что куча фирм свои веб поделия на крестах переводят на гоу, по крайней мере в америке, зачастую, разрабатывая их с нуля, то есть бегут с крестов

menangen ★★★★★
()
Ответ на: комментарий от mersinvald

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

menangen ★★★★★
()
Ответ на: комментарий от arturianec100

Да, и будешь этот правильный код часами канпелировать. Впрочем, это не только про кресты. Вон разработчик одного микрофреймворка на Crystal гордо заявил, что полчаса компилирует свое поделие. Потому что полный вывод типов и AST макросы в полный рост. Удобненько. А на самом деле это же имитация динамики. Один в один вплоть до duck typing. Ну да, компилятор проверяет всё. Но какой ценой.

bread
()
Последнее исправление: bread (всего исправлений: 1)
Ответ на: комментарий от arturianec100

А ты не думал, что шаблоны в определённом смысле антипаттерн. Они то гибкие, но не без ведра дерьма

menangen ★★★★★
()
Ответ на: комментарий от arturianec100

Нормальных дженериков в плюсах как не было, так и нет, и, видимо, не будет. Шаблоны, конечно, немножко помогают, но именно что немножко.

Miguel ★★★★★
()
Ответ на: комментарий от menangen

Легаси на любом ЯП - это боль. Чуть ли не все проблемы крестов - из-за легаси. Если бы они мигрировали с легаси крестов на современные кресты или очень близкое к го подмножество - писать было бы также легко и приятно.

arturianec100
() автор топика
Ответ на: комментарий от menangen

Для современных крестов шаблоны - это как дышать воздухом. Для легаси крестов шаблоны - это скрещивать ежа с ужом.

arturianec100
() автор топика
Ответ на: комментарий от Miguel

Ага. Но ты не понял намёк на llvm. Что котлин уже компилируется в нативные бинарники как и swift, rust

menangen ★★★★★
()
Ответ на: комментарий от bread

Это приоритет С++ комитетчиков - дофига логики и проверок в компайлтайме. Для жонглирования виртуальными методами все проверки в рантайме, это фи для создателей современных крестов.

arturianec100
() автор топика
Ответ на: комментарий от peregrine

Он хочет джангу на крестах. Но её нет и не будет, а внедриться крестами в питон он «не шмогла»

menangen ★★★★★
()
Ответ на: комментарий от arturianec100

Фух, я уж подумал что что-то с тобой не то. Это, C++ одно большое легаси. Из него надо вагон всего устаревшего выкинуть, но оно будет жить ради легаси.

peregrine ★★★★★
()
Ответ на: комментарий от menangen

AWS Lambda — это не про то. А микросервисы наша контора вполне себе пилит, на той самой связке: Scala/Play/Slick.

Miguel ★★★★★
()

Сейчас я спать. Вернусь в тред гораздо позже.

arturianec100
() автор топика
Ответ на: комментарий от arturianec100

А как же создать класс танка и скриптом крутить его дуло у ног тян?

menangen ★★★★★
()
Ответ на: комментарий от menangen

Rust не для веб создавался. А для системного ПО. Для веб - Go

Тем не менее, Rust умеет и в веб. Фрейморков уже запилили.

th3m3 ★★★★★
()
Ответ на: комментарий от arturianec100

Дженерики, которые позволяют заводить неограниченное количество типов, в зависимости от рантайм-условий. Ну, грубо (пример выморочный)

case class Heap[T](head: T, rest: Option[Binary[(T,T)]])
def heapSumInt[T](heap: Heap[T], eval: T => Int): Int = rest match {
  case None => eval(bit)
  case Some(subHeap) => eval(bit) + heapSumInt(subHeap, {case (fst, snd) => eval(fst) + eval(snd)})
}
def heapSum(heap: Heap[Int]): Int = heapSumInt(heap, (n => n))
Компилировать влом. Смысл в том, что в структуре может лежать другая структура, которая сама меньше, но вот тип (который аргумент дженерика) — больше.

Попробуй переписать на кресты. Будет что-то вроде (сорри за ашипки):

template<typename T> class Heap {
  T head;
  Heap<std::pair<T, T>> *rest;
}
template<T> int heapSumInt(Heap<T> *heap, std::function<int, T> eval) {
  if (heap->rest) {
    return eval(heap->head) + heapSumInt(heap->rest, как там блин эту функцию написать, которая применит eval к обеим частям пары и сложит)
  } else {
    return eval(heap->head)
  }
}
int heapSum(Heap<int> *heap) {
  return healSumInt(heap, identity)
}
Вот только хрен оно у тебя заработает.

Miguel ★★★★★
()
Последнее исправление: Miguel (всего исправлений: 6)

тред неиллюзорно демонстрирует какая каша творится у среднего С++ погромиста в голове

anonymous
()

Бери vertx, он старый и быстрый. И возможные языки как раз со статической типизацией. И батареек много. Spring более

C# и Java создают впечатление ынтерпрайзных монстров совсем не для одиночки

Посмотри доки, там нет ничего сложного. Сейчас все фреймворки примерно одинаковые, сложности начнутся в бизнес логике.

InterVi ★★★★★
()
Ответ на: комментарий от th3m3

Тем не менее, Rust умеет и в веб. Фрейморков уже запилили.

Даже COBOL «умеет и в веб». Это не показатель.

anonymous
()

тред неиллюзорно демонстрирует какая каша творится у среднего погромиста в голове

anonymous
()
Ответ на: комментарий от XoFfiCEr

Пффф Веб и драйвера это уже совсем из разных опер… (и я не про браузер)

Да это обычный расто-хомячок, не обращай внимания. Он в этом треде скоро на колени перед автором станет, только лишь бы тот начал писать на расте.

anonymous
()

Столько воды написал, в общем - бери Сишечку. Сойдёт для всего. Хочешь производительный веб-бекенд, а хочешь и операционку, драйвера, свой язычок, базу данных, игру, текстовый редактор, плеер, графический редактор, офисный пакет, систему контроля версий запилишь.

anonymous
()

Почитай Выбор «С» веб фреймворка для высоконагруженного проекта с сервисной архитекрурой

Там как раз упоминается kore.io из списка, что ты привел. А вообще забавно, что в этом списке затесалось как минимум два веб-фреймворка на Вездесущей Православной Сишечке – facil.io и kore.io.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.