LINUX.ORG.RU

Rust 1.91.0

 ,


0

4

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

Список изменений:

  • aarch64-pc-windows-msvc теперь является платфомой первого уровня поддержки (ранее было второго уровня). По сравнению со вторым уровнем поддержки, первый уровень подразумевает обязательное успешное прохождения всех тестовых наборов на платформе.

  • Добавлена проверка линтера при возвращении из функции «висячего» указателя. Встроенный в компилятор Borrow Checker уже имеет проверку на тот случай, когда возвращается «висячая» ссылка, но это не работало при использовании сырых указателей. Теперь будет сгенерировано предупреждение:

fn f() -> *const u8 {
    let x = 0;
    &x
}
warning: a dangling pointer will be produced because the local variable `x` will be dropped
 --> src/lib.rs:3:5
  |
1 | fn f() -> *const u8 {
  |           --------- return type of the function is `*const u8`
2 |     let x = 0;
  |         - `x` is part the function and will be dropped at the end of the function
3 |     &x
  |     ^^
  |
  = note: pointers do not have a lifetime; after returning, the `u8` will be deallocated
    at the end of the function because nothing is referencing it as far as the type system is
    concerned
  = note: `#[warn(dangling_pointers_from_locals)]` on by default

В разряд стабильного API было переведено:

  • Path::file_prefix
  • AtomicPtr::fetch_ptr_add
  • AtomicPtr::fetch_ptr_sub
  • AtomicPtr::fetch_byte_add
  • AtomicPtr::fetch_byte_sub
  • AtomicPtr::fetch_or
  • AtomicPtr::fetch_and
  • AtomicPtr::fetch_xor
  • {integer}::strict_add
  • {integer}::strict_sub
  • {integer}::strict_mul
  • {integer}::strict_div
  • {integer}::strict_div_euclid
  • {integer}::strict_rem
  • {integer}::strict_rem_euclid
  • {integer}::strict_neg
  • {integer}::strict_shl
  • {integer}::strict_shr
  • {integer}::strict_pow
  • i{N}::strict_add_unsigned
  • i{N}::strict_sub_unsigned
  • i{N}::strict_abs
  • u{N}::strict_add_signed
  • u{N}::strict_sub_signed
  • PanicHookInfo::payload_as_str
  • core::iter::chain
  • u{N}::checked_signed_diff
  • core::array::repeat
  • PathBuf::add_extension
  • PathBuf::with_added_extension
  • Duration::from_mins
  • Duration::from_hours
  • impl PartialEq<str> for PathBuf
  • impl PartialEq<String> for PathBuf
  • impl PartialEq<str> for Path
  • impl PartialEq<String> for Path
  • impl PartialEq<PathBuf> for String
  • impl PartialEq<Path> for String
  • impl PartialEq<PathBuf> for str
  • impl PartialEq<Path> for str
  • Ipv4Addr::from_octets
  • Ipv6Addr::from_octets
  • Ipv6Addr::from_segments
  • impl<T> Default for Pin<Box<T>> where Box<T>: Default, T: ?Sized
  • impl<T> Default for Pin<Rc<T>> where Rc<T>: Default, T: ?Sized
  • impl<T> Default for Pin<Arc<T>> where Arc<T>: Default, T: ?Sized
  • Cell::as_array_of_cells
  • u{N}::carrying_add
  • u{N}::borrowing_sub
  • u{N}::carrying_mul
  • u{N}::carrying_mul_add
  • BTreeMap::extract_if
  • BTreeSet::extract_if
  • impl Debug for windows::ffi::EncodeWide<'_>
  • str::ceil_char_boundary
  • str::floor_char_boundary
  • impl Sum for Saturating<u{N}>
  • impl Sum<&Self> for Saturating<u{N}>
  • impl Product for Saturating<u{N}>
  • impl Product<&Self> for Saturating<u{N}>

Признак const добавлен к следующим функциям:

  • <[T; N]>::each_ref
  • <[T; N]>::each_mut
  • OsString::new
  • PathBuf::new
  • TypeId::of
  • ptr::with_exposed_provenance
  • ptr::with_exposed_provenance_mut

>>> Подробнее

★★★

Проверено: hobbit ()
Последнее исправление: Wizard_ (всего исправлений: 2)
Ответ на: комментарий от LightDiver

(на базе V4 или Qt Quick Compiler)

Ты в каком году живёшь? Ещё пятая ветка перешла на V8, а уже Qt 6.10 на дворе.

есть у меня веб-клиент к войс-чату: https://ns.fiber-gate.ru/

Я его за полчаса перенес на электрон.

Готовый клиент никуда переносить вообще никакого смысла. У веба единственное преимущество - мгновенный доступ к приложению на любом устройстве от компа до мобильника и планшетов, не мучаясь установкой и поддержкой аппаратной платформы. Перенося из веба на электрон ты убиваешь единственный плюс решения.

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

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

Так же в локальном клиенте единообразие. Ты бы знал сколько бессонных суток я провел в синхронизации разных браузеров. У них же зоопарк кошмарный во всех технологиях. У каждого свои реализации, свои запреты и требования.

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

У них же зоопарк кошмарный во всех технологиях. У каждого свои реализации, свои запреты и требования.

Ахаха, велком ту зе ворлд ов тяп-ляп и в продакшен, я по-быстрому накатал - ещё двадцать лет работать будет, а я пошёл к другому работодателю.

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

Ну представь, все протестировал - работает. Запускает человек на винде. Его все слышат, он никого не слышит. Копаю сутки. Нахожу что у него чуть чуть другие настройки кодека! Другая версия вебртц.

Запускает человек на айфоне, у него все работает, но слышит он всхе только если сам сначала включит микрофон.

Включает человек гарнитуру и опять все меняется. Я вот чем больше этим всем занимаюсь, тем меньше понимаю как и главное ПОЧЕМУ это все работает. Тысячи, десятки тысяч человек пилят каждый свой кусочек в рамках своего понимания кривизны и как что дожно работать. У каждого свои косяки, фичи, нюансы. Косяки протоколов, потери пакетов итд итп. Но все работает! Это магия, ну не может оно по логике работать. Но работает. Пытаюсь окинуть всю картину взглядом, начиная с архитектуры эвм и до высшего уровня и не могу понять как и почему это все соединяется в итоге в что то живучее.

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

все слышат, он никого не слышит

слышит он всхе только если сам сначала включит

Ну вот как-то так и работает эта магия. Хреново.

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

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

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

А тут тебе компилятор запрещает писать неправильные программы. Красота.

«Компилируется – значит, работает!» – одновременно и главная мантра, и главное заблуждение растунов.

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

Так и запишем: rust – он для дураков.

Ага. Для умных - перфокарта.

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

Некорректный borrow_mut с RefCell – считается багом при работе с памятью?

Конечно. Но вместо юнит-теста нужно просто использовать try_borrow.

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

Конечно. Но вместо юнит-теста нужно просто использовать try_borrow.

Конечно. А в пресловутом «бабах»-примере на C++ просто не нужно выдергивать сырой указатель. ;)

Я немного толсто намекаю, что в обоих случаях правильный код – вопрос дисциплины, а не borrowchecker’а.

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

Но последствия неправильного кода разные: в цпп в лучшем случае сегфолт, в расте просто паника без порчи памяти.

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

Но последствия неправильного кода разные: в цпп в лучшем случае сегфолт, в расте просто паника без порчи памяти.

Ну, для начала, на минуточку, в rust это всё же уже не zero-cost, коим так всегда гордятся растуны. Ну и инициативы типа ChkTag сведут последствия такой ошибки примерно к тому же уровню и для C++. Так зачем платить больше, когда надо просто подождать?

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

не zero-cost

Ссылка с проверкой валидности делает проверку валидности, какой ужас. Если проверка не нужна, так используй обычную, не?

сведут

Угу, новости из будущего. Новейший цпп* будет ещё удобнее и безопаснее, каждая новая версия стандарта подтверждает этот тренд.

*при использовании новейших процессоров

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

Ссылка с проверкой валидности делает проверку валидности, какой ужас. Если проверка не нужна, так используй обычную, не?

Тем не менее всё в том же «бабах»-примере кое-кто не поленился зачем-то вытащить сырой указатель из смарта. Эта музыка будет вечной!

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

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

Так и C тоже для дураков. Умные пацаны пишут на ассемблере. А еще более умные - сразу в машинном коде.

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

я напишу модуль на раст

Для меня это вглядит как противоречие с этим утверждением:

И вот оно мне надо вместо 10% прикладывать 50% усилий

Борьба с борроу-чекером, дебри синтаксиса, etc.

Вон выше пример был.

Можно сслыку плз

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

владение как раз упрощает ситуацию

Да, но чисто механически.

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

Это лютая возня в любом случае.

Нет, правда. Возьни меньше чем хтмл+цсс+жс. Там декларативная структура, всё прозрачно. Сразу видишь то, что пишешь (по крайней мере 8 лет назад так было).

собственный JS-движок

Ну не нужен там JS даже.

но хрен знает еще - разовьют ли его до нормальной юзабельности.

Я коммерческую разработку на нём выполнял в 2016-м году (Windows и Android). В 2017-м меня хантили в Ready4Sky, которые на QML делали мобильное приложение (iOS+Android) для управления модулями, которые в продукцию Redmond ставились для контроля с телефона. Это был QML + Qt5.

В 2017-м я делал тестовое в IqOption. Рабочая софтина за 2 дня, я буквально сел в субботу вечером и в воскресенье вечером закончил. С анимациями и прочим блек-джеком. IQ Notifier 0.1.1

Ещё через 5 дней софтина утроила функционал. IQ Notifier 0.4.0

Недавно я освободился и портировал эту софтину на Qt6+Wayland. https://github.com/x6prl/bzard/

И я могу назвать это примером ПЛОХОЙ программы, потмоу что по-уму никакого QML и Qt здесь не надо, задача-то плёвая, зачем тащить столько зависимостей? Но эта связка QML+Цепепе позволяет очень быстро разрабатывать достаточно производительный софт под буквально всё. Хоть в браузер. Поэтому я выполнил тестовое на этом.

В электрон делаешь минимальную обертку, связь основного процесса со всем нужным, дальше просто кидаешь модули «как есть».

Это же понятно. Никто не говорит, что разрабатывать под электрон ужасно сложно и так далее. Но результат ужасен. :C Неприятно пользоваться. У меня достаточно производительное железо, но когда я запускаю ватсап в електроне — теряю одно ядро)) Это смешно и весело, но не смешно и не весело. Пока что ядер у меня больше, чем открыто прокрамм в електронах. Но тенденция пугает!

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

Про ядро странно. Электрон у меня не отжирает ничего, кроме озу. Возможо это у них что то там дополнительно жрет.

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

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

Да, коммитил я редко - заливал рабочие версии в основном для хранения. И для сборки модуля под винду. Там удобнее сборка.

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

Браузер не ловит хоткеи, если фокус на другом приложении

Любая программа именно так себя и ведёт. «Внезапно!», да... :)

Вот для пуш ту толк и нужен локальный клиент как минимум

Вот зачем нужен ( и нужен ли, на самом деле) этот самый «пуш ту толк», никто и никогда внятно так и не смог мне объяснить и обосновать свои «доводы» хоть чем-то, кроме псевдо-«аргументов» (эмоций, на самом деле) вида «Ды ты что! Это же круто! Это же современно!» и «Да у всех это есть! Мы чО, хужЕЕ всех??».... :))

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

Любая программа не умеет хоткеи глобальные? Я не понял немного этой концепции.

А для чего нужен пуш ту толк объясняю. Представь себе рейд в игре. Фокус на окне игры, а войс в браузере, допустим. РЛ (рейд лидер) объясняет что делать, другие слушают в основном. Шум в войсе не нужен лишний. Голос только по пуш ту толк. Зажал кнопку - говори, отжал - молчишь. Крутость тут не при чем - жизненная необходимость.

Если ты во время рейда чтобы что то сказать начнешь переключаться на браузер, там активировать войс, говорить, потом возвращаться назад, нууу.. ничего хорошего из этого не получится - там время реакции меньше секунды обычно.

Это как рация.

Проблемы тут две в основном: у браузеров и у электрона. Даже три на самом деле. Во-первых, браузерные клиенты, как я уже писал выше, не умеют глобальные хоткеи и требуют фокус на браузере. Это неприемлемо. Во-вторых, электрон не умеет события пушдаун и пушап, поэтому зажатие кнопки приходится эмулировать. Например, каждые 100-300мс отслеживать нажимается ли кнопка и если не нажимается - «отпускать», если нажимается - «зажимать». Это криво работает. В третьих никто не умеет хоткеи в виде кнопки мыши (боковые например).

Вот мне и пришлось написать модуль на раст реализующий все это нормально. Со всеми событиями, без костылей более менее, с мышью. Но и тут косяки у винды возникли. Там свой такой трэш, что волосы на копчике дыбом. Но в целом работает.

Вообще такое мало кто умеет. Может тимспик умел, мамбла. Дискорд и подобные на электроне - только через эмуляцию нажатий кнопок на клавиутару. То есть сам драйвер мыши должен уметь эмулировать такое нажатие. Например, жмешь кнопку мыши, а ось считает. что ты нажал F1.

Так что моя реализация - редкость. Можешь считать, что такое есть только у меня и у Майкла Джексона. Даже профессионалы так не умеют.

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

И первый запуск под valgrind ткнет носом в ошибку.

В приложении из пяти строк? Было бы очень странно, если бы не ткнул.

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

«Компилируется – значит, работает!» – одновременно и главная мантра, и главное заблуждение растунов.

Компилируется – значит маловероятно, что упадет в сегфолт. Отличная же гарантия, где минусы?

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

Любая программа не умеет хоткеи глобальные? Я не понял немного этой концепции.

А «конь-цепция» стара, как мир, и очень проста, понятна и правильна: каждая программа должна получать, что пользователь «командует» нажатием «горячих клавиш» именно ей. Обычно это именно та программа, с которой пользователь в данный момент работает. Это «поведение» вполне ожидаемое, нормальное и привычное.

Так — правильно.

А для чего нужен пуш ту толк объясняю. Представь себе рейд в игре. Фокус на окне игры, а войс в браузере, допустим. РЛ (рейд лидер) объясняет что делать, другие слушают в основном. Шум в войсе не нужен лишний. Голос только по пуш ту толк. Зажал кнопку - говори, отжал - молчишь. Крутость тут не при чем - жизненная необходимость

Для «игровых меньшинств» — возможно. Но не для «простого пользователя»

Если ты во время рейда чтобы что то сказать начнешь переключаться на браузер, там активировать войс, говорить, потом возвращаться назад, нууу.. ничего хорошего из этого не получится - там время реакции меньше секунды обычно.

Это как рация.

Ну, тогда как-то вот так: «Каждому игроману — по морде! по рации!! :))

Но не надо навязывать хотелки всяких таких „меньшинств“ остальным...

Проблемы тут две в основном: у браузеров и у электрона

Это вовсе и не „проблема“, это нормальное поведение системы, „отдающей“ ввод активной в данный момент программе: „Это „поведение“ вполне ожидаемое, нормальное и привычное“. © Я :)

Это неприемлемо

Это нормально (см. выше).

Во-вторых, электрон не умеет события пушдаун и пушап, поэтому зажатие кнопки приходится эмулировать. Например, каждые 100-300мс отслеживать нажимается ли кнопка и если не нажимается - «отпускать», если нажимается - «зажимать». Это криво работает. В третьих никто не умеет хоткеи в виде кнопки мыши (боковые например).

Надеюсь, ты уже написал патч и передал на суд разработчиков?.. ;))

Вообще такое мало кто умеет

И слава багу! Не надо людям эти вот все извращения!.. :)

Вообще такое мало кто умеет. Может тимспик умел, мамбла. Дискорд и подобные на электроне - только через эмуляцию нажатий кнопок на клавиутару. То есть сам драйвер мыши должен уметь эмулировать такое нажатие. Например, жмешь кнопку мыши, а ось считает. что ты нажал F1.

Так что моя реализация - редкость.

И это хорошо! :)

Можешь считать, что такое есть только у меня и у Майкла Джексона.

И это тоже хорошо! Иначе тебя бы давно уже отправили к нему...

Почему и за что — надеюсь, и сам сообразишь... ;))

Просто не надо навязывать своё личное видение „как хорошо“ другим людям, у которых оно наверняка очень своё... ;)) :)

Играйтесь там себе... пуш-ту-толкайтесь в своих игрульках... а „в массы“ вот этого вот всего не надо!

Hе хочу я, чтобы при нажатии „Ctrl+Q“ в одном окне у меня закрывалось другое, которое „не в фокусе“, вместе с текстом, который я своей одной рабочей рукой несколько часов набирал, чтобы вот этот комментарий тебе отправить. Мне от такого убивать хочется, а стрессы мне противопоказаны, а ты слишком далеко и снять стресс кардинально, путём „обнуления“ его первопричины, я не смогу... А такая невозможность в разы усилит стресс... :)

А оно нам надо, такое вот всё?? Мне — нет, так что не надо такую вот хрень — „в широкие народные массы“. В игрульках своих — да как вам заблагорассудится! Только в системы это 'merde' не притащите...

Даже профессионалы так не умеют.

Профессионалы умеют многое из того, что даже и ты ;P ;)) не умеешь. Но профессионалы понимают, что такой „краской для волос органического происхождения“ — „хной“, то есть (и да, я смягчил) — заниматься можно только „для себя“, и что ни в коем разе нельзя „выпускать свою придурь в народные массы“... ;))

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

Компилируется – значит маловероятно, что упадет в сегфолт. Отличная же гарантия, где минусы?

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

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

заставляющую программиста подгонять модель предметной области под ограничения оной

Разве это не обычная работа программиста в реальной жизни??.. ;))

с хрупким и трудным в сопровождении кодом

Ну... Какой «программист», такой из-под него выходит и «код»... ;P ;))

Причем городушка заведомо не может использоваться в широком спектре применений, что делает ее нишевой

Ну прямо как и большинство программ!.. :)))

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

Эта концепция про программу - чисто виндовая особенность, которая недавно ввела меня просто в ступор. У нас в линуксах это не так. Даже в вайне приложения работают как в линуксе - ловят и свои хоткеи уникальные и глобальные.

Хз, мне этого не понять. Если я назначаю хоткей, я знаю куда я его назначаю и программа не должна считать себя умнее меня. Я ей сам укажу должна она его ловить или нет. В линуксах так и работает.

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

Сегфолт — это ещё хороший результат. Плохой — это выкидывание куска кода компилятором из-за «он приводит к UB» или порча памяти совсем в другом месте от того, что по адресу этого указателя уже другой объект (и хорошо, если там данные, а не адрес функции).

На фоне этого в раст программа без unsafe (и в предположении отсутствия багов в компиляторе) в худшем случае упадёт в панику.

Не бесплатно. Но ява обеспечивает тот же результат заметно дороже.

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

Всегда когда код течет это от того что кто то на с++ рукоблудит, не использует контейнеры и методы с проверкой индексов, и самое главное - не продумал устройства программы.

Вот здесь UB:

struct Shape {
public:
    using VertexList = std::vector<Point>;
    explicit Shape(VertexList v) : vertexes(std::move(v)) {}

    const VertexList& Vertexes() const {
        return vertexes;
    }

private:
    VertexList vertexes;
};

...

int main() {
    for (auto v : MakeShape().Vertexes()) {
        std::cout << v.x << " " << v.y << "\n";
    }
}

Это тоже «рукоблудит, не использует контейнеры и методы с проверкой индексов, и самое главное - не продумал устройства программы»?

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

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

Городушка используется в ядре, GUI, консольных утилитах, HTTP-прокси Cloudflare (который обслуживает половину Интернета). О какой нишевости мы здесь говорим?

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

Это вроде как раз пофиксили или собирались пофиксить в следующем стандарте. ЦППшники любят кичиться «продвинутостью» современных фич языка, постоянно ссылаясь на невышедшие стандарты, т.е. без существующих проектов, использующих все эти фишки.

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

В рамках текущих плюсов непонятно как это можно пофиксить.

Если бы был бы глобальный вектор и Vertexes() возвращал бы ссылку на него, а не на this->vertexes, то этот код был бы валиден.

При этом этот же метод может в время от времени возвращать ссылку на this->vertexes или на глобальный вектор.

Т.е. даже введение какого-то четкого понятия лайфтаймов, как в расте, не позволят обеспечить совместимость со старым кодом.

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

monk, как принято у ругателей C++, немного… э-э… сделал то самое неаппетитное в лужу. В C++23 код

class Something {
  public:
    const std::vector<int> &v() const {
        return _v;
    }
    ~Something() {
        std::print("\nSomething destructed\n");
    }
  private:
    std::vector<int> _v = {1, 2, 3, 4, 5, 6, 7, 8};
};

Something make_smth() {
    return Something();
}

int main() {
    for (auto x : make_smth().v()) {
        std::print("{}", x);
    }
}

по стандарту корректен, безопасен и выводит:

12345678
Something destructed

Вообще же правильно было бы объявить метод так:

    const std::vector<int> &v() const & {
        return _v;
    }

Тогда в тех старых версиях C++, где временный объект Something не «живет» в ходе исполнения цикла, код не скомпилируется.

Для полного счастья, если мы хотим, чтобы такое было уж совсем безопасно во всех стандартах:

    const std::vector<int> &v() const & {
        return _v;
    }
    std::vector<int> v() && {
        return _v;
    }
rmammoth
()
Последнее исправление: rmammoth (всего исправлений: 7)
Ответ на: комментарий от rmammoth

Ландюк не понимает что такое memory safety, но это не важно — код-то пишут, софт есть (изрядная часть нового софта для gnome).

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

Я сейчас не вспомню, в каком ДЕ, кажется в XFCE, лет пять назад – при установке одной из тем оформления начинала течь память. И вот не поверишь, мне было совершенно не радостно, что она не портится, а всего лишь течет – через пару часов после старта отжирало все и начинало угрюмо свопать.

Что ржа от течей не спасает по определению – это понятно, но радости в этом знании не особо, когда ДЕ течет ;)

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

Это печально, но к memory safety отношения не имеет. Вернемся: ты утверждал, что язык ограничен узкой нишей. Примеры, что это не так, приведены. Поменяешь ли ты свою точку зрения или ты растохейтер и дальше смысла разговаривать нет?

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

Язык совершенно не подходит для того же GUI, чрезвычайно криво позволяет моделить предметные области с обратными и циклическими взаимосвязями и заточен, вообще говоря, под небольшие модули и библиотеки. Вменяемый фреймворк на нем не сделать – нет толкового наследования реализации. Даже обвязку к фреймворку уровня Qt толком не сделать. С чего бы мне менять свое мнение?

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

На каком-нибудь haskell тоже написано, и используется, и пожалуй даже больше. Я ничего не имею против haskell, но ты же не будешь спорить, что это нишевый язык?

Вот тут интересно: https://habr.com/ru/articles/811163/

rmammoth
()
Последнее исправление: rmammoth (всего исправлений: 1)
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.