Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.192] |
|
|
Правила раздела:
| Страницы: (495) « Первая ... 362 363 [364] 365 366 ... 494 495 ( Перейти к последнему сообщению ) |
Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
|
Сообщ.
#5446
,
|
|
|
|
Цитата D_KEY @ А вообще интересно, что ты противоречишь своим предыдущим сообщениям, где утверждал, что для реализации АТД "субтипирование" необходимо. я этого не утверждал, я к этому склонялся и где я противоречу? напомню, что в Хаскелле нет поддержки АТД как языковой абстракции |
|
Сообщ.
#5447
,
|
|
|
|
Цитата korvin @ Цитата D_KEY @ А вообще интересно, что ты противоречишь своим предыдущим сообщениям, где утверждал, что для реализации АТД "субтипирование" необходимо. я этого не утверждал, я к этому склонялся Ок. Цитата в Хаскелле нет поддержки АТД как языковой абстракции Объясни мне, зачем тебе формальное наличие АТД, если есть тайпклассы, которые позволяют делать все тоже самое(правда не в рантайме)? |
|
Сообщ.
#5448
,
|
|
|
|
Цитата D_KEY @ Объясни мне, зачем тебе формальное наличие АТД мне оно не нужно. Цитата D_KEY @ если есть тайпклассы, которые позволяют делать все тоже самое(правда не в рантайме)? не позволяют. я тебе приводил пример со списком. и не раз. потому что типы описывают данные. с которыми мы работаем в рантайме. а тайпклассы описывают типы. с которыми мы работаем в компайлтайме. |
|
Сообщ.
#5449
,
|
|
|
|
Цитата korvin @ Цитата D_KEY @ если есть тайпклассы, которые позволяют делать все тоже самое(правда не в рантайме)? не позволяют. я тебе приводил пример со списком. и не раз. потому что типы описывают данные. с которыми мы работаем в рантайме. а тайпклассы описывают типы. с которыми мы работаем в компайлтайме. Так я тоже самое и написал, с чем ты споришь? Т.е. они не позволяют делать это в рантайме, но они описывают тоже самое для проверки типа в компайлтайме. |
|
Сообщ.
#5450
,
|
|
|
|
Цитата D_KEY @ Так я тоже самое и написал, с чем ты споришь? Т.е. они не позволяют делать это в рантайме, но они описывают тоже самое для проверки типа в компайлтайме. ты не понял... АТД описывает свойства данных, а тайпкласс описывает свойства типа данных. у них предмет описания разный. |
|
Сообщ.
#5451
,
|
|
|
|
Цитата korvin @ ты не понял... АТД описывает свойства данных, а тайпкласс описывает свойства типа данных. у них предмет описания разный. Тип нужен исключительно для описания свойств данных. Описывая тип, ты описываешь свойства данных. В случае абстрактных типов это не отличимо. Добавлено Т.е. в случае интерфейсов ты описываешь контракт объектов, в случае тайпкласса - описываешь требования к типу, которым описывается контракт объектов. |
|
Сообщ.
#5452
,
|
|
|
|
Цитата D_KEY @ Тип нужен исключительно для описания свойств данных. Описывая тип, ты описываешь свойства данных. В случае абстрактных типов это не отличимо. Т.е. в случае интерфейсов ты описываешь контракт объектов, в случае тайпкласса - описываешь требования к типу, которым описывается контракт объектов. я не описываю требования к типу с помощью тайпкласса, я описываю набор операций над типами. |
|
Сообщ.
#5453
,
|
|
|
|
Цитата korvin @ я не описываю требования к типу с помощью тайпкласса, я описываю набор операций над типами. Как ни крути, ты делаешь именно это. Даже название механизма об этом же говорит. Ты можешь сделать какой-нибудь Ord тайпклассом в одном языке или интерфейсом/абстрактным классом в другом - это ничего не изменит, программист хотел задать требования наличия соответствующих операций с соответствующей семантикой. Добавлено Цитата haskell.org/haskellwiki/Abstract_data_type In Haskell, it is also possible to describe an interface to a data type using the Type class concept. This provides a mechanism for making the implementation of operations for a data type abstract as well. For example, the above interface for the abstract Tree data type might be described as: ![]() ![]() class Tree t where nil :: t a node :: t a -> a -> t a -> t a left :: (MonadPlus m) => t a -> m (t a) right :: (MonadPlus m) => t a -> m (t a) value :: (MonadPlus m) => t a -> m a Note that this description is even more abstract than the description of the Tree abstract data type above. This interface will also make the implementation of the tree abstract (not just the element type). This interface allows the user to change the implementation of the tree data type later easily. http://www.haskell.org/haskellwiki/Abstract_data_type |
|
Сообщ.
#5454
,
|
|
|
|
Цитата D_KEY @ Ты можешь сделать какой-нибудь Ord тайпклассом в одном языке или интерфейсом/абстрактным классом в другом - это ничего не изменит, программист хотел задать требования наличия соответствующих операций с соответствующей семантикой. Да сколько можно-то. Интерфейсы приводят к субтипированию (C++, Java, C#, Delphi, Go, Racket, etc.). Тайпклассы -- нет. К чему приводит эта разница я уже написал: 1) невозможность использования разных типов с одним тайпклассом в одном контексте ![]() ![]() typeclass C type A : C type B : C xs {a : C} : [a] = [A, B] -- ошибка типизации 2) потеря статической информации о типе при использовании интерфейсов ![]() ![]() interface I type A <: I type B <: I xs : [I] = [A, B] -- нет ошибки типизации head xs -- имеет тип I все, больше нечего обсуждать по этому вопросу. |
|
Сообщ.
#5455
,
|
|
|
|
Цитата korvin @ Цитата D_KEY @ Ты можешь сделать какой-нибудь Ord тайпклассом в одном языке или интерфейсом/абстрактным классом в другом - это ничего не изменит, программист хотел задать требования наличия соответствующих операций с соответствующей семантикой. Да сколько можно-то. Интерфейсы приводят к субтипированию (C++, Java, C#, Delphi, Go, Racket, etc.). Тайпклассы -- нет. К чему приводит эта разница я уже написал: 1) невозможность использования разных типов с одним тайпклассом в одном контексте ![]() ![]() typeclass C type A : C type B : C xs : [C] = [A, B] -- ошибка типизации 2) потеря статической информации о типе при использовании интерфейсов ![]() ![]() interface I type A <: I type B <: I xs : [I] = [A, B] -- нет ошибки типизации head xs -- имеет тип I все, больше нечего обсуждать по этому вопросу. Так с этим никто не спорит. Только это не противоречит тому, что пишу я. |
|
Сообщ.
#5456
,
|
|
|
|
есть структура
![]() ![]() typedef struct mystruct { DWORD f1; WORD f2; DWORD f3 } в некоторых случаях её размер равен 10, а в некоторых 12, вся проблема в выравниваниях смещений полей. всё зависит от парметров компиляции. в delphi я могу указать packed record и структура будет иметь размер тот который должен, а не тот который с выравниваниями. Т.е. я могу использовать одновременно выровненные структуры и невыровненные. Внимание вопрос: как тоже самое сделать в C++? |
|
Сообщ.
#5457
,
|
|
|
|
В старом стандарте это платформозависимо, гугли pragma pack, поддерживается почти всеми реализациями.
В новом стандарте что-то должно было быть стандартное на тему выравнивания, но сейчас не могу посмотреть |
|
Сообщ.
#5458
,
|
|
|
|
да плевать мне на плаформу!
я хочу чтобы вот одна структура была размерностью как положено (с выравниваниями), а другая структура без выравниваний и всё в одном проекте и в одном .cpp файле. |
|
Сообщ.
#5459
,
|
|
|
|
Ahilles, так я же сказал pragma pack. Или гугл не работает у тебя?
|
|
Сообщ.
#5460
,
|
|
|
|
блин, а я потроллить хотел, не получилось. в следующий раз какую-нибудь тему по интереснее придумаю
|