The OpenNET Project / Index page

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



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Выпуск языка программирования Rust 1.76, opennews (?), 08-Фев-24, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


19. "Выпуск языка программирования Rust 1.76"  –5 +/
Сообщение от Аноним (24), 09-Фев-24, 00:50 
>гарантирована совместимость на уровне ABI типов "char" и "u32", которые имеют идентичный размер и выравнивание

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

Ответить | Правка | Наверх | Cообщить модератору

21. "Выпуск языка программирования Rust 1.76"  +7 +/
Сообщение от чатжпт (?), 09-Фев-24, 00:58 
шел 2024 год, писатели на си всё еще не узнали про юникод
Ответить | Правка | Наверх | Cообщить модератору

23. "Выпуск языка программирования Rust 1.76"  +4 +/
Сообщение от Аноним (24), 09-Фев-24, 01:01 
Писатели на си используют строго UTF-8.  Даже петицию создали https://utf8everywhere.org/ .
Ответить | Правка | Наверх | Cообщить модератору

26. "Выпуск языка программирования Rust 1.76"  +4 +/
Сообщение от Аноним (26), 09-Фев-24, 01:05 
Так и в расте в строках используется UTF-8.

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

Ответить | Правка | Наверх | Cообщить модератору

41. "Выпуск языка программирования Rust 1.76"  –1 +/
Сообщение от Аноним (42), 09-Фев-24, 02:16 
Извиняюсь тогда. Мало на расте кодил, забыл, что там для строк другой тип. а не как в сишке.
Ответить | Правка | Наверх | Cообщить модератору

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

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

Ответить | Правка | К родителю #23 | Наверх | Cообщить модератору

74. "Выпуск языка программирования Rust 1.76"  –2 +/
Сообщение от test (??), 09-Фев-24, 06:36 
Сколько будет занимать англ. символ в у8 в char в Rust ?
Ответить | Правка | Наверх | Cообщить модератору

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

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

Ответить | Правка | Наверх | Cообщить модератору

85. "Выпуск языка программирования Rust 1.76"  +/
Сообщение от Аноним (89), 09-Фев-24, 10:42 
UTF-8 переменной длины. При кодировании арабских символов доходит, что-то, до 6 байт.
Ответить | Правка | К родителю #68 | Наверх | Cообщить модератору

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

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

Ответить | Правка | Наверх | Cообщить модератору

25. "Выпуск языка программирования Rust 1.76"  –5 +/
Сообщение от Юникод (?), 09-Фев-24, 01:03 
Писатели на Си знают что такое битовые поля в структурах. А этот ваш юникод с эмоджи не нужен. Выдумывают каждый код новые пиктограммы чтобы, коммитет продолжали финансировать. Весь ваш юникод еще на версии 2 надо было закрывать.
Ответить | Правка | К родителю #21 | Наверх | Cообщить модератору

70. Скрыто модератором  +6 +/
Сообщение от Аноним (-), 09-Фев-24, 05:12 
Ответить | Правка | Наверх | Cообщить модератору

87. "Выпуск языка программирования Rust 1.76"  +7 +/
Сообщение от Аноним (89), 09-Фев-24, 10:48 
Пусть лучше будет Юникод, чем вот это вот CP866, KOI8-R, CP1251, ISO-8859-15, ДКОИ.
Ответить | Правка | К родителю #25 | Наверх | Cообщить модератору

90. "Выпуск языка программирования Rust 1.76"  +4 +/
Сообщение от Аноним (90), 09-Фев-24, 11:32 
>>хранить значения от 0 до 256

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

Ответить | Правка | К родителю #19 | Наверх | Cообщить модератору

101. "Выпуск языка программирования Rust 1.76"  +/
Сообщение от n00by (ok), 09-Фев-24, 14:09 
>>>хранить значения от 0 до 256
> сразу видно вы настоящий программист ))

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

Ответить | Правка | Наверх | Cообщить модератору

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

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

Ответить | Правка | Наверх | Cообщить модератору

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

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

131. "Выпуск языка программирования Rust 1.76"  –1 +/
Сообщение от n00by (ok), 10-Фев-24, 15:36 
> Энто те самые "настоящие программисты" которые наделали столько CVE что находят окаменелости
> 30 летней давности как в хоргʼе?

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

Ответить | Правка | Наверх | Cообщить модератору

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

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

Ответить | Правка | К родителю #106 | Наверх | Cообщить модератору

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

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

Ответить | Правка | Наверх | Cообщить модератору

127. "Выпуск языка программирования Rust 1.76"  +/
Сообщение от Cooler (??), 10-Фев-24, 13:43 
А можно поподробнее, что это за стандарт хранения строк в дереве? Я конечно могу себе такое представить, но утверждать что это частое явление, мне кажется слишком сильно.
Ответить | Правка | К родителю #106 | Наверх | Cообщить модератору

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

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

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

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

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

Ответить | Правка | Наверх | Cообщить модератору

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

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

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

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

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

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

Ответить | Правка | Наверх | Cообщить модератору

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

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

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

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

107. "Выпуск языка программирования Rust 1.76"  +/
Сообщение от Пряник (?), 09-Фев-24, 15:22 
Мне кажется это зависит от функции, в которую ты передашь свою мега-строку.
Ответить | Правка | К родителю #101 | Наверх | Cообщить модератору

109. "Выпуск языка программирования Rust 1.76"  –1 +/
Сообщение от n00by (ok), 09-Фев-24, 15:26 
Действительно, зависит. Программисты ведь пишут не функции, а команды типа git clone.
Ответить | Правка | Наверх | Cообщить модератору

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

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

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

Ответить | Правка | К родителю #19 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




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

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