LINUX.ORG.RU

Metaprog: выпуск прототипа (универсальная графическая среда программирования)

 , ,


2

3

Сегодня, как и было обещано, день выпуска LabVIEW-прототипа универсальной графической среды программирования Metaprog.

LabVIEW-прототип не является конечной целью. В дальнейшем с помощью прототипа Metaprog будет собран «сам на себе» и не будет зависеть от LabVIEW.

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

Видео-обзор ( VarfolomeyKote4ka)

https://youtu.be/EcQMgUAm0DE

Скачать: https://www86.zippyshare.com/v/pWggQ91b/file.html

Аннотация

Открывать и запускать !метапрог.vi и !метапрог онлайн.vi

В Метапрог онлайн интегрирован чат и хранилище пакетов с блок-диаграммами. Там идет разработка Метапрога и можно получить консультации.

В Метапрог и Метапрог онлайн встроена справочная система и интерактивные инструкции.

Требования:

1. Для запуска, просмотра и редактирования диаграмм - LabVIEW начиная с 2013.

2. Если не удалось достать линуксовую версию LabVIEW - виртуальная машина с Windows начиная с ХР с кириллической локализацией (иначе будут проблемы с кодировкой символов).

3. Tor Browser или Tor для подключения к серверу:

https://www.torproject.org/

или:

sudo apt-get install tor

4. Для компиляции сгенерированного кода:

sudo apt-get install clang libevent-dev libsdl2-dev

Адрес для добровольных пожертвований:

Bitcoin: 1AYoK2TScSpD5bhf67mv9AxHDJ2RidRvjD

Этот адрес действителен как ключ для электронной подписи от имени разработчика.

Код лицензирован под GNU GPL v3, подробности - по кнопке «Про программу» и в файле LICENSE.txt (на английском). Отдельные файлы могут быть лицензированы под MPL и другими лицензиями.

Описание конструктора диаграмм (часть справочной системы, лучше читать смотря на Метапрог)

В случае вопросов или проблем консультации можно получить в чате программы «Метапрог онлайн».

Новичкам рекомендуется пройти обучение. После выбора обучающей программы надо нажимать на красный квадратик. Если открылось новое окно - красного квадратика не будет, действуй самостоятельно.

Блок-диаграмма состоит из блоков, линий с данными и особых линий - жестких последовательностей. Каждый блок может иметь входы и выходы.

При клике на терминал начнется рисование провода с данными. Клик на пустом месте при рисовании провода задает точку излома провода. При приближении курсора к терминалам провод автоматически подстраивается под ближайший терминал с совместимым типом (несовместимые типы подключить невозможно). Для окончательного подтверждения соединения кликни и связь будет установлена. Чтобы отменить рисование проводка, нажми Esc.

Подключаться дважды к одному терминалу нельзя - будут ошибки. Используй разветвления. Чтобы создать разветвление, кликни на квадратик, который появляется при приближении к проводу, и рисуй провод как обычно (только отенять кнопкой Esc не надо - будет баг).

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

Очередность выполнения также задается жесткими последовательностями. Это - особые линии, которые проводятся по кнопке блоки - последовательность. Первый клик на блоке - начало последовательности, следующие клики - изломы провода (на пустых местах) либо конец последовательности (на блоке). Места начала и конца провода имеют значение при работе с циклами, условными разветвлениями, переключателями.

Чтобы удалить блок на диаграмме, нажми на него правой мыши. Чтобы удалить провод или жесткую последовательность, нажми правой мыши на квадратик на нем.

Чтобы скопировать элемент на диаграмме, нажми на него колесом мыши. Чтобы вставить - жми колесом мыши на пустом месте.

При наведении мышью на элемент диаграммы отображается подробная информация о нем. Элементы подсказок кликабельные. Для дальнейшней справки кликай на "?" в подсказках к элементам.

Описание контейнера с данными и системы типов (часть справочной системы, лучше читать смотря на Метапрог)

В Метапроге есть три вида контейнеров с данными: константа, вход и выход. Константа имеет жестко заданное значение. Вход и выход связывают эту диаграмму с внешними диаграммами.

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

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

Данные - включает в себя числа (знаковые, беззнаковые и бробные разных разрядностей) и логический тип (зеленый). Логический тип совместим со всеми числовыми типами, так как в Си они могут выступать в качестве условия (если ноль - «нет», все другие значения - «да»). Есть типы число (все числа, коричневый), знаковое (голубой), беззнаковое (темно-синий), целое (объединяет знаковое и беззнаковое),дробь (оранжевый).

Неопределенное - аналог типа void в Си. Совместим со всеми типами.

Указатель - содержит адрес данных. Прямо транслируется в указатель на Си. Получается из данных блоком «указатель» (из меню блоков), вытягиваются данные из указателя блоком «вытягивание указателя».

Структура (последовательность и выбор) прямо транслируется в struct или union на Си. Формируется из контейнеров с данными другого типа путем из вытягивания на структуру. Достум к элементам структуры осуществляется через блок «операция над структурой».

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

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

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

Функция Си - на уровне Си является указателем на функцию. Над такой константой есть пикторгамма соответствия копии на диске в виде дискетки, как над подфункцией. Ее цвет зависит от соответствия. Кликом по этой пиктограмме можно управлять соответствями. Подобная пиктограмма есть у сложных типов (структур и структур условного выбора типа). В подсказках к константам, содержащим подфункцию, есть 4 цветные цифры. Это суммарное число комментариев определенных видов в поддиаграммах (замечание, известные ошибки, пожелания и «дело сделано»).

------------------------------------------

При клике на пиктограмму перемещения объект можно передвинуть, при этом линии до его терминалов передвинутся за ним (но тут еще возможны баги).

При клике на название объект диаграммы можно переименовать. Название объекта никак не влияет на логику и предназначено для чтения людьми.

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

Предыдущие темы, посвященные разработке Metaprog

Metaprog: универсальная графическая среда программирования [LabVIEW-прототип] часть 9

Там же ссылки на более ранние темы.



Последнее исправление: metaprog (всего исправлений: 1)

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

Я вообще не особо понял в чем трабла, ты не понимаешь как на асинхронной логике построить приложение? Ну вот тебе два примера, привычный синхронный и асинхронный.

Функция СинхронныйПример()
	сокет = Создать СинхронныйСокет()
	сокет.подключиться("сервер.рф")
	сокет.отправить("Привет")
	Печатать(сокет.получить()) // "Мир!"
Конец

Функция АсинхронныйПример()
	сокет = Создать АсинхронныйСокет()
	сокет.подключиться("сервер.рф", после_подключения: Функция () {
		сокет.отправить("Привет", после_отправки: Функция () {
			сокет.получить(после_получения: Функция (Данные) {
				Печатать(Данные) // "Мир!"
			})
		})
	})
Конец

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

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

https://ibb.co/ZLc3Nmr

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

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

Нет, и нарисовано как то по наркомански.

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

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

Я имел виду саму логику, так то нарисовано красивее.

Deleted
()

Я если че за темой не следил, но на данном этапе, что самое сложное удалось написать?

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

Пока что только прототип на LabView готов, а до этого метапрога не было, и сделать чего то на нем нельзя было. Но вообще текущий демо-метапрог обладает всеми возможностями С + своими личными.

Вроде бы ничего особо нет, хотя есть примеры с libevent, xml, итд. Но каких то проектов никто не успел еще сделать.

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

Сейчас вот будет разрабатываться метапрог на этом демо-метапроге, это и будет первый проект.

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

А сам метапрог это много чего, компилятор, gui, сеть, кросплатформа, итд.

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

«Полу-асинхронный» сервак, выполняющий команды через сеть. Нужен для автоматической компиляции кода по команде с виртуалки.

«Полу-асинхронность» обсуждалась выше: пока нет асинхронного неблокирующего recv. Ладно, пока что и так сойдет.

Сейчас бОльшая часть работы идет над прототипом. Все мозгую что должно быть «под капотом» у массива. Указателя и размера мало - судя по всему, нужно указатель, размер и маркер «статический/динамический».

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

Когда будет готова доработка массивов - можно будет делать стандартную библиотеку работы над массивами и строками.

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

Блин я все не пойму в чем твои траблы со чтением? Ставь каллбек на on_read и жди пока все данные придут, после чего обрабатывай данные, а потом ставь каллбек на on_write и пиши ответ.

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

Спасибо, попробую. Меня чуток спутал пример с bufferevents.

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

А, ну buffer эт чет высокоуровневое, я не смотрел. Ну с ним вроде и работать легче. Чтение это evbuffer_remove, аналог recv короче. Вот его в echo_read_cb ставишь там и читаешь.

Deleted
()

Воскресенье

Мне тут пришла в голову такая аналогия, она немного смешная, но что-то в ней есть.

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

Теперь ближе к тексту. На заре человечества были наскальные рисунки, потом пошли пиктограммы, иероглифы, и наконец человечество открыло для себя буквы и текст, которым можно выразить вообще всё. И программы в том числе. Теперь Метапрог призывает вернуться к графике.

В качестве нишевого решения — почему бы и нет.

Очевидная ошибка автора — это доведение идеи до абсурда и замысел переписать на графике ВСЁ. Вот этот тезис «текстовые языки подошли к порогу своих возможностей», за который автор уже получил нагоняй на хабре. Скромнее надо быть. Надо предлагать инструмент, который по максимуму совместим с существующими решениями, а не навязывает себя везде. И совершенно не обязан быть написан сам на себе. Программисты из NI не стали этого делать не потому, что они придурки, а наоборот, потому что понимают: любую идею можно довести до абсурда.

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

И только если это решение приживётся, язык и его внутренний формат получат распространение и признание — пытаться браться за написание на нём драйверов, ядер ОС и тому подобного. Ну и переписывать сам на себе, если времени не жалко.

Я за конвергенцию, а не за ломку.

hobbit ★★★★★
()
Последнее исправление: hobbit (всего исправлений: 4)
Ответ на: Воскресенье от hobbit

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

hobbit ★★★★★
()
Ответ на: Воскресенье от hobbit

Потом человечество поумнело и открыло для себя плюсы моногамии

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

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

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

iluha16
()
Ответ на: Воскресенье от hobbit

Потом человечество поумнело и открыло для себя плюсы моногамии

Лол, чет около 60-70% браков кончаются разводом, и самая частая причина это измена. Любят же люди есть кактусы.

Deleted
()
Ответ на: Воскресенье от hobbit

Потом человечество поумнело

Спорно. И в контексте моногамии, и вообще.

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

поповская пропаганда это всё

Это каких, интересно, попов, жрецов Аполлона, что ли? У греков уже был моногамный брак, и судя по их мифам, были ревнивые жёны, та же жёнушка Зевса, например :), ибо Зевс, пользуясь своим положением, не очень-то стремился соблюдать верность.

Да, там было всё не так сурово и закрыто, как в иудеохристианской традиции. Но моногамный брак уже вполне себе был.

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

Лол, чет около 60-70% браков кончаются разводом, и самая частая причина это измена. Любят же люди есть кактусы.

Я не совсем понял, что в данном случае для тебя кактус — измены или сам институт брака. По контексту подходят оба варианта. :)

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

Я не совсем понял, что в данном случае для тебя кактус — измены или сам институт брака

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

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

А у христиан же нету запрета на многоженство.

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

С бомжихой и метапрогом (поделием, не человеком) это ты прям в точку попал.

«Поделием», которое ты даже не пробовал, но судишь.

metaprog
() автор топика
Ответ на: Воскресенье от hobbit

Долго не писал, все занимаюсь рекурсивными типами и прочими мелочами. Когда удастся решить главные проблемы с прототипом, начну делать на нем чат-клиент.

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

С существующими сишными библиотеками Метапрог совместим.

На заре человечества были наскальные рисунки, потом пошли пиктограммы, иероглифы, и наконец человечество открыло для себя буквы и текст, которым можно выразить вообще всё. И программы в том числе. Теперь Метапрог призывает вернуться к графике.

Широкие массы пользователей почему-то предпочитают гуй, а не консоль. А текстовые языки - это почти то же что консоль, только от программирования.

Программисты из NI не стали этого делать не потому, что они придурки

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

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

Открыть файл диаграммы в Метапроге (а не текстовом редакторе) религия не позволяет?

В качестве нишевого решения — почему бы и нет. Очевидная ошибка автора — это доведение идеи до абсурда и замысел переписать на графике ВСЁ

Все известные мне графические среды программирования именно нишевые, универсальных нет. Метапрог призван заполнить этот пробел.

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

Мне кажется или ТС не может понять, что он придумал велосипед

Чтобы выносить подобные суждения и не выглядеть при этом дураком, надо сначала попробовать и Метапрог, и «велосипед», с которым ты его сравниваешь.

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

Попытался поставить Emscripten, делаю все по инструкции с оф сайта - не работает! Даже дебиан-пакета нету.

Попробуй поставить его себе, когда разберусь с рекурсивными типами - выкачу демку на нуклеар+ и попробуешь скомпилировать веб-версию, ок?

Кстати, Emscripten выдает скрип как js-файл? Не требует ли держать фигню типа nodejs на сервере?

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

Так он (как и я) судит не «поделие», а подход. Когда для знакомства с «поделием» надо с размаху сесть в проприетарную среду разработки с закрытым форматом, виртуалки ещё всякие для неё тащить... Даже мне это уже в деревню Большие Ломы.

А до знакомства с собственно «поделием» при таком подходе у потенциальной ЦА может запросто не дойти (всё та же прозрачная аналогия, да).

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

Не делают они Лабвью на самом себе, скорее всего, потому что изначально вляпались в С++ и им лень переделывать гору кода, если все и так работает и приносит деньги.

Уже 30 с лишним лет делают. Думаю, если бы они увидели, что графический код им легче сопровождать, чем текстовый — давным-давно бы переписали. А уж у них материала для сравнения больше, чем у кого-либо ещё на земном шарике.

Открыть файл диаграммы в Метапроге (а не текстовом редакторе) религия не позволяет?

Смотря, что такое религия. Правило «мой руки перед едой» — это религия? Тут то же самое. Предлагаешь открывать одно непонятно что другим непонятно чем. Прозрачности нет, про-зрач-но-сти.

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

Я уже говорил, что графическое программирование общего назначения не нужно. Это подтверждается многолетней практикой.

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

Кстати, Emscripten выдает скрип как js-файл? Не требует ли держать фигню типа nodejs на сервере?

Не, node.js не требует. Все будет ок. Скомпилю.

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

Ща тут, смотрю, назревает басня «Мартышка и Emscripten». О какой прозрачности можно вообще говорить?

Emscripten — инструмент мощный, но им надо пользоваться с умом и только при крайней необходимости. Например, когда при помощи Emscripten портировали проекты со здоровенной кодобазой, которую нельзя так просто взять и переписать (например, QEMU или libopenmpt), я просто похлопал. А когда вот такоэ… Ну это, не знаю, арбуэ.

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

А ты по ссылкам ходил?

Subtext is an ongoing experiment in radically simplified programming.

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

Вот стопудово, за пределами ЛОРа тебе зададут вопрос «Чем Metaprog отличается от Subtext». Сможешь ответить или снова будешь предлагать запустить лабвью метапрог и сравнить самим?

Другое дело, что с самим Subtext тоже всё достаточно мутно. На сайте я так и не нашёл ни исходников, ни хотя бы ссылок на скачивание. Artamudo, можешь пояснить, оно вообще существует, или это только концепция? (Но даже во втором случае концепция, судя по видео, проработана куда детальнее, чем у метапрога.)

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

P.S. В википедии нашёл следующее:

It is planned to be open software; the license is not yet determined.

Т.е. с программными реализациями у этого мужика из MIT всё так же, как и у Метапрога (если информация не устарела). Зато хотя бы концепция проработана..

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

Не, ну в антиметапроге все будет как надо... Без этих эмскриптенов, чистый ред с кложуроскриптом!

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

Когда для знакомства с «поделием» надо с размаху сесть в проприетарную среду разработки с закрытым форматом, виртуалки ещё всякие для неё тащить...

НА то он и прототип. «Настоящий» Метапрог запустить будет проще.

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

графическое программирование общего назначения не нужно. Это подтверждается многолетней практикой.

Особенно учитывая что на практике ни одной универсальной графической среды программирования (сравнимой по универсальности с Си) еще не было.

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

Что за флаг компилятора -s? Взял из примеров по нуклеару.

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

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

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

Однако все же ради VarfolomeyKote4ka код прототипа открыть стоило:)

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