Re[5]: Операторы точка и стрелка
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 07.02.22 03:04
Оценка:
Здравствуйте, Shtole, Вы писали:


S>Так ведь с тем же успехом «Боб» мог использовать имя поля из одной структуры для указания оффсета в другой.


Ну, хотя такая возможность и была, дядя Боб из соседнего кубикла был бы полным чудаком, если бы этим пользовался. Я так понимаю, это таки была не фича языка, а недоработка. А чтобы не путаться,
как уже выше кто-то писал, поля структур прекфиксили:
  Скрытый текст
struct stat {
    dev_t         st_dev;      /* устройство */
    ino_t         st_ino;      /* inode */
    mode_t        st_mode;     /* режим доступа */
    nlink_t       st_nlink;    /* количество жестких ссылок */
    uid_t         st_uid;      /* идентификатор пользователя-владельца */
    gid_t         st_gid;      /* идентификатор группы-владельца */
    dev_t         st_rdev;     /* тип устройства */
                               /* (если это устройство) */
    off_t         st_size;     /* общий размер в байтах */
    blksize_t     st_blksize;  /* размер блока ввода-вывода */
                               /* в файловой системе */
    blkcnt_t      st_blocks;   /* количество выделенных блоков */
    time_t        st_atime;    /* время последнего доступа */
    time_t        st_mtime;    /* время последней модификации */
    time_t        st_ctime;    /* время последнего изменения */
};
Маньяк Робокряк колесит по городу
Re[6]: Операторы точка и стрелка
От: Shtole  
Дата: 07.02.22 03:28
Оценка:
Здравствуйте, Marty, Вы писали:

S>>Так ведь с тем же успехом «Боб» мог использовать имя поля из одной структуры для указания оффсета в другой.

M>Ну, хотя такая возможность и была, дядя Боб из соседнего кубикла был бы полным чудаком, если бы этим пользовался.

Иными словами: есть объективно хорошие фичи, а есть не очень, а история тут не при чём. Что я сразу и написал.
Do you want to develop an app?
Re[7]: Операторы точка и стрелка
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 07.02.22 03:42
Оценка: :)
Здравствуйте, Shtole, Вы писали:

S>>>Так ведь с тем же успехом «Боб» мог использовать имя поля из одной структуры для указания оффсета в другой.

M>>Ну, хотя такая возможность и была, дядя Боб из соседнего кубикла был бы полным чудаком, если бы этим пользовался.

S>Иными словами: есть объективно хорошие фичи, а есть не очень, а история тут не при чём. Что я сразу и написал.


Я думаю, история тут при чем. Если бы дядя Боб был чудаком, то и дерьмовая фича бы осталась
Маньяк Робокряк колесит по городу
Re[6]: Операторы точка и стрелка
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 07.02.22 07:01
Оценка:
Здравствуйте, Андрей Тарасевич, Вы писали:

АТ>Вполне возможно что "ненужный" оператор `->` сохранился в языке просто вследствие своего удобства. Это — постфиксный оператор, т.е. в отличие от префиксного `*` его применение не требует дополнительных скобок. Это — уже хорошая причина для его сохранения.


Так и "точка" — постфиксный оператор. Правило "если это указатель, точка адресует члены структурного типа по этому указателю" ничем бы не испортило язык, реализовалось бы банально и устранило бы различие двух операторов. Изначальный вопрос именно в этом.

Поэтому, если было какое-то удобство, которое привело к его сохранению, то это, скорее всего, удобство понимания отличия непосредственного значения в переменной от указателя — для человека.
Вот было ли это удобство и в чём точно оно заключалось, или просто не совершили объединение — исходный вопрос.
The God is real, unless declared integer.
Re[3]: Операторы точка и стрелка
От: flаt  
Дата: 07.02.22 09:54
Оценка:
Здравствуйте, netch80, Вы писали:



N>Прикольное описание, спасибо. Про глобальность пространства имён композитов я знал (хотя вряд ли большинство коллег в курсе), а вот про такую дикую семантику — нет.


И всё же её остатки ещё существуют до сих пор в виде `0[array]`.
Re[7]: Операторы точка и стрелка
От: andrey.desman  
Дата: 11.02.22 04:19
Оценка:
Здравствуйте, netch80, Вы писали:

N>Поэтому, если было какое-то удобство, которое привело к его сохранению, то это, скорее всего, удобство понимания отличия непосредственного значения в переменной от указателя — для человека.

N>Вот было ли это удобство и в чём точно оно заключалось, или просто не совершили объединение — исходный вопрос.

В Си нет ссылок, поэтому в нем такие записи однозначно говорят о том, что происходит.
С точками понятно, что имеем просто доступ к какому-то подчлену структуры:
a.b.c.d; // == *(&a + offset)


А со стрелками понятно, что там последовательность косвенных обращений, что дороже:
a->b->c->d; // == *(*(*(a + offset1) + offset2) + offset3)
Отредактировано 11.02.2022 4:20 andrey.desman . Предыдущая версия .
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.