Size: a a a

2020 August 13

RP

Roman Proskuryakov in rust_offtopic
Т-34 85
А можно сделать так, чтобы отсекались лишь 100% некорректные кейсы и ни один корректный не пострадал? Тут нет проблемы останова?
Есть проблема. Поэтому в расте существует unsafe
источник

RP

Roman Proskuryakov in rust_offtopic
Некоторые случаи просто нельзя выразить сейфовым кодом
источник

Т8

Т-34 85 in rust_offtopic
Roman Proskuryakov
Есть проблема. Поэтому в расте существует unsafe
Ну вот как раз в ансейф можно запихнуть чекер, который в плюсы вставляют
источник

Т8

Т-34 85 in rust_offtopic
Менее строгий
источник

RP

Roman Proskuryakov in rust_offtopic
Т-34 85
Ну вот как раз в ансейф можно запихнуть чекер, который в плюсы вставляют
Не выйдет)
источник

Т8

Т-34 85 in rust_offtopic
Чем который в сейфе
источник

Т8

Т-34 85 in rust_offtopic
Roman Proskuryakov
Не выйдет)
Почему?
источник

RP

Roman Proskuryakov in rust_offtopic
Т-34 85
Почему?
Потому что рассматривай unsafe как другое подмножество языка, отличное от safe. C++ идёт навешивание проверок, а не внедрением другой семантики
источник

RP

Roman Proskuryakov in rust_offtopic
Поэтому весь C++ код unsafe
источник

RP

Roman Proskuryakov in rust_offtopic
Ну и какие-то проверочки добавляются, чтобы жить было проще
источник

Т8

Т-34 85 in rust_offtopic
Roman Proskuryakov
Ну и какие-то проверочки добавляются, чтобы жить было проще
Ну, и достаточно. Кто хочет большего - есть раст
источник

RP

Roman Proskuryakov in rust_offtopic
Т-34 85
Ну, и достаточно. Кто хочет большего - есть раст
Ну да. Я к тому, что в случае Wlifetime в C++ надо вводить safe, а не unsafe
источник

RP

Roman Proskuryakov in rust_offtopic
Но тогда для этих проверок надо будет расставлять много safe, никто это делать не будет
источник

CD

Constantine Drozdov in rust_offtopic
Roman Proskuryakov
До МRE не получилось упростить?
Короче, смотри примерно, есть общее хранилище данных с персистентной моделью, в него надо вписывать undo-цепочки условного текстового редактора, которые микрокомандные
Ты пишешь номер ревизии в хранилище данных и аллокаешь шареный буфер, в который в будущем при выгрузке кладешь микрокомандную undo-очередь
Есть проблема - данные могут потребовать интерпретировать прямо сейчас, поэтому в этом шареном буфере лежит коллбек, связанный с текущей загруженной областью, и есть связанный с этим коллбеком инвариант
У тебя получается, что условный загруженный текстовый редактор просто 1 в 1 забиндан по лайфтайму со списком ревизий и у тебя нет порядка в котором их удалять
источник

Т8

Т-34 85 in rust_offtopic
Roman Proskuryakov
Но тогда для этих проверок надо будет расставлять много safe, никто это делать не будет
А вот не согласен, что никто не будет. Кстати, в D можно навешивать сейф на целую функцию (на сигнатуру)
источник

RP

Roman Proskuryakov in rust_offtopic
Т-34 85
А вот не согласен, что никто не будет. Кстати, в D можно навешивать сейф на целую функцию (на сигнатуру)
Окей, может тут я не прав
источник

RP

Roman Proskuryakov in rust_offtopic
Другое дело, что без разделения мы упираемся в проблему останова
источник

Т8

Т-34 85 in rust_offtopic
Roman Proskuryakov
Ну да. Я к тому, что в случае Wlifetime в C++ надо вводить safe, а не unsafe
Кстати, можно и ввести unsafe вместо safe. Только тогда нельзя делать -Wlifetime включенным по дефолту
источник

RP

Roman Proskuryakov in rust_offtopic
Т-34 85
Кстати, можно и ввести unsafe вместо safe. Только тогда нельзя делать -Wlifetime включенным по дефолту
Извини, но что такое unsafe в терминах С++?
источник

CD

Constantine Drozdov in rust_offtopic
Constantine Drozdov
Короче, смотри примерно, есть общее хранилище данных с персистентной моделью, в него надо вписывать undo-цепочки условного текстового редактора, которые микрокомандные
Ты пишешь номер ревизии в хранилище данных и аллокаешь шареный буфер, в который в будущем при выгрузке кладешь микрокомандную undo-очередь
Есть проблема - данные могут потребовать интерпретировать прямо сейчас, поэтому в этом шареном буфере лежит коллбек, связанный с текущей загруженной областью, и есть связанный с этим коллбеком инвариант
У тебя получается, что условный загруженный текстовый редактор просто 1 в 1 забиндан по лайфтайму со списком ревизий и у тебя нет порядка в котором их удалять
Чтобы все удалить нормально, нужно начинать удаление из исполнителя и дать ему прямо влезть в undo-последовательность условной БД и грохнуть там операцию, но проще тупо игнорировать проверку как ложноположительную
источник