У нас как-то контекст съехал. Человек в начале ветки сказал, что нулевой адрес в PDP-11 (уже переплавленной на золото, кстати) мог использоваться для адресации. Я на это ответил, что концепции нулевого указателя и нулевого адреса - различны с точки зрения стандарта (т.е. на практике это означает, что если в какой-то реализации нулевой адрес использовать для адресации можно, то для представленяи нулевого указателя будет выбрано какое-то другое значение - не ноль, и такие примеры были). Далее вы попытались меня поправить, приведя в пример описание нулевого указателя из стандарта. На что я опять же вам ответил, что приведенная вами в пример запись относится к форме записи такого указателя в исходном коде, а не к его битовому представлению. А потом контекст зачем-то поехал в сторону "а покажи-как мне реализацию где сейчас не так". Но это уже out of topic. Во-первых потому, что речь изначально шла про древнюю технику, а во-вторых потому, что отсутствие подобных современных машин не опровергает ничего из вышесказанного.
И да, я тут своего ничего не говорю. То, что я сказал, и то, что написано в FAQ - это просто пересказ человеческим языком того, что написано в стандарте.
То, что " NULL это ((void*)0) по стандарту" никак не отменяет того, о чем я сказал. Этот ноль в исходнике не означает нули в битовом представлении. Даже если технически оказывается так, что репрезентация этого нуля в битах тоже нули, семантически - это разные нули. Литерал "ноль", как и nullptr, как и NULL - это лишь удобные записи для обозначения нулевого указателя, а конкретные биты компилятор сгенерит сам, вы напрямую не можете никак не это повлиять.
Т.е. Вы на проекте под Astra Linux 1.7.x используете компилятор GCC 8.3.0, который использует урезанную версию C++20? Тогда, наверное, Вам хорошо известно, что в этой версии компилятора функции C++20 ограничены.
Думаю он просто таскает более новый рантайм от свежего GCC вместе с проектом. Так легко можно добиться двоичной переносимости собранного С++ кода. Я и сам так когда-то делал.
Может быть я просто легче к этому отношусь. У меня всегда было много таких знакомых. Без проблем признавал для себя, что они умнее и им "можно" поэтому быть такими. Это честная сделка, потому что обычно у таких людей много чему можно научиться.
Справедливости ради, у автора статьи неплохой слог, его текст читается так же легко, как льется вода. Без начитанности такого добиться будет непросто. Это вообще первая статья за последнее время, которую я прочитал целиком и с большим удовольствием от подачи. Большинство статей на хабре ужасны с этой точки зрения, косноязычны и просторечны. Не берусь судить об экспертности изложенного, т.к. сам не являюсь в этих делах специалистом. Поэтому может быть ваша картинка тут и подходит в этом смысле, но начитанность у автора совершенно точно присутствует. В этом, как мне кажется, он не лукавит.
Можно, но это просто будет означать совсем другое. char* x = 0; даст указатель с null pointer value, а char* x = y - y; даст указатель с битовым значением, равным нулю. null указатель и нулевое битовое представление адреса - это в общем случае разные вещи. https://c-faq.com/null/machnon0.html
Главное, чтобы вы не заменяли профессионализм на ритуалы. Все эти приставки ТруЪ - это фанатизм в худшем его проявлении. Все эти ТруЪ стремятся поделить мир на белое и чёрное, на труъ и не труъ. Но не бывает хороших или плохих инструментов, бывают подходящие или неподходящие.
Бесполезное дело непрограммисту это все описывать. Все равно превратно будет понято. А чтобы это понять, нужно хотя бы два разных проекта целиком написать. Некоторым людям вообще лет 20 нужно пробыть в разработке, чтобы начать хоть что-то понимать. Автор наверняка меньше работает и его пост поэтому - это сплошной максимализм и лозунги.
Автор не прав по форме. Конкретные аргументы выглядят верными, но в целом это просто словесный эквилибризм. Автор выбрал позицию-оппонента "ООП - серебряная пуля" и остервенело её опровергает, резюмируя, что раз это не пуля, значит это скам. А на деле просто берется тот инструмент, который подходит к задаче (сюда относится и знание конкретных инструментов берущими). Все разнообразные определения, подходы и методики, описываемые в разных источниках, нужны лишь чтобы помочь сделать этот выбор более осознанно.
Но это же дореволюционный русский, а не старославянский :)
Да, согласен.
Естественно. Нулевой указатель - это абстракция компилятора, я об этом еще вчера сказал.
У нас как-то контекст съехал. Человек в начале ветки сказал, что нулевой адрес в PDP-11 (уже переплавленной на золото, кстати) мог использоваться для адресации. Я на это ответил, что концепции нулевого указателя и нулевого адреса - различны с точки зрения стандарта (т.е. на практике это означает, что если в какой-то реализации нулевой адрес использовать для адресации можно, то для представленяи нулевого указателя будет выбрано какое-то другое значение - не ноль, и такие примеры были). Далее вы попытались меня поправить, приведя в пример описание нулевого указателя из стандарта. На что я опять же вам ответил, что приведенная вами в пример запись относится к форме записи такого указателя в исходном коде, а не к его битовому представлению. А потом контекст зачем-то поехал в сторону "а покажи-как мне реализацию где сейчас не так". Но это уже out of topic. Во-первых потому, что речь изначально шла про древнюю технику, а во-вторых потому, что отсутствие подобных современных машин не опровергает ничего из вышесказанного.
Там по ссылке есть ссылки на примеры.
И да, я тут своего ничего не говорю. То, что я сказал, и то, что написано в FAQ - это просто пересказ человеческим языком того, что написано в стандарте.
То, что " NULL это ((void*)0) по стандарту" никак не отменяет того, о чем я сказал. Этот ноль в исходнике не означает нули в битовом представлении. Даже если технически оказывается так, что репрезентация этого нуля в битах тоже нули, семантически - это разные нули. Литерал "ноль", как и nullptr, как и NULL - это лишь удобные записи для обозначения нулевого указателя, а конкретные биты компилятор сгенерит сам, вы напрямую не можете никак не это повлиять.
Еще одна ссылочка для понимания: https://c-faq.com/null/machnon0.html
Указатель с адресом ноль и нулевой указатель - это разные вещи (в общем случае). https://c-faq.com/null/varieties.html
Говорить, наверное, можно как угодно. А вот писать статьи всё-таки лучше правильно.
Думаю он просто таскает более новый рантайм от свежего GCC вместе с проектом. Так легко можно добиться двоичной переносимости собранного С++ кода. Я и сам так когда-то делал.
И это ещё не всё.
В итоге почему удалили-то, выяснилось?
Может быть я просто легче к этому отношусь. У меня всегда было много таких знакомых. Без проблем признавал для себя, что они умнее и им "можно" поэтому быть такими. Это честная сделка, потому что обычно у таких людей много чему можно научиться.
Справедливости ради, у автора статьи неплохой слог, его текст читается так же легко, как льется вода. Без начитанности такого добиться будет непросто. Это вообще первая статья за последнее время, которую я прочитал целиком и с большим удовольствием от подачи. Большинство статей на хабре ужасны с этой точки зрения, косноязычны и просторечны. Не берусь судить об экспертности изложенного, т.к. сам не являюсь в этих делах специалистом. Поэтому может быть ваша картинка тут и подходит в этом смысле, но начитанность у автора совершенно точно присутствует. В этом, как мне кажется, он не лукавит.
Вместо Старуструпа можно взять Липпмана.
Который пришел туда из boost, где был c 2003 года.
Можно, но это просто будет означать совсем другое. char* x = 0; даст указатель с null pointer value, а char* x = y - y; даст указатель с битовым значением, равным нулю. null указатель и нулевое битовое представление адреса - это в общем случае разные вещи. https://c-faq.com/null/machnon0.html
Главное, чтобы вы не заменяли профессионализм на ритуалы. Все эти приставки ТруЪ - это фанатизм в худшем его проявлении. Все эти ТруЪ стремятся поделить мир на белое и чёрное, на труъ и не труъ. Но не бывает хороших или плохих инструментов, бывают подходящие или неподходящие.
Причем сам он точно также использует эти приёмы.
"Общеизвестный в сообществе факт..." - это приём называемый "апелляция к очевидности".
Бесполезное дело непрограммисту это все описывать. Все равно превратно будет понято. А чтобы это понять, нужно хотя бы два разных проекта целиком написать. Некоторым людям вообще лет 20 нужно пробыть в разработке, чтобы начать хоть что-то понимать. Автор наверняка меньше работает и его пост поэтому - это сплошной максимализм и лозунги.
Автор не прав по форме. Конкретные аргументы выглядят верными, но в целом это просто словесный эквилибризм. Автор выбрал позицию-оппонента "ООП - серебряная пуля" и остервенело её опровергает, резюмируя, что раз это не пуля, значит это скам.
А на деле просто берется тот инструмент, который подходит к задаче (сюда относится и знание конкретных инструментов берущими). Все разнообразные определения, подходы и методики, описываемые в разных источниках, нужны лишь чтобы помочь сделать этот выбор более осознанно.