Size: a a a

2021 January 13

0

000Sanya in dlang.ru
Oleg B
ну да
получается ты в тип запекаешь сериализацию в конкретный формат?
источник

OB

Oleg B in dlang.ru
000Sanya
получается ты в тип запекаешь сериализацию в конкретный формат?
да нет же
источник

OB

Oleg B in dlang.ru
Oleg
итак, у нас есть объект, который формирует структуру данных {BeginScope, IntValue, StringValue, EndScope}
1. этот объект получает ISerializator { beginScope... } и сам дерагает его методы.
тогда все сериализаторы наследуются от этого интерфейса
2. любой независимый сериализатор может опрашивать Формирователь (знает его АПИ) и пихать данные как хочет. сериализаторы ваще не связаны какими либо зависимостями или интерфейсами
я ± так и сделал)
источник

O

Oleg in dlang.ru
т.е. push (пихается в сериализитор. ООП) & poll (сериализатор сам забирает все необходимое. не надо ООП)
источник

DH

Dark Hole in dlang.ru
Oleg B
для этого 'коду' нужно знать тип
Не вижу проблемы. Всё будет известно в CT.
источник

DP

Dmitry Popov in dlang.ru
По-хорошему там вовсе не в размере бинарника дело.
Дело в том, как С++ и D реализуют шаблоны/генерики.
template is not a function.
Шаблонная функция это еще не настоящая функция, она сама по себе ни во что не компилируется, пока компилятор не увидит ее вызов с конкретным типом. Шаблонные типы подставляются статически при компиляции и потому фиксированы, это статический полиморфизм, а тут в задаче нужен динамический, рантайм полиморфизм. Он совсем другими механизмами достигается.

Что интересно, во многих других языках генерики сделаны иначе, и там обычно нет такой проблемы.
источник

O

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

OB

Oleg B in dlang.ru
Oleg
я так понял, Олег не хотел, чтобы каждый сериализатор сам бегал по любому объекту и раздувал неограниченно итоговый код
не не не, в D просто нельзя переопределить шаблонный метод, я обошёл эту проблему через сериализацию в так скажем набор токенов (на практике вызовы методов интерфейса)
источник

OB

Oleg B in dlang.ru
можно по сути и в набор токенов напрямую перевести, но на другой стороне нужен будет разбор этих токенов
источник

OB

Oleg B in dlang.ru
а так на другой стороне у меня интерфейс, который знает что писать когда вызывается конкретный метод
источник

0

000Sanya in dlang.ru
Oleg B
а так на другой стороне у меня интерфейс, который знает что писать когда вызывается конкретный метод
так это же хорошо, не?
источник

OB

Oleg B in dlang.ru
000Sanya
так это же хорошо, не?
ну да, просто ООП
источник

0

000Sanya in dlang.ru
Oleg B
ну да, просто ООП
ну то есть в типе шаблоном генерится то, какие методы вызывать у сериализатора?
источник

DH

Dark Hole in dlang.ru
Oleg B
даже если функция печати будет шаблонной, как её передать без инстацирования, как её подменить после инстацирования
Мы сейчас теоретическую проблему подмены функции рассматриваем или вполне конкретную задачу?
источник

OB

Oleg B in dlang.ru
теоритеческую
источник

0

000Sanya in dlang.ru
ну теоретически нам надо компилятор таскать с собой и мы решим много проблем
источник

0

000Sanya in dlang.ru
то есть Jit/aot
источник

DH

Dark Hole in dlang.ru
Oleg B
теоритеческую
Тогда вопросов нет
источник

DH

Dark Hole in dlang.ru
А в практическом плане можно было бы обойти...
источник

OB

Oleg B in dlang.ru
000Sanya
ну то есть в типе шаблоном генерится то, какие методы вызывать у сериализатора?
https://github.com/deviator/datasink/blob/master/source/datasink/base.d#L109 в шаблонном методе, который нельзя перегрузить
источник