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)

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

Там чистый Си?

Да.

Никаких багов не будет?

???

Чем отличается от gio?

Низнаю.

Тоже все на ифах, как в нуклеаре?

Нет, там тоже что и в gio.

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

Для коллбеков? Сравни кратко libevent и libuv в примерах использования.

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

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

будем совместно работать над Метапрогом?

Я - нет.

  1. Я не вижу смысла в визуальном программировании вне простых задач.
  2. Я уже упоминал, что для меня схемы в Unreal Engine гораздо понятнее твоих.
  3. У меня на подсознательном уровне отторжение сишки. А вот более высокоуровневые языки заходят норм.
  4. Я искренне люблю текстовые языки для больших и серьёзных поектов. Имхо, всё портит не текст, а говнокод и засилье в отрасли людей, у которых нет искренней любви к программированию.
  5. У меня искренняя любовь к ООП, но без фанатизма. Иногда люблю написать немного функциональщины. Очень ценю декларативность. И я очень сильно люблю Qt и питон.

скриптота появилась из-за сложности программирования непосредственно на Си

А также С++, Java, C# и прочих «серьёзных» языках. Но это касается только средних и больших проектах на «скриптоте». Есть множество «одноразовых скриптов» - написал и выполнил. Никакой компиляции, возни с бибилотеками и прочим геморроем серьёзных проектов. Copy&Paste скрипта и выполнить в 100 раз проще, чем искать исполняемый файл для своей платформы.

Напоминяю, что

Однако я не начну, пока не будет хоть несколько человек, которые сказали «нужно, начинай»

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

Xlib - нет графического ускорения, Glib - заморочки с ООП и раздутость... попробую Nuklear

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

В таком случае Nuklear — не лучший выбор. Во первых, тебе кучу виджетов и окон, те же диалоги сохранения/загрузки, придется самому реализовывать. А в том же гтк все уже есть. Во вторых, все это будет выглядеть «ненативно», т.е. элементы гуя будут не похожи на другие программы в окружении пользователя, впрочем, к примеру, для пользователей блендера это не является проблемой.

Ну вот тебе для выбора еще альтерантивы: IUP http://webserver2.tecgraf.puc-rio.br/iup/, тиклевский Tk можно спокойно юзать из Си.

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

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

Так ты вряд ли сделаешь что-то серьезное.

Есть множество «одноразовых скриптов» - написал и выполнил. Никакой компиляции, возни с бибилотеками и прочим геморроем серьёзных проектов. Copy&Paste скрипта и выполнить в 100 раз проще, чем искать исполняемый файл для своей платформы.

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

Словом, Метарпог решит эту проблему.

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

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

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

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

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

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

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

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

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

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

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

Если гтк все же вкручиваем, то оверхед по нему несем. Ладно, скорее всего, останусь при гтк (хотя нуклеар пощупать попробую).

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

Насколько я понял, больше на Луа, чем Си ориннтирован.

Ну, да, писался с оглядкой на Луа.

Блокнот: http://webserver2.tecgraf.puc-rio.br/iup/examples/tutorial/simple_notepad.c чистый Си, никакого Луа. Может смущать несколько вызовов подряд функции IupSetAttribute(), но в графическом представлении можно задавать атрибуты, а транслятор может из этого сам сделать цепочку вызовов IupSetAttribute().

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

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

Где применяют нуклеар? В играх?

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

С одной стороны, хочется самому много чего делать

В metaprog делай %) А сейчас бери по максимуму готовое.

Где применяют нуклеар?

Хз.

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

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

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

Где применяют нуклеар? В играх?

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

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

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

На данный момент по ним ходять.

Пусть ходит. Посмотрим, во что в итоге это выльется.

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

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

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

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

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

В Лабвью это еще проще

Нет, не проще. Сделать диаграмму хоть на 10 элементов дольше, чем выделить текст на несколько строк, Ctrl+C, Ctrl+V, Enter.

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

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

metaprog
() автор топика

Блин, вот все же это жуткая проблема что схемы эти некомпактные, С как раз таки и любят за то что он мощный, а не такой как COBOL.

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

почему же ты не пишешь библиотеки на своём метапроге? не потому ли что он для такой задачи не подходит а единственное для чего подходит helloworldы которые запутаннее сишного кода в который транслируются в десять раз?

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

почему же ты не пишешь библиотеки на своём метапроге?

Ты вообще почитал тему? Это еще только прототип, на нем ничего серьезного пока еще писать невозможно.

а единственное для чего подходит helloworldы которые запутаннее сишного кода

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

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

ты школьник игроман

Твоя настолько эмоциональная реакция указывает на то, что «школьник игроман» — это ты.

Школьником игроманом быть настолько плохо? Мы с товарищем после школы играли в элиту на спектруме, а когда надоедало, пытались программировать на бейсике и спектрумовском ассемблере.

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

Просто он технофошыст, все что не развивает технологии для него это плохо, такая вот логика.

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

все что не развивает технологии для него это плохо

Такого термина раньше не встречал. Но вроде «технофашизм» — это совсем наоборот https://habr.com/ru/post/395495/ . А если лурк читать, то там вообще всех гуманитариев в биореактор.

ЗЫ: модераторы, почистите тему.

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

Если проанализировать весь его бред, то скорее ПТУшник железнодорожного училища.

P.S. Пью Dr. Pepper, находясь в 4 кварталах от штаб-квартиры оного. Ваше здоровье, господа!

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

скорее ПТУшник железнодорожного училища.

А мне кажется, студент, первокурсник.

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

P.S. Пью Dr. Pepper, находясь в 4 кварталах от штаб-квартиры оного. Ваше здоровье, господа!

Пью водку дома. Ваше здоровье!

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

Лол. Тот Пеппер, что у нас, тот, что в Голландии и тот, что в Штатах, отличаются примерно так же, как C, C++ и C#. Штатовский мягче и слизистую не дерёт.

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

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

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

всего лишь спокойно выразил своё мнение

Не прочитав тему, и не поняв, что это всего лишь прототип?

какие эмоции?

Ты знаком с автором темы и действительно знаешь, что он учащийся школы? Если нет, так какого хера ты его назвал школотой?

дальше прототипа думаю дело не пойдёт

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

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

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

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

Некомпактность компенсируется зумом и прочими графическими плюшками.

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

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

ты понимаешь различие между эмоциями и высказыванием своего мнения
эмоции это когда аааа сволотчи ненавижу вас зачем вы сделали это говнище ааааа говно

Ну ты так и написал автору: ты школота, зачем ты это делаешь. Тут и ненависть и неприятие. Эмоции вместо объективной критики. Тебе ссылку на твой ответ дать или сам найдешь?

он умнее своих одноклассников

Ну ты опять пытаешься оскорбить автора, не зная где он учиться, либо в школе, либо в ПТУ, либо первокурсник в институте. Ты реально знаешь, что еще он школьник?

однако у этой конкретной задумки перспектив нет кроме самоизучения автором программирования

Ну я в этом вполне с тобой согласен.

автор игроман

Еще раз спрошу: это настолько плохо? Я же уже писал, кам мы в школе часами на спектруме играли в элиту.

не первый раз приводит примеры из каких то игрулек

Если ему это помогает, что в этом плохого? Кому-то уточка помогает.

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

Пунктуации, грамматики... нахрена с этим аться морочиться, если и так все понятно?

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

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