|
MMU - сильно ли надо? |
|
|
|
Aug 4 2006, 09:12
|

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

|
Цитата(zltigo @ Aug 4 2006, 15:26)  Цитата(Сергей Борщ @ Aug 4 2006, 10:56)  А вот тут zltigo не прав. Цитирую Страуструпа:
Это всего лишь личное мнение Страуструпа :-)))) который и затвердил :-( его в своей реализации ++. Личное мнение Страуструпа является стандартом - он автор.  Цитата(zltigo @ Aug 4 2006, 15:26)  Я не слишком слежу за процессом стандартизации C++, но похоже комитет пока еще не родил стандарта :-(. Стандарт давно принят - аж в 1998 году. Уже приличное время ходят обсуждения следующей версии. Цитата(zltigo @ Aug 4 2006, 15:26)  Короче в С++ болезнь вместо лечения ( введением ключевого слова, как в Паскале) была загнана вовнутрь наложением исскуственного требования иметь внутреннее представление нулевых указателей нулевым. И с легкостью необыкновенной считать, что ключевое слово для нулевого указателя это "0". Какая болезнь? Отказ от определения NULL, как (void*)0? Сказано же, что объектов по нулевому адресу быть не может, поэтому указатель с адресом 0 невалиден. И 0 вполне однозначно определяет ситуацию благодаря стандартному преобразованию типа. Зачем тут плодить лишние сущности языка?
--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
|
|
|
|
|
Aug 4 2006, 09:51
|

Гуру
     
Группа: Модераторы
Сообщений: 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)
|
|
|
|
|
Aug 4 2006, 10:46
|

Гуру
     
Группа: Свой
Сообщений: 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
|
|
|
|
|
Aug 4 2006, 12:07
|
Участник

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

|
Цитата(zltigo @ Aug 4 2006, 14:46)  Нет, отсутствие ключевого слова для нулевого указателя. Интересно, а физически что же из себя будет представлять это ключевое слово ? 0 или какое-нибудь 0xFFFF... ? Уровень языка (достаточно низкий) и подразумевает изпользование константы. И большое спасибо, а то бы получился очередной паскаль.
|
|
|
|
|
Aug 4 2006, 13:08
|

Гуру
     
Группа: Свой
Сообщений: 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
|
|
|
|
|
Aug 4 2006, 13:51
|

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

|
Цитата(zltigo @ Aug 4 2006, 17:46)  Цитата(dxp @ Aug 4 2006, 12:12)  Какая болезнь? Отказ от определения NULL, как (void*)0?
Нет, отсутствие ключевого слова для нулевого указателя. Если так хоцца слово, то Вы можете его сами себе сотворить по вкусу - Сергей Борщ приводил цитату, там как раз было именно это. Заодно снимаются вопросы о самом слове - какое хоцца, такое и используйте. Вполне гибко и демократично. А в языке слова нет просто потому, что оно реально не нужно. Это лишняя сущность. Язык С++ и без этого достаточно сложен и чрезвычайно перегружен, поэтому сделано по минимуму. Все логично. А для принципиальных любителей слов оставлена лазейка. "И овцы сыты, и волки целы" (с)  Цитата(zltigo @ Aug 4 2006, 17:46)  Цитата Сказано же, что объектов по нулевому адресу быть не может...
Так папа сказал. Аминь. Ну, если папа - Деннис Ричи, то да.  Цитата(zltigo @ Aug 4 2006, 17:46)  Цитата На другой платформе int 0 будет стандартно преобразован к принятому на той платформе битовому представлению указателя который никуда не указывает.
Ну не "int 0" а ключевое слово "0", которое выглядит как "0", но должно быть преобразовано к "принятому на той платформе битовому представлению"... И пусть со всем этим компилятор разбирается и не ошибается... И программист пусть не думает, поскольку за него компилятор постараетсяразобраться. Не по душе мне такой уровень абстракции :-( Мни кажется, что Вы все-таки излишне драматизируете ситуацию. Все там вполне однозначно. И физическое представление нулевого указателя вполне конкретно, просто оно определяется не Стандартом, а реализацией, только и всего, что опять же вполне логично. На всех платформах, с которым пришлось более-менее плотно поработать с С++, нулевой указатель имел физическое значение 0. Наличие специального ключевого слова совершенно ничего не меняет.
--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
|
|
|
|
|
Aug 4 2006, 16:45
|

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

|
Цитата(dxp @ Aug 4 2006, 16:51)  А для принципиальных любителей слов оставлена лазейка. "И овцы сыты, и волки целы" (с)  И я ей пользуюсь :-) Ибо, как минимум, не люблю веспорядочно расскиданные по тексту "0" :-) А вообще сыр-бор с уходом в сторону от темы new() в тему NULL начался с моей фразы: Цитата Ну а то, что автору, цитаты, что NULL, что 'zero' все едино - еще раз указывает на его некомпетентность. При этом имелось ввиду отнюдь не способность компилятора разобраться в контексте, а покоробившее меня поминание именно "0" вместо "нулевого указателя" в качестве значения возврашаемого функцией для которой возврашаемым значением является указатель. Я понимаю, что в данной MS инструкции (а это именно четкая фраза от MS - можете поиском воспользоваться) указывается прямое действие пользователю - "пиши 0 и не парься", но тем не менее, подмена физической сущности в инструкции мне не нравится. Цитата Мни кажется, что Вы все-таки излишне драматизируете ситуацию. Да нет, так - шероховатость, просто это привлекло неожиданно для меня самого повышенное внимание и понеслось.... Цитата На всех платформах, с которым пришлось более-менее плотно поработать с С++, нулевой указатель имел физическое значение 0. Аналогично :-). Нынеживущие платформы наверное все такие. Ну а в будующем? Не знаю даже. Ведь всяких архитектур с ненулевыми нулевыми указателями и с указателями разных размеров для разных типов указателей было немало. Это было в эпоху, когда за счет архитектурных ухищрений добивались упрощения и/или увеличения производительности. Потом настали времена когда "патронов не жалеть" (в смысле транзисторов) и мегагерцы гнались легко. Сейчас лафа кончается - мегагерцы на исходе и пожалуй опять начнутся архитектурные гонки. И каким будет физическое представление нулевого указателя - это вопрос :-). Компиляторы конечно разберутся с "0" и в этом случае, но не красиво это как-то. Вот собственно пожалуй и все по теме "0" и "нулевой указатель" неожиданно вылезшей в теме по MMU.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|