?

Log in

No account? Create an account
Previous Entry Share Next Entry
роботехника
404
amarao_san
Если во время операции на открытом сердце при попытке пришить артерию к сердцу робот обнаруживает, что unsupported operand type(s) for +: 'NoneType' and 'str, то что он должен сделать?

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

Каждый из этих вариантов страшен по-своему.

  • 1
Выглядит как цитата из учебника по Коммон Лиспу, глава "Conditions" (не знаю, как это по-русски). Они очень любят такие примеры.

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

... Ищу смысл смерти ...


И вроде, это одна из тех вещей, которую еще пока не унесли в другие языки

Вариант "такой ситуации не должно быть в принципе" чем плох? Типы все только статические, проверки на этапе компиляции...

Кто кому в этой ситуации "должен" и какими средствами обеспечивается это долженствование? Софт без багов - нонсенс.

Если не NoneType, то любой другой любимый message от любимого фреймворка. Допустим, кто-то его написал на Хаскеле, и имеем мы в результате - Segmentation fault: 11.

Дальше, супервизор может ... (см список выше).

Что делать-то?

Знаешь почему у нас в IT полная жопа во всём, за что не возьмись?
Потому что если развалится дом с человеческими жертвами - то сядет архитектор/строители (в зависимости от того, по чьей вине).
А в том случае который описал ты - не будет ничего никому. Уж тому программисту, который это написал - точно.

К сожалению.

P.S. Это я к тому, что если по уму, то такого вопроса просто возникать не должно "что делать в такой ситуации".

Edited at 2017-06-27 03:37 pm (UTC)

Я не вижу, чтобы с IT была жопа. Скорее, наоборот, индустрия процветает.

Проблема с архитекторами и т.д. состоит в том, что пока архитектор спланирует дом, в IT сменится два языка, три субд и четыре парадигмы разработки, а ТЗ поменяется на 1337 градусов.

Ага, то есть ошибкочка-то повторяющаяся... Если робот смог это рпонять -- остается только аварийный оставнов с диагностикой.

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

Хороший вариант. Только API должно быть согласовано. Иначе "неподдерживаемый тип разреза", и т.д.

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

И кстати что мешает для критических применений использовать язык со строгой типизацией?

При этом миллиард швов при 20 степеней свободы у шва - это один попробованный вариант на каждые 10 миллиардов возможных комбинаций. Не говоря уже про числовые значения.

У меня на работе программисты как раз такую задачу решают - оптимизация крайне нелинейной негладкой недифференцируемой функции примерно 200к переменных.

так сказать, покрой тестами this.

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

А в чём тут экономия-то? Зарплату платить надо и так и так, а ещё надо покупать больше кофе и роботов.


> а) Сказать "TRACE" и остановиться.

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

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

Вы можете посмотреть на ютубе ролики по запросу CNC fail - там чистый императив, подвинуть манпулятор А по оси Б на Х микрометров. Для работы в неопределённой среде такой подход невозможен.

Обычный код окажется где-то в глубинах, и будет он очень простым, на котором обычно работу с железом и пишут. Это Structured Text какой-нибудь, там рядом Ada с формальной верификацией и VHDL.

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

Вообще, здесь в обсуждении не хватает Oldmann'а. Как раз для пояснения разницы между айти нормальным и айти популярным, зародившемся на помойке, как мыши в грязном белье. Некий вася написал джаст фо фан, остальные подхватили. А что, фан же. Полный фофан. Оно даже работает, если палочкой подпереть. А если выучить предназначение 100500 палочек и их сучки, то можно в operations идти работать.

  • 1