реклама на сайте
подробности

 
 
3 страниц V  < 1 2 3  
Reply to this topicStart new topic
> MMU - сильно ли надо?
dxp
сообщение Aug 4 2006, 09:12
Сообщение #31


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



Цитата(zltigo @ Aug 4 2006, 15:26) *
Цитата(Сергей Борщ @ Aug 4 2006, 10:56) *

А вот тут zltigo не прав. Цитирую Страуструпа:

Это всего лишь личное мнение Страуструпа :-)))) который и затвердил :-( его в своей реализации ++.
Личное мнение Страуструпа является стандартом - он автор. smile.gif

Цитата(zltigo @ Aug 4 2006, 15:26) *
Я не слишком слежу за процессом стандартизации C++, но похоже комитет пока еще не родил
стандарта :-(.

Стандарт давно принят - аж в 1998 году. Уже приличное время ходят обсуждения следующей версии.

Цитата(zltigo @ Aug 4 2006, 15:26) *
Короче в С++ болезнь вместо лечения ( введением ключевого слова, как в Паскале) была загнана вовнутрь наложением исскуственного требования иметь внутреннее представление нулевых указателей нулевым. И с легкостью необыкновенной считать, что ключевое слово для нулевого указателя это "0".

Какая болезнь? Отказ от определения NULL, как (void*)0? Сказано же, что объектов по нулевому адресу быть не может, поэтому указатель с адресом 0 невалиден. И 0 вполне однозначно определяет ситуацию благодаря стандартному преобразованию типа. Зачем тут плодить лишние сущности языка?


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Aug 4 2006, 09:51
Сообщение #32


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(zltigo @ Aug 4 2006, 11:26) *
В моей полной цитате речь шла о проблеме более широко:
- не только по отношению к C++, но и к C (более того это был именно кусок по С );
- по отношению к разным платформам, как например должен выглядеть Страуструповский
0 на платформе типа Cray-Cyber с кольцевыми указателями?
А разве в С есть operator new?
Про Cray не знаю ничего кроме "Цыпленок Cray перебежит дорогу быстрее всех, но если перед стартом его не окунуть в жидкий азот, то на той стороне дороги он появится в уже зажаренном виде" :-) На другой платформе int 0 будет стандартно преобразован к принятому на той платформе битовому представлению указателя который никуда не указывает. По-моему так! (с) Винни-Пух.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 4 2006, 10:46
Сообщение #33


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(dxp @ Aug 4 2006, 12:12) *
Какая болезнь? Отказ от определения NULL, как (void*)0?

Нет, отсутствие ключевого слова для нулевого указателя.
Цитата
Сказано же, что объектов по нулевому адресу быть не может...

Так папа сказал. Аминь.
А нежели кому в железе чего такого захочется сотворить:
Цитата
На другой платформе int 0 будет стандартно преобразован к принятому на той платформе битовому представлению указателя который никуда не указывает.

Ну не "int 0" а ключевое слово "0", которое выглядит как "0", но должно быть преобразовано к
"принятому на той платформе битовому представлению"... И пусть со всем этим компилятор разбирается и не ошибается... И программист пусть не думает, поскольку за него компилятор постарается
разобраться. Не по душе мне такой уровень абстракции :-(


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Concorde
сообщение Aug 4 2006, 12:07
Сообщение #34


Участник
*

Группа: Свой
Сообщений: 56
Регистрация: 5-07-05
Пользователь №: 6 553



Цитата(zltigo @ Aug 4 2006, 14:46) *
Нет, отсутствие ключевого слова для нулевого указателя.

Интересно, а физически что же из себя будет представлять это ключевое слово ? 0 или какое-нибудь 0xFFFF... ? Уровень языка (достаточно низкий) и подразумевает изпользование константы. И большое спасибо, а то бы получился очередной паскаль.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 4 2006, 13:08
Сообщение #35


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Concorde @ Aug 4 2006, 15:07) *
Интересно, а физически что же из себя будет представлять это ключевое слово ? 0 или какое-нибудь 0xFFFF... ?

Какая разница какое( ну NIL ). Любое, главное не строились мутные на мой взгляд преобразования типа "ничего не возвратили" поскольку вообще-то оттуда возвращают указатели, то будем считать,
что возвратили "никакой указатель" далее считаем, что по никакому указателю лежит "ничего"
ну а дальше просто пусть это ничего будет "0" - так и запишем :-(
Цитата
И большое спасибо, а то бы получился очередной паскаль.

Вы часом меня не за преверженца Паскаля да еще в его Борландовской реинкарнации приняли? Отвечу - нет, что отнюдь не заставляет меня априори его не признавать и не замечать его
отдельные достоинства в части четкости выражения.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
dxp
сообщение Aug 4 2006, 13:51
Сообщение #36


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



Цитата(zltigo @ Aug 4 2006, 17:46) *
Цитата(dxp @ Aug 4 2006, 12:12) *

Какая болезнь? Отказ от определения NULL, как (void*)0?

Нет, отсутствие ключевого слова для нулевого указателя.

Если так хоцца слово, то Вы можете его сами себе сотворить по вкусу - Сергей Борщ приводил цитату, там как раз было именно это. Заодно снимаются вопросы о самом слове - какое хоцца, такое и используйте. Вполне гибко и демократично. А в языке слова нет просто потому, что оно реально не нужно. Это лишняя сущность. Язык С++ и без этого достаточно сложен и чрезвычайно перегружен, поэтому сделано по минимуму. Все логично. А для принципиальных любителей слов оставлена лазейка. "И овцы сыты, и волки целы" (с) smile.gif

Цитата(zltigo @ Aug 4 2006, 17:46) *
Цитата

Сказано же, что объектов по нулевому адресу быть не может...

Так папа сказал. Аминь.

Ну, если папа - Деннис Ричи, то да. smile.gif

Цитата(zltigo @ Aug 4 2006, 17:46) *
Цитата

На другой платформе int 0 будет стандартно преобразован к принятому на той платформе битовому представлению указателя который никуда не указывает.

Ну не "int 0" а ключевое слово "0", которое выглядит как "0", но должно быть преобразовано к
"принятому на той платформе битовому представлению"... И пусть со всем этим компилятор разбирается и не ошибается... И программист пусть не думает, поскольку за него компилятор постарается
разобраться. Не по душе мне такой уровень абстракции :-(

Мни кажется, что Вы все-таки излишне драматизируете ситуацию. Все там вполне однозначно. И физическое представление нулевого указателя вполне конкретно, просто оно определяется не Стандартом, а реализацией, только и всего, что опять же вполне логично. На всех платформах, с которым пришлось более-менее плотно поработать с С++, нулевой указатель имел физическое значение 0. Наличие специального ключевого слова совершенно ничего не меняет.


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 4 2006, 16:45
Сообщение #37


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(dxp @ Aug 4 2006, 16:51) *
А для принципиальных любителей слов оставлена лазейка. "И овцы сыты, и волки целы" (с) smile.gif

И я ей пользуюсь :-) Ибо, как минимум, не люблю веспорядочно расскиданные по тексту "0" :-)
А вообще сыр-бор с уходом в сторону от темы new() в тему NULL начался с моей фразы:
Цитата
Ну а то, что автору, цитаты, что NULL, что 'zero' все едино - еще раз указывает на его некомпетентность.

При этом имелось ввиду отнюдь не способность компилятора разобраться в контексте, а покоробившее меня поминание именно "0" вместо "нулевого указателя" в качестве значения возврашаемого функцией для которой возврашаемым значением является указатель. Я понимаю,
что в данной MS инструкции (а это именно четкая фраза от MS - можете поиском воспользоваться) указывается прямое действие пользователю - "пиши 0 и не парься", но тем не менее, подмена физической сущности в инструкции мне не нравится.

Цитата
Мни кажется, что Вы все-таки излишне драматизируете ситуацию.

Да нет, так - шероховатость, просто это привлекло неожиданно для меня самого повышенное внимание и понеслось....

Цитата
На всех платформах, с которым пришлось более-менее плотно поработать с С++, нулевой указатель имел физическое значение 0.

Аналогично :-). Нынеживущие платформы наверное все такие. Ну а в будующем? Не знаю даже.
Ведь всяких архитектур с ненулевыми нулевыми указателями и с указателями разных размеров для
разных типов указателей было немало. Это было в эпоху, когда за счет архитектурных ухищрений
добивались упрощения и/или увеличения производительности. Потом настали времена когда
"патронов не жалеть" (в смысле транзисторов) и мегагерцы гнались легко. Сейчас лафа кончается -
мегагерцы на исходе и пожалуй опять начнутся архитектурные гонки. И каким будет физическое представление нулевого указателя - это вопрос :-). Компиляторы конечно разберутся с "0" и в этом
случае, но не красиво это как-то. Вот собственно пожалуй и все по теме "0" и "нулевой указатель"
неожиданно вылезшей в теме по MMU.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Aug 5 2006, 01:35
Сообщение #38


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



А вот мои 5 рублей.
Мне вот тоже не нравится такое неуважительное отношение к нулевому указателю. В Паскале, с которого я начинал это сделано более чем идеально. Ну а стандарт С++ из-за этого какой-то "кривой". (редко я соглашаюсь с zltigo)

Писал как-то свой менеджер памяти на 486 системе. Да ещё в защищенном 32-битном режиме. Так вот было два сегмента - один для данных, другой для служебной информации. И мне было ну очень удобно выделять память данных с самого нуля. Тогда же я условился считать пустым указателем 0xFFFFFFFF. Ну и с тех пор пытаюсь даже на СИ не путать указатели с числами и использовать NULL. Короче, смысл в этом есть.


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post

3 страниц V  < 1 2 3
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 12:21
Рейтинг@Mail.ru


Страница сгенерированна за 0.01453 секунд с 7
ELECTRONIX ©2004-2016