| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Из чего сделаны типы |
| Автор: Zero 28.12.2004, 03:17 |
| Народ вот я тут непойму. Почему официально в Delphi и Паскале сделаны типы max размером только 32 бита??? Ведь наверняка, можно сделать их размером с разрядную сетку ОС. Может кто знает как они устроены??? Я сам не верю что в Delphi возможно в разделе Type так сделать, но может обясните почему??? И от чего это зависит??? |
| Автор: Yanis 28.12.2004, 08:55 |
| Если бы можно сделать размер больший чем разрядная сетка, то небыло бы необходимости в 64 битных процессорах. |
| Автор: Sardar 28.12.2004, 14:19 |
| Регистры в 32 битном процессоре имеют размер 32 бита Вопрос: тебе быстрых 32-64 бита не хватает? |
| Автор: Zero 28.12.2004, 20:23 | ||
Вообще хватает, но просто меня заинтересовал вопрос по типам. Вот в http://forum.vingrad.ru/index.php?showtopic=36836&view=all&hl=%CA%E0%EA+%F1%EE%E7%E4%E0%F2%FC+%F1%F3%EF%E5%F0%F2%E8%EF теме, я задавал вопрос "как создать такой тип", но в результате выяснилось что на Паскале его нельзя создать, а на Си можно, вот я и хочу поглубже разобратся в том как устроены типы и отчего зависят. Замечание: я не знаю "Си", поэтому если ты знаешь Sardar причину по которой на си можно сделать типы любой длины а на Паскале нельзя, то не мог бы пояснить. Хотя у меня есть предположение что на "Си" работает как ты описал выше.... |
| Автор: Burich-Caeser 28.12.2004, 21:09 |
| ZeroВ принципе можно, только с pointer оперировать придется. Пример - PChar виндозный. Там хранится только указатель на начало строки, а дальше делай, что хочешь. Или это меня спросонья глючит? 21.13 хорошо проснулся |
| Автор: Sardar 28.12.2004, 21:28 | ||
| Zero тебе ответитли что такое типы и как сделать свой неограниченный по длине тип, просто ты не совсем догоняешь работу компилятора Компилятор транслирует код под какой-то заданный процессор. Если процессор может работать с условно бесконечными числами, то компилятор будет юзать его возможности. Например код некоторого гипотетического проца:
В коде проц может иметь только два регистра условно бесконечной длинны. Все операции совершаются с загруженным в данный момент числом(инфа о регистрах), второй регистр используется как второй операнд. Это всё реализовать програмно проще чем аппаратно, поэтому ты редко встретишь подобные фичи в процессоре. Програмно это значит что компилятор может это сделать за нас либо мы должны писать всё ручками. Если компилятор поддерживает эти фичи сам, то глянь на код под дебаггером, увидишь что все транслируется в вызовы функций библиотеки идущей вместе с компилером. Теперь о языках. Есть убогие языки типа бейсика где каждая фишка реализованна компилятором, а твоя задача связать все возможности компилера в одну программу. Например печать на экран Print, чтение из файла/консоли Input и т.д. - бесчисленное количество ключевых слов. Есть расширямые языки, где компилятор имеет минимум базовых возможностей, например поддержка типов и структур в С. Код ты можешь писать действительно с нуля расширяя язык новыми функциями и т.п. ООП языки тоже расширяемые, где ты можешь расширить множество типов(классы) языка. Правда все эти типы сложные, по сути это структуры, а методы обьектов это функции, которым передается ссылка на структуру. Хотя для интепретируемых языков это утверждение не верно. Теперь представим язык в котором мы можем расширить примитивы. Для этого нам нужно написать собственный код и перегрузить все операторы этого типа, т.е. при любой операции с таким типом будет вызыватся нашь код. Это не сложно сделать в языках где есть перегрузка операторов. Ну а теперь спускаемся с небес на землю и смотрим с чем ты работаешь. Дельфи, не знаю есть ли там перегрузка операторов работающая с примитивными типами, но поддержка обьектов точно есть. Следовательно лучший способ написать клас, в котором опрделить все операции с типом как методы. В С++ ты можешь перегрузить операторы для этого класса, таким образом тип можеть внешне быть похожим на примитив(хотя не люблю такой подход - сбивает с толку). Как видим если язык не расширяемый, то это фатально, иначе расширяем возможности собственным кодом. Последнее. Зачем тебе большой тип для циклов(я так понял)? Если цикл босльшой, то ты делаешь что то не верное... Надеюсь я не зря потратил время набивая всю эту.... |
| Автор: Zero 29.12.2004, 09:34 | ||||||
Ладно, не хотел я говорить ну всёже скажу:
Вобщем спасибо за Даходчевое Обяснение!!!! |