Рекурсивный запуск VI

Темы связанные с инженерными разработками, но не подходящие в другие ветки форума
Ответить
Аватара пользователя
Korotenko

Activity
developer
developer
Сообщения: 286
Зарегистрирован: 25 июл 2008, 10:43
Награды: 1
Версия LabVIEW: 2009
Откуда: Россия, Владивосток
Контактная информация:

Рекурсивный запуск VI

Сообщение Korotenko »

На днях писал прогу для обработки каталогов диска - в итоге :suicide:
Рекурсивный запуск :vi: не возможен, мне сказали что разработчики исключили эту возможность в :labview: чтобы у прогрммистов не было лишних проблем :evil:
I work in LabVIEW 2009 !
Аватара пользователя
Konstantin Sumenko

Activity Bronze
expert
expert
Сообщения: 1439
Зарегистрирован: 17 июл 2008, 12:20
Награды: 2
Версия LabVIEW: 2010
Откуда: Moscow
Поблагодарили: 1 раз
Контактная информация:

Re: Рекурсивный запуск VI

Сообщение Konstantin Sumenko »

Именно так, правда проблемы были бы не у программистов а у разработчиков LV.
Аватара пользователя
Eugen Graf

Activity Professionalism Silver Black
guru
guru
Сообщения: 6502
Зарегистрирован: 13 ноя 2007, 02:20
Награды: 4
Версия LabVIEW: 2009
Откуда: Saarbrücken
Контактная информация:

Re: Рекурсивный запуск VI

Сообщение Eugen Graf »

Ужас, неужели???

Конечно можно обойтись и без этого, но всё же очень жаль, могло бы пригодится.
Аватара пользователя
Konstantin Sumenko

Activity Bronze
expert
expert
Сообщения: 1439
Зарегистрирован: 17 июл 2008, 12:20
Награды: 2
Версия LabVIEW: 2010
Откуда: Moscow
Поблагодарили: 1 раз
Контактная информация:

Re: Рекурсивный запуск VI

Сообщение Konstantin Sumenko »

Если вспоминать все возможно кода внутри VI (неинициализированные сдвиговые регистры, реинтрантность, ссылочные типы и т.д, собственная "сборка мусора"), то можно получить несколько нестыковок. Это когда-то обсуждалось на ni.com
Аватара пользователя
mzu2006

Professionalism Tutorials Black
doctor
doctor
Сообщения: 2456
Зарегистрирован: 16 авг 2008, 02:12
Награды: 3
Версия LabVIEW: 7.1 10 11 12
Откуда: St-Petersburg (RU), Phila, Boston, Washington DC
Контактная информация:

Re: Рекурсивный запуск VI

Сообщение mzu2006 »

в :labview: нет понятия "локальных" переменных и нет размещения их "на стеке" как в си, например.

Я знаю 3 пути чтобы сделать рекурсию:
1. Через VI сервер - медленно но зато просто и интуитивно
2. Через преобразование алгоритма к не рекурсивному (любой рекурсивный алгоритм может быть преобразован к не-рекурсивному)
3. Используя динамическую передачу управления с классами. В этом, последнем я не до конца разобрался и буду рад если кто-нибуть доходчиво расскажет
Аватара пользователя
Eugen Graf

Activity Professionalism Silver Black
guru
guru
Сообщения: 6502
Зарегистрирован: 13 ноя 2007, 02:20
Награды: 4
Версия LabVIEW: 2009
Откуда: Saarbrücken
Контактная информация:

Re: Рекурсивный запуск VI

Сообщение Eugen Graf »

3. :think: такого сознательно не знаю. Уточни плиз.
Аватара пользователя
mzu2006

Professionalism Tutorials Black
doctor
doctor
Сообщения: 2456
Зарегистрирован: 16 авг 2008, 02:12
Награды: 3
Версия LabVIEW: 7.1 10 11 12
Откуда: St-Petersburg (RU), Phila, Boston, Washington DC
Контактная информация:

Re: Рекурсивный запуск VI

Сообщение mzu2006 »

ну вот а я надеялся, что мне расскажут :haha:

Идея в том, что VI - метод класса с динамической передачей управления может вызвать любой другой член класса,
в том числе и себя. (на этапе генерации кода при динамической передаче управления не известно, метод
какого именно класса (в иерархии) будет вызван). VI, естественно, должна быть объявлена reentrant. Данные не размещаются на стеке,
значит share clones between instances, чтобы каждый вызов VI создавал новое Data Space.

Взято из примера к LV8.5.1:
Clipboard01.png
Аватара пользователя
Eugen Graf

Activity Professionalism Silver Black
guru
guru
Сообщения: 6502
Зарегистрирован: 13 ноя 2007, 02:20
Награды: 4
Версия LabVIEW: 2009
Откуда: Saarbrücken
Контактная информация:

Re: Рекурсивный запуск VI

Сообщение Eugen Graf »

Ну а чем это хуже реинтрантности? Вроде бы то же самое.
Аватара пользователя
Konstantin Sumenko

Activity Bronze
expert
expert
Сообщения: 1439
Зарегистрирован: 17 июл 2008, 12:20
Награды: 2
Версия LabVIEW: 2010
Откуда: Moscow
Поблагодарили: 1 раз
Контактная информация:

Re: Рекурсивный запуск VI

Сообщение Konstantin Sumenko »

Здесь все-так рекурсия получена, кстати интересно, как это работает с точки зрения быстродействия, ведь Dynamic Dispatch занимает время, пусть и небольшое.
Аватара пользователя
mzu2006

Professionalism Tutorials Black
doctor
doctor
Сообщения: 2456
Зарегистрирован: 16 авг 2008, 02:12
Награды: 3
Версия LabVIEW: 7.1 10 11 12
Откуда: St-Petersburg (RU), Phila, Boston, Washington DC
Контактная информация:

Re: Рекурсивный запуск VI

Сообщение mzu2006 »

eg писал(а):чем это хуже реинтрантности?
Не понял вопроса. Реинтерантность - это свойство :vi: .
Рекурсия - способ написания алгоритма, используя реинтерантность.
Всё-таки это в первый раз в лабвью рекурсия в чистом виде.
Crowbar писал(а):как это работает с точки зрения быстродействия,
Смотря с чем сравнивать. С :vi: server - то делать динамическую передачу гораздо быстрее.
Если рекурсивный алгоритм преобразовывать в итеративный тупо с помошью очередей - наверное где-то так же (в одном случае выделяется новое Dataspace при каждом вызове а в другом заводится новые элементы в очереди)
Аватара пользователя
Eugen Graf

Activity Professionalism Silver Black
guru
guru
Сообщения: 6502
Зарегистрирован: 13 ноя 2007, 02:20
Награды: 4
Версия LabVIEW: 2009
Откуда: Saarbrücken
Контактная информация:

Re: Рекурсивный запуск VI

Сообщение Eugen Graf »

mzu2006 писал(а):
eg писал(а):чем это хуже реинтрантности?
Не понял вопроса. Реинтерантность - это свойство :vi: .
Рекурсия - способ написания алгоритма, используя реинтерантность.
Всё-таки это в первый раз в лабвью рекурсия в чистом виде.
Сори, перепутал слово, на языке просто вертелось
Аватара пользователя
Korotenko

Activity
developer
developer
Сообщения: 286
Зарегистрирован: 25 июл 2008, 10:43
Награды: 1
Версия LabVIEW: 2009
Откуда: Россия, Владивосток
Контактная информация:

Re: Рекурсивный запуск VI

Сообщение Korotenko »

mzu2006 писал(а):Если рекурсивный алгоритм преобразовывать в итеративный тупо с помошью очередей - наверное где-то так же (в одном случае выделяется новое Dataspace при каждом вызове а в другом заводится новые элементы в очереди)
обошёлся сдвиговым регистром. :D
у меня есть 2DArray, который расширяется/сужается в процессе работы, в эту переменную и складирую новые значения :wink:
I work in LabVIEW 2009 !
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Общие»