Size: a a a

2021 April 21

ΑZ

Αλεχ Zhukovsky in rust_offtopic
ну либо как void* если тебе не нужно в расте его читать.

Если нужно то как CString
источник

ΑZ

Αλεχ Zhukovsky in rust_offtopic
источник

NL

Nick Linker in rust_offtopic
грусть навеваешь токо ☺️ А ведь есть ифдефы, трансмьюты, можно парсить плюсовые сорцы, чтобы выбрать подходящую реализацию...
А ты просто вещаешь "никак" и умываешь руки...
источник

KR

Kai Ren in rust_offtopic
Опять zig-пропаганда какая-то
источник

NN

Nikita Nazarenko in rust_offtopic
O/
источник

Т8

Т-34 85 in rust_offtopic
а по ABI чо?
источник

NL

Nick Linker in rust_offtopic
В принципе понятно, спасибо, Алекс.
источник

ΑZ

Αλεχ Zhukovsky in rust_offtopic
источник

SP

Stanislav Popov in rust_offtopic
теперь я больше понимаю зачем в скале такой цирк
источник

ID

Iv@n Dereviankin in rust_offtopic
время доставать тыкальные палочки
источник

CD

Constantine Drozdov in rust_offtopic
Ну ладно, технически можно пойти парой путей. Принципиальная проблема: нужно протащить хотя бы аллокатор, если мы передаём владение. В плюсах есть std::pmr::* семейство с полиморфными аллокаторами. Вроде бы в любом случае унифицировать интерфейс с плюсовой стороны проще, чем распарсить его бинарные данные - иначе нужно прямо из компилятора тягать данные, потому что хрен кто просто так гарантирует как ляжет плюсовый класс
источник

CD

Constantine Drozdov in rust_offtopic
То есть внутри того же std::string будет compressed_pair, который наследует один из аргументов
источник

NL

Nick Linker in rust_offtopic
Самое большое, что меня смущает в плюсовой строке — это нетривиальный мув-конструктор. А второе — потенциальная оптимизация малых строк, внезапно объект превращается в самоссылающуюся структуру и его надо пинить.
источник

CD

Constantine Drozdov in rust_offtopic
Она не потенциальная, SSO будет всегда. Мув-конструктор нетривиален, а вот релокация может быть как тривиальной, так и нет - собственно, две реализации, и одна из них потенциально self rerefence. У std::vector просто запрещен аналог SSO, там проще
источник

CD

Constantine Drozdov in rust_offtopic
Можно пытаться тот же std::string_view поднимать, протаскивая владение через std::vector, если мы в плюсы тащим
источник

CD

Constantine Drozdov in rust_offtopic
Да, к черту подробности - надо std::string отдать расту или плюсам?
источник

NL

Nick Linker in rust_offtopic
Иногда из плюсов в раст, но эту проблему я объехал созданием маленького переходника и возвращаю обёртку в раст по ссылке (но это сам понимаешь — не 100% решение, потому что никто не гарантирует, что плюсовая строка будет жить достаточно долго).

Но в большинстве своём из раста в плюсы.
В 100% случаев люди, когда сталкиваются с передачей std::string по значению, просто переводят в char * и передают указатель. Ну для меня это компромиссное и нелучшее решение.
Так что я думаю, возможно ли теоретически написать такую обёртку над std::string, чтобы передавать владение и в Расте тоже. Теоретически ты уже описал пространство возможностей, понятно, что будет поддерживаться только msvc/gcc и шланг, причём нужно будет поддерживать матрицу версий (версия компилятора и версия std), ясно, что это стрёмная задача. Но зато офигенно нужная.
источник

ΑZ

Αλεχ Zhukovsky in rust_offtopic
ну а что мешает тебе передать char* и скопировать в std::string?
источник

CD

Constantine Drozdov in rust_offtopic
string_view конечно (два указателя надо передавать)
источник

ΑZ

Αλεχ Zhukovsky in rust_offtopic
в растокоде string_view не создашь сорян
источник