Size: a a a

Rust — русскоговорящее сообществo

2020 October 17

DS

David Sorokin in Rust — русскоговорящее сообществo
из-за несоответствия соглашения могут быть очень большие сюрпризы тоже, как и из-за несоответствия алокаторов
источник

AT

Anton TrionProg in Rust — русскоговорящее сообществo
David Sorokin
из-за несоответствия соглашения могут быть очень большие сюрпризы тоже, как и из-за несоответствия алокаторов
да, я тут читаю, что мол то может в регистры, а то в обратном порядке. Да только ж как узнать, какое в анриале АБИ
источник

AT

Anton TrionProg in Rust — русскоговорящее сообществo
David Sorokin
из-за несоответствия соглашения могут быть очень большие сюрпризы тоже, как и из-за несоответствия алокаторов
Я боюсь, там уже __vectorcall
источник

DS

David Sorokin in Rust — русскоговорящее сообществo
и еще я не говорю о таких нюансах, как если бы плюсовый модуль решил бросить исключение, но это старая боль плюсов
источник

AT

Anton TrionProg in Rust — русскоговорящее сообществo
David Sorokin
и еще я не говорю о таких нюансах, как если бы плюсовый модуль решил бросить исключение, но это старая боль плюсов
а что будет? я кстати был удивлён, когда увидел растовские паники, о которых мне сказал анриал(он при этом сам крешнулся). Не знаю, как делаются исключения и раскрутка стека.
источник

DS

David Sorokin in Rust — русскоговорящее сообществo
если честно, то я не знаю, что будет при исключении!
источник

DS

David Sorokin in Rust — русскоговорящее сообществo
может, корка...
источник

AT

Anton TrionProg in Rust — русскоговорящее сообществo
David Sorokin
и еще я не говорю о таких нюансах, как если бы плюсовый модуль решил бросить исключение, но это старая боль плюсов
а одна либа может юзать разные соглашения вызовов для разных функций?
источник

DS

David Sorokin in Rust — русскоговорящее сообществo
да, конечно
без проблем в расте
у каждой функции прописывается в сигнатуре
если ничего такого не пишется, то соглашение обычное растовское
источник

AT

Anton TrionProg in Rust — русскоговорящее сообществo
David Sorokin
да, конечно
без проблем в расте
у каждой функции прописывается в сигнатуре
если ничего такого не пишется, то соглашение обычное растовское
а как?
источник

AT

Anton TrionProg in Rust — русскоговорящее сообществo
David Sorokin
да, конечно
без проблем в расте
у каждой функции прописывается в сигнатуре
если ничего такого не пишется, то соглашение обычное растовское
а могу же я и в С++ так сделать свою функцию
источник

AT

Anton TrionProg in Rust — русскоговорящее сообществo
David Sorokin
да, конечно
без проблем в расте
у каждой функции прописывается в сигнатуре
если ничего такого не пишется, то соглашение обычное растовское
я смотрю.. если юзать разные соглашения в разных местах, можно выиграть. Например, векторколл хорош когда большие данные по объему, фасткол(который автоматом переводится в вектор-) позволяет сохранить два первых аргумента в регистрах, а cdecl самый старый — всё на стеке.
источник

DF

Dollar Føølish in Rust — русскоговорящее сообществo
Ты читаешь 32 битные соглашения
источник

DS

David Sorokin in Rust — русскоговорящее сообществo
если импортируете через extern, то это сишное соглашение
если экспортируете, то нужно явно указать через extern "C"
я vectorcall не использовал
источник

DF

Dollar Føølish in Rust — русскоговорящее сообществo
На х86_64 например все поменялось
источник

AT

Anton TrionProg in Rust — русскоговорящее сообществo
Dollar Føølish
На х86_64 например все поменялось
да, только дошел.
источник

AT

Anton TrionProg in Rust — русскоговорящее сообществo
David Sorokin
если импортируете через extern, то это сишное соглашение
если экспортируете, то нужно явно указать через extern "C"
я vectorcall не использовал
но по-логике я могу написать перед своей растовской функцией extern "supercall" и вызвать её растом и уже будет юзать supercall?
источник

AT

Anton TrionProg in Rust — русскоговорящее сообществo
Я правда не пойму, extern C какое соглашение юзает? да и system тоже. Они в книге перечислены, но не описаны.
источник

MP

Mag Pie in Rust — русскоговорящее сообществo
David Sorokin
В первую очередь проверить алокацию памяти. Если объект выделяется в одном модуле (сошка, дээлелька), т.е. создается одним алокатором, то тем же алокатором должен быть и удален, т.е. в том же модуле, где был создан объект. Имейте в виду, что растовский jemalloc встраивается в сам модуль, тогда как плюсовый (или сишный) перекрывает системный malloc, т.е. они работают независимо друг от друга.
jemalloc же выпилили уже год как, не?
источник

DF

Dollar Føølish in Rust — русскоговорящее сообществo
Есть крейт для него
источник