Pull to refresh

Comments 39

думаю, python зашел в ML даже не из-за особенностей языка, а из-за python jupiter notebook:

Как особого режима работы с документом, который объединяет блоки объяснений, визуализаций и кода в одном полотне и позволяет также блочно это менять/тестить. Это очень удобная абстракция для исследовательской работы.

Почему он взлетел - Совершенствовалось железо и стало наплевать на скорость и прожорливость, соответственно из-за простоты освоения, развития интернета (где можно получить документацию на модули) и "всего готового" в языке + быстрая "разработка" для "заработка" появилась куча скрипт-киддисов (которые ныне называют себя "программистами") и пошло поехало.

Медленный для чего именно? Опять это абстрактное «Python медленный». В большинстве реальных задач всё упирается в архитектуру, алгоритмы и внешние сервисы, а не в сам язык. А там, где действительно нужна скорость, тяжёлые части спокойно ускоряются или выносятся в C, C++ или Rust.

Ну вот он медленный там, где есть "тяжeлые части" (например циклы, for). Да, плохой архитектурой и алгоритмами вы замедлите работу в сотни раз, а не в 30, как при использовании питона вместо C++. Но 30 питоновских раз никуда не пропадают даже при выборе правильной архитектуры.

Вынос частей в С++ - это костыль, как раз вызванный абстрактным "Питон медленный". Если бы он не был абстрактно медленным, не нужно было бы ничего никуда выносить.

Вы правы только для одинакового вычислительного кода, например цикла на Python и C++. Но программа целиком не становится автоматически в 30 раз медленнее: часто основное время уходит на сеть, диск, базу или библиотеки, которые сами написаны на C/C++.

Поэтому вынос тяжёлых участков в нативный код, не костыль, а нормальное разделение задач. Точнее говорить: медленны циклы в CPython, а не Python-приложения вообще.

Но программа целиком не становится автоматически в 30 раз медленнее: часто основное время уходит на сеть, диск, базу или библиотеки, которые сами написаны на C/C++.

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

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

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

Так а в чем проблема если такая обвязка крайне необходима?
Есть небольшое количество суровых computer science профи, которые пишут библиотеки с высокоэффективными алгоритмами на сложных быстрых языках.
А есть большое количество исследователей, например биологов, которые не осилят C++ и алгоритмы на таком уровне, но которым нужно писать простой понятный код для анализа своих задач - и вот именно эту нишу Python и закрывает.

Разумеется. Мне кажется хорошая аналгия тут - авто. Есть феррари и есть приус. Очевидно же, что феррари быстрее? Да, если вам надо только ездить по пробкам, то приус будет двигаться с той же скоростью, примерно с тем же комфортом, но будет гораздо дешевле.

Но это не отменяет того, что приус - медленный. В любой аналогичной ситуации он будет медленее. Иногда эта медленность не имеет значения, ибо без разницы, там 10мс или 1мс тратится на склейку библиотек. Я и не отрицал вообще право питона на существование, я лишь утверждал, что он медленнее.

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

В смысле вынос c++ это костыль? Python исходно проектировался как обертка по верх C. Если текущии разрабы Python не владеют c++ это их личные проблемы, а не проблемы языка. Не говоря уже о том что во времена ИИ заявлять о не знании какого либо языка, по крайне мере странно?

В смысле вынос c++ это костыль?

Если питон такой быстрый, то зачем вообще что-то выносить в нативный код?

Затем что питон медленный

Питон предлагает более удобную во многих случаях абстракцию, чем C++

для себя делал тесты скоростей (если кому интересно)

РЕЗУЛЬТАТЫ БЕНЧМАРКОВ

  1. Сравнение языков: расчёт числа π по формуле Лейбница, 10 000 000 итераций

C++ (g++) — 161.422 мс Julia (AOT compiled) — 161.677 мс Fortran 90 (gfortran) — 161.762 мс Nim — 161.810 мс C (gcc) — 161.810 мс Go — 162.448 мс Rust — 163.962 мс Java — 212.181 мс JavaScript (Node.js) — 424.986 мс Julia — 427.489 мс Python (PyPy) — 964.484 мс Crystal — 1426.190 мс Elixir — 2650.710 мс PHP — 2730.660 мс Clojure — 2826.070 мс Lua — 5101.520 мс Swift — 5246.140 мс R — 6404.800 мс Clojure (Babashka) — 10272.500 мс Ruby — 12194.300 мс Python (CPython) — 28513.900 мс

Самый быстрый: C++ — 161.422 мс. Python CPython: 28513.900 мс, примерно в 177 раз медленнее C++.

  1. Расчёт π методом Лейбница, 100 000 знаков

Go — 7.665 с Rust — 7.706 с C (GMP) — 10.737 с JavaScript / HTML — 15.993 с C# — 16.100 с C++ — 21.195 с C (pure) — 21.388 с Python — 25.629 с

Самый быстрый: Go — 7.665 с. Python: 25.629 с, примерно в 3.34 раза медленнее Go.

  1. Общее время бенчмарка, 100 000 элементов

C — 21.6 с Rust — 22.5 с Go — 23.8 с C# — 25.1 с Python — 816.2 с

Самый быстрый: C — 21.6 с. Python: 816.2 с, примерно в 38 раз медленнее C.

  1. Пузырьковая сортировка float, 100 000 элементов

C — 12.67 с Rust — 14.73 с Go — 15.21 с C# — 15.88 с Python — 437.48 с

Самый быстрый: C — 12.67 с. Python: 437.48 с, примерно в 34.5 раза медленнее C.

  1. Пузырьковая сортировка int, 100 000 элементов

Rust — 7.77 с Go — 8.56 с C — 8.95 с C# — 9.23 с Python — 378.72 с

Самый быстрый: Rust — 7.77 с. Python: 378.72 с, примерно в 48.7 раза медленнее Rust.

Примечание: результаты зависят от конкретного кода, версии компилятора/интерпретатора, библиотек, железа и условий запуска. Пузырьковая сортировка имеет сложность O(n²), поэтому не является хорошим показателем скорости реальной сортировки.

p.s. скриншоты не грузятся текст из них через нейронку достал

только это все характерно для cpu-based задач. А в огромном числе кейсов упирается все в СУБД, т.е. скорее io-based

Да и тут у Си преимущество тоже, потому что он работать с io может на самом низком уровне.

возможно но я просто через control + v вставлял и была ошибка загрузки

сегодня загрузились без проблем p.s. изображения делались нейронкой по результатам
js/html это реально был запуск расчётов в браузере на странице
js/html это реально был запуск расчётов в браузере на странице
а это уже из сети брал
а это уже из сети брал

даже сорсы остались некоторые

Как-то странно. При расчете по формуле в 10М операций C++ в 177 раз быстрее CPython. А при подсчете до заданной точности - сравним. В чем дело? Ведь подсчет до заданной точности - это сколько-то заранее фиксированных итераций (хоть число и не записанных явно). Ведь формула одна и та же. Питон в обоих тестах работает примерно одинаковое время, а C++ в 170 раз медленнее. Почему?

Что там такое во втором тесте, чего нет в первом? Криво написанная длинная арифметика без стандартных оптимизаций, которые реализованы в движке длинной арифметики в питоне? Тогда сравнение некорректное. Надо в С++ использовать тоже стандартную вылизанную длинную арифметику вроде libgmp.

уже не помню как и что считал, всё было написано с помощью нейронки, вот и могут быть косяки, сорсы в соседнем сообщении в комментах, можете сами посмотреть как и что (там вроде не все сорсы уже не помню какие именно)

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

Ну да, так и есть. На C++ там тривиальная ручная реализация BigInt без оптимизаций, которая очевидно уступает вылизанной реализации длинной арифметики в питоне (которая, кстати, написана на С). Так что там не сравнение питона с С++, а сравнение Сишной реализации длинной арифметики в библиотеке питона с кустарной ручной реализацией (ну с примесью самого языка для обвязки, но вообще непонятно, какая там пропорция).

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

Не только в ml применяю такой подход, зачастую core логику выношу в с++ (в том числе и честную многопоточку) через pybind11 делаю обвязку , python использую как glue и для control plane (fast api, валидация и прочее)

Вот это самый оптимальный подход

ML это лишь вершина айсберга, 50 строк кода на keras полноценную модель выдают.
Куда чаще кажется его используют в микросервисах.
Микросервисная архитектура из-за однопоточной природы python/nodejs подобных языков была придумана.

Забавно, что язык, который многие считали несерьёзным из-за скорости, стал одним из главных инструментов в ИИ и машинном обучении. Видимо, в современных задачах важна не только производительность самого языка, а то, насколько быстро можно создавать и проверять идеи. А с огромной экосистемой библиотек Python просто оказался в нужное время в нужном месте.

Как запускатель сторонних програмных модулей идеален

очень красиво графики рисуете! ;-) выглядит так, как-будто "график постоянно идёт вправо и вверх" (это из юмора про внедрение ИИ)... а реалии таковы, что Python уже 3 месяца как очень стремительно теряет свои позиции в рейтингах популярности языков программирования - люди то "наелись" уже этих сказочек про "чудо-язык"
Python только лишь потому популярен, что те же математики, разрабатывающие ML-модели не хотят заморачиваться с изучением программирования... ну как бы клей он и есть клей - клеем и останется

3 мес спада доли на фоне 3 лет топ-позиции - это изменение структуры. Конечно питон перегрет, пусть остынет. Но учить его настолько легко, а скорое первое применение приходит так естественно, что обязательность изучения медленного языка воспринимается как мягкая странность, не более. И ведь учат его часто сами, потому что “легко”.

Преподы вузов в один голос отмечают высокую доходчивость примеров сложных концепций (ООП итп) на питоне, вероятно из-за случайного, но удачно придуманного краткого синтаксиса языка с отступами, без 80% знаков пунктуации из пугающих C++, JS итд.

да-да-да, а потом рождаются эти дебильные лозунги "Программирование - это просто!"...
Интересно, о каких же "сложных концепциях (ООП итп)" идёт речь? Видимо, те преподы и сами не особо в курсе, что даже дизайн самого Python вообще как бэ не ООП, если что вдруг... ООП там очень так "притянут за уши", а про этот анахронизм "краткого синтаксиса языка с отступами" я лучше вообще промолчу (по сути это как нумерация строк в Бейсике когда-то)

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

Даже ФП тут начинается быстро, скажем, за год (с микроконтроллерами еще быстрее). Про уши ООП и уподобить структурность нумерации строк - это вы знатнонабросили.

На мой взгляд, применять “всё программирование” просто негде и не в чем. А вот быстро изучить парадигмы, кайфануть от списковых включений, генераторов, декоратов, классов и работы модулей (и оттого что уже написано людьми в 0.9M свободных либ), и всё это на коротких и ясных примерах на питон - самое то.

Пнуть спящую змею всегда можно за медлительность, это честно и бесспорно. Во всем остальном выходит уже не так убедительно. Все-таки массовость и рейтинги - для масс показательнее любых наших мнений и опыта. У питонистов совершенно не подгорает от новостей про Julia, Nim, Mojo итп, а также от того что питон через раз дергает либы на C/etc, а половина web-либ дергает JS. Вот прмя вообще, полнейшее спокойствие. Переучиваться не так сложно, если первый раз училось легко.

> Непосредственной причиной появления языка был проект Amoeba.

Можно упомянуть, что проект вёлся под руководством самого Танненбаума.

> У Python не было одного переломного года.

Ну, переход на Python 3 это тот ещё переломчик был.

Поскольку заметный рост его популярности пришелся на 2010-е годы, многие считают, что язык появился сравнительно недавно. Но это неверно: Python старше большинства современных веб- и ML-фреймворков, массовой мобильной разработки и нынешнего AI-бума.

Что за странная мысль? Легко быть старше современных фреймворков потому что современный = недавний; ML, как следует из самой статьи, появился как раз с подачи Python;
Быть старше AI бума очень легко - практически все и всё старше чем этот самый бум.

Python это удачный бесплатный гибрид бейсика с матлабом.

Как по мне, то "классический C" легче для первоначального изучения, чем Python с его методами, декораторами и пр. Вспомните "Blue C" - тоненькая книжечка по нынешним меркам.

Если бы у Mojo / Rust / Julia была бы настолько развитая экосистема как у Петухона сейчас - про него бы давно все забыли, и в школах вернулись бы на PascalABC к слову

Эту мантру слышно лет 15 уже, особенно с Julia. Спасибо мантре - разрабы питона наконец-то стали ускорять его, и молодцы что делают это о-очень медленно, по длительному плану, не особо ломая легаси.

Школьники и студенты не выбирают Паскаль потому что рейтинг для них теперь всё, а опыт нас, старых дядек, довольно отрицателен.

Sign up to leave a comment.

Articles