URL: https://www.opennet.dev/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID3
Нить номер: 132792
[ Назад ]

Исходное сообщение
"Выпуск языка программирования Rust 1.76"

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

Подробнее: https://www.opennet.dev/opennews/art.shtml?num=60575


Содержание

Сообщения в этом обсуждении
"Выпуск языка программирования Rust 1.76"
Отправлено Аноним , 08-Фев-24 23:19 
Вообще, впервые слышу, чтобы сборка софта влияла на игры. Это же не венда, в венде компиляция мешает играм. Реально играм мешают только загруженная CUDA, и то не совсем критично.

"Выпуск языка программирования Rust 1.76"
Отправлено cheburnator9000 , 09-Фев-24 01:13 
Совсем больной? Игры утилизируют RAM, CPU не в меньшей степени чем GPU/VRAM. Еще скажи что можно все ядра отключить, скорость залочить на 800мгц и ФПС не должен упасть.

"Выпуск языка программирования Rust 1.76"
Отправлено cheburnator9000 , 09-Фев-24 01:15 
Сборка проекта на Rust утилизирует все ядра по простой банальной причине, количество crate пакетов зависимостей и зависимостей их зависимостей может достигать до ТЫСЯЧИ.

"Выпуск языка программирования Rust 1.76"
Отправлено JackONeill , 09-Фев-24 06:27 
С NodeJS не перепутал?)

"Выпуск языка программирования Rust 1.76"
Отправлено freecoder , 10-Фев-24 18:26 
Компиляция утилизирует все ядра потому что по-умолчанию задана параллельная сборка на всех ядрах. Это можно настроить и по-другому.

"Выпуск языка программирования Rust 1.76"
Отправлено Аноним , 09-Фев-24 01:32 
Или ты? Сборка софта в линуксе всегда происходит с пониженным приоритетом и процессор буквально никогда не является узким местом для остального софта. Память тоже не используется так уж активно, современная память в многоканальном режиме весьма производительная. Вот забитый io может быть проблемой и создавать задержки, ionice что-то не работает так хорошо как раньше.

"Выпуск языка программирования Rust 1.76"
Отправлено 12yoexpert , 09-Фев-24 02:39 
втф я только что прочитал... вспоминаются экспертные мнения из детства о том, как винда активному окну больше cpu выделяет...

"Выпуск языка программирования Rust 1.76"
Отправлено Аноним , 09-Фев-24 02:44 
Так у меня генту, я бы заметил. А вот почему венда так хреново себя ощущает под минимальной нагрузкой, я не имею понятия, но это факт.

"Выпуск языка программирования Rust 1.76"
Отправлено n00by , 09-Фев-24 08:08 
> втф я только что прочитал... вспоминаются экспертные мнения из детства о том,
> как винда активному окну больше cpu выделяет...

Система повышает динамический приоритет потока для повышения его отклика следующим образом:

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

Когда окно получает входные данные, такие как сообщения таймера, сообщения мыши или ввод с клавиатуры, планировщик повышает приоритет потока, которому принадлежит окно.

https://learn.microsoft.com/ru-ru/windows/win32/procthread/p...


"Выпуск языка программирования Rust 1.76"
Отправлено cheburnator9000 , 09-Фев-24 03:29 
> Или ты? Сборка софта в линуксе всегда происходит с пониженным приоритетом и
> процессор буквально никогда не является узким местом для остального софта. Память
> тоже не используется так уж активно, современная память в многоканальном режиме
> весьма производительная. Вот забитый io может быть проблемой и создавать задержки,
> ionice что-то не работает так хорошо как раньше.

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


"Выпуск языка программирования Rust 1.76"
Отправлено Аноним , 09-Фев-24 03:44 
В любом, в котором "сборщик" не одноклеточное, потому что это целиком на нём как правило. Но дело в том, что изменение приоритетов процессора у процессов венды далеко не так замечательно работает. И особенно что касается планировщика io.

"Выпуск языка программирования Rust 1.76"
Отправлено faa , 09-Фев-24 08:42 
Ну у него может быть сборка с nice запускается.

"Выпуск языка программирования Rust 1.76"
Отправлено Фрик из соседней пещеры , 09-Фев-24 10:01 
PORTAGE_NICENESS откройте для себя.

"Выпуск языка программирования Rust 1.76"
Отправлено Аноним , 09-Фев-24 13:01 
>скорость залочить на 800мгц и ФПС не должен упасть.

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


"Выпуск языка программирования Rust 1.76"
Отправлено Огромист , 08-Фев-24 23:19 
Версии языка выходят быстрее, чем я пишу один проект.

"Выпуск языка программирования Rust 1.76"
Отправлено tty0 , 09-Фев-24 00:58 
На самом деле нет, просто добавили фичи и выкатили новую версию.

"Выпуск языка программирования Rust 1.76"
Отправлено Аноним , 09-Фев-24 03:08 
Которую обязательно нудно собрать, чтобы собрать последующие.

"Выпуск языка программирования Rust 1.76"
Отправлено 12yoexpert , 09-Фев-24 02:37 
> чем я переписываю один проект

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


"Выпуск языка программирования Rust 1.76"
Отправлено Аноним , 09-Фев-24 11:00 
Какая разница, что тебе переписывать, оригинальный проект или свой переписанный?

"Выпуск языка программирования Rust 1.76"
Отправлено freecoder , 10-Фев-24 18:27 
У Rust фиксированный график выпусков, новая минорная версия языка выходит через каждые 6 недель.

"Выпуск языка программирования Rust 1.76"
Отправлено Аноним , 08-Фев-24 23:20 
> Реализован третий уровень поддержки для платформ {x86_64,i686}-win7-windows-msvc

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


"Выпуск языка программирования Rust 1.76"
Отправлено Alladin , 09-Фев-24 00:48 
интересно еще то, что года 3-4 назад на rust под windows 7 спокойно писалось и работало, а тут поддержка..

"Выпуск языка программирования Rust 1.76"
Отправлено Аноним , 09-Фев-24 01:19 
Ну так 4 года назад и было EOL семерки - "Windows 7 support ended on January 14, 2020".
Мурзила напр. ее будет тянуть вроде до осени или начала зимы в ESR ветке.

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


"Выпуск языка программирования Rust 1.76"
Отправлено Фрик из соседней пещеры , 09-Фев-24 10:03 
Там наверняка виртуалки,хоть хрюньку пихай.

"Выпуск языка программирования Rust 1.76"
Отправлено Аноним , 09-Фев-24 11:47 
Понимаю что звучит дико, но им виртуалки тоже лицензионные нужны.

"Выпуск языка программирования Rust 1.76"
Отправлено Аноним , 09-Фев-24 12:30 
1. Не поверю, чтобы ни у кого из членов Rust Foundation не завалялось лицензионных дисков, которых им не жалко задонатить, хоть на хрюшу, хоть на висту, хоть на семёрку. Даже у меня есть, но ведь им не нужно это.
2. Платиновый спонсор вполне мог бы дать с барского плеча.

"Выпуск языка программирования Rust 1.76"
Отправлено Аноним , 09-Фев-24 13:42 
Так платиновый спонсор уже дропнул поддержку.
Нафига ему продлевать агонию уже мертвого продукта?
Он заинтересован в том чтобы все дружным строем перешли на 11 винду.

"Выпуск языка программирования Rust 1.76"
Отправлено Аноним , 09-Фев-24 17:02 
А через несколько лет и на 12

"Выпуск языка программирования Rust 1.76"
Отправлено keydon , 08-Фев-24 23:38 
> Планировщик оптимизирован для повышения приоритета интерактивных задач на фоне задач, интенсивно нагружающих CPU. Например, в тесте запуска игрового приложения одновременно со сборкой ядра планировщик scx_rustland позволил добиться в игре более высокого FPS, чем при использовании штатного планировщика EEVDF.

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


"Выпуск языка программирования Rust 1.76"
Отправлено Аноним , 08-Фев-24 23:46 
> Вот только ядро медленнее собираться будет(как и с scx_rustland), но журнализдов это мало волнует

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


"Выпуск языка программирования Rust 1.76"
Отправлено anonymous , 09-Фев-24 12:31 
Зачем тебе опенсорс, братан, если тебе всё "прилетает"?

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


"Выпуск языка программирования Rust 1.76"
Отправлено Аноним , 09-Фев-24 13:57 
Затем опенсорс и нужен! Для разделения труда.
Кто-то пишет код и ментейнит, кто-то собирает, кто-то тестирует и пишет багрепорты.

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

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


"Выпуск языка программирования Rust 1.76"
Отправлено cheburnator9000 , 09-Фев-24 01:20 
>но журнализдов это мало волнует.

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

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


"Выпуск языка программирования Rust 1.76"
Отправлено Вы забыли заполнить поле Name , 08-Фев-24 23:50 
Выпускать книжки по расту - это золотая жила. Можно каждую неделю выпускать новую.

"Выпуск языка программирования Rust 1.76"
Отправлено Аноним , 09-Фев-24 02:19 
Наоборот, народ приучается читать доки и исходники (установка которых строго необходима для внятных сообщений об ошибках).

"Выпуск языка программирования Rust 1.76"
Отправлено Вы забыли заполнить поле Name , 10-Фев-24 20:04 
> Наоборот, народ приучается читать доки и исходники

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


"Выпуск языка программирования Rust 1.76"
Отправлено n00by , 11-Фев-24 07:42 
>> Наоборот, народ приучается читать доки и исходники
> Смешно. Они man не могут осилить, сразу в инет лезут.

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


"Выпуск языка программирования Rust 1.76"
Отправлено Вы забыли заполнить поле Name , 14-Фев-24 06:24 
>>> Наоборот, народ приучается читать доки и исходники
>> Смешно. Они man не могут осилить, сразу в инет лезут.
> А что, кто-то из бородатых сишников до сих пор читает man-ы вместо
> стандарта?

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


"Выпуск языка программирования Rust 1.76"
Отправлено n00by , 14-Фев-24 07:45 
>>>> Наоборот, народ приучается читать доки и исходники
>>> Смешно. Они man не могут осилить, сразу в инет лезут.
>> А что, кто-то из бородатых сишников до сих пор читает man-ы вместо
>> стандарта?
> В твоем вопросе вся твоя некомпетентность.

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


"Выпуск языка программирования Rust 1.76"
Отправлено Аноним , 09-Фев-24 15:07 
Мне тоже он нравится, жаль я не могу PHP заменить на Rust, виртуальный хостер не поддерживает.

"Выпуск языка программирования Rust 1.76"
Отправлено Аноним , 09-Фев-24 20:43 
https://pbs.twimg.com/media/FqFIs-UWIAAtLnl?format=jpg&name=...

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


"Выпуск языка программирования Rust 1.76"
Отправлено Такер Карлсон , 09-Фев-24 00:05 
> В документацию добавлена отдельная секция, описывающая совместимость различных типов аргументов и типов возвращаемых значений функций на уровне ABI. По сравнению с прошлыми версиями гарантирована совместимость на уровне ABI типов "char" и "u32", которые имеют идентичный размер и выравнивание.

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


"Выпуск языка программирования Rust 1.76"
Отправлено Шарп , 09-Фев-24 00:24 
Ну-ка напомни размер int'а в си описан? Ой-ой-ой, как же так, а в ядро пропихнули.

"Выпуск языка программирования Rust 1.76"
Отправлено Аноним , 09-Фев-24 00:28 
Ты не понимаешь это другое!
В СИ "щвободка и пусть система сама разберется, нам лениво это прописывать в стандарте ИСО",
а вот в расте "диктат компилятора и вообще все плохо"!
И вообще ты видел какое у них токсичное сообщество! СИшники всего-то в ядро навыпрограммировали уязвимостей, а эти их травят!

"Выпуск языка программирования Rust 1.76"
Отправлено Аноним , 09-Фев-24 00:59 
Мне больше интересно почему у этих символ вместо 1 байта 4 байта? И я не понимаю, у них это utf-16 без суррогатных единиц, т.е. несчастный огрызок UCS-2 с которым все уже настрадались? При этом, утф-8 использовать просто нельзя, в нём легко может быть и 1 и 2 и 6 байт.

"Выпуск языка программирования Rust 1.76"
Отправлено Аноним , 09-Фев-24 01:02 
Строго до 4 по стандарту. больше - уже невалидно.

"Выпуск языка программирования Rust 1.76"
Отправлено Аноним , 09-Фев-24 01:12 
Хм, действительно, я был практически уверен что мне встречались какие-то 6-байтные последовательности, это даже было законно и по стандарту (прошлому) в теории. Не помню, что это было и для чего. В таком случае, 4 байт действительно хватает для utf-8, остаётся вопрос с переменностью.

"Выпуск языка программирования Rust 1.76"
Отправлено Витюшка , 09-Фев-24 01:45 
https://www.unicode.org/reports/tr26/

"Выпуск языка программирования Rust 1.76"
Отправлено Аноним , 09-Фев-24 02:00 
Похоже, это именно оно, спасибо за ссылку!  Припоминаю, что пришлось использовать utf-32 тогда, потому что нормальный юникод был только в линуксе и в программах с icu (тот же хром) и у всех остальных платформ свои несовместимые представления о юникоде.

"Выпуск языка программирования Rust 1.76"
Отправлено morphe , 09-Фев-24 04:32 
> В таком случае, 4 байт действительно хватает для utf-8, остаётся вопрос с переменностью.

4 байт не хватит для представления любого символа в utf-8.
utf-8 это способ кодирования unicode символов, где 1 символ минимум 1 байт, а максимум 6 байт
В utf-16 - минимум 2, максимум 4
utf-32 - всегда 4 байта, потому что unicode символ по стандарту не может иметь codepoint больше по размеру чем 4 байта.

Строки в Rust utf-8, и там один символ может быть закодирован как 6 байт, что логично, ведь латиница в utf-32 занимала бы в 4 раза больше места чем нужно, а худший случай в 6 байт на codepoint пока не осуществим (Нет таких пока, китайский и прочие языки - максимум 5 байт)

Однако строки в Rust напрямую не индексируются посимвольно, а потому char сделали статичные 4 байта, поэтому char вмещает в себя любой unicode codepoint.


"Выпуск языка программирования Rust 1.76"
Отправлено Аноним , 09-Фев-24 06:21 
>один символ может быть закодирован как 6 байт, что логично, ведь латиница в utf-32 занимала бы в 4 раза больше места чем нужно, а худший случай в 6 байт

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


"Выпуск языка программирования Rust 1.76"
Отправлено n00by , 09-Фев-24 08:20 
Что бы закодировать все возможные четырёхбайтные значения (0x00000000 ... 0xffffffff) в кодировке UTF-8 может потребоваться до 6-ти байт. Однако стандарт ограничил диапазон возможных значений символов Уникрода максимумом U+10FFFF и они умещаются в 4 байта UTF-8.

"Выпуск языка программирования Rust 1.76"
Отправлено morphe , 09-Фев-24 16:14 
Однако суть не меняется, codepoint максимум 4 байта, codepoint закодированный в utf-8 максимум 6 байт

Даже когда в Unicode решат дропнуть utf-16 (из-за него codepoint range и ограничили, хотя там действительно до столкновения с другими цивилизациями range не кончится) - Rust останется с ним полностью совместим


"Выпуск языка программирования Rust 1.76"
Отправлено Вы забыли заполнить поле Name , 10-Фев-24 00:29 
> Ну-ка напомни размер int'а в си описан? Ой-ой-ой, как же так, а
> в ядро пропихнули.

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


"Выпуск языка программирования Rust 1.76"
Отправлено Аноним , 10-Фев-24 10:22 
> Ну-ка напомни размер int'а в си описан?

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


"Выпуск языка программирования Rust 1.76"
Отправлено Аноним , 10-Фев-24 13:09 
Это смотря в каком месте ABI. Если при передаче в функцию, то там char занимает 4 байта. Но это если на стеке, а вот если на x86_64 да при регистровой передаче, так целый восьмибайтовый регистр ему нужен.

"Выпуск языка программирования Rust 1.76"
Отправлено Аноним , 10-Фев-24 13:59 
> а вот если на x86_64 да при регистровой передаче, так целый восьмибайтовый регистр ему нужен

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

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


"Выпуск языка программирования Rust 1.76"
Отправлено Аноним , 11-Фев-24 07:17 
Ты представляешь себе, что такое ABI, Application Binary Interface? Он описывает как значения должны выглядеть в разных ситуациях. Например, когда мы хотим это значение хранить в памяти. Или когда мы хотим хранить массив таких значений в памяти. Или когда мы передаём значение в функцию. ABI позволяет проводить чёткие границы между разными кусками программы, чтобы потом из этих кусков как из кубиков можно было бы собирать более сложные конструкции. Чтобы когда ты из одной функции вызываешь другую, не надо было бы проводить анализ вызываемой функции с тем, чтобы выяснить как туда передать аргументы.

Насчёт же невозможности выполнения гарантий раста, у меня встаёт другой вопрос: тебе математику в школе читали? Учили понимать точный смысл слов и свои мысли выражать точными фразами, не допускающими двусмысленностей? Утверждение "имеют идентичный размер и выравнивание" будет истинным и в том случае, когда значение расширяется до 64 бит, чтобы передать через 64 битный регистр, и даже несмотря на то, что при хранении в регистре выравнивания нет как класса. То есть утверждение "char и u32 имеют идентичный размер и выравнивание" будет истинным и для C но с оговоркой "при передаче в функцию".


"Выпуск языка программирования Rust 1.76"
Отправлено Аноним , 11-Фев-24 09:44 
> Утверждение "имеют идентичный размер и выравнивание" будет истинным и в том случае, когда значение расширяется до 64 бит, чтобы передать через 64 битный регистр

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


"Выпуск языка программирования Rust 1.76"
Отправлено Аноним , 12-Фев-24 06:54 
> ты утверждал что char-у _нужно_ 64 бита,

И продолжаю утверждать, что char'у нужно 64 бита для передачи через регистры. Все распространённые ABI так делают на 64-битных процах.

> а оказывается это просто процессор не имеет подходящих регистров

Ты типа пытаешься аппелировать к тому, что это единственный способ передавать чары через регистры? Не думаю, что даже если это верно, то это что-то меняет, но ситуация ещё интереснее тем, что это неверно. Я предположу, что ты никогда не писал на ассемблере? Там ведь нет никаких проблем упаковать 8 чаров в один регистр для передачи. Или, скажем, четыре чара и один uint32_t. На x86_64 есть частичные регистры al/ah, которые позволяют без использования сдвигов упаковать два чара в один rax. Но это не делается в ABI.

Кроме того, речь не только о регистрах, но и о стеке, где char использует 32 бита.


"Выпуск языка программирования Rust 1.76"
Отправлено Аноним , 12-Фев-24 11:38 
> И продолжаю утверждать, что char'у нужно 64 бита для передачи через регистры.
> Там ведь нет никаких проблем упаковать 8 чаров в один регистр для передачи.

так ты сам привёл пример что не нужно - но так проще быстрей и унивесальней

> речь не только о регистрах, но и о стеке, где char использует 32 бита

речь только об этом - как данные в памяти размещаются, если любой тип целый регистр занимает нет смысла говорить там о выравнивании, но ты зачем-то приплёл это, хотел сказать этим что на асме писал ? cahr/byte в С вообще не про регистры - это минимальный адресуемый размер данных в памяти.


"Выпуск языка программирования Rust 1.76"
Отправлено Аноним , 12-Фев-24 15:50 
> так ты сам привёл пример что не нужно - но так проще быстрей и унивесальней

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

>> речь не только о регистрах, но и о стеке, где char использует 32 бита
> речь только об этом - как данные в памяти размещаются

Регистры и стек -- это тоже память. Регистры -- это самая быстрая память, быстрее даже чем L1, но регистров немного, и поэтому для их адресов придумывают мнемонические имена. В том же x86_32 регистров восемь штук и они в машинном коде кодируются тремя битами адреса. Но восемь это немного, и можно каждому придумать имя. Плюс их нельзя косвенной адресацией достать, только статически прописанным "адресом", поэтому арифметика адресов регистров не имеет большого смысла, и поэтому можно и мнемониками. Но регистры -- это память и притом самая важная.

А уж стек -- это память даже в том смысле этого слова, который прямолинейно ссылается на оперативку. Даже сову на глобус не надо натягивать, чтобы называть стек памятью. И на стеке твои чары занимают 32 бита.

> cahr/byte в С вообще не про регистры - это минимальный адресуемый размер данных в памяти.

Ты сейчас пытаешься соскочить с темы. Чувствуешь что слил, да? Мы не говорим о том, про что там char/byte в C, мы говорим об ABI используемых с C.


"Выпуск языка программирования Rust 1.76"
Отправлено Аноним , 12-Фев-24 16:41 
> Мы не говорим о том, про что там char/byte в C

я сказал про размер char/byte в С

> мы говорим об ABI используемых с C

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


"Выпуск языка программирования Rust 1.76"
Отправлено Cooler , 10-Фев-24 13:38 
Только надо понимать, что один байт не всегда равен 8 бит.

"Выпуск языка программирования Rust 1.76"
Отправлено Аноним , 10-Фев-24 14:02 
> Только надо понимать, что один байт не всегда равен 8 бит.

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


"Выпуск языка программирования Rust 1.76"
Отправлено Аноним , 11-Фев-24 02:21 
> Только надо понимать, что один байт не всегда равен 8 бит.

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


"Выпуск языка программирования Rust 1.76"
Отправлено Аноним , 11-Фев-24 10:00 
> а где сейчас оно не равно?

где угодно

https://software-dl.ti.com/ccs/esd/documents/c2000_byte-acce...


"Выпуск языка программирования Rust 1.76"
Отправлено Фрик из соседней пещеры , 09-Фев-24 10:05 
Будто bbcachefs идеальна,а она в этой финской лабе и многи нравится.

"Выпуск языка программирования Rust 1.76"
Отправлено Аноним , 09-Фев-24 00:50 
>гарантирована совместимость на уровне ABI типов "char" и "u32", которые имеют идентичный размер и выравнивание

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


"Выпуск языка программирования Rust 1.76"
Отправлено чатжпт , 09-Фев-24 00:58 
шел 2024 год, писатели на си всё еще не узнали про юникод

"Выпуск языка программирования Rust 1.76"
Отправлено Аноним , 09-Фев-24 01:01 
Писатели на си используют строго UTF-8.  Даже петицию создали https://utf8everywhere.org/ .

"Выпуск языка программирования Rust 1.76"
Отправлено Аноним , 09-Фев-24 01:05 
Так и в расте в строках используется UTF-8.

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


"Выпуск языка программирования Rust 1.76"
Отправлено Аноним , 09-Фев-24 02:16 
Извиняюсь тогда. Мало на расте кодил, забыл, что там для строк другой тип. а не как в сишке.

"Выпуск языка программирования Rust 1.76"
Отправлено morphe , 09-Фев-24 04:40 
Utf8 - юникод, символ (codepoint) там максимум 4 байта, и Rust тут следует стандарту

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


"Выпуск языка программирования Rust 1.76"
Отправлено test , 09-Фев-24 06:36 
Сколько будет занимать англ. символ в у8 в char в Rust ?

"Выпуск языка программирования Rust 1.76"
Отправлено morphe , 09-Фев-24 13:07 
> Сколько будет занимать англ. символ в у8 в char в Rust ?

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


"Выпуск языка программирования Rust 1.76"
Отправлено Аноним , 09-Фев-24 10:42 
UTF-8 переменной длины. При кодировании арабских символов доходит, что-то, до 6 байт.

"Выпуск языка программирования Rust 1.76"
Отправлено morphe , 09-Фев-24 16:43 
> UTF-8 переменной длины. При кодировании арабских символов доходит, что-то, до 6 байт.

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


"Выпуск языка программирования Rust 1.76"
Отправлено Юникод , 09-Фев-24 01:03 
Писатели на Си знают что такое битовые поля в структурах. А этот ваш юникод с эмоджи не нужен. Выдумывают каждый код новые пиктограммы чтобы, коммитет продолжали финансировать. Весь ваш юникод еще на версии 2 надо было закрывать.

"Выпуск языка программирования Rust 1.76"
Отправлено Аноним , 09-Фев-24 05:12 
Наоборот, Юникод нужен, а ты не нужен.

"Выпуск языка программирования Rust 1.76"
Отправлено Аноним , 09-Фев-24 10:48 
Пусть лучше будет Юникод, чем вот это вот CP866, KOI8-R, CP1251, ISO-8859-15, ДКОИ.

"Выпуск языка программирования Rust 1.76"
Отправлено Аноним , 09-Фев-24 11:32 
>>хранить значения от 0 до 256

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


"Выпуск языка программирования Rust 1.76"
Отправлено n00by , 09-Фев-24 14:09 
>>>хранить значения от 0 до 256
> сразу видно вы настоящий программист ))

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


"Выпуск языка программирования Rust 1.76"
Отправлено Аноним , 09-Фев-24 14:21 
Вот так и случается, благими намереньями потом за границы строк выходят)
И много ты наэкономишь на одном символе на каждую строку?

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


"Выпуск языка программирования Rust 1.76"
Отправлено n00by , 09-Фев-24 15:20 
Если со строкой делается что-то большее, чем передача аргументом в puts(), то она хранится в графе (дереве). Минимум два указателя - это 16 байт. Если заменить их на индексы массива, то получится экономия в 2 или даже 4 раза. В последнем случае размер окажется ограничен 64К узлами. Что бы это ограничение обойти, можно вместо символа хранить маркер, указывающий, что в следующей ячейке массива хранятся старшие 16 разрядов индексов. Таким образом можно упаковать и до однобайтных индексов, что даст экономию памяти в пределе до 8 раз (без учёта символа). Но настоящих программистов не осталось, потому на Rust двусвязный список unsafe, а браузеры выжирают гигабайты.

"Выпуск языка программирования Rust 1.76"
Отправлено Аноним , 09-Фев-24 17:44 
Энто те самые "настоящие программисты" которые наделали столько CVE что находят окаменелости 30 летней давности как в хоргʼе?
Ну и слава богу, что они потихоньку вымирают.
А то я насмотрелчя на любителей оптимизировать заранее, а потом бросать свой страшный, глючный и совершенно не поддерживаемый код.

"Выпуск языка программирования Rust 1.76"
Отправлено n00by , 10-Фев-24 15:36 
> Энто те самые "настоящие программисты" которые наделали столько CVE что находят окаменелости
> 30 летней давности как в хоргʼе?

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


"Выпуск языка программирования Rust 1.76"
Отправлено Аноним , 10-Фев-24 13:01 
> Если со строкой делается что-то большее, чем передача аргументом в puts(), то
> она хранится в графе (дереве). Минимум два указателя - это 16 байт. Если заменить
> их на индексы массива, то получится экономия в 2 или даже 4 раза.

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


"Выпуск языка программирования Rust 1.76"
Отправлено n00by , 10-Фев-24 15:42 
>> Если со строкой делается что-то большее, чем передача аргументом в puts(), то
>> она хранится в графе (дереве). Минимум два указателя - это 16 байт. Если заменить
>> их на индексы массива, то получится экономия в 2 или даже 4 раза.
> У оптимизатора компилера могут быть какие-то свои идеи на этот счет. В
> _современных_ архитектурах оно могет и адресацию относительно базы, вгружаемой 1 раз
> на эвон какой код, а вон там указатель сделан как адресация
> с офсетом от, и если указатель в сыром виде никто не
> юзает то и хрен с ним вообще.

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


"Выпуск языка программирования Rust 1.76"
Отправлено Cooler , 10-Фев-24 13:43 
А можно поподробнее, что это за стандарт хранения строк в дереве? Я конечно могу себе такое представить, но утверждать что это частое явление, мне кажется слишком сильно.

"Выпуск языка программирования Rust 1.76"
Отправлено n00by , 10-Фев-24 15:45 
Это не стандарт. Попробуйте выполнить курсовую работу из старого курса CS MIT - реализовать интерпретатор LISP. Словарь в каком виде хранить? Массив строк и искать там прямым перебором?

"Выпуск языка программирования Rust 1.76"
Отправлено Аноним , 12-Фев-24 12:42 
> Словарь в каком виде хранить? Массив строк и искать там прямым перебором?

Зачем массив? Список. Лисп же.

Но если хочется оптимизаций, то хеш-табличка. Если так не хочется хранить указатели на строки, то строки можно писать в массив чаров последовательно, и хранить индексы туда. Этим индексам можно будет половину бит урезать, а если этого мало, то можно как-нибудь ещё извратиться. Но тут момент какой: все эти извращения требуют данных с полей о том, как этот словарь используется. Скажем, если мы нарисуем распределение длин строк, то как оно будет выглядеть? Будет ли там много одно-/двух-/трёх- байтовых строк? Будет ли там много 16+ байтовых строк? Опять же, что важнее -- скорость проверки наличия строки в словаре, скорость чтения её оттуда или скорость добавления новой?

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


"Выпуск языка программирования Rust 1.76"
Отправлено n00by , 12-Фев-24 13:16 
>> Словарь в каком виде хранить? Массив строк и искать там прямым перебором?
> Зачем массив? Список. Лисп же.

Ну вот, уже появился простейший граф.

> Но если хочется оптимизаций, то хеш-табличка.

Это что, самому надо написать? Или std::map<> сойдёт? Так там под капотом может внезапно оказаться red_afroamerican_tree.

> Преждевременная оптимизация -- корень всех проблем, а раз так, то словарь в
> лиспе надо хранить в виде списка по-крайней мере до тех пор,
> пока операции над этим списком не начнут заметно тормозить интерпретатор.

Вопрос не как хранить, а как искать. O(n!) вряд ли сгодится в зачёт будущему магистру.


"Выпуск языка программирования Rust 1.76"
Отправлено Cooler , 12-Фев-24 14:10 
Соглашусь, что всё-таки способ хранения строк нужно выбирать исходя из требований задачи. Но std::map<> для хранения char-ов не слабый такой оверхэд по памяти получается.
И я не понял, что за алгоритм поиска даёт сложность O(n!) ???

"Выпуск языка программирования Rust 1.76"
Отправлено n00by , 12-Фев-24 14:25 
"Словарь" - это такая штука, где хранятся имена функций. Таких имён может быть например 10000. Интерпретатор читает в исходнике имя функции и ищет его в словаре - что бы далее найти её определение. Вот это всё должно не экономить память (преждевременная оптимизация), а работать так, что бы пользователь при запуске программы не уходил пить кофе. Какая там окажется сложность при переборе всех имён в массиве или списке - даже думать не хочу, потому взял с запасом. В std::map<> хранят не символы, а имена, это обычное решение "в лоб" для быстрого поиска, а внутри там не обязательно perfect hash, может быть и дерево.

"Выпуск языка программирования Rust 1.76"
Отправлено Cooler , 13-Фев-24 08:52 
Да, сорри. Изначально неправильно понял ваш пост, что строки хранятся в дереве. Я то подумал речь идёт о дереве, где каждый узел - это char. А каждая строка имеет свой уникальный путь в этом дереве. Поэтому был так удивлён 🙂

"Выпуск языка программирования Rust 1.76"
Отправлено n00by , 13-Фев-24 09:24 
Всё правильно поняли, каждый узел - это char. Если для курсовика годится хранить словарь в мапе, то в реальном мире желательно выводить в сообщении об ошибках подсказку при опечатках в имени функций. Так что вышеотписавшийся преждевременный оптимизатор, нашедший решение в гугле, пролетает с хеш-табличкой. Понадобится префиксное дерево.

"Выпуск языка программирования Rust 1.76"
Отправлено Пряник , 09-Фев-24 15:22 
Мне кажется это зависит от функции, в которую ты передашь свою мега-строку.

"Выпуск языка программирования Rust 1.76"
Отправлено n00by , 09-Фев-24 15:26 
Действительно, зависит. Программисты ведь пишут не функции, а команды типа git clone.

"Выпуск языка программирования Rust 1.76"
Отправлено _kp , 09-Фев-24 22:28 
>>Они там с ума посходили, хранить значения от 0 до 256 в 4х байтах?

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

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


"Выпуск языка программирования Rust 1.76"
Отправлено Аноним , 09-Фев-24 10:37 
Опять всё переписывать...

"Выпуск языка программирования Rust 1.76"
Отправлено Big Robert TheTables , 09-Фев-24 10:54 
rust так хочет в gamedev? или "ну хоть куда-то"

"Выпуск языка программирования Rust 1.76"
Отправлено Онанистмус , 09-Фев-24 14:34 
rust и gamedev на данный момент несовместимы т.к. у раста нет флага компилятора -fast-math. Все игры собираются с этим флагом в С++ и это позволяет ускорить математику в играх примерно в 5-10 раз.

"Выпуск языка программирования Rust 1.76"
Отправлено Вы забыли заполнить поле Name , 10-Фев-24 00:32 
> rust и gamedev на данный момент несовместимы т.к. у раста нет флага
> компилятора -fast-math. Все игры собираются с этим флагом в С++ и
> это позволяет ускорить математику в играх примерно в 5-10 раз.

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


"Выпуск языка программирования Rust 1.76"
Отправлено Аноним , 10-Фев-24 12:51 
> rust и gamedev на данный момент несовместимы т.к. у раста нет флага компилятора -fast-math.

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


"Выпуск языка программирования Rust 1.76"
Отправлено Аноним , 10-Фев-24 16:24 
А создатели батлфилдов про это в курсе?

"Выпуск языка программирования Rust 1.76"
Отправлено adolfus , 09-Фев-24 14:00 
Откуда можно скачать исходники?

"Выпуск языка программирования Rust 1.76"
Отправлено Аноним , 10-Фев-24 14:02 
Исходники чего?

"Выпуск языка программирования Rust 1.76"
Отправлено adolfus , 12-Фев-24 12:17 
> Исходники чего?

Языка программирования Rust 1.76


"Выпуск языка программирования Rust 1.76"
Отправлено Аноним , 12-Фев-24 17:44 
Ты удивишься, но с https://github.com/rust-lang/rust

"Выпуск языка программирования Rust 1.76"
Отправлено adolfus , 12-Фев-24 19:15 
> Ты удивишься, но с https://github.com/rust-lang/rust

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


"Выпуск языка программирования Rust 1.76"
Отправлено Пряник , 09-Фев-24 15:25 
Думал без генераторов плохо, а там уже async/await давно есть.

"Выпуск языка программирования Rust 1.76"
Отправлено Аноним , 10-Фев-24 12:55 
>  The sum of the `core::array::iter::IntoIter<i32, 3>` is 6.

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