Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Из чего сделаны типы, на мето языках??? 
:(
    Опции темы
Zero
  Дата 28.12.2004, 03:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: 8
Всего: 24



Народ вот я тут непойму. Почему официально в Delphi и Паскале сделаны типы max размером только 32 бита??? Ведь наверняка, можно сделать их размером с разрядную сетку ОС. Может кто знает как они устроены??? Я сам не верю что в Delphi возможно в разделе Type так сделать, но может обясните почему??? И от чего это зависит???
PM MAIL ICQ   Вверх
Yanis
Дата 28.12.2004, 08:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 72
Всего: 111



Если бы можно сделать размер больший чем разрядная сетка, то небыло бы необходимости в 64 битных процессорах.


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
Sardar
Дата 28.12.2004, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 2
Всего: 317



Регистры в 32 битном процессоре имеют размер 32 бита smile Процессор может также сам оперировать 64 битными числами комбинируя пару регистров. Можно самому быделить в памяти массив байт для скольугодного размера числа и "решать" его самим, но естественно, на каждую операцию ты будешь тратить кучу инструкций, все будет работать медленно. Так например реализованны 16 и 32 битные типы на 8 битных микроконтроллерах.
Вопрос: тебе быстрых 32-64 бита не хватает?


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Zero
Дата 28.12.2004, 20:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: 8
Всего: 24



Цитата(Sardar @ 28.12.2004, 14:19)
Вопрос: тебе быстрых 32-64 бита не хватает?

Вообще хватает, но просто меня заинтересовал вопрос по типам. Вот в этой теме, я задавал вопрос "как создать такой тип", но в результате выяснилось что на Паскале его нельзя создать, а на Си можно, вот я и хочу поглубже разобратся в том как устроены типы и отчего зависят.
Замечание: я не знаю "Си", поэтому если ты знаешь Sardar причину по которой на си можно сделать типы любой длины а на Паскале нельзя, то не мог бы пояснить.
Хотя у меня есть предположение что на "Си" работает как ты описал выше....
PM MAIL ICQ   Вверх
Burich-Caeser
Дата 28.12.2004, 21:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 109
Регистрация: 28.7.2004

Репутация: нет
Всего: 1



ZeroВ принципе можно, только с pointer оперировать придется. Пример - PChar виндозный. Там хранится только указатель на начало строки, а дальше делай, что хочешь. Или это меня спросонья глючит? 21.13 хорошо проснулся smile
--------------------
Ты брошен вниз силой судьбы,Ты унижен и раздавлен,Время забыть то, кем ты был,Но помнить, кем ты стал...
PM MAIL   Вверх
Sardar
Дата 28.12.2004, 21:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 2
Всего: 317



Zero тебе ответитли что такое типы и как сделать свой неограниченный по длине тип, просто ты не совсем догоняешь работу компилятора smile
Компилятор транслирует код под какой-то заданный процессор. Если процессор может работать с условно бесконечными числами, то компилятор будет юзать его возможности. Например код некоторого гипотетического проца:
Код
; допустим у нас N 8 битных очень быстрых регистров
load_long_base R10, 10 ; с R10 по R19 регистр у нас 10 байтное длинное число
clear_long; обнулить
increment_long ; увеличить наше число на единицу, 0 - порядковый номер длинног числа
load_long_base R20, 5 ; 5 байтное длинное число
clear_long
decrement_long; умньшить на единицу, получим максимальное число
swap_long ; поменять местами длинные числа, первое на передний план
unsigned_long_add; сумма боих чисел, результат в первое число(R10)

В коде проц может иметь только два регистра условно бесконечной длинны. Все операции совершаются с загруженным в данный момент числом(инфа о регистрах), второй регистр используется как второй операнд.

Это всё реализовать програмно проще чем аппаратно, поэтому ты редко встретишь подобные фичи в процессоре.

Програмно это значит что компилятор может это сделать за нас либо мы должны писать всё ручками. Если компилятор поддерживает эти фичи сам, то глянь на код под дебаггером, увидишь что все транслируется в вызовы функций библиотеки идущей вместе с компилером.

Теперь о языках. Есть убогие языки типа бейсика где каждая фишка реализованна компилятором, а твоя задача связать все возможности компилера в одну программу. Например печать на экран Print, чтение из файла/консоли Input и т.д. - бесчисленное количество ключевых слов.
Есть расширямые языки, где компилятор имеет минимум базовых возможностей, например поддержка типов и структур в С. Код ты можешь писать действительно с нуля расширяя язык новыми функциями и т.п.
ООП языки тоже расширяемые, где ты можешь расширить множество типов(классы) языка. Правда все эти типы сложные, по сути это структуры, а методы обьектов это функции, которым передается ссылка на структуру. Хотя для интепретируемых языков это утверждение не верно.

Теперь представим язык в котором мы можем расширить примитивы. Для этого нам нужно написать собственный код и перегрузить все операторы этого типа, т.е. при любой операции с таким типом будет вызыватся нашь код. Это не сложно сделать в языках где есть перегрузка операторов.

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

Как видим если язык не расширяемый, то это фатально, иначе расширяем возможности собственным кодом.

Последнее. Зачем тебе большой тип для циклов(я так понял)? Если цикл босльшой, то ты делаешь что то не верное... smile И помни ты всегда можешь вложить несколько циклов получая сколь угодно итераций без всяких типов.

Надеюсь я не зря потратил время набивая всю эту.... smile


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Zero
Дата 29.12.2004, 09:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: 8
Всего: 24



Цитата(Sardar @ 28.12.2004, 21:28)
Zero тебе ответитли что такое типы и как сделать свой неограниченный по длине тип, просто ты не совсем догоняешь работу компилятора
Впринципе что такое тип я то знаю, а вот работу компилятора, как таковую нет, ведь не я же делал его. А на САПР мы ещё не дошли до этого, но скоро будем (нам наш препод говорил).
Цитата(Sardar @ 28.12.2004, 21:28)
Последнее. Зачем тебе большой тип для циклов(я так понял)? Если цикл босльшой, то ты делаешь что то не верное...

Ладно, не хотел я говорить ну всёже скажу: smile в этой теме был задан вопрос связанный с большим числом, я там в конце предложил по моему мнению самый оптимальный код, но Pakshin A.S., тоже предложил мене оптимальный но работающий с польшими числами, вот я и хотел, узнать как доделатьсвою прогу но чтобы она была проще чем у него. smile Но к сожалению этого не получилось, все начали предлагать всякие массивы, и всякую ерунду, которая уже стала бы сложнее чем у Пакшина. А потом мне захотелось просто разобратся почему всё так. До этого на все вопросы я обычно пусть не сразу ну находил отвты, а на этот к сожалению не получилось. smile
Цитата(Sardar @ 28.12.2004, 21:28)
Надеюсь я не зря потратил время набивая всю эту....
Конечно нет, теперь я понял для чего нужны разные языки, т.е. конечно я знал некоторое примерно, но теперь наконец до меня дошло даже "Си", и то чем оно отличается от "Delphi", а раньше думал что Делфи самое лучшее, но оказывается у всех есть свои плюсы и минусы, универсальный язык сделать невозможно... smile
Вобщем спасибо за Даходчевое Обяснение!!!!

Это сообщение отредактировал(а) Zero - 29.12.2004, 09:38
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0519 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.