Здравствуйте, rg45, Вы писали:
ЕМ>>Оно "кому надо" и так интересно.
R>Ну и кому, напрмер?
Тем, кто желает определиться, стоит им заставлять себя полюбить шаблонную магию с целью "овладения истинным C++", или нет. При наличии высказываний как за, так и против, у них есть возможность выбирать.
R>Речь шла о "хоть каких-нибудь" результатах. О "профессионально" речи не шло и близко.
Ну вот я вообще никогда не выращивал никаких фруктов, овощей или ягод — ни профессионально, ни по-любительски. По-Вашему, у меня нет "морального права" судить об их качестве и вкусе. Но, слава богу, для этого мне не требуется чьей-то санкции, да и людей, с которыми мы совпадаем в оценках, вполне достаточно.
R>Ну, именно так и говорят все лисы, которые не дотянулись до винограда.
Я догадываюсь, что в этом месте мне должно стать стыдно, и должно появиться желание тянуться. Но не становится. Возможно, потому, что лисы не едят винограда, у них другой рацион.
Здравствуйте, Евгений Музыченко, Вы писали:
ЕМ>Тем, кто желает определиться, стоит им заставлять себя полюбить шаблонную магию с целью "овладения истинным C++", или нет. При наличии высказываний как за, так и против, у них есть возможность выбирать.
То есть, примеров нет? Понял.
ЕМ>Ну вот я вообще никогда не выращивал никаких фруктов, овощей или ягод — ни профессионально, ни по-любительски. По-Вашему, у меня нет "морального права" судить об их качестве и вкусе. Но, слава богу, для этого мне не требуется чьей-то санкции, да и людей, с которыми мы совпадаем в оценках, вполне достаточно.
А я разве где-то пытался ограничить твои права? Я лишь выразил простую мысль, что, если ты никогда не выращивал никаких фруктов, овощей и ягод, то твое мнение в этой области вряд ли сможет заинтересовать людей, которые выращивали. Мне не очень понятно, на что ты надеешься, делая столь категоричные утверждения.
ЕМ>Я догадываюсь, что в этом месте мне должно стать стыдно, и должно появиться желание тянуться. Но не становится. Возможно, потому, что лисы не едят винограда, у них другой рацион.
Ну, то, что ты начал думать в эту сторону — это уже хорошо.
Здравствуйте, rg45, Вы писали:
R>То есть, примеров нет?
Так их и не должно быть. Эти высказывания не адресованы конкретным людям, их задача — просто лежать рядом с теми высказываниями, против которых они направлены, дабы абстрактный читатель имел возможность ознакомиться с разными мнениями, а не только с официально одобренными.
R>если ты никогда не выращивал никаких фруктов, овощей и ягод, то твое мнение в этой области вряд ли сможет заинтересовать людей, которые выращивали.
В данном случае речь прежде всего о потреблении. Даже если оно не заинтересует выращивателей, то может как-то повлиять на предпочтения потребителей.
Если что, моей квалификации вполне достаточно для создания и нового языка, и компилятора с него. Но рожать новый язык "чиста по приколу" не вижу смысла, а разработку профессиональной системы программирования мне одному в разумные сроки не потянуть.
R>Мне не очень понятно, на что ты надеешься, делая столь категоричные утверждения.
Здравствуйте, Евгений Музыченко, Вы писали:
R>>То есть, примеров нет?
ЕМ>Так их и не должно быть.
Ну, пока фактом является только то, что их нет. Все остальное — спорные утверждения.
ЕМ>В данном случае речь прежде всего о потреблении. Даже если оно не заинтересует выращивателей, то может как-то повлиять на предпочтения потребителей.
Нет, подменить тезис у тебя не получится. Если о потреблении, то ты пытаешься что-то вкручивать о вкусе устриц тем, кто их пробовал.
ЕМ>Если что, моей квалификации вполне достаточно для создания и нового языка, и компилятора с него.
Об этом еще кто-нибудь знает, кроме тебя?
Можно себе представить, что там за язык. Один язык не осилил, зато написал на нем свой язык и осилил
Это точно как в том анекдоте: товарищ прапорщик так задолбался собирать кубик Рубика, что изобрел свой — одноцветный и монолитный.
R>>Мне не очень понятно, на что ты надеешься, делая столь категоричные утверждения. ЕМ>Только на то, что они дадут кому-то пищу для ума.
Ну, это достаточно самонадеянно с твоей стороны, по-моему. Ну, разве что, по схеме "послушай 'эксперта' и сделай наоборот".
On Jun 15, 2024, 2:09 PM, rg45 <49596@users.rsdn.org> wrote:
R>- Указатель — объект, а ссылка — нет;
Если под объектом понимается "нечто в памяти", то утверждение неверно:
#include <iostream>
struct A {
int & a;
int & b;
int & c;
};
struct B {
int * a;
int * b;
int * c;
};
int main()
{
int a;
int b;
int c;
A aa = {a, b, c};
std::cout<< "A: " << sizeof(A);
std::cout<< "aa: " << sizeof(aa);
B bb = {&a, &b, &c};
std::cout<< "B: " << sizeof(B);
std::cout<< "bb: " << sizeof(bb);
return 0;
}
#include <stdio.h>
static char b = '1';
int main()
{
char& a = b;
char* c = &b;
printf("0x%x, 0x%x, 0x%x", &a, c, &b);
return 0;
}
b:
.byte 49
.LC0:
.string "0x%x, 0x%x, 0x%x"
main:
push rbp
mov rbp, rsp
sub rsp, 16
mov QWORD PTR [rbp-8], OFFSET FLAT:b
mov QWORD PTR [rbp-16], OFFSET FLAT:b
mov rdx, QWORD PTR [rbp-16] ; как видите здесь другой адрес
mov rax, QWORD PTR [rbp-8] ; и снова другой адрес (таким образом утверждение что у ссылки нет адреса - ложно), видите это? Мы адресуемся по другому адресу, нет никакого "алиаса"
mov ecx, OFFSET FLAT:b
mov rsi, rax
mov edi, OFFSET FLAT:.LC0
mov eax, 0
call printf
mov eax, 0
leave
ret
⸻ ❧
“Nothing is impossible. The word itself says ‘I’m possible!'” ― Audrey Hepburn
Ты путаешь, операция взятия адреса над ссылкой возвращает совсем-совсем не адрес ссылки. В С++ даже не существует такого типа данных, которым можно было бы представить адрес ссылки.
[ Note: [basic.types] and the subclauses thereof impose requirements on implementations regarding the representation of types. There are two kinds of types: fundamental types and compound types. Types describe objects, references, or functions. — end note]
Неотъемлемым свойсвом всех типов объектов является возможность образования производных типов — указателей на объеты и ссылок на объекты. Но нет в языке С++ таких типов данных как указатели на ссылки и ссылки на ссылки. Потому что ссылки — не объекты.
Нестатическая член-ссылка даже не является подобъектом родительского объекта:
[Note 2 : A non-static data member of non-reference type is a member subobject of a class object (6.7.2). —end note]
А под "нечто в памяти" подпадает много чего — функции, виртуальные таблицы и указатели на них, паддинг между членами классов. Не нужно думать, что все, что вам удалось разглядеть в дампе — это все объекты.
On Jun 16, 2024, 8:04 PM, rg45 <49596@users.rsdn.org> wrote:
R>"Если"? А если не понимается?
Тогда конкретизируй что ты имеешь ввиду под термином "объект" в контексте "Указатель — объект, а ссылка — нет"?
R>Ты путаешь, операция взятия адреса над ссылкой возвращает совсем-совсем не адрес ссылки.
Подожди, давай так далеко не уходить, нарекания/замечания к опубликованному коду у тебя есть? Ты видишь что адреса отличаются у статической переменной, у указателя и ссылки? Таким образом твое второе утверждение "У указателя есть адрес, а у ссылки нет" — ложно? А "путаешь-не путаешь", я думаю меня убедит контр-примером кода, где четко будет видно что "у ссылки нет адреса". Я помню, что мне кто-то даже говорил, что "на С++ можно сделать все" и когда говорят что что-то нельзя или чего-то нет — это выглядит, как минимум, громко и требует доказательств.
⸻ ❧
“Success usually comes to those who are too busy looking for it.” — Henry David Thoreau
.
R>>Ты путаешь, операция взятия адреса над ссылкой возвращает совсем-совсем не адрес ссылки.
R>Подожди, давай так далеко не уходить, нарекания/замечания к опубликованному коду у тебя есть?
Есть — в этом коде нет обещанного — адреса ссылки. Повторюсь, операция взятия адреса, выполненная над ссылкой, не возвращает адрес ссылки. Более того, в С++ даже нет типа данных, которым можно было бы представить адрес ссылки.
On Jun 16, 2024, 8:40 PM, rg45 <49596@users.rsdn.org> wrote:
R>
R>Types describe objects, references, or functions. — end note]
Так а что это доказывает, что типы описывают объекты или что? Давай не будем уходит к типам, потому что это вторично, пока не дано определение что есть объект? Так вот возвращаясь к ранее написанному, все-таки определение что "объект — это нечто в памяти" тебя не устраивает? Или что?
⸻ ❧
“Happiness is not something readymade. It comes from your own actions.” — Dalai Lama
Извиняюсь, что встреваю в разговор, но ты смотрел, что выводит твой код?
Program returned: 0
0x404018, 0x404018, 0x404018
"&a" возвращает, как и ожидается, ни что иное, как адрес объекта, на который ссылается ссылка.
В зависимости от контекста ссылка может работать как ненулевой указатель, поэтому в первом примере sizeof(aa) == sizeof(bb).
А может работать как псевдоним на уровне исходного кода, это демонстрирует второй пример.
Об этом выше уже упоминали.
_____________________
С уважением,
Stanislav V. Zudin
On Jun 16, 2024, 8:51 PM, rg45 <49596@users.rsdn.org> wrote:
R>Есть — в этом коде нет обещанного — адреса ссылки.
То есть ты не видишь смещения в 8 байт относительно регистра стека? Таким образом, что на хранение ссылки "кем-то" было выделено дополнительная память на стеке. Или я не правильно читаю ассемблерный код? Если бы было верно утверждение "указателя есть адрес, а у ссылки нет", то не было бы никакого смещения, а был бы адрес переменной без смещения? Выходит адрес у ссылки есть, и он имеет размер.
Хорошо, вот если взять мой ассемблерный код, и попробовать его "реверснуть" ты можешь сказать, что является ссылкой и что является указателем первоночально ([rbp-8] или [rbp-16])?
R>>Types describe objects, references, or functions. — end note]
R>Так а что это доказывает, что типы описывают объекты или что?
Это определяет ссылки, как отдельные от объетов типы данных — так же как и функции.
R>Давай не будем уходит к типам, потому что это вторично,
Да вот нет, говоря о принадлежности (или непринадлежности) ссылок к объектам, мы говорим как раз о типах данных. И этого определения достаточно, чтобы констатировать, что ссылки — это отдельные от объектов типы данных. Я там приводил и другие доводы, но ты предпочел их отбросить, почему-то.
R>пока не дано определение что есть объект?
Так а как ты строишь свои рассуждения, не имея определения объекта?
R>Так вот возвращаясь к ранее написанному, все-таки определение что "объект — это нечто в памяти" тебя не устраивает? Или что?
Ты строишь свои рассуждения на тезисе, что любое нечто в памяти — это объект. А с этим я согласиться не могу, конечно же.
А под "нечто в памяти" подпадает много чего — функции, виртуальные таблицы и указатели на них, паддинг между членами классов. Не нужно думать, что все, что вам удалось разглядеть в дампе — это все объекты.
On Jun 16, 2024, 9:02 PM, Stanislav V. Zudin <4579@users.rsdn.org> wrote:
SVZ>Извиняюсь, что встреваю в разговор, но ты смотрел, что выводит твой код? SVZ>
Program returned: 0
SVZ>0x404018, 0x404018, 0x404018
Этот код именно это и должен выводить.
SVZ>«&a» возвращает, как и ожидается, ни что иное, как адрес объекта, на который ссылается ссылка.
Да. Именно это и было целью, однако там дальше есть ассемблерный код, который несмотря на идентичность вывода, адресуется по разным адресам. Что «несколько» противоречит утверждению, что у ссылки нет адреса в памяти. Я утверждаю что есть, ассемблер утверждает что есть. Как же быть?
⸻ ❧
“Folks are usually about as happy as they make up their minds to be.” — Abraham Lincoln
Здравствуйте, r0nd, Вы писали:
R>Да. Именно это и было целью, однако там дальше есть ассемблерный код, который несмотря на идентичность вывода, адресуется по разным адресам. Что «несколько» противоречит утверждению, что у ссылки нет адреса в памяти. Я утверждаю что есть, ассемблер утверждает что есть. Как же быть?
Да ты можешь приводить хоть километры ассемблерного кода. Но нет в С++ таких типов данных, как ссылка на ссылку и указатель на ссылку. И член-ссылка не является подобъектом объекта. Все, этого достаточно, чтобы утверждать, что ссылка — не объект.
Здравствуйте, r0nd, Вы писали:
R>Что «несколько» противоречит утверждению, что у ссылки нет адреса в памяти. Я утверждаю что есть, ассемблер утверждает что есть.
А кто пытался убедить Вас в том, что у типа данных "ссылка" якобы нет адреса в памяти? Вам говорят лишь то, что ссылка не является объектом в терминологии C++, и в языке нет штатного способа получить адрес в памяти, где хранится содержимое ссылки.
Здравствуйте, r0nd, Вы писали:
R>Этот код именно это и должен выводить.
SVZ>>«&a» возвращает, как и ожидается, ни что иное, как адрес объекта, на который ссылается ссылка.
R>Да. Именно это и было целью, однако там дальше есть ассемблерный код, который несмотря на идентичность вывода, адресуется по разным адресам. Что «несколько» противоречит утверждению, что у ссылки нет адреса в памяти. Я утверждаю что есть, ассемблер утверждает что есть. Как же быть?
The following entities are not objects: value, reference, function, enumerator, type, non-static class member, template, class or function template specialization, namespace, parameter pack, and this.
Не стандарт, конечно же, но как-то понадежнее, чем твое "нечто в памяти"
On Jun 16, 2024, 9:15 PM, rg45 <49596@users.rsdn.org> wrote:
R>Так а как ты строишь свои рассуждения, не имея определения объекта?
Так для того, чтоб что-то утверждать наверняка мы должны сойтись в терминах? Я свое определение что есть объект дал. Что ты называешь объектом?
R>>Так вот возвращаясь к ранее написанному, все-таки определение что «объект — это нечто в памяти» тебя не устраивает? Или что?
R>Ты строишь свои рассуждения на тезисе, что любое нечто в памяти — это объект. А с этим я согласиться не могу, конечно же.
И я не согласен с такой интерпретацией. Не хочу тебя ловить на перекручивании фактов, однако все-таки я придерживаюсь определения что «объект — это нечто в памяти», я не утверждал что «любое нечто в памяти — это объект». Тем не менее, возвращаясь к ранее изложеному, что ты называешь объектом?
⸻ ❧
“If you are working on something that you really care about, you don’t have to be pushed. The vision pulls you.” — Steve Jobs