LINUX.ORG.RU

Зачем Python?

 , ,


5

5

Обычно, ЯП - это инструмент, заточенный для решения задач в какой-то определенной сфере. У создателей ЯП была для него ЦЕЛЬ, которая наполняла смыслом бытие ЯП. Или же ЯП оказался обладателем таких характеристик, которые позволили эффективно решать определенные задачи, даже если изначально на него были другие планы. Это также объясняет необходимость существования ЯП.

Что-то низкоуровневое - Си, Rust, Ada; сервер - PHP, Go (а где-то Java, JS); клиент - JavaScript; энтерпрайз - C#, Java; скрипты для CLI - bash, lua (хотя сойдут PHP или JS); математика - R, Fortran; мобильные приложения - Java, Kotlin, Swift; начальное обучение - Basic, Pascal (можно Lisp, но лучше не стоит). Всё ясно, понятно.

А какие специфические задачи решает Python? В чём его смысл? Вот в (https://youtu.be/KnFrdzG79ak?t=532) МФТИ на информатике говорят, что Python - это классная штука, так как на нём можно всё (и в web, и в смартфон), мол универсальный. Но, имхо, это скорее минус, чем плюс. Это как швейцарский нож - может многое, но всё не очень качественно. В (https://youtu.be/bX3jvD7XFPs) MIT'e перевели обучение с эльфийского (Scheme) на Python. Ну для педагогических целей, для первокурсников, может Python и выглядит лучше. Хотя как аргумент в его пользу - ну так себе.

Пока я вижу, что в реальном мире Python (объективно) нужен для двух задач:

1. Поддержка legacy-кода, уже написанного адептами Python'а. Например, какие-нибудь скрипты для иксов, скрипты для сис.админов и т.п.
2. ML. Просто потому, что под ML были написаны нужные библиотеки (в нужном кол-ве и кач-ве) именно на Python. По неизвестным причинам написаны.

Сфера для (эффективного) применения Python'а очень мала, или мне показалось?

При этом, повсеместно говорят о популярности Python, как это модно-молодежно, его мол и учите. Закрадываются подозрения. А не является ли широкая популярность (или слухи о ней) Python исключительно маркетинговым явлением, когда ЯП, опять же по неясным причинам, проталкивают сверху? Если это так, то для чего это делают? А если не так, и он объективно эффективно решает какие-то задачи (почему его добрые люди и советуют), то объясните какие это задачи, какова целевая сфера применения Python'а, каков его смысл, цель???

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

но где самому треды создавать?

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

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

И на нём уже написали ядро операционки. По фану и исключительно как proof of concept, но тем не менее.

Ты считаешь, что есть какая-то фундаментальная проблема в написании ядра операционки на питоне или джаваскрипте?

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

Для веба это не важно. Веб редко оптимизируют по вычислительной скорости.

Для highload'a важно.

Но теперь мы применим особую питоновую магию!
$ time pypy nbody-python3-2.py

Что и требовалось доказать. Без JIT'a ловить нечего, как и каким-нибудь монстроузным JS-программам без V8. Без «магии» карета превращается в тыкву.

А PyPy скорее нужно сравнивать с Hack (HHVM), KittenPHP, Quercus (Resin) или что-там ещё есть из клонов PHP с JIT'ом. Хотя, да, такой популярности на низовом уровне как у PyPy - у них нет и близко. Наверное потому, что скорости PHP для малых и средних проектов хватает с головой))

И у всего есть свои ограничения - у JIT-версий свое, у стандартно-интерпретируемого - свое. У динамики свои преимущества. Почему PyPy нет дефолтом из под коробки в дистрах Linux'a, а все скрипты стандартно интерпретируются? Любой ли код на сервере будет гарантированно исполнен столь быстро?

В любом случае, признаюсь, иногда для cli PyPy может быть уместным. Хотя для cli многое часто завязано на I/O и сеть, и тут же нужно смотреть насколько ускорения PyPy помогут. Нужно попробовать.

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

Python не разрабатывался для web-а, и вряд ли является лучшим языком.

Да. Cейчас, он точно не лучший для веб-разработки.

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

Это вы так считаете, что следствие. Но это ни из чего не следует с необходимостью. Если я или кто-то ещё (тыц) используют PHP для cli, а он создавался для Web'a, то это ещё не значит - "просто следствие того, что питон PHP хороший язык общего назначения.".

Причины почему используют Python' в Web'e, могут заключаться в агрессивной популяризации Python'a. Некогда молодняк рванулся, набрали критическую массу, ну а потом уже стала лень изучать что-то новое для более эффективного решения задач в Web'e. Такой мысли не допускаете?)

Вот вы зарегались (впервые или специально отдельно) уже после создания ОП под интересным ником и занимаетесь исключительно апологией Python'a. Подозрения из ОП только усилились после ваших комментов.

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

Для highload'a важно.

Что и требовалось доказать. Без JIT'a ловить нечего, как и каким-нибудь монстроузным JS-программам без V8. Без «магии» карета превращается в тыкву.

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

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

Гвидо сделал в питоне динамическую типизацию просто потому, что был тупой?

Если коротко, то да. Потому что тупой или потому, что обладал ограниченными ресурсами (что, в общем, одно и то же).

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

Вопрос был поставлен русским по лору, ты на него не ответил.

Я и не собирался отвечать на тот вопрос. Я просто поправил тебя.

Для внешнего наблюдателя твоё поведение выглядит как юление жопой.

Для внешнего наблюдателя твоё поведение выглядит как баттхерт.

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

Из контекста очевидно, что вопрос был в обощенном операторе выбора из нескольких вариантов (обязательное наличие идиосинкразий Си не требовалось). Этот оператор был обозначен как switch-case только потому, что всем понятно, о чем речь.

Я и не собирался отвечать на тот вопрос. Я просто поправил тебя.

Ясно-понятно.

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

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

Ну муторно же.

Спроектируй не-муторные структуры данных.

Будешь сидеть это всё описывать вместо того, чтобы программировать. А потом переписывать.

А ты предпочитаешь сразу программировать и потом переписывать? Статическая типизация тебе в этом не помеха.

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

нужен switch-case

Хором говорят, что не нужен. Но никто так ни разу и не аргументировал.

Потенциальные проблемы с расширяемостью, зависимостями, поддержкой кода. См. SOLID.

Плюс «линейный» код выглядит яснее.

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

У pypy нет никакой популярности, потому что нет проблемы производительности. Питон фреймворки спокойно обрабатывают тысячи и десятки тысяч запросов в секунду http://klen.github.io/py-frameworks-bench/

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

В highload`е вообще другие проблемы, но производительность cpython узким местом не является.

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

Потенциальные проблемы с расширяемостью, зависимостями, поддержкой кода. См. SOLID.

Ну да, несовместимо с баззвордами.

Плюс «линейный» код выглядит яснее.

Лапша из if выглядит яснее? Да ладно.

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

Лапша из if выглядит яснее?

Возьми любой switch-case и перепиши на if. Потом покажи получившуюся лапшу.

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

Лапша из if выглядит яснее? Да ладно.

Лапша из if-ов - это не «линейный» код.

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

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

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

зачем тебе это? ты же никак не сможешь это использовать

Это не мне. Это у них там задача такая — посчитать 10000 знаков числа пи определённым алгоритмом. А мне просто стало интересно, как именно они считают.

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

В highload`е вообще другие проблемы, но производительность cpython узким местом не является.

Поэтому отдельные части больших проектов то и дело переписывали (и ещё переписывают) с PHP и Python'a — на Cи, Java и Go?

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

Причина - наличие офигенных веб фреймворков

Django-офигенный?

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

Поэтому отдельные части больших проектов

Поэтому большие проекты сначала написали на php и python, а потом переписывают отдельные части.

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

Если у тебя нет switch-case, у тебя будет лапша из if.

Можно писать код без switch и без множественного if.

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

Поэтому большие проекты сначала написали на php и python, а потом переписывают отдельные части.

Это вообще вопрос не технологий, а и бизнеса. Сначала нужно проверить спрос на продукт и на этом этапе производительность может быть (а может и не быть) не так важна. Когда дело идет дальше все «почему-то» переписывают.

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

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

Да ладно?

switch (name)
{
  case "a":
    id = 1;
    break;
  case "b":
    id = 2;
    break;
  case "c":
    id = 3;
    break;
  default:
    id = 0;
}

Против:

if name == "a":
  id = 1
elif name == "b":
  id = 2
elif name == "c":
  id = 3
else:
  id = 0

И где тут меньше визуального шума?

PS: switch по строке ещё и не в любом языке сделать-то можно.

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

Это вообще вопрос не технологий, а и бизнеса. Сначала нужно проверить спрос на продукт и на этом этапе производительность может быть (а может и не быть) не так важна. Когда дело идет дальше все «почему-то» переписывают.

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

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

По той же причине взлетел RoR.

10 лет назад. А сегодня руби никому не нужен.

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

По сравнению со всем, что есть, например, в php - да. Но не джанго единым, есть еще много всего. Есть алхимия, есть куча шаблонизаторов, есть tornado, aiohttp, etc

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

И тут питон, даже с сишными модулями, далеко внизу.

Но он тут. *мелодия из пиратов карибского моря*

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

На JS тоже. И?

Это какое? Хотя бы потенциально на железе можно запустить? Без кросс-компиляции?

В го есть async/await?

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

И с гонками данных

А где с потоками и абсолютно без этого?

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

Аргументация будет или что?

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

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

Есть куча очень популярных веб проектов сделаных на питона, да даже на django и что-то их не особо переписывают. Все эти ваши инстаграмы, spotify, reddit, dropbox, disqus, pinterest etc.

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

Иначе писали бы сразу на скоростном.

О том и речь. Производительность на хайлоаде важна, но на начальном этапе не так важна, как другие моменты (трудоемкость и соответственно расходы).

Естественно бизнес в IT связан напрямую с технологиями, но сам вопрос приоритета на начальном этапе - это вопрос бизнеса, а не вопрос бенчей или ещё чего-то. Появись волшебные бесплатные и квалифицированные сишники (в кол-ве с запасом) у компании - писали бы сразу на Си. И это тоже вопрос бизнеса - не нужно потом переписывать. Поддержка будет дешевле.

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

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

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

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

Придётся запихать интерпретатор на c туда же. В линуксе есть ассемблерные вставки, тут будут сишные и ассемблерные.

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

Хрень полная, в реальных больших проектах надо постоянно добавлять фичи и исправлять баги, а не экономить на спичках. Все места где затык и производительность важна и так на си - бд, системы кеширования, балансировщики и т.п.

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

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

Прикольно, но это сахар, а не другие юзкейзы.

Еще switch нужен для наколенных конечных автоматов, иначе утонешь в лапше.

Где там лапша?

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

что мы только что присвоили — self.a или локальную переменную a?

Я ж говорю, self пусть остается в аргументах, делай с ним что хочешь. Только вызовы собственных методов избавить от self. Ты прикинь какой тупой этот ваш питон, что не может распарсить контекст вызова. Классы не создают скоуп, это же ахтунг. А все потому что так устроена система модулей, не рассчитанная вообще на классы.

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

рассуждаешь как типичный байто*б. дело ни в скорости выполнения программы, ни в количестве обрабатываемых запросов. все это балансируется через nginx. нанять одного питонщика выгоднее чем держать двух джабо*бов, потому как затраты на покупку железа единоразовые, а зарплату нужно платить регулярно. именно поэтому java, созданная как язык программирования для интернета (могу сфоткать страницу книги 1997, где это написано) не приобрела в интернете успеха. сейчас java - это легаси 20-летней давности аля кровавый интырпрайз и мобильная разработка. так что все твои дальнейшие потуги вызвать флейм не имеют особых перспектив. был бы умнее понял почему php/javascript/python востребованны. сейчас фронтендщикам платят больше чем явистам. сиди учи свою яву. у питона не было агрессивной популяризации. его развитию всегда мешал и до сих пор мешает отсутствие хостингов с поддержкой питона. по этой же причне до сих пор популярен кал мамонта под названием django ведь говнохостинги есть только для django-приложений. на питоне пишут серьезные приложения типа всяких систем мониторинга или корпоративных порталов для банков и гоструктур. там миллионы строк кода, но ты же в своем мухосранске в вакансиях видешь только php и делаешь какие-то выводы. выводы неверные. мне синтаксис питона тоже не особо нравится. мне синтаксис яваскрипта больше по душе, но в nodejs до сих пор не переписали стандартную библиотеку для использования промисов и альтернатив нет.

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

В твоём языке программирования есть вложенные функции?

class A:
    ...
    def f(x):
        a = CallableObject()
        ...
        a()
        ...

    def a(self):
        ...

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

Ты же сам говорил, что кейс в питоне не нужен.

Если я когда-то (когда?) и говорил такое, то уже передумал.

А еще лучше - match вместо switch (или switch с возможностями match).

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

Если у тебя нет switch-case, у тебя будет лапша из if.

Можно писать код без switch и без множественного if.

Можно, конечно. Можно и на брейнфаке писать, если не интересует ничего, кроме «можно».

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

If это разветвление по произвольному предикату, а switch — по шаблону, сопоставляемому со значением. Ты еще скажи, что for в сишке не нужен и сахар, ведь все можно сделать через while.

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

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

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

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

при копипасте ифов тоже много чего интересного может пройти незамеченным

Но можно хотя бы отдалённо реальный пример, когда switch-case лучше чем if-elif?

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

if (request('action') == 'do1') {
    //
} else if (request('action') == 'do2') {
    //
} else if (request('action') == 'do3') {
    //
} else {
    //
}


примеров много, на самом деле, и совсем не обязательно держать их всех в голове

Многопоточность нужна зачем?

это у питонистов юмор такой?

Для параллельных вычислений?

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

Прекратите придираться к словам

3 столпа ООП для питонистов - «придирка к словам»? ну ок, no comments.

множественное присваивание, распаковка аргументов, lists comprehension

невероятные умения. правда почему-то присутствуют даже в PHP

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

Хотя бы потенциально на железе можно запустить?

В qemu же. Сомневаюсь что ваше go-ядро запустится на реальном железе.

Оно там не нужно, модель асинхрона другая.

Ну то есть нет. Всё на колбеках? Ну или вы по «асинхроном» понимаете что-то другое.

А где с потоками и абсолютно без этого?

Rust же.

RazrFalcon ★★★★★ ()
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)