GO vs Rust vs JS vs Python vs C++
Вставка
- Опубліковано 2 січ 2025
- Разбираем видео Theo t3.gg с интересным филосовским сравнением go с rust, pythonm, js и других языков программирования.
Ссылка на рассматриваемое видео: • I'm Coming Around To G...
Платные консультации: t.me/nydevel
Телеграм канал: t.me/shifuio
Сайт проекта: shifu.io
ВК: shifuio
Подкаст: shifu.mave.dig...
Нож vs пила vs рубанок vs стамеска. Разделять, строгать и т.д можно все что в руку попадёт. Но что-то в ситуации удобней )
Нужно только учитывать, что сказанное в ролике сказано в контексте веба, а вообще-то есть не только веб.
К слову, в Rust указанные бодания с компилятором (в сравнении с Го) происходит только на первом этапе изучения и использования. Опытные Rust разработчики мыслят в терминах задач, подзадач, типов и потоков данных. Якобы трудные вопросы времён жизни объектов часто решаются банальным clone() в одном-двух местах (напомню, что Го может делать куче объектов свой "clone" каждые 10 миллисекунд в процессе сборки мусора).
не еще есть такая штука как рефакторинг, и в Расте это страшный сон, особенно если траблы с лайфтаймами случаются
@СлаваВолошин-ы3с Отнюдь, в Расте рефакторинг - один из наиболее безболезненных среди всех промышленных языков, так как при правильном подходе справедливо "если компилируется - то работает". Этого можно достичь только в Haskell и Scala, но не в Гошечке и не в Java, и тем более не в Python, JS,/TS.
@@linkernick5379 Да народ массово жалуется что асинхронный, многопоточный код на расте это вынос мозга.
Arc/Rc, Mutex/RwLock - можно использовать неоптимально, чтобы закрыть "дыры" некомпетенции в Rust, и что потом можно рефакторить. :) Rust использует концепцию zero-cost,а потому изначально все оптимально, а Go везде под капотом использует Arc/Rc ... так что, если прогер тупит на начальном этапе освоения Rust - может смело в режиме Go basic-кодить :) ( есть такая табличка на github - Rust-memory-container - ознакомьтесь :) )
@@СлаваВолошин-ы3с попробуйте изменить структуру в Rust, он вам начнет подсказывать - где вам надо рефакторить :) ...про лайфтаймы - используйте умные указатели - см. - Rust-memory-container ... и Rust не любит, когда вы изменяемую ссылку долго "мурыжите по коду" вместе с неизменяемыми ссылками (гонка данных) - надо быстро ее использовать в гирлянде функциональщины , или вытаскиваете ссылку и теряете ее в разыменовании через точку - надо делать промежуточное присвоение (висячие ссылки), чтобы ее не потерять. - просто в C это все пропускается, а Rust контролирует, поэтому используйте "Go технологию" - Arc/Rc :)
В этом то и суть, ты берешь JS/Python разрабатываешь прототип/MVP(допустим берем бэк), очень быстро запускаешься, набираешь аудиторию. Потом когда ты где-то упираешься, переписываешь часть на Rust/C++. На GO получается не рыба и не мясо, ты хочешь написать прототип/MVP, но это быстрее и дешевле было бы сделать на JS/Python, а когда ты упрешься в производительность на GO(хотя это очень мало вероятно) все равно надо будет переписать часть на Rust/C++.
В любом случае надо смотреть на конкретный кейс
Постоянно вижу сравнение языков со столярными инструментами и это крайне некорректная аналогия, потому что все промышленные ЯПы достаточно сложные и обладают достаточно богатыми возможностями для того, чтобы реализовать любые проекты. Мы можем найти, что и на C пишут веб, и на Python встроенное ПО, а вот столярные инструменты в приннципе не взаимозаменяемы.
@@linkernick5379 я бы сказал, что языки это разные наборы с инструментами
Не понимаю кто плевался от Golang. Простой язык с минимумом синтаксического сахара, от перегрузки которым страдают разработчики на плюсах. По простоте как школьный паскаль, по скорости как плюсы. Где-то видел тест, когда код на питоне компилировали сторонним компилятором, и аналогичный код компилировпли в Golang, в том тесте Golang все-равно выиграл. Ну а по сравнению с нативным CPython выигрыш у Golang был где-то в 40 раз по скорости. Знаю пару проектов, где бэкенд переписали с питона на го и затраты окупились довольно быстро из-за понижения стоимости серверной инфраструктуры. Нет плохих языков, есть неуместное применение для нетиповых задач.
от го плюются те кто привык писать на современных managed языках которые облаюают высокой выразительностью (C#, Java/Kotlin, TS). го (относительно вышеупомянутых языков) очевидно бедный язык как по системе типов так и по синтаксическим конструкциям и экосистемы (как минимум в виду молодости языка). особенно был года 3-5 назад, когда как раз когда становился популярным и все его начали пробовать
возможно на фоне плюсов и си го выглядит очень классным заслуженно (он в эту нишу и бил изначально), но на фоне другого спектра решаемых задач он выглядит очень слабо
питон очень плохой пример тк это ужасный язык для всего (кроме может быть DS, DE и скриптинга). его можно переписать на что угодно и станет лучше (я немного утрирую)
Golang со сборкой мусора не конкурент C++ / Rust! Посмотри сколько хардкорных опенсорс проектов типа БД уже написано на Rust. Пройдет время и по мере захвата рынка опенсорс и не только решений на Rust появится много вакансий!
@@RomanTchekashov Раст - ещё более замороченный, чем Си/Си++.
Навряд ли на нём напишут рабочее ядро ОС или сколь-нибудь популярную ДБ
@@cyrilanisimovвот именно что пишут!
@@RomanTchekashov Что пишут?
Хоть на Го ты доставляешь фичи со скоростью света, проблема все же есть. Из-за специфики реализации абстракций в гошном коде происходит очень много рантайм проверок, везде под капотом указатель на указателе, что аффектит производитедьность. В том же расте очень много абстракций реализуются с помощью мономорфизациии или алгебраическими типами, которые под копотом по сути являются union'ами из С и не снижают перформанс.
Также, при ежедневной работе с Го я заметил, что из-за нестрогости языка я доставляю багов в прод больше, чем на более строгих языках.
Спекулятивное заявление, но я думаю, что если сравнить популярные го и раст фреймворки, то среднее количество Issues с багами на количество релизов в го фреймворках будет намного больше, но это надо проверить.
Rust очень сильно теряет производительность за счет огромного количества .clone, если мы сравним 2 случая, когда мы переписываем второй раз программу которая уже написана на каком то языке и потом делаем ее второй раз, но только лучше на Rust - получаем прирост производительности. Когда мы сразу пишем на Rust - у нас просто отвратительная производительность. Go - очень удобный язык, который позволяет создать приложение с нуля с минимальным техническим долгом за счет отсутствия ООП, идиоматики и простоты синтаксиса. Rust не может быть конкурентом GO, потому что физически не способен повторить те достоинства в разработки на которые способен GO.
@@d1namis на rust нужно писать без огромного количества .clone. Обычно всё подряд клонируют новички, которые не знают других способов как задобрить borrow checker, но эти способы есть и ими нужно пользоваться.
С достоинствами Go я не спорю, из-за легкости и скорости разработки бизнес на него толпами и переходит. Но я бы выбрал Rust, если потребность в качестве и корректности сервиса стояли бы выше скорости доставки фич
@@4sat564 ну значит вы практически на Rust не программируете, потому что на практике у вас 2 стула, вы или не используете clone и у вас хуже производительность чем могла бы бать если бы вы его использовали и у вас используется и поэтому хуже производительность. Война против компилятора, ежедневные войны по созданию технической задолженности - это ежедневная реальность безопасной Rust разработки. И единственное нормально решение это unsafe - потому что без него интересный софт на Rust не написать.
Я использую python+rust и покрываю весь интервал как по времени разработки прототипа, так и по перформансу финального продукта.
Если ты выучишь Python на нормальном уровне, то у тебя будет Python + Python и еще быстрее разработка прототипа и точно такой же перформанс. Rust это не ориентированный на производительность язык и как не странно зачастую Python его может догнать. Есть конкретные 2 случая когда Rust будет быстрее. И в обоих этих случаях он менее интересный чем Erlang/Elixir.
@@d1namis На производительность чего? Разработки?
некоторые языки по дев велосити такие же как питон/тс, а по перфу примерно как го (C#/жава). так что шкала не или/или а 2 оси должно быть.
насчет эликсира и хаскеля в зоне C++ это рофл. там же противоположно, это менеджд языки, на которых быстро разрабатывать и не всегда они быстрые. ничем от TS/жава не отличаются
Может я чего-то не понял, но на графиках ~10 минута, показывают сколько конкретный человек внес кода в конкретно этот проект, а не сравнение между двумя, может в рамках обозреваемого видео и приводились эти выкладки, но тут это выглядит как манипуляция, мол смотрите мейнтейнер написал больше кода одного из контрибьютеров, своего же проекта, а значит на раст писать тяжелее.
да, факт. не стоит судить об языке по контрбьюторам в 1 репу
По поводу dev experience - ну вы еще предложите зарплаты разрабов вводить как зависимость от написанных строчек кода, блин.
Что разраб на Rust/C++ c 5 годами опыта, что на ts/js/python/go - им всем будет одинаково легко доставлять фичи, независимо от того, чуть больше ли надо будет писать строчек кода и бороться с компилятором или вообще не думать об этом. Так что без разницы.
Со временем разница в dev experience нивелируется опытом работы разработчика, он просто плавает в языке как рыба в воде.
Странно, что на графике питон производительнее js
странно, что меряют производительность ts, который является деоптимизирующим линтером.
@@daiske2867 наверное ts тут больше для метрики code velocity, типа помогает деливерить код быстрее с меньшим количеством багов за счёт статической типизации
Оба г**но
@@daiske2867 Прости конечно, но что у тебя там линтер может деоптимизировать? Выдачу данных в LSP?
Для Js(Node.js) нет никаких проблем подключить либы С++, поэтому граница перехода вымышленная. Т.е. "проблема перехода границы производительности" притянута за уши.
За уши, как кандидата можно притянуть на обсуждение эликсир. Он где-то между растом и го, однако, при этом на приемлемой дистанции от чуваков справа. Я так думаю.
JS по факту треш-язык, но им пользуются. Значит на выбор языка влияют некие обстоятельства, а не программисты и характеристики самого языка.
JS скорее всего стал так популярен из-за экспоненциального роста веба. А другой альтернативы выполнять код на стороне клиента без внешних плагинов не нашлось. Пользовались, чем было. Мыши плакали и кололись об JS, но потом привыкли. Были ещё джава-апплеты, флеш и сильверлайт, но это все плагины, а потому лишние вопросы безопасности, кросс-платформы, сложности индексации контента на страницах с плагинами и т.д. В итоге и пришли к тому, что на JS теперь весь фронтенд и даже немного бэкэнда.
верно
ведь 1Сом тоже пользуются
нет, треш-язык - это пайтон
С TS нормальным он вполне стал, и после обновления es2015
Ну почему это треш-язык ты конечно же не пояснишь. Тк, ты скорее всего ни одного стоящего приложения на нём в жизни не написал и в общем-то не совсем понимаешь, что он из себя представляет. Если бы это было иначе, для тебя бы причина его популярности не была загадкой.
отличное видео о "полутонах" в языках программирования.
Go хороший язык, но Rust круче. В первое время выбешивала эта система владений и время жизни ссылок. Но когда понял что и как, все пошло как по маслу. Нравится пилить десктопы на fltk.
@@Maratreason Если нравится пилить десктопы, то наверное раст круче. Если бэкенд, то сомнительно, если скорость разработки имеет значение.
@@MrLotrus "Why Discord is switching from Go to Rust" :) - двойное переписывание ...
У Тинькофф банка спроси: почему они с C++ перешли на Rust.:) - это Rust по середине :)
@@ol_suh у тинькова и го с питоном есть. то что дискорд 4 года назад перевел сервис на раст, мало о чем говорит.
Так где тут Java?
Вне конкуренции, очевидно)
Одной ногой мы в стоим Rust, другой ногой мы стоим в Python, а между ног у нас суровая действительность. Такую нишу Go можно воспринимать не как преимущество, а как попытку усидеть на двух стульях. Выбор языка проекта очень часто идет не по пути рационального подхода, а по пути иррационального. Какого программиста смогли найти такой и будет. На каком языке проще и быстрее написать или дешевле, о будущем будут думать в будущем. Производительность сейчас это не тоже самое, что было 30 лет назад, когда за каждый килобайт памяти боролись. Сейчас дешевле и проще просто купить более мощный сервер, чем что-то оптимизировать. А вот проектов, когда оптимизация становится необходимостью можно по пальцам пересчитать и большинство из них уже написаны на Java. Основной сектор высоконагруженных систем это банковская деятельность, а там Java и никто не будет ничего переписывать.
Когда переплата по железу переваливает за миллионы долларов - то на потребление ресурсов начинаешь смотреть иначе. Для всякой мелкой херни конечно же можно юзать что угодно и как угодно
@@Серверныйчервь Так таких проектов по пальцам перечесть.
@@knigolazЗато такие бигтех компании аккумулируют большое количество рабочих мест
@@MrLotrus А если посмотреть на hh и сравнить количество вакансий Go и Python, то это будет аргументом не в пользу Go. Большие компании тоже любят считать деньги и проект переписывания кода будет стоить больше, чем закупка серверов и оборудования, тем более, что уже очень многое написано на Java. Go занял нишу, но он скорее появился не свое время, ему надо было появится лет 20 назад. И оптимизировать работу можно не только переписыванием кода, это можно сделать на уровне оптимизации архитектуры, а уже после дописать то что есть на том же языке. Вот и получается, что большие проекты уже написаны и переписывать их себе дороже, а новые проекты предпочитают что-то простое типа Python. А Go как всегда посередине)
@knigolaz Т.к. python более универсален, вакансии на hh с python будут по разным специальностям. ML/DS, data engineer, девопсы зацепятся и бэкенд. Но выучив питон, вас не возьмут по любому из этих направлений. Там помимо яп надо знать свою специфику. Если говорить именно о бэкенде, то ещё вопрос у кого вакансий больше. Также возьмем качество вакансий. го более популярен в бигтехе, чем в мелких компаниях. И деньги как правило в бигтехе. Поэтому для тех, кто хочет писать бэкенд в бигтехе, го отличный выбор.
Кажется это инструменты для решения разных задач)
Зная питон и го можно написать отличный веб сервис, зная C можно написать питон и го)
JS/TS популярный потомк что все браузеры его по умолчанию используют. Python потому что data science его себе взяла, а чего используют rusr, c++ незнаю.
Псюсы и раст для низкоуровневого программирования, где важно самому работать с памятью. Типа разработки БД и т.п. Или писать крайне нагруженный хайлоад. Или части к софту.
а JS и Пайтон живут за счет кода написанного на плюсах)
А kotlin?
Это про разработку для мобильных устройств, а тут про языки более широкого применения!
@qvagin что? На Котлин пишут бэк, причем сейчас очень активно, точно активнее чем на расте, например в Яндексе пишут бэкенд на Котлин, а на расте нет
@@qvagin котлин давно в беке
Хз хз. Я учу то, подо что моя платформа. Телефон поддерживает Java и только Java - надо учить джаву. Если будет задача, которая решается только GO придётся учить его.
А kotlin?
@@NikolyaRB это java++, но даже так, java на телефонах, старых, там же гугол педалируют во всю именно котлин и пишут экосистемообразующий код на нем.
Я на Питоне писал/пишу высокопроизводительные приложения. Портировал одну библиотечку с Си - производительность упала в 2-3 раза (всего). Чистый питон конечно медленный - там было падение в 1000 раз, но в нем же много средств оптимизации - jit, cython, векторизация numpy. Кроме того как правило достаточно оптимизировать 10% кода
Звучит как набор костылей
Писал на Питоне 3D-графику и обработку изображений, нормально было. Алгоритмы, разумеется, сразу в numpy/scipy, иногда в cupy (это как numpy, только унутре у него CUDA), по возможности более специфические для каждой задачи библиотеки (opencv, VTK и пр.). Портирование происходило, скорее, в обратную сторону: если алгоритм совсем никак на numpy не налазит, переписываешь нужный кусок на C/C++ и оформляешь как отдельный модуль. На C++ я это тоже писал - тут без сюрпризов: писать дольше, работает быстрей. Если в проекте прям много высокопроизводительной высокопроизводительности - может иметь смысл не скрещивать ужа с ежом, а сразу всё делать на одном C++. Но даже и тут, зачастую, помогало сперва написать, отладить и проверить алгоритм на Питоне, а потом механически перенести на C++, чтобы не запутаться в его итераторах, двойных двоеточиях, угловых скобках и прочем весьма неуклюжем синтаксисе.
@@vladimir945 pypy-интерпретатор работает очень быстро. Отстает от Си раза в 3. Так что можно попробовать с ним. Тупо запустить тот же код на Питоне, если нет нестандартных библиотек. Тот же прототип алгоритма, например.
Я только бенчмарки простые гоняю на разных языках. Сужу по этим сравнениям.
Сам гошник, в ходе работы пришлось также работать на TS и PHP.
Понял что там ошибок не меньше чем в Go, их просто хер когда кто-то обработает...
А где видосы, где на реал задачах чуваки "работают" и рассказывают) Да го топ.
Дааа, питон блендера интересно посмотреть, но зачем. Хм, структуризация личная выражается в книгах или ещё где.
А то собесы классно,что выкладывают, но чтобы начать смотреть и те норм было, а уже потом вникать тож время треба. ) И вообще теперь можно компаниям собесы рассылать, вот смотрите.
Осталось стрим запустить,что я смотрю как кто-то смотрит, что кто-то рассказывает)
Лан завис видос, некст.... )
Николай, а почему не взлетела рубрика "Хуевые новости"?
просто регулярно нужно делать, а у меня тогда было крайне мало времени...как и всегда:)
Шифу, он фанат Тайпскрипта а не Раста
Закралась в мои 36 лет мысль, что не люблю свою работу, хочу развиваться в другом. С месяц прохожу на курс по питону на Stepik. Прям нравится. В день 2-3 часа почти регулярно уделяю. Смущает в питоне что в будущем я возможно никогда не найду работу, из-за толп таких же соискателей.
Но вот на этом канале автор очень активно топит за Go. Если смысл сейчас поставить питон на паузу и посмотреть в на правлении GO или все же сначала добить Питон до какого нибудь уровня а потом уже подумать о Go? Смотрю вакансии и еще не встречал что бы в требованиях было знание только Go. Всегда в довесок хотят видеть еще либо питон, либо Яву, либо еще чего
Смотря кем вы хотите работать - если разработчиком(бекендером), то в целом не принципиально, какой язык, так как работа есть и на питоне и на го и на других языках, а самое важное, что для всех вакансий на бекенде нужно знание баз данных, сети, немного алгоритмов и тд. То есть все остальные требования, кроме языка, одинаковые. В таком случае, если выучил все это, сменить язык становится достаточно просто, да и в плане разработки языки не так сильно отличаются, как кажется на первый взгляд, везде и на всех языках пишут примерно похожие приложения, сервисы и тд. Если нравится питон, можно начать с него, так как он чуть проще и симпатичен, а потом, если будет надо перейти в го. Если же хочется делать что-то с нейронками или заниматься большими данными, то вроде бы почти всегда там только питон, так что тут и выбор не стоит :)
Сам начинал с php, так как он больше нравился мне как новичку и хотелось начать "побыстрее и с более легкого уровня", устроился, поработал и выучил го, так что желаю вам удачи, у вас все получится!
Ну и как будто бы достаточно много вакансий только с 1 языком в требованиях, поэтому нет необходимости учить сразу 2-3, чтобы не распыляться
дожми питон до какого то уровня минимального понимания, но дожать до конца никакой язык не получится все равно, чем дальше тем глубже кроличья нора, если совсем 0 был, то на питоне удобно понять совсем базовые конструкции программы, но я бы предложил Java, прям очень много литературы на русском разного уровня от базы и до микросервисов и алгоритмов, и все достаточно не плохо разжевано, общие концепции о которых говорят на собесах в других языках строятся на джавишных подходах, я имею ввиду ООП и SOLID, на других языках всегда придется говорить ну у нас JS особо не пишут в ООП, а в питоне у нас странное ООП, толком нет инкапсуляции, хотя на собесах скорее спрашивают о джавижном ооп, как база, лучше в этом разобраться в начале, потоки данных, потоки выполнения, интерфейсы, абстрактные классы, наследование, полиморфизм, типизация, дженерики, в джаве читаешь и все понятно) после другие языки не доставят сложностей.
Скакать с языка на язык смысла нет. Выбрал питон и пили его до приемлемого уровня. Лишним не будет. Работа есть на всех языках. К тому же питон никуда не денется, даже если GO взлетит еще сильнее. Доучишь GO, будешь еще более востребованным на рынке.
на этом канале автор топит за Go для молодежи или как язык для перехода кто сидит на других языках и хочет что-то попробовать, для нас тех кому за 35 он рекомендовал Java) Go классный, но как раз из-за его простоты, относительно небольшой по мнению других внутренней библиотеки, то есть как будто меньше шума, меньше вариантов из чего выбирать чтобы сделать что-то одно, это подкупает, да он быстрый, и все с ним хорошо, но из-за своей простоты без хорошего бекграунда, для больших проектов все равно придется делать на простых конструкциях свои слои абстракции, понимать какие структуры данных удобнее подготовить и как ими оперировать, на чистом синтаксисе далеко не уедешь, просто копировать или смотреть как пишут другие не получится на мой взгляд, я в твоем возрасте начинал c js, потом смотрел разные языки, python показался понятнее всех остальных, но уже работая с js, с трудом находил чем лучше питон, просто интрумент с кучей годных библиотек на многие случаи жизни, а так смотря на питон наблюдая как питонисты радуются, что у них появились типы, у js есть ts, потом питонисты стали радоваться что им завезли асинхронность, а в js, nodejs асинхронность из коробки, переменные создаются в питоне без какого либо служебного слова, а через 100 строчек можно ее снова переопределить, и как понять если не видеть начала, ты создаешь переменную или переопределяешь) сейчас я смотрю Java, синтаксис очень похож на JS, максимально приближенный к академическому ООП, много концепций и паттернов разработки.
у python много сфер куда можно попробовать пойти (backend, ds, qa, любая автоматизация процессов) у go ттлько веб
на python джунов много, но их хоть кто-то ищет, go - язык High load web и сложных инструментов для инфраструктуры и разработки, туда и так вакансий не много, а оставшиеся подразумевают минимум хоть какой-то реальныопыт
дружище, Go не может соревноваться с Rust это факт! пойми, Go это про веб и облака, Rust это все что Go остальное! можно до усрачки спорить что лучше, что хуже.. НО! сегодня пока Go ни где не заменил C++!!! даже не попытался!!! даже близко не смог!!! и тут уже можно успокоиться рассказывая что он супер крут. по тестам Go уступает Rust не менее 20-30% по скорости.. ну это не мало.. ты же не пишешь стрименговую платформу типа ютуба или что-то такого типа, где надо много работать в реальном времени с данными в таких объемах. вот тут твой Go уже может оказаться очень уж не найс.. мне если что нравиться Go, и Rust я люблю.😁 напиши ядро для Linux на Go, или драйвера для видеокарты.. и сразу все эти - "да нет, вы не правы!" пройдет.😁 банально, напиши базу данных!
Go прекрасно подходит под web, для чего он и был создан. под облачные решения. и не надо придумывать там еще чего-то.. ни кто не пилит его под другое..😁
на держи бд на go - cockroach, все можно написать на любом языке, тут не стоит такого вопроса. И в обработке видео тоже поверь, go может не уступать расту, я сам любитель раста, но так принижать go, мне кажется не стоит
Соглашусь со сказанным. Раст очень красив и круто спроектирован, от Го тошнит. Но Раст требует намного больше ментальных усилий; так что Го намного продуктивнее. И если нет необходимости в гарантиях Раста (когда мы не пишем ПО для управления реактором или каким-то химическим процессом в реальном времени), то веб-сервис или консольную утилиту можно на порядок быстрее написать на Го. Правда, придется написать пару тысяч строк кода до того момента, как от Го перестает тошнить. )) Но в целом язык очень неплох, и лично я полностью переключился с Раста на Го. Для разработки под веб - самое оно.
Для того, чтобы у тебя что то работало в реальном времени тебе в первую очередь нужна ос реального времени. Манегер процессов не выделит тебе времени и не важно на каком языке это написано
@@никитаантипов-у6л Ты типа по диагонали мой коммент прочитал, или как?