Планы на следующую версию (или одну из них).
Собираюсь преобразовать интерфейсы примитивных типов к структурам (value типам, передаваемым по значению). Кандидаты на это преобразование - курсор редактора в первую очередь и, может, геометрические типы во вторую (IRect, IStream; IPoint уже переделан в struct Point).
Подход с интерфейсами, конечно, имеет плюсы, но для примитивных типов данных скорей больше минусов. Производительность в первую очередь приходит на ум, но это даже не главное. Главней неинтуитивность некоторых операций и прочие неудобства, например, очень неудобно сохранять данные таких типов (например IEditor.Cursor дает не копию данных курсора, а объект динамически привязанный к редактору). Неудобно и то, что изменение и даже чтение нескольких свойст подряд (строка и позиция курсора) приведут к нескольким вызовам Far API, хотя операции (получить\переместить курсор) атоммарные, по сути.
В случае с курсором будет так (PowerShell код для простоты):
Code: Select all
# получили курсор, это копия текущих данных
# (раньше это была привязка к реальному курсору)
$cursor = $editor.cursor
# делаем, что хотим с копией, это не влияет на редактор
# (раньше это отражалось автоматически в редакторе)
$cursor.Pos = ...
$cursor.Line = ...
....
# устанавливаем измененный или просто сохраненный курсор
# (раньше такого присвоения не предполагалось)
$editor.cursor = $cursor
Реализация может будет и другой слегка, еще подумаю, как подружить гладко Pos и TabPos в курсоре (может заведу два типа курсора, не мудря, или даже будет несколько свойств, например, Point Cursor, Point TabCursor - просто точки (для большинства операций этого достаточно), Cursor Frame - это полная инфа о куске редактора на экране; ну и соответственно они get\set для применения по схеме читаем\меняем или храним\присваиваем обратно).
Критикуйте. Если возражений нет, буду это дело дальше думать и, возможно, воплощать.