LINUX.ORG.RU

Опубликован способ обхода borrow checker в Rust

 


3

11

Jakub Kądziołka опубликовал proof-of-concept, показывающий непосредственные проблемы, связанные с ошибкой в проекте компилятора Rust, которую разработчики безуспешно пытаются решить уже на протяжение четырех лет.

Пример, разработанный Jakub, позволяет обойти Borrow Checker посредством очень простого трюка:

fn main() {
    let boom = fake_static::make_static(&vec![0; 1<<20]);
    println!("{:?}", boom);
}

Разработчик просит не использовать этот обход в Production, так как его целью было только привлечь внимание к проблеме, игнорируемой разработчиками Rust.

>>> Подробности

anonymous

Проверено: jollheef ()
Последнее исправление: Deleted (всего исправлений: 2)
Ответ на: комментарий от anonymous

Это пример про тайплисты и писал это Андрей Александреску. И да, это C++98, вариадиков тогда ещё не было. Ваще полистай его «Modern C++ design» (ну или исходники его либы Loki), там много интересных приемов, многие актуальны и для современных стандартов.

DELIRIUM ☆☆☆☆☆
()
Ответ на: комментарий от crutch_master

перловка? При том, что

Просто лор не умеет показывать рустокод. Например, если просто рисовать «'a X» как «X<sub>a</sub>», «mut X» как "X", «&X» как "X" и ":" длинной горизонтальной чертой с именами над и типами под, может получиться вполне приятно. Сомневаюсь, что в перле такой трюк пройдёт.

DonkeyHot ★★★★★
()
Ответ на: комментарий от DELIRIUM

Ваще полистай его «Modern C++ design» (ну или исходники его либы Loki), там много интересных приемов, многие актуальны и для современных стандартов.

Ты всерьёз что-то советуешь верифицированному форумному буйнопомешанному?

Virtuos86 ★★★★★
()

Объясните популярно на пальцах - так firefox зря на rust что-ли переписывали? И что делать теперь? Есть ещё модные и молодежные языки чтоб firefox переписать, но только чтоб уж точно быстрее Сишечки и прям супербезопасные?

mbivanyuk ★★★★★
()

А Царь-то голый!

Deleted
()
Ответ на: комментарий от WatchCat

Меня тоже долго ломало, но это дело привычки.

Вот и с перлом так. Если долго в него втыкаешь, все читается как проза (или даже поэзия). А для стороннего наблюдателя будто кот на клавиатуре насрпотоптался. А вы говорите причем тут перл. Ниче хорошего в такой самобытности конечно нет. Перл вот немножко умер.

bread
()

хоть я и любитель раста, но думаю это ожидаемо.

baist ★★
()

и они ещё хотят чтобы их я.п. использовали вместо Плюсов :)

bonta ★★★★★
()
Ответ на: комментарий от WatchCat

Нет такой ниши, ты её выдумал.

Уже есть. Перл почти сдох, но ржавый подхватил падающее знамя. Теперь стебать будут над ним.

crutch_master ★★★★★
()
Последнее исправление: crutch_master (всего исправлений: 1)
Ответ на: перловка? При том, что от DonkeyHot

Например, если просто рисовать «'a X» как «X<sub>a</sub>» «mut X» как «X», «&X» как «X» и ":" длинной горизонтальной чертой с именами над и типами под, может получиться вполне приятно

Нет, это - ужасно, нечитабельно, непонятно, не бросается в глаза и хрен пойми как гуглить. Иероглифами бы еще код писали.

crutch_master ★★★★★
()
Последнее исправление: crutch_master (всего исправлений: 1)
Ответ на: комментарий от bread

Перл умер не из-за самобытности, а из-за тормознутости разработчиков Перла. Просрали момент и уступили Питону.

Ну и да, вместо 'use strict' и написания понятного кода перлокулхацкеры предпочитали из..ться и писать откровенный write-only code, патамушта так крута.
А так, нормально написанный код на перловке вполне читаем и не сильно сложнее написанного на Питоне.

WatchCat ★★★★★
()
Ответ на: комментарий от crutch_master

Ну и удваиваю Царя в удалённых, на пёрле всё таки можно было написать однострочник, а на расте такое не получится.

crutch_master ★★★★★
()
Ответ на: комментарий от WatchCat

Только у тебя в голове.

Перечитай тред, народ уже доволен одним только этим примером.

crutch_master ★★★★★
()
Ответ на: комментарий от WatchCat

Перл умер не из-за самобытности, а из-за тормознутости разработчиков Перла. Просрали момент и уступили Питону.

Да, тот момент, когда люди заметили, что на питоне можно всё то же самое писать без мусорных закорючек (и не морочить голову контекстами и дереференсингом). На самом деле это случилось еще раньше в момент появления PHP.

bread
()
Ответ на: комментарий от WatchCat

А раст как раз для любителей максимально загрузить голову компьютерной фигней, не имеющей отношения к решаемой задаче. Антипитон такой.

bread
()
Ответ на: комментарий от bread

Ну если вообще не хочется забивать голову «фигнёй», то вперёд и с песней на какой-нибудь Хаскель.

WatchCat ★★★★★
()
Последнее исправление: WatchCat (всего исправлений: 1)
Ответ на: комментарий от bread

на питоне можно всё то же самое писать без мусорных закорючек

В питоне тоже полно закорючек. Язык без закорючек — это лисп.

no-such-file ★★★★★
()
Ответ на: комментарий от Deleted

Это Rust - убийца С/C++/C#/JS/Java/Python/Go и еще кучи других языков, которые я не могу вспомнить. Считается, что только олигофрены и олдфаги пишут на других языках, а модные продвинутые сеньоры за 300кк/сек пишут на расте.

maverik ★★
()

Бред какой-то.
А чё сразу не застрелиться? Чё только в ногу?

vada ★★★★★
()
Ответ на: комментарий от mbivanyuk

Объясните популярно на пальцах

Если кратко - белки истерички.

RazrFalcon ★★★★★
()
Ответ на: комментарий от no-such-file

lisp

((()))

#-sb-xc-host
`(progn
         ;; %COMPILER-DEFMACRO just performs a check for duplicate definitions
         ;; within a file.
         (eval-when (:compile-toplevel)
           (sb-c::%compiler-defmacro :macro-function ',name))
         (eval-when (:compile-toplevel :load-toplevel :execute)
           (sb-c::%defmacro ',name ,def (sb-c:source-location)))))))

(defun sb-c::%defmacro (name definition source-location)

Deleted
()
Ответ на: комментарий от Deleted

Так это ж макрос, причём сильно для внутреннего использования. Тут закорючки — волюнтаристский выбор автора, ему так нравится. Но можно было и без закорючек всё то же самое написать.

no-such-file ★★★★★
()
Ответ на: комментарий от no-such-file

Не видел код на лиспе без закорючек. Могу дать хороший проект на Perl - Mojolicious. Можно мне аналог на CL? Именно по хорошести кода.

Deleted
()
Ответ на: 🌴🌴🌴 🤦🏽‍ 🌴🌴🌴 от anonymous

Ага, они спонсируют конкурс из читого альтруизма.

И чувак совершенно случайно занимался GRUB и PGP…

Это все просто совпадения…

shkolnick-kun ★★★★★
()
Ответ на: комментарий от Deleted

Именно по хорошести кода

Какая связь между закорючками и хорошестью?

Не видел код на лиспе без закорючек

Потому что большинство людей адекватные и пишут `(',name) вместо (quasiquote (quote (unquote name))). Но это возможно. А в питоне — нет.

no-such-file ★★★★★
()
Ответ на: комментарий от no-such-file

Потому что большинство людей адекватные и пишут `(',name)

А, ясно. Весь код в закорючках, без них писать невозможно, но в лиспе их нет %)

Deleted
()
Ответ на: комментарий от Deleted

без них писать невозможно

Можно, но муторно. Поэтому все современные языки используют закорючки, а не «композицию кейвордов» как тут один закос под царя вещал. Тем не менее в лиспе можно вспомнить кровавый 1958 год, если сильно хочется.

no-such-file ★★★★★
()
Последнее исправление: no-such-file (всего исправлений: 1)
Ответ на: комментарий от Deleted

Прям весь. Там закорючки редко и по делу (не считая скобочек, но они тоже фича), в перле тонны закорючек просто чтобы ты мог ссылку передать и прочитать в нужном контексте, хотя все конкуренты перла без этого справляются.

bread
()
Ответ на: комментарий от no-such-file

Функция string::replace поможет любому языку, о чудо.

Deleted
()
Ответ на: комментарий от vertexua

Ненулевая вероятность была всегда, потому что это код, а в коде бывают баги

чем такая отмазка не катит для няшной сишечки, что даже целый раст на её желаемую замену запилить пытаются?

Harald ★★★★★
()
Ответ на: комментарий от Harald

Тем, что когда в Rust фикстся баг, то для всех сразу.

И это не отмаза, а реальность для всей техники, безупречность никто не гарантирует

vertexua ★★★★★
()
Последнее исправление: vertexua (всего исправлений: 1)

Есть где-то мануал как батхертить от СИНТАКСИСА? Господи они решили использовать ' вместо всеми любимых :, @, #, *. Закапывайте.

Kuzy ★★★
()
Ответ на: комментарий от WatchCat

Перл умер не из-за самобытности, а из-за тормознутости разработчиков Перла. Просрали момент и уступили Питону.

Перл не умер, а сдал позиции передовика, которую он занимал когда-то, будучи безальтернативным. Сейчас котируются языки с лёгким в сопровождении кодом: питон, руби. Где можно спокойно менять кодеров на переправе с минимумом рисков, и конкурентной оплатой.

Такая судьба ждёт и с++, имхо. Как перл переложил на программиста ответственность за код, так делает и с++. И полагаю, люди будут рады какому-нибудь лаптю с минимумом языковой выразительности.

Ведь для большинства программирование не является страстью.

Deleted
()
Ответ на: комментарий от DonkeyHot

Да, всё верно. Надо иерогливы вводить, да так чтобы они друг на друга накладывались и при этом кардинально меняли суть. Ограничиваться ASCII - это для макак.

crutch_master ★★★★★
()
Ответ на: комментарий от crutch_master

Ограничиваться ASCII

Вопрос в том, стоит ли ограничиваться одномерным представлением. Когда компютеры были большими а ресурсы – маленькими ответ был очевиднен. А когда компы позволяют себе 4к*60фпс, а программисты – 65535 вебфреймворков – не очень.

DonkeyHot ★★★★★
()
Ответ на: комментарий от DonkeyHot

а программисты – 65535 вебфреймворков

Настоящие программисты себе такого не позволяют, да и дело тут не в мощностях компухтеров. Такие формулы читать никто не будет, кроме кружка растоманов. Тем более когда там будет реальный код вместо a,b,foo и bar. Начертанием шрифта еще что-нибудь обозначте для полноты картины.

crutch_master ★★★★★
()
Последнее исправление: crutch_master (всего исправлений: 3)
Ответ на: комментарий от crutch_master

Начертанием шрифта

Так и было задумано. Не прошло тестирование – отличить одиночный символ в bold/italic оказалось не так просто.

Т.ч. лучше цветом. Кстати, многие уже используют. И, говорят, помогает.

DonkeyHot ★★★★★
()
Ответ на: комментарий от anonymous

А внимательнее сообщение прочитать? А пересилить себя и просмотреть цепочку ответов?

Перевожу:

ozz_is_here_again:

Это что за жесть?

EXL (шутит):

C++

Я:

Да ну! Даже шаблонная часть плюсов выглядит читабельнее :)

Что означает ровно то, что даже шаблонный код на C++, на который много жалуется человеки, читабельнее, чем некоторые опусы на Rust.

И да, снова, это шутим мы так, ни кого обидеть не хотим.

h4tr3d ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.