Вверх ↑
Этот топик читают: Гость
Ответов: 758
Рейтинг: 112
#16: 2014-05-23 15:03:19 ЛС | профиль | цитата
Придумал еще один способ, но для него мне понадобилось узнать что подключено к HubEx. Не получается
Мои попытки:
В "func init" элемента Hub дописываю две строчки
trace(this.name & this.id)trace(this.pt_work(0).point.parent.name & this.pt_work(0).point.parent.id)
Запускаю твою схему и получаю чудеса - одинаковый ответ
Если подключить кнопку, то все работает правильно

карма: 1

0
Главный модератор
Ответов: 2999
Рейтинг: 396
#17: 2014-05-23 15:11:16 ЛС | профиль | цитата
Netspirit писал(а):
...ты же добавил "финализирующий" метод в кодогенератор?

Да, но здесь другой случай: "финализирующий" метод выполняется после завершения обхода (рекурсивного) всего дерева элементов. Что получится, если к этому моменту где-то будет не хватать кусков кода, которые должны были получиться на «оптимизируемых» хабах?
Можно, конечно, поэксперементировать... только не понятно в чём будет выигрыш в конечном итоге...
карма: 6
Дорогу осилит идущий. Install/Update HiAsm.NET
0
Ответов: 4628
Рейтинг: 749
#18: 2014-05-23 16:06:32 ЛС | профиль | цитата
Предполагаю, можно "организационными методами" запретить работу "пользовательской части схемы" (вызов методов точек компонентов) в методе "финализации". То-есть, видимая пользователю схема работает только в процессе init и рекурсивного обхода. На этом этапе собирается вся необходимая информация о связях и логике схемы. А в финале должен отработать только код, не приводящей к повторному обходу дерева компонентов.

При вызове doEvent хаб может впечатывать в код вызовы методов, а тела этих методов генерировать и печатать при "финализации" на основе логики оптимизации.

Но это так, мысли вслух. Я не владею тонкостями этого пакета и предлагаемых оптимизаций.
карма: 26

0
Главный модератор
Ответов: 2999
Рейтинг: 396
#19: 2014-05-23 16:19:42 ЛС | профиль | цитата
Netspirit писал(а):
...doEvent хаб может впечатывать в код вызовы методов

В простейшем случае (единственный вызов хаба), хаб не порождает «дополнительного» кода, кроме последовательности кодов событий onEvent(data). Дополнительный код появляется только в случае повторного вызова хаба. Использование перегрузки методов вместо конвертации входных данных к заранее, кстати не известному типу, тоже логически оправдано.
карма: 6
Дорогу осилит идущий. Install/Update HiAsm.NET
0
Ответов: 4628
Рейтинг: 749
#20: 2014-05-23 16:41:43 ЛС | профиль | цитата
Да, понятно. Вероятно, некоторые удобства в HiAsm нельзя реализовать без runtime-конверсии типов...
------------ Дoбавленo в 16.41:
[offtop]Ещё как-то возникала идея "а что, если бы хаб при обзвоне правых точек onEvent "спрашивал" присоединенные компоненты, какой-тип данных они предпочитают?". Ну, то-есть, любой метод левой точки и так вставляет ковертор данных к нужному ему типу. Вот хаб сам вставит конвертер только для этого события и сразу даст данные нужного ему типа. А для другого события он вставит другой конвертер.
Только:
1) Нужно, чтобы метод присоединенного компонента мог знать, какой аргумент в данной схеме он получит именно из потока, чтобы сообщить требуемый тип.
2) Придется каким-то образом для каждой левой и нижней точки предусмотреть возврат желаемого типа по требованию. Это добавляет работы автору компонента.
3) Могут быть компоненты, которые принимают несколько разных типов в один метод. Тогда компонент выдает список поддерживаемых типов в порядке приоритета, а хаб выбирает сначала тот, который не требует конвертации, а если таковой отсутствует, конвертирует к первому в списке типу.
[/offtop]
карма: 26

0
20
Сообщение
...
Прикрепленные файлы
(файлы не залиты)