Ну и что, что у кого-то получилось избавиться от трёх процедур по 50 строк с ветвлениями и завернуть всё это в три строки кода с "заумными" конструкциями, лямбдами, монадами и т.п.?
Я часто в своих проектах бью джунов по рукам ...
Однажды у вас это обязательно случится, с гарантией. В вам придут новые требования, для соответствия которым вам будет необходимо изменить логику всех трех процедур. Две процедуры вы измените, а про третью забудете (хорошо, не вы, а ваш джун с набитыми руками). И будете потом полгода ловить странный сложно воспроизводимый баг. Ну, дебажте, конечно, если вам так нравится, только, пожалуйста, других глупостям не учите. Техника безопасности пишется кровью, а Clean code - нервами, временем, соравнными дедлайнами и деньгами.
Давайте для начала отделим мух от котлет и разберемся в терминологии. Когда мы говорим C#, Java или python, что мы имеем в виду? Мы говорим про язык программирования, как набор синтаксических правил? Или мы говорим про байткод виртуальной машины? Или про саму виртуальную машину? Или про всё вместе? Тут легко запутаться, потому что один и тот же текст программы может компилироваться в нечто совершенно разное, например Котлин может компилироваться в байткод джавы, в нативный код и в веб-ассемблер. В то же время, десятки языков компилируются в аналогичный байткод - языки .Net, языки JVM - их десятки, но все компилируются в байткод соответствующей ВМ. Реализаций ВМ тоже десятки. Вы можете придумать свою виртуальную машину питона, которая будет несовместима с байткодом cpython, но полностью поддерживать python. Или вы можете реализовать совместимую с cpython виртуальную машину, которая будет быстрее за счет каких-то оптимизаций, jit-компиляции или еще чего-то. Или вы можете придумать компилятор JavaScript в байт-код питона. С другой стороны, сам ЯП на уровне стандарта языка может диктовать пределы в которых вы можете оптимизировать байт-код и виртуальную машину. Например вот так https://docs.python.org/3/reference/datamodel.html Как в питоне происходит обращение к члену объекта? (всё нижеследующее дано грубо и для примера, в действительности всё сложнее). Когда в программе мы пишем my_object.my_method(), питон идет в __dict__ объекта, это хеш-таблица, в которой он ищет ключ __get_attr__, если такового не находится, то питон обращается в классу объекта (который тоже объект), читает dict этого объекта, и ищет get_attr, если и там не находит он получает родителей класса и для каждого производит этот поиск пока не найдет или не упрется в самый базовый класс. Далее вызывается найденный __get_attr__('my_method'), что значит вызывается? А это значит что аналогично вышеописанным манипуляциям питон ищет атрибут __call__, ну и так далее, почитайте по ссыке. Что из этого следует? А то, что как бы вы не хитрили с байт-кодом и виртуальной машиной, чтобы это был питон - вот эта вся пляска по хеш-таблицам обязана выполнятся на каждый чих. В результате, любая функция в питоней программе вольна вернуть что угодно, нет вообще понятия тип возвращаемого значения. Это особенность питона диктуемая его динамической природой. Это не аналогично тому, что из каждого метода С# я буду возвращать object, это совсем другая идиология. Вот из таких соображений у меня складывается претензия к статье. Может быть я невнимательно прочитал, но я решительно не понял, что из себя представляет новый язык, и почему он убийца питона
А я не про преимущества/недостатки говорил, а про то, что язык заявляется как убийца питона, при этом - очевидно - является чем-то совсем иным и несравнимым. Преимущества и недостатки вещь довольно субъективная, назовем их особенностями. Особенности вытекают из того факта, что объекты питона не обязаны соответствовать известной на момент компиляции схеме. Список полей и методов может быть изменен в рантайме и более того, новые классы можно создавать прямо во время выполнения. Это дает простор для творчества и позволяет вытворять что-то такое https://docs.djangoproject.com/en/4.2/topics/db/queries/#retrieving-specific-objects-with-filters
Зачем? Ну правда, зачем? Python - это язык с динамической типизацией, так он работает, так он устроен, он медленный именно по этому, по сути любой объект питона - это хеш таблица со строковыми ключами, где ключи - имена полей и методов объекта. Быть медленнее Си - имманентное свойство виртуальной машины питона именно ввиду его динамической природы. Хотите виртуальную машину со статической типизацией, ну так их уже есть несколько - Java, .Net. Для этих ВМ придумывают по языку программирования в год, в том числе и динамические языки работающие через рефлексию. И если я не ошибаюсь, скрестить ежа с ужом пытались уже неоднократно - всякие JPython и IronPython тому примеры. Из текста статьи я лично не понял, каким именно образом авторы инновационного языка пытаются усидеть на двух стульях - сделать питон быстрым и динамическим одновременно. Если же ЯП не будет динамическим, то нафига вы его сравниваете с питоном, сравнивайте с языками из этой категории - с джавой, котлином, c#.
Мне кажется сама идея материального стимулирования получения знаний - будь то деньги, гигабайты или конфеты - глубо порочна в своей основе; нельзя привить любовь к чему-либо (к знаниям, например) через меркантилизацию знания, ибо знание в таком случае превращается в посредника для получения денег, а не ценностью в себе. Отсюда феномен "ненужного знания", когда люди всерьез не понимают, зачем в школе проходили квадратное уравнение или строение червя, ведь в "жизни не пригодилось". Мы же уже получили поколение ЕГЭ? Получили десятки тысяч выпускников ВУЗов (моё поколение, дети 70-х, 80-х) окончивших институт ради диплома, отмазки от армии и т.д. при этом абсолютно некомпетентных в своей профессии.
Посмотрев многочисленные треды в группе Dumbphones, я пришла к выводу, что пользователи чаще всего прибегают к простым телефонам, чтобы дать себе передышку от технологий, отвлечься.
Пользователи приобретают Dumbphones чтобы быть уникальными снежинками "не такими как все". Если эти кнопкофоны опять войдут в моду и станут широко популярны, те же самые пользователи придумают себе новый способ выпендриться, может быть даже внезапно полюбят смартфоны и куда-то сама собой денется "цифровая усталость".
Подозреваю, что если этих же сволочей слёзно попросить вернуть "пожертвованные" им деньги, то не вернут. Не надо их жалеть, действовать тут надо, как говорит минский батька, "жыстачайшэ".
Если те же самые примеры переписать на ассемблере, то мы наверняка обнаружим существенное увеличение производительности, правда? Автор статьи борется с какими-то мизерными проблемами. Подумаешь, заменил массив указателей на массив объектов, выиграл на разыменовании указателя. Подумаешь, избавился от виртуальных методов, выиграл на обращеннии к ТВМ. Если уж начали считать такты и байты, ну давайте посчитаем, а сколько тактов мы тратим на рантайм поддержку функций? Избавиться от них, конечно же, как от ненужных финтифлюшек навязанных кровавым ынтерпрайзом. Разоблачая порочные практики "лишних" абстакций, автор ловко оставляет за скобками вопрос, а зачем это всё вообще напридумывали. Такое чувство, что "чистый код" - это такой масонский заговор, существующий чтобы нагадить из природной вредности. Очень это похоже на риторику разоблачителей "официальной" науки, когда демагог фокусируется на слабых сторонах теории, забывая о сильных, и выдавая эти слабые стороны за скрываемую от народа правду. Мне кажется, ни для кого не стало открытием, что не все абстракции бесплатны? Дайте оглянемся вокруг и убедимся, что подобный процесс удорожания не уникален для программирования. Давайте посчитаем, сколько бензина мы бы экономили выкинув из автомобиля системы безопасности и экологичекские примочки. А коробка-автомат? Это же 20% топлива впустую. Автор молодец, что посчитал стоимость бест-практик в единицах и процентах, это интересно. Но вывод - если я его правильно понял - сделан совершенно бестолковый и вредный. Абстракции совершенно необходимы, это особенность нашего типа мышления - мы не можем оперировать большим количеством элементарных сущностей (вспомним закон Миллера). Что, собственно, подтверждается практикой, все эти методики чистого кода (если только автор не имеет в виду хамского тезиса, что многочисленные авторы соответствующих работ навыдумывали ерунды с потолка, и толко он знает, как надо) решают реально существующие проблемы, с коромыми поколения программистов сталкивались и продолжают сталкиваться ежедневно. Предложи соответсвующее бесплатное для ЦПУ решение и получишь почет, уважение и Нобелевскую премию. Думаю, что Ынтерпрайз(тм) был бы толко рад экономить ресурсы.
Ну то есть, когда дерево засыхает, то трескается и издает звук. Если скосить траву, то из неё вытекают пахучие соки, запах которых привлекает насекомых. Я правильно понимаю, что из пары этих удивительных фактов, пытаются высосать сенсацию?
> Или это просто то, что происходит в соответствии с физическими законами. Не-не-не, какая физика, что вы! Деревья разговаривают, трава кричит, лопухи поют песни по ночам.
Да тем образом, что все эксепшены переехали в рантайм. Если у нас есть текстовый язык разметки определяющий контролы в окне, то никуда не деться от десериализации этого текста в объекты, рефлексии и кучи рантайм-кастов. Такая себе статическая типизация, где все объекты типизированы как object.
В качестве примеров "правильного" софта автор привел множество консольных утилит зачем-то и еще чуть-чуть гиковских программуль, у которых три пользователя на весь мир. Как бы не мечталось поклонникам минимализма, успешно продавать массовому пользователю "редактор от Роба Пайка, написанный под вдохновением от ed" или какой-нибудь dwm не получится, это никому не нужно, как бы то не представлялось ужасным любителям меряться мегабайтами, воскрешать найденый на помойке 286-й IBM и гордиться до деспамятсва своим хакерскими талантами, "непотреблядсвом" и отвращением к "свистоперделкам". Давайте взглянем правде в глаза и честно признаем, что классические тулкиты типа Qt, GTK или какого-нибудь Tcl/Tk не могут обеспечить годного по мнению широкого пользователя look-and-feel. Браузер побеждает не потому, что JS проще разрабатывать или быстрее или универсальнее с точки зрения управления проектами, глупости это всё. Браузерные приложения просто интереснее выглядят для пользователя. Можно ли делать подобное, на Qt? Можно, только вы изобретёте еще один браузер. Современный Qt это QML + CSS + JavaScript. Чем это лучше связки HTML + CSS + JavaScript? Да ничем, все попытки сделать по-другому только лучше приводят к изобретению припроетарной тройки Язык Разметки + Язык Стилей + Скриптовый ЯП. Микрософт со своим WPF/SilverLight изобрели XAML (который просто XML на стероидах, который ничем не лучше HTML5) и прикрутили сбоку С# по ходу лишив его преимуществ статической типизации, джависты наизобретали всяких мало работоспособных фреймворков типа Swing, и по итогу рендерят всё в веб и не парятся, GTK весь обмазан CSS, Qt превратился просто в JavaScript даже не претворяется. Такова реальность - любой графический тулкит превращается в браузер, и нафига он нужон если браузер уже есть.
Мне кажется pydantic умеет в JSON лучше и может гораздо больше, разве нет? Вообще этот JsonObject кажется вещью бессмысленной, те же датаклассы, namedtuple или attrs умеют сериализовать в словари из коробки.
Есть и ещё одно преимущество подобной архитектуры с использованием пространств имён: все ресурсы в такой ОС определяются через подобие иерархической файловой системы, поэтому огромное количество драйверов и кода, которые живут внутри ядра в традиционных Unix-системах, включая Linux, здесь просто не нужны.
Одной из главных претензий к Plan 9, тормозивших развитие системы, было тотальное отсутствие драйверов и слабая поддержка периферийного оборудования.
ничего не понял
Ядро первой версии этой системы состояло всего лишь из 18000 строк кода, версия 2006 года насчитывала уже 150 000 строк. Сравните это с более чем 4,8 миллионами строк кода в ядре Linux.
опять не понял, ну сравнил и что? Наверное, имелось в виду, что кодовая база Plan9 существенно меньше и это хорошо? Но ведь миллионы строк линукса написаны не от балды, это поддержка тысяч единиц оборудования, множества файловых систем, протоколов, аппаратных архитектур. Какое-то это очень наивное сравнение.
Подсказки типов могут раздражать, сейчас я это докажу
и... не доказал. Автору нужна была была функция которая применяет + к двум любым аргументам, а если операция не допустима, то вываливается исключение. Собственно, как в старые добрые времена. Ну вот вам такая функция
def any_add(a: Any, b: Any) -> Any: return a + b
А почему автора это не раздражало пятнадцать лет назад, а когда добавили аннотации вдруг зараждражало? Вы меня извините, но такое чувство, что вы статью написали исключительн ради самолюбования - вот какие я хитрые штуки узнал позавчера.
Я так и не понял, почему невозможно "освоить питон". Наверное, потому что автор дав определение слову "освоить" так и не сказал, что именно он в своей голове понимает под словом "питон". Кажется, этот чудо-человек считает, что осваивание ЯП включает в себя знание наизусть всех объектов и их методов как минимум стандартной библиотеки, а вообще-то лучше вообще всего pypi. Если простить автору его толи безумие толи слабое понимание вопроса по которому он высказывается, то вообще-то статью можно обобщить до такой максимы "ничего в мире невозможно освоить". Вот так, не говорите мне что освоили вождения автомобиля, потому что вы же не знаете ПДД всех стран мира? Или кто ты, токарь восьмого разряда? А на японском станке без манула сможешь? Не освоил профессию. Какой-то бред несут с вумным выражением лица, задрали уже инфоцигане
Когда мы что-то перемещаем, то в исходном месте это что-то исчезает, правильно? А когда копируем, то нет. По-моему, разница очевидна и в запутанных пояснениях не нуждается. В расте вы не сможете использовать перемещенную переменную, потому что её больше там нет
Интересно то, что из всех этих языков последователен в плане семантики только C. При вызове функции все значения всегда копируются. Вот так просто.
А вы уверены, что в расте при перемещении не происходит копирование пямяти? Я имею в виду, что на стек что-то надо же положить, вот это "что-то" это не копия перемещаемого объекта? А что тогда?
Однажды у вас это обязательно случится, с гарантией. В вам придут новые требования, для соответствия которым вам будет необходимо изменить логику всех трех процедур. Две процедуры вы измените, а про третью забудете (хорошо, не вы, а ваш джун с набитыми руками). И будете потом полгода ловить странный сложно воспроизводимый баг. Ну, дебажте, конечно, если вам так нравится, только, пожалуйста, других глупостям не учите. Техника безопасности пишется кровью, а Clean code - нервами, временем, соравнными дедлайнами и деньгами.
Да вы издеваетесь! Это почти как вся моя квартира
Давайте для начала отделим мух от котлет и разберемся в терминологии. Когда мы говорим C#, Java или python, что мы имеем в виду? Мы говорим про язык программирования, как набор синтаксических правил? Или мы говорим про байткод виртуальной машины? Или про саму виртуальную машину? Или про всё вместе? Тут легко запутаться, потому что один и тот же текст программы может компилироваться в нечто совершенно разное, например Котлин может компилироваться в байткод джавы, в нативный код и в веб-ассемблер. В то же время, десятки языков компилируются в аналогичный байткод - языки .Net, языки JVM - их десятки, но все компилируются в байткод соответствующей ВМ. Реализаций ВМ тоже десятки. Вы можете придумать свою виртуальную машину питона, которая будет несовместима с байткодом cpython, но полностью поддерживать python. Или вы можете реализовать совместимую с cpython виртуальную машину, которая будет быстрее за счет каких-то оптимизаций, jit-компиляции или еще чего-то. Или вы можете придумать компилятор JavaScript в байт-код питона.
С другой стороны, сам ЯП на уровне стандарта языка может диктовать пределы в которых вы можете оптимизировать байт-код и виртуальную машину. Например вот так https://docs.python.org/3/reference/datamodel.html Как в питоне происходит обращение к члену объекта? (всё нижеследующее дано грубо и для примера, в действительности всё сложнее). Когда в программе мы пишем
my_object.my_method(),
питон идет в __dict__
объекта, это хеш-таблица, в которой он ищет ключ__get_attr__,
если такового не находится, то питон обращается в классу объекта (который тоже объект), читает dict этого объекта, и ищетget_attr,
если и там не находит он получает родителей класса и для каждого производит этот поиск пока не найдет или не упрется в самый базовый класс. Далее вызывается найденный __get_attr__('my_method'),
что значит вызывается? А это значит что аналогично вышеописанным манипуляциям питон ищет атрибут __call__,
ну и так далее, почитайте по ссыке. Что из этого следует? А то, что как бы вы не хитрили с байт-кодом и виртуальной машиной, чтобы это был питон - вот эта вся пляска по хеш-таблицам обязана выполнятся на каждый чих. В результате, любая функция в питоней программе вольна вернуть что угодно, нет вообще понятия тип возвращаемого значения. Это особенность питона диктуемая его динамической природой. Это не аналогично тому, что из каждого метода С# я буду возвращать object, это совсем другая идиология.Вот из таких соображений у меня складывается претензия к статье. Может быть я невнимательно прочитал, но я решительно не понял, что из себя представляет новый язык, и почему он убийца питона
А я не про преимущества/недостатки говорил, а про то, что язык заявляется как убийца питона, при этом - очевидно - является чем-то совсем иным и несравнимым.
Преимущества и недостатки вещь довольно субъективная, назовем их особенностями. Особенности вытекают из того факта, что объекты питона не обязаны соответствовать известной на момент компиляции схеме. Список полей и методов может быть изменен в рантайме и более того, новые классы можно создавать прямо во время выполнения. Это дает простор для творчества и позволяет вытворять что-то такое https://docs.djangoproject.com/en/4.2/topics/db/queries/#retrieving-specific-objects-with-filters
Зачем? Ну правда, зачем? Python - это язык с динамической типизацией, так он работает, так он устроен, он медленный именно по этому, по сути любой объект питона - это хеш таблица со строковыми ключами, где ключи - имена полей и методов объекта. Быть медленнее Си - имманентное свойство виртуальной машины питона именно ввиду его динамической природы. Хотите виртуальную машину со статической типизацией, ну так их уже есть несколько - Java, .Net. Для этих ВМ придумывают по языку программирования в год, в том числе и динамические языки работающие через рефлексию. И если я не ошибаюсь, скрестить ежа с ужом пытались уже неоднократно - всякие JPython и IronPython тому примеры. Из текста статьи я лично не понял, каким именно образом авторы инновационного языка пытаются усидеть на двух стульях - сделать питон быстрым и динамическим одновременно. Если же ЯП не будет динамическим, то нафига вы его сравниваете с питоном, сравнивайте с языками из этой категории - с джавой, котлином, c#.
Жопа и палец, основные различия, особенности миграции.
Мне кажется сама идея материального стимулирования получения знаний - будь то деньги, гигабайты или конфеты - глубо порочна в своей основе; нельзя привить любовь к чему-либо (к знаниям, например) через меркантилизацию знания, ибо знание в таком случае превращается в посредника для получения денег, а не ценностью в себе. Отсюда феномен "ненужного знания", когда люди всерьез не понимают, зачем в школе проходили квадратное уравнение или строение червя, ведь в "жизни не пригодилось". Мы же уже получили поколение ЕГЭ? Получили десятки тысяч выпускников ВУЗов (моё поколение, дети 70-х, 80-х) окончивших институт ради диплома, отмазки от армии и т.д. при этом абсолютно некомпетентных в своей профессии.
Пользователи приобретают Dumbphones чтобы быть уникальными снежинками "не такими как все". Если эти кнопкофоны опять войдут в моду и станут широко популярны, те же самые пользователи придумают себе новый способ выпендриться, может быть даже внезапно полюбят смартфоны и куда-то сама собой денется "цифровая усталость".
Подозреваю, что если этих же сволочей слёзно попросить вернуть "пожертвованные" им деньги, то не вернут. Не надо их жалеть, действовать тут надо, как говорит минский батька, "жыстачайшэ".
Если те же самые примеры переписать на ассемблере, то мы наверняка обнаружим существенное увеличение производительности, правда? Автор статьи борется с какими-то мизерными проблемами. Подумаешь, заменил массив указателей на массив объектов, выиграл на разыменовании указателя. Подумаешь, избавился от виртуальных методов, выиграл на обращеннии к ТВМ. Если уж начали считать такты и байты, ну давайте посчитаем, а сколько тактов мы тратим на рантайм поддержку функций? Избавиться от них, конечно же, как от ненужных финтифлюшек навязанных кровавым ынтерпрайзом.
Разоблачая порочные практики "лишних" абстакций, автор ловко оставляет за скобками вопрос, а зачем это всё вообще напридумывали. Такое чувство, что "чистый код" - это такой масонский заговор, существующий чтобы нагадить из природной вредности. Очень это похоже на риторику разоблачителей "официальной" науки, когда демагог фокусируется на слабых сторонах теории, забывая о сильных, и выдавая эти слабые стороны за скрываемую от народа правду. Мне кажется, ни для кого не стало открытием, что не все абстракции бесплатны? Дайте оглянемся вокруг и убедимся, что подобный процесс удорожания не уникален для программирования. Давайте посчитаем, сколько бензина мы бы экономили выкинув из автомобиля системы безопасности и экологичекские примочки. А коробка-автомат? Это же 20% топлива впустую.
Автор молодец, что посчитал стоимость бест-практик в единицах и процентах, это интересно. Но вывод - если я его правильно понял - сделан совершенно бестолковый и вредный. Абстракции совершенно необходимы, это особенность нашего типа мышления - мы не можем оперировать большим количеством элементарных сущностей (вспомним закон Миллера). Что, собственно, подтверждается практикой, все эти методики чистого кода (если только автор не имеет в виду хамского тезиса, что многочисленные авторы соответствующих работ навыдумывали ерунды с потолка, и толко он знает, как надо) решают реально существующие проблемы, с коромыми поколения программистов сталкивались и продолжают сталкиваться ежедневно. Предложи соответсвующее бесплатное для ЦПУ решение и получишь почет, уважение и Нобелевскую премию. Думаю, что Ынтерпрайз(тм) был бы толко рад экономить ресурсы.
Ну то есть, когда дерево засыхает, то трескается и издает звук. Если скосить траву, то из неё вытекают пахучие соки, запах которых привлекает насекомых. Я правильно понимаю, что из пары этих удивительных фактов, пытаются высосать сенсацию?
> Или это просто то, что происходит в соответствии с физическими законами.
Не-не-не, какая физика, что вы! Деревья разговаривают, трава кричит, лопухи поют песни по ночам.
Да тем образом, что все эксепшены переехали в рантайм. Если у нас есть текстовый язык разметки определяющий контролы в окне, то никуда не деться от десериализации этого текста в объекты, рефлексии и кучи рантайм-кастов. Такая себе статическая типизация, где все объекты типизированы как object.
В качестве примеров "правильного" софта автор привел множество консольных утилит зачем-то и еще чуть-чуть гиковских программуль, у которых три пользователя на весь мир. Как бы не мечталось поклонникам минимализма, успешно продавать массовому пользователю "редактор от Роба Пайка, написанный под вдохновением от
ed
" или какой-нибудь dwm не получится, это никому не нужно, как бы то не представлялось ужасным любителям меряться мегабайтами, воскрешать найденый на помойке 286-й IBM и гордиться до деспамятсва своим хакерскими талантами, "непотреблядсвом" и отвращением к "свистоперделкам". Давайте взглянем правде в глаза и честно признаем, что классические тулкиты типа Qt, GTK или какого-нибудь Tcl/Tk не могут обеспечить годного по мнению широкого пользователя look-and-feel. Браузер побеждает не потому, что JS проще разрабатывать или быстрее или универсальнее с точки зрения управления проектами, глупости это всё. Браузерные приложения просто интереснее выглядят для пользователя. Можно ли делать подобное, на Qt? Можно, только вы изобретёте еще один браузер. Современный Qt это QML + CSS + JavaScript. Чем это лучше связки HTML + CSS + JavaScript? Да ничем, все попытки сделать по-другому только лучше приводят к изобретению припроетарной тройки Язык Разметки + Язык Стилей + Скриптовый ЯП. Микрософт со своим WPF/SilverLight изобрели XAML (который просто XML на стероидах, который ничем не лучше HTML5) и прикрутили сбоку С# по ходу лишив его преимуществ статической типизации, джависты наизобретали всяких мало работоспособных фреймворков типа Swing, и по итогу рендерят всё в веб и не парятся, GTK весь обмазан CSS, Qt превратился просто в JavaScript даже не претворяется. Такова реальность - любой графический тулкит превращается в браузер, и нафига он нужон если браузер уже есть.Мне кажется pydantic умеет в JSON лучше и может гораздо больше, разве нет? Вообще этот JsonObject кажется вещью бессмысленной, те же датаклассы, namedtuple или attrs умеют сериализовать в словари из коробки.
а разве на больших циклах бранч-предиктор не должен устранять оверхед от проверок границ массива?
ничего не понял
опять не понял, ну сравнил и что? Наверное, имелось в виду, что кодовая база Plan9 существенно меньше и это хорошо? Но ведь миллионы строк линукса написаны не от балды, это поддержка тысяч единиц оборудования, множества файловых систем, протоколов, аппаратных архитектур. Какое-то это очень наивное сравнение.
и... не доказал. Автору нужна была была функция которая применяет + к двум любым аргументам, а если операция не допустима, то вываливается исключение. Собственно, как в старые добрые времена. Ну вот вам такая функция
def any_add(a: Any, b: Any) -> Any:
return a + b
А почему автора это не раздражало пятнадцать лет назад, а когда добавили аннотации вдруг зараждражало? Вы меня извините, но такое чувство, что вы статью написали исключительн ради самолюбования - вот какие я хитрые штуки узнал позавчера.
Я так и не понял, почему невозможно "освоить питон". Наверное, потому что автор дав определение слову "освоить" так и не сказал, что именно он в своей голове понимает под словом "питон". Кажется, этот чудо-человек считает, что осваивание ЯП включает в себя знание наизусть всех объектов и их методов как минимум стандартной библиотеки, а вообще-то лучше вообще всего pypi. Если простить автору его толи безумие толи слабое понимание вопроса по которому он высказывается, то вообще-то статью можно обобщить до такой максимы "ничего в мире невозможно освоить". Вот так, не говорите мне что освоили вождения автомобиля, потому что вы же не знаете ПДД всех стран мира? Или кто ты, токарь восьмого разряда? А на японском станке без манула сможешь? Не освоил профессию. Какой-то бред несут с вумным выражением лица, задрали уже инфоцигане
Когда мы что-то перемещаем, то в исходном месте это что-то исчезает, правильно? А когда копируем, то нет. По-моему, разница очевидна и в запутанных пояснениях не нуждается. В расте вы не сможете использовать перемещенную переменную, потому что её больше там нет
А вы уверены, что в расте при перемещении не происходит копирование пямяти? Я имею в виду, что на стек что-то надо же положить, вот это "что-то" это не копия перемещаемого объекта? А что тогда?
Уставил как написано
>
brew install lazygit
запустил, потыкал, смотрю - внизу написано
H/L to scroll
окей, нажал L, программа зависла навсегда. Знакомство было недолгим