Size: a a a

2020 September 18

VA

Viktor Akselrod in Delphi & Lazarus
по-моему, typed file уже давно пора удалить совсем из языка 🙂
источник

SB

Sergey Bodrov in Delphi & Lazarus
Viktor Akselrod
по-моему, typed file уже давно пора удалить совсем из языка 🙂
Недооцененная фича, при грамотном подходе позволяет в пару строк делать сложные штуки впроде DataSnap.
источник

SB

Sergey Bodrov in Delphi & Lazarus
Но нужна некоторая доработка, чтобы работало с managed типами.
источник

VA

Viktor Akselrod in Delphi & Lazarus
Sergey Bodrov
Недооцененная фича, при грамотном подходе позволяет в пару строк делать сложные штуки впроде DataSnap.
зачем? это давно морально устарело.
есть более современные методы
если говорить о DataSnap, то не вижу аналогии.
все стремятся унифицировать протоколы, чтобы можно было не задумываясь писать на разных языках.  typed file ни разу не тянет на кросс фичу
источник

SB

Sergey Bodrov in Delphi & Lazarus
Это по сути типизация стандартного ввода-вывода. То есть можно будет древними стандартными функциями гонять строки, массивы, варианты через сокеты, пайпы, файлы..
источник

SB

Sergey Bodrov in Delphi & Lazarus
А "под капотом" там может подключаться обработчик-сериализатор в json, xml, protobuf и тд. по вкусу.
источник

SB

Sergey Bodrov in Delphi & Lazarus
К сожалению, к классам это не применимо, потому что класс это тупой указатель.
источник

VA

Viktor Akselrod in Delphi & Lazarus
дак в  typed file нет никакого капота. точнее юзеру он недоступен.
есть сериализаторы. их надо развивать. одного json недостаточно.
их опять же typed file тут не место
источник

SB

Sergey Bodrov in Delphi & Lazarus
Обычный type file под капотом это record, в котором есть ссылки на функции read() и write(), что позволяет переопределять операции чтения-записи на свои.
источник

SB

Sergey Bodrov in Delphi & Lazarus
К примеру, перенаправление стандартных чтения-записи в TStream - https://github.com/serbod/NovaLib/blob/master/StreamIO.pas
источник

SB

Sergey Bodrov in Delphi & Lazarus
Позволяет в TMemoryStream читать-писать построчно стандартными ReadLn() / WriteLn()
источник

SB

Sergey Bodrov in Delphi & Lazarus
Ну или в любой другой TStream - файл, сокет, пайп..
источник

VA

Viktor Akselrod in Delphi & Lazarus
@desc   Version 1.0 created 4 Januar 2001<BR>

это все объясняет
источник

VA

Viktor Akselrod in Delphi & Lazarus
Sergey Bodrov
Позволяет в TMemoryStream читать-писать построчно стандартными ReadLn() / WriteLn()
источник

SB

Sergey Bodrov in Delphi & Lazarus
Я логи пишу через обычный WriteLn(LogFile, 'test'), который может ссылаться на "пустышку", а может писать и в консоль, и в файл, и куда мне угодно. Через TTextWriter это сложнее.
источник

VA

Viktor Akselrod in Delphi & Lazarus
Sergey Bodrov
Я логи пишу через обычный WriteLn(LogFile, 'test'), который может ссылаться на "пустышку", а может писать и в консоль, и в файл, и куда мне угодно. Через TTextWriter это сложнее.
это твой выбор. современный путь делфи несколько иной.
TStream как раз и был сделан, что не задумываться об источнике данных.
подкладываешь нужную реализацию получаешь файл, память, сеть и тд
источник

SB

Sergey Bodrov in Delphi & Lazarus
А если нужно передавать не текст, а массивы и структуры, то придется создавать зоопарк классов под каждый тип.
источник

SB

Sergey Bodrov in Delphi & Lazarus
Viktor Akselrod
это твой выбор. современный путь делфи несколько иной.
TStream как раз и был сделан, что не задумываться об источнике данных.
подкладываешь нужную реализацию получаешь файл, память, сеть и тд
У TStream нет стандартного абстрактного интерфейса. Вернее есть конкретно для OLE/COM и оно не совместимо с TStream.
источник

VA

Viktor Akselrod in Delphi & Lazarus
Sergey Bodrov
А если нужно передавать не текст, а массивы и структуры, то придется создавать зоопарк классов под каждый тип.
тут идет ограничение простыми типами.
что делает typed file практически бесполезными в реальной жизни
источник

SB

Sergey Bodrov in Delphi & Lazarus
Приходится от TStream наследоваться, а это сильно ограничивает применимость.
источник