Тюю. Я думал, тут будет про геометрию, что-то вроде "сенсация, эппл запатентовал сплайны" или "британские учёные показали, что для человеческого глаза приятны кривые, n-жды дифференцируемые в каждой точке"...
Вот только для поведения программы - если, разве что, не упороться по сравниванию их id'ов, - это не имеет значения.
Например, маленькие целые числа в питоне идентифицируют сами себя. Одинаковые значения - одинаковые id'ы. (Если бы это было не так, это была бы адская просадка производительности). А большие целые числа лежат в памяти, и два одинаковых могут лежать в разных местах.
В этом и есть главное отличие значений от "обычных" объектов. Нам плевать на детали реализации, значения между собой неразличимы для нас. Поэтому они могут мигрировать как угодно по памяти - копироваться, кэшироваться, даже вычисляться на лету.
Объект в ООП - это сущность с идентичностью, поведением и состоянием. Раз нам идентичность нужна, тогда мы вынуждены заморозить состояние. Можно наоборот - состояний много, но идентичность пропадает, это техника copy on write. Ну и поведение - либо не трогает идентичность (не переселяет объект), либо не трогает состояние.
Сравнивать текущие состояния объектов - не проблема. Проблема - использовать изменчивые объекты в качестве ключей в словарях. Поэтому волюнтаристским образом договариваются: если у объекта нет функций, изменяющих его, то только тогда мы ассоциируем с ним функцию нахождения хеша его состояния (сиречь, его значения) - добавляем метод в его класс. В C++ делают по-другому, там можно наложить константность на тип. (Эту константность, конечно, тоже можно хакнуть и сделать программе больно, - но зачем).
Польза в том, что где-то в другом месте могут быть ссылки на это же самое значение. И вот такое внезапное переписывание сломает всё.
x = 123
y = x
y += 456 # фактически, y = y + 4,5,6
assert x == 123
x = '123'
y = x
y += '456' # тоже замена объекта, y = y + '456'
assert x == '123'
x = (1,2,3)
y = x
y += (4,5,6) # тоже замена объекта
assert x == (1,2,3)
x = [1,2,3]
y = x
y += [4,5,6] # а вот у list это автоинкремент!
assert x == [1,2,3,4,5,6] # wtf, да?
assert id(x) == id(y)
Семантика значений предполагает неразличимость одинаковых экземпляров между собой. Семантика объектов - различает экземпляры по адресу. (Хотя сравнивать значения объектов никто не мешает).
Разные переменные могут ссылаться на один и тот же экземпляр.
В случае значений ссылка на общий экземпляр - это всего лишь оптимизация, и при изменении нужно выполнять copy on write. В случае объектов - это уже обязанность, заложенная в семантику.
x = SomeObject() # создали объект "в воздухе" и затем запомнили его в x
y = x # и его же (а не его копию) запомнили в y
x.DoSomething() # этот объект что-то делает
y.DoSomethingElse() # тот же самый объект делает что-то другое
Жизнь с семантикой только объектов - в принципе, возможна, но писанины при этом будет больше. Сишные строковые буферы со всеми этими strdup, strcpy, strcat мало людям крови попили?
Другое дело, что, когда в языке обе семантики сосуществуют, да ещё и в одном синтаксисе, - новичка это может знатно смутить, а также подвигнуть на написание багов.
Самый популярный баг - это дефолтные аргументы функций с семантикой изменяемого объекта. Опытные по этим граблям прошлись, поэтому дефолтят к чему-нибудь неизменяемому, например, None, а внутри функции ветвятся.
Разгоняли они очень специфическими методами. У меня, например, заблокировали платную лицензию, потому что им показалось, что я её в корпоративных целях использую. При том, что я двух человек админил по дружбе буквально там раз в пару месяцев. Да и блокируйте, козлы, анидеск есть и ещё вагон всяких других.
А кто платит реальные бабки, ну вот пусть и платят. Корпоративный сектор - странные люди, готовы платить втридорога за вендор-лок.
Это же исходно платформа для удалённого доступа и развёртывания пиринговых VPN-ов, а уж что там делать - рубиться с игрухи или бухгалтера админить - дело хозяйское.
Но внезапно хозяева конторы хотят кушать. И как только они стали хотеть кушать больше, чем к этому был готов рынок, халявщики убежали. А нехалявщики смогли себе позволить и подешевевшие серверные решения, и тоже убежали.
Примерно в это же время другая компания сыграла в анальное огораживание - это TeamViewer. Тоже разогнала всю клиентскую базу... При наличии бесплатных аналогов. Ну флаг им в руки.
Вот именно, никто никому не обязан. Поэтому и уровень релевантности там тоже... не обязывающий.
И я тоже не обязан, увидев нестыковки в смежных статьях по биологии, всё сейчас бросить и побежать читать свежие научные журналы и приводить весь кластер в адекватное состояние. Я вижу, что какая-то псина в статье "псина псиная" относится к псиным, а в статье "псиные" уже к "сучьим". Ок, понятно, здесь правды не сыщешь, пойду в другое место.
А причины, почему этот человек гад, могут быть в ассортименте. Начиная с того, что гадом мог быть тот, кто расставил гиперссылки позже. Или что систематика ещё в процессе уточнения, генетики сами до конца не уверены, править статью "псина", "псинообразные" или "сучьи".
Вот только в релиз справочника по систематике псин такой букет не вошёл бы, а в накат правок википедии - с лёгкостью необычайной. Википедия - это CVS в мире энциклопедий.
Бегать по участкам смотреть уровень сигнала - это хорошо, но это не надёжно. Как только у вас там понастроят домов, - появится и тень, и интерференция, и всё такое. Хотя это и не самый значительный фактор. Если вышка далеко, то тень от всего того, что между ней и вами, будет сильнее влиять, чем грядущие постройки домиков. Хотя и это не самый значительный фактор! В зависимости от погоды сигнал от далёкой вышки может сильно меняться. И вот сегодня вы всё измерили, а завтра подул лёгкий ветерок, и ваши измерения не измерения. Постоянно это наблюдал в деревне моей племянницы неподалёку от Пушкинских Гор (8 км до вышки). Но направленная антенна с усилителем тут поможет.
Сезонность, мать её! Зимой нагрузка на вышки на дачах в десятки раз меньше, чем летом днём на выходных. Зимой у меня на даче в Ленобласти, в Орехово - МТС спокойно отдаёт 2Мбит/с (такой у меня тариф на резервном канале), а летом - 64кбит/с. И никакой усилитель не спасёт, потому что непосредственно под вышкой сидят толпы народу, у которых уровень сигнала будет больше, даже если я прожектор поставлю.
Лимиты-безлимиты. Захотите посмотреть телек в онлайн-кинотеатре Кион, а там вдруг выяснится, что они не умеют в сжатие потокового видео. И весь ваш лимит вылетит за пару дней. Имел такой печальный опыт, не ждал подлянки. Что там у других кинотеатров, я хз.
Мой подход. Оптика до дома, и роутер с симкой, умеющий переключаться на неё автоматически. Это какой-то дешманский TP-Link, этого хватает. Зато всегда на связи, вне зависимости от проблем оптического провайдера... и проблем мобильного провайдера тоже.
А если вы не уверены, где будет стоять ваш дом, - ну попросите оптиков, чтобы они вам перед бытовкой намотали десяток лишних метров кабеля в кольцо. Да в конце концов, муфты же есть.
Модераторы википедии приложили все усилия, чтобы это произошло.
С одного края - абсолютный плюрализм и неразборчивость, когда "если есть пруфлинк, значит, можно добавить в статью", а если нет пруфлинка, то давайте пометим [источник непроверен 100500 дней] и на том и успокоимся.
С другого - анальные огороды и личные пристрастия. Бибиси доверенный источник, Раша Тудей недоверенный. В обсуждениях к удалению статьи (неважно, политота, наука, персонаж или что угодно) - кто последний покричал в комментах, за тем и осталось решение. Кому надоело кричать, тот забил болт.
Даже в научных статьях никто не следит за релевантностью. Возьмите биологию - систематика там в двух соседних статьях, ссылающихся друг на друга, может быть разбросана от Линнея, если не Аристотеля, до свежайшей генетики. Потому что учёный-генетик одну статью поправил, а про вторую даже не подозревал, пока какая-то школота не добавила перекрёстные ссылки. Ну или подозревал, но ему было уже лень править две статьи, а где две, там и двести, и у него лапки отвалились...
Итого, репутация у википедии сложилась - "вы мне ещё пруфы на википедию дайте, ага".
А теперь этот колхоз плачет, "почему нас меньше читают".
Не, ну спасибо, что корпус хоть каких-то знаний собрали и поддерживают.
Вот только доверьяй-но-проверьяй таков, что надо и по перекрёстным ссылкам во все стороны сбегать, и историю правок и обсуждение прочитать, вдруг там какой-то упоротыш с админскими правами лютовал. Или наоборот, админы мышей не ловили, пока какой-то упоротыш не навандалил.
Макнитесь с разбегу в любую современную политоту на википедии, и увидите этот перекос. Хотя, если вы сами с этим перекосом, то вам покажется, что всё нормально.
Я не настоящий сварщик или редактор журнала, чтобы говорить весомо и аналитично, но!
Моё личное оценочное мнение, - когда некая компания устраивает под своим именем помойку из всего на свете, - это какой-то блуд, шляние и проституция. Если вы Селектел или Сбер, и если вы пишете о тех вещах, которые вы в Селектеле или Сбере делаете и-или к которым причастны, - то есть, обладаете экспертизой, - это ок. Но когда Селектел просто напылесосил себе литературных негров, чтобы устроить тут смесь Техники-Молодёжи, Крестьянки и Спид-Инфо, - это не более, чем рекламная кампания "смотрите, у нас есть деньжищи привлекать авторов всего на свете". Ну деньжищи есть, ну молодцы, а селективности у Селектела нет.
Единственный тип предприятия, кому позволительно творить такое, - это издательство. Питер там, Эксмо или кто ещё сейчас научную и техническую литературу печатает. Статьи на хабре - это малая форма, за крупной идите в магазин.
Ну ладно, допустим, некоторые компании реально претендуют стать ACME Corp. (a company making everything) - те же Яндекс, Сбер, кого ещё назвать... Но блин, Селектел! Просто ферма для облачного железа. Так и хочется сказать словами помещицы Кузякиной: Вы, Иван Таранов, пивовар, вот и варите своё пиво, а оперы пусть Шаляпин поёт.
Ошибка номер ноль. Иллюстрировать рекламу солидных услуг для солидных господ с помощью (подставьте сюда все матерные слова, какие вы знаете) офисного мемфиса.
Скажите, вы эти картинки сами нарисовали, или утащили с какого-то помоечного фотостока, или попросили какую-то нейронку нагенерить? Вне зависимости от варианта ответа, - БОЛЬШЕ НИКОГДА ТАК НЕ ДЕЛАЙТЕ.
Не понимаю, зачем переводить весьма куцую статью, которая апеллирует ещё к дремучим пидипи и ваксам, если тема раскрыта почти никак, - тогда как существует, например, здоровенная "книга неопределённых поведений"?
Видов неопределённого поведения много. Элементарно: любое нарушение предусловия любой библиотеки, - и вуаля, поведение не определено.
Если сказано "memcpy не умеет работать с перехлёстом массивов, не делайте так", а вы сделали так, - вас ждут необычные сюрпризы. Скорее всего, до аппаратных защит вы не доиграетесь, но кучу мусора в данных получить рискуете.
Если сказано "нельзя обращаться к элементам вектора за границами диапазона", а вы обратились, - поведение не определено. Может случиться ничего, а может сработать ассерт, и программа покрешится (в дебажной версии).
Неопределённости, связанные с арифметикой, конечно же, - это самая большая странность языка C++. Грабли, на которые можно наступить внезапными способами, при всей их лаконичности. Но очевидно же, что не только они.
Я однажды наблюдал ситуацию, когда три неопределённых поведения в коде полностью нейтрализовали друг друга, так, что программа просто обязана была работать правильно. Но это оказалось чертовски хрупким кодом, который разрушался добавлением логгирования, например!
Тюю. Я думал, тут будет про геометрию, что-то вроде "сенсация, эппл запатентовал сплайны" или "британские учёные показали, что для человеческого глаза приятны кривые, n-жды дифференцируемые в каждой точке"...
И собственно, формула этих поли-линий...
Берём квадрат (эквидистанту в метрике Чебышёва), берём окружность (эквидистанту в метрике Евклида), вау, квадратокружность! Берём квадрат, берём x^4 + y^4 = const, вау, сквиркл!
Собственно, "сквиркл" - это square-circle, тот самый эппл-пайнэппл-эппл-пен! Супперэллипс четвёртой степени.
А реверс-инжиниринг эппловских руководств по корпоративному дизайну - "сколько процентов для чего положено" - это лирика.
Литералы тоже являются объектами.
Вот только для поведения программы - если, разве что, не упороться по сравниванию их id'ов, - это не имеет значения.
Например, маленькие целые числа в питоне идентифицируют сами себя. Одинаковые значения - одинаковые id'ы. (Если бы это было не так, это была бы адская просадка производительности). А большие целые числа лежат в памяти, и два одинаковых могут лежать в разных местах.
В этом и есть главное отличие значений от "обычных" объектов. Нам плевать на детали реализации, значения между собой неразличимы для нас. Поэтому они могут мигрировать как угодно по памяти - копироваться, кэшироваться, даже вычисляться на лету.
Объект в ООП - это сущность с идентичностью, поведением и состоянием. Раз нам идентичность нужна, тогда мы вынуждены заморозить состояние. Можно наоборот - состояний много, но идентичность пропадает, это техника copy on write. Ну и поведение - либо не трогает идентичность (не переселяет объект), либо не трогает состояние.
Сравнивать текущие состояния объектов - не проблема. Проблема - использовать изменчивые объекты в качестве ключей в словарях. Поэтому волюнтаристским образом договариваются: если у объекта нет функций, изменяющих его, то только тогда мы ассоциируем с ним функцию нахождения хеша его состояния (сиречь, его значения) - добавляем метод в его класс. В C++ делают по-другому, там можно наложить константность на тип. (Эту константность, конечно, тоже можно хакнуть и сделать программе больно, - но зачем).
Польза в том, что где-то в другом месте могут быть ссылки на это же самое значение. И вот такое внезапное переписывание сломает всё.
Семантика значений предполагает неразличимость одинаковых экземпляров между собой. Семантика объектов - различает экземпляры по адресу. (Хотя сравнивать значения объектов никто не мешает).
Разные переменные могут ссылаться на один и тот же экземпляр.
В случае значений ссылка на общий экземпляр - это всего лишь оптимизация, и при изменении нужно выполнять copy on write. В случае объектов - это уже обязанность, заложенная в семантику.
Жизнь с семантикой только объектов - в принципе, возможна, но писанины при этом будет больше. Сишные строковые буферы со всеми этими strdup, strcpy, strcat мало людям крови попили?
Другое дело, что, когда в языке обе семантики сосуществуют, да ещё и в одном синтаксисе, - новичка это может знатно смутить, а также подвигнуть на написание багов.
Самый популярный баг - это дефолтные аргументы функций с семантикой изменяемого объекта. Опытные по этим граблям прошлись, поэтому дефолтят к чему-нибудь неизменяемому, например, None, а внутри функции ветвятся.
Это даже не научпоп, это научПОПСА. Столько воды - и ни о чём.
Разгоняли они очень специфическими методами. У меня, например, заблокировали платную лицензию, потому что им показалось, что я её в корпоративных целях использую. При том, что я двух человек админил по дружбе буквально там раз в пару месяцев. Да и блокируйте, козлы, анидеск есть и ещё вагон всяких других.
А кто платит реальные бабки, ну вот пусть и платят. Корпоративный сектор - странные люди, готовы платить втридорога за вендор-лок.
LogMeIn / Hamachi сгубила коммерция, вот и всё.
Это же исходно платформа для удалённого доступа и развёртывания пиринговых VPN-ов, а уж что там делать - рубиться с игрухи или бухгалтера админить - дело хозяйское.
Но внезапно хозяева конторы хотят кушать. И как только они стали хотеть кушать больше, чем к этому был готов рынок, халявщики убежали. А нехалявщики смогли себе позволить и подешевевшие серверные решения, и тоже убежали.
Примерно в это же время другая компания сыграла в анальное огораживание - это TeamViewer. Тоже разогнала всю клиентскую базу... При наличии бесплатных аналогов. Ну флаг им в руки.
Понятно, это Раша Тудей виновата, а Бибиси невиновата. Этодругин Форте.
Отражение реальности в разбитом зеркале.
Вот именно, никто никому не обязан. Поэтому и уровень релевантности там тоже... не обязывающий.
И я тоже не обязан, увидев нестыковки в смежных статьях по биологии, всё сейчас бросить и побежать читать свежие научные журналы и приводить весь кластер в адекватное состояние. Я вижу, что какая-то псина в статье "псина псиная" относится к псиным, а в статье "псиные" уже к "сучьим". Ок, понятно, здесь правды не сыщешь, пойду в другое место.
А причины, почему этот человек гад, могут быть в ассортименте. Начиная с того, что гадом мог быть тот, кто расставил гиперссылки позже. Или что систематика ещё в процессе уточнения, генетики сами до конца не уверены, править статью "псина", "псинообразные" или "сучьи".
Вот только в релиз справочника по систематике псин такой букет не вошёл бы, а в накат правок википедии - с лёгкостью необычайной. Википедия - это CVS в мире энциклопедий.
В обсуждениях там именно что комменты. А что модераторов не существует, это вы расскажите людям, которые уполномочены патрулировать.
Я без понятия, как они это сделали, - может быть, они отдают всегда в максимальном разрешении, а уже сам проигрыватель масштабирует в размер экрана.
не надейся, не один
По поводу мобильного интернета.
Бегать по участкам смотреть уровень сигнала - это хорошо, но это не надёжно. Как только у вас там понастроят домов, - появится и тень, и интерференция, и всё такое.
Хотя это и не самый значительный фактор. Если вышка далеко, то тень от всего того, что между ней и вами, будет сильнее влиять, чем грядущие постройки домиков.
Хотя и это не самый значительный фактор! В зависимости от погоды сигнал от далёкой вышки может сильно меняться. И вот сегодня вы всё измерили, а завтра подул лёгкий ветерок, и ваши измерения не измерения.
Постоянно это наблюдал в деревне моей племянницы неподалёку от Пушкинских Гор (8 км до вышки).
Но направленная антенна с усилителем тут поможет.
Сезонность, мать её! Зимой нагрузка на вышки на дачах в десятки раз меньше, чем летом днём на выходных. Зимой у меня на даче в Ленобласти, в Орехово - МТС спокойно отдаёт 2Мбит/с (такой у меня тариф на резервном канале), а летом - 64кбит/с. И никакой усилитель не спасёт, потому что непосредственно под вышкой сидят толпы народу, у которых уровень сигнала будет больше, даже если я прожектор поставлю.
Лимиты-безлимиты. Захотите посмотреть телек в онлайн-кинотеатре Кион, а там вдруг выяснится, что они не умеют в сжатие потокового видео. И весь ваш лимит вылетит за пару дней. Имел такой печальный опыт, не ждал подлянки. Что там у других кинотеатров, я хз.
Мой подход. Оптика до дома, и роутер с симкой, умеющий переключаться на неё автоматически. Это какой-то дешманский TP-Link, этого хватает. Зато всегда на связи, вне зависимости от проблем оптического провайдера... и проблем мобильного провайдера тоже.
А если вы не уверены, где будет стоять ваш дом, - ну попросите оптиков, чтобы они вам перед бытовкой намотали десяток лишних метров кабеля в кольцо. Да в конце концов, муфты же есть.
зашёл за этим комментарием
Модераторы википедии приложили все усилия, чтобы это произошло.
С одного края - абсолютный плюрализм и неразборчивость, когда "если есть пруфлинк, значит, можно добавить в статью", а если нет пруфлинка, то давайте пометим [источник непроверен 100500 дней] и на том и успокоимся.
С другого - анальные огороды и личные пристрастия. Бибиси доверенный источник, Раша Тудей недоверенный. В обсуждениях к удалению статьи (неважно, политота, наука, персонаж или что угодно) - кто последний покричал в комментах, за тем и осталось решение. Кому надоело кричать, тот забил болт.
Даже в научных статьях никто не следит за релевантностью. Возьмите биологию - систематика там в двух соседних статьях, ссылающихся друг на друга, может быть разбросана от Линнея, если не Аристотеля, до свежайшей генетики. Потому что учёный-генетик одну статью поправил, а про вторую даже не подозревал, пока какая-то школота не добавила перекрёстные ссылки. Ну или подозревал, но ему было уже лень править две статьи, а где две, там и двести, и у него лапки отвалились...
Итого, репутация у википедии сложилась - "вы мне ещё пруфы на википедию дайте, ага".
А теперь этот колхоз плачет, "почему нас меньше читают".
Не, ну спасибо, что корпус хоть каких-то знаний собрали и поддерживают.
Вот только доверьяй-но-проверьяй таков, что надо и по перекрёстным ссылкам во все стороны сбегать, и историю правок и обсуждение прочитать, вдруг там какой-то упоротыш с админскими правами лютовал. Или наоборот, админы мышей не ловили, пока какой-то упоротыш не навандалил.
Хорошо жить в мире розовых пони, правда же?
Макнитесь с разбегу в любую современную политоту на википедии, и увидите этот перекос. Хотя, если вы сами с этим перекосом, то вам покажется, что всё нормально.
Я не настоящий сварщик или редактор журнала, чтобы говорить весомо и аналитично, но!
Моё личное оценочное мнение, - когда некая компания устраивает под своим именем помойку из всего на свете, - это какой-то блуд, шляние и проституция. Если вы Селектел или Сбер, и если вы пишете о тех вещах, которые вы в Селектеле или Сбере делаете и-или к которым причастны, - то есть, обладаете экспертизой, - это ок. Но когда Селектел просто напылесосил себе литературных негров, чтобы устроить тут смесь Техники-Молодёжи, Крестьянки и Спид-Инфо, - это не более, чем рекламная кампания "смотрите, у нас есть деньжищи привлекать авторов всего на свете". Ну деньжищи есть, ну молодцы, а селективности у Селектела нет.
Единственный тип предприятия, кому позволительно творить такое, - это издательство. Питер там, Эксмо или кто ещё сейчас научную и техническую литературу печатает. Статьи на хабре - это малая форма, за крупной идите в магазин.
Ну ладно, допустим, некоторые компании реально претендуют стать ACME Corp. (a company making everything) - те же Яндекс, Сбер, кого ещё назвать... Но блин, Селектел! Просто ферма для облачного железа. Так и хочется сказать словами помещицы Кузякиной: Вы, Иван Таранов, пивовар, вот и варите своё пиво, а оперы пусть Шаляпин поёт.
Ошибка номер ноль. Иллюстрировать рекламу солидных услуг для солидных господ с помощью (подставьте сюда все матерные слова, какие вы знаете) офисного мемфиса.
Скажите, вы эти картинки сами нарисовали, или утащили с какого-то помоечного фотостока, или попросили какую-то нейронку нагенерить? Вне зависимости от варианта ответа, - БОЛЬШЕ НИКОГДА ТАК НЕ ДЕЛАЙТЕ.
Ниже в комментах и другой олд с рсдн проявился. Все мы так или иначе мигрируем по вселенным с единомышленниками.
Потому что русский язык полон по Тьюрингу, Ершову, и даже Эйлеру и Канту, великим русским мыслителям! )))
Не понимаю, зачем переводить весьма куцую статью, которая апеллирует ещё к дремучим пидипи и ваксам, если тема раскрыта почти никак, - тогда как существует, например, здоровенная "книга неопределённых поведений"?
Видов неопределённого поведения много. Элементарно: любое нарушение предусловия любой библиотеки, - и вуаля, поведение не определено.
Если сказано "memcpy не умеет работать с перехлёстом массивов, не делайте так", а вы сделали так, - вас ждут необычные сюрпризы. Скорее всего, до аппаратных защит вы не доиграетесь, но кучу мусора в данных получить рискуете.
Если сказано "нельзя обращаться к элементам вектора за границами диапазона", а вы обратились, - поведение не определено. Может случиться ничего, а может сработать ассерт, и программа покрешится (в дебажной версии).
Неопределённости, связанные с арифметикой, конечно же, - это самая большая странность языка C++. Грабли, на которые можно наступить внезапными способами, при всей их лаконичности. Но очевидно же, что не только они.
Я однажды наблюдал ситуацию, когда три неопределённых поведения в коде полностью нейтрализовали друг друга, так, что программа просто обязана была работать правильно. Но это оказалось чертовски хрупким кодом, который разрушался добавлением логгирования, например!
Вот тут - ужасы нашего городка https://kodt-rsdn.livejournal.com/228358.html
А вы говорите - древний вакс...