The OpenNET Project / Index page

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



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

Оглавление

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

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


121. "Выпуск языка программирования Rust 1.76"  +/
Сообщение от Аноним (121), 10-Фев-24, 10:22 
> Ну-ка напомни размер int'а в си описан?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

151. "Выпуск языка программирования Rust 1.76"  +/
Сообщение от Аноним (151), 12-Фев-24, 16:41 
> Мы не говорим о том, про что там char/byte в C

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

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

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

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

126. "Выпуск языка программирования Rust 1.76"  +/
Сообщение от Cooler (??), 10-Фев-24, 13:38 
Только надо понимать, что один байт не всегда равен 8 бит.
Ответить | Правка | К родителю #121 | Наверх | Cообщить модератору

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

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

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

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

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

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

142. "Выпуск языка программирования Rust 1.76"  +1 +/
Сообщение от Аноним (121), 11-Фев-24, 10:00 
> а где сейчас оно не равно?

где угодно

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

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

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

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




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

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