WikiProject Computing / Программное обеспечение / CompSci | (Номинальный C-класс, высокая важность) |
---|---|
Основные типы и встроенные типы
Мне немного неудобно называть первоклассные функции «примитивными типами». Я думаю, что это сбивает с толку два в основном ортогональных понятия: (1) базовые типы и (2) встроенные типы. Один или оба они иногда называются «примитивными», что не очень помогает.
Re (1): Набор типов большинства современных языков программирования определяется рекурсивно и включает составные типы, которые могут быть получены из более простых типов. В основных типов являются максимально простыми типами. Например, в C типы int, short, double и т. Д. Являются базовыми. Но массивы, указатели, функции - нет, поскольку они обозначают массивы, указатели на другие типы и функции от них. Строки в этом отношении немного сложны, поскольку некоторые языки считают их производными (списки / массивы символов, как в C), а другие считают их примитивными (например, Python, который не имеет символьного типа).
Re (2): Встроенные типы - это просто типы со специальной поддержкой стандартной среды языка. Итак, C имеет языковые конструкции для массивов и строковых литералов, а также стандартные библиотечные процедуры для управления ими (qsort, strcat и т. Д.). Однако это не делает массивы примитивными типами. Синтаксис массива [] в C можно рассматривать как конструктор унарного типа, сопоставляющий тип компонента, такой как int, с типом массива, таким как int [] (в Java для них лучше синтаксис). Конструкторы типов и производные от них типы могут быть встроенными, но они определенно не являются базовыми.
Теперь вопрос в том, что вообще означает «примитивный»? Я догадываюсь, что это обычно означает «базовый» (т.е. нерекурсивный). Java, например, определяет примитивные типы, но String не является одним из них, даже если он встроен. - MarkSweep 23:51, 12 ноября 2004 г. (UTC)
(Исключение отступов - пожалуйста, не стесняйтесь применять, если хотите) - Отчет меньшинства
Я ценю ваш дискомфорт, но подозреваю, что он больше связан с ориентированной на C природой большинства современных диалогов о вычислениях. Действительно, существуют языки, в которых примитивные типы данных - это вещи, которые в C и подобных языках могут быть получены только в довольно искаженном виде, который вы описываете. Для некоторых языков Closure настолько примитивен, насколько это возможно, как бы странно это ни казалось. Замыкание - это не просто какой-то чудесный придурок, который реализуется как базовый тип в Lisp или Scheme , это часть базового концептуального дизайна языка. - Отчет меньшинства 00:20, 13 ноября 2004 г. (UTC)
(Хорошо, мы можем сделать это без отступов).
Не поймите меня неправильно, я за встроенные закрытия. Я просто думаю, что приравнивание «встроенного» к «базовому» вводит в заблуждение. «Встроенный» относится к проблеме реализации, зависящей от языка / библиотеки. Можно сказать, что Java имеет встроенные хэш-карты, потому что в стандартной библиотеке есть классы, которые их поддерживают; с другой стороны, в Java нет прямой языковой поддержки для хэш-карт, как, скажем, в Python. Тем не менее, концептуально хэш-карты, функции / замыкания и т. Д. Не являются базовыми, поскольку они рекурсивно определены в терминах других типов. Это карта от (типа) к (типу) и функция от (type, type, ...) до (type). Если язык не является полностью «нетипизированным» (т. Е. Существует ровно один тип), набор типов определяется рекурсивно в терминах базовых типов (int, boolean, double и т. Д.) И правил для получения неосновных типов (int [], функции / преобразования из логических значений в двойные, int * и т. д.). Обычно все базовые типы являются встроенными (бывают мелкие исключения, например, в Java есть базовый нулевой тип, а именно тип литерала null
, но нет синтаксиса для ссылки на этот тип). Но обратное явно неверно, т.е. язык может иметь встроенные составные типы, такие как int [] или double *. Итак, я предполагаю, что я говорю, отличите «встроенный» от «базового» типа; любой из них можно назвать «примитивным», так что эта статья будет подходящим местом для разоблачения этих вещей. - MarkSweep 00:50, 13 ноября 2004 г. (UTC)
Я полностью согласен. Вся статья была несколько сбита с толку по этому поводу: иногда примитив использовался для обозначения базового, а иногда - для обозначения встроенного. Я пытался это исправить. Дэвид-Сара Хопвуд ( разговор ) 00:59, 19 декабря 2008 г. (UTC)
Я парень (Джейк из Сан-Диего), который сделал правку, в которой говорится, что мнения по этому поводу расходятся. Например, IMO, если встроенный тип построен из других типов, он не является примитивом, и не имеет значения, создал ли этот тип разработчик языка или конечный пользователь. В этом представлении один из примитивных типов массива C будет указателем, а другие будут примитивами, составляющими тип данных элементов в массиве. Если C не имел типа char или не использовал свой код при построении строкового типа данных, который был родным для языка (без включения стандартных библиотек), тогда строка была бы примитивом. —Предыдущий комментарий без подписи, добавленный 76.88.6.105 ( обсуждение ) 03:52, 31 декабря 2008 г. (UTC)
«Значения примитивных типов не имеют общего состояния».
Я наткнулся на это предложение в предисловии к определению Java. Не понимая, что это значит, я поискал его в Google. Единственное другое происшествие было на этой странице, и я до сих пор не знаю, что это значит. Что это за «состояние», которое не разделяют примитивные переменные? Какие переменные разделяют его, если таковые имеются? В чем его значение? Зарки ( разговор ) 11:42, 22 февраля 2008 (UTC)
Я добавил просьбу о разъяснении. Может быть связано с отсутствием указателей в Java? В этом смысле примитивы МОГУТ разделять состояние на других языках. Ароза ( разговор ) 04:23, 9 марта 2008 (UTC)
- Подразумевается, что два значения примитивного типа не содержат одновременно ссылки на какую-то общую подструктуру - например, в функциональных языках обычно для двух древовидных структур данных оба содержат и относятся к одному и тому же поддереву. Я не совсем уверен, должно ли это быть частью определения примитивного типа - кажется, это согласуется с традиционной классификацией, но потенциально является оригинальным исследованием. Dcoetzee 20:09, 10 марта 2008 г. (UTC)
Да, я считаю, что цель здесь состоит в том, чтобы объяснить, что присвоение значения одной переменной типа значения другой переменной создает копию значения, отличную от ссылки (информатика) . Но это действительно утверждение, относящееся к идее «типа значения», которое действительно должно быть отделено от «примитивного типа», как обсуждалось ранее. Voteformike ( разговор ) 09:08, 21 июня 2008 (UTC)
Типы значений
Тип значения перенаправляется сюда. Типы значений не всегда являются примитивными типами. Например, C # позволяет создавать настраиваемые типы значений, которые могут быть составными. 84.87.183.181 ( разговорное ) 10:40, 3 марта 2008 (UTC)
Целочисленный тип также перенаправляется сюда. Я бы предположил, что набор интегральных типов является подмножеством примитивных типов для большинства языков, но я надеялся на что-то более непосредственно связанное с концепцией «интегрального типа». Я предполагаю, что интегральный тип - это такой тип, значение которого хранится как целое число (например, char, int и enum в C), но мне нужны некоторые пояснения. Рейно ( разговор ) 16:43, 18 марта 2008 (UTC)
Рейно - Вы абсолютно правы во всем, что сказали. Целочисленные типы не должны перенаправляться сюда, потому что все возможные целочисленные типы не являются примитивами во всех возможных языках. (Джейк в Сан-Диего). —Предыдущий комментарий без подписи, добавленный 76.88.6.105 ( обсуждение ) 03:57, 31 декабря 2008 г. (UTC)
Заслуживает ли эта тема полной статьи?
Эта статья не кажется достаточно обоснованной. Понятие «примитивный тип» довольно расплывчато и зависит от языка, поэтому мало что можно сказать в целом об этом классе, что не лучше сказано в самой статье о типах данных . То же для составного шрифта . Действительно, различие между ними весьма спорно; Например, S-выражения являются примитивным типом для LISP, но определенно составным типом, а строки в C - это просто массивы. Мне кажется, что примитивный тип и составной тип должны быть очень короткими статьями, немного больше, чем словарные статьи, со всем материалом, перенесенным в тип данных или другие статьи. Всего наилучшего, - Хорхе Стольфи ( разговор ) 19:34, 10 мая 2009 г. (UTC).
Эта страница является (плохой) оригинальной работой и не принадлежит википедии.
Это должно быть сообщение в блоге или что-то в этом роде. В статье делается попытка вывести определение «примитивный тип» из Java как общий термин, не имеющий общего употребления. В большинстве других языков нет понятия «примитивный». Для таких языков, как C и C ++, где разметка памяти наполовину ручная, различие бессмысленно. Для языков более высокого уровня, таких как Python и Haskell, где все значения обрабатываются одинаково, различие снова бессмысленно. Вся эта статья взяла на себя удар терминологии Java и попыталась разбить ею всю CS. Даже C #, наиболее близкий к Java язык, использует термин «примитив» по-другому. [ [1] ]
в C строки являются составным, но встроенным типом данных
Я хотел бы поставить это под сомнение. Я бы сказал, что в C строки - это объекты данных, а не тип данных. Я предполагаю, что «тип» подразумевает, что можно использовать assignemnt, == сравнение и т. Д. Для этого типа. В C структуры - это тип. Таковы массивы. Строки - это 8-битные последовательности данных ASCII, оканчивающиеся знаком '\ 0'. Я бы не сказал, что это тип, я бы сказал, что это объект данных. По определению, строка C «ограничивает содержимое переменной», например. для строк последний символ должен быть '\ 0'
- 192.100.112.203 ( обсуждение ) 08:21, 28 сентября 2011 г. (UTC)
Определение слова "примитив"
Главное предложение требует цитаты. Это не может быть хорошо. Но если определение станет очевидным для компилятора, это может быть хорошо? Для меня компилятор является основным (примитивным) двигателем (данных) между разумом с его концептуальными типами данных и структурами данных и машиной; PDT - это органическая химия вычислений, потому что они производятся во всем, от ячеек памяти до структур данных. Я думаю, что они так же важны для вычислений, как и множества для математики. Фактически теория типов лежит в основе наивной теории множеств . Типы продуктов сочетают в себе науку (математику и вычисления) и искусство, и поэтому я думаю, что знание примитивных данных имеет практическое (дизайн компилятора) и интересное (семиотическое) значение и, таким образом, может вызвать пристальный интерес. PDT объединяют программистов и машины, создавая важный тип личного продукта. Я думаю, что PDT следует определять с самого начала
- Cp i r al Cpiral 20:44, 29 сентября 2011 г. (UTC)
Диапазоны целочисленных типов в C и C ++
Стандарты C и C ++ допускают представление двух дополнений , дополнений единиц и значений со знаком для целочисленных типов . Это означает, что, например, диапазон 8-битов signed char
должен содержать -127, но не обязательно должен содержать -128. Следует ли это упомянуть в таблице в примитивном типе данных # Целые числа или это будет слишком подробно? - Tea2min ( разговор ) 06:54, 20 сентября 2018 г. (UTC)
- Я добавил соответствующее примечание в заголовок таблицы. Я надеюсь, что все в порядке. - Tea2min ( разговор ) 06:58, 20 сентября 2018 г. (UTC)