amarao_san

Categories:

растовое

Ещё одна, не очевидная в начале вещь, состоит в том, что Rust очень сильно struct-centric. Существенная часть времени уходит на написание структур, причём не только «основопологающих», но и кучи вспомогательных. Это близко к 'data driven programming', когда приходится думать о типах полей их смысле много больше, чем (например) в питоне.

В питоне артикуляция смысла вложенного элемента (условного foo['bar'][3]['baz']) глубоко опциональна и служит только повышению читаемости. В Rust — фактически, обязательна.

Это и раздражает, и облегчает потом написание кода (потому что все поля уже поименованы, как на входе, так и на выходе, так что свободы манёвра в коде мало).

А ещё, я просто не могу не писать кипятком от borrowck...

Смотрите, цикл обхода quadtree (4 потомка у ноды), который передаёт 'data' в один из потомков (простите, жж и код несовместимы):

Разумеется, это ошибка. Почему? Потому что теоретически, может быть, что у нас is_inside для двух квадрантов. А data у нас принципиально не Copy, т.е. происходит move. А дважды move делать нельзя. Решение?

Так как return гарантирует, что в loop случится только один match, то всё ок.

Error

default userpic

Your IP address will be recorded 

When you submit the form an invisible reCAPTCHA check will be performed.
You must follow the Privacy Policy and Google Terms of use.