Что физически означает «тип»?

Я много слышал о «системе type », «строго типизированном языке» и так далее. В настоящее время я работаю над проблемой взаимодействия .NET COM, которая решает проблему «маршалинга». И AFAIK, маршалинг - это всего лишь преобразование между типами .NET и COM-типами.

Во многих сценариях, таких как язык программирования, когда речь идет о типах , нас беспокоит логическое значение.

Теперь Мне интересно: что означает «тип» физически ? В некотором смысле мы можем наблюдать и трогать.

В настоящее время я понимаю, что «тип» - это не что иное, как представление в памяти вычислительной сущности.

Большое спасибо вашим ответам.

Добавление-1

Некоторые цитаты из MSDN :

Маршалинг простой, blittable Маршалинг - это преобразование между типами .NET и COM-типами.

Во многих сценариях, таких как язык программирования, когда речь идет о типах , нас беспокоит логическое значение.

Теперь мне интересно : что означает «тип» физически ? В некотором смысле мы можем наблюдать и трогать.

В настоящее время я понимаю, что «тип» - это не что иное, как представление в памяти вычислительной сущности.

Большое спасибо вашим ответам.

Добавление-1

Некоторые цитаты из MSDN :

Маршалинг простой, blittable Маршалинг - это преобразование между типами .NET и COM-типами.

Во многих сценариях, таких как язык программирования, когда речь идет о типах , нас беспокоит логическое значение.

Теперь мне интересно : что означает «тип» физически ? В некотором смысле мы можем наблюдать и трогать.

В настоящее время я понимаю, что «тип» - это не что иное, как представление в памяти вычислительной сущности.

Большое спасибо вашим ответам.

Добавление-1

Некоторые цитаты из MSDN :

Маршалинг простой, blittable значит физически ? В некотором смысле мы можем наблюдать и трогать.

В настоящее время я понимаю, что «тип» - это не что иное, как представление в памяти вычислительной сущности.

Большое спасибо вашим ответам.

Добавление-1

Некоторые цитаты из MSDN :

Маршалинг простой, blittable значит физически ? В некотором смысле мы можем наблюдать и трогать.

В настоящее время я понимаю, что «тип» - это не что иное, как представление в памяти вычислительной сущности.

Большое спасибо вашим ответам.

Добавление-1

Некоторые цитаты из MSDN :

Маршалинг простой, blittable структуры через сначала управляемая / неуправляемая граница требует, чтобы управляемые версии каждого родная структура должна быть определена. Эти структуры могут иметь любое юридическое название; нет никакой связи между родная и управляемая версия двух структуры, отличные от их данных раскладка. Поэтому важно, чтобы управляемая версия содержит поля одинакового размера и одинакового размера заказ как родная версия. (Там есть нет механизма для обеспечения того, чтобы управляемые и родные версии структура эквивалентна, так несовместимости не станет очевидно до времени выполнения. Это ответственность программиста за обеспечение что две структуры имеют одинаковое расположение данных.)

Что касается Marshaling, то это имеет значение расположение.

8
задан alain.janinm 29 April 2012 в 15:05
поделиться

10 ответов

Я думаю, что есть три аспекта «типов» в программировании (и они, вероятно, пересекаются, поэтому не воспринимайте это как жесткое разделение):

  • A type является элементом набора типов , и каждая программа / сборка / модуль определяет такой набор. Это самая теоретическая идея, которую я могу придумать, и, вероятно, она наиболее полезна для логиков и математиков. Он очень общий и позволяет вам определить идею системы типов поверх него. Например, среда программирования может определять отношение для этих типов, например отношение присваивается .

  • Тип - семантическая категория. Это лингвистическая или когнитивная идея; Другими словами, это наиболее полезно для людей, которые думают о том, как запрограммировать компьютер. Тип инкапсулирует то, что мы думаем как «вещи, принадлежащие к категории». Тип может определяться общим назначением сущностей. Эта категоризация по назначению, конечно, произвольна, но это нормально, поскольку объявление типов в программировании тоже произвольно.

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

Какое значение типа вы выберете, зависит от вашего домена. Как уже говорилось, если вы логик, исследующий, как доказать свойства программы, первое определение будет более полезным, чем третье, потому что структура данных (обычно) не имеет отношения к доказательству. Если вы разработчик оборудования или программист низкоуровневой системы, такой как CLR или JavaVM, вам нужна третья идея, а первая вас не волнует. Но к обычному программисту , который просто хочет продолжить свою задачу, вероятно, подходит средний вариант.

15
ответ дан 5 December 2019 в 06:52
поделиться

Тип - это метаданные о битах и ​​байтах, которые определяют, как управлять ими осмысленным и безопасным образом.

2
ответ дан 5 December 2019 в 06:52
поделиться

Я бы сказал, что у типа может быть несколько значений.

Я предпочитаю его значение как «Ограничения интерфейса». (Хорошо написанный объектный код определяет все данные в памяти как частные).

И в таком случае тип абсолютно НЕ связан с представлением в памяти. Напротив, это всего лишь договор о методах его членов.

1
ответ дан 5 December 2019 в 06:52
поделиться

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

0
ответ дан 5 December 2019 в 06:52
поделиться

Языки строгого типа IIRC применяют типы объектов во время компиляции, например число должно быть типа int, float и т. д. На языках со слабой типизацией вы можете сказать жираф = 1 + лягушка * 100 долларов / «1 мая», и типы будут разрешены во время выполнения. И обычно вы получаете множество ошибок во время выполнения.

В ситуациях обмена данными (например, COM, CORBA, RPC и т. Д.) Очень сложно обеспечить соблюдение типов из-за двоичной совместимости (прямой порядок байтов, обратный порядок байтов) и форматов (как вы представляете строки и даты при переходе с одного языка на другой). другой, каждый с разными компиляторами?). Следовательно, маршалинг пытается разрешить типы каждого параметра. ASN.1 был одной из многих попыток построить структуру «универсальных типов» при обмене данными между машинами.

0
ответ дан 5 December 2019 в 06:52
поделиться

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

0
ответ дан 5 December 2019 в 06:52
поделиться

Тип - это связное слово. Когда вы знаете тип чего-то, вы знаете, сколько памяти это занимает, как хранятся его фрагменты, но, что более важно, вы также знаете, что вы можете с этим делать. Например, есть несколько целочисленных типов, которые занимают столько же памяти, что и указатель. Однако вы можете умножить один целочисленный тип на другой (например, 3 раза по 4), но вы не можете умножить два указателя вместе. Вы можете вызвать метод Foo () для некоторого определяемого пользователем типа (структуры или класса), который имеет метод Foo, например, написав x.Foo (), но вы не можете сделать это для другого определяемого пользователем типа у которого нет метода Foo. Вы можете преобразовать между одними парами типов, но не между другими, или вы можете преобразовать A в B, но не B в A. И так далее. В некоторых языках также есть различия, например, является ли он константой или нет.

Компиляторы и среда выполнения несут большой объем информации, которая складывается в тип элемента. Физическая сущность того, сколько байтов он занимает (или что-то еще, что вы могли бы правдоподобно назвать осязаемым) на самом деле не имеет значения.

0
ответ дан 5 December 2019 в 06:52
поделиться

Во многих языках физически типы существуют только во время компиляции. Особенно это касается старых языков. Я бы предположил, что в C есть такие типы, которые вообще никогда не существуют в памяти , во всяком случае , пока программа работает.

В других языках, особенно в тех, которые разрешают доступ к информации о типах во время выполнения (например, C ++ с RTTI , C # или любой динамический язык, например Python), типы являются просто метаданными. Двоичное описание типа. Знаете, такие вещи вы получите, если попытаетесь сериализовать данные в двоичный поток.

3
ответ дан 5 December 2019 в 06:52
поделиться

Я бы сказал прямо противоположное. Это языковое представление битов и байтов в памяти.

2
ответ дан 5 December 2019 в 06:52
поделиться

«Тип» - это набор, члены («объекты») которого имеют дискретное конечное представление и полезный набор общих атрибутов.

Фактическое представление объекта в памяти не обязательно является частью определения типа. То есть один объект может иметь несколько представлений в памяти. Важно то, что объект не может быть бесконечным или аналоговым.

Общие атрибуты типа могут быть любыми. В объектно-ориентированной системе атрибуты будут включать (на низком уровне) данные и поведение. Уведомления о событиях также распространены. Некоторые атрибуты могут быть условными без нарушения определения типа (если логический атрибут X истинен, атрибут Y также существует), если правила согласованы для всех объектов в типе.

«Подтип» - это подмножество типа, члены которого имеют более широкий набор общих атрибутов.

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

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

Однако, если кто-то видит типы в терминах их атрибутов, тогда преобразования из одной системы типов в другую будут включать высокоуровневые преобразования полей данных между соответствующими объектами.Определение совместимости объектов будет основано на их основных атрибутах, и проблемы станут менее вероятными.

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

1
ответ дан 5 December 2019 в 06:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: