item = a->ob_item;
/* recycle the items that we are about to remove */
s = norig * sizeof(PyObject *);
/* If norig == 0, item might be NULL, in which case we may not memcpy from it. */
if (s) {
if (s > sizeof(recycle_on_stack)) {
recycle = (PyObject **)PyMem_Malloc(s);
if (recycle == NULL) {
PyErr_NoMemory();
goto Error;
}
}
memcpy(recycle, &item[ilow], s);
}
if (d < 0) { /* Delete -d items */
Py_ssize_t tail;
tail = (Py_SIZE(a) - ihigh) * sizeof(PyObject *);
// TODO: these memmove/memcpy calls are not safe for shared lists in
// GIL_DISABLED builds. (See issue #129069)
memmove(&item[ihigh+d], &item[ihigh], tail);
if (list_resize(a, Py_SIZE(a) + d) < 0) {
memmove(&item[ihigh], &item[ihigh+d], tail);
memcpy(&item[ilow], recycle, s);
goto Error;
}
item = a->ob_item;
}
else if (d > 0) { /* Insert d items */
...
}
for (k = 0; k < n; k++, ilow++) {
PyObject *w = vitem[k];
FT_ATOMIC_STORE_PTR_RELEASE(item[ilow], Py_XNewRef(w));
}
for (k = norig - 1; k >= 0; --k)
Py_XDECREF(recycle[k]);
result = 0;
Error:
if (recycle != recycle_on_stack)
PyMem_Free(recycle);
Py_XDECREF(v_as_SF);
return result;
Чтобы настроить ноут (именно ноут, а не десктоп из ноута) на линуксе так, чтобы он работал хотя бы примерно так же, как работает на Винде10/11 из коробки - нужно быть хорошим спецом,ThinkPad'ы хорошо работают с линухом без напильника и влезают в ценник. Не смотря на какие-то отзывы на реддите. Тут уж скорее дело в невидиевских драйверах, но они будут работать херово на любом железе.
А могу ли я уместить фронт и бэк на одном хостинге?Можете. Можете даже в одном сервисе их уместить, для этого есть паттерн Backend-for-Frontend. Я предлагаю разделение исключительно потому, что работоспособность этого функционала может в случайный момент отвалиться (см сообщение выше) и будет глупо если из-за этого отвалится весь фронтенд.
Спросил, т.к. на 4ПДА последние несколько месяцев любители модов приложения активно страдают.Это бесполезно спрашивать, слишком много неизвестных: кейсы у всех чем-то отличаются, алгоритмы ВА могут меняться или даже быть не детерминированными.
А какое различие у функций вообще, если в одной тип параметра &Box и в него мы передаем b, который имеет тип Box от параметра просто &i32?
Box<T>
реализует трейт Deref, где Target = T. Это означает, что при использовании указателя он может неявно приводиться к типу T. По тому же принципу, например функции с параметром &str, могут принимать String.И если надо просто адрес проверить, то есть вывести на экран, то лучше использовать "{:p}" для этого? И не мучиться с системой типов?Это описано в std::fmt. Если нужно только вывести, логичнее использовать для этого готовые параметры форматирования.
я уже читал эти документации, но не понял эту главу.Взять и повторить руками пример, который в ней дан. К концу главы у вас будет ровно та структура, которую вы пытаетесь воспроизвести.
Напишите ответВам компилятор уже написал ответ. Даже два, т.к не знает точно ваших намерений.
= help: to create the module `db`, create file "src\cmd\db.rs" or "src\cmd\db\mod.rs"
= note: if there is a `mod db` elsewhere in the crate already, import it with `use crate::...` instead
А вообще есть еще механизм интернирования и если строка определена на этапе компиляции как ImmortalObject память выделяется один раз при запуске. Причем в сборке с `nogil` имморталами являются чуть ли не все строки, которые можно вычислить на этапе компиляции.