Питон, пожирающий мир: как побочный проект одного разработчика стал популярнейшим языком программирования

Автор оригинала: Nick Heath
  • Перевод

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



Гвидо Ван Россум в штаб-квартире Dropbox в 2014 году

В конце 1994 года группа избранных программистов с разных концов США собралась для обсуждения своего нового секретного оружия.

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

«Особенно мне запомнился один человек, сказавший: ’Не говорите никому, что я здесь, потому что то, что мы используем питон, является конкурентным преимуществом’. Это было их секретное оружие».

Даже на этой ранней встрече в бюро государственных стандартов США в Мэриленде, как говорит Уорсо, было очевидно, что питон предлагает нечто новое в вопросе лёгкого написания кода и простого достижения результата.

«Когда мне впервые показали питон, я знал, что это нечто особенное. Это было сочетание читаемости и радости от написания кода на питоне», — вспоминает он.

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

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

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

Ранние годы питона


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

Этот язык программирования появился, как сторонний проект программиста из Нидерландов Гвидо Ван Россума. В конце 1980-х ван Россум работал над распределённой системой в Centrum Wiskunde & Informatica (CWI), нидерландском государственном исследовательском центре математики и информатики. Разочаровавшись недостатками существующих языков программирования, он решил сделать новый – такой, который было бы легко использовать, но при этом обладающий большими возможностями.

Для постороннего человека задача создания собственного языка программирования похожа на заявление вроде «Я построю себе самолёт», но у ван Россума, которому тогда было за 30, была определённая фора. В CWI он три года работал с командой, создавшей ABC, интерпретируемый язык программирования, поэтому у него уже было представление о том, как можно сделать интерпретатор, исполняющий инструкции программиста, и какие синтаксические строительные блоки нужны для нового языка.

Также важно понять, насколько сложно было сделать что-либо при помощи ограниченных возможностей доступных ван Россуму в то время языков программирования. Распределённая вычислительная система Amoeba, с которой он работал, требовала от него использования С или командной строки Unix – у обоих вариантов были серьёзные ограничения. С требовал от разработчиков не только борьбы со сложностями ручного управления памятью и навигации по минному полю возможных ошибок – в нём не было библиотеки кода для повседневных задач разработчика, которую можно было бы использовать многократно, из-за чего разработчикам с каждым новым проектом приходилось заново изобретать велосипед. А у командной строки Unix были свои проблемы – там было большое разнообразие инструментов для распространённых задач, но она работала так медленно, что не справлялась со сложной логикой.

Ограничения, налагаемые этими языками на разработчиков были такими, что создание своего интерпретируемого языка – который взял бы лучшие свойства у ABC – реально казалось Ван Россуму наилучшим вариантом.

«Я, в общем-то, подумал: ’Ну а почему бы мне не создать свой собственный язык’, украв идеи у ABC, но уменьшив размер проекта от того, что мы делали три года, до того, что я сам бы смог сделать за три месяца, и вот так родился питон», — говорит он. Ван Россум по-настоящему начал работать над этим в конце 1989 года, а имя позаимствовал у любимой комедийной труппы "Летающий цирк Монти Пайтона" – ассоциация со змеями и логотип с завязанным питоном появились позже – и работал над проектом по возможности.

«В то время у меня не было богатой социальной жизни. Так что, вместо того, чтобы пялиться в телек, я писал код, или иногда делал и то и то сразу», — признаётся он.

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

«Не знаю, насколько серьёзно я верил в то, что это сделает меня более продуктивным. Думаю, что я частью просто наслаждался идеей того, чтобы начать свой проект, писать такой код, который мне хотелось, и разрабатывать его так, как я хотел. Мне нравится программировать», — говорит он.

И если для обычного человека идея создания собственного ЯП может показаться необычной, у ван Россума была неплохая компания. В конце 1980-х из-за разочарования в возможностях существующих инструментов появилось множество новых, обретших популярность языков. Знаменитое высказывание Ларри Уолла гласит, что его побудила создать язык Perl сложность решения задач, а также обилие «лени, нетерпения и высокомерия». Поиски лучшего языка для создания интерактивных инструментов проектирования интегральных схем побудили Джона Остерхаута создать Tcl.

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

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

«В тот момент у меня были все базовые компоненты интерпретатора и языка. Простые программы на питоне, написанные для первой версии интерпретатора, вероятно, будут работать и сегодня», — говорит он, добавляя, что функции определялись так же, отступы работали тем же образом, словари и кортежи создавались идентично, а также там была знакомая интерактивная строка ввода, где можно писать код и сразу получать результаты.

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

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

«Помню в 1985 году я впервые посетил США, поехав в отпуск с магнитной лентой в рюкзаке», — говорит ван Россум.


Гвидо ван Россум в 2001 году, когда был основан Python Software Foundation

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

«Неудивительно, что у нас не получилось активно распространить ABC, несмотря на все его чудесные качества», — говорит он. Но интернет-революция набирала обороты, и распространять питон было уже гораздо проще – чемодан с плёнками уже не требовался.

Ван Россум выпустил питона в мир через новостную группу alt.sources в 1991 году, практически на условиях лицензии с открытым кодом – хотя такое понятие появится только через шесть лет. И хотя интерпретатор питона приходилось скачивать с сети Usenet в виде 21-й части, которые потом нужно было собрать в один файл и разархивировать, этот механизм доставки всё равно был куда как более эффективным, чем развоз физических копий, предпринятый за несколько лет до этого.

«Я надеялся на какой-то успех, но у меня уже был опыт выпуска другого проекта, который в итоге обернулся фиаско», — говорит он.

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

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

Почему питон победил


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

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

Уорсо говорит, что питон достиг баланса в удобстве использования, не принося в жертву возможности – существовавшие в начале 1990-х языки такого предложить не могли. «Я много программировал на Perl, Tcl и C, и это было не очень интересно. Потом на сцену вышел питон, и я подумал: ’Ого, вот теперь программировать снова интересно’», — говорит он.


Барри Уорсо на первой рабочей встрече пользователей питона в 1994

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

Финтан Райан, директор исследований команды стратегий прикладных платформ из аналитической фирмы Gartner, говорит, что ясность кода сыграла большую роль в завоевании симпатий разработчиков, как сейчас, так и в 1990-х, хотя придание такой важности отступам разделило сообщество. «Оно предлагало очень ясный синтаксис. В других языках тоже можно было писать код так, но питон принуждал к этому автоматически. Некоторые программисты это обожают, а другие ненавидят», — говорит он.

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

Кроме читаемости, говорит Райан, питон почти сразу предлагал встроенную функциональность, отличавшую его от других языков. «Там была такая функциональность, как классы и обработка исключений. Питон также поддерживал такие функции, как lambda, map и filter, оказавшиеся очень полезными во многих случаях», — говорит он.

Питон мог бы и не появиться, если бы популярные ЯП в 1980-х были бы лучшего качества. Одной из мотиваций ван Россума к созданию питона стала несовместимость скриптового языка Perl и распределённой вычислительной системы Amoeba, над которой он работал в CWI. «Питону повезло с тем, что Perl невозможно было портировать на Amoeba, — говорит он. – Если бы Perl удалось портировать на Amoeba, я бы никогда не задумался о создании собственного языка».

Хотя питон создал после выхода базу истинных приверженцев, в 1990-х он был аутсайдером среди ЯП. Ван Россум говорит, что за первое место соревновались Tcl/Tk и Perl, и у обоих из них была такая же цель, как у питона – простота использования и богатые возможности.

«В 90-х в первой тройке ЯП определённо первое место занимал Perl – он был чем-то вроде 400-килограммовой гориллы – затем шёл Tcl/Tk, а питон занимал скромное третье место», — говорит он.

Сегодня питон растёт быстрее всех остальных ЯП, если считать по активным разработчикам – так следует из ежегодного опроса разработчиков Stack Overflow, одного из наиболее всеобъемлющих обзоров ЯП – а Perl сжался до такого состояния, что его уже не упомянули в последнем отчёте.

Этот взрывной рост показан на графике внизу, где отмечено, как количество просмотров вопросов, связанных с питоном на сайте Stack Overflow выросло быстрее, чем количество просмотров вопросов из других языков.



Так как же питон победил своего давнего соперника, и как объяснить настолько сильно различающиеся судьбы двух ЯП? Ван Россум считает, что в частности это произошло из-за того, насколько легко поддерживать базу кода, когда она выходит за определённые рамки. «Люди считали, что Perl идеально подходил для написания скриптов в 10 строчек, — говорит он. – Но когда у вас есть 500 строк основного кода и несколько тысяч строк в библиотеках, требуется огромная дисциплина для того, чтобы код можно было поддерживать и далее. В питоне при этом, даже если у вас нет такой дисциплины, код будет достаточно легко читать и поддерживать».

Это свойство питона, комбинация простого для начинающих языка, который в то же время достаточно надёжен для того, чтобы писать на нём крупные приложения, ван Россум и относит на счёт его первоначального успеха в 1990-х.

«В интернете было несколько разработчиков – большая часть этой истории относится к ранним этапам развития интернета – которым нужно было писать всё более и более крупные приложения, и которым нравилось, что в питоне на это можно потратить гораздо меньше усилий, чем если использовать C, C++ или Java».

С ростом популярности питона в 1990-х ван Россум, всё ещё работавший в CWI, обнаружил, что его детище всё больше связывает его с людьми со всего мира. «Я сделал нечто, и оно связывало меня с людьми со всего мира – людьми из Австралии, из США, из других европейских стран. Мне это безумно нравилось», — говорит он.

Питон и веб


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

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

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

Кроме того, говорит Райан, ЯП был достаточно гибким, и его так легко было выучить, что он нравился очень разным пользователям с разным техническим опытом. «Сисадмины и другие люди начали использовать этот язык для автоматизации систем и программирования, разработчики – из-за таких вещей, как функциональное программирование и классы с наследованием; у Perl, к примеру, было гораздо меньше подобных возможностей, — говорит он. – После того, как люди знакомились с языком, а кривая обучения у него была довольно пологой, они очень быстро начинали выходить на высокий уровень продуктивности».

К 1994 году питон привлёк внимание Майкла Маклэя, одного из руководителей в государственном бюро стандартов США (NBS), которое сегодня преобразовалось в государственный институт стандартов и технологий (NIST). Предвосхитив любовь к питону исследователей и учёных за простоту его использования, Маклэй заинтересовался тем, смогут ли использовать питон учёные из NBS, у которых, как говорит ван Россум, «были собраны значительные объёмы данных, но не было хороших программистов».

Чтобы помочь продать идею использования питона другим членам бюро, Маклэй пригласил ван Россума, который тогда ещё работал в CWI в Нидерландах, чтобы пару месяцев поработать в NIST в качестве приглашённого исследователя. Это стало катализатором будущей эволюции питона и серьёзно изменило жизнь ван Россума.

Именно в то время была проведена первая рабочая встреча пользователей питона, которая прошла в офисах NBS, и на которой ван Россум, Барри Уорсо и другие первые энтузиасты питона встретились, чтобы обсудить, как они используют питон, и какие надежды возлагают на его будущее развитие.


Ван Россум на первой рабочей встрече пользователей питона, вместе с Уорсо и Роджером Массе, в то время работавшим вместе с Уорсо в CNRI.

В офисах NBS ван Россум познакомился с Бобом Каном, известным своей ролью в разработке одной из основных технологий интернета, протокола TCP/IP.

На встрече ван Россуму предложили поработать с Каном в корпорации государственных исследовательских инициатив (CNRI), некоммерческой исследовательской группе из Виргинии, занимавшейся стратегической разработкой сетевых технологий.

Как питон откликнулся на необходимость в новом типе ЯП, так и предложение о работе, по словам ван Россума, поступило как раз в тот момент, когда он задавался вопросами о своём будущем в CWI.

«CWI был более академической организацией, они постоянно давили на меня, чтобы я либо защитил докторскую, либо нашёл работу где-то ещё», — говорит он.

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

Именно в CNRI ван Россум скомпоновал многие структуры, необходимые для управления ЯП питон, при помощи команды из таких же энтузиастов языка. Устроившись в CNRI в апреле 1995 года, ван Россум стал руководить небольшой командой разработчиков, работавших над ПО Knowbot Programs, мобильными агентами, разработанными для запуска на распределённых компьютерных системах типа интернета.

Команда работала на языке питон, и к ван Россуму присоединились Джереми Хилтон, Роджер Массе, Барри Уорсо, Кен Мангеймер и Фред Дрейк – все они позже сыграют важные роли в питон-сообществе.

«У нас получилась группа из 4-10 человек, большая часть которых работала в CNRI, и они стали ядром разработки питона», — говорит ван Россум.

Пока ван Россум работал в CNRI, эта команда помогла ему сделать сайт python.org, CVS-сервер для управления изменениями базы кода, и список рассылки для Python Special Interest Groups – групп, работавших над улучшением и поддержкой ЯП питон.

Сообщество пользователей питона с момента его выхода в 1991 году сильно выросло, и во второй половине десятилетия этот язык привлёк значительную базу пользователей со всего мира. В этот период началась формализация управления языком, разработчики основали предшественника Python Software Foundation (PSF), которая появится в 2001. С ростом сообщества проходившие два раза в год рабочие встречи по языку, начавшиеся в 1994 году, превратились в более крупные ежегодные мероприятия, а в итоге – в ежегодный PyCon от PSF, который проводится и по сей день.

К началу XXI века язык перерос возможности любого отдельного человека, крупное сообщество играло активную роль в разработке языка – долгий путь был пройден с лета 1994 года, когда ранние пользователи языка беспокоились, что с ним случится, «если Гвидо собьёт автобус».

Но ван Россум продолжал играть ключевую роль, и не перестал оставаться ядром языка – это очевидно из шутливого прозвища "великодушного пожизненного диктатора" (BDFL), существующего уже много лет.

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

Райан из Gartner говорит, что нет ничего необычного в том, чтобы создатель языка оставался его распорядителем, как Ларри Уолл с Perl и Райан Дал с Node.js, однако он уточняет, что ван Россум известен своей объективностью в управлении питоном. «Что касается направления развития проекта и управления им, все признают его очень сбалансированным», — говорит он.

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

Эволюция питона


В промежуточных годах питон совершил гигантские шаги, в 2008 году был представлен модернизированный Python 3.0, а в последнее время в управлении языком наметились серьёзные изменения. Они начались в прошлом году, когда ван Россум уступил лидирующую роль на посту BDFL, после того, как сообщество разделило предложение ввести в язык присвоения в выражениях, обсуждение которых было сделано в заявке Python Enhancement Proposal PEP572.

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

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

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

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

Он считает, что изменение процесса разрешения споров произошло, в частности, из-за того, какое огромное количество людей используют сегодня питон.

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

Ранее в этом году ключевые разработчики питона – поддерживающие и обновляющие интерпретатор CPython – выбрали управляющий совет, который должен планировать будущее языка. Туда вошли ван Россум, Уорсо и их коллеги Бретт Кэннон, Кэрол Уиллинг и Ник Коглан. Уорсо говорит, что это изменение было необходимым, чтобы управлять языком с настолько быстро растущей базой пользователей.

«Думаю, Гвидо реально казалось, что он держит на своих плечах весь мир в одиночку, — говорит он. – Это прокатывало 25 лет назад, когда сообщество питона было гораздо меньше, и язык был меньше, но сегодня это слишком много для одного человека, понимаете? Думаю, что чисто для здоровья и возможности участвовать в действиях сообщества, хорошо было распределить эту нагрузку на пятерых», — говорит Уорсо.

Первые выборы в управляющий совет будут проходить после каждого выхода новой версии питона, что, по словам Уорсо, проложит путь следующему поколению лидеров. «Если питон будет жив через 25 лет, то им уже будем управлять не мы с Гвидо, понимаете?» – говорит он.

Организацию управляющего совета приветствовало и сообщество ключевых разработчиков. Одна из них, Мариатта Виджайа, говорит, что это действие кажется шагом в верном направлении. «Управляющий совет лучше одного человека, принимающего все решения – это слишком большая ответственность и груз, — говорит она. – Это хороший признак, и благодаря этому у сообщества будет больше входящей информации».


Один из ключевых разработчиков, Мариатта Виджайа

Будущее питона


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

На встрече пользователей ЯП питон в этом году сооснователь BeeWare Рассел Кит-Мэги предупредил всех, что питон столкнётся с «экзистенциальным риском», если не улучшит поддержку мобильных и новых веб-платформ. «Телефоны и планшеты так сильно проникают на рынок, что настольным компьютерам и ноутбукам такого и не снилось, и при этом у сообщества нет идей по поводу того, как можно использовать питон на этих устройствах, — сказал он, указывая на то, что его сын использует iPad в школе. – Что будет с питоном, когда ноутбуки окажутся нишевыми устройствами?»

Кит-Мэги, чей проект BeeWare нацелен на то, чтобы единожды написанную на питоне программу можно было запускать где угодно, выкатил список проблем, которые сейчас есть у питона в области поддержки платформ, отличных от стандартных ПК x86.

Он указал на следующие недостатки: необходимость улучшения поддержки компилируемого кода для новых платформ, не совместимых с x86; набор тестов питона падает на мобильных и веб-платформах; установочный размер питон-приложений раздут и его нельзя урезать до небольшого подмножества зависимостей; необходимость потратить усилия на доработку библиотеки asyncio для работы с GUI под Android, Windows и в вебе; количество модулей в стандартной библиотеке, несовместимых с интерпретаторами питона, отличными от CPython.

Уорсо говорит, что Кит-Мэги говорит правильные вещи, и считает важным вопросы, связанные с обновлением питона для новых платформ – телефонов, планшетов, новых веб технологий типа WebAssembly.

«Пока что питон ничего хорошего предложить не может, — говорит Уорсо насчёт мечты о возможности скачать приложение для iPhone или Android, и „даже не узнать, что оно написано на питоне“.

С ростом количества ядер процессора в современных чипах (до 48 ядер в последних серверных процессорах от Intel) Уорсо также с нетерпением ждёт, когда питон лучше научится распределять задачи по нескольким ядрам.

Ему очень интересен потенциал работы Эрика Сноу над субинтерпретаторами и тем, как они могут расширить возможности питона по одновременной работе процессов. „Мне бы очень хотелось увидеть больше работы по поводу использования всех преимуществ многоядерных систем“, — говорит он.

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

»Для Python 3.8 он ещё не успеет подготовиться, возможно, это будет в версии 3.9, — говорит Уорсо. – Думаю, мы увидим это в ближайшие два-два с половиной года. Я настроен оптимистично. Очень рад, что Эрик продолжает работать над этим, поскольку считаю это важным".

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

Питон-сообщество также предпринимает шаги к модернизации стандартной библиотеки языка со встроенным кодом, и недавно опубликовало предложение об удалении устаревших модулей из неё; это ответ на недавнюю критику о состоянии стандартной библиотеки питона. Она обычно считается одной из сильных сторон языка, её можно использовать для решения широкого спектра обычных задач, поэтому часто говорят, что у питона «батарейки в комплекте». Однако на встрече питон-разработчиков в этом году был задан вопрос, не лучше ли позволить людям выбирать библиотеки из репозитория PyPI, вместо того, чтобы поставлять всю эту функциональность вместе с языком в качестве стандартной библиотеки.

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

«Я говорил на PyCon с девушками из группы PyLadies, из Индии и Африки. Они сказали: ’Когда люди слышат про питон или PyLadies, они представляют себе людей из Северной Америки или Канады, а на самом же деле в других частях света тоже имеется обширная база пользователей. Почему их видно так редко?’ И это мне кажется разумным. Поэтому я бы хотел увидеть такое, и думаю, что мы все должны принять в этом участие».

В итоге, несмотря на шутливую идею с заведующим всеми вопросами «великодушным диктатором», в последние годы все идеи, изменявшие питон, появились за счёт сообщества, говорит Уорсо, благодаря людям, использующим питон по максимуму, и открывающим двери для новых пользователей. «Реально всё происходит снизу вверх, со стороны сообщества, а не наоборот», — говорит он.

В качестве примера того, как простые проекты сообщества могут серьёзно влиять на питон, можно привести Type Hints – особенность Python 3.5, вдохновлённая проектом mypy, запущенным аспирантом в 2012 году. Эти «намёки» позволяют проводить необязательную проверку типов, что позволяет разработчикам отлавливать ошибки особого типа, которые иначе могли бы ускользнуть от них.


В этом году питон помог собрать из кусочков первое изображение чёрной дыры

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

«Тот факт, что это позволяет питону масштабироваться для нужд более крупных компаний – таких, как Instagram, который, по сути, работает на базе Python 3 – для меня просто бесценен», — говорит Уорсо, упоминающий asyncio как ещё один пример идеи, поданной сообществом, которая может серьёзно повлиять на возможности языка.

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

«У нас есть весьма плотное сообщество ключевых разработчиков, у которых появилась новая система правления, и я думаю, что мы лучше подготовлены к тем запросам, которые поступают к питону и его эволюции», — говорит он, нахваливая глубокое понимание конкретных аспектов языка, существующее в сообществе.

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

«Это просто снесло мне крышу. В питон-сообществе есть пара человек, которых я считаю нашими безумными учёными. Они всегда пытаются раздвинуть границы возможностей языка».
Поддержать автора
Поделиться публикацией
AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Подробнее
Реклама

Комментарии 108

    +2
    офф Если бы еще питонщикам платили так, как они пожирают мир.
      –2
      Data Science, который практически весь на питоне, полне неплохо получают.
        +5
        Питон — это инструмент. Платят не за знания языка, а за умение его применять в нужной сфере.
          –1

          Если походить по собеседования, то 90% интересно не умение его применять, а именно знание языка...

            +3
            Мы явно разные собеседования проходили. У меня прямо противоположный опыт.
            Видимо, зависит от места или даже скорее от проводящего собеседование.
          +8
          Платят не питонщикам или жиесникам, платят дефицитным специалистам. То что вы отлично пишите на python, не делает из вас Senior Backend Developer. Senior Backend Developer-ом вас делает знание баз данных их преимуществ и недостатков, а python лишь делает вашу жизнь лучше в работе с этими базами данных, к примеру.
            –1
            Об этом и был сарказм. Это просто умение работать вспомогательным инструментом.
            0
            исключительно имхо — это вопрос времени
            +1
            А почему питон, а не пайтон?
              +3
              Тогда лучше уж сразу «Python».
              Но если по-русски, то «Питон» как-то ближе.
                +3
                > имя позаимствовал у любимой комедийной труппы «Летающий цирк Монти Пайтона»
                Так транслителируется уже правильно в русском как Пайтон, есть прецедент уже.
                +1
                … наверно потому что змея (а не комик-группа, как было ранее)
                  +2
                  А когда он стал змеёй? Изначально же в честь Monty Python's Flying Circus, причём «Monty Python» тут имя, а не змея.
                    +2
                    Но на логотипе языка таки два питончика.
                      +1
                      А эти Монти Пайтоны они точно просто так пайтоны, без всякой связи со змеями? :-)
                        0
                        Ну, если только когда то давно, когда произошло это имя.
                          0
                          Нет, так не бывает. Имя или связано, или не связано. И попробуйте представить, как вообще читали python греки. В контексте античности это слово русском языке читается Пифон, вообще-то. :-)
                  +2
                  Разочаровавшись в недостатках существовавших языков программирования


                  Простите, но точно ли он разочаровался в недостатках языков, а не в самих языках?
                    +7
                    Если Python поедает мир, то это только от безысходности. Поедать ему позволяем мы, используя его где надо и где не надо. Это тот же BASIC, только немного моддированный.
                    Не компилятор. Нет нормальной IDE с отладчиком. Две конкурирующие версии. Гвидо, прибейте уже одну из них.
                    Отступ в 4 пробела, почти как в Фортране. Дадим свой ответ Питону! Новый и быстрый.
                    Ура, товарищи!
                      0
                      Если Python поедает мир, то это только от безысходности. Поедать ему позволяем мы, используя его где надо и где не надо.
                      Согласен. Но велик соблазн использовать удобный инструмент там, где удобных альтернатив нет.

                      Это тот же BASIC
                      Это мощный язык с простотой бейсика. Об этом пишется в статье.

                      Нет нормальной IDE с отладчиком.
                      В смысле, нет? Поясните.

                      Отступ в 4 пробела
                      Вы хвалите или осуждаете?
                        0
                        Но велик соблазн использовать удобный инструмент там, где удобных альтернатив нет.

                        Это где их нет?


                        Это мощный язык с простотой бейсика.

                        Что делает его мощным?

                          0
                          Это где их нет?

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

                          Что делает его мощным?

                          Семантика и синтаксис.
                        +3
                        PyCharm же есть!
                        А насчёт второй версии — вроде же её вот-вот прекратят поддерживать
                          +3
                          По поводу второй версии можно уже сказать, что её прибили давно. Просто некоторые по разным причинам всё ещё пинают труп (признаюсь, но я в том числе).
                          0

                          PyCharm community Вам уже не годится на роль нормальной ide?

                            0
                            даже плагин в Eclipse сносно работает. Правда там так и не убрали пару странностей. Язык вообще то не привязан в IDE и дело совсем не в этом.
                            0
                            LicLipse на базе Eclipse вполне себе хорош. Что-то не нравится — руки в ноги и допиливайте сами, комитьте на здоровье дополнения
                              +1
                              В Фортране отступ таки был один, служил он совсем для других целей и был наследием перфокарт.
                                0
                                Не компилятор — это фигня вопрос. Профилируешь и в ботлнеках jit вставляешь.
                                –2

                                Всегда было любопытно — как может язык повернуться назвать ПРОСТЫМ объектно-ориентированный ЯП в котором для получения размера коллекции используется ФУНКЦИЯ len.

                                  +2
                                  Если действительно любопытно, то почитайте про dunder methods. По-моему, всё просто и len вполне себе метод.
                                  class A:
                                      def __len__(self):
                                          return 42
                                  
                                  x = A()
                                  print(len(x)) # 42
                                  print(x.__len__()) # 42
                                    +2

                                    Объектно-ориентированный язык — это не обязательно тот, в котором методы через точечку вызываются.

                                      0
                                      Функции тут тоже являются объектами, всё нормально.
                                      +3
                                      не то подметил
                                      как может язык повернуться назвать ПРОСТЫМ объектно-ориентированный ЯП
                                      где програмист должен держать в уме тип переменной, или тип хешируемый или нет, а если произошла ошибка то причина может быть в чёрт знает каком месте но не в том где бросается эксепшн.
                                      А Питон действительно подходит для любой задачи… только с некоторыми корректировками.
                                      У меня даж идея о неком P-- с точным универсальным синтаксисом для любых скриптов и компиляции.
                                      Эта мода __вот_так_называть__, писать [x for y in z for x in y], и многое другое
                                      Вот как особенности тараканов одного человека могут загадить весь мир.
                                        +3
                                        1. График интересный, конечно. На нем бы лидировал язык мумбу-юмбу, у которого 10 пользователей, но рост 300% в год. Надо бы аудитории все-таки сравнивать.
                                        2. Сейчас мир стремительно движется в сторону строгой типизации (с дженериками), JIT и лямбд: TypeScript, PHP и т.д. Вот бы Питону тут поднажать. Хотя он и старается (async-await вон добавили одновременно с JS, хотя и сильно позже C# и Hack). Тайп-хинты без дженериков и без энфорсящих их линтера, встроенного в экосистему по умолчанию, — совсем слабы. И многострочные лямбды отсутствуют by design, приходится «настоящие» именованные функции объявлять. Ну а про JIT и совсем печально (при всех обилиях разных ЫPython-ов).

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

                                          Дженерики есть в тайп хинтах! Дженерик классы наследуются от Generic из модуля typing, а параметры типов создаются при помощи TypeVar оттуда же.

                                            0
                                            Ооо, здорово, не знал! docs.python.org/3/library/typing.html — синтаксис, правда, чуть странноват. Многословный. Интересно, можно ли сделать, как в TypeScript, добавление-вычитание свойств, мэтчинг по набору свойств, типы-альтернативы и т.д. Возможно, кстати, что в питоне это и не нужно — другая применимость.
                                              0

                                              Типы альтернативы это объединения? Тогда они есть. И есть тайп-алиасинг. Матчинга по свойствам и прочей структурной типизации вроде нет, но у нас всё же не js действительно, нет даже синтаксиса для создания объектов "в воздухе".

                                            +1
                                            C JIT не так, чтобы печально. Numba очень хорошо работает.
                                              0
                                              Сейчас мир стремительно движется в сторону строгой типизации (с дженериками), JIT и лямбд: TypeScript, PHP и т.д. Вот бы Питону тут поднажать.

                                              Это уже будет другой язык.


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

                                              Чем поражает? Есть другие языки на уровне.

                                                +1
                                                Например? Только, пожалуйста, не Хаскель — нет, я люблю Хаскель и он тоже красив и даже научен, но он слиииишком переусложнен, барьер на вход громаднейший, особенно с IO перемудрили в угоду научности.
                                                  0
                                                  Чем поражает? Есть другие языки на уровне.

                                                  самый ближайший по уровню это имхо JS но там такое вытворяют что все несуразности Питона это детский лепет
                                                    +1
                                                    Ой ну ради бога, нет в JS изящества и строгости, это мешанина всякой всячины еще почище PHP. Даже TypeScript — и тот совершенно не строг и не изящен.
                                                      0
                                                      просто близкий по уровню, или я за уровень понял не то.
                                                      Не только
                                                      изящества и строгости, это мешанина всякой всячины
                                                      а я ж писал
                                                      такое вытворяют что все несуразности Питона это детский лепет

                                                      Единственное поповоду стат. типизации. Типа нельзя по желанию включить в Питон неявную стат. типизацию. Тогда изменения будут у компилятора/ интерпретатора и минимум у языка. В этом кроме прочего и изъящество
                                                    +1
                                                    он слиииишком переусложнен

                                                    _Пере_усложнённость означает, что можно добиться того же, но с меньшей сложностью. А вот это вот совсем неочевиднно.


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


                                                    особенно с IO перемудрили в угоду научности

                                                    С IO перемудрили в агде, в хаскеле всё норм.

                                                  0

                                                  Я ради интереса иногда тыкаю в другие языки, и как раз вот позавчера тыкал в питон. Изящества и четкости не заметил, а вот неприятные ощущения — почти сразу.

                                                    0
                                                    и как раз вот позавчера тыкал в питон

                                                    хеллоу ворлд написали? что там натыкать за день можно
                                                    Изящества и четкости не заметил, а вот неприятные ощущения — почти сразу.

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

                                                    «Девушка может уехать из деревни, а вот деревня из девушки — никогда» (с)
                                                      0
                                                      хеллоу ворлд написали? что там натыкать за день можно

                                                      Я думал, это только в хаскеле надо сначала PhD по математике получить, а уже потом код писать.


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

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

                                                        0
                                                        Я как бы не только на плюсах-то пишу, и к другим языкам претензий нет

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

                                                        Понимаете, это как с юниттестами — если у вас плохая архитектура, нет SRP, нет DI, то и юниттесты вы не напишите к проекту, а будете ругаться, какой плохой инструмент эти ваши юниттесты.
                                                          0

                                                          А где вы там многоэтажный if и кучу безымянных выражений увидели, если не секрет?


                                                          Два условия — для питона уже куча?

                                                            0
                                                            А где вы там многоэтажный if и кучу безымянных выражений увидели, если не секрет?
                                                            Два условия — для питона уже куча?

                                                            В том то и дело, когда это два простых условия, двухэтажный if не требуется. И я подозреваю, что у вас там либо дофига условий, либо безымянные нечитаемые условия вида
                                                            if len(str(count(map(max(min(sort(filter(please(sudo(10)))))) >= len(str(count(map(max(min(sort(filter(20))))))
                                                              0

                                                              Нет, у меня там именно ровно два условия ровно того вида, который я написал. Просто я ещё как-то с плюсов привык писать по одному условию на строку.

                                                  0
                                                  Кто-нибудь может объяснить корреляцию между java и javascript на графике? Очень уж она меня заинтересовала.
                                                    0
                                                    Скорее всего, это можно интерпретировать так: вопросы по java — более-менее со стабильной частотой поступают, а всплески по вопросам javascript возникали при выходе фреймворков и новых версий стандарта языка: 2013 — React, 2014 — Vue.js, 2015 — ES6, 2016 — Angular 2+, в эти моменты javascript на графиках растет вверх, пока хайп не спадёт.
                                                    0

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

                                                      +2
                                                      Немного жаль, что не существует ни одного языка позволяющего писать одновременно большие и высокопроизводительные проекты. Так же очень жаль что в мире есть лишь 1 способ написать реально высокопроизводительный проект — использовать ассемблер с ручными оптимизациями под конкретную модель процессора.
                                                        0

                                                        Существует — как минимум C#, Java, которые побыстрей Python будут.

                                                          +1
                                                          Существуют C и Rust которые будут побыстрее C# и Java. С логикой «побыстрей» в плане времени выполнения программы мы в любом случае прийдем к самому низкому уровню где ни шарп ни джава даже не приблизятся по производительности. У меня нет опыта написания ни больших ни высокопроизводительных проектов, но на сколько я понимаю ни Java ни С# ни Go не гарантируют что проект легко можно будет сделать большим или что он будет высокопроизводительным.
                                                          Мне не кажется что Python стал таким распространенным по какой-то случайности, что тысячи инженеров и энтузиастов по всему миру просто ошиблись не выбрав какой то другой язык, по-моему python попал в тренд и занял свою нишу и сожалеть об этом, это как сожалеть о том, что люди ездят на обычных легковушках, а не на машинах Формулы 1, они ведь побыстрее будут.
                                                          0
                                                          принцип разделения на операции низкого уровня — какой нибудь ассемблер, и декларация их использования — какой нибудь питон, неизвестен в 2019 году.
                                                          У Python динамическая типизация и медленная скорость,

                                                          это фейл современного подхода интерпретации питона. На самом деле с рядом твиком там синтаксиса и т.п. можно сделать полным аналогом С не говоря уже о C#/жаба А вот наоборот вряд ли.
                                                          +1
                                                          Как мне кажется из приведенного Вами тезиса о скорости и типизации не следует наличие проблем с написанием больших проектов. YouTube по-вашему достаточно большой проект?

                                                          За 3 года программирования на Python ни разу не столкнулся с тем, что в какой-то момент времени в процессе долгой работы программы получаю объект не того типа, который функция ожидала принять. Это ещё связано и с тем, что в нём нет приведения типов и, соответственно, граблей этим обусловленных. ИМХО больше проблем доставляют слабо типизированные языки вроде Си или Js совершающие не очевидные преобразования при подаче разнотиповых операндов, лишь бы получить хоть какой-нибудь результат даже, если он бесполезен.
                                                            0

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


                                                            При этом оснований считать их плохими специалистами нет, с C++ или там матстатом у них проблем нет.

                                                              0
                                                              матстат тут не причём, а великий могучий С++ так выворачивает руки и мозги, что пусть на нём и остаются, нечего ими портить комьюнити питона.
                                                              это не выправишь.
                                                              в професиональных проэктах 1000 строк ТОЛЬКО ПОХОЖИХ ДРУГ НА ДРУГА темплейтов
                                                              < че то там < че то там>> и язык настолько крут что темплейтами можно написать машину тьюринга и ввести её в бесконечный цикл (котоорый будет исполнять компилятор)
                                                              и они такие профи, что кодят и никак не поймут, что это всё не нужно.
                                                                0
                                                                великий могучий С++ так выворачивает руки и мозги, что пусть на нём и остаются, нечего ими портить комьюнити питона.
                                                                это не выправишь.

                                                                Дружелюбно к новичкам, ничего не скажешь.


                                                                Почему после плюсов у меня получается войти что в хаскель, что в идрис, а в питон вот тоже не получается?


                                                                в професиональных проэктах 1000 строк ТОЛЬКО ПОХОЖИХ ДРУГ НА ДРУГА темплейтов

                                                                Прям вот похожих?


                                                                и они такие профи, что кодят и никак не поймут, что это всё не нужно.

                                                                Канеш, вам виднее.

                                                                  0
                                                                  а в питон вот тоже не получается?

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

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

                                                                  Прям вот похожих?

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

                                                                    Без типов сложно на больших масштабах, а на мелких у меня шелл есть.


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


                                                                    Конкретнее — как раз позавчера решил очередной лог распарсить на питоне, а не на хаскеле, как обычно. И вот просто сходу:


                                                                    1. json.loads что возвращает? В help(json.loads) не написано. Мне что, сайт смотреть, хотя у меня уже репл открыт?
                                                                    2. Репл, кстати, тоже паршивый. Модуль перезагрузить нельзя, только выполнить его ещё раз.
                                                                    3. Кидать экзепшон в случае ошибки? Серьезно? А, ну да, ADT-то нет. К — композабельность.
                                                                    4. Union[str, str] изоморфен str, а не (Bool, str). То есть, discriminated unions нет.
                                                                    5. При этом instanceof с NewType не работает.
                                                                    6. Ну и вишенкой не ожидаемая ни в одном другом языке, включая whitespace-sensitive, ошибка тута:

                                                                    if foo == bar or
                                                                       foo == baz:
                                                                        continue

                                                                    Спасибо, но нет. Я не понимаю, зачем мне в моей жизни питон.


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

                                                                    Уже 8 лет как можно.

                                                                      0
                                                                      Без типов сложно на больших масштабах,

                                                                      да кста у меня идейка небольших утилит которые это правят
                                                                      1. проверка типов переменных функции например декоратором и прочие ассерты которые часто нужны
                                                                      2. инспекция неизвестного обьекта с выводом подробной инфы о нём (поможет в п.1)
                                                                      3. 2.да не только загрузка а разного рода юзанье модулей паршивое. Надо было сделать чтобы модуль был обычным обьектом внутри которого доступ к нему по self а снаружи по имени.
                                                                      4. ты должно быть не заметил недоделанный, точнее странный интерфейс трейсбека, я там лазил пытаясь сделать утилиту коррекции ошибок (чтобы правильно указывала место где ошибка, а не там где брошен эксепшн, нужен трейсбек вверх по тому что исполнено ) но опять же не я это всё придумывал и постепенно пришёл к выводу что не подойдут те инструменты что в питоне в данный момент
                                                                      5. 3. а что кидать в случае ошибки рантайма, как раз эксепшн. Более того. В питоне кидают эксепшн в конце ИТЕРАЦИИ. Почему-то...
                                                                      6. 4. не понял
                                                                      7. instanceof с NewType не работает. приведи пример, сколько работаю у меня всё нормально работало.
                                                                      8. 6. а надо привыкнуть к такому концепту. По мне так
                                                                        if foo == bar or foo == baz: лучше читаемо, а большие операции следует выность отдельно или использовать\.


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

                                                                        В рантайме, что ли? В рантайме уже поздно проверять.


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

                                                                        Ничего не кидать. Уже давно придумали Either и подобные вещи.


                                                                        не понял

                                                                        Это отсылка к тому же Either.


                                                                        instanceof с NewType не работает. приведи пример, сколько работаю у меня всё нормально работало.

                                                                        >>> import typing
                                                                        >>> FooStr = typing.NewType("Foo", str)
                                                                        >>> meh = FooStr("meh")
                                                                        >>> meh
                                                                        'meh'
                                                                        >>> isinstance(meh, FooStr)
                                                                        Traceback (most recent call last):
                                                                          File "<stdin>", line 1, in <module>
                                                                        TypeError: isinstance() arg 2 must be a type or tuple of types

                                                                        Где-то в доках по mypy было, что isinstance в этом случае и не должен работать.


                                                                        а надо привыкнуть к такому концепту.

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


                                                                        и тогда это будет лучший язык

                                                                        Я бы с этим поспорил, ну да ладно.

                                                                          0
                                                                          В рантайме, что ли? В рантайме уже поздно проверять.

                                                                          как раз единственная возможность в языке с только дин. типизацией потому что тип, карл, может зависеть от ввода и конструироваться на лету.
                                                                          import typing

                                                                          никогда не использовал этот typing и он не нужен, так как чудес никакая либа чисто Питона не делает. Кстати да некоторые либы Питона паршивые и то что ты напишешь просто так в 10 строк будет лучше. Тот же партиал или инспекшн -> ещё тот вырвиглаз.
                                                                          Всегда создаю новый тип так:
                                                                          o2 = type('Y', (test,), dict(a='Foo', b=12))

                                                                          www.programiz.com/python-programming/methods/built-in/type
                                                                            +1
                                                                            как раз единственная возможность в языке с только дин. типизацией

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


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

                                                                            Зачем?


                                                                            никогда не использовал этот typing и он не нужен, так как чудес никакая либа чисто Питона не делает.

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

                                                                              0
                                                                              потому что тип, карл, может зависеть от ввода и конструироваться на лету.

                                                                              Зачем?

                                                                              для какой то задачи со стиранием типов. Простейший пример. пусть есть GUI, в которой пользователь может графически сконструировать любой обьект с полями со значениями, поля могут быть сложными поэтому GUI отображает иерархию. Я такое даже в JS делал. Составив обьект, он идёт дальше в программу с заранее неизвестным своим типом.
                                                                                0

                                                                                Даже в этом случае вам нужно не стирание типов и какое-то конструирование в рантайме, а экзистенциальные типы.

                                                                                  0
                                                                                  а экзистенциальные типы.

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

                                                                                    А зачем обычным языком ограничиваться?


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

                                                                                      0
                                                                                      не, приведи пример что именно ты имеешь ввиду под «экзистенциальным типом» в виде кода на каком нить обычном языке.
                                                                                        0

                                                                                        В обычном я только на C++ могу, но там это вербозно до жути.


                                                                                        А вообще пикрелейтед.

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

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

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


                                                                          { "eventType": "Foo", "field1": 10, "field2": "foobar", ... еще куча полей ... }
                                                                          { "eventType": "Foo", "field1": 20, "field2": "foobaz", ... еще куча полей ... }
                                                                          { "eventType": "Bar", "field1": 15, "field2": "meh", ... еще куча полей ... }

                                                                          Надо собрать среднее и максимальное значение field1 по каждому evenType и список уникальных значений field2 тоже по каждому eventType. Для трёх строк выше это будет (15, 20, [foobar, foobaz])для Foo и (15, 15, [meh]) для Bar.


                                                                          Лог большой, гигов 20, поэтому неплохо бы его как-то в O(1) по памяти обрабатывать.


                                                                          Если вам правда будет не лень с нуля писать это на питоне, то я с радостью напишу с нуля на х-ле.

                                                                            0
                                                                            Если вам правда будет не лень с нуля писать это на питоне

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

                                                                              Настоящий лог точно не могу, там всякая пипитарная информация. В принципе, можно те три строки размножить мегабайт на 100-500, это будет достаточно репрезентативно.

                                                                                0
                                                                                Блин, слишком синтетически и скучнее)) Опишите какие аргументы на входе. Может поковыряюсь для себя.
                                                                                  0

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

                                                                                    0

                                                                                    Если забить на возможные ошибки(допустим, у нас точно безошибочный лог), то код-то очень быстро напишется, за несколько минут буквально (если я правильно понял задачу). И по памяти О(1). Рабоатет, правда, небыстро (у меня ~1гб/минута), да и не особо эстетично (обычный императивный C-подобный код).


                                                                                    Заголовок спойлера
                                                                                    import json
                                                                                    from collections import defaultdict
                                                                                    
                                                                                    with open('log.txt', 'r') as f:
                                                                                        db = defaultdict(lambda: { 'n': 0, 'sum': 0, 'uniq': set(), "max": -1})
                                                                                        for line in f:
                                                                                            record = json.loads(line)
                                                                                            db_record = db[record['eventType']]
                                                                                            db_record['n'] += 1
                                                                                            field_1 = record['field1']
                                                                                            db_record['sum'] += field_1
                                                                                            max_value = db_record['max']
                                                                                            if max_value < field_1:
                                                                                                db_record['max'] = field_1
                                                                                            db_record['uniq'].add(record['field2'])
                                                                                    
                                                                                    for event_type,record  in db.items():
                                                                                        avg = record['sum'] / record['n']
                                                                                        print(f'eventType:{event_type}, avg: {avg},max: {record["max"]}, uniq: {record["uniq"]}')
                                                                                      0

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

                                                                              0
                                                                              Ну вот как можно находить проблемы там где их нет?
                                                                              Берём некое количество строк из файла
                                                                              text = """{ "eventType": "Bar", "field1": 15, "field2": "meh"}
                                                                              { "eventType": "Bar", "field1": 12, "field2": "meh"}
                                                                              { "eventType": "Baz", "field1": 15, "field2": "meh"}
                                                                              { "eventType": "Baz", "field1": 13, "field2": "meh"}

                                                                              """

                                                                              for line in text.split('\n'):
                                                                              sline = line.strip()
                                                                              if sline:
                                                                              e = eval(sline)
                                                                              print(e)


                                                                              не подключая мои утилиты которые напоминают стримс, то я для себя наварганил и не выкладывал ещё.
                                                                                0
                                                                                Это JSON, там какое-то поле может быть null, eval вывалится. Но даже если предположить, что его там не будет, ваш код просто парсит JSON, а задача другая.
                                                                                  0
                                                                                  просто заверни в try тогда. Это самый легкий способ достать переменные а потом делай с ними что хочешь. Немного нужно будет повозиться если переменная растянута на несколько строк, и всё.
                                                                                  Питон лучший для всякой фигни с текстами.
                                                                                  можно даже вывод обьектов e генератором записать.
                                                                                  Скинь пример лога на пару страниц, напишу базовым питоном, там задача на десять строк максимум
                                                                                    0

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


                                                                                    Питон лучший для всякой фигни с текстами.

                                                                                    Я почти уверен, что на хаскеле это окажется надёжнее и короче.

                                                                            0
                                                                            Ну и вишенкой не ожидаемая ни в одном другом языке, включая whitespace-sensitive, ошибка тута:

                                                                            if foo == bar or
                                                                               foo == baz:
                                                                                continue
                                                                            

                                                                            Вообще конечно можно вот так, если вам очень хочется:
                                                                            if (foo == bar or
                                                                               foo == baz):
                                                                                continue
                                                                            

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

                                                                              А питон на них ругается? ;)

                                                                                0
                                                                                А питон на них ругается? ;)

                                                                                Представляете, из-за моей привычки не допускать жирных сигнатур пришлось попробовать, чтоб убедиться, что не ругается))
                                                                0
                                                                В те времена уже существовал Lisp, который мог решать все те же задачи не хуже, а то и лучше.
                                                                В чем преимущество питона, кроме простоты перехода с C и sh?
                                                                  –3
                                                                  Почему-то для многих Perl является синонимом бренйфака. Хотя, этот язык ничем не хуже новомодного питона.
                                                                  Я все же не могу понять, почему питон захватил мир.

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

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

                                                                    Но это еще фигня. Я знаю два прекрасных языка, где помимо скобочек и точек с запятой, приходится перед переменными ставить доллар. Чрезвычайно любопытно, как другие языки работают без долларов, магия какая-то.
                                                                      0
                                                                      на самом деле это самый лаконичный и красивый способ разделять блоки и иерархии. Языки прошли эволюцию бритвы окхема когда сначала писали дурные
                                                                      begin — end для блоков, потом флуд {} а потом увидели что и это не нужно
                                                                        –1
                                                                        да, в других языках я пишу все в одну строчку, а тут питон не позволяет.
                                                                        Скажите, почему нельзя это было сделать опциональным? Т.е. кто хочет, тот юзает отступы, а кто нет — скобки? Есть проекты вида bython , но это так, созданные энтузиастами вещи.
                                                                        Можно много чего написать, но не хочу начинать холивар. Каждому свое. Мне лично неудобно, но видимо, я в меньшинстве.
                                                                          0
                                                                          потому что ты не юзаешь только скобки.
                                                                          ты всегда юзаешь скобки И ОТСТУП, иначе это будет НЕЧИТАБЕЛЬНО.
                                                                          а значит на самом деле скобки не нужны.
                                                                          и питон позволяет, или мог бы позволять с небольшым твиком писать маленькие блоки в одну строку. что то типа comprehension
                                                                      +3
                                                                      Отступы «адский ад» только первую неделю активного писания, потом наступает прозрение. Говорю это вам как (в далеком прошлом) лютый сторонник скобок, и вот это дурацкое заблуждение не давало мне даже посмотреть в сторону питона лет 10 точно. (В этой связи да, с точки зрения успешности языка Гвидо совершил громадную ошибку, когда сделал только отступы, ведь мир невозможно переубедить, получился совершенно искусственный и дурацкий барьер на вход, во многом из-за которого питон проиграл пальму первенства пхп.)

                                                                      Что касается перла: я всегда раньше тоже писал разные утилиты на перле. А потом заметил интересное: начинаю писать на перле, пишу строк 100, потом возникает странное ощущение: «что-то тут не так...» — пишу эти же 100 строк на питоне по горячем следам и обнаруживаю, что строк оказалось не 100, а 50. И после того, как это повторилось раз 5, до чукчи наконец дошло.
                                                                        0
                                                                        Да, это сильно отталкивает, так как Сишный синтаксис привычней (лично мне да и многим).
                                                                        Отступы еще неприятны тем, что некоторые форумные движки «режут» эту питоновскую разметку. Да, конечно копипаст это плохо, но бывают разные ситуации. Впрочем, видимо, вариантов нет, придется учить и питон. В некоторых вещах ему, к сожалению, нет альтернативы (скрипты для Ida,windbg).

                                                                        Кстати, пользуясь случаем, хочу вас поблагодарить — я начинал изучать программирование именно с вашей книги (и сайта, и конечно же, «денвер»). Именно благодаря тому, что первыми моими материалами по программированию были именно ваши книга и статьи, я не начал изучать какие-то гуанофреймворки, а понял важность знания Си и Ассемблера.
                                                                          +2
                                                                          Отступы «адский ад» только первую неделю активного писания, потом наступает прозрение.

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

                                                                          Какой еще ад? Вот я аргумент про питонячьи отступы никогда не понимал и до сих пор не понимаю: вы ставите отступы (всегда), скобочки и точки с запятой, и тут вам новый язык предлагает оставить только отступы, значительно облегчая вам написание кода, убирая кучу синтаксического шума, и для вас это ад? Вы что, мазохист?

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

                                                                              Вы же понимаете, что тогда вам работа в команде противопоказана? Я как то читал код на питоне, где вместо 4 пробелов ставили 1 пробел. Мне было очень тяжело.

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

                                                                              Кстати, у меня есть подозрения, что эти ваши случаи, которые в порядке вещей, нужно, и я думаю можно, как то исправить. Давайте вы опишите, а я попробую вам помочь?
                                                                                +1
                                                                                Вы же понимаете, что тогда вам работа в команде противопоказана?
                                                                                Возможно. Я большей частью работаю как фрилансер. Хотя, в команде можно договориться о стиле разработки. Все же, и со скобками тоже люди пишут по разному ( '{' c новой строки или в той же, отступ есть или нет..).
                                                                                То есть вы в этих случаях без отступов пишете?
                                                                                Бывает разное, когда не до отступов. Да, это экстремальные случаи, но у меня было такое много раз. Когда где-то не дома (поездка, больница, тюрьма), и есть только планшет без клавиатуры, и нужно срочно что-то исправить, еще и удаленно. Когда нет удобной питоно-студии с автоматическими табами и прочего, а только nano/notepad. Какой-то перл не требует отступов, хоть в 1 строку пиши. Понятно, что это код нечитабельный и кривой, но какая разница, если его никто не увидит и он должен решить задачу здесь и сейчас? Да, проблема надуманная и нереальная для многих, но она бывает, и все же, я не понимаю этой принудиловки.
                                                                                Может приведу неудачный пример, но вот человек, будучи дома, может одеваться несколько иначе, свободнее, чем уходя на официальный прием или еще куда. А тут как будто говорят «нет, ты должен всегда выглядеть идеально, хоть ты даже и на даче в глуши в лесу».
                                                                                Давайте вы опишите, а я попробую вам помочь?

                                                                                Как бы я не хотел начинать холливары, т.к. каждому свое, и кому-то нравится питон, кому-то нет… Большинство моих задач по разработке решаются с помощью других ЯП, и, если бы оно так и оставалось, я бы в жизни не начал обсуждать питон. Но, есть 1 проблема. В своей работе я использую такие программы, как Ida pro (дизассемблер), отладчик WinDbg и подобное ПО для реверса/отладки. Так вот — абсолютно во всех программах стандартом де-факто для встроенного скриптования является тот самый Питон. Альтернативы либо нет вообще, либо куцые встроенные скрипт-системы, не имеющие и 10% мощи Питона. И вот есть иногда задача (вида — автоматически распаковать лежащие на стеке строки), взял, скопировал скрипт для решения с форума, а он ругается. Потому что форум побил форматирование этих самых отступов. Ладно, открываю скрипт в любимом Notepad++, расставляю (визуально) вручную табами отступы, где надо. Запускаю — опять не слава богу. Оказывается, нужно было не табы, а 4 пробела. Может есть Иде, где это просто, но в нотепаде не очень, т.е. мне для 1 языка, который решает 5% моих задач, нужно заводить отдельный IDE и вообще, изучать то, неясно что. И это грустно и вызывает много негатива, какой уж, извините, я тут немного излил в коментариях к статье.
                                                                                  0
                                                                                  Хотя, в команде можно договориться

                                                                                  Так и вижу ситуацию, как команда разработчиков договаривается: — эй, ребята, а давайте отныне не будем делать отступы в коде, по скобочкам же все равно все понятно?

                                                                                  Какой-то перл не требует отступов, хоть в 1 строку пиши.
                                                                                  А вместо отступов нужно ставить скобочки, точки с запятой и доллары. Так себе замена. Кстати вот вам строчка из питона, которая не вызовет ошибку:
                                                                                  print(1); print(2); print(3)
                                                                                  
                                                                                  Выглядит с моей точки зрения чрезвычайно богомерзко, но возможно это поможет вам, когда будете в очередной раз редактировать код с планшета.

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

                                                                                  Так вот — абсолютно во всех программах стандартом де-факто для встроенного скриптования является тот самый Питон
                                                                                  Кстати, это повод задуматься. Тот же LUA проще встраивается в любой инструмент, но почему-то профессионалы выбрали именно питон.

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

                                                                                  Оказывается, нужно было не табы, а 4 пробела.

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

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

                                                                                  Согласен, что ваш паттерн использования питона очень далек от разработки, и сложно таким образом оценить все преимущества. Но раз для вас эта проблема такая частая, почему бы все таки не поставить более интеллектуальный инструмент, чем notepad++? Вы же используете профессиональные инструменты типа Ida и WinDbg. Серьезно, откуда такое ограничение?

                                                                                  Надеюсь, я вам чем-то помог в вашем нелегком ремесле.
                                                                            0
                                                                            а если с Джавой сравнить, то в три раза меньше строк
                                                                              0
                                                                              смотря с какой джавой, когда пишут со всеми прибамбасами вроде темплейтов, аннотацией, всех геттеров и сеттеров и такого флуда на 1000 страниц, то в 33+ раза меньше строк
                                                                              0
                                                                              При использовании REPL отступы сильно мешают. В Idris и Elm, которые требуют отступов, это сильно раздражает, особенно после Haskell, который допускает и отступы, и скобки.
                                                                            –1
                                                                            Тоже не понимаю а почему то ентон питон такой популярный. Сложность равна С++, низкое быстродействие, нету привычного end'а(мозг ломает(правда, можно использовать псевдооператор #end))… В общем, лично мне он не нужен, лучше вместо его, например Lua. Вообще, не понимаю для чего он нужен. Может кто объяснит?
                                                                              0
                                                                              Зачем? это же субъективный объективизм. Если он Вам объективно не нужен, нельзя объяснить.

                                                                            Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                                                            Самое читаемое