Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 4262

Тема: Фичи и баги OWEN Logic

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    По умолчанию

    Цитата Сообщение от pop70 Посмотреть сообщение
    Да не. Я ж не в укор.
    Меня как раз по тому предложению и напрягло то, что макрос в общем случае НЕ ФУНКЦИЯ, а, как минимум, ПРОЦЕДУРА (а ещё точнее - объект, имеющий "собственное состояние"). А анализ схемы ведётся как для функции. Поэтому устранить неоднозначность поведения с обратными связями "вокруг макроса", пытаясь учитывать обратные связи внутри него ("прозрачность" без развёртывания), как минимум, очень сложно, как максимум невозможно.

    Ну да ладно....
    А вот можно ли как-то проработать вопрос с тем, чтобы редактирование макроса не требовало его перевставки в основную схему?
    Просто, решение с перевставкой противоречит принципу структурированности программ.
    Ну, т.е., если есть программа, использующая компоненты, то редактирование компонента не должно требовать его переопределения в программе.
    Иначе получается ерунда.
    Пишешь программу, используя десяток экземпляров одного компонента, и при небольшом изменении самого компонента - заново перерисовывать всю программу?
    Не логично и не удобно. Даже если количество входов/выходов изменится - это не повод для требования перевставки.
    Вы не правы. Изменив количество входов Вы меняете сигнатуру функции. Здесь должны быть вмешательство со стороны пользователя. А если Вы меняете только тело функции, то переустановка макроса на схеме и не требуется. Единственно, есть баг, к сожалению существующий уже на протяжении не одного релиза, если редактируете макрос со вложенностью более 1, то в том макросе, где используется редактирующийся макрос обновление сразу не наступит. Нужно будет заново переоткрыть макрос. Об этом я знаю, и надеюсь будет время в ближайшие сроки исправить.

    Конечно, можно сделать то, что Вы хотите, но это уже будет в качестве дополнительного функционала.
    Последний раз редактировалось wal79; 28.08.2017 в 09:31.
    программер

  2. #2

    По умолчанию

    Цитата Сообщение от wal79 Посмотреть сообщение
    Вы не правы. Изменив количество входов Вы меняете сигнатуру функции. Здесь должны быть вмешательство со стороны пользователя.
    Не обязательно. В ОЛ неиспользуемые входы инициализируются 0. Ошибки не будет, если новый вход будет никуда не подключен.
    Если входов уменьшится, то просто связь к удалённому входу "повиснет в воздухе". Т.е., просто удалится.
    Т.е., на языке .net все макросы имеют на входах значения "по умолчанию". Добавляется входная переменная, инициализированная по умолчанию 0 - и никаких ошибок, и от пользователя ничего не требуется.
    Перерисовать в схему новый фб вместо старого - тоже никаких проблем быть не должно.
    Ну так мне кажется. Хотя, Вам "изнутри" виднее, конечно.

  3. #3

    По умолчанию

    Цитата Сообщение от pop70 Посмотреть сообщение
    Не обязательно. В ОЛ неиспользуемые входы инициализируются 0. Ошибки не будет, если новый вход будет никуда не подключен.
    Если входов уменьшится, то просто связь к удалённому входу "повиснет в воздухе". Т.е., просто удалится.
    Т.е., на языке .net все макросы имеют на входах значения "по умолчанию". Добавляется входная переменная, инициализированная по умолчанию 0 - и никаких ошибок, и от пользователя ничего не требуется.
    Перерисовать в схему новый фб вместо старого - тоже никаких проблем быть не должно.
    Ну так мне кажется. Хотя, Вам "изнутри" виднее, конечно.
    С выделенным не соглашусь. Я вмешаюсь в программу пользователя, причем он может и не помнить что там была связь и откуда и куда она шла. В данном сценарии я должен подсветить макрос как невалидный. И все это, это и есть то что я назвал дополнительным инструментарием.
    программер

  4. #4
    Пользователь Аватар для anthrwpos
    Регистрация
    13.02.2017
    Адрес
    Ленобл
    Сообщений
    188

    По умолчанию

    Цитата Сообщение от wal79 Посмотреть сообщение
    Вы не правы. Изменив количество входов Вы меняете сигнатуру функции.
    Вообще по общепринятой терминологии, макрос - это идентификатор, который транслируется в некий неизменный участок кода.
    Сколько раз его транслятор встретит - столько раз вместо него вставит этот участок.
    Функция - это идентификатор, который компилируется в адрес вызова, по которому начинается сама функция.

    У нас в ОЛ таки макросы или функции?=)

    upd: Ура, сами макросы работают адекватно. Но появился новый бажок - не отслеживается состояние флоат переменных.bug.PNG
    Проект тот-же, на картинке внутренности макроса VLV
    Последний раз редактировалось anthrwpos; 28.08.2017 в 13:14.
    - ά ν θ ρ ω π ο ς -
    Мои универсальные макросы https://github.com/anthrwpos1/macros

  5. #5

    По умолчанию

    Цитата Сообщение от anthrwpos Посмотреть сообщение
    Вообще по общепринятой терминологии, макрос - это идентификатор, который транслируется в некий неизменный участок кода.
    Сколько раз его транслятор встретит - столько раз вместо него вставит этот участок.
    Функция - это идентификатор, который компилируется в адрес вызова, по которому начинается сама функция.

    У нас в ОЛ таки макросы или функции?=)
    Если внимательно прочитаете, то я сказал inline функция. Компилятор встречая ее каждый раз встраивает тело функции в код.
    программер

  6. #6

    По умолчанию

    Цитата Сообщение от wal79 Посмотреть сообщение
    Если внимательно прочитаете, то я сказал inline функция.
    Можете ещё какими-нибудь словами мысль выразить?

    Термин "inline функция", полагаю, подразумевается из C/C++. Но совершенно непонятно почему вы напираете на слово inline.
    Дело в том, что в этих языках наличие или отсутствие модификатора inline не влияет на результат программы.

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

    Цитата Сообщение от wal79 Посмотреть сообщение
    Компилятор встречая ее каждый раз встраивает тело функции в код.
    Вообще говоря, подставляет ли компилятор код макроса каждый раз или компилирует макрос единожды -- не так важно для пользователей ОЛ.
    Вот вы говорите, что компилятор встраивает тело в код, но это совершенно ничего не даёт, т.к. сам факт встраивания никак не влияет на результат работы результирующей схемы.
    Можно сделать встраивание одним образом, а можно и другим.

    В классическом (C, LISP) понимании, "макрос" существенно отличается от "функции" тем, что его аргументы вычисляются после подстановки самого макроса.
    Например, макрос в C после подстановки внезапно может сослаться на объявленную вне макроса переменную (просто по имени), а функция (в том числе inline) так не может.
    Или так:
    Код:
    #define MUL(x, y) x*y
    
    int inline mul(int x, int y) {
      return x * y;
    }
    
    ...
    MUL(2+2, 2); // вернёт 6, т.к. 2+2*2 (сначала подстановка макроса, а потом вычисление)
    mul(2+2, 2); // вернёт 8, т.к. mul(4, 2) == 4*2 == 8 (аргументы функции вычисляются до начала её работы)
    Поэтому интересна семантика макросов, а не детали реализации компилятора.
    Например, сейчас нигде толком не описано как происходят вычисления ОЛ схем. От входов к выходам? От выходов ко входам? Макрос вычисляется "весь целиком" или только те выходы, которые реально понадобились? Выходы вычисляются "одновременно" или только в те моменты как понадобились?
    Последний раз редактировалось Владимир Ситников; 29.08.2017 в 11:13.

  7. #7

    По умолчанию

    Цитата Сообщение от anthrwpos Посмотреть сообщение
    upd: Ура, сами макросы работают адекватно. Но появился новый бажок - не отслеживается состояние флоат переменных.bug.PNG
    Проект тот-же, на картинке внутренности макроса VLV
    А разве раньше было по другому?

    Ладно, не буду дожидаться ответа. Видимо не все знакомы с watch list-ом переменнных. На скрине я вижу, что Вы добавили в список несуществующие переменные для прибора (я их называю виртаульными). В просмотрщике мы видим реальные переменные. Допустимые на запись можно редактировать, в противном случае только на чтение.
    Последний раз редактировалось wal79; 28.08.2017 в 14:37.
    программер

  8. #8

    По умолчанию

    Цитата Сообщение от wal79 Посмотреть сообщение
    А разве раньше было по другому?

    Ладно, не буду дожидаться ответа. Видимо не все знакомы с watch list-ом переменнных. На скрине я вижу, что Вы добавили в список несуществующие переменные для прибора (я их называю виртаульными). В просмотрщике мы видим реальные переменные. Допустимые на запись можно редактировать, в противном случае только на чтение.
    Но для того, чтобы было более понятно, подсказки вставлю поясняющие.
    программер

  9. #9
    Пользователь Аватар для anthrwpos
    Регистрация
    13.02.2017
    Адрес
    Ленобл
    Сообщений
    188

    По умолчанию

    Цитата Сообщение от wal79 Посмотреть сообщение
    Видимо не все знакомы с watch list-ом переменнных. На скрине я вижу, что Вы добавили в список несуществующие переменные для прибора (я их называю виртаульными). В просмотрщике мы видим реальные переменные.
    Хм, совсем непонятно, о чем идет речь.
    Вроде бы по всем свойствам переменная OUT+, состояние которой показывается в просмотрщике эквивалентна переменной current, которая всегда отображается как 0. Не могу придумать между ними разницы, по которой вторая могла бы быть виртуальной.
    - ά ν θ ρ ω π ο ς -
    Мои универсальные макросы https://github.com/anthrwpos1/macros

  10. #10

    По умолчанию

    Цитата Сообщение от anthrwpos Посмотреть сообщение
    Хм, совсем непонятно, о чем идет речь.
    Вроде бы по всем свойствам переменная OUT+, состояние которой показывается в просмотрщике эквивалентна переменной current, которая всегда отображается как 0. Не могу придумать между ними разницы, по которой вторая могла бы быть виртуальной.
    Почему Вы ищете между ними разницу. Они обе виртуальные, они играют роль связи и не более того. Потому что, они не энергонезависимые, на них нет ссылки из визуализации или откуда то еще. Они нужны только лишь для связи внутри макроса и все. Поэтому компилятор в реальности эти переменные не создает для прибора. Поэтом то Вы и видите всегда 0 в просмотрщике. Но по Вашему недоумению понимаю, что нужно еще предпринять какие-то разъяснительные шаги в лоджике.
    программер

Страница 1 из 2 12 ПоследняяПоследняя

Похожие темы

  1. OWEN Logic v1.7
    от Евгений Сергеевич в разделе Среда программирования OWEN Logic
    Ответов: 404
    Последнее сообщение: 25.08.2020, 15:17
  2. OWEN Logic v1.7
    от Евгений Сергеевич в разделе Программируемые реле
    Ответов: 401
    Последнее сообщение: 28.07.2016, 19:46
  3. OWEN Logic 1.2.0.14b
    от Ельцов Андрей в разделе Программируемые реле
    Ответов: 40
    Последнее сообщение: 21.02.2011, 14:16
  4. OWEN Logic 1.1.0.11b
    от Ельцов Андрей в разделе Программируемые реле
    Ответов: 58
    Последнее сообщение: 12.10.2010, 20:55

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •