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 ★★★★★
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.