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'а, каков его смысл, цель???



Последнее исправление: Edward_I (всего исправлений: 3)
Ответ на: комментарий от WitcherGeralt

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

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

re2c может «Use bit vectors as well in the attempt to coax better code out of the compiler», тогда получается меньше кода и больше ro-данных

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

Что понимаю? ололо каллбеки? Так в ноде тоже каллбеки, совсем недавно там был callback hell уровня twisted, просто потом сахарок добавили.

async/await gen.coroutine неважно. чем тебя send(None) смущает непонятно, тем более в реальном коде он ненужен.

Да любая библиотека с event loop`ом. хоть gobject. чем они все менее «нативные» чем нода?

А в си асинхронщина «нативная»? Что вообще значит «нативная»? Синтаксический сахар?

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

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

Много ты видел асинхронного кода на питоне без использования библиотек? В JS это всё не нужно, ивентлуп втрое в интепретатор.

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

Можно тебе задать простой вопрос почему если я в C оранизую цикл от 1 до 3-х компилятор развернет его? У нас есть закон который мешает компилятору статичный хэш преобразовать в switch например?

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

Мне вот интересно зачем ты с ним споришь? Он ведь мухлюет во всю. Он берт JS 2019 года и сравнивает с Python 2005 года (когда Go вообще небыло (был 80-х годов Go)).

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

Это закон природы? Компилятор видит A=10 и везде где используется A не пытается вытащить его, а пихает КОНСТАНТУ. Ну это хороший компилятор. Плохой так не делает. Тогда что мы спорим? Нам просто нужен способ показать компилятору - это СТАТИЧНЫЙ dict и все. В принципе он и сам ожет это сделать, в Java уже на этом собаку скушали....

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

Так асинхронность просто получается опциональной. С другой стороны, нормальную асинхронность в питоне поддерживают 1,5 библиотеки.

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

Что значит «городить»? т.е. если бы при запуске скрипта само бы делалось asyncio.get_event_loop().run_forever() принудительно, то оно стало бы нативным? Кстати, еще в начале нулевых был https://docs.python.org/2/library/asyncore.html

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

Ну я его в питоне не использовал, поэтому воздержусь.

Просто то, что вы описывали в контексте горутин запросто делается в расте с помощью actix. Правда async/await сахар ещё не завезли.

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

Это хорошо. Если она тебе не нужна — не используешь. Нужна — используешь.

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

В любом другом понимании «нативный асинхрон» — не имеющее смысла словосочетание. Ибо асинхрон можно напилить где угодно, где доступны неблокирующие сокеты / пайпы и сисколы. То есть примерно везде.

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

Ну тут если говорить о C++ то там уже контейнеры городят все кто хотят. dict (аналогов) будет штук сто. Кто STL какой нибудь возьмет, кто Boost. И в Java если брать списки есть массивы, векторы, коллекции. Это с 1 стороны дает больше возможностей, но и если выбрал не ту структуру - плати...

dem ★★
()
Ответ на: комментарий от ugoday
  1. Обязательное self для обращения к членам экземпляра класса.

это не вкусовщина, это эпичнейшая из фич

4 - вкусовщина, 5 - просто нытье, уровня «лишь бы к чему придраться»

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

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

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

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

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

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

Зачем Python? (комментарий)

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

Так ведь не я Откланялся... Поздравляю господин соврамши...

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

В JS как ни пиши, у тебя всё асинхронное

Нет.

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

А самое смешное, что вот взяли обновили компилятор с 10-го до 11-го и бабах памяти софт стал жрать в два раза больше и оказалось что их менеджер просто тредов создал в два раза больше.... Я уже не говорю как оно прекрасно падает пачками...

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

В питоне, насколько я понимаю, контейнеры - часть языка. В C/C++/Rust - часть std. Компилятор о них ничего не знает. Он знает только о базовых конструкциях и указателях.

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

А я что сказал? Была такая фраза, что вся история языка С++ это изобретение string. Поэтому все создают свои собственные контейнеры. Нужен List - сделаем. Нужен Dict сделаем. Кто делает Dict красно черными деревьями кто еще как. Не зря раньше Python не гарантировал очередности добавления и вывода ключей это реализация выпирала из абстракции.

Как можно сравнивать эти реализации.

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

Он управляет, а им управлять никак. Вспоминаем пачку планировщиков в ядре Linux. Ведь не просто так это было. Потому уж лучше я сам выберу в Python тот эвентлуп который мне удобнее...

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

В JS как ни пиши, у тебя всё асинхронное

Ну приехали. Асинхронными будут только обработчики событий, как и везде. Вся разница только в том, что рантайм скрывает точку входа в цикл. Но никаких асинхронных абстракций в языке до недавнего времени не было, приходилось все ручками и либами костылять, что вообще ничем не отличалось от twisted и т.п. Сейчас и в пистон завезли асинхронный сахарок, так что снова паритет. Просто в пистоне чуть менее чем все батарейки синхронные, так что и толку чуть, и таких всеобъемлющих асинхронных фреймворков как нода ждать не приходится.

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

Компилятор видит A=10 и везде где используется A не пытается вытащить его, а пихает КОНСТАНТУ.

Это работает только с примитивными типами, определенными в core language

Нам просто нужен способ показать компилятору - это СТАТИЧНЫЙ dict и все. В принципе он и сам ожет это сделать

Не может, это было бы нарушением стандарта

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

Выразился неудачно. Не свалил, настоящего match до сих пор не хватает, просто уже сроднился с костылем.

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

в Java уже на этом собаку скушали

Интересно, почему тогда существуют проекты вроде https://www.anarres.org/projects/jperf/

Кстати в строковом свитче, который добавили в Java 7, внутри используется обычная рантаймовая хэш-функция, а не идеальная

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

Вся разница только в том, что рантайм скрывает точку входа в цикл

Ну так это же киллер фича, когда речь про асинхрон. Это значит, что тебе не нужно запускать ивентлуп самому и самому же ему потом в топку что-то подкидывать. В питоне сахарком решается только вторая часть, а в джаваскрипте и это не нужно. С async/await, конечно, удобней, но чтобы справиться с адом коллбеков достаточно одних промисов, а полный их аналог можно было реализовать ещё в страдавние времена. Уж не знаю когда это появилось в jQuery, но аналогичные по фичам тому, что уже давно было там, промисы в браузеры завезли только недавно. В питоне что-то подобное можно было бы накостылять с помощью декораторов вокруг динамически создваемых функций, которые превращали бы их в коллбек, но удовольствие сомнительное.

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

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

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

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

Смотря с чем сравнивать. Иногда php — неплохой вариант. А для скриптов с логикой он удобнее, чем баш, си (tcc) или луа. Мне тоже приходилось скрипты на пхп писать, не вижу в этом ничего плохого. Грубо говоря, если знаешь пхп, но не знаешь ни питон ни перл, то можно и на php скриптовать. А для веб-скриптов это даже оправдано: остальные страницы всё равно на пхп, нет смысла плодить зоопарк языков.

Всё зависит от задачи.

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

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

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

Возможно... Но я не помню, чтобы python популяризировали. Разве какая-то компания его когда-то навязывала? По-моему, наоборот, он пришёл с низов, сначала набрал популярность в мелочах, потом в науке (лёгкий в изучении, встроенные комплексные и числа произвольной точности), потом набралась масса библиотек, а потом с их помощью его начали внедрять и в крупных задачах.

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

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

Я от анонимуса пишу обычно. Но тут такая тема, а гугл заглючил, капча после десятка тестов заявляла, что я робот. Пришлось зарегаться.

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

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

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

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

Да фиг с ней, с системой модулей и скоупами, я вообще не могу понять как это должно выглядеть. Ок, self остаётся в аргументах, остаётся при присваивании полей. Как-то так?

class A:
    ...
    def f(self, x, y):
        ...
        self.bestf = self.max
        return bestf(x,y)
    ...
Итак, кого мы вызвали в конце? Локальную переменную bestf? Глобальную функцию bestf? self.bestf? А что в неё передано в качестве self?

Хотя, по-моему, это в любом случае выглядит странно. В аргументах self есть, в присваиваниях полей self есть. Выходит, он есть везде кроме вызова методов? Ну и ради чего? Логичнее было бы сделать однообразно, если self есть, то он есть везде, не?

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

14ю страницу люди обсуждают мелочи и детали яп в холиварном стиле, вместо того, чтобы писать на них код 0\ выше в треде было: зачем — чтобы писать код. Занавес же.

Это такая разминка для мозгов. Все мы выбираем тот или иной язык программирования, но оправдано ли это? Действительно ли именно этот язык лучший? Сможем ли мы отстоять свой выбор в споре? Или, может быть, появились новые лидеры, и пора пересмотреть свои критерии и потратить Y минут на изучение другого языка?

Этот тред не всегда конструктивен, увы, но и интересные идеи тут тоже есть.

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

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

pynonymous
()

А какие специфические задачи решает Python?

Он позволяет писать работающий код любому дебилу и даже менеджер или собака смогут на нём что-то наваять.

В чём его смысл?

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

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

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

При этом, повсеместно говорят о популярности Python, как это модно-молодежно, его мол и учите.

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

Закрадываются подозрения.

Логично. У любого разумного человека должны закрадываться.

А не является ли широкая популярность (или слухи о ней) Python исключительно маркетинговым явлением, когда ЯП, опять же по неясным причинам, проталкивают сверху?

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

Если это так, то для чего это делают?

См. выше

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

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

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