Size: a a a

2021 January 18

I

Igor in F# Chat
Anton Ternavsky
Ну string нельзя сувать
да. Но в целом размер структуры могли бы сократить
источник

AT

Anton Ternavsky in F# Chat
Igor
да. Но в целом размер структуры могли бы сократить
не, ссылки можно засунуть, но там таинство подбора типов маршалинга для корректной работы CLR при побайтовом копировании
источник

R

Roman in F# Chat
Vladimir Shchur
я запомнил, это из лекции @AnutaU про то как заимплементить полиморфизм)
это все понятно и прикольно, но если мы стираем типы после компиляции, то лишаемся метапрограммирования в реалиях дотнета. К тому же непонятно, как в массивы складывать эти ваши void*
источник

VS

Vladimir Shchur in F# Chat
Roman
это все понятно и прикольно, но если мы стираем типы после компиляции, то лишаемся метапрограммирования в реалиях дотнета. К тому же непонятно, как в массивы складывать эти ваши void*
типы не стираются, там же тэги есть на каждый тип, мы всегда знаем какую именно структуру потом воссоздать из байт массива
источник

R

Roman in F# Chat
Vladimir Shchur
типы не стираются, там же тэги есть на каждый тип, мы всегда знаем какую именно структуру потом воссоздать из байт массива
ну как это, у нас в итоге нет самого типа DU, есть только несвязанные кейсы
источник

AT

Anton Ternavsky in F# Chat
Либо если все таки припирает таскать ссылочные объекты в EventSourcing с использованием FieldOffset для компоновки структур, то придется извращаться с ручным подкладыванием атрибутов сериализации для каждого поля(если в шарпе это ваять). В фаршике я думаю мог бы компилер сделать :)
источник

VS

Vladimir Shchur in F# Chat
Roman
ну как это, у нас в итоге нет самого типа DU, есть только несвязанные кейсы
Есть тип все как сейчас, просто вместо двацати полей структур - одно динамическое поле модифицируемое в рантайме
источник

R

Roman in F# Chat
Vladimir Shchur
Есть тип все как сейчас, просто вместо двацати полей структур - одно динамическое поле модифицируемое в рантайме
а что с массивом делать? Сколько памяти выделять на ячейку типа этого DU?
источник

VS

Vladimir Shchur in F# Chat
в конструкторе DU это передается какой конкретный тип, в конструкторе можно память и выделить
источник

R

Roman in F# Chat
Vladimir Shchur
в конструкторе DU это передается какой конкретный тип, в конструкторе можно память и выделить
Так ячейки же должны иметь одинаковый объем памяти, иначе доступ по индексу не вычислить
источник

VS

Vladimir Shchur in F# Chat
аа, ты про массив снаружи, там тоже размер будет фиксирован, то что в конструкторе передали + размер остальных полей
источник

VS

Vladimir Shchur in F# Chat
аа, я понял
источник

AT

Anton Ternavsky in F# Chat
Vladimir Shchur
в конструкторе DU это передается какой конкретный тип, в конструкторе можно память и выделить
Ну как по мне-пытаться выгадать память плотной компоновкой DU и при этом аллоцировать память в куче-ну его нафиг
источник

VS

Vladimir Shchur in F# Chat
Roman
Так ячейки же должны иметь одинаковый объем памяти, иначе доступ по индексу не вычислить
тогда да, надо по самой жирной из структур чтобы был фиксированный размер
источник

R

Roman in F# Chat
ну вот то на то и выходит вроде)
источник

AT

Anton Ternavsky in F# Chat
Когда-нибудь короче и в фаршик добавят. :)
источник

I

IdiocyAcceptance in F# Chat
Vladimir Shchur
выделить динамически память на стеке по выбранному кейсу и создать структуру на ней)
Мб с реф структурами и заедет, но не с обычными
источник

I

Igor in F# Chat
Anton Ternavsky
не, ссылки можно засунуть, но там таинство подбора типов маршалинга для корректной работы CLR при побайтовом копировании
ну может только с хаками какими-то, потому что так оно ругается в рантайме:
Could not load type 'S' from assembly 'TestF5, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' because it contains an object field at offset 4 that is incorrectly aligned or overlapped by a non-object field.
источник

AT

Anton Ternavsky in F# Chat
Igor
ну может только с хаками какими-то, потому что так оно ругается в рантайме:
Could not load type 'S' from assembly 'TestF5, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' because it contains an object field at offset 4 that is incorrectly aligned or overlapped by a non-object field.
Нужно извращаться с явным указанием как маршалится поле через атрибут MarshalAs
источник

I

Igor in F# Chat
а, ясно
источник