The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Выпуск языка программирования Rust 1.76

08.02.2024 23:04

Опубликован релиз языка программирования общего назначения Rust 1.76, основанного проектом Mozilla, но ныне развиваемого под покровительством независимой некоммерческой организации Rust Foundation. Язык сфокусирован на безопасной работе с памятью и предоставляет средства для достижения высокого параллелизма выполнения заданий, при этом обходясь без использования сборщика мусора и runtime (runtime сводится к базовой инициализации и сопровождению стандартной библиотеки).

Методы работы с памятью в Rust избавляют разработчика от ошибок при манипулировании указателями и защищают от проблем, возникающих из-за низкоуровневой работы с памятью, таких как обращение к области памяти после её освобождения, разыменование нулевых указателей, выход за границы буфера и т.п. Для распространения библиотек, обеспечения сборки и управления зависимостями проектом развивается пакетный менеджер Cargo. Для размещения библиотек поддерживается репозиторий crates.io.

Безопасная работа с памятью обеспечивается в Rust во время компиляции через проверку ссылок, отслеживание владения объектами, учёт времени жизни объектов (области видимости) и оценку корректности доступа к памяти во время выполнения кода. Rust также предоставляет средства для защиты от целочисленных переполнений, требует обязательной инициализации значений переменных перед использованием, лучше обрабатывает ошибки в стандартной библиотеке, применяет концепцию неизменяемости (immutable) ссылок и переменных по умолчанию, предлагает сильную статическую типизацию для минимизации логических ошибок.

Основные новшества:

  • В документацию добавлена отдельная секция, описывающая совместимость различных типов аргументов и типов возвращаемых значений функций на уровне ABI. По сравнению с прошлыми версиями гарантирована совместимость на уровне ABI типов "char" и "u32", которые имеют идентичный размер и выравнивание.
  • В дополнение к ранее доступному вызову "any::type_name::<T>()", возвращающему строковое описание для типа, указанного в параметре "T", добавлена функция "type_name_of_val(&T)" позволяющая получить информацию о типе на основе любой неименованной ссылки.
    
       fn get_iter() -> impl Iterator<Item = i32> {
           [1, 2, 3].into_iter()
       }
    
       fn main() {
           let iter = get_iter();
           let iter_name = std::any::type_name_of_val(&iter);
           let sum: i32 = iter.sum();
           println!("The sum of the `{iter_name}` is {sum}.");
       }   
    
    На выходе получим:
    
       The sum of the `core::array::iter::IntoIter<i32, 3>` is 6.
    
  • В разряд стабильных переведена новая порция API, в том числе стабилизированы методы и реализации типажей:
  • Реализован третий уровень поддержки для платформ {x86_64,i686}-win7-windows-msvc, aarch64-apple-watchos, arm64e-apple-ios и arm64e-apple-darwin. Третий уровень подразумевает базовую поддержку, но без автоматизированного тестирования, публикации официальных сборок и проверки возможности сборки кода.

Дополнительно можно отметить демонстрацию экспериментального планировщика задач scx_rustland, написанного на языке Rust и выполняемого в пространстве пользователя (вынос логики планирования задач из ядра в пространство пользователя реализовано при помощи инструментария sched-ext, использующего BPF). Планировщик оптимизирован для повышения приоритета интерактивных задач на фоне задач, интенсивно нагружающих CPU. Например, в тесте запуска игрового приложения одновременно со сборкой ядра планировщик scx_rustland позволил добиться в игре более высокого FPS, чем при использовании штатного планировщика EEVDF.

  1. Главная ссылка к новости (https://blog.rust-lang.org/202...)
  2. OpenNews: В Китае запущен спутник с real-time подсистемой ядра Linux, написанной на Rust
  3. OpenNews: Разработчики FreeBSD обсуждают использование языка Rust в базовой системе
  4. OpenNews: Ядро Maestro, написанное на Rust и частично совместимое с Linux
  5. OpenNews: Выпуск языка программирования Rust 1.75 и unikernel Hermit 0.6.7
  6. OpenNews: В ядро Linux 6.8 намечено включение первого сетевого драйвера на языке Rust
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/60575-rust
Ключевые слова: rust
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (111) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.3, Аноним (3), 23:19, 08/02/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • –9 +/
    Вообще, впервые слышу, чтобы сборка софта влияла на игры. Это же не венда, в венде компиляция мешает играм. Реально играм мешают только загруженная CUDA, и то не совсем критично.
     
     
  • 2.28, cheburnator9000 (ok), 01:13, 09/02/2024 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Совсем больной? Игры утилизируют RAM, CPU не в меньшей степени чем GPU/VRAM. Еще скажи что можно все ядра отключить, скорость залочить на 800мгц и ФПС не должен упасть.
     
     
  • 3.29, cheburnator9000 (ok), 01:15, 09/02/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Сборка проекта на Rust утилизирует все ядра по простой банальной причине, количество crate пакетов зависимостей и зависимостей их зависимостей может достигать до ТЫСЯЧИ.
     
     
  • 4.72, JackONeill (?), 06:27, 09/02/2024 [^] [^^] [^^^] [ответить]  
  • –2 +/
    С NodeJS не перепутал?)
     
  • 4.135, freecoder (ok), 18:26, 10/02/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Компиляция утилизирует все ядра потому что по-умолчанию задана параллельная сборка на всех ядрах. Это можно настроить и по-другому.
     
  • 3.38, Аноним (3), 01:32, 09/02/2024 [^] [^^] [^^^] [ответить]  
  • –7 +/
    Или ты? Сборка софта в линуксе всегда происходит с пониженным приоритетом и процессор буквально никогда не является узким местом для остального софта. Память тоже не используется так уж активно, современная память в многоканальном режиме весьма производительная. Вот забитый io может быть проблемой и создавать задержки, ionice что-то не работает так хорошо как раньше.
     
     
  • 4.46, 12yoexpert (ok), 02:39, 09/02/2024 [^] [^^] [^^^] [ответить]  
  • –2 +/
    втф я только что прочитал... вспоминаются экспертные мнения из детства о том, как винда активному окну больше cpu выделяет...
     
     
  • 5.47, Аноним (3), 02:44, 09/02/2024 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Так у меня генту, я бы заметил. А вот почему венда так хреново себя ощущает под минимальной нагрузкой, я не имею понятия, но это факт.
     
  • 5.77, n00by (ok), 08:08, 09/02/2024 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Система повышает динамический приоритет потока для повышения его отклика следующ... большой текст свёрнут, показать
     
  • 4.64, cheburnator9000 (ok), 03:29, 09/02/2024 [^] [^^] [^^^] [ответить]  
  • +/
    > Или ты? Сборка софта в линуксе всегда происходит с пониженным приоритетом и
    > процессор буквально никогда не является узким местом для остального софта. Память
    > тоже не используется так уж активно, современная память в многоканальном режиме
    > весьма производительная. Вот забитый io может быть проблемой и создавать задержки,
    > ionice что-то не работает так хорошо как раньше.

    В каком мире работа обычного бинарника gcc или clang запускается с пониженным приоритетом? Или у вас Linux ZverCD Edition ну тогда понятно.

     
     
  • 5.65, Аноним (3), 03:44, 09/02/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    В любом, в котором "сборщик" не одноклеточное, потому что это целиком на нём как правило. Но дело в том, что изменение приоритетов процессора у процессов венды далеко не так замечательно работает. И особенно что касается планировщика io.
     
  • 5.79, faa (?), 08:42, 09/02/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Ну у него может быть сборка с nice запускается.
     
  • 4.81, Фрик из соседней пещеры (?), 10:01, 09/02/2024 [^] [^^] [^^^] [ответить]  
  • +/
    PORTAGE_NICENESS откройте для себя.
     
  • 3.94, Аноним (94), 13:01, 09/02/2024 [^] [^^] [^^^] [ответить]  
  • –1 +/
    >скорость залочить на 800мгц и ФПС не должен упасть.

    Ты не поверишь, залоченность на низкую частоту влияет только на скорость загрузки уровней. По крайней мере если ядер много. А вот для браузеров частота это всё и при 800 МГц некоторые сайты ощутимо лагают.

     

  • 1.4, Огромист (?), 23:19, 08/02/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +10 +/
    Версии языка выходят быстрее, чем я пишу один проект.
     
     
  • 2.20, tty0 (?), 00:58, 09/02/2024 [^] [^^] [^^^] [ответить]  
  • +/
    На самом деле нет, просто добавили фичи и выкатили новую версию.
     
     
  • 3.61, Аноним (61), 03:08, 09/02/2024 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Которую обязательно нудно собрать, чтобы собрать последующие.
     
  • 2.44, 12yoexpert (ok), 02:37, 09/02/2024 [^] [^^] [^^^] [ответить]  
  • +5 +/
    > чем я переписываю один проект

    поправил, уж извини

     
  • 2.89, Аноним (89), 11:00, 09/02/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Какая разница, что тебе переписывать, оригинальный проект или свой переписанный?
     
  • 2.136, freecoder (ok), 18:27, 10/02/2024 [^] [^^] [^^^] [ответить]  
  • +/
    У Rust фиксированный график выпусков, новая минорная версия языка выходит через каждые 6 недель.
     

  • 1.5, Аноним (-), 23:20, 08/02/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    > Реализован третий уровень поддержки для платформ {x86_64,i686}-win7-windows-msvc

    А сколько воя было что семерку дропают!
    Впрочем, это было читать совсем не удивительно читать на опеннете.

     
     
  • 2.18, Alladin (?), 00:48, 09/02/2024 [^] [^^] [^^^] [ответить]  
  • +/
    интересно еще то, что года 3-4 назад на rust под windows 7 спокойно писалось и работало, а тут поддержка..
     
     
  • 3.30, Аноним (-), 01:19, 09/02/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Ну так 4 года назад и было EOL семерки - "Windows 7 support ended on January 14, 2020".
    Мурзила напр. ее будет тянуть вроде до осени или начала зимы в ESR ветке.

    Они просто перевели его из Tier1 (или Tier2) в Tier3.
    Потому что даже машину для тестирования с семеркой сложно найти (местные ретрограды не в счет).
    А ведь там должна быть лицуха, ибо засудят, и ее нужно как-то интегрировать в общую инфру (дырявую семерку, хаха).

     
     
  • 4.82, Фрик из соседней пещеры (?), 10:03, 09/02/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Там наверняка виртуалки,хоть хрюньку пихай.
     
     
  • 5.91, Аноним (-), 11:47, 09/02/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Понимаю что звучит дико, но им виртуалки тоже лицензионные нужны.
     
     
  • 6.92, Аноним (92), 12:30, 09/02/2024 [^] [^^] [^^^] [ответить]  
  • –1 +/
    1. Не поверю, чтобы ни у кого из членов Rust Foundation не завалялось лицензионных дисков, которых им не жалко задонатить, хоть на хрюшу, хоть на висту, хоть на семёрку. Даже у меня есть, но ведь им не нужно это.
    2. Платиновый спонсор вполне мог бы дать с барского плеча.
     
     
  • 7.96, Аноним (-), 13:42, 09/02/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Так платиновый спонсор уже дропнул поддержку.
    Нафига ему продлевать агонию уже мертвого продукта?
    Он заинтересован в том чтобы все дружным строем перешли на 11 винду.
     
     
  • 8.112, Аноним (112), 17:02, 09/02/2024 [^] [^^] [^^^] [ответить]  
  • +/
    А через несколько лет и на 12 ... текст свёрнут, показать
     

  • 1.9, keydon (ok), 23:38, 08/02/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > Планировщик оптимизирован для повышения приоритета интерактивных задач на фоне задач, интенсивно нагружающих CPU. Например, в тесте запуска игрового приложения одновременно со сборкой ядра планировщик scx_rustland позволил добиться в игре более высокого FPS, чем при использовании штатного планировщика EEVDF.

    Вот это да! А если найс игре повысить то внезапно планировщик тоже будет больше процессорного времени выделять. Вот только ядро медленнее собираться будет(как и с scx_rustland), но журнализдов это мало волнует.

     
     
  • 2.11, Аноним (-), 23:46, 08/02/2024 [^] [^^] [^^^] [ответить]  
  • +8 +/
    > Вот только ядро медленнее собираться будет(как и с scx_rustland), но журнализдов это мало волнует

    Именно, потому что всем какбэ по.. на то, сколько собирается ядро.
    Оно уже собранное прилетает 99% юзеров с очередным обновлением.
    У ментейнеров есть соответствующее железо, а проблемы гентопердоликов никого не интересуют.

     
     
  • 3.93, anonymous (??), 12:31, 09/02/2024 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Зачем тебе опенсорс, братан, если тебе всё "прилетает"?

    Ну давайте тогда ядра на суперкомпьютерах собирать. Чтобы открытый или закрытый исходник было без разницы, всё равно не собрать.

     
     
  • 4.97, Аноним (-), 13:57, 09/02/2024 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Затем опенсорс и нужен! Для разделения труда.
    Кто-то пишет код и ментейнит, кто-то собирает, кто-то тестирует и пишет багрепорты.

    > Ну давайте тогда ядра на суперкомпьютерах собирать. Чтобы открытый или закрытый исходник было без разницы, всё равно не собрать.

    Даже если только на суперкомпе, все равно код будет открытый))
    А сообщество может скинуться и купить или арендовать суперкомп.
    И да, для Раста не нужен суперкомп, просто на девайсе с помойки оно будет собираться часов 12...
    Но это же не надо делать каждый день.

     
  • 2.31, cheburnator9000 (ok), 01:20, 09/02/2024 [^] [^^] [^^^] [ответить]  
  • +/
    >но журнализдов это мало волнует.

    У вас с порядком приоритетов проблемы. Вам и в игрушку поиграть и emerge -uND --with-bdeps=y @world подавай с одинаковой производительностью без потери ФПС и времени, чудес не бывает, устанавливай второй компьютер для таких желаний.

    В венде так всегда было foreground приложение получает больший приоритет любого backgroud и никто до сих пор не жаловался, наоборот только довольны, а в линуксе и этого нет в 2024 году.

     

  • 1.12, Вы забыли заполнить поле Name (?), 23:50, 08/02/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +12 +/
    Выпускать книжки по расту - это золотая жила. Можно каждую неделю выпускать новую.
     
     
  • 2.42, Аноним (42), 02:19, 09/02/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Наоборот, народ приучается читать доки и исходники (установка которых строго необходима для внятных сообщений об ошибках).
     
     
  • 3.137, Вы забыли заполнить поле Name (?), 20:04, 10/02/2024 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Наоборот, народ приучается читать доки и исходники

    Смешно. Они man не могут осилить, сразу в инет лезут.

     
     
  • 4.140, n00by (ok), 07:42, 11/02/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >> Наоборот, народ приучается читать доки и исходники
    > Смешно. Они man не могут осилить, сразу в инет лезут.

    А что, кто-то из бородатых сишников до сих пор читает man-ы вместо стандарта?

     
     
  • 5.156, Вы забыли заполнить поле Name (?), 06:24, 14/02/2024 [^] [^^] [^^^] [ответить]  
  • +/
    >>> Наоборот, народ приучается читать доки и исходники
    >> Смешно. Они man не могут осилить, сразу в инет лезут.
    > А что, кто-то из бородатых сишников до сих пор читает man-ы вместо
    > стандарта?

    В твоем вопросе вся твоя некомпетентность.

     
     
  • 6.157, n00by (ok), 07:45, 14/02/2024 [^] [^^] [^^^] [ответить]  
  • +/
    >>>> Наоборот, народ приучается читать доки и исходники
    >>> Смешно. Они man не могут осилить, сразу в инет лезут.
    >> А что, кто-то из бородатых сишников до сих пор читает man-ы вместо
    >> стандарта?
    > В твоем вопросе вся твоя некомпетентность.

    С точки зрения предпочитателя man-ов стандарту, естественно.

     
  • 2.105, Аноним (105), 15:07, 09/02/2024 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Мне тоже он нравится, жаль я не могу PHP заменить на Rust, виртуальный хостер не поддерживает.
     
  • 2.116, Аноним (116), 20:43, 09/02/2024 [^] [^^] [^^^] [ответить]  
  • +/
    https://pbs.twimg.com/media/FqFIs-UWIAAtLnl?format=jpg&name=small

    Классика. Помню еще с времён жс-а. А ведь симптоматично.

     

  • 1.14, Такер Карлсон (-), 00:05, 09/02/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • –6 +/
    > В документацию добавлена отдельная секция, описывающая совместимость различных типов аргументов и типов возвращаемых значений функций на уровне ABI. По сравнению с прошлыми версиями гарантирована совместимость на уровне ABI типов "char" и "u32", которые имеют идентичный размер и выравнивание.

    Это вроде не альфа версия. На минуту этот язык пытаются в ядро пропихнуть, а такие вещи не описаны.

     
     
  • 2.15, Шарп (ok), 00:24, 09/02/2024 [^] [^^] [^^^] [ответить]  
  • +12 +/
    Ну-ка напомни размер int'а в си описан? Ой-ой-ой, как же так, а в ядро пропихнули.
     
     
  • 3.16, Аноним (-), 00:28, 09/02/2024 [^] [^^] [^^^] [ответить]  
  • +6 +/
    Ты не понимаешь это другое!
    В СИ "щвободка и пусть система сама разберется, нам лениво это прописывать в стандарте ИСО",
    а вот в расте "диктат компилятора и вообще все плохо"!
    И вообще ты видел какое у них токсичное сообщество! СИшники всего-то в ядро навыпрограммировали уязвимостей, а эти их травят!
     
  • 3.22, Аноним (3), 00:59, 09/02/2024 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Мне больше интересно почему у этих символ вместо 1 байта 4 байта? И я не понимаю, у них это utf-16 без суррогатных единиц, т.е. несчастный огрызок UCS-2 с которым все уже настрадались? При этом, утф-8 использовать просто нельзя, в нём легко может быть и 1 и 2 и 6 байт.
     
     
  • 4.24, Аноним (24), 01:02, 09/02/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Строго до 4 по стандарту. больше - уже невалидно.
     
     
  • 5.27, Аноним (3), 01:12, 09/02/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Хм, действительно, я был практически уверен что мне встречались какие-то 6-байтные последовательности, это даже было законно и по стандарту (прошлому) в теории. Не помню, что это было и для чего. В таком случае, 4 байт действительно хватает для utf-8, остаётся вопрос с переменностью.
     
     
  • 6.39, Витюшка (?), 01:45, 09/02/2024 [^] [^^] [^^^] [ответить]  
  • +2 +/
    https://www.unicode.org/reports/tr26/
     
     
  • 7.40, Аноним (3), 02:00, 09/02/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Похоже, это именно оно, спасибо за ссылку!  Припоминаю, что пришлось использовать utf-32 тогда, потому что нормальный юникод был только в линуксе и в программах с icu (тот же хром) и у всех остальных платформ свои несовместимые представления о юникоде.
     
  • 6.66, morphe (?), 04:32, 09/02/2024 [^] [^^] [^^^] [ответить]  
  • +2 +/
    4 байт не хватит для представления любого символа в utf-8 utf-8 это способ коди... большой текст свёрнут, показать
     
     
  • 7.71, Аноним (-), 06:21, 09/02/2024 [^] [^^] [^^^] [ответить]  
  • +/
    >один символ может быть закодирован как 6 байт, что логично, ведь латиница в utf-32 занимала бы в 4 раза больше места чем нужно, а худший случай в 6 байт

    Откуда данные про 6 байт на символ? В первый раз слышу! 4 байта на символ, или UTF-32 - это самый большой формат кодирования из всех существующих, и он легко вместит в себя все кодовые позиции последнего вышедшего стандарта Юникод.

     
     
  • 8.78, n00by (ok), 08:20, 09/02/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Что бы закодировать все возможные четырёхбайтные значения 0x00000000 0xffff... текст свёрнут, показать
     
     
  • 9.110, morphe (?), 16:14, 09/02/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Однако суть не меняется, codepoint максимум 4 байта, codepoint закодированный в ... текст свёрнут, показать
     
  • 3.118, Вы забыли заполнить поле Name (?), 00:29, 10/02/2024 [^] [^^] [^^^] [ответить]  
  • +/
    > Ну-ка напомни размер int'а в си описан? Ой-ой-ой, как же так, а
    > в ядро пропихнули.

    Если тебе нужны гарантии используешь целое с размером из stdint, если нет и ты знаешь, что точно хватит, то просто int. Что не так?

     
  • 3.121, Аноним (121), 10:22, 10/02/2024 [^] [^^] [^^^] [ответить]  
  • +/
    > Ну-ка напомни размер int'а в си описан?

    а причём тут int, в С char == 1 byte

     
     
  • 4.125, Аноним (-), 13:09, 10/02/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Это смотря в каком месте ABI. Если при передаче в функцию, то там char занимает 4 байта. Но это если на стеке, а вот если на x86_64 да при регистровой передаче, так целый восьмибайтовый регистр ему нужен.
     
     
  • 5.128, Аноним (121), 13:59, 10/02/2024 [^] [^^] [^^^] [ответить]  
  • +/
    > а вот если на x86_64 да при регистровой передаче, так целый восьмибайтовый регистр ему нужен

    а регистры тут при чём ? по вашему получается гарантии раста невозможны - на этой архитектуре восьмибайтный регистр u64 или i64

    > гарантирована совместимость на уровне ABI типов "char" и "u32", которые имеют идентичный размер и выравнивание

     
     
  • 6.139, Аноним (-), 07:17, 11/02/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Ты представляешь себе, что такое ABI, Application Binary Interface Он описывает... большой текст свёрнут, показать
     
     
  • 7.141, Аноним (121), 09:44, 11/02/2024 [^] [^^] [^^^] [ответить]  
  • +/
    > Утверждение "имеют идентичный размер и выравнивание" будет истинным и в том случае, когда значение расширяется до 64 бит, чтобы передать через 64 битный регистр

    но ведь это ты утверждал что char-у _нужно_ 64 бита, а оказывается это просто процессор не имеет подходящих регистров и там без разницы какой языковой тип, так зачем ты всё же приплёл регистры ?

     
     
  • 8.143, Аноним (-), 06:54, 12/02/2024 [^] [^^] [^^^] [ответить]  
  • +/
    И продолжаю утверждать, что char у нужно 64 бита для передачи через регистры Вс... большой текст свёрнут, показать
     
     
  • 9.144, Аноним (144), 11:38, 12/02/2024 [^] [^^] [^^^] [ответить]  
  • +/
    так ты сам привёл пример что не нужно - но так проще быстрей и унивесальней речь... текст свёрнут, показать
     
     
  • 10.150, Аноним (-), 15:50, 12/02/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Причины того или иного технического решения не отменяют самого технического реше... большой текст свёрнут, показать
     
     
  • 11.151, Аноним (151), 16:41, 12/02/2024 [^] [^^] [^^^] [ответить]  
  • +/
    я сказал про размер char byte в С это ты соскочил с темы рассказывая что регистр... текст свёрнут, показать
     
  • 4.126, Cooler (??), 13:38, 10/02/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Только надо понимать, что один байт не всегда равен 8 бит.
     
     
  • 5.130, Аноним (121), 14:02, 10/02/2024 [^] [^^] [^^^] [ответить]  
  • +/
    > Только надо понимать, что один байт не всегда равен 8 бит.

    так это растовикам надо напомнить - будет ли на таких архитектурах работать раст ? я не уверен

     
  • 5.138, Аноним (-), 02:21, 11/02/2024 [^] [^^] [^^^] [ответить]  
  • +/
    > Только надо понимать, что один байт не всегда равен 8 бит.

    простите, вот раньше - да, но это было десятки лет назад
    а где сейчас оно не равно?

     
     
  • 6.142, Аноним (121), 10:00, 11/02/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > а где сейчас оно не равно?

    где угодно

    https://software-dl.ti.com/ccs/esd/documents/c2000_byte-accesses-with-the-c28x

     
  • 2.83, Фрик из соседней пещеры (?), 10:05, 09/02/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Будто bbcachefs идеальна,а она в этой финской лабе и многи нравится.
     

     ....большая нить свёрнута, показать (26)

  • 1.19, Аноним (24), 00:50, 09/02/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • –5 +/
    >гарантирована совместимость на уровне ABI типов "char" и "u32", которые имеют идентичный размер и выравнивание

    Они там с ума посходили, хранить значения от 0 до 256 в 4х байтах? Всё с ними ясно, ффтопку этот раст.

     
     
  • 2.21, чатжпт (?), 00:58, 09/02/2024 [^] [^^] [^^^] [ответить]  
  • +7 +/
    шел 2024 год, писатели на си всё еще не узнали про юникод
     
     
  • 3.23, Аноним (24), 01:01, 09/02/2024 [^] [^^] [^^^] [ответить]  
  • +4 +/
    Писатели на си используют строго UTF-8.  Даже петицию создали https://utf8everywhere.org/ .
     
     
  • 4.26, Аноним (26), 01:05, 09/02/2024 [^] [^^] [^^^] [ответить]  
  • +4 +/
    Так и в расте в строках используется UTF-8.

    char это для итерации по декодированным символам.

     
     
  • 5.41, Аноним (42), 02:16, 09/02/2024 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Извиняюсь тогда. Мало на расте кодил, забыл, что там для строк другой тип. а не как в сишке.
     
  • 4.68, morphe (?), 04:40, 09/02/2024 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Utf8 - юникод, символ (codepoint) там максимум 4 байта, и Rust тут следует стандарту

    Utf8 это про кодирование, а не про размер символа, размер символа общий и для utf8, и для utf16, и для utf32 4 байта, а кодируются эти 4 байта в utf8 - 1-6байт, в utf16 - 2-4байта, в utf32 - 4байта

     
     
  • 5.74, test (??), 06:36, 09/02/2024 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Сколько будет занимать англ. символ в у8 в char в Rust ?
     
     
  • 6.95, morphe (?), 13:07, 09/02/2024 [^] [^^] [^^^] [ответить]  
  • +/
    > Сколько будет занимать англ. символ в у8 в char в Rust ?

    utf8 про кодирование в строку, в строке английский символ занимает 1 байт
    char (codepoint) про посимвольную итерацию по строке, char 4 байта независимо от того, что там за символ

     
  • 5.85, Аноним (89), 10:42, 09/02/2024 [^] [^^] [^^^] [ответить]  
  • +/
    UTF-8 переменной длины. При кодировании арабских символов доходит, что-то, до 6 байт.
     
     
  • 6.111, morphe (?), 16:43, 09/02/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > UTF-8 переменной длины. При кодировании арабских символов доходит, что-то, до 6 байт.

    utf-8 переменной, а char фиксрованной и ограничен 4 байтами

     
  • 3.25, Юникод (?), 01:03, 09/02/2024 [^] [^^] [^^^] [ответить]  
  • –5 +/
    Писатели на Си знают что такое битовые поля в структурах. А этот ваш юникод с эмоджи не нужен. Выдумывают каждый код новые пиктограммы чтобы, коммитет продолжали финансировать. Весь ваш юникод еще на версии 2 надо было закрывать.
     
     
  • 4.70, Аноним (-), 05:12, 09/02/2024 Скрыто ботом-модератором     [к модератору]
  • +6 +/
     
  • 4.87, Аноним (89), 10:48, 09/02/2024 [^] [^^] [^^^] [ответить]  
  • +7 +/
    Пусть лучше будет Юникод, чем вот это вот CP866, KOI8-R, CP1251, ISO-8859-15, ДКОИ.
     
  • 2.90, Аноним (90), 11:32, 09/02/2024 [^] [^^] [^^^] [ответить]  
  • +4 +/
    >>хранить значения от 0 до 256

    сразу видно вы настоящий программист ))

     
     
  • 3.101, n00by (ok), 14:09, 09/02/2024 [^] [^^] [^^^] [ответить]  
  • +/
    >>>хранить значения от 0 до 256
    > сразу видно вы настоящий программист ))

    Если длина строки известна, то завершающий 0 хранить не обязательно, возможно кодировать им U+0100.

     
     
  • 4.102, Аноним (-), 14:21, 09/02/2024 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Вот так и случается, благими намереньями потом за границы строк выходят)
    И много ты наэкономишь на одном символе на каждую строку?

    Уже пробовали делать null-terminated, аж целый байт наэкономили...
    А ошибки отгребают до сих пор.

     
     
  • 5.106, n00by (ok), 15:20, 09/02/2024 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Если со строкой делается что-то большее, чем передача аргументом в puts(), то она хранится в графе (дереве). Минимум два указателя - это 16 байт. Если заменить их на индексы массива, то получится экономия в 2 или даже 4 раза. В последнем случае размер окажется ограничен 64К узлами. Что бы это ограничение обойти, можно вместо символа хранить маркер, указывающий, что в следующей ячейке массива хранятся старшие 16 разрядов индексов. Таким образом можно упаковать и до однобайтных индексов, что даст экономию памяти в пределе до 8 раз (без учёта символа). Но настоящих программистов не осталось, потому на Rust двусвязный список unsafe, а браузеры выжирают гигабайты.
     
     
  • 6.115, Аноним (-), 17:44, 09/02/2024 [^] [^^] [^^^] [ответить]  
  • +4 +/
    Энто те самые "настоящие программисты" которые наделали столько CVE что находят окаменелости 30 летней давности как в хоргʼе?
    Ну и слава богу, что они потихоньку вымирают.
    А то я насмотрелчя на любителей оптимизировать заранее, а потом бросать свой страшный, глючный и совершенно не поддерживаемый код.
     
     
  • 7.131, n00by (ok), 15:36, 10/02/2024 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Энто те самые "настоящие программисты" которые наделали столько CVE что находят окаменелости
    > 30 летней давности как в хоргʼе?

    Это тот самый эксперт, который смысл сообщение вообще не понял, но возразить очень хочет?

     
  • 6.124, Аноним (-), 13:01, 10/02/2024 [^] [^^] [^^^] [ответить]  
  • +/
    > Если со строкой делается что-то большее, чем передача аргументом в puts(), то
    > она хранится в графе (дереве). Минимум два указателя - это 16 байт. Если заменить
    > их на индексы массива, то получится экономия в 2 или даже 4 раза.

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

     
     
  • 7.132, n00by (ok), 15:42, 10/02/2024 [^] [^^] [^^^] [ответить]  
  • +/
    >> Если со строкой делается что-то большее, чем передача аргументом в puts(), то
    >> она хранится в графе (дереве). Минимум два указателя - это 16 байт. Если заменить
    >> их на индексы массива, то получится экономия в 2 или даже 4 раза.
    > У оптимизатора компилера могут быть какие-то свои идеи на этот счет. В
    > _современных_ архитектурах оно могет и адресацию относительно базы, вгружаемой 1 раз
    > на эвон какой код, а вон там указатель сделан как адресация
    > с офсетом от, и если указатель в сыром виде никто не
    > юзает то и хрен с ним вообще.

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

     
  • 6.127, Cooler (??), 13:43, 10/02/2024 [^] [^^] [^^^] [ответить]  
  • +/
    А можно поподробнее, что это за стандарт хранения строк в дереве? Я конечно могу себе такое представить, но утверждать что это частое явление, мне кажется слишком сильно.
     
     
  • 7.133, n00by (ok), 15:45, 10/02/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Это не стандарт. Попробуйте выполнить курсовую работу из старого курса CS MIT - реализовать интерпретатор LISP. Словарь в каком виде хранить? Массив строк и искать там прямым перебором?
     
     
  • 8.146, Аноним (-), 12:42, 12/02/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Зачем массив Список Лисп же Но если хочется оптимизаций, то хеш-табличка Есл... большой текст свёрнут, показать
     
     
  • 9.147, n00by (ok), 13:16, 12/02/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Ну вот, уже появился простейший граф Это что, самому надо написать Или std ma... текст свёрнут, показать
     
     
  • 10.148, Cooler (??), 14:10, 12/02/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Соглашусь, что всё-таки способ хранения строк нужно выбирать исходя из требовани... текст свёрнут, показать
     
     
  • 11.149, n00by (ok), 14:25, 12/02/2024 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Словарь - это такая штука, где хранятся имена функций Таких имён может быть н... текст свёрнут, показать
     
     
  • 12.154, Cooler (??), 08:52, 13/02/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Да, сорри Изначально неправильно понял ваш пост, что строки хранятся в дереве ... текст свёрнут, показать
     
     
  • 13.155, n00by (ok), 09:24, 13/02/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Всё правильно поняли, каждый узел - это char Если для курсовика годится хранить... текст свёрнут, показать
     
  • 4.107, Пряник (?), 15:22, 09/02/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Мне кажется это зависит от функции, в которую ты передашь свою мега-строку.
     
     
  • 5.109, n00by (ok), 15:26, 09/02/2024 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Действительно, зависит. Программисты ведь пишут не функции, а команды типа git clone.
     
  • 2.117, _kp (ok), 22:28, 09/02/2024 [^] [^^] [^^^] [ответить]  
  • +/
    >>Они там с ума посходили, хранить значения от 0 до 256 в 4х байтах?

    Нет. Для 8ми битных строк есть другие типы.
    Но, чайники сделают все по примерам, именно с толстыми строками (по умолчанию).

    А вот работа со структурами, через одно неприятное место. А если ещё и с битовыми полями, то исходники "write only".

     

     ....большая нить свёрнута, показать (31)

  • 1.84, Аноним (89), 10:37, 09/02/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    Опять всё переписывать...
     
  • 1.88, Big Robert TheTables (?), 10:54, 09/02/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    rust так хочет в gamedev? или "ну хоть куда-то"
     
     
  • 2.104, Онанистмус (?), 14:34, 09/02/2024 [^] [^^] [^^^] [ответить]  
  • –3 +/
    rust и gamedev на данный момент несовместимы т.к. у раста нет флага компилятора -fast-math. Все игры собираются с этим флагом в С++ и это позволяет ускорить математику в играх примерно в 5-10 раз.
     
     
  • 3.119, Вы забыли заполнить поле Name (?), 00:32, 10/02/2024 [^] [^^] [^^^] [ответить]  
  • +/
    > rust и gamedev на данный момент несовместимы т.к. у раста нет флага
    > компилятора -fast-math. Все игры собираются с этим флагом в С++ и
    > это позволяет ускорить математику в играх примерно в 5-10 раз.

    А еще, а еще, там классов нормальных нет.

     
  • 3.122, Аноним (-), 12:51, 10/02/2024 [^] [^^] [^^^] [ответить]  
  • +/
    > rust и gamedev на данный момент несовместимы т.к. у раста нет флага компилятора -fast-math.

    Ну вот fast math в играх и правда полезен - там на корректность математики довольно похрен в общем случае. В самом неудачном - ну будет какой-то глитч под воркэраунд, не смертельно.

     
  • 3.134, Аноним (134), 16:24, 10/02/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    А создатели батлфилдов про это в курсе?
     

  • 1.98, adolfus (ok), 14:00, 09/02/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Откуда можно скачать исходники?
     
     
  • 2.129, Аноним (-), 14:02, 10/02/2024 Скрыто ботом-модератором     [к модератору]
  • +/
     
     
  • 3.145, adolfus (ok), 12:17, 12/02/2024 Скрыто ботом-модератором     [к модератору]
  • +/
     
  • 2.152, Аноним (152), 17:44, 12/02/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Ты удивишься, но с https://github.com/rust-lang/rust
     
     
  • 3.153, adolfus (ok), 19:15, 12/02/2024 [^] [^^] [^^^] [ответить]  
  • +/
    > Ты удивишься, но с https://github.com/rust-lang/rust

    Действительно удивлен. Откуда у вас эта информация -- на их сайте ничего об этом нет нет. Только возможность что-то установить из сети.

     

  • 1.108, Пряник (?), 15:25, 09/02/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Думал без генераторов плохо, а там уже async/await давно есть.
     
  • 1.123, Аноним (-), 12:55, 10/02/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >  The sum of the 'core::array::iter::IntoIter<i32, 3>' is 6.

    Ящерки совсем не палятся примерами. Не, человек такую фразу выдать не сможет, люди так не думают в принципе.

     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру