Выросло поколение молодных и наивных, которые думают, что выпуская под пермиссивными лицензиями они делают мир лучше. И что корпорации им друзья, двумя руками за опенсорс и играют на их стороне и по рыночным правилам. И не задумываются почему faang свои продукты скрывают, но их просят открыть. Ну ок, не хотят учиться на ошибках дедов - научатся на своих.
достаточно вспомнить как в питоне работают скоупы и shadowing. Про многопоточность даже упоминать не хочется.
Многопоточность на заре питона ошибочно казалось ненужной, но главное что GIL всегда признавался ошибкой и почти побеждён (в отличие от Го, которые открыто шлют с обработкой ошибок). Shadowing - интересная тема. На мой взгляд, если вам нужен nonlocal, то вы что-то делаете не так. То есть это решение запутанное, но в реальности в ногу почти не стреляет.
Отступы конечно приучают форматировать код, но не из-за желания разраба сделать красиво, а из-за того что поведение программы меняется. Форматтеры в "языках с фигурными скобками" уже давно научились форматировать код за нас, и кажется добавить 1 шаг в CI для проверки форматрования кода может сэкономить пару нервных клеток.
Опять же история. В 2025 продавать отступы как киллер-фичу питона уже стыдно, но когда CI/CD не существовало - это действительно было глоток воздуха.
а-ля зависимые типы, АДТ, эффекты (и др.) что может вызывать такие чувства.
Вы хаскеллист, верно? Или идрис/кок/агда? На мой взгляд есть некоторый порог промышленного программирования ниже которого некоторые концепции уже невозможны. ADT ещё как-то могут проникнуть вниз, но завтипы, к сожалению, останутся в лабораториях ещё очень надолго. Или навсегда учитывая рост популярности индусских языков. В этом смысле питон стоит достаточно высоко среди группы промышленных языков.
Есть у меня история. В 20-ом году занимался выкаткой нашего облака в EC2. Было два публичных сервиса, вебморда и служебный хост для софта-помощника. Ну и в TXT DNS этого служебного хоста добавили такого паучка за авторством будущей жены. Жаль, что через месяц амазон почему-то не захотел с нами работать.
--------------------
[ ]
[ H E L L O ! ]
[ ]
--------------------
;;
\\#\\
\\##\\
||##||
//##//
||##||
//##//
|##//
_______________|\\
//#//|#|| O ( o ) ( o ) O |#||##\\
//##//|##// \\##||##\\
//##// ||##|| _______________ ||##|||##||
||##|||||##|| {§§§§} {§§§§} ||##||\\##\\
//##//| ||##|| {§§} {§§} ||##|| \\##\\
//##//##\\||##\\ {§} {§} ||##|| ||##||
\\#\\ \\##\\ \\##\\ //##// //##//
;; ||#|| \\#\\ //#// //#//
;; ;; ;; ;;
Да тут спорить особо не о чём, правы те кто хочет прозрачнее. Я в личных проектах обычно начинаю с подробных конструкций, а потом сокращаю до пределов своего понимания (привычка с Хаскеля), но в команде по запросу пишу многострочно, конечно. В данном случае, я бы сказал, что если вся команда инженеры со стажем, то могут договорится сокращать. Но если код читает аналитик, которому не до питонячьего сахара, то лучше расписать/обернуть.
Да не, читаемость как раз ок, просто мысленно скобки поставьте return ((x in l) and (l.index(x))) Другое дело, что это два прохода вместо одного и результат с типом None | int.
Что за синтаксис, в котором лишний пробел способен поломать работу программы?
А точка с запятой? А опечатка в константе?
можно пропустить все эти многабукв простым %, и сразу перейти к следующему блоку, а не перематывать страницу за страницей макаронного кода, высматривая, пока там отступ будет такой же, как был в начале.
В 2025 есть language server protocol, treesitter, всякие фолдинги и т.п. Присмотритесь к своей ide.
a = {10: 20, "qwe": "rty"}
a[10] # 20
a[20] # KeyError
a.get(20) # None, без исключения
Но это хэштаблицы (set - просто множество) с соответствующими асимптотиками. В встроенных библиотеках есть heapq (очередь с приоритетами), collections (там всё подряд - fifo/lifo/deque/defaultdict), мб ещё что полезного. Чтобы прям ассоциативный массов с поиском по любому элементу пары нужно внешнюю библиотеку искать.
В питоне в целом подход бросать исключение вместо возврата кода ошибки. Тут можно много спорить что лучше (если исключения типизированы, то я за исключения), но поэтому стандартный index так и делает. И index вообще необязательная функция, потому что лист (массив) не подразумевает поиск по значению, для этого другие структуры используют.
Давно уже наштамповали новые языки и прокачали старые и сам Python уже давно не такой простой и читабельный как раньше.
Прокачанные старые языки обычно и не читаемые и своим изначальным принципам изменяют. Питона это, кстати, тоже касается. Новым обычно не хватает раскрученности и экосистема бедная. Go читаемый только в туториалах, так он полон корявых конструкций (= vs :=, " vs ' vs backtick, range, стримы, map[int]struct{...}, []string{"boring"}, слайсы).
Можно задать себе интересный вопрос, почему если есть такой чудо-синтаксис, который буквально хорош во всем, подавляющее большинство мейнстримных языков как были так и есть сиподобные?
Для пыщ-пыщ и в прод отличный синтаксис, для алгоритмов уже не очень. И сишка используется там где скорость важна, если вы на нём api пишете - ссзб. Хз что там с растом, слишком токсичен чтобы было желание туда лезть сейчас.
Нет не становиться. Практически все самые популярные яп сейчас мультипарадигменные, Python здесь вообще ничем не выделяется.
Мультипарадигменность на словах - ну у нас есть классы, ну и функции можно передавать аргументом. Реально же мультипарадигменность измеряется тем насколько легко и гибко писать фреймворки, а тут Питон очень хорош за счёт богатых возможностей сломать язык.
startx - обертка над xinit. Смотрите что у вас в файлах /etc/xinit/xinitrc, ~/.config/xinit..., ~/.xinitrc/... (могу путать пути). На голой системе ничего и не запустится, хз что там в дебиане предустановлено - это далеко не голый дистр.
Хоткеи на command логично, говорю как линуксоид. Потому что Command-* хоткеи DE, а Alt/Ctrl-* хоткеи софта. Элементарно, у меня Win-t открыть терминал, Alt-t открыть окно внутри терминала, C-t открыть таб внутри neovim внутри терминала.
Бессмысленное обсуждение. "Свобода" имеет много определений, вы просто выбрали то которое вам удобно. У вас есть термины "пермиссив" и "копилефт", пользуйтесь ими. Я в целом против размахивания флагом свободы в отношении лицензий, потому что потом приходят корпораты и требуют себе свободного пива.
Да нет, многие ошибочно считают, что свободное ПО идёт без обязательств, ну как пиво, взял и пошёл. Но это СС. GPL - это как свобода воли, в смысле, что физическая и юридическая возможность есть, но гарантии и последствия нужно уточнять. Со свободой слова, например, вам никто не гарантирует что вас будут слушать, и что не будет последствий в виде бана на сайте. GPL - вы можете взять код, но если вы будете распространять его с не-GPL кодом, то ждите последствий. К слову о гарантиях, многие почему-то абсурдно считают, что авторы свободного кода обязаны тратить время на исправление багов и добавление хотелок толпы.
Всё, ясно. В моём понимании, заставлять - это стучать в дверь и обрывать телефон. Но возможно, я просто старомоден, словесное изнасилование, вот это всё тоже не пониманию.
Apple и Google очень много возвращает в LLVM, Bloomberg возвращает в sqlite, MS вообще финансирует (или -ло?) SPJ'а вместе с ghc. Даже мелочь вроде well-typed на деньги мелочи вроде mercury или anduril контрибьютит что-то в ghc. Собсна, насколько я понимаю, тот же Ben Gamari с этого вообще кормится.
Потому что это всё нужно очень небольшому сообществу исследователей, с которого намного эффективнее состричь через их же разработки под MIT/BSD/CC. А вот закрыть экосистему Android другой рукой или Manifest v2 - это пожалуйста, это миллиардный рынок.
Есть open source - бесплатное пиво, и free software - это про свободу конечного пользователя, а не контрибьютеров.
Выросло поколение молодных и наивных, которые думают, что выпуская под пермиссивными лицензиями они делают мир лучше. И что корпорации им друзья, двумя руками за опенсорс и играют на их стороне и по рыночным правилам. И не задумываются почему faang свои продукты скрывают, но их просят открыть. Ну ок, не хотят учиться на ошибках дедов - научатся на своих.
Платоновы тела - тоже низкополигональные производные, но правилу удовлетворяют. Интуиция тут не помощник.
Многопоточность на заре питона ошибочно казалось ненужной, но главное что GIL всегда признавался ошибкой и почти побеждён (в отличие от Го, которые открыто шлют с обработкой ошибок). Shadowing - интересная тема. На мой взгляд, если вам нужен nonlocal, то вы что-то делаете не так. То есть это решение запутанное, но в реальности в ногу почти не стреляет.
Опять же история. В 2025 продавать отступы как киллер-фичу питона уже стыдно, но когда CI/CD не существовало - это действительно было глоток воздуха.
Вы хаскеллист, верно? Или идрис/кок/агда? На мой взгляд есть некоторый порог промышленного программирования ниже которого некоторые концепции уже невозможны. ADT ещё как-то могут проникнуть вниз, но завтипы, к сожалению, останутся в лабораториях ещё очень надолго. Или навсегда учитывая рост популярности индусских языков. В этом смысле питон стоит достаточно высоко среди группы промышленных языков.
У ruff фатальный недостаток. Не проверяет сам себя, не принимает патчи на питоне, тесты ruff и тесты корректности ruff - по разному написаны.
Есть у меня история.
В 20-ом году занимался выкаткой нашего облака в EC2. Было два публичных сервиса, вебморда и служебный хост для софта-помощника. Ну и в TXT DNS этого служебного хоста добавили такого паучка за авторством будущей жены. Жаль, что через месяц амазон почему-то не захотел с нами работать.
Да тут спорить особо не о чём, правы те кто хочет прозрачнее.
Я в личных проектах обычно начинаю с подробных конструкций, а потом сокращаю до пределов своего понимания (привычка с Хаскеля), но в команде по запросу пишу многострочно, конечно. В данном случае, я бы сказал, что если вся команда инженеры со стажем, то могут договорится сокращать. Но если код читает аналитик, которому не до питонячьего сахара, то лучше расписать/обернуть.
Да не, читаемость как раз ок, просто мысленно скобки поставьте
return ((x in l) and (l.index(x)))Другое дело, что это два прохода вместо одного и результат с типом
None | int.А точка с запятой? А опечатка в константе?
В 2025 есть language server protocol, treesitter, всякие фолдинги и т.п. Присмотритесь к своей ide.
Из встроенных - dict/set.
Но это хэштаблицы (set - просто множество) с соответствующими асимптотиками. В встроенных библиотеках есть heapq (очередь с приоритетами), collections (там всё подряд - fifo/lifo/deque/defaultdict), мб ещё что полезного. Чтобы прям ассоциативный массов с поиском по любому элементу пары нужно внешнюю библиотеку искать.
В питоне в целом подход бросать исключение вместо возврата кода ошибки. Тут можно много спорить что лучше (если исключения типизированы, то я за исключения), но поэтому стандартный index так и делает. И index вообще необязательная функция, потому что лист (массив) не подразумевает поиск по значению, для этого другие структуры используют.
Прокачанные старые языки обычно и не читаемые и своим изначальным принципам изменяют. Питона это, кстати, тоже касается. Новым обычно не хватает раскрученности и экосистема бедная. Go читаемый только в туториалах, так он полон корявых конструкций (
=vs:=,"vs'vs backtick,range, стримы,map[int]struct{...},[]string{"boring"}, слайсы).Для пыщ-пыщ и в прод отличный синтаксис, для алгоритмов уже не очень. И сишка используется там где скорость важна, если вы на нём api пишете - ссзб. Хз что там с растом, слишком токсичен чтобы было желание туда лезть сейчас.
Мультипарадигменность на словах - ну у нас есть классы, ну и функции можно передавать аргументом. Реально же мультипарадигменность измеряется тем насколько легко и гибко писать фреймворки, а тут Питон очень хорош за счёт богатых возможностей сломать язык.
startx - обертка над xinit. Смотрите что у вас в файлах
/etc/xinit/xinitrc,~/.config/xinit...,~/.xinitrc/...(могу путать пути). На голой системе ничего и не запустится, хз что там в дебиане предустановлено - это далеко не голый дистр.Мне важны и язык и лицензия. Первая - зависимости и время сборки если собирать из сырцов. Второе - если захочу отправить им патч.
Хоткеи на command логично, говорю как линуксоид. Потому что Command-* хоткеи DE, а Alt/Ctrl-* хоткеи софта. Элементарно, у меня Win-t открыть терминал, Alt-t открыть окно внутри терминала, C-t открыть таб внутри neovim внутри терминала.
Бессмысленное обсуждение. "Свобода" имеет много определений, вы просто выбрали то которое вам удобно. У вас есть термины "пермиссив" и "копилефт", пользуйтесь ими. Я в целом против размахивания флагом свободы в отношении лицензий, потому что потом приходят корпораты и требуют себе свободного пива.
Да нет, многие ошибочно считают, что свободное ПО идёт без обязательств, ну как пиво, взял и пошёл. Но это СС.
GPL - это как свобода воли, в смысле, что физическая и юридическая возможность есть, но гарантии и последствия нужно уточнять. Со свободой слова, например, вам никто не гарантирует что вас будут слушать, и что не будет последствий в виде бана на сайте.
GPL - вы можете взять код, но если вы будете распространять его с не-GPL кодом, то ждите последствий.
К слову о гарантиях, многие почему-то абсурдно считают, что авторы свободного кода обязаны тратить время на исправление багов и добавление хотелок толпы.
To understand the concept, you should think of “free” as in “free speech,” not as in “free beer.”
В случае пермиссивных лицензий - именно так. Конечный софт будет просто вытеснен за счёт ресурсов, а исследования, библиотеки - поглощены.
Всё, ясно. В моём понимании, заставлять - это стучать в дверь и обрывать телефон. Но возможно, я просто старомоден, словесное изнасилование, вот это всё тоже не пониманию.
Потому что это всё нужно очень небольшому сообществу исследователей, с которого намного эффективнее состричь через их же разработки под MIT/BSD/CC. А вот закрыть экосистему Android другой рукой или Manifest v2 - это пожалуйста, это миллиардный рынок.