На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела:
1. Название темы - краткое описание кто/что против кого/чего
2. В первом сообщении - список параметров, по которым идет сравнение.
3. Старайтесь аргументировать свои высказывания. Фразы типа "Венда/Слюникс - ацтой" считаются флудом.
4. Давайте жить дружно и не доводить обсуждение до маразма и личных оскорблений.
Модераторы: Модераторы, Комодераторы
Страницы: (5) [1] 2 3 ... Последняя » все  ( Перейти к последнему сообщению )  
> Фундаментальные и общие типы данных в Delphi
    Цитата Демо @
    Ты скажи мне, фундаментальный тип всегда останется неизменного размера? Уверен в том?


    Открою страшную тайну, поэтому он и называется фундаментальным. Вот неплохой урок:

    http://www.delphikingdom.ru/asp/viewitem.asp?catalogid=930

    А вот выдержка оттуда:
    Цитата
    По платформе

    Типы данных разделяются на фундаментальные (fundamental) и общие (generic). Фундаментальные типы (их формат и множество значений) не зависят от реализации языка Delphi, его версии, операционной системы и процессора. Формат и множество значений общих типов данных специфичны для конкретной платформы и могут варьироваться в зависимости от версии Delphi, ОС и процессора. Следует стараться использовать общие типы данных где это возможно, т.к. они предоставляют оптимальную производительность и переносимость программ. Однако зависимость формата от платформы может создать проблемы с совместимостью когда речь идет о хранении (файлы) и обработке данных вне программы (передача данных другим программам или ОС).


    Эта тема была разделена из темы "Сохранение записи сложной структры в файл"
    Сообщение отредактировано: jack128 -
      Цитата Rouse_ @
      Write заменить на WriteBuffer


      А зачем? Чтобы Exception был при ошибке? Тогда да.

      Добавлено
      Цитата --Ins-- @
      Открою страшную тайну, поэтому он и называется фундаментальным. Вот неплохой урок:


      Да знаю я про фундаментальные типы. Нет необходимости мне читать про них.

      А вот ты ЛИЧНО уверен в соблюдении этой установки?-)

      Добавлено
      Ну и от Розыча вопрос в Сообщ. #17.
      Сообщение отредактировано: Демо -
        Цитата Демо @
        А вот ты ЛИЧНО уверен в соблюдении этой установки?-)


        Естественно :) Мне его заявили как фундаментальный, и я знаю что это означает.

        Цитата Демо @
        Ну и от Розыча вопрос в Сообщ. #17.


        А у меня вопрос к вам с Розычем встречный будет. Char - это какой тип общий или фундаментальный? А AnsiChar? ;)
          Цитата --Ins-- @
          Char - это какой тип общий или фундаментальный?

          Это фундаментальный, ибо:
          Цитата
          Типы данных разделяются на фундаментальные (fundamental) и общие (generic). Фундаментальные типы (их формат и множество значений) не зависят от реализации языка Delphi, его версии, операционной системы и процессора.

          Эта цитата неверна в принципе - типы данных разделяются на объявленные на уровне компилятора и объявленные во внешнем коде. И первые и вторые зависят от реализации языка и его версии, т.к. char обьявлен на уровне компилятора, но имеет разный размер в разных версиях Delphi, то-же было и с Integer-ом в свое время...
            Цитата Rouse_ @
            Это фундаментальный, ибо:


            Спарвка от Delphi с тобой не согласна ;)

            Цитата
            The fundamental character types are AnsiChar and WideChar. AnsiChar values are byte-sized (8-bit) characters ordered according to the locale character set which is possibly multibyte. AnsiChar was originally modeled after the ANSI character set (thus its name) but has now been broadened to refer to the current locale character set.
            ...
            The generic character type is Char, which is equivalent to AnsiChar.


            Саша, Char платформозависим ;) А значит не может быть фундаментальным.
              Цитата --Ins-- @
              Спарвка от Delphi с тобой не согласна

              А ты от какой версии справку читаешь? :)

              Добавлено
              Цитата --Ins-- @
              Char платформозависим

              И когда он стал таким? :)
                От 2007-й. А что?
                  А то что там есть такая фраза: Use the type specifier char to define a character data type. Variables of type char are 1 byte in length. От 2009-ой открыть? :)
                    Цитата Rouse_ @
                    А то что там есть такая фраза: Use the type specifier char to define a character data type. Variables of type char are 1 byte in length.


                    И что с того? ;) А про Integer написано, что он 32 бита. Но главное, что там сказано, что тип общий, со всеми вытекающими ;) А вытекает из этого только одно: он такой до поры до времени и если тебе нужно чтобы размер не менялся при портировании кода - используй фундаментальные типы :) Это азбука

                    Добавлено
                    Цитата Rouse_ @
                    От 2009-ой открыть?


                    Открой. Там сказано, что Char фундаментальный?
                      Хорошо, давай расмотрим типы:
                      Integer фундаментальный? Нет - он привязан к платформе.
                      DWORD фундаментальный? Нет - ибо под некоторыми платформами его вообще нет.
                      Int64?
                      WideChar?

                      Что у нас остается? SmallInt? Ну так он тоже не везде представлен...
                      Получается только Byte - единственный фундаментальный тип, который есть везде и не изменен :)
                        Цитата Rouse_ @
                        Integer фундаментальный? Нет - он привязан к платформе.

                        Совершенно верно.

                        Цитата Rouse_ @
                        DWORD фундаментальный?

                        Да

                        Цитата Rouse_ @
                        Int64?

                        Да

                        Цитата Rouse_ @
                        ибо под некоторыми платформами его вообще нет.

                        А это и не важно :) Где есть - всегда 4 байта. Железно.

                        Цитата Rouse_ @
                        Получается только Byte - единственный фундаментальный тип, который есть везде и не изменен

                        В справке все сказано, какие фундаментальные, а какие общие.
                          Цитата --Ins-- @
                          А это и не важно

                          О как... Т.е. не важно и все? Без оговорок? :) А как-же тогда определение фундаментальных типов? Там ничего не сказано про разрядность системы и процессора? :)
                          Цитата --Ins-- @
                          В справке все сказано, какие фундаментальные, а какие общие.

                          Справку тоже пишут люди... Там даже Send feedback присутствует :)
                            Цитата Rouse_ @
                            Справку тоже пишут люди...


                            Ну, открой справку от другого языка программирования :) А лучше - просто найди определения общих и фундаментальных типов, они есть, так как термины эти не мной и не Борландом придуманные. Чисто чтобы не цепляться к словам про платформы ;)
                              Цитата --Ins-- @
                              Ну, открой справку от другого языка программирования

                              Пааажалста: открываю MSDN, раздел Fundamental Types :)
                              Цитата
                              char - Type char is an integral type that usually contains members of the execution character set — in Microsoft C++, this is ASCII.


                              также там отстутвует DWORD, присутствует INT64 но с оговоркой что он Microsoft-specific, а так-же сказано что размер Char не важно знаковый или нет - 1 байт :) Кто-то видимо ошибается из тех кто пишет справку :)

                              ЗЫ: маленький хинт - я верю только MSDN, дельфевую справку вообща раз 10 за все время открывал и то случайно мимо ESC промахивался :)
                                Rouse_, давай попробуем так, если у нас тут разные "авторитеты" и толкования, то на пальцах :) Забыли все приведенные выше кривые определения :)

                                Говорю только про Delphi, специально не обобщаю. Ну, и turbo pascal можно вспомнить. Вот есть элементарные типы. Char, Byte, Integer, Pointer... Некоторые были в языке изначально, а некоторые, такие как Int64, появились позже. Некоторым еще суждено появится - почему бы и нет, какой-нибудь Int128...
                                Нетрудно заметить, что такие типы условно делятся на две категории: одни - никогда не меняют свой размер (Byte, Word, DWord, ShortInt, SmallInt, LongInt...), другие же (Integer, Char, Pointer) - подстраиваются под изменчивый мир. И вот мы назвали первые типы - фундаментальные, а вторые - общие. И гарантировали, что для типов, названных фундаментальными, размер отныне и впредь будет таким. А для общих - возможно будет плавать. В будущих версиях вполне могут появится другие типы и мы также можем сразу же указать, будут ли они общими или фундаментальными. Например, вводим тип Int128 и говорим, что отныне и впредь это будет 128-битное целое со знаком. Зачем такое разделение вводить? Чтобы уберечь программиста от возможных проблем портирования кода. Тяжело оговорить тонкости для каждого типа в отдельности, зато выделив две группы, можно сформулировать для них общие правила. А потом уже от общего перейти к частному. Тогда и станет очевидно, где нужно писать Integer, а где Longint, где Char, а где AnsiChar, где Cardinal, а где DWORD. Гораздо проще оговорить правила игры для категории типов, и указать, какие типы к каким категория относятся, чем оговаривать для каждого по отдельности.
                                А теперь посмотри, какие типы в Delphi названы разработчиками общими, а какие - фундаментальными. И все сразу станет на свои места. В справке по этому поводу ошибок нет и от версии к версии ничего там на этот счет не менялось.

                                С вышесказанным согласен?

                                Добавлено
                                Цитата Rouse_ @
                                ЗЫ: маленький хинт - я верю только MSDN, дельфевую справку вообща раз 10 за все время открывал и то случайно мимо ESC промахивался


                                Дык потом тогда не плакайте, что у вас на юникод или на Win64 проект на Delphi не переносится. Предупреждали ведь. Но как известно, невозможно заставить лошадь напиться, можно лишь подвести ее к ручью с водой... ;) В Delphi Char с самого начала заявлялся как общий, что бы там в MS не наговорили...
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0403 ]   [ 15 queries used ]   [ Generated: 15.07.24, 12:34 GMT ]