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)

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

Откуда такой хейт к статике? Ведь TypeScript же взлетел.

Статика а-ля Typescript хороша своей опциональностью. Она будет только в тех местах проекта, где это нужно тебе самому, а не вообще везде без вариантов. Ну и то, что она структурная (утиная), а не номинальная.

Ну и да, статика переоценена, спецификации лучше. See clojure.spec

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

Мне лень отвечать тебе на этой помойке, пиши сюда: https://t.me/proriv_zaparti - я тебе могу рассказать и про дарт и про С++ и про ts и про веб.

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

Хотелось бы ещё ответа на «Вот только меня пугает нативность крестов…»

Вот на это?

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

Не знаю. Наслышан (или участвовал) в написании бэка на C++ в следующих случаях:

  • высокие нагрузки;
  • нужно задействовать 100500 строк старого, давным-давно написанного и годами отлаженного C++ного кода в новой, модной и молодежной микросервисной архитектуре;
  • нужно делать «тяжелую» обработку запросов, поэтому ее делают на C++, а дабы не трахаться с интеграцией JS<->C++ (PHP<->C++, Python<->C++, …) просто сразу прикручивают С++ный HTTP-вход;
  • нужно сделать Web-морду для какого-то умного устройства, на котором все уже сделано на C и C++, и добавлять туда еще что-то либо нет возможности, либо нет умеющих делать это людей.

Может быть и есть любители C++, которым принципиально важно делать сайт именно на C++ без насущной на то необходимости. Но я не из их числа, так что помочь не могу.

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

Вот только хрен оно у тебя заработает.

Два вопроса:

  • что вы хотели продемонстрировать данным примером вообще?
  • почему «хрен заработает»?
eao197 ★★★★★
()
Ответ на: комментарий от menangen

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

Go тоже создавался не для веб.

anonymous
()
Ответ на: комментарий от eao197
  1. Отсутствие настоящих дженериков в плюсах
  2. Потому что компилятор вывалится на бесконечном развёртывании шаблонов.
Miguel ★★★★★
()
Ответ на: комментарий от t184256

А потом рождаются реализации динамической типизации на статике, ага

Любая достаточно сложная программа на C или Фортране содержит заново написанную, неспецифицированную, глючную и медленную реализацию половины языка Common Lisp
anonymous
()
Ответ на: комментарий от Miguel

Потому что компилятор вывалится на бесконечном развёртывании шаблонов.

Может да, может нет. По вашему примеру вообще невозможно сказать, что ваш код должен был бы делать. Так что проверить это на практике не представляется возможным.

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

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

Авто вывод типов изобрели тогда когда из динамических языков только лисп был, никаких питонов и яваскриптов еще и в проекте не было.

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

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

Для получения скалярного произведения двух векторов городить иерархию шаблонных классов с какими-то унылыми Cons-ами когда можно использовать array<T,N>… Ну можно, если хочется показать какой ты умный и какое C++ говно.

eao197 ★★★★★
()

Буду в одиночку пилить сайт для своих нужд

Хорошая производительность

C++

Вот только меня пугает нативность крестов - может ли человек с очень малым опытом крестов

Ты уж определись - хорошая производительность или нубский C++. Хорошая производительность инструментария тебе не поможет. Про «web на c++» уже сказали.

Но ты можешь попробовать вопреки советам, ты же не такой как все, ты не облажаешься.

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

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

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

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

А того, что C++ уже тогда был в отстающих, и начали тягать всякую херню в язык типа лямбд из Java

Лямбды в С++ появились раньше чем в яве.

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

Она будет только в тех местах проекта, где это нужно тебе самому, а не вообще везде без вариантов

Только почему-то ты забыл про одну важную вещь.

  • статическую типизацию можно не использовать в статически типизированном языке, когда она не нужна
  • статическую типизацию никогда не получиться использовать в рамках динамически типизированного языка

Ну и да, статика переоценена

Ага, только статика удовлетворяет твоему критерию «где это нужно тебе», но она переоценена. Сильно.

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

но оно будет жить ради легаси.

Что угодно живёт ради «легаси». Кроме того, что никому не нужно, конечно - вот такое да, выкидывает устаревшее на раз(но это единственная деятельность).

cloun1901
()
Ответ на: комментарий от eao197

но и там так же не понятно

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

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

Цель в том, чтобы статически гарантировать, что длина массивов одинаковая

Почему именно статически? Чем проверка в рантайме не устроила?

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

статическую типизацию никогда не получиться использовать в рамках динамически типизированного языка

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

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

Питон однако смог выкинуть говно.

Не смог. Динмическую типизацию выкинули? Нет. GIL выкинули? Тоже нет. Правила языка наподобие крестов аля «миллион частных случаев»? Нет, оно всё ещё там. Что же они там выкинули?

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

Если взять лисп

Эти легенды от фанатов лисп… существуют только потому, что никто даже пальцем не пошевелит, чтобы проверить достоверность.

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

А как можно гарантировать что задание 2х разных размеров массивов в рантайме отловится статически.

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

Динамическая типизация и gil это как раз то, из-за чего питон нужен.

Именно поэтому туда так активно прикручивают аннотации. Свежо придание, да. Кстати, а gil-то тебе для чего?

python2 и его синтаксис

Давай так: синтаксис. Ибо питон2 характеристикой языка не является. Допустим.

Итого: одну из минимум четырёх проблем они решили(притом самую малозначительную). Это как если бы в крестах выкинули нынешние правила инициализации, оставив один общий синтаксис. Оно никому не нужно такой ценой.

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

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

Это понятно. Как понятно и то, что к практике это не имеет отношения. От слова совсем.

Как, впрочем, и сравнение генерики vs шаблоны. Потому что вы сперва выбираете язык под задачу, а потом уже используете то, чем язык располагает. И если у вас выбор языка определяется лишь тем, что генерики лучше шаблонов (или наоборот), то вас можно только поздравить.

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

Именно поэтому туда так активно прикручивают аннотации.

их прикручивают ради бегущих шарпистов и джавистов

Кстати, а gil-то тебе для чего

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

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

Типы надо проектировать заранее, а это блин сложно

Это здесь ни при чём. Впрочем, ты исходишь из ложного посыла.

А проектировать типы не сложно - это дорого. Как и многие другие вещи. Поэтому никому нет дела, насколько очередной язычёк мощный и пр. - единственный критерий это кол-во уже сделанного и запроектированного в языке, насколько много придётся доделывать под себя.

Именно поэтому питон настолько популярен - очень много библиотек. А вовсе не из-за динамической типизации, которая якобы ускоряет разработку, как думают некоторые.

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

статическую типизацию можно не использовать в статически типизированном языке, когда она не нужна

Запили мне жабий хелловорлд без статики.

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

Именно поэтому питон настолько популярен - очень много библиотек

У си библиотек гораздо больше, вот только не бегут его вместо питона использовать. И задай себе вопрос, а как так получилось, что у питона стало много библиотек, не смотря на то, что при переходе с python2 на python3 их пришлось переписывать?

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

их прикручивают ради бегущих шарпистов и джавистов

Ну ты ещё макак бы упомянул. Очевидно, рулевые питона понимают тот факт, что динамика ущербна. Как и то, что никуда это из языка теперь не убрать. Из-за того самого «легаси».

Для того чтобы нехорошие люди не писали говнокода, который будет некорректно работать.

Ты ничего не ответил.

секс с мьютексами и семафорами это вынужденное извращение в системном программировании ради крох производительности

Не совсем, но в первом приближении это примерно так. Только гил здесь ничего не решает - «нехорошие люди» продолжают писать «говнокод». Одни из них обходятся и без потоков(aka «стэктрейс в лицо пользователю»), другие - используют многопроцессность(нет, разделение адресных пространств не затрудняет внесение ошибок, всего лишь специфика иного вида).

cloun1901
()
Ответ на: комментарий от Nervous

Быстро ты обделался. Просто для протокола: ты говорил про «когда тебе нужно». Вот показывай, где тебе нужно «жабий хелловорлд без статики». Побежал.

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

ты говорил про «когда тебе нужно»

Я говорил про Typescript, ваше величество. Это вы изволили серануть в панталоны, заявив, что статическая типизация опциональна вообще во всех языках, которые ее используют.

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

вот только не бегут его вместо питона использовать

Бегут. И кресты бегут(отчасти по этой же причине). И раст, с которым многие так носятся, не взлетел по этой же причине. В отличии от крестов.

Можешь сам посчитать кол-во ПО на C и на Python. На питоне в разы меньше будет.

cloun1901
()
Ответ на: комментарий от Nervous

Я говорил про Typescript, ваше величество.

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

статическая типизация опциональна вообще во всех языках, которые ее используют

Да, трепло, опциональна. И тебе сказано было блеять про это и пытаться возразить. Есть тезисы - есть разговор, нет - ты обделался. Всё просто.

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

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

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

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

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

Какие-то вы необучаемые все. Вам сказано было постить конкретику. А ты что высрал?

не используй статическую типизацию в Си, когда она не нужна

когда она не нужна

Кому не нужна? Треплу выше я уже сообщал, что оно не может кукарекать рандом. Оно должно привести конкретные случаи, когда «не нужна» и обосновать нужность этих случаев. Вот вперёд, побежал за примерами.

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

как фиксят кресты на манер языков с динамической типизацией

Ты же приведёшь пример таких фиксов, ок? Нет, auto таким примером не является. Попытайся.

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

Ты че-то запутался в конец! Ты ж писал, что можно не использовать статику на статически типизированном языке. Давай, побежал писать прмер на Сишке без статики. Иначе трепло

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

Всё, раздавлено. Смотри, я пришёл в тред, сказал тому сектанту, где он неправ. Ты начал кукарекать мне какую-то херню, на что я ответил базовым тезисом. И что ты мне далее сообщаешь? «давай», «ты писал» - да, трепло, я писал это. И я это доказал. А для того, чтобы кукарекать мне что-то, ты должен опровергнуть мои доказательства.

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