Как стать автором
Обновить
4
0
Alexander Irbis @BlessMaster

Разработчик

Отправить сообщение

Если вам достаточно result, то почему существует unwrap? Как раз таки потому, что у result есть проблемы.

У Result нет проблем. Это идиоматичный и стандартный способ писать обработку ошибок в Rust, имеющий поддержку в том числе со стороны компилятора (напоминающего, что Result - не обработан).

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

Или же, бывает так, что разработчик гарантирует инварианты, инкапсулируя их где-то в приватных методах, так же, как это делается с unsafe, в то время как в интерфейсе где-то под капотом присутствует обязательный Option/Result. Например, какое-то поле всегда Some до вызова Drop::drop, а после вызова drop - к нему никто уже не обратится.

unwrap() решает эти вопросы.

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

В отличие от некорректной работы с указателями, с которыми сравнивается тут где-то выше в обсуждении - Result/Option с unwrap() не создаёт UB и помогает отслживать ошибки.

> У меня нет агрессии - агрессия есть у его адептов, которые именно что агрессивно его продвигают.

Вы пришли в комментарии под обычной новостью о проходном релизе продукта, который не находится в сфере ваших интересов, и устроили срач на тему "не нужен", "ничего нового", "никакой ценности". Серьёзно, "никакой агрессии"? Вас какие-то злобные "адепты" плевками и пинками сюда загнали вот это вот всё писать? =)

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

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

Вот это самое интересное — как устроен разум?
Можно вывести из строя отдельную область мозга или вообще отключить полушарие — человек, конечно, что-то утрачивает, но где та грань, где он перестаёт быть человеком?


Или наоборот — мы можем подключить новую искусственную или "естественно" созданную, как бы это назвать, часть/область, это открывает новые возможности. Можем соединить два разума? Сделать свой молодой "пластичный" клон и соединиться с ним? Можем объединиться в фантастический коллективный суперразум, в котором будут и старые опытные "закостенелые", и молодые, пластичные?


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


Во всех отраслях мы учимся устранять баги, но в IT это особенно горячий вопрос. Почему бы нам не перенести этот опыт на уровень человеческого организма и разума? Тем более этот процесс идёт уже давно, мы всё больше себе позволяем вмешиваться с ростом технологических возможностей и накоплением знаний о человеке и процессе мышления. Можно натренировать мозг лучше считать. Вероятно можно натренировать его и логичнее думать?

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


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


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


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


Я не знаю насчёт "пластичности 5-летнего", а вот здоровье на уровне 20-летнего, дополненное технологичным контролем отклонений и режимов работы организма с одной стороны, и сфера восприятия, дополненная различным автоматическим поиском по базам данных (определение лиц / голосов, опознавание маркерных фраз и т.п. — как далеко мы сможем зайти в этом направлении?) — точно очень многое поменяют.

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


Макросы офиса (и Access в частности) — часто используются для записи длинных последовательностей действий. Они часто линейны, одно за другим. Собственно слово "скрипт" — "сценарий", не просто так обозначает целый класс "скриптовых" языков — языков, где большая часть типового кода скрыта в интерпретаторе, и не нужно (да и нет для этого возможностей) — реализовывать сложные языковые паттерны, а достаточно просто перечислить "установить переменные такие-то", запустить команды такие-то.


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


В сообществе разработчиков Rust и всех сочувствующих (процесс разработки, к слову, открытый) — постоянно поднимается вопрос, насколько "вербозным" или компактным должен быть язык, как только начинают обсуждать синтаксис новых фич. И есть такое противоречие: человек, сталкивающийся с какой-то фичей очень редко или вообще впервые — хочет, чтобы она была более самообъясняющейся. Человек, постоянно работающий с языком, хочет многие вещи более компактными, чтобы они не отвлекали от сути и позволяли уместить в поле зрения более широкую картину.


Так-то и в Rust можно на основе синтаксического дерева целую повесть написать, заменив каждый знак на какое-то формализованное, читаемое и человеком, и машиной, предложение. Продуктивность одних — возрастёт, продуктивность других — упадёт. Чья продуктивность нам при этом важна и на какие компромиссы мы готовы пойти? Где золотая середина между блоксхемами с комиксами и заклинаниями в стиле K/J?

Судя по Вашему описанию, это напоминает не borrow checker, а garbage collector.

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


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


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

В Rust можно свободно разбивать код одного выражения на несколько строчек. И точка с запятой таки действительно выступает как разделитель а не как ритуальный символ, как в других языках, явным образом завершая выражение (поэтому, собственно, и не-Copy значение окончательно дропается в конце инструкции — оно использовано, но не назначено никакому биндингу и никуда не передано). Точка с запятой меняет смысл выражения и это используется компилятором для проверки корректности программы и ловли случайных ошибок.

Это уже конструирование после сопоставления паттерна.
Этот mut никак на паттерн не влияет и не является его частью, так же как &, ref, ref mut или биндинг значения к другому имени.


С таким же успехом можно было бы это заменить на


let (a, b) = function_returning_pair(arg);
let mut b = b;

с точки зрения паттерна — это одно и то же.


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

Эта проблема, на самом деле, перестаёт выглядеть надуманной, когда открываешь код в редакторе с альтернативными настройками на количество пробелов. Типа какого-нибудь mcedit (а бывает, что приходится).
Табы плохой способ форматирования, хоть и терпимый.
Смешанный стиль — печаль...

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


США берёт налоги только в долларах. И это триллионы долларов в масштабах страны. Значит всем бизнесам, работающим в США нужны доллары, как минимум для того, чтобы заплатить налоги.

Биткойн и Эфириум поступают аналогично, беря "налоги" (комиссии за транзакции) в собственной базовой криптовалюте и никак иначе. В этом и ценность BTC и ETH — если хочешь воспользоваться услугами блокчейна — будь добр, купи жетоны для оплаты — этот автомат по-другому "газировку" не выдаёт.


Криптовалюты подкреплены только энтузиазмом фанатов и их (чаще всего слепой) верой.

У публичных блокчейнов (по крайней мере тех, которые в топе) есть собственная ценность: это бухгалтерская книга, в которой нельзя удалить записи. Это, конечно, нужно далеко не каждому обывателю, но, сказать, что не нужно никому и это просто голый энтузиазм — не получится. Плюс криптовалюты уже используются как обменное средство. Это, конечно, не мегастабильный доллар США, евро, йена или ещё что-то из этого списка. Но есть много валют и стран с явно худшими свойствами и обеспечением. Криптовалюты незаметно успели занять место под солнцем глобальных платёжных систем. При этом в блокчейне могут существовать не только собственные базовые валюты, и это — львиная доля ценности блокчейна.


Любая система может рухнуть. СССР с его геополитическим влиянием и амбициями был хорошим примером того, что ничто не вечно. Точно так же рухнуть может США, и доллар. Но мы вероятность такого события рассматриваем как более низкую. Пока хоронили доллар — сменилось не одно поколение хоронителей. И блокчейны — такая же не вечная и уязвимая штука, как и всё, что создано человечеством. Но какова вероятность того, что они исчезнут? 10 лет — немаленький срок, чтобы убедиться, что ценность в них есть. А также увидеть как быстро загибаются все пафосные скам-проекты, возникающие вокруг темы блокчейна.


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


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


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


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


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

Доллар не подкреплен экономикой.
Вы рассказали почему на доллар есть спрос. Потому что он является законным методом платежа, то что называется legal tender. Есть указ государства:

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


Армия, право, экономика, промышленность, наука и технологии — это всё неразделимые части одного целого. Все вместе они поддерживают друг друга, не давая друг другу рассыпаться и исчезнуть. Одно не является следствием другого — они существуют вместе.


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


Но это, в общем-то, и хорошо. Мир не так уж и плох, как мог бы быть.

Не совсем так.


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


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


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

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

В Rust две мутабельные (исключительные) ссылки на одно и то же — не могут быть валидным кодом. И попытка их создать — это всегда UB. Поэтому нет смысла и в ослаблении ошибки до предупреждения.

Ну, я ещё добавлю.
impl<T> — это объявление переменной типа. В этом контексте для Bar<T> — используется переменная, созданная в этом объявлении.
Но точно так же мы можем написать impl Foo for Bar<T> — это такая же легальная реализация, только для конкретного типа T.
Если мы заставим компилятор догадываться "здесь подразумевалась переменная, которую решили не указывать, или конкретный тип, который забыли импортировать" — это в итоге создаст сильно больше проблем, чем решит их. Хотя подобные предложения были и рассматривались в рамках обсуждения по улучшению эргономики языка.

В принципе, в Rust не с потолка все языковые фичи, в том числе и эти "закорючки" берутся — всё это проходит свою эволюцию через обсуждение с комьюнити. Часть "закорючек", к слову в процессе развития языка таки убрали.


Но есть такой конфликт: когда новая фича только появляется, или когда кто-то изучает новую для себя фичу — преобладает желание, чтобы она была более вербозной. Однако, когда опыта и кода становится больше, — возникает желание выражать всё более компактно.


Так что всё зависит от того, кто смотрит на код, и даже восприятие одного человека — не постоянно, и со временем меняется.

Именно после этого — можно утверждать, что в Rust — всё на порядок проще с этим. Потому что небезразличный человек, буквально со стороны, — пробежался по ансейфам и нашёл этот баг.
Люди совершают ошибки. Это не случайность, это — норма.
Rust — язык созданный для упрощения борьбы с ошибками и в этом вся его прелесть. Хотя компилятор по прежнему не может думать за человека, но довольно таки большую часть работы он с человека снимает. Остаётся выполнить свою часть.

Стандартные линки можно опознавать и исправлять соответственно новой адресации — это не должно оказаться сложной задачей.

Информация

В рейтинге
Не участвует
Откуда
Киев, Киевская обл., Украина
Дата рождения
Зарегистрирован
Активность