OberonCore
https://forum.oberoncore.ru/

Об неочевидности C(++) и вумных компиляторах
https://forum.oberoncore.ru/viewtopic.php?f=27&t=1725
Страница 2 из 2

Автор:  Info21 [ Вторник, 21 Июль, 2009 08:30 ]
Заголовок сообщения:  Re: Об неочевидности C++ и вумных компиляторах

Vlad писал(а):
Для кривого исходного кода компилятор может генерить кривой код. Это явно оговорено в спецификации языка.
Нельзя ли процитировать определение кривости кода из спецификации языка.

И как это так: язык провозглашает свободу, а сам...

Автор:  Vlad [ Вторник, 21 Июль, 2009 09:33 ]
Заголовок сообщения:  Re: Об неочевидности C(++) и вумных компиляторах

GUEST писал(а):
Vlad писал(а):
Тоже самое - сначала разименование, а потом вычисление нулевости.
Оператор -> - это не "разименование", а доступ через указатель.


Поиграем в терминологию? :) Оператор -> подразумевает разыменование. Без него ну никак :)

GUEST писал(а):
Для компилятора может быть не важно значение которое имеет этот указатель и действий над его значением не будет. Поэтому и другой.


Ох... Приведите свой компилируемый пример.

Автор:  Vlad [ Вторник, 21 Июль, 2009 10:02 ]
Заголовок сообщения:  Re: Об неочевидности C++ и вумных компиляторах

Info21 писал(а):
Vlad писал(а):
Для кривого исходного кода компилятор может генерить кривой код. Это явно оговорено в спецификации языка.
Нельзя ли процитировать определение кривости кода из спецификации языка.


Цитата:
1.3.12 undefined behavior [defns.undefined]
behavior, such as might arise upon use of an erroneous program construct or erroneous data, for which this
International Standard imposes no requirements. Undefined behavior may also be expected when this
International Standard omits the description of any explicit definition of behavior. [Note: permissible undefined
behavior ranges from ignoring the situation completely with unpredictable results, to behaving during
translation or program execution in a documented manner characteristic of the environment (with or without
the issuance of a diagnostic message), to terminating a translation or execution (with the issuance of a
diagnostic message). Many erroneous program constructs do not engender undefined behavior; they are required to be diagnosed. ]


Info21 писал(а):
И как это так: язык провозглашает свободу, а сам...


Какую свободу? :) В плане спецификации языка у C++ гайки закручены покруче любого из оберонов :) Так сильно закручены, что язык теперь не развивается вообще.

Автор:  Сергей Оборотов [ Вторник, 21 Июль, 2009 10:43 ]
Заголовок сообщения:  Re: Об неочевидности C(++) и вумных компиляторах

Vlad писал(а):
GUEST писал(а):
Vlad писал(а):
Тоже самое - сначала разименование, а потом вычисление нулевости.
Оператор -> - это не "разименование", а доступ через указатель.


Поиграем в терминологию? :) Оператор -> подразумевает разыменование. Без него ну никак :)

Мне бы ваши заботы. Для действия разыменования есть вполне конкретный оператор *. Оператор -> же подразумевает лишь работу с именем.
Vlad писал(а):
GUEST писал(а):
Для компилятора может быть не важно значение которое имеет этот указатель и действий над его значением не будет. Поэтому и другой.


Ох... Приведите свой компилируемый пример.
Достаточно уже поговорил. То, что не понимаете, не верю. Возьмите любой свой с доступом к статическим членам какого-либо класса.

Автор:  Сергей Оборотов [ Вторник, 21 Июль, 2009 10:59 ]
Заголовок сообщения:  Re: Об неочевидности C++ и вумных компиляторах

Vlad писал(а):
Некорректные программы компилятор не волнуют. Причем корректность/некорректноть определяется стандартом языка, а не особенностями линуксовог ядра, в котором чтение по нулевому адресу может быть сколько угодно "корректным".
Никто и не требует чтобы волновали, но знать, что они некорректные ему тоже никто не запрещает.

Автор:  Vlad [ Вторник, 21 Июль, 2009 11:01 ]
Заголовок сообщения:  Re: Об неочевидности C(++) и вумных компиляторах

GUEST писал(а):
Vlad писал(а):
Поиграем в терминологию? :) Оператор -> подразумевает разыменование. Без него ну никак :)

Мне бы ваши заботы. Для действия разыменования есть вполне конкретный оператор *. Оператор -> же подразумевает лишь работу с именем.


Я бы не стал спорить, но тут как раз стандарт под рукой оказался, так что извините, но вы действительно заблуждаетесь :)
Цитата:
5.2.5.3
If E1 has the type “pointer to class X,” then the expression E1->E2 is converted to the equivalent form
(*(E1)).E2; the remainder of 5.2.5 will address only the first option (dot)).
...


GUEST писал(а):
Достаточно уже поговорил. То, что не понимаете, не верю. Возьмите любой свой с доступом к статическим членам какого-либо класса.


Гхм. Уже и статические члены откуда-то взялись... Нет уж, давайте ваш пример, или спорить не о чем.

Автор:  Vlad [ Вторник, 21 Июль, 2009 11:10 ]
Заголовок сообщения:  Re: Об неочевидности C++ и вумных компиляторах

GUEST писал(а):
Vlad писал(а):
Некорректные программы компилятор не волнуют. Причем корректность/некорректноть определяется стандартом языка, а не особенностями линуксовог ядра, в котором чтение по нулевому адресу может быть сколько угодно "корректным".
Никто и не требует чтобы волновали, но знать, что они некорректные ему тоже никто не запрещает.


Так откуда ж ему знать, что вы там по нулевому поинтеру фигачите? :) Ну фигачите, значит считаете себя умней его. Тогда и не обижайтесь, что он вас не понимает :) Потому что он глупый и не знает, что такое вообще может быть - чтение по нулевому указателю, не запрограммировали его знать о такой ситуации, потому что такой ситуации нет в языке C++ :)

Автор:  Info21 [ Вторник, 21 Июль, 2009 19:06 ]
Заголовок сообщения:  Re: Об неочевидности C(++) и вумных компиляторах

Короче, фтопку. Как будто без этого компоста забот нет...
Вот блесну -- узкую вертушку с малым углом отклонения найти не могу, а тут...

Автор:  Валерий Лаптев [ Среда, 22 Июль, 2009 10:34 ]
Заголовок сообщения:  Re: Об неочевидности C(++) и вумных компиляторах

GUEST писал(а):
Vlad писал(а):
Тоже самое - сначала разименование, а потом вычисление нулевости.
Оператор -> - это не "разименование", а доступ через указатель.

Вообще-то это именно разыменование через указатель.

Автор:  Сергей Оборотов [ Четверг, 23 Июль, 2009 11:44 ]
Заголовок сообщения:  Re: Об неочевидности C++ и вумных компиляторах

Vlad писал(а):
Так откуда ж ему знать, что вы там по нулевому поинтеру фигачите? ..., не запрограммировали его знать о такой ситуации, потому что такой ситуации нет в языке C++ :)
Мне ему что-ли подсказывать? Да это и не предусмотрено.
Валерий Лаптев писал(а):
Вообще-то это именно разыменование через указатель.
Отнюдь.
GUEST писал(а):
Оператор -> же подразумевает лишь работу с именем.
То, что в некоторых случаях (каких спросите у Влада) работа с ним сводится к разыменованию дела не отменяет. Конец.

Автор:  Валерий Лаптев [ Пятница, 24 Июль, 2009 10:03 ]
Заголовок сообщения:  Re: Об неочевидности C++ и вумных компиляторах

GUEST писал(а):
Валерий Лаптев писал(а):
Вообще-то это именно разыменование через указатель.
Отнюдь.

Тогда найдите библию Страуструпа и посмотрите там.

Автор:  Geniepro [ Пятница, 24 Июль, 2009 12:59 ]
Заголовок сообщения:  Re: Об неочевидности C++ и вумных компиляторах

Как уже тут упоминалось выше, в описании С++ от Страуструпа сказано, что obj->f является сахаром для (*obj).f, не более того...

Автор:  Сергей Оборотов [ Суббота, 25 Июль, 2009 21:04 ]
Заголовок сообщения:  Re: Об неочевидности C++ и вумных компиляторах

Валерий Лаптев писал(а):
Тогда найдите библию Страуструпа и посмотрите там.

Geniepro писал(а):
Как уже тут упоминалось выше, в описании С++ от Страуструпа сказано, что obj->f является сахаром для (*obj).f, не более того...
Как уже здесь говорил, для квалификации работы -> с именем как разыменования нет достаточных оснований. Если у Страуструпа такие основания есть готов выслушать и его тоже.

Автор:  Vlad [ Суббота, 25 Июль, 2009 21:23 ]
Заголовок сообщения:  Re: Об неочевидности C++ и вумных компиляторах

GUEST писал(а):
Как уже здесь говорил, для классификации работы -> с именем как разыменования нет достаточных оснований. Если у Страуструпа такие основания есть готов выслушать и его тоже.


Внесите свое предложение на рассмотрение комитета :) Хотя в новый стандарт вы уже опоздали, но вдруг будет следующий? Хотя я бы голосовал против таких вольностей, как работа с именем через "стрелочку" для нулевых указателей. Даже если это статические мемберы (вы на это все пытаетесь намекнуть или чего?). Потому что, когда я вижу "p->member" намного проще читать код с предположением, что в этом месте указатель не может быть нулевым по определению, чем с оглядкой на всякие частности. А для работы с именами внутри класса есть вполне конкретная конструкция: X::member.

Автор:  Сергей Оборотов [ Суббота, 25 Июль, 2009 23:33 ]
Заголовок сообщения:  Re: Об неочевидности C++ и вумных компиляторах

Vlad писал(а):
Внесите свое предложение на рассмотрение комитета :)
Это Вы о чем? Какое предложение в стандарт мне внести?
Vlad писал(а):
Хотя в новый стандарт вы уже опоздали, но вдруг будет следующий? Хотя я бы голосовал против таких вольностей, как работа с именем через "стрелочку" для нулевых указателей. Потому что.
Не представляю своего в нем участия. Теперь уже действительно конец :).

Автор:  Vlad [ Воскресенье, 26 Июль, 2009 01:45 ]
Заголовок сообщения:  Re: Об неочевидности C++ и вумных компиляторах

GUEST писал(а):
Это Вы о чем? Какое предложение в стандарт мне внести?


О том, что "стрелочка" это не то же самое, что "звездочка". И далее объяснить в чем различие. Лично я так и не понял чего вы хотите.

Страница 2 из 2 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/