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

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

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

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

Придумал то-ли assert, то-ли какой-то убогий статический анализ и радуется как дитя.

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

Red анонсировался в 2011

Ахах, я думал он такой убогий потому что недавно совсем появился, а там уже 10 лет прошло... Ну metaprog уже через пару месяцев его обгонит.

Какой интересный метод набрасывания:

0. Спороть херню
1. Подождать разъяснения
2. goto 0
anonymous ()
Ответ на: комментарий от anonymous

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

А что расширять-то? Где хоть какой-нибудь базис? Ноль \times ноль даёт ноль
Я кроме пространных упоминаний о каких-то терминалах и невнятной маниловщины ничего в упор не вижу.

+1. У него уже просили примеры, но он запетушился с полседствующим самовозгоранием и сливанием.

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

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

Придумал то-ли assert, то-ли какой-то убогий статический анализ и радуется как дитя.

Всё хуже. Он отрицает «матан», но мне интересно, как он это будет без «матана» к этому будет подходить.

Когда пытаешься эти вопросы даже не задать, а слегка на них намекнуть, ответ один — «перестань спамить». Зачем вы мне жестокий мир показываете? Я глобальные проблемы решаю.

«При этом глаза его делались чрезвычайно сладкими и лицо принимало самое довольное выражение; впрочем, все эти прожекты так и оканчивались только одними словами.»

----

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

Да пожалуйста, не жалко. «Ну мечтай, бог с тобой!» (с)

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

все эти прожекты так и оканчивались только одними словами

А это всё оттого, что у Манилова LabView. Вот был бы — и всё могло повернуться совсем иначе!

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

Да, с восприятием реальности у него нешуточные проблемы.

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

Хейт «матана» вообще интересное явление. Вот откуда такое? Со школы? Трактовка цитаток программистов? Жестокий мир слишком жесток, нужна упрощенная модель вселенной? Время идет, а что же я буду делать? Видимо все вместе.

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

Запутался, где какой анонимус, но обращаюсь к тому, кто посоветовал Graphviz

Тем временем в Южнококаинске

Понимание концепции уже более-менее устаканилось. Есть Red как бэкэнд. Есть Graphviz как отрисовщик. Ну и будет какой-то топорный промежуточный IDL с реализацией максимально «в лобешник», из которого будет генериться как DOT-код, так и Red-код.

Вопрос остался только в том, есть ли в Graphviz/Dot возможность использовать подграф как блок/ноду в другом графе. То бишь можно ли нарисовать что-то вроде:

               |              |
[call_node] -> |...subgraph...| -> [other_node...]
               |              |

Если да, то это будет даже удобнее.

rebforce ()

Re: Запутался, где какой анонимус, но обращаюсь к тому, кто посоветовал Graphviz

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

(другой анон)

anonymous ()

Не, это чересчур оверкилл будет. Это ж у ТС каникулы и он может всякой хренью маяться…

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

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

(«третий» anonymous)

он де хуманитарий — шо выхотели :(

и про «недопустимые значения» (я не программист): вроде уже были попытки такое создавать и не получилось?

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

Ага, там ещё в одной теме обсуждают. Пока надыбал только тот момент, что между блоками/кластерами можно создать связь только визуально (через lhead и ltail), а логически всё равно надо цеплять ноду к ноде. Ну что ж…

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

Так ты редактор ваять не будешь? Пока только конвертер кода в модель? Или наоборот?

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

Кстати, как раз этот пример всплывает на https://dreampuf.github.io/GraphvizOnline/

А так да, достаточно compound=true добавить в начало и start -> a0 заменить на start -> a0[lhead=cluster_0]; чтобы увидеть эффект.

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

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

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

так что ты опять выставляешь себя дураком.

Нет, ты, причём по всему треду.

Может, ты не просто дурак, а кое-что похуже:

https://habr.com/ru/post/443466/

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

...

— Просто работы у тебя дурацкие. Работаешь на бездушный бизнес и сгораешь. Есть люди, которые действительно делают что-то новое.

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

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

— Если бы они дали мне свой код на ревью, разнес бы в щепки. Но больше всего на свете я бы хотел оказаться таким, как они. Я в сто раз хуже, чем они. Как высокомерный человек, я ненавижу завидовать, но я завидую страшной и чёрной завистью. Сегодня модно впаривать людям идею, что все от рождения одинаковые, но чёрт, это совсем не так. Я всю взрослую жизнь учусь разрабатывать, но я не Линус Торвальдс и не Дон Сайм.

То, что эти гады существуют, сжигает мою последнюю соломинку. Единственное, что меня спасало — это вера, что проблема не во мне, а в индустрии. Но раз есть Линус, значит я ошибаюсь. Значит, мне не стоило становиться разработчиком. Но разработка цепляет похлеще героина, а я даже курить не могу бросить.

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

он де хуманитарий

Неуч он. На гуманитария тоже учиться надо.

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

Пока что нет. Суть-то задумки в чём:

  1. Есть IDL. По сути описание того, как мы накидали элементы в формочку в этом самом редакторе. То есть список элементов, если пользоваться JSON, будет представлен в виде подобной портянки:
...
"nodes": [
 ...
 {
   "id": "node_100500",
   "type": "call_node",
   "child_of": "node_9000",
   "connected_to": ["node_100501", "node_100502"],
   "contents": "request-file",
   "coords": [666, 1488]
 },
 ...
]
...
  1. Есть модуль, рисующий диаграмму на основании вышеуказанного IDL путём компиляции оного в DOT (координаты идут лесом, ибо у графвиза своя логика).
  2. Есть модуль, конпеляющий тот же IDL в Red.

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

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

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

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

В Метапроге можно будет задавать разные режимы просмотра данных. Целое число, например, можно будет видеть и как число, и как цвет. Массив байтов видеть и как массив байтов, и как строку. И так далее.

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

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

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

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

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

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

Ещё нужно как звук. А структуры — как аккорд.

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

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

Богатая идея, причем во всех смыслах.

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

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

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

Черное, белое, серое... Где какой тип? Ах да, тебе ж плевать какие у тебя там типы, «умный» компиль сам все сделает.

Ждать ли визуализации кода ядра Линукс на твоей системе?

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

Почему бы и нет? Можно будет сделать так, чтобы был нужный звук при наведении мышкой.

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

Ждать ли визуализации кода ядра Линукс на твоей системе?

Ждать ли рабочего хеловорда на твоей системе?

anonymous ()

lunux.org.ru пора переименовывать в metaprog.org.ru

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

Это примеры на лабвью и то не рабочие и корявые.

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

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

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

Здрасьте, Метапрог - не интерпретируемая среда. Метапрог лишь транслирует диаграммы в Си.

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

Чем он транслирует если его нет? Транслирует лабвью. Причем коряво

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

первая буква как бы намекает, что к настоящему он не относится...

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

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

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

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

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

И вот тут я подумал, как же хорошо, что ТС не является по блату или несчатливому случаю сотрудником какого-нибудь редхата. Для всего IT это была бы катастрофа в сотни, если не тысячи поттерингов…

Индустрию IT давно пора хорошенько встряхнуть. Думаю, я и без блата это сделаю.

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

Сложно в 5 классе в редхат работать, даже поблату.

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

Совет: для раскрытия этой благодатной темы лучше открыть отдельный тред, чтобы не засорять разработку metaprog обсуждением перспектив IT. Лично я бы начал с замены самого термина IT на новое и перспективное Graphical Technology!

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

Ты отличаешь скрины Метапрога от Лабвью? Если я сделал не свой проект, а переделал код Лабвью, научив его подцеплять сишные функции, прямо оперировать указателями и транслироваться в Си - то я вообще топовый хакер:) В Лабвью таких возможностей и рядом не валялось.

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

в сотни, если не тысячи поттерингов…

Прикольная единица измерения.

Это надо использовать на code review. «Ваш коммит понижает качество продукта на 4 миллипоттеринга».

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

Дада конечно конечно, поцыэнт. Все так и было, метапрог есть, примите таблеточку.

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

сам себя не похвалишь, никто не похвалит...

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

http://www.stihi-xix-xx-vekov.ru/pushkin742.html

Ты видишь, — продолжал Барков,

Я вмиг тебя избавил,

Но слушай: изо всех певцов

Никто меня не славил;

Никто! Так мать же их в *****

Хвалы мне их не нужны,

Лишь от тебя услуги жду —

Пиши в часы досужны!

Возьми задорный мой гудок,

Играй им как попало!

Вот звонки струны, вот смычок,

Ума в тебе не мало.

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