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

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

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

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

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

Мания величия? Не знаю, лечится ли, но точно купируется. Живительными люлями.

По крайней мере, проектов точно будет куча

И ни один из них не будет работоспособным.

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

Да переписывай уже и сам тор, чоужтам.

P.S. **здос воскрес. Воистину воскрес (в этой теме)…

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

И ни один из них не будет работоспособным.

Ахах, вот это аутотренинг %) Скоро уже будет tor-чат, metaprog на gtk3, ну и я начну переносить свой sladeb Моя слака!

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

Ты сделал sladeb? Чтоб дебиановские пакеты на слаку ставить? Кста, расскажи кратко, чем слака лучше. Говорили что она мертва - брехня?

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

Ахах, вот это аутотренинг %)

Это объективная реальность. А твои «ахах» выдают в тебе школоло-студололо младших курсов. Собственно, равно как и шлакварь вместо дистрибутива.

Моя слака!

Однако, судя по скриншоту, у тебя опечатка. Вместо «л» следует читать «р».

metaprog на gtk3

Эх… Чем хорошая библиотека, написанная профессиональными, в отличие от вас, программистами, заслужила такое издевательство?

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

Ты сделал sladeb? Чтоб дебиановские пакеты на слаку ставить?

Да.

Кста, расскажи кратко, чем слака лучше.

Это разные дистры, тут от задач зависит, если Debian устраивает то переходить смысла нету.

Говорили что она мертва - брехня?

Живая, пакеты хорошо обновляются, программы есть.

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

Однако, судя по скриншоту, у тебя опечатка. Вместо «л» следует читать «р».

Твои шутки выдают в тебе школоло-студололо младших курсов! Я то ссылку не ради скрина кидал.

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

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

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

пакеты хорошо обновляются, программы есть.

4.2. NodeJS нет вообще, хромиума тоже нет, Pure Data нет, MilkyTracker нет, Termite нет, Sway нет, фокс - только 60ESR… Продолжать можно бесконечно.

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

На Perl, на С я поленился, но зря, если бы на ней писал - вышло бы быстрее, да и работало бы тоже быстрее %) А теперь уже лень. На metaprog'e перепишу потом.

Как со стабильностью? Как часы?

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

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

Я бы сказал, что у меня стоит, а у тебя нет, но здесь не медицинский форум.

А так - читай тему, уже было. Нет, не винда.

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

Все у меня стоит, если ты про письку. А напомнить какая у тебя ОС корона с головы упадет?:)

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

NodeJS нет вообще

Есть же, во первых у alienbob, во вторых из офф.сайта легко поставить. Да и сейчас же модно в Docker все хранить, вот его поставь лучше.

хромиума

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

Pure Data нет

Есть собранный и в виде слакбилда.

Остальное не стал смотреть, я уверен даже что все есть.

фокс - только 60ESR…

В Debian так же, что тебе мешает поставить с офф.сайте его?

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

На рабочем ноуте - макось 10.14.4 (доведённая до человеческого состояния при помощи Homebrew). На личном - арч.

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

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

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

Ну Mac это видно по шрифтам. А в Arch не могут нормально собрать Geany, плюс у них уже 2-3 месяц сломанный Thunar, все потому что им хочется обязательно изменить флаги сборки дефолтные. Панель тоже в Xfce4 сломали.

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

Метапрог был впервые анонсирован публично в 2019, месяц назад. Посмотрим, что будет через 8 лет.

Что будет, довольно очевидно. Ты станешь (уже становишься) знаменитым — тебя будут упоминать периодически как на ЛОРе, так и за его пределами. Примерно как Попов и Бабушкин, ну или тот с кругом.

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

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

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

Кому нужен Geany, если есть Vim 8?

Кому нужен Thunar, если есть баш (на самый крайний случай - MC)?

Только феерическим неосиляторам наподобие вас с топикстартером.

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

На офф.сайт надо лезть только для фокса, и то если нужен не ESR именно, и то это дает тебе плюс, у тебя не будет посредников для обновлений, и ты сам будешь контролировать этот процесс. А остальное через пакетные менеджеры, только нужно установить прокаченные для удобства: slackpkg+, sbopkg.

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

Кому нужен Geany, если есть Vim 8?

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

Кому нужен Thunar, если есть баш (на самый крайний случай - MC)?

Тем кто ценит свое время, и тем кто работает хоть как то с картинками и видео.

Только феерическим неосиляторам наподобие вас с топикстартером.

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

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

Мания величия?

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

И ни один из них не будет работоспособным.

Что ж, давай меряться не письками, а работоспособными проектами.

Да переписывай уже и сам тор, чоужтам.

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

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

Для кого то это минус, я не спорю. Для меня - плюс.

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

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

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

Вообще-то я не из таких. И при чём здесь Лёня вообще?

в тексте читать пробовал - завал.

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

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

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

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

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

Винду тоже можно довести до более-менее человеческого состояния (если 7, а не 10), кстати еще стоит на втором ноуте, плюс виртуалки. На винду много софта есть, и хоть Вайн за последние годы сильно вырос, еще не 100% софта работает на нем как часы. Так что иметь винду хр или 7 на виртуалках и втором компе еще оправдано практикой. Но макось-то зачем? Что на ней-то есть незаменимого?

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

У Geany возможностей больше

Бред. Если ты не умеешь использовать все возможности современных Vim, то это не значит, что у Geany оных больше. Я пользовался раньше Geany очень долгое время, так что знаю, о чём говорю. А вот ты — нет.

плюс там адекватный интерфейс

На ущербных клавах макбуков и прочих современных ноутов адекватнее интерфейса Vim нет ничего.

У меня долгое время была OpenBSD с DWM и консольщиной, все очень красноглазо консольщиной

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

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

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

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

В Slackware это вписывается просто

Я не спорю с этим. Но плюсом это точно не может являться. Ни объективным, ни даже субъективным. Субъективно это может быть безразличным («всё равно с сайта ставлю») — да. Но какие плюсы это даёт? Никаких.

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

Бред.

Оуу нет, это я пользовался Vim долгое время, а ты даже плагинов к Geany не ставил наверное. Ну у vim даже нельзя цвет для css:background-color выбрать, это тупо текстовый редактор. У Geany конечно нет нормальных плагинов для автодополнения какого нибудь питона, но она удобная, для С вообще очень хорошо подходит, даже автокомплит адекватный получается, на vim ты подобного не добьешься с тем же удобством.

На ущербных клавах макбуков и прочих современных ноутов адекватнее интерфейса Vim нет ничего

Сочувствую, но я привык к нормальному пека.

Ну так вали на винду, что ты здесь забыл?

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

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

У Geany возможностей больше

Аж хихикнул.

Это уже совсем толсто.

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

Ну хоть не про «специальные»

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

Ну капец.

Во-первых, языки, на которых неудобно кодить без автокомплита, ущербны сами по себе. Все эти си, сиплясплясы, жабы, сишарпы… Долго не понимал, кстати, почему Android Studio создали на базе тормозной унылой IntelliJ IDEA. Да потому что иначе, без автокомплита, этим трэшем, где каждый чих надо в класс оборачивать, пользоваться вообще невозможно! Хорошо хоть, последнее время вместо жабы Kotlin форсят, там всё гуманнее. Есть ещё Groovy, используем для автоматизации. Но тем не менее, с компактностью и выразительностью, скажем, JS/ES6, а тем более того же реда (который, кстати, уже портируют на Андроид) это всё не сравнится.

Во-вторых, кем же надо быть, чтоб выбирать IDE по наличию… колорпикера?! Блджад, когда я в вебдеве работал, колорпикер у меня был всегда под рукой открыт в браузерных DevTools. Geany-шный юзал пару раз всего. На кой чёрт это вообще надо тащить в среду разработки, если это не визуальная RAD-система?

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

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

у vim даже нельзя цвет для css:background-color выбрать

Знающего человека видно за версту.

Пять секунд спросить у гугла, есть ли расширение с ключевыми словами 'css' и 'color' для vim. Нет, главное уверенно ляпнуть, все же поверят.

И вот так во всём.

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

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

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

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

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

Во-вторых, кем же надо быть, чтоб выбирать IDE по наличию… колорпикера?!

Опять шиза, я вообще не говорил ничего такого. Просто vim никогда не сможет в графику нормально, в сворачиваемые блоки кода, в дерево файлов, разделение окна... Сейчас опять мне кто то скажет что это в vim есть, но пользоваться этим невозможно ИМХО. Разве что разделениями.

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

Я как раз понял то, что ты в очередной раз продемонстрировал незнание предмета. А теперь привычно юлишь.

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

Окей, есть CSS файл:

body { 
  background-color: #FF0000;
}
Можно в VIM выделить #FF0000 нажать что нибудь, и что бы появился диалог выбора цвета с пипеткой?

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

В принципе есть, можно же внешнюю программу запустить. Ну ладно, именно ТУТ я реально ошибся.

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

А что расширять-то?

Metaprog же %) Как emacs, только графический.

Это ни о чем. Не прикидывайся, я в настолько тупых людей не верю.

Ты ведь не случайно проигнорировал основую часть вопроса, да?

Где хоть какой-нибудь базис?

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

Я понимаю что треды это текст, и ты не осилишь, но в metaprog будет интерактивное обучение, там ты все поймешь!

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

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

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

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

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

Вы друг друга стоите.

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

Полнота по Тьюрингу (или даже https://ru.wikipedia.org/wiki/Теорема_Бёма_—_Якопини которая мне больше нравится) - это сферическая абстракция в вакууме, если нет возможности обращаться к системным вызовам и прочим готовым библиотекам.

можно вывезти человека из деревни…

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