"Сад камней" или Тайны LCL (+ попытки улучшения )

Любые обсуждения, не нарушающие правил форума.

Модератор: Модераторы

Re: "Сад камней" или Тайны LCL (+ попытки улучшения )

Сообщение Лекс Айрин » 26.04.2019 21:07:45

Alex2013, ХайАсм изначально строится как аналог высокоуровневых языков управления техпроцессами. То есть, ограниченное количество связей, вход четко соответствует выходу и пр. в том же духе.
Графическая же среда программирования это скорее развитие линии формошлепство, но на более высоком уровне, когда в граф превращается любой более-менее структурированный элемент. То есть, сначала можно в проге быстренько набрать схему, а потом ее постепенно структурировать до элементарных конструкций. В идеале, вплоть до бинарного кода. Соответственно, нужен будет набор элементов для каждого уровня разработки.
Возьмём связи. В ХайАсме ты выбираешь одну из имеющихся и засыпаешь на связи другого компонента. Я бы сделал немного по другому. В списке выбираешь нужное поле, если надо, то создавая его, а в другом объекте тебе выдаётся список имеющихся уже в руки связей и так же возможность создания новой. После этого тебе открывается окошко в котором ты можешь видеть код в который эта связь превратилась. Чтобы сразу его можно было подправить. Если, конечно, данный уровень поддерживает генерацию кода или исходного текста. Да, эта схема намного сложнее, но она, после того как привыкнешь и если правильно спроектирована среда разработки намного удобнее. А в ХайАсме, текст на ЯВУ присутствует скорее для галочки. Да, его можно править, но сквозного соответствия нет.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: "Сад камней" или Тайны LCL (+ попытки улучшения )

Сообщение Alex2013 » 27.04.2019 03:12:40

Лекс Айрин писал(а):Alex2013, ХайАсм изначально строится как аналог высокоуровневых языков управления техпроцессами. То есть, ограниченное количество связей, вход четко соответствует выходу и пр. в том же духе.

В принципе верено но сильно сомневаюсь что автор изначально планировал такую заумь творить ... Ты смотрел в код что генерирует хайсам на паскале ? Там четком видно что никаких далеко идущих планов изначально не было... Практически весь код одно уровневой схемы запрятан в TClassMainForm_XXXXXXX.Create; (Если есть несколько уровней то это полная копия структуры только например в TClassChildFormEx_XXXXXXX.Create; ) В принципе ничто не мешало вообще все в один файл запихать . ВСЕ и никаких тебе методов обработки событий....
Но еще интереснее код элементов
Код: Выделить всё
unit hiRGB;

interface

uses Kol,Share,Debug;

type
  THIRGB = class(TDebug)
   private
    FColor:TColor;
   public
    _prop_R:integer;
    _prop_G:integer;
    _prop_B:integer;

    _data_B:THI_Event;
    _data_G:THI_Event;
    _data_R:THI_Event;
    _event_onRGB:THI_Event;

    procedure _work_doRGB(var _Data:TData; Index:word);
    procedure _var_Color(var _Data:TData; Index:word);
  end;

implementation

procedure THIRGB._work_doRGB;
var r,g,b:byte;
begin
   r := ReadInteger(_Data,_data_R,_prop_R);
   g := ReadInteger(_Data,_data_G,_prop_G);
   b := ReadInteger(_Data,_data_B,_prop_B);
   FColor := r + g shl 8 + b shl 16;
   _hi_CreateEvent(_Data,@_event_onRGB,integer(FColor));
end;

procedure THIRGB._var_Color;
begin
   dtInteger(_data,FColor);
end;
end.

Не правда ли забавно ?
Вот она точка doRGB а вот вход onRGB и читаем данные с верхних точек (или значения из начальных установок )...
а нижняя Color просто читает внутреннюю переменную ...

Графическая же среда программирования это скорее развитие линии формошлепство, но на более высоком уровне, когда в граф превращается любой более-менее структурированный элемент.

Опять же реальная философия ХайАсма еще проще, но нужно отметить, что ХайАсма совершенно непривязан к формам да в среде есть совершенно обычный редактор форм, но он значительно более вспомогательный чем в лазарусе ( В принципе даже я писал/рисовал программы на хайасме где несмотря на развитый интерфейс мне ни разу не понадобилось туда заходить ... Как? Просто! Динамическая генерация относительные координаты + разнообразные выравнивания ... ) Да и вообще в хайасме даже можно консольные приложения делать ...(куда уж дальше от "формошлепства"...)
Да я понял что ты не много другое имеешь в виду ... но некоторые методики доступные в ХайАсме в принципе не реализуются в "не графической среде" программирования (Например "МТ потоки" или динамические мультиэлементы (как минимум в таком виде точно нигде ничего подобного не встретишь )
То есть, сначала можно в проге быстренько набрать схему, а потом ее постепенно структурировать до элементарных конструкций. В идеале, вплоть до бинарного кода.

Немного не так, а иногда и совсем не так ... В ХайАсме в полне можно вести разработку "снизу вверх" или вообще в стиле "управляемый хаос", по мере надобности добавляя все новые функции . (Кстати именно так и проявляются лучшие свойства графического подхода к программированию в нормально сконструированной схеме нет "неприкасаемых зон" и "невидимого миру кода" )
Соответственно, нужен будет набор элементов для каждого уровня разработки.
Они есть ... просто не все "самоочевидно" вот так сходу.
Возьмём связи. В ХайАсме ты выбираешь одну из имеющихся и засыпаешь на связи другого компонента.

Не совсем понял про "засыпаю" ХайАсм точно также управляется событиями как и LCL приложение лазаруса часть может работать параллельно часть последовательно, есть горячие клавиши есть обычные потки(Thread) есть таймер и т.д.
Я бы сделал немного по другому. В списке выбираешь нужное поле, если надо, то создавая его, а в другом объекте тебе выдаётся список имеющихся уже в руки связей и так же возможность создания новой.

В хайасме уже пробовали делать что-то похожее тыкаешь в точку выпадет список элементов схемы выбираешь один там новый список точек выбранного элемента выбираешь, вуаля ! "есть контакт "... но не прижилось...
После этого тебе открывается окошко в котором ты можешь видеть код в который эта связь превратилась.
Да нет в хайасме кода в "который превращается связь" есть инициализация (создание экземпляров ) элементов и задание параметров ....
Чтобы сразу его можно было подправить. Если, конечно, данный уровень поддерживает генерацию кода или исходного текста.

В хайасме можно открыть код почить всего ....
Да, эта схема намного сложнее, но она, после того как привыкнешь и если правильно спроектирована среда разработки намного удобнее. А в ХайАсме, текст на ЯВУ присутствует скорее для галочки. Да, его можно править, но сквозного соответствия нет.

В смысле исходный код ? Нет не для галочки, но и не так как мне бы хотелось ...
Главное в том ,что используя идеи ХайАсма можно избавится от рутины, там где она традиционно считалась неизбежностью. :idea:
Последний раз редактировалось Alex2013 28.04.2019 09:38:37, всего редактировалось 1 раз.
Alex2013
долгожитель
 
Сообщения: 3049
Зарегистрирован: 03.04.2013 11:59:44

Re: "Сад камней" или Тайны LCL (+ попытки улучшения )

Сообщение Лекс Айрин » 27.04.2019 05:45:21

Имелось ввиду замыкаешь. Ну а то, что не прижилось создание через списки связей... Думаю это из-за того, что подобное выпадает из идеологии всей среды.
Ты ещё раз подтвердил, что я все правильно очертил.
На самом деле, ХайАсм только добавляет рутины. Потом придется проверять весь код и убирать наиболее видные косяки. Плюс, сильно сомневаюсь, что он позволит отлаживать программы. А уж переменные с неочевидными названиями это вообще убийство здравого смысла.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: "Сад камней" или Тайны LCL (+ попытки улучшения )

Сообщение Alex2013 » 27.04.2019 10:47:04

Лекс Айрин писал(а):На самом деле, ХайАсм только добавляет рутины. Потом придется проверять весь код и убирать наиболее видные косяки. Плюс, сильно сомневаюсь, что он позволит отлаживать программы. А уж переменные с неочевидными названиями это вообще убийство здравого смысла.

1 Зачем ? :shock: Ты же не проверяешь то что лазарус через редактор форм в код пишет ?
2 Может причем визуально https://youtu.be/IFchtKQ_Bcc (Бряк поинты смотрелки пошаговая отладка все есть )
3 Как я говорил "кодированно номерные" переменные и методы в генерируемом коде это "продукт технической эстетики автора ХайАсма " а не идеологическая фишка .(Пытался поломать в своих модах к ХайАсму но не прижилось )
А если ты про код элемента то там все прозрачно (Есть несколько префиксов _prop_ ,_data_ , _event_ ,_work_ , _var_... но по моему это только добавляет читаемости отделяя переменные и методы доступные из среды от внутренних )
Кстати в инлайне InlineCode (вставка произвольного кода на уровне модуля ) и VisualInline (вставка кода на уровне метода) их нет
Alex2013
долгожитель
 
Сообщения: 3049
Зарегистрирован: 03.04.2013 11:59:44

Re: "Сад камней" или Тайны LCL (+ попытки улучшения )

Сообщение Лекс Айрин » 27.04.2019 11:42:29

Alex2013, иногда проверяю. Если какой-то бред кажется. Было даже подправлял что-то.
Это все FPC, ну может проверка на уровне схемы. Полноценной отладки там нет.
Нет, это вначале была эстетика автора. Теперь это уже идеология. В том же Лазарусе подставляемые имена всегда можно поменять, в рамках правил, и это ничего не меняет. Более того, в самом лазарусе и FPC номерных переменных нет. Кстати, подчеркивание в начале имени моветон, так как используется когда уж совсем никак. Да и в середине не особо принято.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: "Сад камней" или Тайны LCL (+ попытки улучшения )

Сообщение Alex2013 » 27.04.2019 13:03:31

Кстати совсем забыл что в ХайАсме все же есть вставка элементов через меню ... но в уже существующие линии связей ...
ИзображениеИзображение
Лекс Айрин писал(а):Это все FPC, ну может проверка на уровне схемы. Полноценной отладки там нет.

Мне неважно на каких именно костылях это сделано важно что работает .... (скорее всего через "отладочную сборку" в режиме ДеБага )
Лекс Айрин писал(а):Нет, это вначале была эстетика автора. Теперь это уже идеология. В том же Лазарусе подставляемые имена всегда можно поменять, в рамках правил, и это ничего не меняет

Ты опять что "сильно умное" о ХайАсме удумал . Посмотри в SHA псевдо код ...
Код: Выделить всё
Make(delphi)
ver(4.04 build 185)
Add(MainForm,2953706,616,196)
{
@Hint=#8:Ver 20eT|
Width=585
Height=332
Caption="NEW_HED_20"
BorderStyle=1
Position=1
Point(onKeyDown)
Point(onMouseWheel)
link(onCreate,8986072:doEvent1,[])
link(onKeyDown,7295069:doWork1,[(662,223)])
link(onMouseWheel,7295069:doWork2,[])
AddHint(-61,72,59,13,@Hint)
}
...

"Вот она рученька !" :idea:
link(onKeyDown,7295069:doWork1,[(662,223)])
Все понятно? ... onKeyDown связывается с элементом с ID 7295069 и вызывает doWork1
7295069 это текст получаемый из хендела элемента в коллекции редактора (Гарантировано не совпадает не с чем другим )
Довольно легко заменяется на более внятные обозначения например из парсинга комментариев . (Где то даже самодельная утилитка для замены валяется ) Замена проводится ПРЯМО в файле схемы SHA после чего из нее генерируется немного более внятный код . :idea:

Еще начальные данные можно "честно упрятать в ресурсы" (как в LCL) тогда от стандарно генерируемого кода вообще ничего не останется только инициализация классов . ( Заметь "стандарно генерируемого" но в хайасме есть полностью программируемый кодогенератор так что это опять таки не догма )
Последний раз редактировалось Alex2013 27.04.2019 13:25:29, всего редактировалось 1 раз.
Alex2013
долгожитель
 
Сообщения: 3049
Зарегистрирован: 03.04.2013 11:59:44

Re: "Сад камней" или Тайны LCL (+ попытки улучшения )

Сообщение Лекс Айрин » 27.04.2019 13:24:25

Это, если я правильно понял, не то.
А надо чтобы это не было набором костылей.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: "Сад камней" или Тайны LCL (+ попытки улучшения )

Сообщение Alex2013 » 27.04.2019 13:33:10

Лекс Айрин писал(а):Это, если я правильно понял, не то.
А надо чтобы это не было набором костылей.

1 "Не совсем то" но вставить конвертор, условие, хаб или переключатель милое дело . (Старая связь остается, а новый элемент врубается посередине )
2 А в чем разница ? :roll:
Зы
Главное что я хотел сказать в том что часть "правил ХайАсма" вообще из разряда несуществующих . Не там никаких табу ни логических ни технических чтобы сделать иначе . ОЧЕНЬ моноге "сделано как сделано" без особого смысла и достаточно легко изменяется. Тем более если делать на основе идей этих что-то свое специально для Лазаруса .
Последний раз редактировалось Alex2013 27.04.2019 13:43:29, всего редактировалось 1 раз.
Alex2013
долгожитель
 
Сообщения: 3049
Зарегистрирован: 03.04.2013 11:59:44

Re: "Сад камней" или Тайны LCL (+ попытки улучшения )

Сообщение Лекс Айрин » 27.04.2019 13:42:30

Отвечу с конца... Костыли имеют привычку ломаться.
Теперь насчёт того, чем вставка в разрыв элемента отличается от обычной связи.
Если не брать высокоуровневые случаи то связь на схеме это присваивание, а вставка нового элемента это вставка нескольких дополнительных строк между уже существующими. Или если в коде
A:=B + 1; vs A:=sum (B, 1); для самых примитивных случаев.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: "Сад камней" или Тайны LCL (+ попытки улучшения )

Сообщение Alex2013 » 27.04.2019 13:52:40

Лекс Айрин писал(а):Отвечу с конца... Костыли имеют привычку ломаться.

Отладка вообще как-бы "восток дело тонкое "... Не встречал ни одной ее реализации где бы ВСЕ и ВСЕГДА было тип топ...
Теперь насчёт того, чем вставка в разрыв элемента отличается от обычной связи.
Если не брать высокоуровневые случаи то связь на схеме это присваивание, а вставка нового элемента это вставка нескольких дополнительных строк между уже существующими. Или если в коде
A:=B + 1; vs A:=sum (B, 1); для самых примитивных случаев.

Да хоть обратной польской записью напиши ... разницы нет . Удобно для программиста в среде а как именно это реализовано дело десятое ( скорее всего на уровне чисто текстовой подмены ) А sum (B, 1); да это временами "грусть ХайАсма." постоянно получается что то вроде sum (sum (sum (B, 2), 3) 1); Да еще со скрытой рекурсией ... :evil:(в "обычных" языках этого то же полно но ХайАсм можно смело заносить в книгу рекордов ) Но есть идеи как можно "распрямить смысл" обойдясь без бесконечного забивания стека и опасности "кольцевания" ....
Последний раз редактировалось Alex2013 27.04.2019 14:01:44, всего редактировалось 1 раз.
Alex2013
долгожитель
 
Сообщения: 3049
Зарегистрирован: 03.04.2013 11:59:44

Re: "Сад камней" или Тайны LCL (+ попытки улучшения )

Сообщение Лекс Айрин » 27.04.2019 13:59:46

Лучше уж польской записью.
Вот для этого и надо контролировать саму связь, что некоторые огрехи убираются сразу.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: "Сад камней" или Тайны LCL (+ попытки улучшения )

Сообщение Alex2013 » 27.04.2019 14:14:47

Лекс Айрин писал(а):Лучше уж польской записью.
Вот для этого и надо контролировать саму связь, что некоторые огрехи убираются сразу.

Я бы предложил сделать "диспетчер вызовов" типа "скрытого хаба " .
То есть вся цепочка вызовов работает через итерацию в коллекции сваливая и доставая данные потока в/из буфера .
(Ветвления запускают новые цепочки но можно сделать свой стек или секции с условным обходом части списка )
Зы
Кстати именно поэтому я стараюсь где только могу вместо длинных цепочек использовать хаб
Alex2013
долгожитель
 
Сообщения: 3049
Зарегистрирован: 03.04.2013 11:59:44

Пред.

Вернуться в Потрепаться

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 16

Рейтинг@Mail.ru