LINUX.ORG.RU

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

 , , ,


4

3

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

FAQ

1. Где скачать?

Релиза еще не было. Идет разработка, темы посвящены ей. Есть сделанный на LabVIEW прототип (его работа показана в примерах).

2. Почему не открыт код LabVIEW-прототипа Метапрога?

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

3. Почему не Дракон, MIT App Inventor, Unreal Blueprints?

Эти системы идеологически ближе к текстовому программированию, чем к визуальному. От того что куски текстового кода обведешь в рамочки, программирование не станет графическим. LabVIEW в этом плане куда основательнее, там вообще полный отрыв от текстового кодинга. Только блоки и их взаимосвязи.

4. Чем плохи LabVIEW или MyOpenLab?

LabVIEW пропиетарный, а MyOpenLab - хоть и опенсорсный, но какой-то недоделанный (пытался у себя запустить - выдало джава эксепшоны). Да-да, опенсорсный «клон» LabVIEW написанный на джаве! LabVIEW хотя бы на C++, а это все же меньшее зло. Обе эти системы даже не сделаны «сами на себе» в графике. Они даже не пытаются претендовать на универсальную замену всем текстовым языкам, хотя LabVIEW могло бы, если бы не тупость копирастов. Эти системы написаны на текстовых языках, их код (даже если б LabVIEW был опенсорсным) невозможно редактировать, ни разу не обращаясь к текстовым языкам. Метапрог изначально предполагает полный отрыв от текста и текстовых языков, за исключением Си как бэкенда. И то пользователям никогда не придется иметь дело с текстовым Си за исключением блоков сишных вставок (для особых случаев типа арифметических операций, ассемблерных вставок итп).

5. Почему как бэкенд выбран именно Си?

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

6. В Си указатели и ручное управление памятью. Это же так сложно!

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

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

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

8. Почему в Метапроге будут предпочитаться бинарные форматы и чем это лучше?

Бинарные форматы - это быстро и просто. Будут стандартные функции сериализации-десериализации всех типов в бинарный формат. В Лабвью есть такой функционал и я его все время использую - если не менять тип, то все работает как часы.

http://zone.ni.com/reference/en-XX/help/371361R-01/glang/flatten_to_string/

http://zone.ni.com/reference/en-XX/help/371361R-01/glang/unflatten_from_string/

Что-то подобное будет и в Метапроге. При открытом коде никаких сложностей с чтением бинарных файлов не будет.

9. А как будет обеспечиваться совместимость со старыми файлами, сетевыми протоколами итп, если будет изменен тип?

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

Примеры

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

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

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

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

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

https://pastebin.com/SWJJwvvC

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

Скрины подфункций в следующем примере.

Тот же пример, но покрасивее

Что можно сделать для большего удобства? Убрать инициализацию, подвязку коллбэка на закрытие окна и главную петлю гтк в подддиаграму «главное окно»:

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

На сей раз не поленюсь сделать скрины и объяснить их суть.

В подфункциях есть три вида контейнеров с данными: константа (стала, constant), контроль и индикатор (сверху вниз):

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

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

Сама подфункция «главное окно»:

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

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

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

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

Подфункция для подцепки асинхронных функций:

https://i.postimg.cc/3r0rYVCS/image.png

Добавить объект в контейнер:

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

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

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

Делаем лейбл (и любой другой нужный виджет) прокручиваемым:

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

Как видим, сишные функции успешно уходят под капот и программировать в графике становится намного проще. Из этого получается такой код:

https://pastebin.com/16bq1Jbs

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

Каст типов и тактическая победа над нуль-терминированными строками

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

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

Беззнаковое 32-битное, означающее размер массива (темно-синий провод) кастуется в знаковое 32-битное (светло-синие провода и пустая константа, задающая тип). Функция gtk_text_buffer_set_text в качестве размера строки берет беззнаковое, а не знаковое, как принято - видимо, чтобы через "-1" говорить, что строка нуль-терминированная. Но из-за этого вместо 4 гб строки туда можно подать лишь 2 гб - аж в 2 раза меншье! Что за люди?

Тем не менее, с нуль-терминированными функциями в текстовых полях покончено - и это победа!

https://pastebin.com/hQRMSZ1s

Также там был изменен текст. В остальном пример соответствует скринам выше.



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

Ухх, сколько говна я пропустил… ТС, когда уже код метапрога покажешь? Если он уже был, скиньте кто-нибудь пожалуйста.

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

Один вот хочет на реболе и реде делать «визуальную среду» (где внутри «графических» блоков тектовые выражения с кавычками, типа title=«dick»). Хочешь ему помочь?))

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

Если ты по срокам на код Метапрога - то еще, наверное, пару месяцев.

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

Какя же классная Лабвью вещь, позволяет на ходу так экспериментировать.

Хм, любой нормальный ЯП позволяет.

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

Он, видимо, опечатался. Экспериментировать позволяет, может, любой ЯП, но так экскрементировать - только лабвью.

P.S. Я до этой темы и не подозревал, что такую специализированную dataflow-систему, как лабвью, какой бы жуткой она ни была, можно вот так вот резко понизить в классе такими вот извращениями.

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

Даже на ассемблере можно экспериментировать (Линус в свое время так и делал). Только в Лабвью это намного проще и нагляднее.

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

Так что у тебя за «болгенос» на телефоне? Чем-то еще похвастаться можешь? Отвечай, будет что цитировать для твоей секции в Лурке.

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

P.S. ЛОР должен знать своих героев. Ну а на случай, если юродивые начнут там что-то править, вот версия из Wayback Machine.

Вы что же это решили удовлетворить желаниям автора — и досрочно сделать его знаменитым? Как Попова? Это ЛОР разрушает отечественный опен-сорц. Люди становятся знаменитыми до того, как что-то сделают и мотивация падает до нуля.

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

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

Обои скучные?

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

Графическое ide для текстовых языков.

Уже были у людей какие-то подвижки. Пример: https://habr.com/ru/post/127288/

В CryEngine есть такая штука, Flow Graph называется.

https://www.cryengine.com/news/introduction-to-flow-graph#

Дизайнеры могут накидать логику в этих самых блоках. Никакого Lua, никакого C++. Всё это существует со времён второго Crysis.

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

Да. А какое у них население. К тому же твоя разработка к естественному языку не привязана - китайцам как раз хорошо бы было. А ты их тором.

Только тогда блоки должны не связываться нитями, а складываться как в маджонге.

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

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

автор бугуртос постил и ничего - новости по ней даже иногда выходят, deadbeef опять же

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

ЧТД. За что угодно цепляешься, лишь бы по теме не писать. Не отвлекайся от своей Мегапроги.

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

Новости выходят в соответствующей группе (форум/список рассылки) на так нелюбимом топикстартером инглише (ибо сообщество весьма и весьма международно уже) и дублируются на 4PDA.

Ну а к ЛОРу, в свою очередь, она имеет слабое отношение. Это даже не Андроид же. Хотя с Firefox OS определённое родство имеет. Единственное принципиальное отличие от болгеноса – аффтары донорской прошивки, которых я люблю от случая к случаю троллить, свой код официально закрыли (и это уже повод им поводить по губам, ибо Firefox OS, из которой они свою ОС склепали, была открытой). В любом случае, не-андроидных прошивок с возможностью на лету автономно менять IMEI и TTL для раздачи вайфая по миру на пальцах пересчитать можно, так что кому действительно надо - тот и так найдёт.

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

Россия в любой момент может отпасть. Я бы эту перспективу учел.

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

не-андроидных прошивок с возможностью на лету автономно менять IMEI

Ну ты загнул. Я тогда вообще делаю прошивки для марсоходов, на Лабвью:) Ссылку в студию!

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

Зачем? Ты же контрибутить туда неспособен, там весь юзерспейс на JS. И у тебя ж всё равно таких денег нет, чтобы 8110 купить. И не будет никогда. Ибо от таких, как ты, я на 4PDA и других ресурсах уже начитался что-то вроде «пачиму так дораха?»

rebforce
()

Кстати, rebforce, пока ты раскачиваешься там с реболом, у посонов на лиспе всё уже есть. Оказывается есть такая вот https://openmusic-project.github.io/om7/ штука, у них сделано именно так как хочет ОП — лисп функции представлены в виде блоков, они соединяются проводками, наподобие электрической схемы, есть даже 3д визуализация и интерактивная обучалка встроенная (http://support.ircam.fr/docs/om/om6-manual/co/Tutorials.html). И главное это не только про музыку, так как у них же на сайте написано:

OM may be used as a general purpose functional/object/visual programming language. Existing CommonLisp/CLOS code can easily be used in OM, and new code can be developed in a visual way.

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

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

Как пионизд/синтезаторщик, одобряю, но в CL не въезжал ещё, только в пиколисп чуток. Так что потыкай, интересно будет сравнить.

Однако моё убеждение состоит в том, что dataflow-софт для электрических схем и похожего — это не совсем то, что нужно для метапрога здорового человека. В идеале, конечно, заюзать бы что-то наподобие UML… Но через подобный показанному этап тоже пройти необходимо, это да.

Надо пробовать, короче.

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

Я видел в треде, что у тебя несколько иной (очень высокоуровневый) взгляд на метапрог, но вот именно для задач оп-а этих четырёх тредов, не будь он пряником, опенмьюзик подошел бы в самый раз. Код открыт, — вперёд и с песней допиливать то, чего не хватает, — например, тот же выхлоп в виде сишного/паскалевского/гошного кода.

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

P.S. Я до этой темы и не подозревал, что такую специализированную dataflow-систему, как лабвью, какой бы жуткой она ни была, можно вот так вот резко понизить в классе такими вот извращениями.

Почему сразу понизить в классе? Найти новую область применения. Это само по себе не порок.

Другое дело, что это не так делается.

Я бы на месте автора сначала бы сконцентрировался на создании полностью открытого аналога лабвью (раз уж она ему так нравится), тем более, что прототип в виде MyOpenLab имеется. Чтобы работала, логику рисовала, и без эксепшонов.

Потом, если хватит запала — кодогенератор на Си. Сделать его тщательно, чтобы все блоки компилировались. Проверить результат кодогенерации сишными компиляторами хотя бы на паре популярных архитектур (x86 и ARM, например). И разумеется, чтобы никаких предупреждений. По итогам этого этапа и IDE наверняка придётся подправить.

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

При этом на каждом из трёх этапов у автора имелся бы полезный хоть для кого-то (на первом, я думаю, очень многие скажут спасибо и возможно, помогут) и главное, ПРОВЕРЯЕМЫЙ результат. На любом этапе можно достойно остановиться. Если, скажем, в начале второго или в начале третьего этапа автор разочаруется в конечной цели — будет не так обидно. Одни только лавры автора открытого аналога лабвью, если её написать нормально, можно пожинать всю оставшуюся жизнь.

Но автор решил действовать методом обучения щенка плаванию. Бросили в воду: выплывет — не выплывет. Поскольку в роли щенка сам автор, это его личное дело, конечно, но когда это вырождается в 80+ страниц на ЛОРе — я начинаю слегка понимать тех анонимусов (сам троллить не буду, не моё это).

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

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

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

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

Здесь же пока ничего, кроме сомнительной концепции и кучки сырых артефактов пока нет.

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

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

А-аа! Вот про что речь...

Понял.

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

Кто ж против, только сам ТС. Для него ж ничего другого, кроме Си с лабвью, не существует.

P.S. А CL вообще как по рантайму? Сильно громоздок? Просто вот что мне в PicoLisp зашло - так это весьма компактный рантайм, но при этом с кучей «батареек». Компактнее и при этом напичканней только у ребола с редом, ага.

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

На компактность именно у SBCL можно не надеяться, речь идёт о десятках мегабайт для хелловрода. Может быть и есть способы получения итогового образа, в котором есть только необходимое, но я этим никогда не занимался.

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

Попытался запустить файл "./om7-alpha " - и вот что:

ERROR: Unable to load any of the alternatives:
   ("libsdif.so" "libsdif.so")

Что бы мне не дали как опенсорсную замену Лабвью - «як не срачка так болячка».

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

Я бы на месте автора сначала бы сконцентрировался на создании полностью открытого аналога лабвью (раз уж она ему так нравится), тем более, что прототип в виде MyOpenLab имеется. Чтобы работала, логику рисовала, и без эксепшонов.

Потом, если хватит запала — кодогенератор на Си. Сделать его тщательно, чтобы все блоки компилировались. Проверить результат кодогенерации сишными компиляторами хотя бы на паре популярных архитектур (x86 и ARM, например). И разумеется, чтобы никаких предупреждений. По итогам этого этапа и IDE наверняка придётся подправить.

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

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

Так самое главное, что с таким подходом не за горами уже чатик через тор и даже раскрутка Метапрога уже виднеется на горизонте.

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

На компактность именно у SBCL можно не надеяться, речь идёт о десятках мегабайт для хелловрода.

Вот-вот, а мне тут рассказывают какой же я динозавр со своей сишкой. Делать нормальный рабочий софт, много не жрущий - это же так сложно! Надо побольше абстракций, объектных моделей, плюсов, джав, джаваскриптов, реболов, не марать же белы рученьки о пошлый низкоуровневый Си с указателями и NULLами?

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

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

ты в первую очередь должен быть заинтересован в его однозначном описании

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

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

Шизофрения на марше:

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

Вот-вот, а мне тут рассказывают какой же я динозавр со своей сишкой.

не марать же белы рученьки о пошлый низкоуровневый Си с указателями и NULLами?

Дык ты и не мараешь, ты только на лабвью пишешь, которое как раз и является ярким представителем вот этого пассажа:

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

Тем временем эти наши джаваскрипты с абстракциями и объектными моделями прекрасно себя чувствуют на Qualcomm 205 с 512 МБ оперативки, а унылая тормозная джава - вообще на 256 (Xiaomi Qin 1s).

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

Кстати, скажи для верности, флоаты в сишке не катят на логику?

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

Готовый Метапрог будет

Когда будет, тогда и посмотрим. Ты уже 4 треда воздух сотрясаешь своими лозунгами, никто на них не ведется.

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

Не существует.

Куда помогать-то тогда? Или ты уже признал, что потерпишь фиаско в своих наполеоновских планах, подвинуть всю IT-индустрию своим поделием?

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

ты только на лабвью пишешь, которое как раз и является ярким представителем вот этого пассажа

Это одна из причин почему я его хочу заменить.

Тем временем эти наши джаваскрипты с абстракциями и объектными моделями прекрасно себя чувствуют на Qualcomm 205 с 512 МБ оперативки, а унылая тормозная джава - вообще на 256 (Xiaomi Qin 1s).

А на ардуино джава рантайм пихнуть слабо?

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

Флоаты
логический тип

Рано тебе еще в программирование, иди основы информатики читай, неуч.

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

Кстати, я поэкспериментировал. Годятся. Если значение «0» или даже «0.1-0.1» - идет «ложь», как в целых. Подводные камни есть?

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

Это одна из причин почему я его хочу заменить.

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

А на ардуино джава рантайм пихнуть слабо?

Хоть бы свой быдлохабр для начала почитал, неуч. А так - вообще не вопрос, хоть на ATMega8. И да, JRE даже в чипе твоей SIM-карты работает. JavaCard называется. Так что обтекай молча со своими говносхемками.

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

А на ардуино джава рантайм пихнуть слабо?


JavaME

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