LINUX.ORG.RU

Метапрог-прототип 14 + условные схождения

 , ,


1

2

Следующая версия:

Метапрог-прототип 15 + модернизация СУВТ

Скачать:

https://www66.zippyshare.com/v/xI27OTji/file.html

Доработаны условные схождения. Теперь можно собирать сложную логику с условным возвратом значений на переключателях (switch) по цифровым переменным, пронумерованным спискам (енум) и СУВТ.

Предыдущая версия:

Метапрог-прототип 13 + LOR Browser



Последнее исправление: metaprog (всего исправлений: 1)
Ответ на: комментарий от abcq

Ну тут проблема в логике

Metaprog: универсальная графическая среда программирования [в разработке] часть 4 (комментарий)

потому что сама концепция которую пытается реализовать ТС по большей части является концепцией лабвью, что он придумал сам не пытаясь мимикрировать под лабвью

Они очень сильно отличаются, и метапрог намного лучше, те же сувт, последовательности, меню, да в общем их просто лучше не сравнивать даже.

stasolog
()
Ответ на: комментарий от stasolog

Но так вы же тоже не работаете с лабвью, откуда вы знаете? Вроде жгутиковая концепция что тут что там, вариант, но я не знаю как это реализовано в лабвью, никто не знает кроме NI. Последовательности? Это про массив? Но он же так же работает или по крайней мере очень похоже и в лабвью я даже вроде скидывал сюда выдержку из книги по лабвью в которой немного пояснялось о том чем массив лабвью отличается от обычного массива С и это по поведению тоже самое, только там скорее всего используется какая-то структура данных для внутреннего представления что-то похожее на лист исходя из текста описывающего его поведение. Меню, о каком именно меню идет речь? Если о том, про которое постоянно говорит ТС что мол «Легко найти нужный компонент в меню», то это же просто вариация на тему контролов, это мог бы быть и древовидный список с драгндропом или панелька компонентов, меню как контрол само по себе не ноу-хау если речь конечно идет о таком виде меню, проясните это. Их сложно не сравнивать т.к. онтопик является попыткой сделать бесплатный лабвью о чем ТС неоднократно говорил.

abcq ★★
()
Ответ на: комментарий от abcq

Но так вы же тоже не работаете с лабвью, откуда вы знаете?

Немного тягал проводки в нем, основные вещи знаю и понимаю.

Вроде жгутиковая концепция что тут что там

В LabView она не чисто жгутиковая как по мне...

Последовательности?

Это спец-провода для указания в какой последовательности должна исполнятся программа. Используется так же в условиях, циклах.В свароге я сделал последовательность вообще отдельным типом, в метапроге тоже появится. Чем то похоже на goto, но не goto.

Меню, о каком именно меню идет речь?

О главном меню элементов, которое можно редактировать, использовать как репозиторий, еще оно определяет глобальный путь элемента, и является деревом проектов заодно. В свароге же меню вообще скриптуется, генерирует подменю итд.

Еще в метапроге есть цикл по структуре, СУВТ, СУВТ v2, нормальное использование С-библиотек, шаблоны как в C++.

stasolog
()
Последнее исправление: stasolog (всего исправлений: 1)
Ответ на: комментарий от stasolog

То есть «последовательности» вы решаете вопрос ветвления? Это и есть те самые «условные схождения» или же нет? На сколько я помню в лабвью есть отдельные блоки разветвления по условию, «последовательность» это именно «жгутик» но с условием/адресатом назначения внутри себя?

Анонс про циклы по структурам я помню, но до сих пор не понимаю смысла в изготовлении отдельного вида цикла под определенную «языковую» сущность, являющуюся «контейнером» для данных. Метапрог действительно предполагает и дальше обходится лишь этим, скажем так, небогатым инструментарием «контейнеров» для объединения еще более примитивных типов данных как структура и массив? А цикл по массиву как работате, на «последовательностях»?

abcq ★★
()
Ответ на: комментарий от abcq

То есть «последовательности» вы решаете вопрос ветвления?

Нет, разветвление это разветвление данных. А последовательности это про то как исполняется код.

«последовательность» это именно «жгутик» но с условием/адресатом назначения внутри себя

Примерно так, но совсем не так, они сильно умнее.

Анонс про циклы по структурам я помню

Так это же круто, можно взять одну функцию, и использовать ее для перевода любой структуры в json. Через цикл по структуре проходимся по полями, в том числе и рекурсивно, и выдаем текст.

А цикл по массиву как работате, на «последовательностях»?

Последовательности там задают тело цикла.

stasolog
()
Последнее исправление: stasolog (всего исправлений: 2)
Ответ на: комментарий от stasolog

Нет, разветвление это разветвление данных. А последовательности это про то как исполняется код.

Примерно так, но совсем не так, они сильно умнее.

Конечно это мало описывает применение.

Так это же круто, можно взять одну функцию, и использовать ее для перевода любой структуры в json. Через цикл по структуре проходимся по полями, в том числе и рекурсивно, и выдаем текст.

а это описывает вариант возможного применения, но никак не отвечает на мой вопрос. Структура и вложенные структуры в структуру дают возможно описать древовидный контейнер и потом обходить его циклом, но почему для этого понадобился какой-то отдельный вид цикла, почему это не тот же цикл что и для массива? Массив вообще можно циклом обходить?

Последовательности там задают тело цикла.

т.е. для структур это какой-то свой вид организации цикла, а для массивов это «последовательности»? Ну ок, а что является «меткой» в таком goto, как организуется цикл, как «последовательность» «понимает» отсель и досель есть тело цикла?

abcq ★★
()
Ответ на: комментарий от abcq

Массив вообще можно циклом обходить?

Можно.

почему это не тот же цикл что и для массива?

Цикл тот же. И тот же цикл умеет цикл по range(), просто подаешь на вход число и все.

т.е. для структур это какой-то свой вид организации цикла

Лучше считай что последовательность это лямбда... Короче это тупо зеленый проводок, проводишь от А до Б. И сначала исполнится А потом Б. Проводишь от IF к А. Тогда при IF(true) исполнится A.

stasolog
()
Последнее исправление: stasolog (всего исправлений: 1)
Ответ на: комментарий от stasolog

хм тогда зачем было анонсировать «цикл по структурам» если это тот же цикл? И вообще почему создается впечатление что изначально цикл не мог обходить структуры или он не мог?

что может выступать А и Б?

Короче это тупо зеленый проводок, проводишь от А до Б. И сначала исполнится А потом Б.

это не очень похоже на лямбду, но такое можно реализовать через нее. Ну ок, это чем-то и на goto похоже, точнее через него тоже можно организовать подобный переход от А к Б.

Проводишь от IF к А. Тогда при IF(true) исполнится A.

IF представляет из себя какой-то блок, как и в лабвью? Правильно ли я понимаю что эта «последовательность» необходима для работы с этим IF, или он может и без нее дальше пустить поток выполнения программы к следующему блоку?

Тогда при IF(true) исполнится A.

А если false? как действует эта «последовательность»? Возможно ли передать на вход такому IF «выражение» вычисляющее такое true или false и каково поведение такого IF если в результата этого вычисления получено не будет (произойдет ошибка вычисления)? Что из себя вообще представляет true и false как они определены, это какие-то константы определенного типа, это какое-то перечисление из возможных двух вариантов?

abcq ★★
()
Ответ на: комментарий от abcq

хм тогда зачем было анонсировать «цикл по структурам» если это тот же цикл?

У цикла появилось дополнительное поведение.

что может выступать А и Б?

Два вызова функции.

IF представляет из себя какой-то блок, как и в лабвью?

Да.

Правильно ли я понимаю что эта «последовательность» необходима для работы с этим IF

Да, иначе никак не укажешь куда проследовать по IF.

А если false?

У IF есть «два выхода» зеленый и красный, последовательность от красного к функции это будет указание else. От зеленого думаю и так понятно что будет.

Возможно ли передать на вход такому IF «выражение» вычисляющее такое true или false

Ну IF принимает boolean тип.

и каково поведение такого IF если в результата этого вычисления получено не будет (произойдет ошибка вычисления)?

Ошибка компиляции?

Что из себя вообще представляет true и false

Константы наверное.

stasolog
()
Ответ на: комментарий от stasolog

Вы когда свою поделку документировать будете? Чтобы любой человек мог прочитать и понять, что все эти квадратики, проводки и т.д. означают.

cluge
()
Ответ на: комментарий от stasolog

У цикла появилось дополнительное поведение.

То есть реализация этого цикла будет меняться каждый раз когда будут добавляться другие «контейнеры»?

Два вызова функции.

в метапроге есть функции? Или о чем речь?

Да, иначе никак не укажешь куда проследовать по IF. У IF есть «два выхода» зеленый и красный, последовательность от красного к функции это будет указание else. От зеленого думаю и так понятно что будет.

А лабвью разве работает не аналогично? Там вроде тоже на выходы проводки цеплялись в зависимости от результата условия, кстати тоже зеленые, так в чем разница?

Ну IF принимает boolean тип.

Не совсем понятно по функциям, но если они все же есть, можно ли функцию возвращающую этот булеан туда запихнуть в условие?

Ошибка компиляции?

Трансляции или же все же выполнения (читай это будет отлавливать компилятор С если сможет, т.к. числовые значения для него валидны как значения булевого типа), этот вариант кто-то вообще проверял?

Константы наверное.

Надеюсь Метапрог даст более точное пояснение.

abcq ★★
()
Последнее исправление: abcq (всего исправлений: 1)
Ответ на: комментарий от abcq

То есть реализация этого цикла будет меняться каждый раз когда будут добавляться другие «контейнеры»?

Ну в С коде да.

в метапроге есть функции? Или о чем речь?

Ну поддиаграммы == функции.

А лабвью разве работает не аналогично?

Нет.

Там вроде тоже на выходы проводки цеплялись в зависимости от результата условия, кстати тоже зеленые, так в чем разница?

Там блок специальный для условия, в метапроге же только проводки.

Не совсем понятно по функциям, но если они все же есть, можно ли функцию возвращающую этот булеан туда запихнуть в условие?

Ну да, IF принимает тип boolean, просто подводишь от выхода блока «=» проводок к IF.

Трансляции или же все же выполнения

Трансляции.

stasolog
()
Ответ на: комментарий от stasolog

Там блок специальный для условия, в метапроге же только проводки.

Ну насколько я вижу там что-то похожее есть блоки которые представляют собой IF есть блоки компарации, есть панели которые представляют собой структуры выбора, в общем то тут много вариантов сделать гипотетический «IF» у метапрога просто один из этих вариантов, я если честно не вижу принципиальной разницы из того описания что даете вы. Выглядит так как будто просто часть этого функционала видимо переложили на сущность этого проводка, видимо из-за того что в лабвью этот нагромождение из блоков для организации банального IF выглядит достаточно топорно. Ну ок, это хорошее улучшение, проводок + блок IF лучше чем проводок + блок структуры выбора + блок компаратора + блок IF.

abcq ★★
()
Ответ на: комментарий от abcq

Плюс в том что проводки проводить куда проще, так же можно делать что то типа goto (но не он совсем), тогда как в labview из блока попробуй выйди.

stasolog
()
Ответ на: комментарий от stasolog

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

abcq ★★
()
Последнее исправление: abcq (всего исправлений: 1)
Ответ на: комментарий от abcq

интересно как бы хаскель выглядел в графике

Возможно хоть тогда бы он стал для меня понятен...

stasolog
()
Ответ на: комментарий от stasolog

Там блок специальный для условия, в метапроге же только проводки

В МЕРТВОПРОГе, между прочим, тоже!

Как это Мы умудрились переизобрести Метапрог, не тыкав толком Метапрог?

mertvoprog
()
Ответ на: комментарий от abcq

у мертвопрога что-то похожее я так понял вырисовывалось, как граф со связями

Ни хрена, у Нас как раз-таки лютейшая императивщина. Даже множества точек входа нету. Любые ветвления и схождения требуют делать петли с перетиначем.

mertvoprog
()
Ответ на: комментарий от stasolog

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

mertvoprog
()
Ответ на: комментарий от mertvoprog

Ну связь будет, будет! Но где ему еще висеть? В отдельном окне? Тогда нужно будет половину экрана отдавать на меню, либо постоянно альт-табаться.

stasolog
()
Ответ на: комментарий от stasolog

где ему еще висеть

Да при чём тут «висеть», хотя бы элементарный фон одной заливкой прямоугольника можно было нарисовать? Но его нет, вместо этого каша.

mertvoprog
()
Ответ на: комментарий от abcq

У тебя возникло множество вопросов. Многие из них отпали б, если б ты запустил и потыкал прототип Метапрога (уже есть официально бесплатная Лабвью - налетай LabVIEW раздают (Community Edition)). Но все же не поленюсь ответить (если что случайно проскипаю - не постесняйся повторить вопросы).

То есть «последовательности» вы решаете вопрос ветвления?

И ветвление по ифу, и последовательность исполнения.

На сколько я помню в лабвью есть отдельные блоки разветвления по условию

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

https://i.postimg.cc/cLsq8SXh/image.png

Анонс про циклы по структурам я помню, но до сих пор не понимаю смысла в изготовлении отдельного вида цикла под определенную «языковую» сущность

Цикл по числу транслируется в цикл for по числу. Цикл по массиву - тот же цикл по числу, но еще и со взятием элемента массива по текущему индексу, по сути упрощение схемы чтоб не брать длину массива и не трахаться с арифметикой указателя на массив.

А вот цикл по структуре будет транслироваться в последовательность сишного кода для каждого элемента безо всяких for. Там нужны еще свичи по многотиповому (константное выражение), это все пока что не реализовано.

metaprog
() автор топика
Ответ на: комментарий от abcq

Массив вообще можно циклом обходить?

Да.

Структура и вложенные структуры в структуру дают возможно описать древовидный контейнер и потом обходить его циклом, но почему для этого понадобился какой-то отдельный вид цикла, почему это не тот же цикл что и для массива?

Блоки для типованного цикла одинаковые, но они по-разному реагируют на подключенные к ним данные:

https://i.postimg.cc/d35XyZfR/image.png

Последовательность в цикле от блока выхода к блоку входа (да-да, от ВЫХОДА к ВХОДУ), что образует цикл в Метапроге. В Лабвью цикл - это вообще поддиаграмма. Мне было лень делать поддиагарммы в Метапроге, да и те прямоугольники в Лабвью порой отжирают кучу пустого пространства. Сравнение (лабвьюшные циклы справа):

https://i.postimg.cc/QCXT9FLq/image.png

metaprog
() автор топика
Ответ на: комментарий от abcq

По условиям уже вроде ответил (2-3 сообщения выше).

Что из себя вообще представляет true и false как они определены, это какие-то константы определенного типа, это какое-то перечисление из возможных двух вариантов?

«Да» и «нет» представлены в виде типа «логический». Пока что он транслируются в байт (8-битное число). Если константа «нет» задается 0, есди «да» - 1 (если не ошибаюсь, уже забыл). К логическому типу можно подключать и числовые, тогда 0 будет «нет», остальное - «да», как в Си.

metaprog
() автор топика
Ответ на: комментарий от cluge

Пока шо проще чтоб юзеры тыкали прототип и спрашивали по непоняткам в Метапрог онлайн. Я еле нахожу время делать фичи, куда там мне еще и документацию к ним писать...

metaprog
() автор топика
Ответ на: комментарий от abcq

То есть реализация этого цикла будет меняться каждый раз когда будут добавляться другие «контейнеры»?

Будет только добавлятсья новое поведение, поведение циклов по числу и массиву вряд ли изменится при добавлении цикла по структурам.

metaprog
() автор топика
Ответ на: комментарий от metaprog

У тебя возникло множество вопросов. Многие из них отпали б, если б ты запустил и потыкал прототип Метапрога (уже есть официально бесплатная Лабвью - налетай LabVIEW раздают (Community Edition)). Но все же не поленюсь ответить (если что случайно проскипаю - не постесняйся повторить вопросы).

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

Уже протестировали это community edition, оно под wine запускается нормально или есть какие-то подводные камни, какие зависимости ему нужны кроме очевидного рантайма VC?

А и да, что там принципиально прибивает метапрог к старой версии LV? Это точно нельзя фиксануть чтобы оно собралось этой СE версией?

abcq ★★
()
Последнее исправление: abcq (всего исправлений: 2)
Ответ на: комментарий от abcq

за ответы спасибо правда почти все они продублировали уже то, что котечка наотвечал.

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

Уже протестировали это community edition, оно под wine запускается нормально или есть какие-то подводные камни, какие зависимости ему нужны кроме очевидного рантайма VC?

Я его не тестировал. Виндовское Лабвью под вайном вообще плохо идет (хотя если кому не лень - можно протестить). Рекомендую ставить под виндой.

А и да, что там принципиально прибивает метапрог к старой версии LV? Это точно нельзя фиксануть чтобы оно собралось этой СE версией?

Прибивает необходимость поддерживать совместимость с виндой ХР и, на всякий случай, старым железом. Но метапроговские исходники должны запуститься без изменений и в лабвью 2020.

metaprog
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.